diff options
97 files changed, 292 insertions, 108 deletions
diff --git a/core/color.cpp b/core/color.cpp index b708f15d6..a0568d26e 100644 --- a/core/color.cpp +++ b/core/color.cpp @@ -396,7 +396,7 @@ String Color::to_html(bool p_alpha) const { txt += _to_hex(g); txt += _to_hex(b); if (p_alpha) - txt += _to_hex(a); + txt = _to_hex(a) + txt; return txt; } diff --git a/core/io/stream_peer.cpp b/core/io/stream_peer.cpp index fc00c2688..f6c4948fc 100644 --- a/core/io/stream_peer.cpp +++ b/core/io/stream_peer.cpp @@ -375,18 +375,18 @@ void StreamPeer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_big_endian", "enable"), &StreamPeer::set_big_endian); ClassDB::bind_method(D_METHOD("is_big_endian_enabled"), &StreamPeer::is_big_endian_enabled); - ClassDB::bind_method(D_METHOD("put_8", "val"), &StreamPeer::put_8); - ClassDB::bind_method(D_METHOD("put_u8", "val"), &StreamPeer::put_u8); - ClassDB::bind_method(D_METHOD("put_16", "val"), &StreamPeer::put_16); - ClassDB::bind_method(D_METHOD("put_u16", "val"), &StreamPeer::put_u16); - ClassDB::bind_method(D_METHOD("put_32", "val"), &StreamPeer::put_32); - ClassDB::bind_method(D_METHOD("put_u32", "val"), &StreamPeer::put_u32); - ClassDB::bind_method(D_METHOD("put_64", "val"), &StreamPeer::put_64); - ClassDB::bind_method(D_METHOD("put_u64", "val"), &StreamPeer::put_u64); - ClassDB::bind_method(D_METHOD("put_float", "val"), &StreamPeer::put_float); - ClassDB::bind_method(D_METHOD("put_double", "val"), &StreamPeer::put_double); - ClassDB::bind_method(D_METHOD("put_utf8_string", "val"), &StreamPeer::put_utf8_string); - ClassDB::bind_method(D_METHOD("put_var", "val"), &StreamPeer::put_var); + ClassDB::bind_method(D_METHOD("put_8", "value"), &StreamPeer::put_8); + ClassDB::bind_method(D_METHOD("put_u8", "value"), &StreamPeer::put_u8); + ClassDB::bind_method(D_METHOD("put_16", "value"), &StreamPeer::put_16); + ClassDB::bind_method(D_METHOD("put_u16", "value"), &StreamPeer::put_u16); + ClassDB::bind_method(D_METHOD("put_32", "value"), &StreamPeer::put_32); + ClassDB::bind_method(D_METHOD("put_u32", "value"), &StreamPeer::put_u32); + ClassDB::bind_method(D_METHOD("put_64", "value"), &StreamPeer::put_64); + ClassDB::bind_method(D_METHOD("put_u64", "value"), &StreamPeer::put_u64); + ClassDB::bind_method(D_METHOD("put_float", "value"), &StreamPeer::put_float); + ClassDB::bind_method(D_METHOD("put_double", "value"), &StreamPeer::put_double); + ClassDB::bind_method(D_METHOD("put_utf8_string", "value"), &StreamPeer::put_utf8_string); + ClassDB::bind_method(D_METHOD("put_var", "value"), &StreamPeer::put_var); ClassDB::bind_method(D_METHOD("get_8"), &StreamPeer::get_8); ClassDB::bind_method(D_METHOD("get_u8"), &StreamPeer::get_u8); @@ -418,7 +418,6 @@ void StreamPeerBuffer::_bind_methods() { ClassDB::bind_method(D_METHOD("duplicate"), &StreamPeerBuffer::duplicate); ADD_PROPERTY(PropertyInfo(Variant::POOL_BYTE_ARRAY, "data_array"), "set_data_array", "get_data_array"); - } Error StreamPeerBuffer::put_data(const uint8_t *p_data, int p_bytes) { diff --git a/core/object.h b/core/object.h index 75800acaa..8306b5a35 100644 --- a/core/object.h +++ b/core/object.h @@ -86,6 +86,7 @@ enum PropertyHint { PROPERTY_HINT_PROPERTY_OF_SCRIPT, ///< a property of a script & base PROPERTY_HINT_OBJECT_TOO_BIG, ///< object is too big to send PROPERTY_HINT_MAX, + // When updating PropertyHint, also sync the hardcoded list in VisualScriptEditorVariableEdit }; enum PropertyUsageFlags { diff --git a/core/ustring.cpp b/core/ustring.cpp index 1be828c44..1fce4f182 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -686,6 +686,9 @@ Vector<String> String::split_spaces() const { int from = 0; int i = 0; int len = length(); + if (len == 0) + return ret; + bool inside = false; while (true) { diff --git a/doc/classes/@GDScript.xml b/doc/classes/@GDScript.xml index 9b7384953..b9694d0e6 100644 --- a/doc/classes/@GDScript.xml +++ b/doc/classes/@GDScript.xml @@ -182,14 +182,14 @@ <method name="clamp"> <return type="float"> </return> - <argument index="0" name="val" type="float"> + <argument index="0" name="value" type="float"> </argument> <argument index="1" name="min" type="float"> </argument> <argument index="2" name="max" type="float"> </argument> <description> - Clamps [code]val[/code] and returns a value not less than [code]min[/code] and not more than [code]max[/code]. + Clamps [code]value[/code] and returns a value not less than [code]min[/code] and not more than [code]max[/code]. [codeblock] speed = 1000 # a is 20 @@ -466,7 +466,7 @@ </argument> <argument index="1" name="to" type="float"> </argument> - <argument index="2" name="value" type="float"> + <argument index="2" name="weight" type="float"> </argument> <description> Returns a normalized value considering the given range. @@ -589,10 +589,10 @@ <method name="nearest_po2"> <return type="int"> </return> - <argument index="0" name="val" type="int"> + <argument index="0" name="value" type="int"> </argument> <description> - Returns the nearest larger power of 2 for integer [code]val[/code]. + Returns the nearest larger power of 2 for integer [code]value[/code]. [codeblock] nearest_po2(3) # returns 4 nearest_po2(4) # returns 4 diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml index 99c283e59..9af81ae29 100644 --- a/doc/classes/@GlobalScope.xml +++ b/doc/classes/@GlobalScope.xml @@ -45,6 +45,7 @@ [JSON] singleton </member> <member name="JavaScript" type="JavaScript" setter="" getter=""> + [JavaScript] singleton </member> <member name="Marshalls" type="Reference" setter="" getter=""> [Marshalls] singleton diff --git a/doc/classes/AABB.xml b/doc/classes/AABB.xml index 574573cb6..c288e2a0c 100644 --- a/doc/classes/AABB.xml +++ b/doc/classes/AABB.xml @@ -7,6 +7,7 @@ AABB consists of a position, a size, and several utility functions. It is typically used for fast overlap tests. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/math/index.html </tutorials> <demos> </demos> diff --git a/doc/classes/Animation.xml b/doc/classes/Animation.xml index 8de86fef1..104cdb114 100644 --- a/doc/classes/Animation.xml +++ b/doc/classes/Animation.xml @@ -8,6 +8,7 @@ Animations are just data containers, and must be added to odes such as an [AnimationPlayer] or [AnimationTreePlayer] to be played back. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/animation/index.html </tutorials> <demos> </demos> diff --git a/doc/classes/AnimationPlayer.xml b/doc/classes/AnimationPlayer.xml index 46602911d..4baef0a7f 100644 --- a/doc/classes/AnimationPlayer.xml +++ b/doc/classes/AnimationPlayer.xml @@ -7,6 +7,8 @@ An animation player is used for general purpose playback of [Animation] resources. It contains a dictionary of animations (referenced by name) and custom blend times between their transitions. Additionally, animations can be played and blended in different channels. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/step_by_step/animations.html + http://docs.godotengine.org/en/3.0/learning/features/animation/index.html </tutorials> <demos> </demos> diff --git a/doc/classes/AudioServer.xml b/doc/classes/AudioServer.xml index afeeae02d..c078359c1 100644 --- a/doc/classes/AudioServer.xml +++ b/doc/classes/AudioServer.xml @@ -7,6 +7,7 @@ AudioServer is a low level server interface for audio access. It is in charge of creating sample data (playable audio) as well as its playback via a voice interface. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/audio/audio_buses.html </tutorials> <demos> </demos> diff --git a/doc/classes/AudioStream.xml b/doc/classes/AudioStream.xml index 430d06db6..7de0cb91f 100644 --- a/doc/classes/AudioStream.xml +++ b/doc/classes/AudioStream.xml @@ -7,6 +7,7 @@ Base class for audio streams. Audio streams are used for music playback, or other types of streamed sounds that don't fit or require more flexibility than a [Sample]. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/audio/audio_streams.html </tutorials> <demos> </demos> diff --git a/doc/classes/AudioStreamPlayer.xml b/doc/classes/AudioStreamPlayer.xml index 109b2d986..219afb211 100644 --- a/doc/classes/AudioStreamPlayer.xml +++ b/doc/classes/AudioStreamPlayer.xml @@ -8,6 +8,7 @@ </description> <tutorials> http://docs.godotengine.org/en/latest/learning/features/audio/index.html + http://docs.godotengine.org/en/3.0/learning/features/audio/audio_streams.html </tutorials> <demos> </demos> diff --git a/doc/classes/AudioStreamPlayer2D.xml b/doc/classes/AudioStreamPlayer2D.xml index 5996038f9..fc4f4b34c 100644 --- a/doc/classes/AudioStreamPlayer2D.xml +++ b/doc/classes/AudioStreamPlayer2D.xml @@ -8,6 +8,7 @@ </description> <tutorials> http://docs.godotengine.org/en/latest/learning/features/audio/index.html + http://docs.godotengine.org/en/3.0/learning/features/audio/audio_streams.html </tutorials> <demos> </demos> diff --git a/doc/classes/AudioStreamPlayer3D.xml b/doc/classes/AudioStreamPlayer3D.xml index ec855cdff..49d572387 100644 --- a/doc/classes/AudioStreamPlayer3D.xml +++ b/doc/classes/AudioStreamPlayer3D.xml @@ -8,6 +8,7 @@ </description> <tutorials> http://docs.godotengine.org/en/latest/learning/features/audio/index.html + http://docs.godotengine.org/en/3.0/learning/features/audio/audio_streams.html </tutorials> <demos> </demos> diff --git a/doc/classes/BakedLightmap.xml b/doc/classes/BakedLightmap.xml index 0c28e989e..e193b8d89 100644 --- a/doc/classes/BakedLightmap.xml +++ b/doc/classes/BakedLightmap.xml @@ -5,6 +5,7 @@ <description> </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/3d/baked_lightmaps.html </tutorials> <demos> </demos> diff --git a/doc/classes/CanvasItem.xml b/doc/classes/CanvasItem.xml index f7a71d7ea..ed53bc85b 100644 --- a/doc/classes/CanvasItem.xml +++ b/doc/classes/CanvasItem.xml @@ -11,6 +11,8 @@ Ultimately, a transform notification can be requested, which will notify the node that its global position changed in case the parent tree changed. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/2d/2d_transforms.html + http://docs.godotengine.org/en/3.0/learning/features/2d/custom_drawing_in_2d.html </tutorials> <demos> </demos> diff --git a/doc/classes/CanvasLayer.xml b/doc/classes/CanvasLayer.xml index 1d924b6ea..625fa217c 100644 --- a/doc/classes/CanvasLayer.xml +++ b/doc/classes/CanvasLayer.xml @@ -7,6 +7,8 @@ Canvas drawing layer. [CanvasItem] nodes that are direct or indirect children of a [code]CanvasLayer[/code] will be drawn in that layer. The layer is a numeric index that defines the draw order. The default 2D scene renders with index 0, so a [code]CanvasLayer[/code] with index -1 will be drawn below, and one with index 1 will be drawn above. This is very useful for HUDs (in layer 1+ or above), or backgrounds (in layer -1 or below). </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/2d/2d_transforms.html + http://docs.godotengine.org/en/3.0/learning/features/2d/canvas_layers.html </tutorials> <demos> </demos> diff --git a/doc/classes/CollisionShape.xml b/doc/classes/CollisionShape.xml index 08a371baf..f7215ea09 100644 --- a/doc/classes/CollisionShape.xml +++ b/doc/classes/CollisionShape.xml @@ -7,6 +7,7 @@ Editor facility for creating and editing collision shapes in 3D space. You can use this node to represent all sorts of collision shapes, for example, add this to an [Area] to give it a detection shape, or add it to a [PhysicsBody] to give create solid object. [b]IMPORTANT[/b]: this is an Editor-only helper to create shapes, use [method get_shape] to get the actual shape. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/physics/physics_introduction.html </tutorials> <demos> </demos> diff --git a/doc/classes/CollisionShape2D.xml b/doc/classes/CollisionShape2D.xml index 94ae8189d..3bfa29968 100644 --- a/doc/classes/CollisionShape2D.xml +++ b/doc/classes/CollisionShape2D.xml @@ -7,6 +7,7 @@ Editor facility for creating and editing collision shapes in 2D space. You can use this node to represent all sorts of collision shapes, for example, add this to an [Area2D] to give it a detection shape, or add it to a [PhysicsBody2D] to give create solid object. [b]IMPORTANT[/b]: this is an Editor-only helper to create shapes, use [method get_shape] to get the actual shape. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/physics/physics_introduction.html </tutorials> <demos> </demos> diff --git a/doc/classes/Control.xml b/doc/classes/Control.xml index 33fcc513d..3ce045775 100644 --- a/doc/classes/Control.xml +++ b/doc/classes/Control.xml @@ -13,6 +13,8 @@ [Theme] resources change the Control's appearance. If you change the [Theme] on a [code]Control[/code] node, it affects all of its children. To override some of the theme's parameters, call one of the [code]add_*_override[/code] methods, like [method add_font_override]. You can override the theme with the inspector. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/gui/index.html + http://docs.godotengine.org/en/3.0/learning/features/2d/custom_drawing_in_2d.html </tutorials> <demos> </demos> diff --git a/doc/classes/DirectionalLight.xml b/doc/classes/DirectionalLight.xml index 0a282403f..d8db69517 100644 --- a/doc/classes/DirectionalLight.xml +++ b/doc/classes/DirectionalLight.xml @@ -7,6 +7,7 @@ A DirectionalLight is a type of [Light] node that emits light constantly in one direction (the negative z axis of the node). It is used lights with strong intensity that are located far away from the scene to model sunlight or moonlight. The worldspace location of the DirectionalLight transform (origin) is ignored, only the basis is used do determine light direction. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/3d/lights_and_shadows.html </tutorials> <demos> </demos> diff --git a/doc/classes/Directory.xml b/doc/classes/Directory.xml index 7b577e94f..776db64fe 100644 --- a/doc/classes/Directory.xml +++ b/doc/classes/Directory.xml @@ -23,6 +23,7 @@ [/codeblock] </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/step_by_step/filesystem.html </tutorials> <demos> </demos> diff --git a/doc/classes/EditorPlugin.xml b/doc/classes/EditorPlugin.xml index 0f0c5d288..6ff6053b7 100644 --- a/doc/classes/EditorPlugin.xml +++ b/doc/classes/EditorPlugin.xml @@ -7,6 +7,7 @@ Plugins are used by the editor to extend functionality. The most common types of plugins are those which edit a given node or resource type, import plugins and export plugins. </description> <tutorials> + http://docs.godotengine.org/en/3.0/development/plugins/index.html </tutorials> <demos> </demos> diff --git a/doc/classes/Environment.xml b/doc/classes/Environment.xml index dde952b4e..fcd7b17b1 100644 --- a/doc/classes/Environment.xml +++ b/doc/classes/Environment.xml @@ -12,6 +12,8 @@ - Adjustments </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/3d/environment_and_post_processing.html + http://docs.godotengine.org/en/3.0/learning/features/3d/high_dynamic_range.html </tutorials> <demos> </demos> diff --git a/doc/classes/File.xml b/doc/classes/File.xml index d9e60a97a..f1106f61b 100644 --- a/doc/classes/File.xml +++ b/doc/classes/File.xml @@ -22,6 +22,7 @@ [/codeblock] </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/step_by_step/filesystem.html </tutorials> <demos> </demos> diff --git a/doc/classes/GIProbe.xml b/doc/classes/GIProbe.xml index e10aa6148..487f0113f 100644 --- a/doc/classes/GIProbe.xml +++ b/doc/classes/GIProbe.xml @@ -5,6 +5,7 @@ <description> </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/3d/gi_probes.html </tutorials> <demos> </demos> diff --git a/doc/classes/HTTPClient.xml b/doc/classes/HTTPClient.xml index 57ea7ab17..1c07bcf88 100644 --- a/doc/classes/HTTPClient.xml +++ b/doc/classes/HTTPClient.xml @@ -10,6 +10,8 @@ For more information on HTTP, see https://developer.mozilla.org/en-US/docs/Web/HTTP (or read RFC 2616 to get it straight from the source: https://tools.ietf.org/html/rfc2616). </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/networking/http_client_class.html + http://docs.godotengine.org/en/3.0/learning/features/networking/ssl_certificates.html </tutorials> <demos> </demos> diff --git a/doc/classes/HTTPRequest.xml b/doc/classes/HTTPRequest.xml index ba8a92bf3..be65600d8 100644 --- a/doc/classes/HTTPRequest.xml +++ b/doc/classes/HTTPRequest.xml @@ -8,6 +8,7 @@ Can be used to make HTTP requests, i.e. download or upload files or web content via HTTP. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/networking/ssl_certificates.html </tutorials> <demos> </demos> diff --git a/doc/classes/InputEvent.xml b/doc/classes/InputEvent.xml index f17b20be3..322c85b3a 100644 --- a/doc/classes/InputEvent.xml +++ b/doc/classes/InputEvent.xml @@ -7,7 +7,8 @@ Base class of all sort of input event. See [method Node._input]. </description> <tutorials> - http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html + http://docs.godotengine.org/en/3.0/learning/features/inputs/inputevent.html + http://docs.godotengine.org/en/3.0/learning/features/2d/2d_transforms.html </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventAction.xml b/doc/classes/InputEventAction.xml index b9e8ef230..246f2dc12 100644 --- a/doc/classes/InputEventAction.xml +++ b/doc/classes/InputEventAction.xml @@ -7,7 +7,7 @@ Contains a generic action which can be targeted from several type of inputs. Actions can be created from the project settings menu [code]Project > Project Settings > Input Map[/code]. See [method Node._input]. </description> <tutorials> - http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html#actions + http://docs.godotengine.org/en/3.0/learning/features/inputs/inputevent.html#actions </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventJoypadButton.xml b/doc/classes/InputEventJoypadButton.xml index 6de45b628..ed8342298 100644 --- a/doc/classes/InputEventJoypadButton.xml +++ b/doc/classes/InputEventJoypadButton.xml @@ -7,7 +7,7 @@ Input event type for gamepad buttons. For joysticks see [InputEventJoypadMotion]. </description> <tutorials> - http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html + http://docs.godotengine.org/en/3.0/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventJoypadMotion.xml b/doc/classes/InputEventJoypadMotion.xml index 1794f94a7..c29d05d92 100644 --- a/doc/classes/InputEventJoypadMotion.xml +++ b/doc/classes/InputEventJoypadMotion.xml @@ -7,7 +7,7 @@ Stores information about joystick motions. One [code]InputEventJoypadMotion[/code] represents one axis at a time. </description> <tutorials> - http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html + http://docs.godotengine.org/en/3.0/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventKey.xml b/doc/classes/InputEventKey.xml index 86254a5b9..f41f6923a 100644 --- a/doc/classes/InputEventKey.xml +++ b/doc/classes/InputEventKey.xml @@ -7,7 +7,7 @@ Stores key presses on the keyboard. Supports key presses, key releases and [member echo] events. </description> <tutorials> - http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html + http://docs.godotengine.org/en/3.0/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventMouse.xml b/doc/classes/InputEventMouse.xml index 132138257..7d5a60ff0 100644 --- a/doc/classes/InputEventMouse.xml +++ b/doc/classes/InputEventMouse.xml @@ -7,7 +7,7 @@ Stores general mouse events informations. </description> <tutorials> - http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html + http://docs.godotengine.org/en/3.0/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventMouseButton.xml b/doc/classes/InputEventMouseButton.xml index e082efa52..6b93fbfa6 100644 --- a/doc/classes/InputEventMouseButton.xml +++ b/doc/classes/InputEventMouseButton.xml @@ -7,7 +7,7 @@ Contains mouse click informations. See [method Node._input]. </description> <tutorials> - http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html + http://docs.godotengine.org/en/3.0/learning/features/inputs/mouse_and_input_coordinates.html </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventMouseMotion.xml b/doc/classes/InputEventMouseMotion.xml index b160844ca..4b3126dc7 100644 --- a/doc/classes/InputEventMouseMotion.xml +++ b/doc/classes/InputEventMouseMotion.xml @@ -7,7 +7,7 @@ Contains mouse motion informations. Supports relative, absolute positions and speed. See [method Node._input]. </description> <tutorials> - http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html + http://docs.godotengine.org/en/3.0/learning/features/inputs/mouse_and_input_coordinates.html </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventScreenDrag.xml b/doc/classes/InputEventScreenDrag.xml index 6f2aed17a..bbf141118 100644 --- a/doc/classes/InputEventScreenDrag.xml +++ b/doc/classes/InputEventScreenDrag.xml @@ -8,7 +8,7 @@ Contains screen drag informations. See [method Node._input]. </description> <tutorials> - http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html + http://docs.godotengine.org/en/3.0/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventScreenTouch.xml b/doc/classes/InputEventScreenTouch.xml index f98e575e3..bd94770da 100644 --- a/doc/classes/InputEventScreenTouch.xml +++ b/doc/classes/InputEventScreenTouch.xml @@ -8,7 +8,7 @@ Stores multi-touch press/release information. Supports touch press, touch release and [member index] for multi-touch count and order. </description> <tutorials> - http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html + http://docs.godotengine.org/en/3.0/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> diff --git a/doc/classes/InputEventWithModifiers.xml b/doc/classes/InputEventWithModifiers.xml index ad867a900..68a554040 100644 --- a/doc/classes/InputEventWithModifiers.xml +++ b/doc/classes/InputEventWithModifiers.xml @@ -7,7 +7,7 @@ Contains keys events informations with modifiers support like [code]SHIFT[/code] or [code]ALT[/code]. See [method Node._input]. </description> <tutorials> - http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html + http://docs.godotengine.org/en/3.0/learning/features/inputs/inputevent.html </tutorials> <demos> </demos> diff --git a/doc/classes/InputMap.xml b/doc/classes/InputMap.xml index a84c6807a..dde302c09 100644 --- a/doc/classes/InputMap.xml +++ b/doc/classes/InputMap.xml @@ -7,7 +7,7 @@ Manages all [InputEventAction] which can be created/modified from the project settings menu [code]Project > Project Settings > Input Map[/code] or in code with [method add_action] and [method action_add_event]. See [method Node._input]. </description> <tutorials> - http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html#inputmap + http://docs.godotengine.org/en/3.0/learning/features/inputs/inputevent.html#inputmap </tutorials> <demos> </demos> diff --git a/doc/classes/JavaScript.xml b/doc/classes/JavaScript.xml index 7bad3d80f..f6ba522f1 100644 --- a/doc/classes/JavaScript.xml +++ b/doc/classes/JavaScript.xml @@ -7,7 +7,7 @@ The JavaScript singleton is implemented only in HTML5 export. It's used to access the browser's JavaScript context. This allows interaction with embedding pages or calling third-party JavaScript APIs. </description> <tutorials> - http://docs.godotengine.org/en/stable/learning/workflow/export/exporting_for_web.html#calling-javascript-from-script + http://docs.godotengine.org/en/3.0/learning/workflow/export/exporting_for_web.html#calling-javascript-from-script </tutorials> <demos> </demos> diff --git a/doc/classes/KinematicBody.xml b/doc/classes/KinematicBody.xml index 7ddc74bdd..747c46cce 100644 --- a/doc/classes/KinematicBody.xml +++ b/doc/classes/KinematicBody.xml @@ -9,6 +9,7 @@ Kinematic Characters: KinematicBody also has an API for moving objects (the [method move_and_collide] and [method move_and_slide] methods) while performing collision tests. This makes them really useful to implement characters that collide against a world, but that don't require advanced physics. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/physics/kinematic_character_2d.html </tutorials> <demos> </demos> diff --git a/doc/classes/Light.xml b/doc/classes/Light.xml index 4862558aa..e6bf39848 100644 --- a/doc/classes/Light.xml +++ b/doc/classes/Light.xml @@ -7,6 +7,7 @@ Light is the abstract base class for light nodes, so it shouldn't be used directly (It can't be instanced). Other types of light nodes inherit from it. Light contains the common variables and parameters used for lighting. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/3d/lights_and_shadows.html </tutorials> <demos> </demos> diff --git a/doc/classes/NetworkedMultiplayerPeer.xml b/doc/classes/NetworkedMultiplayerPeer.xml index 004a0d52b..5a600319b 100644 --- a/doc/classes/NetworkedMultiplayerPeer.xml +++ b/doc/classes/NetworkedMultiplayerPeer.xml @@ -7,6 +7,7 @@ Manages the connection to network peers. Assigns unique IDs to each client connected to the server. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/networking/high_level_multiplayer.html </tutorials> <demos> </demos> diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml index 51d11104b..e7627e11c 100644 --- a/doc/classes/Node.xml +++ b/doc/classes/Node.xml @@ -16,6 +16,7 @@ [b]Networking with nodes:[/b] After connecting to a server (or making one, see [NetworkedMultiplayerENet]) it is possible to use the built-in RPC (remote procedure call) system to communicate over the network. By calling [method rpc] with a method name, it will be called locally and in all connected peers (peers = clients and the server that accepts connections), with behaviour varying depending on the network mode ([method set_network_mode]) of the receiving peer. To identify which node receives the RPC call Godot will use its [NodePath] (make sure node names are the same on all peers). </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/step_by_step/scenes_and_nodes.html </tutorials> <demos> </demos> diff --git a/doc/classes/Node2D.xml b/doc/classes/Node2D.xml index 8fb9e88d4..17fcd0938 100644 --- a/doc/classes/Node2D.xml +++ b/doc/classes/Node2D.xml @@ -7,6 +7,7 @@ A 2D game object, with a position, rotation and scale. All 2D physics nodes and sprites inherit from Node2D. Use Node2D as a parent node to move, scale and rotate children in a 2D project. Also gives control on the node's render order. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/2d/custom_drawing_in_2d.html </tutorials> <demos> </demos> diff --git a/doc/classes/OmniLight.xml b/doc/classes/OmniLight.xml index 9848419c2..b3c3ce31e 100644 --- a/doc/classes/OmniLight.xml +++ b/doc/classes/OmniLight.xml @@ -7,6 +7,7 @@ An OmniDirectional light is a type of [Light] node that emits lights in all directions. The light is attenuated through the distance and this attenuation can be configured by changing the energy, radius and attenuation parameters of [Light]. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/3d/lights_and_shadows.html </tutorials> <demos> </demos> diff --git a/doc/classes/Physics2DDirectSpaceState.xml b/doc/classes/Physics2DDirectSpaceState.xml index 845425d27..08b10da71 100644 --- a/doc/classes/Physics2DDirectSpaceState.xml +++ b/doc/classes/Physics2DDirectSpaceState.xml @@ -7,6 +7,7 @@ Direct access object to a space in the [Physics2DServer]. It's used mainly to do queries against objects and areas residing in a given space. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/physics/ray-casting.html </tutorials> <demos> </demos> diff --git a/doc/classes/PhysicsBody.xml b/doc/classes/PhysicsBody.xml index aec7f76d1..078512ccc 100644 --- a/doc/classes/PhysicsBody.xml +++ b/doc/classes/PhysicsBody.xml @@ -7,6 +7,7 @@ PhysicsBody is an abstract base class for implementing a physics body. All *Body types inherit from it. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/physics/physics_introduction.html </tutorials> <demos> </demos> diff --git a/doc/classes/PhysicsBody2D.xml b/doc/classes/PhysicsBody2D.xml index f974e12db..340422aea 100644 --- a/doc/classes/PhysicsBody2D.xml +++ b/doc/classes/PhysicsBody2D.xml @@ -7,6 +7,7 @@ PhysicsBody2D is an abstract base class for implementing a physics body. All *Body2D types inherit from it. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/physics/physics_introduction.html </tutorials> <demos> </demos> diff --git a/doc/classes/PhysicsDirectSpaceState.xml b/doc/classes/PhysicsDirectSpaceState.xml index 07e65dd00..88a567831 100644 --- a/doc/classes/PhysicsDirectSpaceState.xml +++ b/doc/classes/PhysicsDirectSpaceState.xml @@ -7,6 +7,7 @@ Direct access object to a space in the [PhysicsServer]. It's used mainly to do queries against objects and areas residing in a given space. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/physics/ray-casting.html </tutorials> <demos> </demos> diff --git a/doc/classes/Plane.xml b/doc/classes/Plane.xml index ae6f2215d..307049e05 100644 --- a/doc/classes/Plane.xml +++ b/doc/classes/Plane.xml @@ -7,6 +7,7 @@ Plane represents a normalized plane equation. Basically, "normal" is the normal of the plane (a,b,c normalized), and "d" is the distance from the origin to the plane (in the direction of "normal"). "Over" or "Above" the plane is considered the side of the plane towards where the normal is pointing. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/math/index.html </tutorials> <demos> </demos> diff --git a/doc/classes/Rect2.xml b/doc/classes/Rect2.xml index 8dea117f8..4890c2bc2 100644 --- a/doc/classes/Rect2.xml +++ b/doc/classes/Rect2.xml @@ -7,6 +7,7 @@ Rect2 consists of a position, a size, and several utility functions. It is typically used for fast overlap tests. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/math/index.html </tutorials> <demos> </demos> diff --git a/doc/classes/ReflectionProbe.xml b/doc/classes/ReflectionProbe.xml index afa170ff1..50eca9699 100644 --- a/doc/classes/ReflectionProbe.xml +++ b/doc/classes/ReflectionProbe.xml @@ -5,6 +5,7 @@ <description> </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/3d/reflection_probes.html </tutorials> <demos> </demos> diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml index 1eaa9dbc8..a50d4e039 100644 --- a/doc/classes/RichTextLabel.xml +++ b/doc/classes/RichTextLabel.xml @@ -8,6 +8,7 @@ Note that assignments to [member bbcode_text] clear the tag stack and reconstruct it from the property's contents. Any edits made to [member bbcode_text] will erase previous edits made from other manual sources such as [method append_bbcode] and the [code]push_*[/code] / [method pop] methods. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/gui/bbcode_in_richtextlabel.html </tutorials> <demos> </demos> diff --git a/doc/classes/RigidBody.xml b/doc/classes/RigidBody.xml index c42ed78a6..ffc5c8607 100644 --- a/doc/classes/RigidBody.xml +++ b/doc/classes/RigidBody.xml @@ -11,6 +11,7 @@ As a warning, don't change RigidBody's position every frame or very often. Sporadic changes work fine, but physics runs at a different granularity (fixed hz) than usual rendering (process callback) and maybe even in a separate thread, so changing this from a process loop will yield strange behavior. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/physics/physics_introduction.html </tutorials> <demos> </demos> diff --git a/doc/classes/SceneTree.xml b/doc/classes/SceneTree.xml index 6625d70f5..f6b8d2548 100644 --- a/doc/classes/SceneTree.xml +++ b/doc/classes/SceneTree.xml @@ -5,6 +5,8 @@ <description> </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/step_by_step/scene_tree.html + http://docs.godotengine.org/en/3.0/learning/features/viewports/multiple_resolutions.html </tutorials> <demos> </demos> diff --git a/doc/classes/Script.xml b/doc/classes/Script.xml index df96d2a6c..14570ab61 100644 --- a/doc/classes/Script.xml +++ b/doc/classes/Script.xml @@ -8,6 +8,7 @@ The 'new' method of a script subclass creates a new instance. [method Object.set_script] extends an existing object, if that object's class matches one of the script's base classes. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/step_by_step/scripting.html </tutorials> <demos> </demos> diff --git a/doc/classes/Shader.xml b/doc/classes/Shader.xml index ebd1eb692..d39014fa2 100644 --- a/doc/classes/Shader.xml +++ b/doc/classes/Shader.xml @@ -7,6 +7,7 @@ To be changed, ignore. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/shading/index.html </tutorials> <demos> </demos> diff --git a/doc/classes/Shape.xml b/doc/classes/Shape.xml index 15f32f95a..706c66d38 100644 --- a/doc/classes/Shape.xml +++ b/doc/classes/Shape.xml @@ -7,6 +7,7 @@ Base class for all 3D shape resources. All 3D shapes that inherit from this can be set into a [PhysicsBody] or [Area]. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/physics/physics_introduction.html </tutorials> <demos> </demos> diff --git a/doc/classes/Shape2D.xml b/doc/classes/Shape2D.xml index 09e1883ec..97171fdd2 100644 --- a/doc/classes/Shape2D.xml +++ b/doc/classes/Shape2D.xml @@ -7,6 +7,7 @@ Base class for all 2D Shapes. All 2D shape types inherit from this. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/physics/physics_introduction.html </tutorials> <demos> </demos> diff --git a/doc/classes/Spatial.xml b/doc/classes/Spatial.xml index 0cf2b49da..852982346 100644 --- a/doc/classes/Spatial.xml +++ b/doc/classes/Spatial.xml @@ -9,6 +9,7 @@ Affine operations (rotate, scale, translate) happen in parent's local coordinate system, unless the Spatial object is set as top level. Affine operations in this coordinate system correspond to direct affine operations on the Spatial's transform. The word local below refers to this coordinate system. The coordinate system that is attached to the Spatial object itself is referred to as object-local coordinate system. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/3d/introduction_to_3d.html </tutorials> <demos> </demos> diff --git a/doc/classes/SpatialMaterial.xml b/doc/classes/SpatialMaterial.xml index f3b7ef3a4..044e6fbd1 100644 --- a/doc/classes/SpatialMaterial.xml +++ b/doc/classes/SpatialMaterial.xml @@ -5,6 +5,7 @@ <description> </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/3d/spatial_material.html </tutorials> <demos> </demos> diff --git a/doc/classes/SpotLight.xml b/doc/classes/SpotLight.xml index 498a7fc02..68b2eec3a 100644 --- a/doc/classes/SpotLight.xml +++ b/doc/classes/SpotLight.xml @@ -7,6 +7,7 @@ A SpotLight light is a type of [Light] node that emits lights in a specific direction, in the shape of a cone. The light is attenuated through the distance and this attenuation can be configured by changing the energy, radius and attenuation parameters of [Light]. TODO: Image of a spotlight. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/3d/lights_and_shadows.html </tutorials> <demos> </demos> diff --git a/doc/classes/StreamPeer.xml b/doc/classes/StreamPeer.xml index ec11bfc6e..014f8b865 100644 --- a/doc/classes/StreamPeer.xml +++ b/doc/classes/StreamPeer.xml @@ -134,7 +134,7 @@ <method name="put_16"> <return type="void"> </return> - <argument index="0" name="val" type="int"> + <argument index="0" name="value" type="int"> </argument> <description> Put a signed 16 bit value into the stream. @@ -143,7 +143,7 @@ <method name="put_32"> <return type="void"> </return> - <argument index="0" name="val" type="int"> + <argument index="0" name="value" type="int"> </argument> <description> Put a signed 32 bit value into the stream. @@ -152,7 +152,7 @@ <method name="put_64"> <return type="void"> </return> - <argument index="0" name="val" type="int"> + <argument index="0" name="value" type="int"> </argument> <description> Put a signed 64 bit value into the stream. @@ -161,7 +161,7 @@ <method name="put_8"> <return type="void"> </return> - <argument index="0" name="val" type="int"> + <argument index="0" name="value" type="int"> </argument> <description> Put a signed byte into the stream. @@ -179,7 +179,7 @@ <method name="put_double"> <return type="void"> </return> - <argument index="0" name="val" type="float"> + <argument index="0" name="value" type="float"> </argument> <description> Put a double-precision float into the stream. @@ -188,7 +188,7 @@ <method name="put_float"> <return type="void"> </return> - <argument index="0" name="val" type="float"> + <argument index="0" name="value" type="float"> </argument> <description> Put a single-precision float into the stream. @@ -206,7 +206,7 @@ <method name="put_u16"> <return type="void"> </return> - <argument index="0" name="val" type="int"> + <argument index="0" name="value" type="int"> </argument> <description> Put an unsigned 16 bit value into the stream. @@ -215,7 +215,7 @@ <method name="put_u32"> <return type="void"> </return> - <argument index="0" name="val" type="int"> + <argument index="0" name="value" type="int"> </argument> <description> Put an unsigned 32 bit value into the stream. @@ -224,7 +224,7 @@ <method name="put_u64"> <return type="void"> </return> - <argument index="0" name="val" type="int"> + <argument index="0" name="value" type="int"> </argument> <description> Put an unsigned 64 bit value into the stream. @@ -233,7 +233,7 @@ <method name="put_u8"> <return type="void"> </return> - <argument index="0" name="val" type="int"> + <argument index="0" name="value" type="int"> </argument> <description> Put an unsigned byte into the stream. @@ -242,7 +242,7 @@ <method name="put_utf8_string"> <return type="void"> </return> - <argument index="0" name="val" type="String"> + <argument index="0" name="value" type="String"> </argument> <description> Put a zero-terminated utf8 string into the stream. @@ -251,7 +251,7 @@ <method name="put_var"> <return type="void"> </return> - <argument index="0" name="val" type="Variant"> + <argument index="0" name="value" type="Variant"> </argument> <description> Put a Variant into the stream. diff --git a/doc/classes/StreamPeerSSL.xml b/doc/classes/StreamPeerSSL.xml index 073f324f3..23b7f7159 100644 --- a/doc/classes/StreamPeerSSL.xml +++ b/doc/classes/StreamPeerSSL.xml @@ -7,6 +7,7 @@ SSL Stream peer. This object can be used to connect to SSL servers. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/networking/ssl_certificates.html </tutorials> <demos> </demos> diff --git a/doc/classes/TileMap.xml b/doc/classes/TileMap.xml index b22ee1139..faecf5664 100644 --- a/doc/classes/TileMap.xml +++ b/doc/classes/TileMap.xml @@ -7,6 +7,7 @@ Node for 2D tile-based maps. Tilemaps use a [TileSet] which contain a list of tiles (textures plus optional collision, navigation, and/or occluder shapes) which are used to create grid-based maps. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/2d/using_tilemaps.html </tutorials> <demos> </demos> diff --git a/doc/classes/Transform.xml b/doc/classes/Transform.xml index 5172543cd..1cb808532 100644 --- a/doc/classes/Transform.xml +++ b/doc/classes/Transform.xml @@ -7,6 +7,7 @@ Represents one or many transformations in 3D space such as translation, rotation, or scaling. It consists of a [Basis] "basis" and an [Vector3] "origin". It is similar to a 3x4 matrix. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/math/index.html </tutorials> <demos> </demos> diff --git a/doc/classes/Vector2.xml b/doc/classes/Vector2.xml index e1892c48c..ac54c2f09 100644 --- a/doc/classes/Vector2.xml +++ b/doc/classes/Vector2.xml @@ -7,6 +7,7 @@ 2-element structure that can be used to represent positions in 2d-space, or any other pair of numeric values. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/math/index.html </tutorials> <demos> </demos> diff --git a/doc/classes/Vector3.xml b/doc/classes/Vector3.xml index 7a1bc5339..dafb21517 100644 --- a/doc/classes/Vector3.xml +++ b/doc/classes/Vector3.xml @@ -7,6 +7,7 @@ Vector3 is one of the core classes of the engine, and includes several built-in helper functions to perform basic vector math operations. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/math/index.html </tutorials> <demos> </demos> diff --git a/doc/classes/Viewport.xml b/doc/classes/Viewport.xml index 3a1f568d5..8bc891376 100644 --- a/doc/classes/Viewport.xml +++ b/doc/classes/Viewport.xml @@ -12,6 +12,8 @@ Finally, viewports can also behave as render targets, in which case they will not be visible unless the associated texture is used to draw. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/2d/2d_transforms.html + http://docs.godotengine.org/en/3.0/learning/features/viewports/index.html </tutorials> <demos> </demos> diff --git a/doc/classes/World.xml b/doc/classes/World.xml index b99871734..97631b8e0 100644 --- a/doc/classes/World.xml +++ b/doc/classes/World.xml @@ -7,6 +7,7 @@ Class that has everything pertaining to a world. A physics space, a visual scenario and a sound space. Spatial nodes register their resources into the current world. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/physics/ray-casting.html </tutorials> <demos> </demos> diff --git a/doc/classes/World2D.xml b/doc/classes/World2D.xml index d826f1d19..57f91b1fa 100644 --- a/doc/classes/World2D.xml +++ b/doc/classes/World2D.xml @@ -7,6 +7,7 @@ Class that has everything pertaining to a 2D world. A physics space, a visual scenario and a sound space. 2D nodes register their resources into the current 2D world. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/physics/ray-casting.html </tutorials> <demos> </demos> diff --git a/doc/classes/WorldEnvironment.xml b/doc/classes/WorldEnvironment.xml index 58a30c81b..06a24c98d 100644 --- a/doc/classes/WorldEnvironment.xml +++ b/doc/classes/WorldEnvironment.xml @@ -7,6 +7,7 @@ The [code]WorldEnvironment[/code] node can be added to a scene in order to set default [Environment] variables for the scene. The [code]WorldEnvironment[/code] can be overridden by an [Environment] node set on the current [Camera]. Additionally, only one [code]WorldEnvironment[/code] may be instanced in a given scene at a time. The [code]WorldEnvironment[/code] allows the user to specify default lighting parameters (e.g. ambient lighting), various post-processing effects (e.g. SSAO, DOF, Tonemapping), and how to draw the background (e.g. solid color, skybox). </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/3d/environment_and_post_processing.html </tutorials> <demos> </demos> diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp index 7dc4f71b8..ed7f3b24d 100644 --- a/drivers/gles3/rasterizer_storage_gles3.cpp +++ b/drivers/gles3/rasterizer_storage_gles3.cpp @@ -5694,6 +5694,7 @@ void RasterizerStorageGLES3::_particles_process(Particles *p_particles, float p_ SWAP(p_particles->particle_buffers[0], p_particles->particle_buffers[1]); SWAP(p_particles->particle_vaos[0], p_particles->particle_vaos[1]); + glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 0); glBindVertexArray(0); /* //debug particles :D glBindBuffer(GL_ARRAY_BUFFER, p_particles->particle_buffers[0]); diff --git a/drivers/gles3/shaders/copy.glsl b/drivers/gles3/shaders/copy.glsl index 743fe122d..44eec9525 100644 --- a/drivers/gles3/shaders/copy.glsl +++ b/drivers/gles3/shaders/copy.glsl @@ -161,7 +161,7 @@ void main() { #ifdef SRGB_TO_LINEAR - color.rgb = mix(pow((color.rgb + vec3(0.055)) * (1.0 / (1 + 0.055)),vec3(2.4)),color.rgb * (1.0 / 12.92),lessThan(color.rgb,vec3(0.04045))); + color.rgb = mix(pow((color.rgb + vec3(0.055)) * (1.0 / (1.0 + 0.055)),vec3(2.4)),color.rgb * (1.0 / 12.92),lessThan(color.rgb,vec3(0.04045))); #endif #ifdef DEBUG_GRADIENT diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index d2883cab0..198a52fef 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -37,6 +37,8 @@ #include "os/keyboard.h" #define CONTRIBUTE_URL "http://docs.godotengine.org/en/latest/community/contributing/updating_the_class_reference.html" +#define CONTRIBUTE2_URL "https://github.com/godotengine/godot-docs" +#define REQUEST_URL "https://github.com/godotengine/godot-docs/issues/new" void EditorHelpSearch::popup() { @@ -1290,6 +1292,46 @@ Error EditorHelp::_goto_desc(const String &p_class, int p_vscr) { class_desc->add_newline(); } + { + + class_desc->push_color(title_color); + class_desc->push_font(doc_title_font); + class_desc->add_text(TTR("Online Tutorials:")); + class_desc->pop(); + class_desc->pop(); + class_desc->push_indent(1); + + class_desc->push_font(doc_code_font); + + class_desc->add_newline(); + // class_desc->add_newline(); + + Vector<String> tutorials = cd.tutorials.split_spaces(); + if (tutorials.size() != 0) { + + for (int i = 0; i < tutorials.size(); i++) { + String link = tutorials[i]; + String linktxt = link; + int seppos = linktxt.find("//"); + if (seppos != -1) { + linktxt = link.right(seppos + 2); + } + + class_desc->push_color(symbol_color); + class_desc->append_bbcode("[url=" + link + "]" + linktxt + "[/url]"); + class_desc->pop(); + class_desc->add_newline(); + } + } else { + class_desc->push_color(comment_color); + class_desc->append_bbcode(TTR("There are currently no tutorials for this class, you can [color=$color][url=$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/url][/color].").replace("$url2", REQUEST_URL).replace("$url", CONTRIBUTE2_URL).replace("$color", link_color_text)); + class_desc->pop(); + } + class_desc->pop(); + class_desc->pop(); + class_desc->add_newline(); + class_desc->add_newline(); + } if (property_descr) { section_line.push_back(Pair<String, int>(TTR("Properties"), class_desc->get_line_count() - 2)); diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index bd5e5c735..f6834732a 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -1999,29 +1999,29 @@ void CanvasItemEditor::_gui_input_viewport(const Ref<InputEvent> &p_event) { switch (drag) { case DRAG_ANCHOR_TOP_LEFT: - if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_LEFT, anchor_snapped.x); - if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_TOP, anchor_snapped.y); + if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_LEFT, anchor_snapped.x, false); + if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_TOP, anchor_snapped.y, false); continue; break; case DRAG_ANCHOR_TOP_RIGHT: - if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_RIGHT, anchor_snapped.x); - if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_TOP, anchor_snapped.y); + if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_RIGHT, anchor_snapped.x, false); + if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_TOP, anchor_snapped.y, false); continue; break; case DRAG_ANCHOR_BOTTOM_RIGHT: - if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_RIGHT, anchor_snapped.x); - if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_BOTTOM, anchor_snapped.y); + if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_RIGHT, anchor_snapped.x, false); + if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_BOTTOM, anchor_snapped.y, false); break; case DRAG_ANCHOR_BOTTOM_LEFT: - if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_LEFT, anchor_snapped.x); - if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_BOTTOM, anchor_snapped.y); + if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_LEFT, anchor_snapped.x, false); + if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_BOTTOM, anchor_snapped.y, false); continue; break; case DRAG_ANCHOR_ALL: - if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_LEFT, anchor_snapped.x); - if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_RIGHT, anchor_snapped.x); - if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_TOP, anchor_snapped.y); - if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_BOTTOM, anchor_snapped.y); + if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_LEFT, anchor_snapped.x, false); + if (!uniform || (uniform && !use_y)) control->set_anchor(MARGIN_RIGHT, anchor_snapped.x, false); + if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_TOP, anchor_snapped.y, false); + if (!uniform || (uniform && use_y)) control->set_anchor(MARGIN_BOTTOM, anchor_snapped.y, false); continue; break; } diff --git a/editor/plugins/cube_grid_theme_editor_plugin.cpp b/editor/plugins/cube_grid_theme_editor_plugin.cpp index 23465a654..81f45b9f5 100644 --- a/editor/plugins/cube_grid_theme_editor_plugin.cpp +++ b/editor/plugins/cube_grid_theme_editor_plugin.cpp @@ -290,8 +290,7 @@ MeshLibraryEditorPlugin::MeshLibraryEditorPlugin(EditorNode *p_node) { theme_editor = memnew(MeshLibraryEditor(p_node)); p_node->get_viewport()->add_child(theme_editor); - theme_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); - theme_editor->set_anchor(MARGIN_BOTTOM, Control::ANCHOR_BEGIN); + theme_editor->set_anchors_and_margins_preset(Control::PRESET_TOP_WIDE); theme_editor->set_end(Point2(0, 22)); theme_editor->hide(); } diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp index 612bdb1d2..f47f9e55b 100644 --- a/editor/plugins/tile_set_editor_plugin.cpp +++ b/editor/plugins/tile_set_editor_plugin.cpp @@ -304,8 +304,7 @@ TileSetEditorPlugin::TileSetEditorPlugin(EditorNode *p_node) { tileset_editor = memnew(TileSetEditor(p_node)); 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_anchors_and_margins_preset(Control::PRESET_TOP_WIDE); tileset_editor->set_end(Point2(0, 22)); tileset_editor->hide(); diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index 46d52d21d..87906c5a9 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -665,6 +665,8 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: } else if (hint == PROPERTY_HINT_PROPERTY_OF_INSTANCE) { + MAKE_PROPSELECT + Object *instance = ObjectDB::get_instance(hint_text.to_int64()); if (instance) property_select->select_property_from_instance(instance, v); diff --git a/main/main.cpp b/main/main.cpp index 0b231b9d3..be334fac4 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1822,6 +1822,9 @@ void Main::cleanup() { ERR_FAIL_COND(!_start_success); + message_queue->flush(); + memdelete(message_queue); + if (script_debugger) { if (use_debug_profiler) { script_debugger->profiling_end(); @@ -1879,9 +1882,6 @@ void Main::cleanup() { if (engine) memdelete(engine); - message_queue->flush(); - memdelete(message_queue); - unregister_core_driver_types(); unregister_core_types(); diff --git a/modules/bullet/collision_object_bullet.cpp b/modules/bullet/collision_object_bullet.cpp index 873c9c31b..34aff68a4 100644 --- a/modules/bullet/collision_object_bullet.cpp +++ b/modules/bullet/collision_object_bullet.cpp @@ -160,16 +160,13 @@ int CollisionObjectBullet::get_godot_object_flags() const { void CollisionObjectBullet::set_transform(const Transform &p_global_transform) { - btTransform btTrans; - Basis decomposed_basis; + set_body_scale(p_global_transform.basis.get_scale()); - Vector3 decomposed_scale = p_global_transform.get_basis().rotref_posscale_decomposition(decomposed_basis); + btTransform bt_transform; + G_TO_B(p_global_transform, bt_transform); + UNSCALE_BT_BASIS(bt_transform); - G_TO_B(p_global_transform.get_origin(), btTrans.getOrigin()); - G_TO_B(decomposed_basis, btTrans.getBasis()); - - set_body_scale(decomposed_scale); - set_transform__bullet(btTrans); + set_transform__bullet(bt_transform); } Transform CollisionObjectBullet::get_transform() const { @@ -317,20 +314,22 @@ void RigidCollisionObjectBullet::on_shapes_changed() { } // Insert all shapes - + btVector3 body_scale(get_bt_body_scale()); for (i = 0; i < shapes_size; ++i) { shpWrapper = &shapes[i]; if (shpWrapper->active) { if (!shpWrapper->bt_shape) { - shpWrapper->bt_shape = shpWrapper->shape->create_bt_shape(shpWrapper->scale); + shpWrapper->bt_shape = shpWrapper->shape->create_bt_shape(shpWrapper->scale * body_scale); } - compoundShape->addChildShape(shpWrapper->transform, shpWrapper->bt_shape); + + btTransform scaled_shape_transform(shpWrapper->transform); + scaled_shape_transform.getOrigin() *= body_scale; + compoundShape->addChildShape(scaled_shape_transform, shpWrapper->bt_shape); } else { - compoundShape->addChildShape(shpWrapper->transform, BulletPhysicsServer::get_empty_shape()); + compoundShape->addChildShape(btTransform(), BulletPhysicsServer::get_empty_shape()); } } - compoundShape->setLocalScaling(get_bt_body_scale()); compoundShape->recalculateLocalAabb(); } diff --git a/modules/gdnative/nativescript/nativescript.cpp b/modules/gdnative/nativescript/nativescript.cpp index f45217d03..cff5d9c9b 100644 --- a/modules/gdnative/nativescript/nativescript.cpp +++ b/modules/gdnative/nativescript/nativescript.cpp @@ -398,6 +398,11 @@ Variant NativeScript::_new(const Variant **p_args, int p_argcount, Variant::Call owner = memnew(Reference); } + if (!owner) { + r_error.error = Variant::CallError::CALL_ERROR_INSTANCE_IS_NULL; + return Variant(); + } + Reference *r = Object::cast_to<Reference>(owner); if (r) { ref = REF(r); @@ -793,7 +798,7 @@ NativeScriptLanguage *NativeScriptLanguage::singleton; void NativeScriptLanguage::_unload_stuff(bool p_reload) { for (Map<String, Map<StringName, NativeScriptDesc> >::Element *L = library_classes.front(); L; L = L->next()) { - if (p_reload && !library_gdnatives[L->key()]->get_library()->is_reloadable()) { + if (p_reload && library_gdnatives[L->key()].is_valid() && !library_gdnatives[L->key()]->get_library()->is_reloadable()) { continue; } diff --git a/modules/gdscript/doc_classes/GDScript.xml b/modules/gdscript/doc_classes/GDScript.xml index 29b2319f2..ba7d56a3b 100644 --- a/modules/gdscript/doc_classes/GDScript.xml +++ b/modules/gdscript/doc_classes/GDScript.xml @@ -8,6 +8,7 @@ [method new] creates a new instance of the script. [method Object.set_script] extends an existing object, if that object's class matches one of the script's base classes. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/scripting/gdscript/index.html </tutorials> <demos> </demos> diff --git a/modules/gdscript/gdscript_functions.cpp b/modules/gdscript/gdscript_functions.cpp index f15f2197d..eceec2781 100644 --- a/modules/gdscript/gdscript_functions.cpp +++ b/modules/gdscript/gdscript_functions.cpp @@ -1483,7 +1483,7 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) { return mi; } break; case MATH_INVERSE_LERP: { - MethodInfo mi("inverse_lerp", PropertyInfo(Variant::REAL, "from"), PropertyInfo(Variant::REAL, "to"), PropertyInfo(Variant::REAL, "value")); + MethodInfo mi("inverse_lerp", PropertyInfo(Variant::REAL, "from"), PropertyInfo(Variant::REAL, "to"), PropertyInfo(Variant::REAL, "weight")); mi.return_val.type = Variant::REAL; return mi; } break; @@ -1579,12 +1579,12 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) { return mi; } break; case LOGIC_CLAMP: { - MethodInfo mi("clamp", PropertyInfo(Variant::REAL, "val"), PropertyInfo(Variant::REAL, "min"), PropertyInfo(Variant::REAL, "max")); + MethodInfo mi("clamp", PropertyInfo(Variant::REAL, "value"), PropertyInfo(Variant::REAL, "min"), PropertyInfo(Variant::REAL, "max")); mi.return_val.type = Variant::REAL; return mi; } break; case LOGIC_NEAREST_PO2: { - MethodInfo mi("nearest_po2", PropertyInfo(Variant::INT, "val")); + MethodInfo mi("nearest_po2", PropertyInfo(Variant::INT, "value")); mi.return_val.type = Variant::INT; return mi; } break; diff --git a/modules/gridmap/doc_classes/GridMap.xml b/modules/gridmap/doc_classes/GridMap.xml index 9f74acc94..0073631a8 100644 --- a/modules/gridmap/doc_classes/GridMap.xml +++ b/modules/gridmap/doc_classes/GridMap.xml @@ -10,6 +10,7 @@ A GridMap is split into a sparse collection of octants for efficient rendering and physics processing. Every octant has the same dimensions and can contain several cells. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/features/3d/using_gridmaps.html </tutorials> <demos> </demos> diff --git a/modules/visual_script/doc_classes/VisualScript.xml b/modules/visual_script/doc_classes/VisualScript.xml index ae3f116f7..a037344c7 100644 --- a/modules/visual_script/doc_classes/VisualScript.xml +++ b/modules/visual_script/doc_classes/VisualScript.xml @@ -9,6 +9,7 @@ You are most likely to use this class via the Visual Script editor or when writing plugins for it. </description> <tutorials> + http://docs.godotengine.org/en/3.0/learning/scripting/visual_script/index.html </tutorials> <demos> </demos> diff --git a/modules/visual_script/visual_script_builtin_funcs.cpp b/modules/visual_script/visual_script_builtin_funcs.cpp index 1ee098956..7f0a42da8 100644 --- a/modules/visual_script/visual_script_builtin_funcs.cpp +++ b/modules/visual_script/visual_script_builtin_funcs.cpp @@ -257,10 +257,10 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const case MATH_ASIN: case MATH_ACOS: case MATH_ATAN: - case MATH_ATAN2: case MATH_SQRT: { - return PropertyInfo(Variant::REAL, "num"); + return PropertyInfo(Variant::REAL, "s"); } break; + case MATH_ATAN2: case MATH_FMOD: case MATH_FPOSMOD: { if (p_idx == 0) @@ -273,7 +273,7 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const case MATH_ROUND: case MATH_ABS: case MATH_SIGN: { - return PropertyInfo(Variant::REAL, "num"); + return PropertyInfo(Variant::REAL, "s"); } break; @@ -287,7 +287,7 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const case MATH_EXP: case MATH_ISNAN: case MATH_ISINF: { - return PropertyInfo(Variant::REAL, "num"); + return PropertyInfo(Variant::REAL, "s"); } break; case MATH_EASE: { if (p_idx == 0) @@ -318,7 +318,7 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const else if (p_idx == 1) return PropertyInfo(Variant::REAL, "to"); else - return PropertyInfo(Variant::REAL, "value"); + return PropertyInfo(Variant::REAL, "weight"); } break; case MATH_RANGE_LERP: { if (p_idx == 0) @@ -415,14 +415,14 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const } break; case LOGIC_CLAMP: { if (p_idx == 0) - return PropertyInfo(Variant::REAL, "a"); - else if (p_idx == 0) // FIXME: is it ok to test p_idx == 0 twice? + return PropertyInfo(Variant::REAL, "value"); + else if (p_idx == 1) return PropertyInfo(Variant::REAL, "min"); else return PropertyInfo(Variant::REAL, "max"); } break; case LOGIC_NEAREST_PO2: { - return PropertyInfo(Variant::INT, "num"); + return PropertyInfo(Variant::INT, "value"); } break; case OBJ_WEAKREF: { diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp index 37b0b8ac5..b116dfdcf 100644 --- a/modules/visual_script/visual_script_editor.cpp +++ b/modules/visual_script/visual_script_editor.cpp @@ -318,7 +318,8 @@ protected: } p_list->push_back(PropertyInfo(Variant::INT, "type", PROPERTY_HINT_ENUM, argt)); p_list->push_back(PropertyInfo(script->get_variable_info(var).type, "value", script->get_variable_info(var).hint, script->get_variable_info(var).hint_string, PROPERTY_USAGE_DEFAULT)); - p_list->push_back(PropertyInfo(Variant::INT, "hint", PROPERTY_HINT_ENUM, "None,Range,ExpRange,Enum,ExpEasing,Length,SpriteFrame,KeyAccel,BitFlags,AllFlags,File,Dir,GlobalFile,GlobalDir,ResourceType,MultilineText")); + // Update this when PropertyHint changes + p_list->push_back(PropertyInfo(Variant::INT, "hint", PROPERTY_HINT_ENUM, "None,Range,ExpRange,Enum,ExpEasing,Length,SpriteFrame,KeyAccel,Flags,Layers2dRender,Layers2dPhysics,Layer3dRender,Layer3dPhysics,File,Dir,GlobalFile,GlobalDir,ResourceType,MultilineText,ColorNoAlpha,ImageCompressLossy,ImageCompressLossLess,ObjectId,String,NodePathToEditedNode,MethodOfVariantType,MethodOfBaseType,MethodOfInstance,MethodOfScript,PropertyOfVariantType,PropertyOfBaseType,PropertyOfInstance,PropertyOfScript,ObjectTooBig")); p_list->push_back(PropertyInfo(Variant::STRING, "hint_string")); p_list->push_back(PropertyInfo(Variant::BOOL, "export")); } diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp index b26d2a3aa..2a61f8d87 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -552,6 +552,10 @@ class EditorExportAndroid : public EditorExportPlatform { return OK; } + static Error ignore_apk_file(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total) { + return OK; + } + void _fix_manifest(const Ref<EditorExportPreset> &p_preset, Vector<uint8_t> &p_manifest, bool p_give_internet) { // Leaving the unused types commented because looking these constants up @@ -1504,6 +1508,10 @@ public: cl.push_back(passwd); }*/ + APKExportData ed; + ed.ep = &ep; + ed.apk = unaligned_apk; + err = export_project_files(p_preset, ignore_apk_file, &ed, save_apk_so); } else { //all files @@ -1531,17 +1539,17 @@ public: 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); - } + 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); } } } 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 1102ab745..5d13f17ff 100644 --- a/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java +++ b/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java @@ -103,13 +103,16 @@ public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListene public void onTextChanged(final CharSequence pCharSequence, final int start, final int before, final int count) { //Log.d(TAG, "onTextChanged(" + pCharSequence + ")start: " + start + ",count: " + count + ",before: " + before); + final int[] newChars = new int[count]; + for (int i = start; i < start + count; ++i) { + newChars[i - start] = pCharSequence.charAt(i); + } mView.queueEvent(new Runnable() { @Override public void run() { - for (int i = start; i < start + count; ++i) { - final int ch = pCharSequence.charAt(i); - GodotLib.key(0, ch, true); - GodotLib.key(0, ch, false); + for (int i = 0; i < count; ++i) { + GodotLib.key(0, newChars[i], true); + GodotLib.key(0, newChars[i], false); } } }); diff --git a/scene/gui/control.h b/scene/gui/control.h index 2d61ecb2a..51325f27b 100644 --- a/scene/gui/control.h +++ b/scene/gui/control.h @@ -317,11 +317,11 @@ public: /* POSITIONING */ - void set_anchors_preset(LayoutPreset p_preset, bool p_keep_margin = false); + void set_anchors_preset(LayoutPreset p_preset, bool p_keep_margin = true); void set_margins_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode = PRESET_MODE_MINSIZE, int p_margin = 0); void set_anchors_and_margins_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode = PRESET_MODE_MINSIZE, int p_margin = 0); - void set_anchor(Margin p_margin, float p_anchor, bool p_keep_margin = false, bool p_push_opposite_anchor = true); + void set_anchor(Margin p_margin, float p_anchor, bool p_keep_margin = true, bool p_push_opposite_anchor = true); float get_anchor(Margin p_margin) const; void set_margin(Margin p_margin, float p_value); diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp index 413edca21..33b3d4648 100644 --- a/scene/gui/scroll_container.cpp +++ b/scene/gui/scroll_container.cpp @@ -462,9 +462,9 @@ void ScrollContainer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_enable_v_scroll", "enable"), &ScrollContainer::set_enable_v_scroll); ClassDB::bind_method(D_METHOD("is_v_scroll_enabled"), &ScrollContainer::is_v_scroll_enabled); ClassDB::bind_method(D_METHOD("_update_scrollbar_position"), &ScrollContainer::_update_scrollbar_position); - ClassDB::bind_method(D_METHOD("set_h_scroll", "val"), &ScrollContainer::set_h_scroll); + ClassDB::bind_method(D_METHOD("set_h_scroll", "value"), &ScrollContainer::set_h_scroll); ClassDB::bind_method(D_METHOD("get_h_scroll"), &ScrollContainer::get_h_scroll); - ClassDB::bind_method(D_METHOD("set_v_scroll", "val"), &ScrollContainer::set_v_scroll); + ClassDB::bind_method(D_METHOD("set_v_scroll", "value"), &ScrollContainer::set_v_scroll); ClassDB::bind_method(D_METHOD("get_v_scroll"), &ScrollContainer::get_v_scroll); ADD_GROUP("Scroll", "scroll_"); diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp index 2dee74f56..bb0cf168a 100644 --- a/scene/register_scene_types.cpp +++ b/scene/register_scene_types.cpp @@ -201,6 +201,8 @@ static ResourceFormatLoaderDynamicFont *resource_loader_dynamic_font = NULL; static ResourceFormatLoaderStreamTexture *resource_loader_stream_texture = NULL; +static ResourceFormatLoaderBMFont *resource_loader_bmfont = NULL; + static ResourceFormatSaverShader *resource_saver_shader = NULL; static ResourceFormatLoaderShader *resource_loader_shader = NULL; @@ -233,6 +235,9 @@ void register_scene_types() { resource_loader_shader = memnew(ResourceFormatLoaderShader); ResourceLoader::add_resource_format_loader(resource_loader_shader, true); + resource_loader_bmfont = memnew(ResourceFormatLoaderBMFont); + ResourceLoader::add_resource_format_loader(resource_loader_bmfont, true); + OS::get_singleton()->yield(); //may take time to init ClassDB::register_class<Object>(); @@ -652,6 +657,9 @@ void unregister_scene_types() { if (resource_loader_shader) { memdelete(resource_loader_shader); } + if (resource_loader_bmfont) { + memdelete(resource_loader_bmfont); + } SpatialMaterial::finish_shaders(); ParticlesMaterial::finish_shaders(); diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp index 026bcea27..6fc5778dd 100644 --- a/scene/resources/font.cpp +++ b/scene/resources/font.cpp @@ -596,3 +596,42 @@ BitmapFont::~BitmapFont() { clear(); } + +//////////// + +RES ResourceFormatLoaderBMFont::load(const String &p_path, const String &p_original_path, Error *r_error) { + + if (r_error) + *r_error = ERR_FILE_CANT_OPEN; + + Ref<BitmapFont> font; + font.instance(); + + Error err = font->create_from_fnt(p_path); + + if (err) { + if (r_error) + *r_error = err; + return RES(); + } + + return font; +} + +void ResourceFormatLoaderBMFont::get_recognized_extensions(List<String> *p_extensions) const { + + p_extensions->push_back("fnt"); +} + +bool ResourceFormatLoaderBMFont::handles_type(const String &p_type) const { + + return (p_type == "BitmapFont"); +} + +String ResourceFormatLoaderBMFont::get_resource_type(const String &p_path) const { + + String el = p_path.get_extension().to_lower(); + if (el == "fnt") + return "BitmapFont"; + return ""; +} diff --git a/scene/resources/font.h b/scene/resources/font.h index 3f228ca00..ae08890be 100644 --- a/scene/resources/font.h +++ b/scene/resources/font.h @@ -159,4 +159,12 @@ public: ~BitmapFont(); }; +class ResourceFormatLoaderBMFont : public ResourceFormatLoader { +public: + virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL); + virtual void get_recognized_extensions(List<String> *p_extensions) const; + virtual bool handles_type(const String &p_type) const; + virtual String get_resource_type(const String &p_path) const; +}; + #endif |
