diff options
133 files changed, 4730 insertions, 3354 deletions
diff --git a/core/input/input_event.cpp b/core/input/input_event.cpp index 74c0812f43..5a9ec74184 100644 --- a/core/input/input_event.cpp +++ b/core/input/input_event.cpp @@ -1499,7 +1499,18 @@ bool InputEventAction::action_match(const Ref<InputEvent> &p_event, bool p_exact } String InputEventAction::as_text() const { - return vformat(RTR("Input Action %s was %s"), action, pressed ? "pressed" : "released"); + const List<Ref<InputEvent>> *events = InputMap::get_singleton()->action_get_events(action); + if (!events) { + return String(); + } + + for (const Ref<InputEvent> &E : *events) { + if (E.is_valid()) { + return E->as_text(); + } + } + + return String(); } String InputEventAction::to_string() { diff --git a/core/variant/array.cpp b/core/variant/array.cpp index f8af78f3c1..94d1596514 100644 --- a/core/variant/array.cpp +++ b/core/variant/array.cpp @@ -775,15 +775,9 @@ Variant Array::get_typed_script() const { return _p->typed.script; } -void Array::set_read_only(bool p_enable) { - if (p_enable == bool(_p->read_only != nullptr)) { - return; - } - if (p_enable) { +void Array::make_read_only() { + if (_p->read_only == nullptr) { _p->read_only = memnew(Variant); - } else { - memdelete(_p->read_only); - _p->read_only = nullptr; } } diff --git a/core/variant/array.h b/core/variant/array.h index 3728c22fe0..d9ca3278fb 100644 --- a/core/variant/array.h +++ b/core/variant/array.h @@ -127,7 +127,7 @@ public: StringName get_typed_class_name() const; Variant get_typed_script() const; - void set_read_only(bool p_enable); + void make_read_only(); bool is_read_only() const; Array(const Array &p_base, uint32_t p_type, const StringName &p_class_name, const Variant &p_script); diff --git a/core/variant/dictionary.cpp b/core/variant/dictionary.cpp index f87064a0d1..0429508cc5 100644 --- a/core/variant/dictionary.cpp +++ b/core/variant/dictionary.cpp @@ -333,15 +333,9 @@ Dictionary Dictionary::duplicate(bool p_deep) const { return recursive_duplicate(p_deep, 0); } -void Dictionary::set_read_only(bool p_enable) { - if (p_enable == bool(_p->read_only != nullptr)) { - return; - } - if (p_enable) { +void Dictionary::make_read_only() { + if (_p->read_only == nullptr) { _p->read_only = memnew(Variant); - } else { - memdelete(_p->read_only); - _p->read_only = nullptr; } } bool Dictionary::is_read_only() const { diff --git a/core/variant/dictionary.h b/core/variant/dictionary.h index e6d8ebe25b..8935d35ed9 100644 --- a/core/variant/dictionary.h +++ b/core/variant/dictionary.h @@ -86,7 +86,7 @@ public: Dictionary duplicate(bool p_deep = false) const; Dictionary recursive_duplicate(bool p_deep, int recursion_count) const; - void set_read_only(bool p_enable); + void make_read_only(); bool is_read_only() const; const void *id() const; diff --git a/core/variant/variant_call.cpp b/core/variant/variant_call.cpp index 9852ba9184..3b2d29734d 100644 --- a/core/variant/variant_call.cpp +++ b/core/variant/variant_call.cpp @@ -2180,6 +2180,8 @@ static void _register_variant_builtin_methods() { bind_method(Dictionary, values, sarray(), varray()); bind_method(Dictionary, duplicate, sarray("deep"), varray(false)); bind_method(Dictionary, get, sarray("key", "default"), varray(Variant())); + bind_method(Dictionary, make_read_only, sarray(), varray()); + bind_method(Dictionary, is_read_only, sarray(), varray()); /* Array */ @@ -2227,7 +2229,7 @@ static void _register_variant_builtin_methods() { bind_method(Array, get_typed_builtin, sarray(), varray()); bind_method(Array, get_typed_class_name, sarray(), varray()); bind_method(Array, get_typed_script, sarray(), varray()); - bind_method(Array, set_read_only, sarray("enable"), varray()); + bind_method(Array, make_read_only, sarray(), varray()); bind_method(Array, is_read_only, sarray(), varray()); /* Byte Array */ diff --git a/doc/classes/AABB.xml b/doc/classes/AABB.xml index ca454cafa3..2c5337eea3 100644 --- a/doc/classes/AABB.xml +++ b/doc/classes/AABB.xml @@ -66,7 +66,7 @@ [/gdscript] [csharp] // position (-3, 2, 0), size (1, 1, 1) - var box = new AABB(new Vector3(-3, 2, 0), new Vector3(1, 1, 1)); + var box = new Aabb(new Vector3(-3, 2, 0), new Vector3(1, 1, 1)); // position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and Vector3(0, -1, 2) var box2 = box.Expand(new Vector3(0, -1, 2)); [/csharp] diff --git a/doc/classes/AStarGrid2D.xml b/doc/classes/AStarGrid2D.xml index 32599d7f7d..b253a33377 100644 --- a/doc/classes/AStarGrid2D.xml +++ b/doc/classes/AStarGrid2D.xml @@ -17,11 +17,11 @@ [/gdscript] [csharp] AStarGrid2D astarGrid = new AStarGrid2D(); - astarGrid.Size = new Vector2i(32, 32); - astarGrid.CellSize = new Vector2i(16, 16); + astarGrid.Size = new Vector2I(32, 32); + astarGrid.CellSize = new Vector2I(16, 16); astarGrid.Update(); - GD.Print(astarGrid.GetIdPath(Vector2i.Zero, new Vector2i(3, 4))); // prints (0, 0), (1, 1), (2, 2), (3, 3), (3, 4) - GD.Print(astarGrid.GetPointPath(Vector2i.Zero, new Vector2i(3, 4))); // prints (0, 0), (16, 16), (32, 32), (48, 48), (48, 64) + GD.Print(astarGrid.GetIdPath(Vector2I.Zero, new Vector2I(3, 4))); // prints (0, 0), (1, 1), (2, 2), (3, 3), (3, 4) + GD.Print(astarGrid.GetPointPath(Vector2I.Zero, new Vector2I(3, 4))); // prints (0, 0), (16, 16), (32, 32), (48, 48), (48, 64) [/csharp] [/codeblocks] </description> diff --git a/doc/classes/AnimatedSprite2D.xml b/doc/classes/AnimatedSprite2D.xml index cd9c0cee98..9872c59990 100644 --- a/doc/classes/AnimatedSprite2D.xml +++ b/doc/classes/AnimatedSprite2D.xml @@ -5,34 +5,82 @@ </brief_description> <description> [AnimatedSprite2D] is similar to the [Sprite2D] node, except it carries multiple textures as animation frames. Animations are created using a [SpriteFrames] resource, which allows you to import image files (or a folder containing said files) to provide the animation frames for the sprite. The [SpriteFrames] resource can be configured in the editor via the SpriteFrames bottom panel. - After setting up [member frames], [method play] may be called. It's also possible to select an [member animation] and toggle [member playing], even within the editor. - To pause the current animation, set [member playing] to [code]false[/code]. Alternatively, setting [member speed_scale] to [code]0[/code] also preserves the current frame's elapsed time. </description> <tutorials> <link title="2D Sprite animation">$DOCS_URL/tutorials/2d/2d_sprite_animation.html</link> <link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link> </tutorials> <methods> + <method name="get_playing_speed" qualifiers="const"> + <return type="float" /> + <description> + Returns the actual playing speed of current animation or [code]0[/code] if not playing. This speed is the [member speed_scale] property multiplied by [code]custom_speed[/code] argument specified when calling the [method play] method. + Returns a negative value if the current animation is playing backwards. + </description> + </method> + <method name="is_playing" qualifiers="const"> + <return type="bool" /> + <description> + Returns [code]true[/code] if an animation is currently playing (even if [member speed_scale] and/or [code]custom_speed[/code] are [code]0[/code]). + </description> + </method> + <method name="pause"> + <return type="void" /> + <description> + Pauses the currently playing animation. The [member frame] and [member frame_progress] will be kept and calling [method play] or [method play_backwards] without arguments will resume the animation from the current playback position. + See also [method stop]. + </description> + </method> <method name="play"> <return type="void" /> - <param index="0" name="anim" type="StringName" default="&""" /> - <param index="1" name="backwards" type="bool" default="false" /> + <param index="0" name="name" type="StringName" default="&""" /> + <param index="1" name="custom_speed" type="float" default="1.0" /> + <param index="2" name="from_end" type="bool" default="false" /> + <description> + Plays the animation with key [param name]. If [param custom_speed] is negative and [param from_end] is [code]true[/code], the animation will play backwards (which is equivalent to calling [method play_backwards]). + If this method is called with that same animation [param name], or with no [param name] parameter, the assigned animation will resume playing if it was paused. + </description> + </method> + <method name="play_backwards"> + <return type="void" /> + <param index="0" name="name" type="StringName" default="&""" /> + <description> + Plays the animation with key [param name] in reverse. + This method is a shorthand for [method play] with [code]custom_speed = -1.0[/code] and [code]from_end = true[/code], so see its description for more information. + </description> + </method> + <method name="set_frame_and_progress"> + <return type="void" /> + <param index="0" name="frame" type="int" /> + <param index="1" name="progress" type="float" /> <description> - Plays the animation named [param anim]. If no [param anim] is provided, the current animation is played. If [param backwards] is [code]true[/code], the animation is played in reverse. - [b]Note:[/b] If [member speed_scale] is negative, the animation direction specified by [param backwards] will be inverted. + The setter of [member frame] resets the [member frame_progress] to [code]0.0[/code] implicitly, but this method avoids that. + This is useful when you want to carry over the current [member frame_progress] to another [member frame]. + [b]Example:[/b] + [codeblocks] + [gdscript] + # Change the animation with keeping the frame index and progress. + var current_frame = animated_sprite.get_frame() + var current_progress = animated_sprite.get_frame_progress() + animated_sprite.play("walk_another_skin") + animated_sprite.set_frame_and_progress(current_frame, current_progress) + [/gdscript] + [/codeblocks] </description> </method> <method name="stop"> <return type="void" /> <description> - Stops the current [member animation] at the current [member frame]. - [b]Note:[/b] This method resets the current frame's elapsed time and removes the [code]backwards[/code] flag from the current [member animation] (if it was previously set by [method play]). If this behavior is undesired, set [member playing] to [code]false[/code] instead. + Stops the currently playing animation. The animation position is reset to [code]0[/code] and the [code]custom_speed[/code] is reset to [code]1.0[/code]. See also [method pause]. </description> </method> </methods> <members> <member name="animation" type="StringName" setter="set_animation" getter="get_animation" default="&"default""> - The current animation from the [member frames] resource. If this value changes, the [code]frame[/code] counter is reset. + The current animation from the [member sprite_frames] resource. If this value is changed, the [member frame] counter and the [member frame_progress] are reset. + </member> + <member name="autoplay" type="String" setter="set_autoplay" getter="get_autoplay" default=""""> + The key of the animation to play when the scene loads. </member> <member name="centered" type="bool" setter="set_centered" getter="is_centered" default="true"> If [code]true[/code], texture will be centered. @@ -44,32 +92,46 @@ If [code]true[/code], texture is flipped vertically. </member> <member name="frame" type="int" setter="set_frame" getter="get_frame" default="0"> - The displayed animation frame's index. + The displayed animation frame's index. Setting this property also resets [member frame_progress]. If this is not desired, use [method set_frame_and_progress]. </member> - <member name="frames" type="SpriteFrames" setter="set_sprite_frames" getter="get_sprite_frames"> - The [SpriteFrames] resource containing the animation(s). Allows you the option to load, edit, clear, make unique and save the states of the [SpriteFrames] resource. + <member name="frame_progress" type="float" setter="set_frame_progress" getter="get_frame_progress" default="0.0"> + The progress value between [code]0.0[/code] and [code]1.0[/code] until the current frame transitions to the next frame. If the animation is playing backwards, the value transitions from [code]1.0[/code] to [code]0.0[/code]. </member> <member name="offset" type="Vector2" setter="set_offset" getter="get_offset" default="Vector2(0, 0)"> The texture's drawing offset. </member> - <member name="playing" type="bool" setter="set_playing" getter="is_playing" default="false"> - If [code]true[/code], the [member animation] is currently playing. Setting this property to [code]false[/code] pauses the current animation. Use [method stop] to stop the animation at the current frame instead. - [b]Note:[/b] Unlike [method stop], changing this property to [code]false[/code] preserves the current frame's elapsed time and the [code]backwards[/code] flag of the current [member animation] (if it was previously set by [method play]). - [b]Note:[/b] After a non-looping animation finishes, the property still remains [code]true[/code]. - </member> <member name="speed_scale" type="float" setter="set_speed_scale" getter="get_speed_scale" default="1.0"> - The animation speed is multiplied by this value. If set to a negative value, the animation is played in reverse. If set to [code]0[/code], the animation is paused, preserving the current frame's elapsed time. + The speed scaling ratio. For example, if this value is [code]1[/code], then the animation plays at normal speed. If it's [code]0.5[/code], then it plays at half speed. If it's [code]2[/code], then it plays at double speed. + If set to a negative value, the animation is played in reverse. If set to [code]0[/code], the animation will not advance. + </member> + <member name="sprite_frames" type="SpriteFrames" setter="set_sprite_frames" getter="get_sprite_frames"> + The [SpriteFrames] resource containing the animation(s). Allows you the option to load, edit, clear, make unique and save the states of the [SpriteFrames] resource. </member> </members> <signals> + <signal name="animation_changed"> + <description> + Emitted when [member animation] changes. + </description> + </signal> <signal name="animation_finished"> <description> - Emitted when the animation reaches the end, or the start if it is played in reverse. If the animation is looping, this signal is emitted at the end of each loop. + Emitted when the animation reaches the end, or the start if it is played in reverse. When the animation finishes, it pauses the playback. + </description> + </signal> + <signal name="animation_looped"> + <description> + Emitted when the animation loops. </description> </signal> <signal name="frame_changed"> <description> - Emitted when [member frame] changed. + Emitted when [member frame] changes. + </description> + </signal> + <signal name="sprite_frames_changed"> + <description> + Emitted when [member sprite_frames] changes. </description> </signal> </signals> diff --git a/doc/classes/AnimatedSprite3D.xml b/doc/classes/AnimatedSprite3D.xml index 4837ae715f..c39bb99827 100644 --- a/doc/classes/AnimatedSprite3D.xml +++ b/doc/classes/AnimatedSprite3D.xml @@ -4,59 +4,121 @@ 2D sprite node in 3D world, that can use multiple 2D textures for animation. </brief_description> <description> - [AnimatedSprite3D] is similar to the [Sprite3D] node, except it carries multiple textures as animation [member frames]. Animations are created using a [SpriteFrames] resource, which allows you to import image files (or a folder containing said files) to provide the animation frames for the sprite. The [SpriteFrames] resource can be configured in the editor via the SpriteFrames bottom panel. - After setting up [member frames], [method play] may be called. It's also possible to select an [member animation] and toggle [member playing], even within the editor. - To pause the current animation, set [member playing] to [code]false[/code]. Alternatively, setting [member speed_scale] to [code]0[/code] also preserves the current frame's elapsed time. + [AnimatedSprite3D] is similar to the [Sprite3D] node, except it carries multiple textures as animation [member sprite_frames]. Animations are created using a [SpriteFrames] resource, which allows you to import image files (or a folder containing said files) to provide the animation frames for the sprite. The [SpriteFrames] resource can be configured in the editor via the SpriteFrames bottom panel. </description> <tutorials> <link title="2D Sprite animation (also applies to 3D)">$DOCS_URL/tutorials/2d/2d_sprite_animation.html</link> </tutorials> <methods> + <method name="get_playing_speed" qualifiers="const"> + <return type="float" /> + <description> + Returns the actual playing speed of current animation or [code]0[/code] if not playing. This speed is the [member speed_scale] property multiplied by [code]custom_speed[/code] argument specified when calling the [method play] method. + Returns a negative value if the current animation is playing backwards. + </description> + </method> + <method name="is_playing" qualifiers="const"> + <return type="bool" /> + <description> + Returns [code]true[/code] if an animation is currently playing (even if [member speed_scale] and/or [code]custom_speed[/code] are [code]0[/code]). + </description> + </method> + <method name="pause"> + <return type="void" /> + <description> + Pauses the currently playing animation. The [member frame] and [member frame_progress] will be kept and calling [method play] or [method play_backwards] without arguments will resume the animation from the current playback position. + See also [method stop]. + </description> + </method> <method name="play"> <return type="void" /> - <param index="0" name="anim" type="StringName" default="&""" /> - <param index="1" name="backwards" type="bool" default="false" /> + <param index="0" name="name" type="StringName" default="&""" /> + <param index="1" name="custom_speed" type="float" default="1.0" /> + <param index="2" name="from_end" type="bool" default="false" /> + <description> + Plays the animation with key [param name]. If [param custom_speed] is negative and [param from_end] is [code]true[/code], the animation will play backwards (which is equivalent to calling [method play_backwards]). + If this method is called with that same animation [param name], or with no [param name] parameter, the assigned animation will resume playing if it was paused. + </description> + </method> + <method name="play_backwards"> + <return type="void" /> + <param index="0" name="name" type="StringName" default="&""" /> + <description> + Plays the animation with key [param name] in reverse. + This method is a shorthand for [method play] with [code]custom_speed = -1.0[/code] and [code]from_end = true[/code], so see its description for more information. + </description> + </method> + <method name="set_frame_and_progress"> + <return type="void" /> + <param index="0" name="frame" type="int" /> + <param index="1" name="progress" type="float" /> <description> - Plays the animation named [param anim]. If no [param anim] is provided, the current animation is played. If [param backwards] is [code]true[/code], the animation is played in reverse. - [b]Note:[/b] If [member speed_scale] is negative, the animation direction specified by [param backwards] will be inverted. + The setter of [member frame] resets the [member frame_progress] to [code]0.0[/code] implicitly, but this method avoids that. + This is useful when you want to carry over the current [member frame_progress] to another [member frame]. + [b]Example:[/b] + [codeblocks] + [gdscript] + # Change the animation with keeping the frame index and progress. + var current_frame = animated_sprite.get_frame() + var current_progress = animated_sprite.get_frame_progress() + animated_sprite.play("walk_another_skin") + animated_sprite.set_frame_and_progress(current_frame, current_progress) + [/gdscript] + [/codeblocks] </description> </method> <method name="stop"> <return type="void" /> <description> - Stops the current [member animation] at the current [member frame]. - [b]Note:[/b] This method resets the current frame's elapsed time and removes the [code]backwards[/code] flag from the current [member animation] (if it was previously set by [method play]). If this behavior is undesired, set [member playing] to [code]false[/code] instead. + Stops the currently playing animation. The animation position is reset to [code]0[/code] and the [code]custom_speed[/code] is reset to [code]1.0[/code]. See also [method pause]. </description> </method> </methods> <members> <member name="animation" type="StringName" setter="set_animation" getter="get_animation" default="&"default""> - The current animation from the [code]frames[/code] resource. If this value changes, the [code]frame[/code] counter is reset. + The current animation from the [member sprite_frames] resource. If this value is changed, the [member frame] counter and the [member frame_progress] are reset. </member> - <member name="frame" type="int" setter="set_frame" getter="get_frame" default="0"> - The displayed animation frame's index. + <member name="autoplay" type="String" setter="set_autoplay" getter="get_autoplay" default=""""> + The key of the animation to play when the scene loads. </member> - <member name="frames" type="SpriteFrames" setter="set_sprite_frames" getter="get_sprite_frames"> - The [SpriteFrames] resource containing the animation(s). + <member name="frame" type="int" setter="set_frame" getter="get_frame" default="0"> + The displayed animation frame's index. Setting this property also resets [member frame_progress]. If this is not desired, use [method set_frame_and_progress]. </member> - <member name="playing" type="bool" setter="set_playing" getter="is_playing" default="false"> - If [code]true[/code], the [member animation] is currently playing. Setting this property to [code]false[/code] pauses the current animation. Use [method stop] to stop the animation at the current frame instead. - [b]Note:[/b] Unlike [method stop], changing this property to [code]false[/code] preserves the current frame's elapsed time and the [code]backwards[/code] flag of the current [member animation] (if it was previously set by [method play]). - [b]Note:[/b] After a non-looping animation finishes, the property still remains [code]true[/code]. + <member name="frame_progress" type="float" setter="set_frame_progress" getter="get_frame_progress" default="0.0"> + The progress value between [code]0.0[/code] and [code]1.0[/code] until the current frame transitions to the next frame. If the animation is playing backwards, the value transitions from [code]1.0[/code] to [code]0.0[/code]. </member> <member name="speed_scale" type="float" setter="set_speed_scale" getter="get_speed_scale" default="1.0"> - The animation speed is multiplied by this value. If set to a negative value, the animation is played in reverse. If set to [code]0[/code], the animation is paused, preserving the current frame's elapsed time. + The speed scaling ratio. For example, if this value is [code]1[/code], then the animation plays at normal speed. If it's [code]0.5[/code], then it plays at half speed. If it's [code]2[/code], then it plays at double speed. + If set to a negative value, the animation is played in reverse. If set to [code]0[/code], the animation will not advance. + </member> + <member name="sprite_frames" type="SpriteFrames" setter="set_sprite_frames" getter="get_sprite_frames"> + The [SpriteFrames] resource containing the animation(s). Allows you the option to load, edit, clear, make unique and save the states of the [SpriteFrames] resource. </member> </members> <signals> + <signal name="animation_changed"> + <description> + Emitted when [member animation] changes. + </description> + </signal> <signal name="animation_finished"> <description> - Emitted when the animation reaches the end, or the start if it is played in reverse. If the animation is looping, this signal is emitted at the end of each loop. + Emitted when the animation reaches the end, or the start if it is played in reverse. When the animation finishes, it pauses the playback. + </description> + </signal> + <signal name="animation_looped"> + <description> + Emitted when the animation loops. </description> </signal> <signal name="frame_changed"> <description> - Emitted when [member frame] changed. + Emitted when [member frame] changes. + </description> + </signal> + <signal name="sprite_frames_changed"> + <description> + Emitted when [member sprite_frames] changes. </description> </signal> </signals> diff --git a/doc/classes/AnimationNodeStateMachineTransition.xml b/doc/classes/AnimationNodeStateMachineTransition.xml index eee25fad7c..bccab4613a 100644 --- a/doc/classes/AnimationNodeStateMachineTransition.xml +++ b/doc/classes/AnimationNodeStateMachineTransition.xml @@ -15,7 +15,7 @@ $animation_tree.set("parameters/conditions/idle", is_on_floor and (linear_velocity.x == 0)) [/gdscript] [csharp] - GetNode<AnimationTree>("animation_tree").Set("parameters/conditions/idle", IsOnFloor && (LinearVelocity.x == 0)); + GetNode<AnimationTree>("animation_tree").Set("parameters/conditions/idle", IsOnFloor && (LinearVelocity.X == 0)); [/csharp] [/codeblocks] </member> diff --git a/doc/classes/AnimationPlayer.xml b/doc/classes/AnimationPlayer.xml index c164fe4363..8982eeedb2 100644 --- a/doc/classes/AnimationPlayer.xml +++ b/doc/classes/AnimationPlayer.xml @@ -113,13 +113,14 @@ <param index="0" name="anim_from" type="StringName" /> <param index="1" name="anim_to" type="StringName" /> <description> - Gets the blend time (in seconds) between two animations, referenced by their keys. + Returns the blend time (in seconds) between two animations, referenced by their keys. </description> </method> <method name="get_playing_speed" qualifiers="const"> <return type="float" /> <description> - Gets the actual playing speed of current animation or 0 if not playing. This speed is the [member playback_speed] property multiplied by [code]custom_speed[/code] argument specified when calling the [method play] method. + Returns the actual playing speed of current animation or [code]0[/code] if not playing. This speed is the [member speed_scale] property multiplied by [code]custom_speed[/code] argument specified when calling the [method play] method. + Returns a negative value if the current animation is playing backwards. </description> </method> <method name="get_queue"> @@ -145,7 +146,7 @@ <method name="is_playing" qualifiers="const"> <return type="bool" /> <description> - Returns [code]true[/code] if playing an animation. + Returns [code]true[/code] if an animation is currently playing (even if [member speed_scale] and/or [code]custom_speed[/code] are [code]0[/code]). </description> </method> <method name="pause"> @@ -163,7 +164,7 @@ <param index="3" name="from_end" type="bool" default="false" /> <description> Plays the animation with key [param name]. Custom blend times and speed can be set. If [param custom_speed] is negative and [param from_end] is [code]true[/code], the animation will play backwards (which is equivalent to calling [method play_backwards]). - The [AnimationPlayer] keeps track of its current or last played animation with [member assigned_animation]. If this method is called with that same animation [param name], or with no [param name] parameter, the assigned animation will resume playing if it was paused, or restart if it was stopped (see [method stop] for both pause and stop). If the animation was already playing, it will keep playing. + The [AnimationPlayer] keeps track of its current or last played animation with [member assigned_animation]. If this method is called with that same animation [param name], or with no [param name] parameter, the assigned animation will resume playing if it was paused. [b]Note:[/b] The animation will be updated the next time the [AnimationPlayer] is processed. If other variables are updated at the same time this is called, they may be updated too early. To perform the update immediately, call [code]advance(0)[/code]. </description> </method> @@ -221,7 +222,7 @@ <return type="void" /> <param index="0" name="keep_state" type="bool" default="false" /> <description> - Stops the currently playing animation. The animation position is reset to [code]0[/code] and the playback speed is reset to [code]1.0[/code]. See also [method pause]. + Stops the currently playing animation. The animation position is reset to [code]0[/code] and the [code]custom_speed[/code] is reset to [code]1.0[/code]. See also [method pause]. If [param keep_state] is [code]true[/code], the animation state is not updated visually. [b]Note:[/b] The method / audio / animation playback tracks will not be processed by this method. </description> @@ -260,9 +261,6 @@ <member name="playback_process_mode" type="int" setter="set_process_callback" getter="get_process_callback" enum="AnimationPlayer.AnimationProcessCallback" default="1"> The process notification in which to update animations. </member> - <member name="playback_speed" type="float" setter="set_speed_scale" getter="get_speed_scale" default="1.0"> - The speed scaling ratio. For example, if this value is 1, then the animation plays at normal speed. If it's 0.5, then it plays at half speed. If it's 2, then it plays at double speed. - </member> <member name="reset_on_save" type="bool" setter="set_reset_on_save_enabled" getter="is_reset_on_save_enabled" default="true"> This is used by the editor. If set to [code]true[/code], the scene will be saved with the effects of the reset animation (the animation with the key [code]"RESET"[/code]) applied as if it had been seeked to time 0, with the editor keeping the values that the scene had before saving. This makes it more convenient to preview and edit animations in the editor, as changes to the scene will not be saved as long as they are set in the reset animation. @@ -270,6 +268,10 @@ <member name="root_node" type="NodePath" setter="set_root" getter="get_root" default="NodePath("..")"> The node from which node path references will travel. </member> + <member name="speed_scale" type="float" setter="set_speed_scale" getter="get_speed_scale" default="1.0"> + The speed scaling ratio. For example, if this value is [code]1[/code], then the animation plays at normal speed. If it's [code]0.5[/code], then it plays at half speed. If it's [code]2[/code], then it plays at double speed. + If set to a negative value, the animation is played in reverse. If set to [code]0[/code], the animation will not advance. + </member> </members> <signals> <signal name="animation_changed"> diff --git a/doc/classes/Array.xml b/doc/classes/Array.xml index ce4d7693d8..1ac1c0745e 100644 --- a/doc/classes/Array.xml +++ b/doc/classes/Array.xml @@ -392,7 +392,7 @@ <method name="is_read_only" qualifiers="const"> <return type="bool" /> <description> - Returns [code]true[/code] if the array is read-only. See [method set_read_only]. Arrays are automatically read-only if declared with [code]const[/code] keyword. + Returns [code]true[/code] if the array is read-only. See [method make_read_only]. Arrays are automatically read-only if declared with [code]const[/code] keyword. </description> </method> <method name="is_typed" qualifiers="const"> @@ -401,6 +401,12 @@ Returns [code]true[/code] if the array is typed. Typed arrays can only store elements of their associated type and provide type safety for the [code][][/code] operator. Methods of typed array still return [Variant]. </description> </method> + <method name="make_read_only"> + <return type="void" /> + <description> + Makes the array read-only, i.e. disabled modifying of the array's elements. Does not apply to nested content, e.g. content of nested arrays. + </description> + </method> <method name="map" qualifiers="const"> <return type="Array" /> <param index="0" name="method" type="Callable" /> @@ -524,13 +530,6 @@ Searches the array in reverse order. Optionally, a start search index can be passed. If negative, the start index is considered relative to the end of the array. </description> </method> - <method name="set_read_only"> - <return type="void" /> - <param index="0" name="enable" type="bool" /> - <description> - Makes the [Array] read-only, i.e. disabled modifying of the array's elements. Does not apply to nested content, e.g. content of nested arrays. - </description> - </method> <method name="set_typed"> <return type="void" /> <param index="0" name="type" type="int" /> diff --git a/doc/classes/Dictionary.xml b/doc/classes/Dictionary.xml index 03e5b5d1d8..ea0bcc5cbb 100644 --- a/doc/classes/Dictionary.xml +++ b/doc/classes/Dictionary.xml @@ -271,12 +271,24 @@ Returns [code]true[/code] if the dictionary is empty (its size is [code]0[/code]). See also [method size]. </description> </method> + <method name="is_read_only" qualifiers="const"> + <return type="bool" /> + <description> + Returns [code]true[/code] if the dictionary is read-only. See [method make_read_only]. Dictionaries are automatically read-only if declared with [code]const[/code] keyword. + </description> + </method> <method name="keys" qualifiers="const"> <return type="Array" /> <description> Returns the list of keys in the dictionary. </description> </method> + <method name="make_read_only"> + <return type="void" /> + <description> + Makes the dictionary read-only, i.e. disabled modifying of the dictionary's contents. Does not apply to nested content, e.g. content of nested dicitonaries. + </description> + </method> <method name="merge"> <return type="void" /> <param index="0" name="dictionary" type="Dictionary" /> diff --git a/doc/classes/Image.xml b/doc/classes/Image.xml index 051e087611..b13564cfef 100644 --- a/doc/classes/Image.xml +++ b/doc/classes/Image.xml @@ -525,7 +525,7 @@ var img = new Image(); img.Create(imgWidth, imgHeight, false, Image.Format.Rgba8); - img.SetPixelv(new Vector2i(1, 2), Colors.Red); // Sets the color at (1, 2) to red. + img.SetPixelv(new Vector2I(1, 2), Colors.Red); // Sets the color at (1, 2) to red. [/csharp] [/codeblocks] This is the same as [method set_pixel], but with a [Vector2i] argument instead of two integer arguments. diff --git a/doc/classes/LineEdit.xml b/doc/classes/LineEdit.xml index b8383aaed9..8ed8622030 100644 --- a/doc/classes/LineEdit.xml +++ b/doc/classes/LineEdit.xml @@ -61,6 +61,45 @@ <return type="PopupMenu" /> <description> Returns the [PopupMenu] of this [LineEdit]. By default, this menu is displayed when right-clicking on the [LineEdit]. + You can add custom menu items or remove standard ones. Make sure your IDs don't conflict with the standard ones (see [enum MenuItems]). For example: + [codeblocks] + [gdscript] + func _ready(): + var menu = get_menu() + # Remove all items after "Redo". + menu.item_count = menu.get_item_index(MENU_REDO) + 1 + # Add custom items. + menu.add_separator() + menu.add_item("Insert Date", MENU_MAX + 1) + # Connect callback. + menu.id_pressed.connect(_on_item_pressed) + + func _on_item_pressed(id): + if id == MENU_MAX + 1: + insert_text_at_caret(Time.get_date_string_from_system()) + [/gdscript] + [csharp] + public override void _Ready() + { + var menu = GetMenu(); + // Remove all items after "Redo". + menu.ItemCount = menu.GetItemIndex(LineEdit.MenuItems.Redo) + 1; + // Add custom items. + menu.AddSeparator(); + menu.AddItem("Insert Date", LineEdit.MenuItems.Max + 1); + // Add event handler. + menu.IdPressed += OnItemPressed; + } + + public void OnItemPressed(int id) + { + if (id == LineEdit.MenuItems.Max + 1) + { + InsertTextAtCaret(Time.GetDateStringFromSystem()); + } + } + [/csharp] + [/codeblocks] [b]Warning:[/b] This is a required internal node, removing and freeing it may cause a crash. If you wish to hide it or any of its children, use their [member Window.visible] property. </description> </method> @@ -296,70 +335,76 @@ <constant name="MENU_REDO" value="6" enum="MenuItems"> Reverse the last undo action. </constant> - <constant name="MENU_DIR_INHERITED" value="7" enum="MenuItems"> + <constant name="MENU_SUBMENU_TEXT_DIR" value="7" enum="MenuItems"> + ID of "Text Writing Direction" submenu. + </constant> + <constant name="MENU_DIR_INHERITED" value="8" enum="MenuItems"> Sets text direction to inherited. </constant> - <constant name="MENU_DIR_AUTO" value="8" enum="MenuItems"> + <constant name="MENU_DIR_AUTO" value="9" enum="MenuItems"> Sets text direction to automatic. </constant> - <constant name="MENU_DIR_LTR" value="9" enum="MenuItems"> + <constant name="MENU_DIR_LTR" value="10" enum="MenuItems"> Sets text direction to left-to-right. </constant> - <constant name="MENU_DIR_RTL" value="10" enum="MenuItems"> + <constant name="MENU_DIR_RTL" value="11" enum="MenuItems"> Sets text direction to right-to-left. </constant> - <constant name="MENU_DISPLAY_UCC" value="11" enum="MenuItems"> + <constant name="MENU_DISPLAY_UCC" value="12" enum="MenuItems"> Toggles control character display. </constant> - <constant name="MENU_INSERT_LRM" value="12" enum="MenuItems"> + <constant name="MENU_SUBMENU_INSERT_UCC" value="13" enum="MenuItems"> + ID of "Insert Control Character" submenu. + </constant> + <constant name="MENU_INSERT_LRM" value="14" enum="MenuItems"> Inserts left-to-right mark (LRM) character. </constant> - <constant name="MENU_INSERT_RLM" value="13" enum="MenuItems"> + <constant name="MENU_INSERT_RLM" value="15" enum="MenuItems"> Inserts right-to-left mark (RLM) character. </constant> - <constant name="MENU_INSERT_LRE" value="14" enum="MenuItems"> + <constant name="MENU_INSERT_LRE" value="16" enum="MenuItems"> Inserts start of left-to-right embedding (LRE) character. </constant> - <constant name="MENU_INSERT_RLE" value="15" enum="MenuItems"> + <constant name="MENU_INSERT_RLE" value="17" enum="MenuItems"> Inserts start of right-to-left embedding (RLE) character. </constant> - <constant name="MENU_INSERT_LRO" value="16" enum="MenuItems"> + <constant name="MENU_INSERT_LRO" value="18" enum="MenuItems"> Inserts start of left-to-right override (LRO) character. </constant> - <constant name="MENU_INSERT_RLO" value="17" enum="MenuItems"> + <constant name="MENU_INSERT_RLO" value="19" enum="MenuItems"> Inserts start of right-to-left override (RLO) character. </constant> - <constant name="MENU_INSERT_PDF" value="18" enum="MenuItems"> + <constant name="MENU_INSERT_PDF" value="20" enum="MenuItems"> Inserts pop direction formatting (PDF) character. </constant> - <constant name="MENU_INSERT_ALM" value="19" enum="MenuItems"> + <constant name="MENU_INSERT_ALM" value="21" enum="MenuItems"> Inserts Arabic letter mark (ALM) character. </constant> - <constant name="MENU_INSERT_LRI" value="20" enum="MenuItems"> + <constant name="MENU_INSERT_LRI" value="22" enum="MenuItems"> Inserts left-to-right isolate (LRI) character. </constant> - <constant name="MENU_INSERT_RLI" value="21" enum="MenuItems"> + <constant name="MENU_INSERT_RLI" value="23" enum="MenuItems"> Inserts right-to-left isolate (RLI) character. </constant> - <constant name="MENU_INSERT_FSI" value="22" enum="MenuItems"> + <constant name="MENU_INSERT_FSI" value="24" enum="MenuItems"> Inserts first strong isolate (FSI) character. </constant> - <constant name="MENU_INSERT_PDI" value="23" enum="MenuItems"> + <constant name="MENU_INSERT_PDI" value="25" enum="MenuItems"> Inserts pop direction isolate (PDI) character. </constant> - <constant name="MENU_INSERT_ZWJ" value="24" enum="MenuItems"> + <constant name="MENU_INSERT_ZWJ" value="26" enum="MenuItems"> Inserts zero width joiner (ZWJ) character. </constant> - <constant name="MENU_INSERT_ZWNJ" value="25" enum="MenuItems"> + <constant name="MENU_INSERT_ZWNJ" value="27" enum="MenuItems"> Inserts zero width non-joiner (ZWNJ) character. </constant> - <constant name="MENU_INSERT_WJ" value="26" enum="MenuItems"> + <constant name="MENU_INSERT_WJ" value="28" enum="MenuItems"> Inserts word joiner (WJ) character. </constant> - <constant name="MENU_INSERT_SHY" value="27" enum="MenuItems"> + <constant name="MENU_INSERT_SHY" value="29" enum="MenuItems"> Inserts soft hyphen (SHY) character. </constant> - <constant name="MENU_MAX" value="28" enum="MenuItems"> + <constant name="MENU_MAX" value="30" enum="MenuItems"> Represents the size of the [enum MenuItems] enum. </constant> <constant name="KEYBOARD_TYPE_DEFAULT" value="0" enum="VirtualKeyboardType"> diff --git a/doc/classes/Rect2i.xml b/doc/classes/Rect2i.xml index 325ead0cfa..80a9b40605 100644 --- a/doc/classes/Rect2i.xml +++ b/doc/classes/Rect2i.xml @@ -80,9 +80,9 @@ [/gdscript] [csharp] // position (-3, 2), size (1, 1) - var rect = new Rect2i(new Vector2i(-3, 2), new Vector2i(1, 1)); - // position (-3, -1), size (3, 4), so we fit both rect and Vector2i(0, -1) - var rect2 = rect.Expand(new Vector2i(0, -1)); + var rect = new Rect2I(new Vector2I(-3, 2), new Vector2I(1, 1)); + // position (-3, -1), size (3, 4), so we fit both rect and Vector2I(0, -1) + var rect2 = rect.Expand(new Vector2I(0, -1)); [/csharp] [/codeblocks] </description> diff --git a/doc/classes/TextEdit.xml b/doc/classes/TextEdit.xml index ccd79cd170..c309026aaa 100644 --- a/doc/classes/TextEdit.xml +++ b/doc/classes/TextEdit.xml @@ -390,6 +390,45 @@ <return type="PopupMenu" /> <description> Returns the [PopupMenu] of this [TextEdit]. By default, this menu is displayed when right-clicking on the [TextEdit]. + You can add custom menu items or remove standard ones. Make sure your IDs don't conflict with the standard ones (see [enum MenuItems]). For example: + [codeblocks] + [gdscript] + func _ready(): + var menu = get_menu() + # Remove all items after "Redo". + menu.item_count = menu.get_item_index(MENU_REDO) + 1 + # Add custom items. + menu.add_separator() + menu.add_item("Insert Date", MENU_MAX + 1) + # Connect callback. + menu.id_pressed.connect(_on_item_pressed) + + func _on_item_pressed(id): + if id == MENU_MAX + 1: + insert_text_at_caret(Time.get_date_string_from_system()) + [/gdscript] + [csharp] + public override void _Ready() + { + var menu = GetMenu(); + // Remove all items after "Redo". + menu.ItemCount = menu.GetItemIndex(TextEdit.MenuItems.Redo) + 1; + // Add custom items. + menu.AddSeparator(); + menu.AddItem("Insert Date", TextEdit.MenuItems.Max + 1); + // Add event handler. + menu.IdPressed += OnItemPressed; + } + + public void OnItemPressed(int id) + { + if (id == TextEdit.MenuItems.Max + 1) + { + InsertTextAtCaret(Time.GetDateStringFromSystem()); + } + } + [/csharp] + [/codeblocks] [b]Warning:[/b] This is a required internal node, removing and freeing it may cause a crash. If you wish to hide it or any of its children, use their [member Window.visible] property. </description> </method> @@ -682,7 +721,7 @@ <return type="void" /> <param index="0" name="option" type="int" /> <description> - Triggers a right-click menu action by the specified index. See [enum MenuItems] for a list of available indexes. + Executes a given action as defined in the [enum MenuItems] enum. </description> </method> <method name="merge_gutters"> @@ -764,18 +803,18 @@ [codeblocks] [gdscript] var result = search("print", SEARCH_WHOLE_WORDS, 0, 0) - if result.x != -1: + if result.x != -1: # Result found. var line_number = result.y var column_number = result.x [/gdscript] [csharp] - Vector2i result = Search("print", (uint)TextEdit.SearchFlags.WholeWords, 0, 0); - if (result.Length > 0) + Vector2I result = Search("print", (uint)TextEdit.SearchFlags.WholeWords, 0, 0); + if (result.X != -1) { // Result found. - int lineNumber = result.y; - int columnNumber = result.x; + int lineNumber = result.Y; + int columnNumber = result.X; } [/csharp] [/codeblocks] @@ -1224,70 +1263,76 @@ <constant name="MENU_REDO" value="6" enum="MenuItems"> Redoes the previous action. </constant> - <constant name="MENU_DIR_INHERITED" value="7" enum="MenuItems"> + <constant name="MENU_SUBMENU_TEXT_DIR" value="7" enum="MenuItems"> + ID of "Text Writing Direction" submenu. + </constant> + <constant name="MENU_DIR_INHERITED" value="8" enum="MenuItems"> Sets text direction to inherited. </constant> - <constant name="MENU_DIR_AUTO" value="8" enum="MenuItems"> + <constant name="MENU_DIR_AUTO" value="9" enum="MenuItems"> Sets text direction to automatic. </constant> - <constant name="MENU_DIR_LTR" value="9" enum="MenuItems"> + <constant name="MENU_DIR_LTR" value="10" enum="MenuItems"> Sets text direction to left-to-right. </constant> - <constant name="MENU_DIR_RTL" value="10" enum="MenuItems"> + <constant name="MENU_DIR_RTL" value="11" enum="MenuItems"> Sets text direction to right-to-left. </constant> - <constant name="MENU_DISPLAY_UCC" value="11" enum="MenuItems"> + <constant name="MENU_DISPLAY_UCC" value="12" enum="MenuItems"> Toggles control character display. </constant> - <constant name="MENU_INSERT_LRM" value="12" enum="MenuItems"> + <constant name="MENU_SUBMENU_INSERT_UCC" value="13" enum="MenuItems"> + ID of "Insert Control Character" submenu. + </constant> + <constant name="MENU_INSERT_LRM" value="14" enum="MenuItems"> Inserts left-to-right mark (LRM) character. </constant> - <constant name="MENU_INSERT_RLM" value="13" enum="MenuItems"> + <constant name="MENU_INSERT_RLM" value="15" enum="MenuItems"> Inserts right-to-left mark (RLM) character. </constant> - <constant name="MENU_INSERT_LRE" value="14" enum="MenuItems"> + <constant name="MENU_INSERT_LRE" value="16" enum="MenuItems"> Inserts start of left-to-right embedding (LRE) character. </constant> - <constant name="MENU_INSERT_RLE" value="15" enum="MenuItems"> + <constant name="MENU_INSERT_RLE" value="17" enum="MenuItems"> Inserts start of right-to-left embedding (RLE) character. </constant> - <constant name="MENU_INSERT_LRO" value="16" enum="MenuItems"> + <constant name="MENU_INSERT_LRO" value="18" enum="MenuItems"> Inserts start of left-to-right override (LRO) character. </constant> - <constant name="MENU_INSERT_RLO" value="17" enum="MenuItems"> + <constant name="MENU_INSERT_RLO" value="19" enum="MenuItems"> Inserts start of right-to-left override (RLO) character. </constant> - <constant name="MENU_INSERT_PDF" value="18" enum="MenuItems"> + <constant name="MENU_INSERT_PDF" value="20" enum="MenuItems"> Inserts pop direction formatting (PDF) character. </constant> - <constant name="MENU_INSERT_ALM" value="19" enum="MenuItems"> + <constant name="MENU_INSERT_ALM" value="21" enum="MenuItems"> Inserts Arabic letter mark (ALM) character. </constant> - <constant name="MENU_INSERT_LRI" value="20" enum="MenuItems"> + <constant name="MENU_INSERT_LRI" value="22" enum="MenuItems"> Inserts left-to-right isolate (LRI) character. </constant> - <constant name="MENU_INSERT_RLI" value="21" enum="MenuItems"> + <constant name="MENU_INSERT_RLI" value="23" enum="MenuItems"> Inserts right-to-left isolate (RLI) character. </constant> - <constant name="MENU_INSERT_FSI" value="22" enum="MenuItems"> + <constant name="MENU_INSERT_FSI" value="24" enum="MenuItems"> Inserts first strong isolate (FSI) character. </constant> - <constant name="MENU_INSERT_PDI" value="23" enum="MenuItems"> + <constant name="MENU_INSERT_PDI" value="25" enum="MenuItems"> Inserts pop direction isolate (PDI) character. </constant> - <constant name="MENU_INSERT_ZWJ" value="24" enum="MenuItems"> + <constant name="MENU_INSERT_ZWJ" value="26" enum="MenuItems"> Inserts zero width joiner (ZWJ) character. </constant> - <constant name="MENU_INSERT_ZWNJ" value="25" enum="MenuItems"> + <constant name="MENU_INSERT_ZWNJ" value="27" enum="MenuItems"> Inserts zero width non-joiner (ZWNJ) character. </constant> - <constant name="MENU_INSERT_WJ" value="26" enum="MenuItems"> + <constant name="MENU_INSERT_WJ" value="28" enum="MenuItems"> Inserts word joiner (WJ) character. </constant> - <constant name="MENU_INSERT_SHY" value="27" enum="MenuItems"> + <constant name="MENU_INSERT_SHY" value="29" enum="MenuItems"> Inserts soft hyphen (SHY) character. </constant> - <constant name="MENU_MAX" value="28" enum="MenuItems"> + <constant name="MENU_MAX" value="30" enum="MenuItems"> Represents the size of the [enum MenuItems] enum. </constant> <constant name="ACTION_NONE" value="0" enum="EditAction"> diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp index 2c6b9990ed..945a3ef932 100644 --- a/editor/debugger/script_editor_debugger.cpp +++ b/editor/debugger/script_editor_debugger.cpp @@ -519,7 +519,7 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da String error_title; if (oe.callstack.size() > 0) { // If available, use the script's stack in the error title. - error_title = oe.callstack[oe.callstack.size() - 1].func + ": "; + error_title = _format_frame_text(&oe.callstack[0]) + ": "; } else if (!oe.source_func.is_empty()) { // Otherwise try to use the C++ source function. error_title += oe.source_func + ": "; @@ -530,13 +530,25 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da error->set_text(1, error_title); tooltip += " " + error_title + "\n"; + // Find the language of the error's source file. + String source_language_name = "C++"; // Default value is the old hard-coded one. + const String source_file_extension = oe.source_file.get_extension(); + for (int i = 0; i < ScriptServer::get_language_count(); ++i) { + ScriptLanguage *script_language = ScriptServer::get_language(i); + if (source_file_extension == script_language->get_extension()) { + source_language_name = script_language->get_name(); + break; + } + } + if (!oe.error_descr.is_empty()) { // Add item for C++ error condition. TreeItem *cpp_cond = error_tree->create_item(error); - cpp_cond->set_text(0, "<" + TTR("C++ Error") + ">"); + // TRANSLATORS: %s is the name of a language, e.g. C++. + cpp_cond->set_text(0, "<" + vformat(TTR("%s Error"), source_language_name) + ">"); cpp_cond->set_text(1, oe.error); cpp_cond->set_text_alignment(0, HORIZONTAL_ALIGNMENT_LEFT); - tooltip += TTR("C++ Error:") + " " + oe.error + "\n"; + tooltip += vformat(TTR("%s Error:"), source_language_name) + "\n"; if (source_is_project_file) { cpp_cond->set_metadata(0, source_meta); } @@ -547,14 +559,18 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da // Source of the error. String source_txt = (source_is_project_file ? oe.source_file.get_file() : oe.source_file) + ":" + itos(oe.source_line); if (!oe.source_func.is_empty()) { - source_txt += " @ " + oe.source_func + "()"; + source_txt += " @ " + oe.source_func; + if (!oe.source_func.ends_with(")")) { + source_txt += "()"; + } } TreeItem *cpp_source = error_tree->create_item(error); - cpp_source->set_text(0, "<" + (source_is_project_file ? TTR("Source") : TTR("C++ Source")) + ">"); + // TRANSLATORS: %s is the name of a language, e.g. C++. + cpp_source->set_text(0, "<" + vformat(TTR("%s Source"), source_language_name) + ">"); cpp_source->set_text(1, source_txt); cpp_source->set_text_alignment(0, HORIZONTAL_ALIGNMENT_LEFT); - tooltip += (source_is_project_file ? TTR("Source:") : TTR("C++ Source:")) + " " + source_txt + "\n"; + tooltip += vformat(TTR("%s Source:"), source_language_name) + source_txt + "\n"; // Set metadata to highlight error line in scripts. if (source_is_project_file) { @@ -581,7 +597,7 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da tooltip += TTR("Stack Trace:") + "\n"; } - String frame_txt = infos[i].file.get_file() + ":" + itos(infos[i].line) + " @ " + infos[i].func + "()"; + String frame_txt = _format_frame_text(&infos[i]); tooltip += frame_txt + "\n"; stack_trace->set_text(1, frame_txt); } @@ -901,6 +917,14 @@ void ScriptEditorDebugger::_breakpoint_tree_clicked() { } } +String ScriptEditorDebugger::_format_frame_text(const ScriptLanguage::StackInfo *info) { + String text = info->file.get_file() + ":" + itos(info->line) + " @ " + info->func; + if (!text.ends_with(")")) { + text += "()"; + } + return text; +} + void ScriptEditorDebugger::start(Ref<RemoteDebuggerPeer> p_peer) { _clear_errors_list(); stop(); diff --git a/editor/debugger/script_editor_debugger.h b/editor/debugger/script_editor_debugger.h index e31b3af3d9..a0c420522a 100644 --- a/editor/debugger/script_editor_debugger.h +++ b/editor/debugger/script_editor_debugger.h @@ -210,6 +210,8 @@ private: void _breakpoint_tree_clicked(); + String _format_frame_text(const ScriptLanguage::StackInfo *info); + protected: void _notification(int p_what); static void _bind_methods(); diff --git a/editor/export/editor_export_platform.cpp b/editor/export/editor_export_platform.cpp index 9f79eecfb7..b2a3085c36 100644 --- a/editor/export/editor_export_platform.cpp +++ b/editor/export/editor_export_platform.cpp @@ -1802,6 +1802,13 @@ Error EditorExportPlatform::ssh_run_on_remote(const String &p_host, const String List<String> args; args.push_back("-p"); args.push_back(p_port); + args.push_back("-q"); + args.push_back("-o"); + args.push_back("LogLevel=error"); + args.push_back("-o"); + args.push_back("BatchMode=yes"); + args.push_back("-o"); + args.push_back("StrictHostKeyChecking=no"); for (const String &E : p_ssh_args) { args.push_back(E); } @@ -1852,6 +1859,13 @@ Error EditorExportPlatform::ssh_run_on_remote_no_wait(const String &p_host, cons List<String> args; args.push_back("-p"); args.push_back(p_port); + args.push_back("-q"); + args.push_back("-o"); + args.push_back("LogLevel=error"); + args.push_back("-o"); + args.push_back("BatchMode=yes"); + args.push_back("-o"); + args.push_back("StrictHostKeyChecking=no"); for (const String &E : p_ssh_args) { args.push_back(E); } @@ -1882,6 +1896,13 @@ Error EditorExportPlatform::ssh_push_to_remote(const String &p_host, const Strin List<String> args; args.push_back("-P"); args.push_back(p_port); + args.push_back("-q"); + args.push_back("-o"); + args.push_back("LogLevel=error"); + args.push_back("-o"); + args.push_back("BatchMode=yes"); + args.push_back("-o"); + args.push_back("StrictHostKeyChecking=no"); for (const String &E : p_scp_args) { args.push_back(E); } diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index 06241d07cf..30e06bfcf4 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -245,7 +245,7 @@ void AnimationPlayerEditor::_play_bw_pressed() { player->stop(); //so it won't blend with itself } ERR_FAIL_COND_EDMSG(!_validate_tracks(player->get_animation(current)), "Animation tracks may have any invalid key, abort playing."); - player->play(current, -1, -1, true); + player->play_backwards(current); } //unstop @@ -262,7 +262,7 @@ void AnimationPlayerEditor::_play_bw_from_pressed() { } ERR_FAIL_COND_EDMSG(!_validate_tracks(player->get_animation(current)), "Animation tracks may have any invalid key, abort playing."); player->seek(time); - player->play(current, -1, -1, true); + player->play_backwards(current); } //unstop @@ -452,7 +452,9 @@ float AnimationPlayerEditor::_get_editor_step() const { } void AnimationPlayerEditor::_animation_name_edited() { - player->stop(); + if (player->is_playing()) { + player->stop(); + } String new_name = name->get_text(); if (!AnimationLibrary::is_valid_animation_name(new_name)) { @@ -1675,7 +1677,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(AnimationPlayerEditorPlugin *p_plug stop = memnew(Button); stop->set_flat(true); hb->add_child(stop); - stop->set_tooltip_text(TTR("Stop animation playback. (S)")); + stop->set_tooltip_text(TTR("Pause/stop animation playback. (S)")); play = memnew(Button); play->set_flat(true); diff --git a/editor/plugins/sprite_frames_editor_plugin.cpp b/editor/plugins/sprite_frames_editor_plugin.cpp index 74c9286325..a7b32ce0c3 100644 --- a/editor/plugins/sprite_frames_editor_plugin.cpp +++ b/editor/plugins/sprite_frames_editor_plugin.cpp @@ -40,7 +40,6 @@ #include "editor/editor_settings.h" #include "editor/editor_undo_redo_manager.h" #include "editor/scene_tree_dock.h" -#include "scene/3d/sprite_3d.h" #include "scene/gui/center_container.h" #include "scene/gui/margin_container.h" #include "scene/gui/panel_container.h" @@ -252,8 +251,7 @@ void SpriteFramesEditor::_sheet_add_frames() { const Size2i separation = _get_separation(); EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(TTR("Add Frame")); - + undo_redo->create_action(TTR("Add Frame"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); int fc = frames->get_frame_count(edited_anim); for (const int &E : frames_selected) { @@ -265,8 +263,8 @@ void SpriteFramesEditor::_sheet_add_frames() { at->set_atlas(split_sheet_preview->get_texture()); at->set_region(Rect2(offset + frame_coords * (frame_size + separation), frame_size)); - undo_redo->add_do_method(frames, "add_frame", edited_anim, at, 1.0, -1); - undo_redo->add_undo_method(frames, "remove_frame", edited_anim, fc); + undo_redo->add_do_method(frames.ptr(), "add_frame", edited_anim, at, 1.0, -1); + undo_redo->add_undo_method(frames.ptr(), "remove_frame", edited_anim, fc); } undo_redo->add_do_method(this, "_update_library"); @@ -415,8 +413,23 @@ void SpriteFramesEditor::_prepare_sprite_sheet(const String &p_file) { void SpriteFramesEditor::_notification(int p_what) { switch (p_what) { - case NOTIFICATION_ENTER_TREE: + case NOTIFICATION_ENTER_TREE: { + get_tree()->connect("node_removed", callable_mp(this, &SpriteFramesEditor::_node_removed)); + + [[fallthrough]]; + } case NOTIFICATION_THEME_CHANGED: { + autoplay_icon = get_theme_icon(SNAME("AutoPlay"), SNAME("EditorIcons")); + stop_icon = get_theme_icon(SNAME("Stop"), SNAME("EditorIcons")); + pause_icon = get_theme_icon(SNAME("Pause"), SNAME("EditorIcons")); + _update_stop_icon(); + + autoplay->set_icon(get_theme_icon(SNAME("AutoPlay"), SNAME("EditorIcons"))); + play->set_icon(get_theme_icon(SNAME("PlayStart"), SNAME("EditorIcons"))); + play_from->set_icon(get_theme_icon(SNAME("Play"), SNAME("EditorIcons"))); + play_bw->set_icon(get_theme_icon(SNAME("PlayStartBackwards"), SNAME("EditorIcons"))); + play_bw_from->set_icon(get_theme_icon(SNAME("PlayBackwards"), SNAME("EditorIcons"))); + load->set_icon(get_theme_icon(SNAME("Load"), SNAME("EditorIcons"))); load_sheet->set_icon(get_theme_icon(SNAME("SpriteSheet"), SNAME("EditorIcons"))); copy->set_icon(get_theme_icon(SNAME("ActionCopy"), SNAME("EditorIcons"))); @@ -441,6 +454,10 @@ void SpriteFramesEditor::_notification(int p_what) { case NOTIFICATION_READY: { add_theme_constant_override("autohide", 1); // Fixes the dragger always showing up. } break; + + case NOTIFICATION_EXIT_TREE: { + get_tree()->disconnect("node_removed", callable_mp(this, &SpriteFramesEditor::_node_removed)); + } break; } } @@ -471,14 +488,14 @@ void SpriteFramesEditor::_file_load_request(const Vector<String> &p_path, int p_ } EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(TTR("Add Frame")); + undo_redo->create_action(TTR("Add Frame"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); int fc = frames->get_frame_count(edited_anim); int count = 0; for (const Ref<Texture2D> &E : resources) { - undo_redo->add_do_method(frames, "add_frame", edited_anim, E, 1.0, p_at_pos == -1 ? -1 : p_at_pos + count); - undo_redo->add_undo_method(frames, "remove_frame", edited_anim, p_at_pos == -1 ? fc : p_at_pos); + undo_redo->add_do_method(frames.ptr(), "add_frame", edited_anim, E, 1.0, p_at_pos == -1 ? -1 : p_at_pos + count); + undo_redo->add_undo_method(frames.ptr(), "remove_frame", edited_anim, p_at_pos == -1 ? fc : p_at_pos); count++; } undo_redo->add_do_method(this, "_update_library"); @@ -542,9 +559,9 @@ void SpriteFramesEditor::_paste_pressed() { } EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(TTR("Paste Frame")); - undo_redo->add_do_method(frames, "add_frame", edited_anim, texture, duration); - undo_redo->add_undo_method(frames, "remove_frame", edited_anim, frames->get_frame_count(edited_anim)); + undo_redo->create_action(TTR("Paste Frame"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); + undo_redo->add_do_method(frames.ptr(), "add_frame", edited_anim, texture, duration); + undo_redo->add_undo_method(frames.ptr(), "remove_frame", edited_anim, frames->get_frame_count(edited_anim)); undo_redo->add_do_method(this, "_update_library"); undo_redo->add_undo_method(this, "_update_library"); undo_redo->commit_action(); @@ -585,9 +602,9 @@ void SpriteFramesEditor::_empty_pressed() { Ref<Texture2D> texture; EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(TTR("Add Empty")); - undo_redo->add_do_method(frames, "add_frame", edited_anim, texture, 1.0, from); - undo_redo->add_undo_method(frames, "remove_frame", edited_anim, from); + undo_redo->create_action(TTR("Add Empty"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); + undo_redo->add_do_method(frames.ptr(), "add_frame", edited_anim, texture, 1.0, from); + undo_redo->add_undo_method(frames.ptr(), "remove_frame", edited_anim, from); undo_redo->add_do_method(this, "_update_library"); undo_redo->add_undo_method(this, "_update_library"); undo_redo->commit_action(); @@ -609,9 +626,9 @@ void SpriteFramesEditor::_empty2_pressed() { Ref<Texture2D> texture; EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(TTR("Add Empty")); - undo_redo->add_do_method(frames, "add_frame", edited_anim, texture, 1.0, from + 1); - undo_redo->add_undo_method(frames, "remove_frame", edited_anim, from + 1); + undo_redo->create_action(TTR("Add Empty"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); + undo_redo->add_do_method(frames.ptr(), "add_frame", edited_anim, texture, 1.0, from + 1); + undo_redo->add_undo_method(frames.ptr(), "remove_frame", edited_anim, from + 1); undo_redo->add_do_method(this, "_update_library"); undo_redo->add_undo_method(this, "_update_library"); undo_redo->commit_action(); @@ -633,11 +650,11 @@ void SpriteFramesEditor::_up_pressed() { sel -= 1; EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(TTR("Move Frame")); - undo_redo->add_do_method(frames, "set_frame", edited_anim, to_move, frames->get_frame_texture(edited_anim, to_move - 1), frames->get_frame_duration(edited_anim, to_move - 1)); - undo_redo->add_do_method(frames, "set_frame", edited_anim, to_move - 1, frames->get_frame_texture(edited_anim, to_move), frames->get_frame_duration(edited_anim, to_move)); - undo_redo->add_undo_method(frames, "set_frame", edited_anim, to_move, frames->get_frame_texture(edited_anim, to_move), frames->get_frame_duration(edited_anim, to_move)); - undo_redo->add_undo_method(frames, "set_frame", edited_anim, to_move - 1, frames->get_frame_texture(edited_anim, to_move - 1), frames->get_frame_duration(edited_anim, to_move - 1)); + undo_redo->create_action(TTR("Move Frame"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); + undo_redo->add_do_method(frames.ptr(), "set_frame", edited_anim, to_move, frames->get_frame_texture(edited_anim, to_move - 1), frames->get_frame_duration(edited_anim, to_move - 1)); + undo_redo->add_do_method(frames.ptr(), "set_frame", edited_anim, to_move - 1, frames->get_frame_texture(edited_anim, to_move), frames->get_frame_duration(edited_anim, to_move)); + undo_redo->add_undo_method(frames.ptr(), "set_frame", edited_anim, to_move, frames->get_frame_texture(edited_anim, to_move), frames->get_frame_duration(edited_anim, to_move)); + undo_redo->add_undo_method(frames.ptr(), "set_frame", edited_anim, to_move - 1, frames->get_frame_texture(edited_anim, to_move - 1), frames->get_frame_duration(edited_anim, to_move - 1)); undo_redo->add_do_method(this, "_update_library"); undo_redo->add_undo_method(this, "_update_library"); undo_redo->commit_action(); @@ -659,11 +676,11 @@ void SpriteFramesEditor::_down_pressed() { sel += 1; EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(TTR("Move Frame")); - undo_redo->add_do_method(frames, "set_frame", edited_anim, to_move, frames->get_frame_texture(edited_anim, to_move + 1), frames->get_frame_duration(edited_anim, to_move + 1)); - undo_redo->add_do_method(frames, "set_frame", edited_anim, to_move + 1, frames->get_frame_texture(edited_anim, to_move), frames->get_frame_duration(edited_anim, to_move)); - undo_redo->add_undo_method(frames, "set_frame", edited_anim, to_move, frames->get_frame_texture(edited_anim, to_move), frames->get_frame_duration(edited_anim, to_move)); - undo_redo->add_undo_method(frames, "set_frame", edited_anim, to_move + 1, frames->get_frame_texture(edited_anim, to_move + 1), frames->get_frame_duration(edited_anim, to_move + 1)); + undo_redo->create_action(TTR("Move Frame"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); + undo_redo->add_do_method(frames.ptr(), "set_frame", edited_anim, to_move, frames->get_frame_texture(edited_anim, to_move + 1), frames->get_frame_duration(edited_anim, to_move + 1)); + undo_redo->add_do_method(frames.ptr(), "set_frame", edited_anim, to_move + 1, frames->get_frame_texture(edited_anim, to_move), frames->get_frame_duration(edited_anim, to_move)); + undo_redo->add_undo_method(frames.ptr(), "set_frame", edited_anim, to_move, frames->get_frame_texture(edited_anim, to_move), frames->get_frame_duration(edited_anim, to_move)); + undo_redo->add_undo_method(frames.ptr(), "set_frame", edited_anim, to_move + 1, frames->get_frame_texture(edited_anim, to_move + 1), frames->get_frame_duration(edited_anim, to_move + 1)); undo_redo->add_do_method(this, "_update_library"); undo_redo->add_undo_method(this, "_update_library"); undo_redo->commit_action(); @@ -682,15 +699,15 @@ void SpriteFramesEditor::_delete_pressed() { } EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(TTR("Delete Resource")); - undo_redo->add_do_method(frames, "remove_frame", edited_anim, to_delete); - undo_redo->add_undo_method(frames, "add_frame", edited_anim, frames->get_frame_texture(edited_anim, to_delete), frames->get_frame_duration(edited_anim, to_delete), to_delete); + undo_redo->create_action(TTR("Delete Resource"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); + undo_redo->add_do_method(frames.ptr(), "remove_frame", edited_anim, to_delete); + undo_redo->add_undo_method(frames.ptr(), "add_frame", edited_anim, frames->get_frame_texture(edited_anim, to_delete), frames->get_frame_duration(edited_anim, to_delete), to_delete); undo_redo->add_do_method(this, "_update_library"); undo_redo->add_undo_method(this, "_update_library"); undo_redo->commit_action(); } -void SpriteFramesEditor::_animation_select() { +void SpriteFramesEditor::_animation_selected() { if (updating) { return; } @@ -705,9 +722,42 @@ void SpriteFramesEditor::_animation_select() { TreeItem *selected = animations->get_selected(); ERR_FAIL_COND(!selected); edited_anim = selected->get_text(0); + + if (animated_sprite) { + sprite_node_updating = true; + animated_sprite->call("set_animation", edited_anim); + sprite_node_updating = false; + } + _update_library(true); } +void SpriteFramesEditor::_sync_animation() { + if (!animated_sprite || sprite_node_updating) { + return; + } + _select_animation(animated_sprite->call("get_animation"), false); + _update_stop_icon(); +} + +void SpriteFramesEditor::_select_animation(const String &p_name, bool p_update_node) { + TreeItem *selected = nullptr; + selected = animations->get_item_with_text(p_name); + if (!selected) { + return; + }; + + edited_anim = selected->get_text(0); + + if (animated_sprite) { + if (p_update_node) { + animated_sprite->call("set_animation", edited_anim); + } + } + + _update_library(); +} + static void _find_anim_sprites(Node *p_node, List<Node *> *r_nodes, Ref<SpriteFrames> p_sfames) { Node *edited = EditorNode::get_singleton()->get_edited_scene(); if (!edited) { @@ -765,26 +815,48 @@ void SpriteFramesEditor::_animation_name_edited() { name = new_name + " " + itos(counter); } - List<Node *> nodes; - _find_anim_sprites(EditorNode::get_singleton()->get_edited_scene(), &nodes, Ref<SpriteFrames>(frames)); - EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(TTR("Rename Animation")); - undo_redo->add_do_method(frames, "rename_animation", edited_anim, name); - undo_redo->add_undo_method(frames, "rename_animation", name, edited_anim); - - for (Node *E : nodes) { - String current = E->call("get_animation"); - undo_redo->add_do_method(E, "set_animation", name); - undo_redo->add_undo_method(E, "set_animation", edited_anim); - } - + undo_redo->create_action(TTR("Rename Animation"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); + _rename_node_animation(undo_redo, false, edited_anim, "", ""); + undo_redo->add_do_method(frames.ptr(), "rename_animation", edited_anim, name); + undo_redo->add_undo_method(frames.ptr(), "rename_animation", name, edited_anim); + _rename_node_animation(undo_redo, false, edited_anim, name, name); + _rename_node_animation(undo_redo, true, edited_anim, edited_anim, edited_anim); undo_redo->add_do_method(this, "_update_library"); undo_redo->add_undo_method(this, "_update_library"); + undo_redo->commit_action(); - edited_anim = name; + _select_animation(name); + animations->grab_focus(); +} - undo_redo->commit_action(); +void SpriteFramesEditor::_rename_node_animation(EditorUndoRedoManager *undo_redo, bool is_undo, const String &p_filter, const String &p_new_animation, const String &p_new_autoplay) { + List<Node *> nodes; + _find_anim_sprites(EditorNode::get_singleton()->get_edited_scene(), &nodes, Ref<SpriteFrames>(frames)); + + if (is_undo) { + for (Node *E : nodes) { + String current_name = E->call("get_animation"); + if (current_name == p_filter) { + undo_redo->add_undo_method(E, "set_animation", p_new_animation); + } + String autoplay_name = E->call("get_autoplay"); + if (autoplay_name == p_filter) { + undo_redo->add_undo_method(E, "set_autoplay", p_new_autoplay); + } + } + } else { + for (Node *E : nodes) { + String current_name = E->call("get_animation"); + if (current_name == p_filter) { + undo_redo->add_do_method(E, "set_animation", p_new_animation); + } + String autoplay_name = E->call("get_autoplay"); + if (autoplay_name == p_filter) { + undo_redo->add_do_method(E, "set_autoplay", p_new_autoplay); + } + } + } } void SpriteFramesEditor::_animation_add() { @@ -795,25 +867,15 @@ void SpriteFramesEditor::_animation_add() { name = vformat("new_animation_%d", counter); } - List<Node *> nodes; - _find_anim_sprites(EditorNode::get_singleton()->get_edited_scene(), &nodes, Ref<SpriteFrames>(frames)); - EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(TTR("Add Animation")); - undo_redo->add_do_method(frames, "add_animation", name); - undo_redo->add_undo_method(frames, "remove_animation", name); + undo_redo->create_action(TTR("Add Animation"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); + undo_redo->add_do_method(frames.ptr(), "add_animation", name); + undo_redo->add_undo_method(frames.ptr(), "remove_animation", name); undo_redo->add_do_method(this, "_update_library"); undo_redo->add_undo_method(this, "_update_library"); - - for (Node *E : nodes) { - String current = E->call("get_animation"); - undo_redo->add_do_method(E, "set_animation", name); - undo_redo->add_undo_method(E, "set_animation", current); - } - - edited_anim = name; - undo_redo->commit_action(); + + _select_animation(name); animations->grab_focus(); } @@ -831,24 +893,39 @@ void SpriteFramesEditor::_animation_remove() { } void SpriteFramesEditor::_animation_remove_confirmed() { + StringName new_edited; + List<StringName> anim_names; + frames->get_animation_list(&anim_names); + anim_names.sort_custom<StringName::AlphCompare>(); + if (anim_names.size() >= 2) { + if (edited_anim == anim_names[0]) { + new_edited = anim_names[1]; + } else { + new_edited = anim_names[0]; + } + } else { + new_edited = StringName(); + } + EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(TTR("Remove Animation")); - undo_redo->add_do_method(frames, "remove_animation", edited_anim); - undo_redo->add_undo_method(frames, "add_animation", edited_anim); - undo_redo->add_undo_method(frames, "set_animation_speed", edited_anim, frames->get_animation_speed(edited_anim)); - undo_redo->add_undo_method(frames, "set_animation_loop", edited_anim, frames->get_animation_loop(edited_anim)); + undo_redo->create_action(TTR("Remove Animation"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); + _rename_node_animation(undo_redo, false, edited_anim, new_edited, ""); + undo_redo->add_do_method(frames.ptr(), "remove_animation", edited_anim); + undo_redo->add_undo_method(frames.ptr(), "add_animation", edited_anim); + _rename_node_animation(undo_redo, true, edited_anim, edited_anim, edited_anim); + undo_redo->add_undo_method(frames.ptr(), "set_animation_speed", edited_anim, frames->get_animation_speed(edited_anim)); + undo_redo->add_undo_method(frames.ptr(), "set_animation_loop", edited_anim, frames->get_animation_loop(edited_anim)); int fc = frames->get_frame_count(edited_anim); for (int i = 0; i < fc; i++) { Ref<Texture2D> texture = frames->get_frame_texture(edited_anim, i); float duration = frames->get_frame_duration(edited_anim, i); - undo_redo->add_undo_method(frames, "add_frame", edited_anim, texture, duration); + undo_redo->add_undo_method(frames.ptr(), "add_frame", edited_anim, texture, duration); } undo_redo->add_do_method(this, "_update_library"); undo_redo->add_undo_method(this, "_update_library"); - - edited_anim = StringName(); - undo_redo->commit_action(); + + _select_animation(new_edited); } void SpriteFramesEditor::_animation_search_text_changed(const String &p_text) { @@ -861,9 +938,9 @@ void SpriteFramesEditor::_animation_loop_changed() { } EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(TTR("Change Animation Loop")); - undo_redo->add_do_method(frames, "set_animation_loop", edited_anim, anim_loop->is_pressed()); - undo_redo->add_undo_method(frames, "set_animation_loop", edited_anim, frames->get_animation_loop(edited_anim)); + undo_redo->create_action(TTR("Change Animation Loop"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); + undo_redo->add_do_method(frames.ptr(), "set_animation_loop", edited_anim, anim_loop->is_pressed()); + undo_redo->add_undo_method(frames.ptr(), "set_animation_loop", edited_anim, frames->get_animation_loop(edited_anim)); undo_redo->add_do_method(this, "_update_library", true); undo_redo->add_undo_method(this, "_update_library", true); undo_redo->commit_action(); @@ -875,9 +952,9 @@ void SpriteFramesEditor::_animation_speed_changed(double p_value) { } EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(TTR("Change Animation FPS"), UndoRedo::MERGE_ENDS); - undo_redo->add_do_method(frames, "set_animation_speed", edited_anim, p_value); - undo_redo->add_undo_method(frames, "set_animation_speed", edited_anim, frames->get_animation_speed(edited_anim)); + undo_redo->create_action(TTR("Change Animation FPS"), UndoRedo::MERGE_ENDS, EditorNode::get_singleton()->get_edited_scene()); + undo_redo->add_do_method(frames.ptr(), "set_animation_speed", edited_anim, p_value); + undo_redo->add_undo_method(frames.ptr(), "set_animation_speed", edited_anim, frames->get_animation_speed(edited_anim)); undo_redo->add_do_method(this, "_update_library", true); undo_redo->add_undo_method(this, "_update_library", true); undo_redo->commit_action(); @@ -927,9 +1004,9 @@ void SpriteFramesEditor::_frame_duration_changed(double p_value) { float old_duration = frames->get_frame_duration(edited_anim, index); EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(TTR("Set Frame Duration")); - undo_redo->add_do_method(frames, "set_frame", edited_anim, index, texture, p_value); - undo_redo->add_undo_method(frames, "set_frame", edited_anim, index, texture, old_duration); + undo_redo->create_action(TTR("Set Frame Duration"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); + undo_redo->add_do_method(frames.ptr(), "set_frame", edited_anim, index, texture, p_value); + undo_redo->add_undo_method(frames.ptr(), "set_frame", edited_anim, index, texture, old_duration); undo_redo->add_do_method(this, "_update_library"); undo_redo->add_undo_method(this, "_update_library"); undo_redo->commit_action(); @@ -968,6 +1045,10 @@ void SpriteFramesEditor::_zoom_reset() { } void SpriteFramesEditor::_update_library(bool p_skip_selector) { + if (frames.is_null()) { + return; + } + updating = true; frame_duration->set_value(1.0); // Default. @@ -998,12 +1079,27 @@ void SpriteFramesEditor::_update_library(bool p_skip_selector) { it->set_text(0, name); it->set_editable(0, true); + if (animated_sprite) { + if (name == String(animated_sprite->call("get_autoplay"))) { + it->set_icon(0, autoplay_icon); + } + } + if (E == edited_anim) { it->select(0); } } } + if (animated_sprite) { + String autoplay_name = animated_sprite->call("get_autoplay"); + if (autoplay_name.is_empty()) { + autoplay->set_pressed(false); + } else { + autoplay->set_pressed(String(edited_anim) == autoplay_name); + } + } + frame_list->clear(); if (!frames->has_animation(edited_anim)) { @@ -1061,20 +1157,25 @@ void SpriteFramesEditor::_update_library(bool p_skip_selector) { updating = false; } -void SpriteFramesEditor::edit(SpriteFrames *p_frames) { - bool new_read_only_state = false; - if (p_frames) { - new_read_only_state = EditorNode::get_singleton()->is_resource_read_only(p_frames); +void SpriteFramesEditor::_edit() { + if (!animated_sprite) { + return; } + edit(animated_sprite->call("get_sprite_frames")); +} + +void SpriteFramesEditor::edit(Ref<SpriteFrames> p_frames) { + _update_stop_icon(); - if (frames == p_frames && new_read_only_state == read_only) { + if (!p_frames.is_valid()) { + frames.unref(); return; } frames = p_frames; - read_only = new_read_only_state; + read_only = EditorNode::get_singleton()->is_resource_read_only(p_frames); - if (p_frames) { + if (p_frames.is_valid()) { if (!p_frames->has_animation(edited_anim)) { List<StringName> anim_names; frames->get_animation_list(&anim_names); @@ -1107,6 +1208,8 @@ void SpriteFramesEditor::edit(SpriteFrames *p_frames) { move_up->set_disabled(read_only); move_down->set_disabled(read_only); delete_frame->set_disabled(read_only); + + _fetch_sprite_node(); // Fetch node after set frames. } Variant SpriteFramesEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from) { @@ -1215,18 +1318,18 @@ void SpriteFramesEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da duration = frames->get_frame_duration(edited_anim, from_frame); } - undo_redo->create_action(TTR("Move Frame")); - undo_redo->add_do_method(frames, "remove_frame", edited_anim, from_frame == -1 ? frames->get_frame_count(edited_anim) : from_frame); - undo_redo->add_do_method(frames, "add_frame", edited_anim, texture, duration, at_pos == -1 ? -1 : at_pos); - undo_redo->add_undo_method(frames, "remove_frame", edited_anim, at_pos == -1 ? frames->get_frame_count(edited_anim) - 1 : at_pos); - undo_redo->add_undo_method(frames, "add_frame", edited_anim, texture, duration, from_frame); + undo_redo->create_action(TTR("Move Frame"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); + undo_redo->add_do_method(frames.ptr(), "remove_frame", edited_anim, from_frame == -1 ? frames->get_frame_count(edited_anim) : from_frame); + undo_redo->add_do_method(frames.ptr(), "add_frame", edited_anim, texture, duration, at_pos == -1 ? -1 : at_pos); + undo_redo->add_undo_method(frames.ptr(), "remove_frame", edited_anim, at_pos == -1 ? frames->get_frame_count(edited_anim) - 1 : at_pos); + undo_redo->add_undo_method(frames.ptr(), "add_frame", edited_anim, texture, duration, from_frame); undo_redo->add_do_method(this, "_update_library"); undo_redo->add_undo_method(this, "_update_library"); undo_redo->commit_action(); } else { - undo_redo->create_action(TTR("Add Frame")); - undo_redo->add_do_method(frames, "add_frame", edited_anim, texture, 1.0, at_pos == -1 ? -1 : at_pos); - undo_redo->add_undo_method(frames, "remove_frame", edited_anim, at_pos == -1 ? frames->get_frame_count(edited_anim) : at_pos); + undo_redo->create_action(TTR("Add Frame"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); + undo_redo->add_do_method(frames.ptr(), "add_frame", edited_anim, texture, 1.0, at_pos == -1 ? -1 : at_pos); + undo_redo->add_undo_method(frames.ptr(), "remove_frame", edited_anim, at_pos == -1 ? frames->get_frame_count(edited_anim) : at_pos); undo_redo->add_do_method(this, "_update_library"); undo_redo->add_undo_method(this, "_update_library"); undo_redo->commit_action(); @@ -1245,10 +1348,156 @@ void SpriteFramesEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da } } +void SpriteFramesEditor::_update_stop_icon() { + bool is_playing = false; + if (animated_sprite) { + is_playing = animated_sprite->call("is_playing"); + } + if (is_playing) { + stop->set_icon(pause_icon); + } else { + stop->set_icon(stop_icon); + } +} + +void SpriteFramesEditor::_remove_sprite_node() { + if (!animated_sprite) { + return; + } + if (animated_sprite->is_connected("sprite_frames_changed", callable_mp(this, &SpriteFramesEditor::_edit))) { + animated_sprite->disconnect("sprite_frames_changed", callable_mp(this, &SpriteFramesEditor::_edit)); + } + if (animated_sprite->is_connected("animation_changed", callable_mp(this, &SpriteFramesEditor::_sync_animation))) { + animated_sprite->disconnect("animation_changed", callable_mp(this, &SpriteFramesEditor::_sync_animation)); + } + if (animated_sprite->is_connected("animation_finished", callable_mp(this, &SpriteFramesEditor::_update_stop_icon))) { + animated_sprite->disconnect("animation_finished", callable_mp(this, &SpriteFramesEditor::_update_stop_icon)); + } + animated_sprite = nullptr; +} + +void SpriteFramesEditor::_fetch_sprite_node() { + Node *selected = nullptr; + EditorSelection *editor_selection = EditorNode::get_singleton()->get_editor_selection(); + if (editor_selection->get_selected_node_list().size() == 1) { + selected = editor_selection->get_selected_node_list()[0]; + } + + bool show_node_edit = false; + AnimatedSprite2D *as2d = Object::cast_to<AnimatedSprite2D>(selected); + AnimatedSprite3D *as3d = Object::cast_to<AnimatedSprite3D>(selected); + if (as2d || as3d) { + if (frames != selected->call("get_sprite_frames")) { + _remove_sprite_node(); + } else { + animated_sprite = selected; + if (!animated_sprite->is_connected("sprite_frames_changed", callable_mp(this, &SpriteFramesEditor::_edit))) { + animated_sprite->connect("sprite_frames_changed", callable_mp(this, &SpriteFramesEditor::_edit)); + } + if (!animated_sprite->is_connected("animation_changed", callable_mp(this, &SpriteFramesEditor::_sync_animation))) { + animated_sprite->connect("animation_changed", callable_mp(this, &SpriteFramesEditor::_sync_animation), CONNECT_DEFERRED); + } + if (!animated_sprite->is_connected("animation_finished", callable_mp(this, &SpriteFramesEditor::_update_stop_icon))) { + animated_sprite->connect("animation_finished", callable_mp(this, &SpriteFramesEditor::_update_stop_icon)); + } + show_node_edit = true; + } + } else { + _remove_sprite_node(); + } + + if (show_node_edit) { + _sync_animation(); + autoplay_container->show(); + playback_container->show(); + } else { + _update_library(); // To init autoplay icon. + autoplay_container->hide(); + playback_container->hide(); + } +} + +void SpriteFramesEditor::_play_pressed() { + if (animated_sprite) { + animated_sprite->call("stop"); + animated_sprite->call("play", animated_sprite->call("get_animation")); + } + _update_stop_icon(); +} + +void SpriteFramesEditor::_play_from_pressed() { + if (animated_sprite) { + animated_sprite->call("play", animated_sprite->call("get_animation")); + } + _update_stop_icon(); +} + +void SpriteFramesEditor::_play_bw_pressed() { + if (animated_sprite) { + animated_sprite->call("stop"); + animated_sprite->call("play_backwards", animated_sprite->call("get_animation")); + } + _update_stop_icon(); +} + +void SpriteFramesEditor::_play_bw_from_pressed() { + if (animated_sprite) { + animated_sprite->call("play_backwards", animated_sprite->call("get_animation")); + } + _update_stop_icon(); +} + +void SpriteFramesEditor::_stop_pressed() { + if (animated_sprite) { + if (animated_sprite->call("is_playing")) { + animated_sprite->call("pause"); + } else { + animated_sprite->call("stop"); + } + } + _update_stop_icon(); +} + +void SpriteFramesEditor::_autoplay_pressed() { + if (updating) { + return; + } + + if (animated_sprite) { + EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); + undo_redo->create_action(TTR("Toggle Autoplay"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene()); + String current = animated_sprite->call("get_animation"); + String current_auto = animated_sprite->call("get_autoplay"); + if (current == current_auto) { + //unset + undo_redo->add_do_method(animated_sprite, "set_autoplay", ""); + undo_redo->add_undo_method(animated_sprite, "set_autoplay", current_auto); + } else { + //set + undo_redo->add_do_method(animated_sprite, "set_autoplay", current); + undo_redo->add_undo_method(animated_sprite, "set_autoplay", current_auto); + } + undo_redo->add_do_method(this, "_update_library"); + undo_redo->add_undo_method(this, "_update_library"); + undo_redo->commit_action(); + } + + _update_library(); +} + void SpriteFramesEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_update_library", "skipsel"), &SpriteFramesEditor::_update_library, DEFVAL(false)); } +void SpriteFramesEditor::_node_removed(Node *p_node) { + if (animated_sprite) { + if (animated_sprite != p_node) { + return; + } + _remove_sprite_node(); + } +} + SpriteFramesEditor::SpriteFramesEditor() { VBoxContainer *vbc_animlist = memnew(VBoxContainer); add_child(vbc_animlist); @@ -1272,8 +1521,16 @@ SpriteFramesEditor::SpriteFramesEditor() { delete_anim->set_disabled(true); delete_anim->connect("pressed", callable_mp(this, &SpriteFramesEditor::_animation_remove)); + autoplay_container = memnew(HBoxContainer); + hbc_animlist->add_child(autoplay_container); + autoplay_container->add_child(memnew(VSeparator)); + autoplay = memnew(Button); + autoplay->set_flat(true); + autoplay->set_tooltip_text(TTR("Autoplay on Load")); + autoplay_container->add_child(autoplay); + anim_search_box = memnew(LineEdit); - hbc_animlist->add_child(anim_search_box); + sub_vb->add_child(anim_search_box); anim_search_box->set_h_size_flags(SIZE_EXPAND_FILL); anim_search_box->set_placeholder(TTR("Filter Animations")); anim_search_box->set_clear_button_enabled(true); @@ -1283,7 +1540,7 @@ SpriteFramesEditor::SpriteFramesEditor() { sub_vb->add_child(animations); animations->set_v_size_flags(SIZE_EXPAND_FILL); animations->set_hide_root(true); - animations->connect("cell_selected", callable_mp(this, &SpriteFramesEditor::_animation_select)); + animations->connect("cell_selected", callable_mp(this, &SpriteFramesEditor::_animation_selected)); animations->connect("item_edited", callable_mp(this, &SpriteFramesEditor::_animation_name_edited)); animations->set_allow_reselect(true); @@ -1319,6 +1576,44 @@ SpriteFramesEditor::SpriteFramesEditor() { HBoxContainer *hbc = memnew(HBoxContainer); sub_vb->add_child(hbc); + playback_container = memnew(HBoxContainer); + hbc->add_child(playback_container); + + play_bw_from = memnew(Button); + play_bw_from->set_flat(true); + play_bw_from->set_tooltip_text(TTR("Play selected animation backwards from current pos. (A)")); + playback_container->add_child(play_bw_from); + + play_bw = memnew(Button); + play_bw->set_flat(true); + play_bw->set_tooltip_text(TTR("Play selected animation backwards from end. (Shift+A)")); + playback_container->add_child(play_bw); + + stop = memnew(Button); + stop->set_flat(true); + stop->set_tooltip_text(TTR("Pause/stop animation playback. (S)")); + playback_container->add_child(stop); + + play = memnew(Button); + play->set_flat(true); + play->set_tooltip_text(TTR("Play selected animation from start. (Shift+D)")); + playback_container->add_child(play); + + play_from = memnew(Button); + play_from->set_flat(true); + play_from->set_tooltip_text(TTR("Play selected animation from current pos. (D)")); + playback_container->add_child(play_from); + + playback_container->add_child(memnew(VSeparator)); + + autoplay->connect("pressed", callable_mp(this, &SpriteFramesEditor::_autoplay_pressed)); + autoplay->set_toggle_mode(true); + play->connect("pressed", callable_mp(this, &SpriteFramesEditor::_play_pressed)); + play_from->connect("pressed", callable_mp(this, &SpriteFramesEditor::_play_from_pressed)); + play_bw->connect("pressed", callable_mp(this, &SpriteFramesEditor::_play_bw_pressed)); + play_bw_from->connect("pressed", callable_mp(this, &SpriteFramesEditor::_play_bw_from_pressed)); + stop->connect("pressed", callable_mp(this, &SpriteFramesEditor::_stop_pressed)); + load = memnew(Button); load->set_flat(true); hbc->add_child(load); @@ -1369,9 +1664,10 @@ SpriteFramesEditor::SpriteFramesEditor() { frame_duration = memnew(SpinBox); frame_duration->set_prefix(String::utf8("×")); - frame_duration->set_min(0); + frame_duration->set_min(SPRITE_FRAME_MINIMUM_DURATION); // Avoid zero div. frame_duration->set_max(10); frame_duration->set_step(0.01); + frame_duration->set_allow_lesser(false); frame_duration->set_allow_greater(true); hbc->add_child(frame_duration); @@ -1616,16 +1912,16 @@ SpriteFramesEditor::SpriteFramesEditor() { } void SpriteFramesEditorPlugin::edit(Object *p_object) { - SpriteFrames *s; + Ref<SpriteFrames> s; AnimatedSprite2D *animated_sprite = Object::cast_to<AnimatedSprite2D>(p_object); if (animated_sprite) { - s = *animated_sprite->get_sprite_frames(); + s = animated_sprite->get_sprite_frames(); } else { AnimatedSprite3D *animated_sprite_3d = Object::cast_to<AnimatedSprite3D>(p_object); if (animated_sprite_3d) { - s = *animated_sprite_3d->get_sprite_frames(); + s = animated_sprite_3d->get_sprite_frames(); } else { - s = Object::cast_to<SpriteFrames>(p_object); + s = p_object; } } diff --git a/editor/plugins/sprite_frames_editor_plugin.h b/editor/plugins/sprite_frames_editor_plugin.h index a5e0e54fb8..19ecfb00ed 100644 --- a/editor/plugins/sprite_frames_editor_plugin.h +++ b/editor/plugins/sprite_frames_editor_plugin.h @@ -33,6 +33,7 @@ #include "editor/editor_plugin.h" #include "scene/2d/animated_sprite_2d.h" +#include "scene/3d/sprite_3d.h" #include "scene/gui/button.h" #include "scene/gui/check_button.h" #include "scene/gui/dialogs.h" @@ -57,6 +58,9 @@ public: class SpriteFramesEditor : public HSplitContainer { GDCLASS(SpriteFramesEditor, HSplitContainer); + Ref<SpriteFrames> frames; + Node *animated_sprite = nullptr; + enum { PARAM_USE_CURRENT, // Used in callbacks to indicate `dominant_param` should be not updated. PARAM_FRAME_COUNT, // Keep "Horizontal" & "Vertical" values. @@ -66,6 +70,17 @@ class SpriteFramesEditor : public HSplitContainer { bool read_only = false; + Ref<Texture2D> autoplay_icon; + Ref<Texture2D> stop_icon; + Ref<Texture2D> pause_icon; + + HBoxContainer *playback_container = nullptr; + Button *stop = nullptr; + Button *play = nullptr; + Button *play_from = nullptr; + Button *play_bw = nullptr; + Button *play_bw_from = nullptr; + Button *load = nullptr; Button *load_sheet = nullptr; Button *delete_frame = nullptr; @@ -85,6 +100,8 @@ class SpriteFramesEditor : public HSplitContainer { Button *add_anim = nullptr; Button *delete_anim = nullptr; + HBoxContainer *autoplay_container = nullptr; + Button *autoplay = nullptr; LineEdit *anim_search_box = nullptr; Tree *animations = nullptr; @@ -95,8 +112,6 @@ class SpriteFramesEditor : public HSplitContainer { AcceptDialog *dialog = nullptr; - SpriteFrames *frames = nullptr; - StringName edited_anim; ConfirmationDialog *delete_dialog = nullptr; @@ -146,7 +161,15 @@ class SpriteFramesEditor : public HSplitContainer { void _frame_duration_changed(double p_value); void _update_library(bool p_skip_selector = false); - void _animation_select(); + void _update_stop_icon(); + void _play_pressed(); + void _play_from_pressed(); + void _play_bw_pressed(); + void _play_bw_from_pressed(); + void _autoplay_pressed(); + void _stop_pressed(); + + void _animation_selected(); void _animation_name_edited(); void _animation_add(); void _animation_remove(); @@ -183,12 +206,24 @@ class SpriteFramesEditor : public HSplitContainer { void _sheet_zoom_reset(); void _sheet_select_clear_all_frames(); + void _edit(); + void _regist_scene_undo(EditorUndoRedoManager *undo_redo); + void _fetch_sprite_node(); + void _remove_sprite_node(); + + bool sprite_node_updating = false; + void _sync_animation(); + + void _select_animation(const String &p_name, bool p_update_node = true); + void _rename_node_animation(EditorUndoRedoManager *undo_redo, bool is_undo, const String &p_filter, const String &p_new_animation, const String &p_new_autoplay); + protected: void _notification(int p_what); + void _node_removed(Node *p_node); static void _bind_methods(); public: - void edit(SpriteFrames *p_frames); + void edit(Ref<SpriteFrames> p_frames); SpriteFramesEditor(); }; diff --git a/editor/project_converter_3_to_4.cpp b/editor/project_converter_3_to_4.cpp index 5800fcca91..f38c8ee39d 100644 --- a/editor/project_converter_3_to_4.cpp +++ b/editor/project_converter_3_to_4.cpp @@ -215,7 +215,6 @@ static const char *gdscript_function_renames[][2] = { { "_get_configuration_warning", "_get_configuration_warnings" }, // Node { "_set_current", "set_current" }, // Camera2D { "_set_editor_description", "set_editor_description" }, // Node - { "_set_playing", "set_playing" }, // AnimatedSprite3D { "_toplevel_raise_self", "_top_level_raise_self" }, // CanvasItem { "_update_wrap_at", "_update_wrap_at_column" }, // TextEdit { "add_animation", "add_animation_library" }, // AnimationPlayer @@ -1168,6 +1167,7 @@ static const char *gdscript_properties_renames[][2] = { { "unit_db", "volume_db" }, // AudioStreamPlayer3D { "unit_offset", "progress_ratio" }, // PathFollow2D, PathFollow3D { "vseparation", "v_separation" }, // Theme + { "frames", "sprite_frames" }, // AnimatedSprite2D, AnimatedSprite3D { nullptr, nullptr }, }; diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index d7f6126207..f6385dd132 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -879,7 +879,7 @@ void GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode *p_class, current_enum = prev_enum; - dictionary.set_read_only(true); + dictionary.make_read_only(); member.m_enum->set_datatype(enum_type); member.m_enum->dictionary = dictionary; @@ -3892,7 +3892,7 @@ void GDScriptAnalyzer::const_fold_array(GDScriptParser::ArrayNode *p_array, bool array[i] = p_array->elements[i]->reduced_value; } if (p_is_const) { - array.set_read_only(true); + array.make_read_only(); } p_array->is_constant = true; p_array->reduced_value = array; @@ -3919,7 +3919,7 @@ void GDScriptAnalyzer::const_fold_dictionary(GDScriptParser::DictionaryNode *p_d dict[element.key->reduced_value] = element.value->reduced_value; } if (p_is_const) { - dict.set_read_only(true); + dict.make_read_only(); } p_dictionary->is_constant = true; p_dictionary->reduced_value = dict; diff --git a/modules/gdscript/tests/scripts/runtime/errors/constant_array_push_back.gd b/modules/gdscript/tests/scripts/runtime/errors/constant_array_push_back.gd deleted file mode 100644 index 3e71cd0518..0000000000 --- a/modules/gdscript/tests/scripts/runtime/errors/constant_array_push_back.gd +++ /dev/null @@ -1,4 +0,0 @@ -const array: Array = [0] - -func test(): - array.push_back(0) diff --git a/modules/gdscript/tests/scripts/runtime/errors/constant_array_push_back.out b/modules/gdscript/tests/scripts/runtime/errors/constant_array_push_back.out deleted file mode 100644 index ba3e1c46c6..0000000000 --- a/modules/gdscript/tests/scripts/runtime/errors/constant_array_push_back.out +++ /dev/null @@ -1,7 +0,0 @@ -GDTEST_RUNTIME_ERROR ->> ERROR ->> on function: push_back() ->> core/variant/array.cpp ->> 253 ->> Condition "_p->read_only" is true. ->> Array is in read-only state. diff --git a/modules/gdscript/tests/scripts/runtime/errors/constant_dictionary_erase.gd b/modules/gdscript/tests/scripts/runtime/errors/constant_dictionary_erase.gd deleted file mode 100644 index 7b350e81ad..0000000000 --- a/modules/gdscript/tests/scripts/runtime/errors/constant_dictionary_erase.gd +++ /dev/null @@ -1,4 +0,0 @@ -const dictionary := {} - -func test(): - dictionary.erase(0) diff --git a/modules/gdscript/tests/scripts/runtime/errors/constant_dictionary_erase.out b/modules/gdscript/tests/scripts/runtime/errors/constant_dictionary_erase.out deleted file mode 100644 index 3e7ca11a4f..0000000000 --- a/modules/gdscript/tests/scripts/runtime/errors/constant_dictionary_erase.out +++ /dev/null @@ -1,7 +0,0 @@ -GDTEST_RUNTIME_ERROR ->> ERROR ->> on function: erase() ->> core/variant/dictionary.cpp ->> 177 ->> Condition "_p->read_only" is true. Returning: false ->> Dictionary is in read-only state. diff --git a/modules/gdscript/tests/scripts/runtime/features/constants_are_read_only.gd b/modules/gdscript/tests/scripts/runtime/features/constants_are_read_only.gd new file mode 100644 index 0000000000..d1746979be --- /dev/null +++ b/modules/gdscript/tests/scripts/runtime/features/constants_are_read_only.gd @@ -0,0 +1,10 @@ +const array: Array = [0] +const dictionary := {1: 2} + +@warning_ignore("assert_always_true") +func test(): + assert(array.is_read_only() == true) + assert(str(array) == '[0]') + assert(dictionary.is_read_only() == true) + assert(str(dictionary) == '{ 1: 2 }') + print('ok') diff --git a/modules/gdscript/tests/scripts/runtime/features/constants_are_read_only.out b/modules/gdscript/tests/scripts/runtime/features/constants_are_read_only.out new file mode 100644 index 0000000000..1b47ed10dc --- /dev/null +++ b/modules/gdscript/tests/scripts/runtime/features/constants_are_read_only.out @@ -0,0 +1,2 @@ +GDTEST_OK +ok diff --git a/modules/gltf/gltf_document.cpp b/modules/gltf/gltf_document.cpp index 72c715f0a6..bc50e74cd3 100644 --- a/modules/gltf/gltf_document.cpp +++ b/modules/gltf/gltf_document.cpp @@ -544,6 +544,7 @@ String GLTFDocument::_gen_unique_bone_name(Ref<GLTFState> p_state, const GLTFSke } Error GLTFDocument::_parse_scenes(Ref<GLTFState> p_state) { + p_state->unique_names.insert("Skeleton3D"); // Reserve skeleton name. ERR_FAIL_COND_V(!p_state->json.has("scenes"), ERR_FILE_CORRUPT); const Array &scenes = p_state->json["scenes"]; int loaded_scene = 0; @@ -4312,6 +4313,21 @@ Error GLTFDocument::_parse_skins(Ref<GLTFState> p_state) { return OK; } +void GLTFDocument::_recurse_children(Ref<GLTFState> p_state, const GLTFNodeIndex p_node_index, + RBSet<GLTFNodeIndex> &p_all_skin_nodes, HashSet<GLTFNodeIndex> &p_child_visited_set) { + if (p_child_visited_set.has(p_node_index)) { + return; + } + p_child_visited_set.insert(p_node_index); + for (int i = 0; i < p_state->nodes[p_node_index]->children.size(); ++i) { + _recurse_children(p_state, p_state->nodes[p_node_index]->children[i], p_all_skin_nodes, p_child_visited_set); + } + + if (p_state->nodes[p_node_index]->skin < 0 || p_state->nodes[p_node_index]->mesh < 0 || !p_state->nodes[p_node_index]->children.is_empty()) { + p_all_skin_nodes.insert(p_node_index); + } +} + Error GLTFDocument::_determine_skeletons(Ref<GLTFState> p_state) { // Using a disjoint set, we are going to potentially combine all skins that are actually branches // of a main skeleton, or treat skins defining the same set of nodes as ONE skeleton. @@ -4322,16 +4338,21 @@ Error GLTFDocument::_determine_skeletons(Ref<GLTFState> p_state) { for (GLTFSkinIndex skin_i = 0; skin_i < p_state->skins.size(); ++skin_i) { const Ref<GLTFSkin> skin = p_state->skins[skin_i]; - Vector<GLTFNodeIndex> all_skin_nodes; - all_skin_nodes.append_array(skin->joints); - all_skin_nodes.append_array(skin->non_joints); - - for (int i = 0; i < all_skin_nodes.size(); ++i) { - const GLTFNodeIndex node_index = all_skin_nodes[i]; + HashSet<GLTFNodeIndex> child_visited_set; + RBSet<GLTFNodeIndex> all_skin_nodes; + for (int i = 0; i < skin->joints.size(); ++i) { + all_skin_nodes.insert(skin->joints[i]); + _recurse_children(p_state, skin->joints[i], all_skin_nodes, child_visited_set); + } + for (int i = 0; i < skin->non_joints.size(); ++i) { + all_skin_nodes.insert(skin->non_joints[i]); + _recurse_children(p_state, skin->non_joints[i], all_skin_nodes, child_visited_set); + } + for (GLTFNodeIndex node_index : all_skin_nodes) { const GLTFNodeIndex parent = p_state->nodes[node_index]->parent; skeleton_sets.insert(node_index); - if (all_skin_nodes.find(parent) >= 0) { + if (all_skin_nodes.has(parent)) { skeleton_sets.create_union(parent, node_index); } } @@ -4550,7 +4571,7 @@ Error GLTFDocument::_create_skeletons(Ref<GLTFState> p_state) { p_state->skeleton3d_to_gltf_skeleton[skeleton->get_instance_id()] = skel_i; // Make a unique name, no gltf node represents this skeleton - skeleton->set_name(_gen_unique_name(p_state, "Skeleton3D")); + skeleton->set_name("Skeleton3D"); List<GLTFNodeIndex> bones; @@ -5242,6 +5263,7 @@ ImporterMeshInstance3D *GLTFDocument::_generate_mesh_instance(Ref<GLTFState> p_s ImporterMeshInstance3D *mi = memnew(ImporterMeshInstance3D); print_verbose("glTF: Creating mesh for: " + gltf_node->get_name()); + p_state->scene_mesh_instances.insert(p_node_index, mi); Ref<GLTFMesh> mesh = p_state->meshes.write[gltf_node->mesh]; if (mesh.is_null()) { return mi; @@ -5682,7 +5704,7 @@ void GLTFDocument::_generate_scene_node(Ref<GLTFState> p_state, Node *scene_pare bone_attachment->set_owner(scene_root); // There is no gltf_node that represent this, so just directly create a unique name - bone_attachment->set_name(_gen_unique_name(p_state, "BoneAttachment3D")); + bone_attachment->set_name(gltf_node->get_name()); // We change the scene_parent to our bone attachment now. We do not set current_node because we want to make the node // and attach it to the bone_attachment @@ -5698,7 +5720,13 @@ void GLTFDocument::_generate_scene_node(Ref<GLTFState> p_state, Node *scene_pare } // If none of our GLTFDocumentExtension classes generated us a node, we generate one. if (!current_node) { - if (gltf_node->mesh >= 0) { + if (gltf_node->skin >= 0 && gltf_node->mesh >= 0 && !gltf_node->children.is_empty()) { + current_node = _generate_spatial(p_state, node_index); + Node3D *mesh_inst = _generate_mesh_instance(p_state, node_index); + mesh_inst->set_name(gltf_node->get_name()); + + current_node->add_child(mesh_inst, true); + } else if (gltf_node->mesh >= 0) { current_node = _generate_mesh_instance(p_state, node_index); } else if (gltf_node->camera >= 0) { current_node = _generate_camera(p_state, node_index); @@ -5719,7 +5747,6 @@ void GLTFDocument::_generate_scene_node(Ref<GLTFState> p_state, Node *scene_pare current_node->set_name(gltf_node->get_name()); p_state->scene_nodes.insert(node_index, current_node); - for (int i = 0; i < gltf_node->children.size(); ++i) { _generate_scene_node(p_state, current_node, scene_root, gltf_node->children[i]); } @@ -5738,22 +5765,17 @@ void GLTFDocument::_generate_skeleton_bone_node(Ref<GLTFState> p_state, Node *p_ Skeleton3D *active_skeleton = Object::cast_to<Skeleton3D>(p_scene_parent); if (active_skeleton != skeleton) { if (active_skeleton) { - // Bone Attachment - Direct Parented Skeleton Case + // Should no longer be possible. + ERR_PRINT(vformat("glTF: Generating scene detected direct parented Skeletons at node %d", p_node_index)); BoneAttachment3D *bone_attachment = _generate_bone_attachment(p_state, active_skeleton, p_node_index, gltf_node->parent); - p_scene_parent->add_child(bone_attachment, true); bone_attachment->set_owner(p_scene_root); - // There is no gltf_node that represent this, so just directly create a unique name bone_attachment->set_name(_gen_unique_name(p_state, "BoneAttachment3D")); - // We change the scene_parent to our bone attachment now. We do not set current_node because we want to make the node // and attach it to the bone_attachment p_scene_parent = bone_attachment; - WARN_PRINT(vformat("glTF: Generating scene detected direct parented Skeletons at node %d", p_node_index)); } - - // Add it to the scene if it has not already been added if (skeleton->get_parent() == nullptr) { p_scene_parent->add_child(skeleton, true); skeleton->set_owner(p_scene_root); @@ -5761,9 +5783,10 @@ void GLTFDocument::_generate_skeleton_bone_node(Ref<GLTFState> p_state, Node *p_ } active_skeleton = skeleton; - current_node = skeleton; + current_node = active_skeleton; if (requires_extra_node) { + current_node = nullptr; // skinned meshes must not be placed in a bone attachment. if (!is_skinned_mesh) { // Bone Attachment - Same Node Case @@ -5773,7 +5796,7 @@ void GLTFDocument::_generate_skeleton_bone_node(Ref<GLTFState> p_state, Node *p_ bone_attachment->set_owner(p_scene_root); // There is no gltf_node that represent this, so just directly create a unique name - bone_attachment->set_name(_gen_unique_name(p_state, "BoneAttachment3D")); + bone_attachment->set_name(gltf_node->get_name()); // We change the scene_parent to our bone attachment now. We do not set current_node because we want to make the node // and attach it to the bone_attachment @@ -5964,6 +5987,8 @@ void GLTFDocument::_import_animation(Ref<GLTFState> p_state, AnimationPlayer *p_ NodePath node_path; //for skeletons, transform tracks always affect bones NodePath transform_node_path; + //for meshes, especially skinned meshes, there are cases where it will be added as a child + NodePath mesh_instance_node_path; GLTFNodeIndex node_index = track_i.key; @@ -5974,6 +5999,12 @@ void GLTFDocument::_import_animation(Ref<GLTFState> p_state, AnimationPlayer *p_ HashMap<GLTFNodeIndex, Node *>::Iterator node_element = p_state->scene_nodes.find(node_index); ERR_CONTINUE_MSG(!node_element, vformat("Unable to find node %d for animation", node_index)); node_path = root->get_path_to(node_element->value); + HashMap<GLTFNodeIndex, ImporterMeshInstance3D *>::Iterator mesh_instance_element = p_state->scene_mesh_instances.find(node_index); + if (mesh_instance_element) { + mesh_instance_node_path = root->get_path_to(mesh_instance_element->value); + } else { + mesh_instance_node_path = node_path; + } if (gltf_node->skeleton >= 0) { const Skeleton3D *sk = p_state->skeletons[gltf_node->skeleton]->godot_skeleton; @@ -6146,7 +6177,7 @@ void GLTFDocument::_import_animation(Ref<GLTFState> p_state, AnimationPlayer *p_ ERR_CONTINUE(mesh->get_mesh().is_null()); ERR_CONTINUE(mesh->get_mesh()->get_mesh().is_null()); - const String blend_path = String(node_path) + ":" + String(mesh->get_mesh()->get_blend_shape_name(i)); + const String blend_path = String(mesh_instance_node_path) + ":" + String(mesh->get_mesh()->get_blend_shape_name(i)); const int track_idx = animation->get_track_count(); animation->add_track(Animation::TYPE_BLEND_SHAPE); @@ -6337,11 +6368,16 @@ void GLTFDocument::_process_mesh_instances(Ref<GLTFState> p_state, Node *p_scene if (node->skin >= 0 && node->mesh >= 0) { const GLTFSkinIndex skin_i = node->skin; - HashMap<GLTFNodeIndex, Node *>::Iterator mi_element = p_state->scene_nodes.find(node_i); - ERR_CONTINUE_MSG(!mi_element, vformat("Unable to find node %d", node_i)); - - ImporterMeshInstance3D *mi = Object::cast_to<ImporterMeshInstance3D>(mi_element->value); - ERR_CONTINUE_MSG(mi == nullptr, vformat("Unable to cast node %d of type %s to ImporterMeshInstance3D", node_i, mi_element->value->get_class_name())); + ImporterMeshInstance3D *mi = nullptr; + HashMap<GLTFNodeIndex, ImporterMeshInstance3D *>::Iterator mi_element = p_state->scene_mesh_instances.find(node_i); + if (mi_element) { + mi = mi_element->value; + } else { + HashMap<GLTFNodeIndex, Node *>::Iterator si_element = p_state->scene_nodes.find(node_i); + ERR_CONTINUE_MSG(!si_element, vformat("Unable to find node %d", node_i)); + mi = Object::cast_to<ImporterMeshInstance3D>(si_element->value); + ERR_CONTINUE_MSG(mi == nullptr, vformat("Unable to cast node %d of type %s to ImporterMeshInstance3D", node_i, si_element->value->get_class_name())); + } const GLTFSkeletonIndex skel_i = p_state->skins.write[node->skin]->skeleton; Ref<GLTFSkeleton> gltf_skeleton = p_state->skeletons.write[skel_i]; diff --git a/modules/gltf/gltf_document.h b/modules/gltf/gltf_document.h index 4653fb38ef..73128c13aa 100644 --- a/modules/gltf/gltf_document.h +++ b/modules/gltf/gltf_document.h @@ -164,6 +164,8 @@ private: float &r_metallic); GLTFNodeIndex _find_highest_node(Ref<GLTFState> p_state, const Vector<GLTFNodeIndex> &p_subset); + void _recurse_children(Ref<GLTFState> p_state, const GLTFNodeIndex p_node_index, + RBSet<GLTFNodeIndex> &p_all_skin_nodes, HashSet<GLTFNodeIndex> &p_child_visited_set); bool _capture_nodes_in_skin(Ref<GLTFState> p_state, Ref<GLTFSkin> p_skin, const GLTFNodeIndex p_node_index); void _capture_nodes_for_multirooted_skin(Ref<GLTFState> p_state, Ref<GLTFSkin> p_skin); diff --git a/modules/gltf/gltf_state.h b/modules/gltf/gltf_state.h index 47b98a91b6..52d7949d03 100644 --- a/modules/gltf/gltf_state.h +++ b/modules/gltf/gltf_state.h @@ -92,6 +92,7 @@ class GLTFState : public Resource { HashMap<GLTFSkeletonIndex, GLTFNodeIndex> skeleton_to_node; Vector<Ref<GLTFAnimation>> animations; HashMap<GLTFNodeIndex, Node *> scene_nodes; + HashMap<GLTFNodeIndex, ImporterMeshInstance3D *> scene_mesh_instances; HashMap<ObjectID, GLTFSkeletonIndex> skeleton3d_to_gltf_skeleton; HashMap<ObjectID, HashMap<ObjectID, GLTFSkinIndex>> skin_and_skeleton3d_to_gltf_skin; @@ -206,6 +207,7 @@ public: void set_animations(TypedArray<GLTFAnimation> p_animations); Node *get_scene_node(GLTFNodeIndex idx); + ImporterMeshInstance3D *get_scene_mesh_instance(GLTFNodeIndex idx); int get_animation_players_count(int idx); diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp index ca94917938..fe0f4aae81 100644 --- a/modules/mono/csharp_script.cpp +++ b/modules/mono/csharp_script.cpp @@ -60,6 +60,7 @@ #include "mono_gd/gd_mono_cache.h" #include "signal_awaiter_utils.h" #include "utils/macros.h" +#include "utils/naming_utils.h" #include "utils/string_utils.h" #define CACHED_STRING_NAME(m_var) (CSharpLanguage::get_singleton()->get_string_names().m_var) @@ -333,7 +334,7 @@ void CSharpLanguage::get_string_delimiters(List<String> *p_delimiters) const { } static String get_base_class_name(const String &p_base_class_name, const String p_class_name) { - String base_class = p_base_class_name; + String base_class = pascal_to_pascal_case(p_base_class_name); if (p_class_name == base_class) { base_class = "Godot." + base_class; } @@ -394,17 +395,22 @@ bool CSharpLanguage::supports_builtin_mode() const { } #ifdef TOOLS_ENABLED +struct VariantCsName { + Variant::Type variant_type; + const String cs_type; +}; + static String variant_type_to_managed_name(const String &p_var_type_name) { if (p_var_type_name.is_empty()) { return "Variant"; } if (ClassDB::class_exists(p_var_type_name)) { - return p_var_type_name; + return pascal_to_pascal_case(p_var_type_name); } if (p_var_type_name == Variant::get_type_name(Variant::OBJECT)) { - return "Godot.Object"; + return "GodotObject"; } if (p_var_type_name == Variant::get_type_name(Variant::INT)) { @@ -459,34 +465,34 @@ static String variant_type_to_managed_name(const String &p_var_type_name) { return "Signal"; } - Variant::Type var_types[] = { - Variant::BOOL, - Variant::INT, - Variant::VECTOR2, - Variant::VECTOR2I, - Variant::RECT2, - Variant::RECT2I, - Variant::VECTOR3, - Variant::VECTOR3I, - Variant::TRANSFORM2D, - Variant::VECTOR4, - Variant::VECTOR4I, - Variant::PLANE, - Variant::QUATERNION, - Variant::AABB, - Variant::BASIS, - Variant::TRANSFORM3D, - Variant::PROJECTION, - Variant::COLOR, - Variant::STRING_NAME, - Variant::NODE_PATH, - Variant::RID, - Variant::CALLABLE + const VariantCsName var_types[] = { + { Variant::BOOL, "bool" }, + { Variant::INT, "long" }, + { Variant::VECTOR2, "Vector2" }, + { Variant::VECTOR2I, "Vector2I" }, + { Variant::RECT2, "Rect2" }, + { Variant::RECT2I, "Rect2I" }, + { Variant::VECTOR3, "Vector3" }, + { Variant::VECTOR3I, "Vector3I" }, + { Variant::TRANSFORM2D, "Transform2D" }, + { Variant::VECTOR4, "Vector4" }, + { Variant::VECTOR4I, "Vector4I" }, + { Variant::PLANE, "Plane" }, + { Variant::QUATERNION, "Quaternion" }, + { Variant::AABB, "Aabb" }, + { Variant::BASIS, "Basis" }, + { Variant::TRANSFORM3D, "Transform3D" }, + { Variant::PROJECTION, "Projection" }, + { Variant::COLOR, "Color" }, + { Variant::STRING_NAME, "StringName" }, + { Variant::NODE_PATH, "NodePath" }, + { Variant::RID, "Rid" }, + { Variant::CALLABLE, "Callable" }, }; - for (unsigned int i = 0; i < sizeof(var_types) / sizeof(Variant::Type); i++) { - if (p_var_type_name == Variant::get_type_name(var_types[i])) { - return p_var_type_name; + for (unsigned int i = 0; i < sizeof(var_types) / sizeof(VariantCsName); i++) { + if (p_var_type_name == Variant::get_type_name(var_types[i].variant_type)) { + return var_types[i].cs_type; } } diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Bar.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Bar.cs index 5eaebc4474..2d797e2f46 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Bar.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Bar.cs @@ -1,6 +1,6 @@ namespace Godot.SourceGenerators.Sample { - partial class Bar : Godot.Object + partial class Bar : GodotObject { } @@ -9,7 +9,7 @@ namespace Godot.SourceGenerators.Sample { } - partial class NotSameNameAsFile : Godot.Object + partial class NotSameNameAsFile : GodotObject { } } diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/EventSignals.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/EventSignals.cs index 764ba8f121..ee6aa857fc 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/EventSignals.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/EventSignals.cs @@ -1,6 +1,6 @@ namespace Godot.SourceGenerators.Sample; -public partial class EventSignals : Godot.Object +public partial class EventSignals : GodotObject { [Signal] public delegate void MySignalEventHandler(string str, int num); diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/ExportedFields.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/ExportedFields.cs index ccaba4d727..31e66ac306 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/ExportedFields.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/ExportedFields.cs @@ -11,7 +11,7 @@ namespace Godot.SourceGenerators.Sample [SuppressMessage("ReSharper", "RedundantNameQualifier")] [SuppressMessage("ReSharper", "ArrangeObjectCreationWhenTypeEvident")] [SuppressMessage("ReSharper", "InconsistentNaming")] - public partial class ExportedFields : Godot.Object + public partial class ExportedFields : GodotObject { [Export] private Boolean field_Boolean = true; [Export] private Char field_Char = 'f'; @@ -29,19 +29,19 @@ namespace Godot.SourceGenerators.Sample // Godot structs [Export] private Vector2 field_Vector2 = new(10f, 10f); - [Export] private Vector2i field_Vector2i = Vector2i.Up; + [Export] private Vector2I field_Vector2I = Vector2I.Up; [Export] private Rect2 field_Rect2 = new(new Vector2(10f, 10f), new Vector2(10f, 10f)); - [Export] private Rect2i field_Rect2i = new(new Vector2i(10, 10), new Vector2i(10, 10)); + [Export] private Rect2I field_Rect2I = new(new Vector2I(10, 10), new Vector2I(10, 10)); [Export] private Transform2D field_Transform2D = Transform2D.Identity; [Export] private Vector3 field_Vector3 = new(10f, 10f, 10f); - [Export] private Vector3i field_Vector3i = Vector3i.Back; + [Export] private Vector3I field_Vector3I = Vector3I.Back; [Export] private Basis field_Basis = new Basis(Quaternion.Identity); [Export] private Quaternion field_Quaternion = new Quaternion(Basis.Identity); [Export] private Transform3D field_Transform3D = Transform3D.Identity; [Export] private Vector4 field_Vector4 = new(10f, 10f, 10f, 10f); - [Export] private Vector4i field_Vector4i = Vector4i.One; + [Export] private Vector4I field_Vector4I = Vector4I.One; [Export] private Projection field_Projection = Projection.Identity; - [Export] private AABB field_AABB = new AABB(10f, 10f, 10f, new Vector3(1f, 1f, 1f)); + [Export] private Aabb field_Aabb = new Aabb(10f, 10f, 10f, new Vector3(1f, 1f, 1f)); [Export] private Color field_Color = Colors.Aquamarine; [Export] private Plane field_Plane = Plane.PlaneXZ; [Export] private Callable field_Callable = new Callable(Engine.GetMainLoop(), "_process"); @@ -80,10 +80,10 @@ namespace Godot.SourceGenerators.Sample [Export] private Vector2[] field_Vector2Array = { Vector2.Up, Vector2.Down, Vector2.Left, Vector2.Right }; [Export] private Vector3[] field_Vector3Array = { Vector3.Up, Vector3.Down, Vector3.Left, Vector3.Right }; [Export] private Color[] field_ColorArray = { Colors.Aqua, Colors.Aquamarine, Colors.Azure, Colors.Beige }; - [Export] private Godot.Object[] field_GodotObjectOrDerivedArray = { null }; + [Export] private GodotObject[] field_GodotObjectOrDerivedArray = { null }; [Export] private StringName[] field_StringNameArray = { "foo", "bar" }; [Export] private NodePath[] field_NodePathArray = { "foo", "bar" }; - [Export] private RID[] field_RIDArray = { default, default, default }; + [Export] private Rid[] field_RidArray = { default, default, default }; // Note we use Array and not System.Array. This tests the generated namespace qualification. [Export] private Int32[] field_empty_Int32Array = Array.Empty<Int32>(); // Note we use List and not System.Collections.Generic. @@ -93,11 +93,11 @@ namespace Godot.SourceGenerators.Sample [Export] private Variant field_Variant = "foo"; // Classes - [Export] private Godot.Object field_GodotObjectOrDerived; + [Export] private GodotObject field_GodotObjectOrDerived; [Export] private Godot.Texture field_GodotResourceTexture; [Export] private StringName field_StringName = new StringName("foo"); [Export] private NodePath field_NodePath = new NodePath("foo"); - [Export] private RID field_RID; + [Export] private Rid field_Rid; [Export] private Godot.Collections.Dictionary field_GodotDictionary = diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/ExportedProperties.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/ExportedProperties.cs index 5afaeb736f..aef2a8824e 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/ExportedProperties.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/ExportedProperties.cs @@ -10,7 +10,7 @@ namespace Godot.SourceGenerators.Sample [SuppressMessage("ReSharper", "RedundantNameQualifier")] [SuppressMessage("ReSharper", "ArrangeObjectCreationWhenTypeEvident")] [SuppressMessage("ReSharper", "InconsistentNaming")] - public partial class ExportedProperties : Godot.Object + public partial class ExportedProperties : GodotObject { // Do not generate default value private String _notGenerate_Property_String = new string("not generate"); @@ -117,19 +117,19 @@ namespace Godot.SourceGenerators.Sample // Godot structs [Export] private Vector2 property_Vector2 { get; set; } = new(10f, 10f); - [Export] private Vector2i property_Vector2i { get; set; } = Vector2i.Up; + [Export] private Vector2I property_Vector2I { get; set; } = Vector2I.Up; [Export] private Rect2 property_Rect2 { get; set; } = new(new Vector2(10f, 10f), new Vector2(10f, 10f)); - [Export] private Rect2i property_Rect2i { get; set; } = new(new Vector2i(10, 10), new Vector2i(10, 10)); + [Export] private Rect2I property_Rect2I { get; set; } = new(new Vector2I(10, 10), new Vector2I(10, 10)); [Export] private Transform2D property_Transform2D { get; set; } = Transform2D.Identity; [Export] private Vector3 property_Vector3 { get; set; } = new(10f, 10f, 10f); - [Export] private Vector3i property_Vector3i { get; set; } = Vector3i.Back; + [Export] private Vector3I property_Vector3I { get; set; } = Vector3I.Back; [Export] private Basis property_Basis { get; set; } = new Basis(Quaternion.Identity); [Export] private Quaternion property_Quaternion { get; set; } = new Quaternion(Basis.Identity); [Export] private Transform3D property_Transform3D { get; set; } = Transform3D.Identity; [Export] private Vector4 property_Vector4 { get; set; } = new(10f, 10f, 10f, 10f); - [Export] private Vector4i property_Vector4i { get; set; } = Vector4i.One; + [Export] private Vector4I property_Vector4I { get; set; } = Vector4I.One; [Export] private Projection property_Projection { get; set; } = Projection.Identity; - [Export] private AABB property_AABB { get; set; } = new AABB(10f, 10f, 10f, new Vector3(1f, 1f, 1f)); + [Export] private Aabb property_Aabb { get; set; } = new Aabb(10f, 10f, 10f, new Vector3(1f, 1f, 1f)); [Export] private Color property_Color { get; set; } = Colors.Aquamarine; [Export] private Plane property_Plane { get; set; } = Plane.PlaneXZ; [Export] private Callable property_Callable { get; set; } = new Callable(Engine.GetMainLoop(), "_process"); @@ -168,20 +168,20 @@ namespace Godot.SourceGenerators.Sample [Export] private Vector2[] property_Vector2Array { get; set; } = { Vector2.Up, Vector2.Down, Vector2.Left, Vector2.Right }; [Export] private Vector3[] property_Vector3Array { get; set; } = { Vector3.Up, Vector3.Down, Vector3.Left, Vector3.Right }; [Export] private Color[] property_ColorArray { get; set; } = { Colors.Aqua, Colors.Aquamarine, Colors.Azure, Colors.Beige }; - [Export] private Godot.Object[] property_GodotObjectOrDerivedArray { get; set; } = { null }; + [Export] private GodotObject[] property_GodotObjectOrDerivedArray { get; set; } = { null }; [Export] private StringName[] field_StringNameArray { get; set; } = { "foo", "bar" }; [Export] private NodePath[] field_NodePathArray { get; set; } = { "foo", "bar" }; - [Export] private RID[] field_RIDArray { get; set; } = { default, default, default }; + [Export] private Rid[] field_RidArray { get; set; } = { default, default, default }; // Variant [Export] private Variant property_Variant { get; set; } = "foo"; // Classes - [Export] private Godot.Object property_GodotObjectOrDerived { get; set; } + [Export] private GodotObject property_GodotObjectOrDerived { get; set; } [Export] private Godot.Texture property_GodotResourceTexture { get; set; } [Export] private StringName property_StringName { get; set; } = new StringName("foo"); [Export] private NodePath property_NodePath { get; set; } = new NodePath("foo"); - [Export] private RID property_RID { get; set; } + [Export] private Rid property_Rid { get; set; } [Export] private Godot.Collections.Dictionary property_GodotDictionary { get; set; } = diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Foo.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Foo.cs index 21a5bfe560..9ef72d9e02 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Foo.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Foo.cs @@ -1,6 +1,6 @@ namespace Godot.SourceGenerators.Sample { - partial class Foo : Godot.Object + partial class Foo : GodotObject { } diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Generic.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Generic.cs index b21b035b4d..2cd1a08c0e 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Generic.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Generic.cs @@ -2,19 +2,19 @@ namespace Godot.SourceGenerators.Sample { - partial class Generic<T> : Godot.Object + partial class Generic<T> : GodotObject { private int _field; } // Generic again but different generic parameters - partial class Generic<T, R> : Godot.Object + partial class Generic<T, R> : GodotObject { private int _field; } // Generic again but without generic parameters - partial class Generic : Godot.Object + partial class Generic : GodotObject { private int _field; } diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Methods.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Methods.cs index 618ba24abc..9aa6be3972 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Methods.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/Methods.cs @@ -3,7 +3,7 @@ using System.Diagnostics.CodeAnalysis; namespace Godot.SourceGenerators.Sample; [SuppressMessage("ReSharper", "RedundantNameQualifier")] -public partial class Methods : Godot.Object +public partial class Methods : GodotObject { private void MethodWithOverload() { diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/MoreExportedFields.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/MoreExportedFields.cs index a6c8e52667..64088215e9 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/MoreExportedFields.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Sample/MoreExportedFields.cs @@ -11,7 +11,7 @@ namespace Godot.SourceGenerators.Sample [SuppressMessage("ReSharper", "ArrangeObjectCreationWhenTypeEvident")] [SuppressMessage("ReSharper", "InconsistentNaming")] // We split the definition of ExportedFields to verify properties work across multiple files. - public partial class ExportedFields : Godot.Object + public partial class ExportedFields : GodotObject { // Note we use Array and not System.Array. This tests the generated namespace qualification. [Export] private Int64[] field_empty_Int64Array = Array.Empty<Int64>(); diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/Common.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/Common.cs index 4eed2d7b7b..41bf89e6d8 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/Common.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/Common.cs @@ -14,9 +14,9 @@ namespace Godot.SourceGenerators { string message = "Missing partial modifier on declaration of type '" + - $"{symbol.FullQualifiedNameOmitGlobal()}' which is a subclass of '{GodotClasses.Object}'"; + $"{symbol.FullQualifiedNameOmitGlobal()}' which is a subclass of '{GodotClasses.GodotObject}'"; - string description = $"{message}. Subclasses of '{GodotClasses.Object}' " + + string description = $"{message}. Subclasses of '{GodotClasses.GodotObject}' " + "must be declared with the partial modifier."; context.ReportDiagnostic(Diagnostic.Create( @@ -46,9 +46,9 @@ namespace Godot.SourceGenerators string message = $"Missing partial modifier on declaration of type '{fullQualifiedName}', " + - $"which contains one or more subclasses of '{GodotClasses.Object}'"; + $"which contains one or more subclasses of '{GodotClasses.GodotObject}'"; - string description = $"{message}. Subclasses of '{GodotClasses.Object}' and their " + + string description = $"{message}. Subclasses of '{GodotClasses.GodotObject}' and their " + "containing types must be declared with the partial modifier."; context.ReportDiagnostic(Diagnostic.Create( diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ExtensionMethods.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ExtensionMethods.cs index 8852b7ebad..f0c9043fd5 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ExtensionMethods.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ExtensionMethods.cs @@ -85,7 +85,7 @@ namespace Godot.SourceGenerators var classTypeSymbol = sm.GetDeclaredSymbol(cds); if (classTypeSymbol?.BaseType == null - || !classTypeSymbol.BaseType.InheritsFrom("GodotSharp", GodotClasses.Object)) + || !classTypeSymbol.BaseType.InheritsFrom("GodotSharp", GodotClasses.GodotObject)) { symbol = null; return false; diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotClasses.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotClasses.cs index 1d8ddbabf2..b60148b34f 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotClasses.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotClasses.cs @@ -2,7 +2,7 @@ namespace Godot.SourceGenerators { public static class GodotClasses { - public const string Object = "Godot.Object"; + public const string GodotObject = "Godot.GodotObject"; public const string AssemblyHasScriptsAttr = "Godot.AssemblyHasScriptsAttribute"; public const string ExportAttr = "Godot.ExportAttribute"; public const string ExportCategoryAttr = "Godot.ExportCategoryAttribute"; @@ -10,7 +10,7 @@ namespace Godot.SourceGenerators public const string ExportSubgroupAttr = "Godot.ExportSubgroupAttribute"; public const string SignalAttr = "Godot.SignalAttribute"; public const string MustBeVariantAttr = "Godot.MustBeVariantAttribute"; - public const string GodotClassNameAttr = "Godot.GodotClassName"; + public const string GodotClassNameAttr = "Godot.GodotClassNameAttribute"; public const string SystemFlagsAttr = "System.FlagsAttribute"; } } diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotEnums.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotEnums.cs index 22a21a1754..b30c8c240e 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotEnums.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotEnums.cs @@ -12,19 +12,19 @@ namespace Godot.SourceGenerators Float = 3, String = 4, Vector2 = 5, - Vector2i = 6, + Vector2I = 6, Rect2 = 7, - Rect2i = 8, + Rect2I = 8, Vector3 = 9, - Vector3i = 10, - Transform2d = 11, + Vector3I = 10, + Transform2D = 11, Vector4 = 12, - Vector4i = 13, + Vector4I = 13, Plane = 14, Quaternion = 15, Aabb = 16, Basis = 17, - Transform3d = 18, + Transform3D = 18, Projection = 19, Color = 20, StringName = 21, @@ -56,12 +56,12 @@ namespace Godot.SourceGenerators ExpEasing = 4, Link = 5, Flags = 6, - Layers2dRender = 7, - Layers2dPhysics = 8, - Layers2dNavigation = 9, - Layers3dRender = 10, - Layers3dPhysics = 11, - Layers3dNavigation = 12, + Layers2DRender = 7, + Layers2DPhysics = 8, + Layers2DNavigation = 9, + Layers3DRender = 10, + Layers3DPhysics = 11, + Layers3DNavigation = 12, File = 13, Dir = 14, GlobalFile = 15, diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotPluginsInitializerGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotPluginsInitializerGenerator.cs index 19fdd51dab..813bdf1e9f 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotPluginsInitializerGenerator.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotPluginsInitializerGenerator.cs @@ -34,7 +34,7 @@ namespace GodotPlugins.Game { DllImportResolver dllImportResolver = new GodotDllImportResolver(godotDllHandle).OnResolveDllImport; - var coreApiAssembly = typeof(Godot.Object).Assembly; + var coreApiAssembly = typeof(global::Godot.GodotObject).Assembly; NativeLibrary.SetDllImportResolver(coreApiAssembly, dllImportResolver); @@ -42,7 +42,7 @@ namespace GodotPlugins.Game ManagedCallbacks.Create(outManagedCallbacks); - ScriptManagerBridge.LookupScriptsInAssembly(typeof(GodotPlugins.Game.Main).Assembly); + ScriptManagerBridge.LookupScriptsInAssembly(typeof(global::GodotPlugins.Game.Main).Assembly); return godot_bool.True; } diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/MarshalType.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/MarshalType.cs index ee1374d0b9..be6af117eb 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/MarshalType.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/MarshalType.cs @@ -21,19 +21,19 @@ namespace Godot.SourceGenerators // Godot structs Vector2, - Vector2i, + Vector2I, Rect2, - Rect2i, + Rect2I, Transform2D, Vector3, - Vector3i, + Vector3I, Basis, Quaternion, Transform3D, Vector4, - Vector4i, + Vector4I, Projection, - AABB, + Aabb, Color, Plane, Callable, @@ -55,7 +55,7 @@ namespace Godot.SourceGenerators GodotObjectOrDerivedArray, SystemArrayOfStringName, SystemArrayOfNodePath, - SystemArrayOfRID, + SystemArrayOfRid, // Variant Variant, @@ -64,7 +64,7 @@ namespace Godot.SourceGenerators GodotObjectOrDerived, StringName, NodePath, - RID, + Rid, GodotDictionary, GodotArray, GodotGenericDictionary, diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/MarshalUtils.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/MarshalUtils.cs index f0a6a72281..0258f53062 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/MarshalUtils.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/MarshalUtils.cs @@ -19,7 +19,7 @@ namespace Godot.SourceGenerators throw new InvalidOperationException($"Type not found: '{fullyQualifiedMetadataName}'."); } - GodotObjectType = GetTypeByMetadataNameOrThrow("Godot.Object"); + GodotObjectType = GetTypeByMetadataNameOrThrow(GodotClasses.GodotObject); } } @@ -40,19 +40,19 @@ namespace Godot.SourceGenerators MarshalType.Double => VariantType.Float, MarshalType.String => VariantType.String, MarshalType.Vector2 => VariantType.Vector2, - MarshalType.Vector2i => VariantType.Vector2i, + MarshalType.Vector2I => VariantType.Vector2I, MarshalType.Rect2 => VariantType.Rect2, - MarshalType.Rect2i => VariantType.Rect2i, - MarshalType.Transform2D => VariantType.Transform2d, + MarshalType.Rect2I => VariantType.Rect2I, + MarshalType.Transform2D => VariantType.Transform2D, MarshalType.Vector3 => VariantType.Vector3, - MarshalType.Vector3i => VariantType.Vector3i, + MarshalType.Vector3I => VariantType.Vector3I, MarshalType.Basis => VariantType.Basis, MarshalType.Quaternion => VariantType.Quaternion, - MarshalType.Transform3D => VariantType.Transform3d, + MarshalType.Transform3D => VariantType.Transform3D, MarshalType.Vector4 => VariantType.Vector4, - MarshalType.Vector4i => VariantType.Vector4i, + MarshalType.Vector4I => VariantType.Vector4I, MarshalType.Projection => VariantType.Projection, - MarshalType.AABB => VariantType.Aabb, + MarshalType.Aabb => VariantType.Aabb, MarshalType.Color => VariantType.Color, MarshalType.Plane => VariantType.Plane, MarshalType.Callable => VariantType.Callable, @@ -70,12 +70,12 @@ namespace Godot.SourceGenerators MarshalType.GodotObjectOrDerivedArray => VariantType.Array, MarshalType.SystemArrayOfStringName => VariantType.Array, MarshalType.SystemArrayOfNodePath => VariantType.Array, - MarshalType.SystemArrayOfRID => VariantType.Array, + MarshalType.SystemArrayOfRid => VariantType.Array, MarshalType.Variant => VariantType.Nil, MarshalType.GodotObjectOrDerived => VariantType.Object, MarshalType.StringName => VariantType.StringName, MarshalType.NodePath => VariantType.NodePath, - MarshalType.RID => VariantType.Rid, + MarshalType.Rid => VariantType.Rid, MarshalType.GodotDictionary => VariantType.Dictionary, MarshalType.GodotArray => VariantType.Array, MarshalType.GodotGenericDictionary => VariantType.Dictionary, @@ -130,22 +130,22 @@ namespace Godot.SourceGenerators return type switch { { Name: "Vector2" } => MarshalType.Vector2, - { Name: "Vector2i" } => MarshalType.Vector2i, + { Name: "Vector2I" } => MarshalType.Vector2I, { Name: "Rect2" } => MarshalType.Rect2, - { Name: "Rect2i" } => MarshalType.Rect2i, + { Name: "Rect2I" } => MarshalType.Rect2I, { Name: "Transform2D" } => MarshalType.Transform2D, { Name: "Vector3" } => MarshalType.Vector3, - { Name: "Vector3i" } => MarshalType.Vector3i, + { Name: "Vector3I" } => MarshalType.Vector3I, { Name: "Basis" } => MarshalType.Basis, { Name: "Quaternion" } => MarshalType.Quaternion, { Name: "Transform3D" } => MarshalType.Transform3D, { Name: "Vector4" } => MarshalType.Vector4, - { Name: "Vector4i" } => MarshalType.Vector4i, + { Name: "Vector4I" } => MarshalType.Vector4I, { Name: "Projection" } => MarshalType.Projection, - { Name: "AABB" } => MarshalType.AABB, + { Name: "Aabb" } => MarshalType.Aabb, { Name: "Color" } => MarshalType.Color, { Name: "Plane" } => MarshalType.Plane, - { Name: "RID" } => MarshalType.RID, + { Name: "Rid" } => MarshalType.Rid, { Name: "Callable" } => MarshalType.Callable, { Name: "Signal" } => MarshalType.Signal, { Name: "Variant" } => MarshalType.Variant, @@ -196,8 +196,8 @@ namespace Godot.SourceGenerators return MarshalType.SystemArrayOfStringName; case { Name: "NodePath" }: return MarshalType.SystemArrayOfNodePath; - case { Name: "RID" }: - return MarshalType.SystemArrayOfRID; + case { Name: "Rid" }: + return MarshalType.SystemArrayOfRid; } } diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs index b64b843b7c..b720fb93a3 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs @@ -328,15 +328,15 @@ namespace Godot.SourceGenerators private static void AppendGroupingPropertyInfo(StringBuilder source, PropertyInfo propertyInfo) { - source.Append(" properties.Add(new(type: (Godot.Variant.Type)") + source.Append(" properties.Add(new(type: (global::Godot.Variant.Type)") .Append((int)VariantType.Nil) .Append(", name: \"") .Append(propertyInfo.Name) - .Append("\", hint: (Godot.PropertyHint)") + .Append("\", hint: (global::Godot.PropertyHint)") .Append((int)PropertyHint.None) .Append(", hintString: \"") .Append(propertyInfo.HintString) - .Append("\", usage: (Godot.PropertyUsageFlags)") + .Append("\", usage: (global::Godot.PropertyUsageFlags)") .Append((int)propertyInfo.Usage) .Append(", exported: true));\n"); } diff --git a/modules/mono/editor/GodotTools/GodotTools/Build/BuildInfo.cs b/modules/mono/editor/GodotTools/GodotTools/Build/BuildInfo.cs index edbf53a389..a4d5e1a569 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Build/BuildInfo.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Build/BuildInfo.cs @@ -23,7 +23,7 @@ namespace GodotTools.Build public Godot.Collections.Array CustomProperties { get; private set; } = new(); public string LogsDirPath => - Path.Combine(GodotSharpDirs.BuildLogsDirs, $"{Solution.MD5Text()}_{Configuration}"); + Path.Combine(GodotSharpDirs.BuildLogsDirs, $"{Solution.Md5Text()}_{Configuration}"); public override bool Equals(object? obj) { diff --git a/modules/mono/editor/GodotTools/GodotTools/Build/BuildManager.cs b/modules/mono/editor/GodotTools/GodotTools/Build/BuildManager.cs index 993c6d9217..349f9d0cb8 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Build/BuildManager.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Build/BuildManager.cs @@ -55,7 +55,7 @@ namespace GodotTools.Build private static void PrintVerbose(string text) { - if (OS.IsStdoutVerbose()) + if (OS.IsStdOutVerbose()) GD.Print(text); } diff --git a/modules/mono/editor/GodotTools/GodotTools/Build/BuildOutputView.cs b/modules/mono/editor/GodotTools/GodotTools/Build/BuildOutputView.cs index e439822666..c083b9cc60 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Build/BuildOutputView.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Build/BuildOutputView.cs @@ -336,7 +336,7 @@ namespace GodotTools.Build _ = index; // Unused _issuesListContextMenu.Clear(); - _issuesListContextMenu.Size = new Vector2i(1, 1); + _issuesListContextMenu.Size = new Vector2I(1, 1); if (_issuesList.IsAnythingSelected()) { @@ -347,7 +347,7 @@ namespace GodotTools.Build if (_issuesListContextMenu.ItemCount > 0) { - _issuesListContextMenu.Position = (Vector2i)(_issuesList.GlobalPosition + atPosition); + _issuesListContextMenu.Position = (Vector2I)(_issuesList.GlobalPosition + atPosition); _issuesListContextMenu.Popup(); } } diff --git a/modules/mono/editor/GodotTools/GodotTools/Build/BuildSystem.cs b/modules/mono/editor/GodotTools/GodotTools/Build/BuildSystem.cs index d0cd529d1f..ae0ffaf4cb 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Build/BuildSystem.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Build/BuildSystem.cs @@ -28,7 +28,7 @@ namespace GodotTools.Build string launchMessage = startInfo.GetCommandLineDisplay(new StringBuilder("Running: ")).ToString(); stdOutHandler?.Invoke(launchMessage); - if (Godot.OS.IsStdoutVerbose()) + if (Godot.OS.IsStdOutVerbose()) Console.WriteLine(launchMessage); startInfo.RedirectStandardOutput = true; @@ -89,7 +89,7 @@ namespace GodotTools.Build string launchMessage = startInfo.GetCommandLineDisplay(new StringBuilder("Running: ")).ToString(); stdOutHandler?.Invoke(launchMessage); - if (Godot.OS.IsStdoutVerbose()) + if (Godot.OS.IsStdOutVerbose()) Console.WriteLine(launchMessage); startInfo.RedirectStandardOutput = true; diff --git a/modules/mono/editor/GodotTools/GodotTools/Build/MSBuildPanel.cs b/modules/mono/editor/GodotTools/GodotTools/Build/MSBuildPanel.cs index 2e438f3f8f..8cb64b4f56 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Build/MSBuildPanel.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Build/MSBuildPanel.cs @@ -122,7 +122,7 @@ namespace GodotTools.Build { base._Ready(); - CustomMinimumSize = new Vector2i(0, (int)(228 * EditorScale)); + CustomMinimumSize = new Vector2(0, 228 * EditorScale); SizeFlagsVertical = SizeFlags.ExpandFill; var toolBarHBox = new HBoxContainer { SizeFlagsHorizontal = SizeFlags.ExpandFill }; diff --git a/modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs b/modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs index 08147d9f6a..5abbe8752c 100644 --- a/modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs +++ b/modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs @@ -192,7 +192,7 @@ namespace GodotTools try { - if (Godot.OS.IsStdoutVerbose()) + if (Godot.OS.IsStdOutVerbose()) Console.WriteLine( $"Running: \"{command}\" {string.Join(" ", args.Select(a => $"\"{a}\""))}"); @@ -385,7 +385,7 @@ namespace GodotTools // correct version first (`RegisterDefaults` always picks the latest). if (DotNetFinder.TryFindDotNetSdk(dotNetSdkSearchVersion, out var sdkVersion, out string sdkPath)) { - if (Godot.OS.IsStdoutVerbose()) + if (Godot.OS.IsStdOutVerbose()) Console.WriteLine($"Found .NET Sdk version '{sdkVersion}': {sdkPath}"); ProjectUtils.MSBuildLocatorRegisterMSBuildPath(sdkPath); @@ -395,12 +395,12 @@ namespace GodotTools try { ProjectUtils.MSBuildLocatorRegisterDefaults(out sdkVersion, out sdkPath); - if (Godot.OS.IsStdoutVerbose()) + if (Godot.OS.IsStdOutVerbose()) Console.WriteLine($"Found .NET Sdk version '{sdkVersion}': {sdkPath}"); } catch (InvalidOperationException e) { - if (Godot.OS.IsStdoutVerbose()) + if (Godot.OS.IsStdOutVerbose()) GD.PrintErr(e.ToString()); GD.PushError($".NET Sdk not found. The required version is '{dotNetSdkSearchVersion}'."); } diff --git a/modules/mono/editor/GodotTools/GodotTools/HotReloadAssemblyWatcher.cs b/modules/mono/editor/GodotTools/GodotTools/HotReloadAssemblyWatcher.cs index 89ac8058b9..e401910301 100644 --- a/modules/mono/editor/GodotTools/GodotTools/HotReloadAssemblyWatcher.cs +++ b/modules/mono/editor/GodotTools/GodotTools/HotReloadAssemblyWatcher.cs @@ -11,7 +11,7 @@ namespace GodotTools public override void _Notification(long what) { - if (what == Node.NotificationWmWindowFocusIn) + if (what == Node.NotificationWMWindowFocusIn) { RestartTimer(); diff --git a/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeManager.cs b/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeManager.cs index 9df90ac608..5de2c9833b 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeManager.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeManager.cs @@ -200,13 +200,13 @@ namespace GodotTools.Ides { public void LogDebug(string message) { - if (OS.IsStdoutVerbose()) + if (OS.IsStdOutVerbose()) Console.WriteLine(message); } public void LogInfo(string message) { - if (OS.IsStdoutVerbose()) + if (OS.IsStdOutVerbose()) Console.WriteLine(message); } diff --git a/modules/mono/editor/bindings_generator.cpp b/modules/mono/editor/bindings_generator.cpp index 2e8655f9b5..390d1e5d3d 100644 --- a/modules/mono/editor/bindings_generator.cpp +++ b/modules/mono/editor/bindings_generator.cpp @@ -38,10 +38,10 @@ #include "core/io/dir_access.h" #include "core/io/file_access.h" #include "core/os/os.h" -#include "core/string/ucaps.h" #include "main/main.h" #include "../godotsharp_defs.h" +#include "../utils/naming_utils.h" #include "../utils/path_utils.h" #include "../utils/string_utils.h" @@ -146,74 +146,6 @@ static String fix_doc_description(const String &p_bbcode) { .strip_edges(); } -static String snake_to_pascal_case(const String &p_identifier, bool p_input_is_upper = false) { - String ret; - Vector<String> parts = p_identifier.split("_", true); - - for (int i = 0; i < parts.size(); i++) { - String part = parts[i]; - - if (part.length()) { - part[0] = _find_upper(part[0]); - if (p_input_is_upper) { - for (int j = 1; j < part.length(); j++) { - part[j] = _find_lower(part[j]); - } - } - ret += part; - } else { - if (i == 0 || i == (parts.size() - 1)) { - // Preserve underscores at the beginning and end - ret += "_"; - } else { - // Preserve contiguous underscores - if (parts[i - 1].length()) { - ret += "__"; - } else { - ret += "_"; - } - } - } - } - - return ret; -} - -static String snake_to_camel_case(const String &p_identifier, bool p_input_is_upper = false) { - String ret; - Vector<String> parts = p_identifier.split("_", true); - - for (int i = 0; i < parts.size(); i++) { - String part = parts[i]; - - if (part.length()) { - if (i != 0) { - part[0] = _find_upper(part[0]); - } - if (p_input_is_upper) { - for (int j = i != 0 ? 1 : 0; j < part.length(); j++) { - part[j] = _find_lower(part[j]); - } - } - ret += part; - } else { - if (i == 0 || i == (parts.size() - 1)) { - // Preserve underscores at the beginning and end - ret += "_"; - } else { - // Preserve contiguous underscores - if (parts[i - 1].length()) { - ret += "__"; - } else { - ret += "_"; - } - } - } - } - - return ret; -} - String BindingsGenerator::bbcode_to_xml(const String &p_bbcode, const TypeInterface *p_itype) { // Based on the version in EditorHelp @@ -565,7 +497,7 @@ void BindingsGenerator::_append_xml_method(StringBuilder &p_xml_output, const Ty } else if (!p_target_itype || !p_target_itype->is_object_type) { if (OS::get_singleton()->is_stdout_verbose()) { if (p_target_itype) { - OS::get_singleton()->print("Cannot resolve method reference for non-Godot.Object type in documentation: %s\n", p_link_target.utf8().get_data()); + OS::get_singleton()->print("Cannot resolve method reference for non-GodotObject type in documentation: %s\n", p_link_target.utf8().get_data()); } else { OS::get_singleton()->print("Cannot resolve type from method reference in documentation: %s\n", p_link_target.utf8().get_data()); } @@ -605,7 +537,7 @@ void BindingsGenerator::_append_xml_member(StringBuilder &p_xml_output, const Ty } else if (!p_target_itype || !p_target_itype->is_object_type) { if (OS::get_singleton()->is_stdout_verbose()) { if (p_target_itype) { - OS::get_singleton()->print("Cannot resolve member reference for non-Godot.Object type in documentation: %s\n", p_link_target.utf8().get_data()); + OS::get_singleton()->print("Cannot resolve member reference for non-GodotObject type in documentation: %s\n", p_link_target.utf8().get_data()); } else { OS::get_singleton()->print("Cannot resolve type from member reference in documentation: %s\n", p_link_target.utf8().get_data()); } @@ -641,7 +573,7 @@ void BindingsGenerator::_append_xml_signal(StringBuilder &p_xml_output, const Ty if (!p_target_itype || !p_target_itype->is_object_type) { if (OS::get_singleton()->is_stdout_verbose()) { if (p_target_itype) { - OS::get_singleton()->print("Cannot resolve signal reference for non-Godot.Object type in documentation: %s\n", p_link_target.utf8().get_data()); + OS::get_singleton()->print("Cannot resolve signal reference for non-GodotObject type in documentation: %s\n", p_link_target.utf8().get_data()); } else { OS::get_singleton()->print("Cannot resolve type from signal reference in documentation: %s\n", p_link_target.utf8().get_data()); } @@ -698,7 +630,7 @@ void BindingsGenerator::_append_xml_constant(StringBuilder &p_xml_output, const if (OS::get_singleton()->is_stdout_verbose()) { if (p_target_itype) { - OS::get_singleton()->print("Cannot resolve constant reference for non-Godot.Object type in documentation: %s\n", p_link_target.utf8().get_data()); + OS::get_singleton()->print("Cannot resolve constant reference for non-GodotObject type in documentation: %s\n", p_link_target.utf8().get_data()); } else { OS::get_singleton()->print("Cannot resolve type from constant reference in documentation: %s\n", p_link_target.utf8().get_data()); } @@ -967,11 +899,11 @@ void BindingsGenerator::_generate_array_extensions(StringBuilder &p_output) { ARRAY_ALL(string); ARRAY_ALL(Color); ARRAY_ALL(Vector2); - ARRAY_ALL(Vector2i); + ARRAY_ALL(Vector2I); ARRAY_ALL(Vector3); - ARRAY_ALL(Vector3i); + ARRAY_ALL(Vector3I); ARRAY_ALL(Vector4); - ARRAY_ALL(Vector4i); + ARRAY_ALL(Vector4I); #undef ARRAY_ALL #undef ARRAY_IS_EMPTY @@ -1041,7 +973,7 @@ void BindingsGenerator::_generate_global_constants(StringBuilder &p_output) { _log("Declaring global enum '%s' inside struct '%s'\n", enum_proxy_name.utf8().get_data(), enum_class_name.utf8().get_data()); p_output.append("\npublic partial struct "); - p_output.append(enum_class_name); + p_output.append(pascal_to_pascal_case(enum_class_name)); p_output.append("\n" OPEN_BLOCK); } @@ -1050,7 +982,7 @@ void BindingsGenerator::_generate_global_constants(StringBuilder &p_output) { } p_output.append("\npublic enum "); - p_output.append(enum_proxy_name); + p_output.append(pascal_to_pascal_case(enum_proxy_name)); p_output.append(" : long"); p_output.append("\n" OPEN_BLOCK); @@ -1385,7 +1317,7 @@ Error BindingsGenerator::_generate_cs_type(const TypeInterface &itype, const Str bool is_derived_type = itype.base_name != StringName(); if (!is_derived_type) { - // Some Godot.Object assertions + // Some GodotObject assertions CRASH_COND(itype.cname != name_cache.type_Object); CRASH_COND(!itype.is_instantiable); CRASH_COND(itype.api_type != ClassDB::API_CORE); @@ -1502,7 +1434,7 @@ Error BindingsGenerator::_generate_cs_type(const TypeInterface &itype, const Str } output.append(MEMBER_BEGIN "public enum "); - output.append(ienum.cname.operator String()); + output.append(pascal_to_pascal_case(ienum.cname.operator String())); output.append(" : long"); output.append(MEMBER_BEGIN OPEN_BLOCK); @@ -1547,9 +1479,9 @@ Error BindingsGenerator::_generate_cs_type(const TypeInterface &itype, const Str if (itype.is_singleton) { // Add the type name and the singleton pointer as static fields - output.append(MEMBER_BEGIN "private static Godot.Object singleton;\n"); + output.append(MEMBER_BEGIN "private static GodotObject singleton;\n"); - output << MEMBER_BEGIN "public static Godot.Object " CS_PROPERTY_SINGLETON "\n" INDENT1 "{\n" + output << MEMBER_BEGIN "public static GodotObject " CS_PROPERTY_SINGLETON "\n" INDENT1 "{\n" << INDENT2 "get\n" INDENT2 "{\n" INDENT3 "if (singleton == null)\n" << INDENT4 "singleton = " C_METHOD_ENGINE_GET_SINGLETON "(typeof(" << itype.proxy_name @@ -1559,8 +1491,8 @@ Error BindingsGenerator::_generate_cs_type(const TypeInterface &itype, const Str output.append(itype.name); output.append("\";\n"); } else { - // IMPORTANT: We also generate the static fields for Godot.Object instead of declaring - // them manually in the `Object.base.cs` partial class declaration, because they're + // IMPORTANT: We also generate the static fields for GodotObject instead of declaring + // them manually in the `GodotObject.base.cs` partial class declaration, because they're // required by other static fields in this generated partial class declaration. // Static fields are initialized in order of declaration, but when they're in different // partial class declarations then it becomes harder to tell (Rider warns about this). @@ -2130,9 +2062,9 @@ Error BindingsGenerator::_generate_cs_method(const BindingsGenerator::TypeInterf << INDENT1 "private static readonly IntPtr " << method_bind_field << " = "; if (p_itype.is_singleton) { - // Singletons are static classes. They don't derive Godot.Object, + // Singletons are static classes. They don't derive GodotObject, // so we need to specify the type to call the static method. - p_output << "Object."; + p_output << "GodotObject."; } p_output << ICALL_CLASSDB_GET_METHOD "(" BINDINGS_NATIVE_NAME_FIELD ", MethodName." @@ -2896,7 +2828,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() { ClassDB::ClassInfo *class_info = ClassDB::classes.getptr(type_cname); - TypeInterface itype = TypeInterface::create_object_type(type_cname, api_type); + TypeInterface itype = TypeInterface::create_object_type(type_cname, pascal_to_pascal_case(type_cname), api_type); itype.base_name = ClassDB::get_parent_class(type_cname); itype.is_singleton = Engine::get_singleton()->has_singleton(itype.proxy_name); @@ -2911,9 +2843,9 @@ bool BindingsGenerator::_populate_object_type_interfaces() { itype.cs_type = itype.proxy_name; if (itype.is_singleton) { - itype.cs_in_expr = "Object." CS_STATIC_METHOD_GETINSTANCE "(" CS_PROPERTY_SINGLETON ")"; + itype.cs_in_expr = "GodotObject." CS_STATIC_METHOD_GETINSTANCE "(" CS_PROPERTY_SINGLETON ")"; } else { - itype.cs_in_expr = "Object." CS_STATIC_METHOD_GETINSTANCE "(%0)"; + itype.cs_in_expr = "GodotObject." CS_STATIC_METHOD_GETINSTANCE "(%0)"; } itype.cs_out = "%5return (%2)%0(%1);"; @@ -2921,7 +2853,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() { itype.c_arg_in = "(void*)%s"; itype.c_type = "IntPtr"; itype.c_type_in = itype.c_type; - itype.c_type_out = "Object"; + itype.c_type_out = "GodotObject"; // Populate properties @@ -3241,7 +3173,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() { for (const KeyValue<StringName, ClassDB::ClassInfo::EnumInfo> &E : enum_map) { StringName enum_proxy_cname = E.key; - String enum_proxy_name = enum_proxy_cname.operator String(); + String enum_proxy_name = pascal_to_pascal_case(enum_proxy_cname.operator String()); if (itype.find_property_by_proxy_name(enum_proxy_name) || itype.find_method_by_proxy_name(enum_proxy_name) || itype.find_signal_by_proxy_name(enum_proxy_name)) { // In case the enum name conflicts with other PascalCase members, // we append 'Enum' to the enum name in those cases. @@ -3369,7 +3301,7 @@ bool BindingsGenerator::_arg_default_value_from_variant(const Variant &p_val, Ar } break; case Variant::AABB: { AABB aabb = p_val.operator ::AABB(); - r_iarg.default_argument = "new AABB(new Vector3" + aabb.position.operator String() + ", new Vector3" + aabb.size.operator String() + ")"; + r_iarg.default_argument = "new Aabb(new Vector3" + aabb.position.operator String() + ", new Vector3" + aabb.size.operator String() + ")"; r_iarg.def_param_mode = ArgumentInterface::NULLABLE_VAL; } break; case Variant::RECT2: { @@ -3379,7 +3311,7 @@ bool BindingsGenerator::_arg_default_value_from_variant(const Variant &p_val, Ar } break; case Variant::RECT2I: { Rect2i rect = p_val.operator Rect2i(); - r_iarg.default_argument = "new Rect2i(new Vector2i" + rect.position.operator String() + ", new Vector2i" + rect.size.operator String() + ")"; + r_iarg.default_argument = "new Rect2I(new Vector2I" + rect.position.operator String() + ", new Vector2I" + rect.size.operator String() + ")"; r_iarg.def_param_mode = ArgumentInterface::NULLABLE_VAL; } break; case Variant::COLOR: @@ -3513,32 +3445,30 @@ void BindingsGenerator::_populate_builtin_type_interfaces() { TypeInterface itype; -#define INSERT_STRUCT_TYPE(m_type) \ - { \ - itype = TypeInterface::create_value_type(String(#m_type)); \ - itype.c_type_in = #m_type "*"; \ - itype.c_type_out = itype.cs_type; \ - itype.cs_in_expr = "&%0"; \ - itype.cs_in_expr_is_unsafe = true; \ - builtin_types.insert(itype.cname, itype); \ - } - - INSERT_STRUCT_TYPE(Vector2) - INSERT_STRUCT_TYPE(Vector2i) - INSERT_STRUCT_TYPE(Rect2) - INSERT_STRUCT_TYPE(Rect2i) - INSERT_STRUCT_TYPE(Transform2D) - INSERT_STRUCT_TYPE(Vector3) - INSERT_STRUCT_TYPE(Vector3i) - INSERT_STRUCT_TYPE(Basis) - INSERT_STRUCT_TYPE(Quaternion) - INSERT_STRUCT_TYPE(Transform3D) - INSERT_STRUCT_TYPE(AABB) - INSERT_STRUCT_TYPE(Color) - INSERT_STRUCT_TYPE(Plane) - INSERT_STRUCT_TYPE(Vector4) - INSERT_STRUCT_TYPE(Vector4i) - INSERT_STRUCT_TYPE(Projection) +#define INSERT_STRUCT_TYPE(m_type, m_proxy_name) \ + { \ + itype = TypeInterface::create_value_type(String(#m_type), String(#m_proxy_name)); \ + itype.cs_in_expr = "&%0"; \ + itype.cs_in_expr_is_unsafe = true; \ + builtin_types.insert(itype.cname, itype); \ + } + + INSERT_STRUCT_TYPE(Vector2, Vector2) + INSERT_STRUCT_TYPE(Vector2i, Vector2I) + INSERT_STRUCT_TYPE(Rect2, Rect2) + INSERT_STRUCT_TYPE(Rect2i, Rect2I) + INSERT_STRUCT_TYPE(Transform2D, Transform2D) + INSERT_STRUCT_TYPE(Vector3, Vector3) + INSERT_STRUCT_TYPE(Vector3i, Vector3I) + INSERT_STRUCT_TYPE(Basis, Basis) + INSERT_STRUCT_TYPE(Quaternion, Quaternion) + INSERT_STRUCT_TYPE(Transform3D, Transform3D) + INSERT_STRUCT_TYPE(AABB, Aabb) + INSERT_STRUCT_TYPE(Color, Color) + INSERT_STRUCT_TYPE(Plane, Plane) + INSERT_STRUCT_TYPE(Vector4, Vector4) + INSERT_STRUCT_TYPE(Vector4i, Vector4I) + INSERT_STRUCT_TYPE(Projection, Projection) #undef INSERT_STRUCT_TYPE @@ -3677,7 +3607,7 @@ void BindingsGenerator::_populate_builtin_type_interfaces() { itype = TypeInterface(); itype.name = "RID"; itype.cname = itype.name; - itype.proxy_name = "RID"; + itype.proxy_name = "Rid"; itype.cs_type = itype.proxy_name; itype.c_arg_in = "&%s"; itype.c_type = itype.cs_type; @@ -3891,7 +3821,7 @@ void BindingsGenerator::_populate_global_constants() { enum_itype.is_enum = true; enum_itype.name = ienum.cname.operator String(); enum_itype.cname = ienum.cname; - enum_itype.proxy_name = enum_itype.name; + enum_itype.proxy_name = pascal_to_pascal_case(enum_itype.name); TypeInterface::postsetup_enum_type(enum_itype); enum_types.insert(enum_itype.cname, enum_itype); @@ -3913,9 +3843,9 @@ void BindingsGenerator::_populate_global_constants() { // HARDCODED List<StringName> hardcoded_enums; hardcoded_enums.push_back("Vector2.Axis"); - hardcoded_enums.push_back("Vector2i.Axis"); + hardcoded_enums.push_back("Vector2I.Axis"); hardcoded_enums.push_back("Vector3.Axis"); - hardcoded_enums.push_back("Vector3i.Axis"); + hardcoded_enums.push_back("Vector3I.Axis"); for (const StringName &enum_cname : hardcoded_enums) { // These enums are not generated and must be written manually (e.g.: Vector3.Axis) // Here, we assume core types do not begin with underscore @@ -3923,7 +3853,7 @@ void BindingsGenerator::_populate_global_constants() { enum_itype.is_enum = true; enum_itype.name = enum_cname.operator String(); enum_itype.cname = enum_cname; - enum_itype.proxy_name = enum_itype.name; + enum_itype.proxy_name = pascal_to_pascal_case(enum_itype.name); TypeInterface::postsetup_enum_type(enum_itype); enum_types.insert(enum_itype.cname, enum_itype); } diff --git a/modules/mono/editor/bindings_generator.h b/modules/mono/editor/bindings_generator.h index cef8246032..5c266ed31f 100644 --- a/modules/mono/editor/bindings_generator.h +++ b/modules/mono/editor/bindings_generator.h @@ -472,43 +472,88 @@ class BindingsGenerator { } private: + static DocData::ClassDoc *_get_type_doc(TypeInterface &itype) { + String doc_name = itype.name.begins_with("_") ? itype.name.substr(1) : itype.name; + return &EditorHelp::get_doc_data()->class_list[doc_name]; + } + static void _init_value_type(TypeInterface &itype) { - itype.proxy_name = itype.name; + if (itype.proxy_name.is_empty()) { + itype.proxy_name = itype.name; + } - itype.c_type = itype.name; itype.cs_type = itype.proxy_name; - itype.c_type_in = itype.proxy_name + "*"; - itype.c_type_out = itype.proxy_name; - itype.class_doc = &EditorHelp::get_doc_data()->class_list[itype.proxy_name]; + itype.c_type = itype.cs_type; + itype.c_type_in = itype.cs_type + "*"; + itype.c_type_out = itype.cs_type; + + itype.class_doc = _get_type_doc(itype); + } + + static void _init_object_type(TypeInterface &itype, ClassDB::APIType p_api_type) { + if (itype.proxy_name.is_empty()) { + itype.proxy_name = itype.name; + } + + if (itype.proxy_name.begins_with("_")) { + itype.proxy_name = itype.proxy_name.substr(1); + } + + itype.api_type = p_api_type; + itype.is_object_type = true; + + itype.class_doc = _get_type_doc(itype); } public: - static TypeInterface create_value_type(const String &p_name) { + static TypeInterface create_value_type(const String &p_name, const String &p_proxy_name) { TypeInterface itype; itype.name = p_name; - itype.cname = StringName(p_name); + itype.cname = p_name; + itype.proxy_name = p_proxy_name; _init_value_type(itype); return itype; } - static TypeInterface create_value_type(const StringName &p_name) { + static TypeInterface create_value_type(const StringName &p_cname, const String &p_proxy_name) { TypeInterface itype; - itype.name = p_name.operator String(); + itype.name = p_cname; + itype.cname = p_cname; + itype.proxy_name = p_proxy_name; + _init_value_type(itype); + return itype; + } + + static TypeInterface create_value_type(const String &p_name) { + TypeInterface itype; + itype.name = p_name; itype.cname = p_name; _init_value_type(itype); return itype; } - static TypeInterface create_object_type(const StringName &p_cname, ClassDB::APIType p_api_type) { + static TypeInterface create_value_type(const StringName &p_cname) { TypeInterface itype; + itype.name = p_cname; + itype.cname = p_cname; + _init_value_type(itype); + return itype; + } + static TypeInterface create_object_type(const StringName &p_cname, const String &p_proxy_name, ClassDB::APIType p_api_type) { + TypeInterface itype; itype.name = p_cname; itype.cname = p_cname; - itype.proxy_name = itype.name.begins_with("_") ? itype.name.substr(1, itype.name.length()) : itype.name; - itype.api_type = p_api_type; - itype.is_object_type = true; - itype.class_doc = &EditorHelp::get_doc_data()->class_list[itype.proxy_name]; + itype.proxy_name = p_proxy_name; + _init_object_type(itype, p_api_type); + return itype; + } + static TypeInterface create_object_type(const StringName &p_cname, ClassDB::APIType p_api_type) { + TypeInterface itype; + itype.name = p_cname; + itype.cname = p_cname; + _init_object_type(itype, p_api_type); return itype; } diff --git a/modules/mono/editor/script_templates/CharacterBody2D/basic_movement.cs b/modules/mono/editor/script_templates/CharacterBody2D/basic_movement.cs index fbad482cf6..87468fb433 100644 --- a/modules/mono/editor/script_templates/CharacterBody2D/basic_movement.cs +++ b/modules/mono/editor/script_templates/CharacterBody2D/basic_movement.cs @@ -17,22 +17,22 @@ public partial class _CLASS_ : _BASE_ // Add the gravity. if (!IsOnFloor()) - velocity.y += gravity * (float)delta; + velocity.Y += gravity * (float)delta; // Handle Jump. if (Input.IsActionJustPressed("ui_accept") && IsOnFloor()) - velocity.y = JumpVelocity; + velocity.Y = JumpVelocity; // Get the input direction and handle the movement/deceleration. // As good practice, you should replace UI actions with custom gameplay actions. Vector2 direction = Input.GetVector("ui_left", "ui_right", "ui_up", "ui_down"); if (direction != Vector2.Zero) { - velocity.x = direction.x * Speed; + velocity.X = direction.X * Speed; } else { - velocity.x = Mathf.MoveToward(Velocity.x, 0, Speed); + velocity.X = Mathf.MoveToward(Velocity.X, 0, Speed); } Velocity = velocity; diff --git a/modules/mono/editor/script_templates/CharacterBody3D/basic_movement.cs b/modules/mono/editor/script_templates/CharacterBody3D/basic_movement.cs index abed246a1e..ddeb9d7e00 100644 --- a/modules/mono/editor/script_templates/CharacterBody3D/basic_movement.cs +++ b/modules/mono/editor/script_templates/CharacterBody3D/basic_movement.cs @@ -17,25 +17,25 @@ public partial class _CLASS_ : _BASE_ // Add the gravity. if (!IsOnFloor()) - velocity.y -= gravity * (float)delta; + velocity.Y -= gravity * (float)delta; // Handle Jump. if (Input.IsActionJustPressed("ui_accept") && IsOnFloor()) - velocity.y = JumpVelocity; + velocity.Y = JumpVelocity; // Get the input direction and handle the movement/deceleration. // As good practice, you should replace UI actions with custom gameplay actions. Vector2 inputDir = Input.GetVector("ui_left", "ui_right", "ui_up", "ui_down"); - Vector3 direction = (Transform.basis * new Vector3(inputDir.x, 0, inputDir.y)).Normalized(); + Vector3 direction = (Transform.Basis * new Vector3(inputDir.X, 0, inputDir.Y)).Normalized(); if (direction != Vector3.Zero) { - velocity.x = direction.x * Speed; - velocity.z = direction.z * Speed; + velocity.X = direction.X * Speed; + velocity.Z = direction.Z * Speed; } else { - velocity.x = Mathf.MoveToward(Velocity.x, 0, Speed); - velocity.z = Mathf.MoveToward(Velocity.z, 0, Speed); + velocity.X = Mathf.MoveToward(Velocity.X, 0, Speed); + velocity.Z = Mathf.MoveToward(Velocity.Z, 0, Speed); } Velocity = velocity; diff --git a/modules/mono/editor/script_templates/EditorScenePostImport/basic_import_script.cs b/modules/mono/editor/script_templates/EditorScenePostImport/basic_import_script.cs index 9e1b7ef580..fa2ff30a09 100644 --- a/modules/mono/editor/script_templates/EditorScenePostImport/basic_import_script.cs +++ b/modules/mono/editor/script_templates/EditorScenePostImport/basic_import_script.cs @@ -7,7 +7,7 @@ using System; [Tool] public partial class _CLASS_ : _BASE_ { - public override Godot.Object _PostImport(Node scene) + public override GodotObject _PostImport(Node scene) { // Modify the contents of the scene upon import. return scene; // Return the modified root node when you're done. diff --git a/modules/mono/editor/script_templates/EditorScenePostImport/no_comments.cs b/modules/mono/editor/script_templates/EditorScenePostImport/no_comments.cs index bf2c9434e4..4365ba5a04 100644 --- a/modules/mono/editor/script_templates/EditorScenePostImport/no_comments.cs +++ b/modules/mono/editor/script_templates/EditorScenePostImport/no_comments.cs @@ -7,7 +7,7 @@ using System; [Tool] public partial class _CLASS_ : _BASE_ { - public override Godot.Object _PostImport(Node scene) + public override GodotObject _PostImport(Node scene) { return scene; } diff --git a/modules/mono/glue/GodotSharp/GodotPlugins/Main.cs b/modules/mono/glue/GodotSharp/GodotPlugins/Main.cs index 4ce02d221e..2a72b7c53e 100644 --- a/modules/mono/glue/GodotSharp/GodotPlugins/Main.cs +++ b/modules/mono/glue/GodotSharp/GodotPlugins/Main.cs @@ -65,7 +65,7 @@ namespace GodotPlugins } private static readonly List<AssemblyName> SharedAssemblies = new(); - private static readonly Assembly CoreApiAssembly = typeof(Godot.Object).Assembly; + private static readonly Assembly CoreApiAssembly = typeof(global::Godot.GodotObject).Assembly; private static Assembly? _editorApiAssembly; private static PluginLoadContextWrapper? _projectLoadContext; private static bool _editorHint = false; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Aabb.cs index 0e46b63b59..0e92f4331d 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Aabb.cs @@ -9,7 +9,7 @@ namespace Godot /// </summary> [Serializable] [StructLayout(LayoutKind.Sequential)] - public struct AABB : IEquatable<AABB> + public struct Aabb : IEquatable<Aabb> { private Vector3 _position; private Vector3 _size; @@ -50,19 +50,19 @@ namespace Godot } /// <summary> - /// Returns an <see cref="AABB"/> with equivalent position and size, modified so that + /// Returns an <see cref="Aabb"/> with equivalent position and size, modified so that /// the most-negative corner is the origin and the size is positive. /// </summary> - /// <returns>The modified <see cref="AABB"/>.</returns> - public readonly AABB Abs() + /// <returns>The modified <see cref="Aabb"/>.</returns> + public readonly Aabb Abs() { Vector3 end = End; - Vector3 topLeft = new Vector3(Mathf.Min(_position.x, end.x), Mathf.Min(_position.y, end.y), Mathf.Min(_position.z, end.z)); - return new AABB(topLeft, _size.Abs()); + Vector3 topLeft = new Vector3(Mathf.Min(_position.X, end.X), Mathf.Min(_position.Y, end.Y), Mathf.Min(_position.Z, end.Z)); + return new Aabb(topLeft, _size.Abs()); } /// <summary> - /// Returns the center of the <see cref="AABB"/>, which is equal + /// Returns the center of the <see cref="Aabb"/>, which is equal /// to <see cref="Position"/> + (<see cref="Size"/> / 2). /// </summary> /// <returns>The center.</returns> @@ -72,94 +72,94 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if this <see cref="AABB"/> completely encloses another one. + /// Returns <see langword="true"/> if this <see cref="Aabb"/> completely encloses another one. /// </summary> - /// <param name="with">The other <see cref="AABB"/> that may be enclosed.</param> + /// <param name="with">The other <see cref="Aabb"/> that may be enclosed.</param> /// <returns> - /// A <see langword="bool"/> for whether or not this <see cref="AABB"/> encloses <paramref name="with"/>. + /// A <see langword="bool"/> for whether or not this <see cref="Aabb"/> encloses <paramref name="with"/>. /// </returns> - public readonly bool Encloses(AABB with) + public readonly bool Encloses(Aabb with) { Vector3 srcMin = _position; Vector3 srcMax = _position + _size; Vector3 dstMin = with._position; Vector3 dstMax = with._position + with._size; - return srcMin.x <= dstMin.x && - srcMax.x > dstMax.x && - srcMin.y <= dstMin.y && - srcMax.y > dstMax.y && - srcMin.z <= dstMin.z && - srcMax.z > dstMax.z; + return srcMin.X <= dstMin.X && + srcMax.X > dstMax.X && + srcMin.Y <= dstMin.Y && + srcMax.Y > dstMax.Y && + srcMin.Z <= dstMin.Z && + srcMax.Z > dstMax.Z; } /// <summary> - /// Returns this <see cref="AABB"/> expanded to include a given point. + /// Returns this <see cref="Aabb"/> expanded to include a given point. /// </summary> /// <param name="point">The point to include.</param> - /// <returns>The expanded <see cref="AABB"/>.</returns> - public readonly AABB Expand(Vector3 point) + /// <returns>The expanded <see cref="Aabb"/>.</returns> + public readonly Aabb Expand(Vector3 point) { Vector3 begin = _position; Vector3 end = _position + _size; - if (point.x < begin.x) + if (point.X < begin.X) { - begin.x = point.x; + begin.X = point.X; } - if (point.y < begin.y) + if (point.Y < begin.Y) { - begin.y = point.y; + begin.Y = point.Y; } - if (point.z < begin.z) + if (point.Z < begin.Z) { - begin.z = point.z; + begin.Z = point.Z; } - if (point.x > end.x) + if (point.X > end.X) { - end.x = point.x; + end.X = point.X; } - if (point.y > end.y) + if (point.Y > end.Y) { - end.y = point.y; + end.Y = point.Y; } - if (point.z > end.z) + if (point.Z > end.Z) { - end.z = point.z; + end.Z = point.Z; } - return new AABB(begin, end - begin); + return new Aabb(begin, end - begin); } /// <summary> - /// Gets the position of one of the 8 endpoints of the <see cref="AABB"/>. + /// Gets the position of one of the 8 endpoints of the <see cref="Aabb"/>. /// </summary> /// <param name="idx">Which endpoint to get.</param> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="idx"/> is less than 0 or greater than 7. /// </exception> - /// <returns>An endpoint of the <see cref="AABB"/>.</returns> + /// <returns>An endpoint of the <see cref="Aabb"/>.</returns> public readonly Vector3 GetEndpoint(int idx) { switch (idx) { case 0: - return new Vector3(_position.x, _position.y, _position.z); + return new Vector3(_position.X, _position.Y, _position.Z); case 1: - return new Vector3(_position.x, _position.y, _position.z + _size.z); + return new Vector3(_position.X, _position.Y, _position.Z + _size.Z); case 2: - return new Vector3(_position.x, _position.y + _size.y, _position.z); + return new Vector3(_position.X, _position.Y + _size.Y, _position.Z); case 3: - return new Vector3(_position.x, _position.y + _size.y, _position.z + _size.z); + return new Vector3(_position.X, _position.Y + _size.Y, _position.Z + _size.Z); case 4: - return new Vector3(_position.x + _size.x, _position.y, _position.z); + return new Vector3(_position.X + _size.X, _position.Y, _position.Z); case 5: - return new Vector3(_position.x + _size.x, _position.y, _position.z + _size.z); + return new Vector3(_position.X + _size.X, _position.Y, _position.Z + _size.Z); case 6: - return new Vector3(_position.x + _size.x, _position.y + _size.y, _position.z); + return new Vector3(_position.X + _size.X, _position.Y + _size.Y, _position.Z); case 7: - return new Vector3(_position.x + _size.x, _position.y + _size.y, _position.z + _size.z); + return new Vector3(_position.X + _size.X, _position.Y + _size.Y, _position.Z + _size.Z); default: { throw new ArgumentOutOfRangeException(nameof(idx), @@ -169,21 +169,21 @@ namespace Godot } /// <summary> - /// Returns the normalized longest axis of the <see cref="AABB"/>. + /// Returns the normalized longest axis of the <see cref="Aabb"/>. /// </summary> - /// <returns>A vector representing the normalized longest axis of the <see cref="AABB"/>.</returns> + /// <returns>A vector representing the normalized longest axis of the <see cref="Aabb"/>.</returns> public readonly Vector3 GetLongestAxis() { var axis = new Vector3(1f, 0f, 0f); - real_t maxSize = _size.x; + real_t maxSize = _size.X; - if (_size.y > maxSize) + if (_size.Y > maxSize) { axis = new Vector3(0f, 1f, 0f); - maxSize = _size.y; + maxSize = _size.Y; } - if (_size.z > maxSize) + if (_size.Z > maxSize) { axis = new Vector3(0f, 0f, 1f); } @@ -192,21 +192,21 @@ namespace Godot } /// <summary> - /// Returns the <see cref="Vector3.Axis"/> index of the longest axis of the <see cref="AABB"/>. + /// Returns the <see cref="Vector3.Axis"/> index of the longest axis of the <see cref="Aabb"/>. /// </summary> /// <returns>A <see cref="Vector3.Axis"/> index for which axis is longest.</returns> public readonly Vector3.Axis GetLongestAxisIndex() { var axis = Vector3.Axis.X; - real_t maxSize = _size.x; + real_t maxSize = _size.X; - if (_size.y > maxSize) + if (_size.Y > maxSize) { axis = Vector3.Axis.Y; - maxSize = _size.y; + maxSize = _size.Y; } - if (_size.z > maxSize) + if (_size.Z > maxSize) { axis = Vector3.Axis.Z; } @@ -215,38 +215,38 @@ namespace Godot } /// <summary> - /// Returns the scalar length of the longest axis of the <see cref="AABB"/>. + /// Returns the scalar length of the longest axis of the <see cref="Aabb"/>. /// </summary> - /// <returns>The scalar length of the longest axis of the <see cref="AABB"/>.</returns> + /// <returns>The scalar length of the longest axis of the <see cref="Aabb"/>.</returns> public readonly real_t GetLongestAxisSize() { - real_t maxSize = _size.x; + real_t maxSize = _size.X; - if (_size.y > maxSize) - maxSize = _size.y; + if (_size.Y > maxSize) + maxSize = _size.Y; - if (_size.z > maxSize) - maxSize = _size.z; + if (_size.Z > maxSize) + maxSize = _size.Z; return maxSize; } /// <summary> - /// Returns the normalized shortest axis of the <see cref="AABB"/>. + /// Returns the normalized shortest axis of the <see cref="Aabb"/>. /// </summary> - /// <returns>A vector representing the normalized shortest axis of the <see cref="AABB"/>.</returns> + /// <returns>A vector representing the normalized shortest axis of the <see cref="Aabb"/>.</returns> public readonly Vector3 GetShortestAxis() { var axis = new Vector3(1f, 0f, 0f); - real_t maxSize = _size.x; + real_t maxSize = _size.X; - if (_size.y < maxSize) + if (_size.Y < maxSize) { axis = new Vector3(0f, 1f, 0f); - maxSize = _size.y; + maxSize = _size.Y; } - if (_size.z < maxSize) + if (_size.Z < maxSize) { axis = new Vector3(0f, 0f, 1f); } @@ -255,21 +255,21 @@ namespace Godot } /// <summary> - /// Returns the <see cref="Vector3.Axis"/> index of the shortest axis of the <see cref="AABB"/>. + /// Returns the <see cref="Vector3.Axis"/> index of the shortest axis of the <see cref="Aabb"/>. /// </summary> /// <returns>A <see cref="Vector3.Axis"/> index for which axis is shortest.</returns> public readonly Vector3.Axis GetShortestAxisIndex() { var axis = Vector3.Axis.X; - real_t maxSize = _size.x; + real_t maxSize = _size.X; - if (_size.y < maxSize) + if (_size.Y < maxSize) { axis = Vector3.Axis.Y; - maxSize = _size.y; + maxSize = _size.Y; } - if (_size.z < maxSize) + if (_size.Z < maxSize) { axis = Vector3.Axis.Z; } @@ -278,18 +278,18 @@ namespace Godot } /// <summary> - /// Returns the scalar length of the shortest axis of the <see cref="AABB"/>. + /// Returns the scalar length of the shortest axis of the <see cref="Aabb"/>. /// </summary> - /// <returns>The scalar length of the shortest axis of the <see cref="AABB"/>.</returns> + /// <returns>The scalar length of the shortest axis of the <see cref="Aabb"/>.</returns> public readonly real_t GetShortestAxisSize() { - real_t maxSize = _size.x; + real_t maxSize = _size.X; - if (_size.y < maxSize) - maxSize = _size.y; + if (_size.Y < maxSize) + maxSize = _size.Y; - if (_size.z < maxSize) - maxSize = _size.z; + if (_size.Z < maxSize) + maxSize = _size.Z; return maxSize; } @@ -306,99 +306,99 @@ namespace Godot Vector3 ofs = _position + halfExtents; return ofs + new Vector3( - dir.x > 0f ? -halfExtents.x : halfExtents.x, - dir.y > 0f ? -halfExtents.y : halfExtents.y, - dir.z > 0f ? -halfExtents.z : halfExtents.z); + dir.X > 0f ? -halfExtents.X : halfExtents.X, + dir.Y > 0f ? -halfExtents.Y : halfExtents.Y, + dir.Z > 0f ? -halfExtents.Z : halfExtents.Z); } /// <summary> - /// Returns the volume of the <see cref="AABB"/>. + /// Returns the volume of the <see cref="Aabb"/>. /// </summary> /// <returns>The volume.</returns> public readonly real_t GetVolume() { - return _size.x * _size.y * _size.z; + return _size.X * _size.Y * _size.Z; } /// <summary> - /// Returns a copy of the <see cref="AABB"/> grown a given amount of units towards all the sides. + /// Returns a copy of the <see cref="Aabb"/> grown a given amount of units towards all the sides. /// </summary> /// <param name="by">The amount to grow by.</param> - /// <returns>The grown <see cref="AABB"/>.</returns> - public readonly AABB Grow(real_t by) + /// <returns>The grown <see cref="Aabb"/>.</returns> + public readonly Aabb Grow(real_t by) { - AABB res = this; + Aabb res = this; - res._position.x -= by; - res._position.y -= by; - res._position.z -= by; - res._size.x += 2.0f * by; - res._size.y += 2.0f * by; - res._size.z += 2.0f * by; + res._position.X -= by; + res._position.Y -= by; + res._position.Z -= by; + res._size.X += 2.0f * by; + res._size.Y += 2.0f * by; + res._size.Z += 2.0f * by; return res; } /// <summary> - /// Returns <see langword="true"/> if the <see cref="AABB"/> contains a point, + /// Returns <see langword="true"/> if the <see cref="Aabb"/> contains a point, /// or <see langword="false"/> otherwise. /// </summary> /// <param name="point">The point to check.</param> /// <returns> - /// A <see langword="bool"/> for whether or not the <see cref="AABB"/> contains <paramref name="point"/>. + /// A <see langword="bool"/> for whether or not the <see cref="Aabb"/> contains <paramref name="point"/>. /// </returns> public readonly bool HasPoint(Vector3 point) { - if (point.x < _position.x) + if (point.X < _position.X) return false; - if (point.y < _position.y) + if (point.Y < _position.Y) return false; - if (point.z < _position.z) + if (point.Z < _position.Z) return false; - if (point.x > _position.x + _size.x) + if (point.X > _position.X + _size.X) return false; - if (point.y > _position.y + _size.y) + if (point.Y > _position.Y + _size.Y) return false; - if (point.z > _position.z + _size.z) + if (point.Z > _position.Z + _size.Z) return false; return true; } /// <summary> - /// Returns <see langword="true"/> if the <see cref="AABB"/> + /// Returns <see langword="true"/> if the <see cref="Aabb"/> /// has a surface or a length, and <see langword="false"/> - /// if the <see cref="AABB"/> is empty (all components + /// if the <see cref="Aabb"/> is empty (all components /// of <see cref="Size"/> are zero or negative). /// </summary> /// <returns> - /// A <see langword="bool"/> for whether or not the <see cref="AABB"/> has surface. + /// A <see langword="bool"/> for whether or not the <see cref="Aabb"/> has surface. /// </returns> public readonly bool HasSurface() { - return _size.x > 0.0f || _size.y > 0.0f || _size.z > 0.0f; + return _size.X > 0.0f || _size.Y > 0.0f || _size.Z > 0.0f; } /// <summary> - /// Returns <see langword="true"/> if the <see cref="AABB"/> has - /// area, and <see langword="false"/> if the <see cref="AABB"/> + /// Returns <see langword="true"/> if the <see cref="Aabb"/> has + /// area, and <see langword="false"/> if the <see cref="Aabb"/> /// is linear, empty, or has a negative <see cref="Size"/>. /// See also <see cref="GetVolume"/>. /// </summary> /// <returns> - /// A <see langword="bool"/> for whether or not the <see cref="AABB"/> has volume. + /// A <see langword="bool"/> for whether or not the <see cref="Aabb"/> has volume. /// </returns> public readonly bool HasVolume() { - return _size.x > 0.0f && _size.y > 0.0f && _size.z > 0.0f; + return _size.X > 0.0f && _size.Y > 0.0f && _size.Z > 0.0f; } /// <summary> - /// Returns the intersection of this <see cref="AABB"/> and <paramref name="with"/>. + /// Returns the intersection of this <see cref="Aabb"/> and <paramref name="with"/>. /// </summary> - /// <param name="with">The other <see cref="AABB"/>.</param> - /// <returns>The clipped <see cref="AABB"/>.</returns> - public readonly AABB Intersection(AABB with) + /// <param name="with">The other <see cref="Aabb"/>.</param> + /// <returns>The clipped <see cref="Aabb"/>.</returns> + public readonly Aabb Intersection(Aabb with) { Vector3 srcMin = _position; Vector3 srcMax = _position + _size; @@ -407,78 +407,78 @@ namespace Godot Vector3 min, max; - if (srcMin.x > dstMax.x || srcMax.x < dstMin.x) + if (srcMin.X > dstMax.X || srcMax.X < dstMin.X) { - return new AABB(); + return new Aabb(); } - min.x = srcMin.x > dstMin.x ? srcMin.x : dstMin.x; - max.x = srcMax.x < dstMax.x ? srcMax.x : dstMax.x; + min.X = srcMin.X > dstMin.X ? srcMin.X : dstMin.X; + max.X = srcMax.X < dstMax.X ? srcMax.X : dstMax.X; - if (srcMin.y > dstMax.y || srcMax.y < dstMin.y) + if (srcMin.Y > dstMax.Y || srcMax.Y < dstMin.Y) { - return new AABB(); + return new Aabb(); } - min.y = srcMin.y > dstMin.y ? srcMin.y : dstMin.y; - max.y = srcMax.y < dstMax.y ? srcMax.y : dstMax.y; + min.Y = srcMin.Y > dstMin.Y ? srcMin.Y : dstMin.Y; + max.Y = srcMax.Y < dstMax.Y ? srcMax.Y : dstMax.Y; - if (srcMin.z > dstMax.z || srcMax.z < dstMin.z) + if (srcMin.Z > dstMax.Z || srcMax.Z < dstMin.Z) { - return new AABB(); + return new Aabb(); } - min.z = srcMin.z > dstMin.z ? srcMin.z : dstMin.z; - max.z = srcMax.z < dstMax.z ? srcMax.z : dstMax.z; + min.Z = srcMin.Z > dstMin.Z ? srcMin.Z : dstMin.Z; + max.Z = srcMax.Z < dstMax.Z ? srcMax.Z : dstMax.Z; - return new AABB(min, max - min); + return new Aabb(min, max - min); } /// <summary> - /// Returns <see langword="true"/> if the <see cref="AABB"/> overlaps with <paramref name="with"/> + /// Returns <see langword="true"/> if the <see cref="Aabb"/> overlaps with <paramref name="with"/> /// (i.e. they have at least one point in common). /// </summary> - /// <param name="with">The other <see cref="AABB"/> to check for intersections with.</param> + /// <param name="with">The other <see cref="Aabb"/> to check for intersections with.</param> /// <returns> /// A <see langword="bool"/> for whether or not they are intersecting. /// </returns> - public readonly bool Intersects(AABB with) + public readonly bool Intersects(Aabb with) { - if (_position.x >= with._position.x + with._size.x) + if (_position.X >= with._position.X + with._size.X) return false; - if (_position.x + _size.x <= with._position.x) + if (_position.X + _size.X <= with._position.X) return false; - if (_position.y >= with._position.y + with._size.y) + if (_position.Y >= with._position.Y + with._size.Y) return false; - if (_position.y + _size.y <= with._position.y) + if (_position.Y + _size.Y <= with._position.Y) return false; - if (_position.z >= with._position.z + with._size.z) + if (_position.Z >= with._position.Z + with._size.Z) return false; - if (_position.z + _size.z <= with._position.z) + if (_position.Z + _size.Z <= with._position.Z) return false; return true; } /// <summary> - /// Returns <see langword="true"/> if the <see cref="AABB"/> is on both sides of <paramref name="plane"/>. + /// Returns <see langword="true"/> if the <see cref="Aabb"/> is on both sides of <paramref name="plane"/>. /// </summary> /// <param name="plane">The <see cref="Plane"/> to check for intersection.</param> /// <returns> - /// A <see langword="bool"/> for whether or not the <see cref="AABB"/> intersects the <see cref="Plane"/>. + /// A <see langword="bool"/> for whether or not the <see cref="Aabb"/> intersects the <see cref="Plane"/>. /// </returns> public readonly bool IntersectsPlane(Plane plane) { Vector3[] points = { - new Vector3(_position.x, _position.y, _position.z), - new Vector3(_position.x, _position.y, _position.z + _size.z), - new Vector3(_position.x, _position.y + _size.y, _position.z), - new Vector3(_position.x, _position.y + _size.y, _position.z + _size.z), - new Vector3(_position.x + _size.x, _position.y, _position.z), - new Vector3(_position.x + _size.x, _position.y, _position.z + _size.z), - new Vector3(_position.x + _size.x, _position.y + _size.y, _position.z), - new Vector3(_position.x + _size.x, _position.y + _size.y, _position.z + _size.z) + new Vector3(_position.X, _position.Y, _position.Z), + new Vector3(_position.X, _position.Y, _position.Z + _size.Z), + new Vector3(_position.X, _position.Y + _size.Y, _position.Z), + new Vector3(_position.X, _position.Y + _size.Y, _position.Z + _size.Z), + new Vector3(_position.X + _size.X, _position.Y, _position.Z), + new Vector3(_position.X + _size.X, _position.Y, _position.Z + _size.Z), + new Vector3(_position.X + _size.X, _position.Y + _size.Y, _position.Z), + new Vector3(_position.X + _size.X, _position.Y + _size.Y, _position.Z + _size.Z) }; bool over = false; @@ -500,13 +500,13 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if the <see cref="AABB"/> intersects + /// Returns <see langword="true"/> if the <see cref="Aabb"/> intersects /// the line segment between <paramref name="from"/> and <paramref name="to"/>. /// </summary> /// <param name="from">The start of the line segment.</param> /// <param name="to">The end of the line segment.</param> /// <returns> - /// A <see langword="bool"/> for whether or not the <see cref="AABB"/> intersects the line segment. + /// A <see langword="bool"/> for whether or not the <see cref="Aabb"/> intersects the line segment. /// </returns> public readonly bool IntersectsSegment(Vector3 from, Vector3 to) { @@ -563,7 +563,7 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if this <see cref="AABB"/> is finite, by calling + /// Returns <see langword="true"/> if this <see cref="Aabb"/> is finite, by calling /// <see cref="Mathf.IsFinite"/> on each component. /// </summary> /// <returns>Whether this vector is finite or not.</returns> @@ -573,73 +573,73 @@ namespace Godot } /// <summary> - /// Returns a larger <see cref="AABB"/> that contains this <see cref="AABB"/> and <paramref name="with"/>. + /// Returns a larger <see cref="Aabb"/> that contains this <see cref="Aabb"/> and <paramref name="with"/>. /// </summary> - /// <param name="with">The other <see cref="AABB"/>.</param> - /// <returns>The merged <see cref="AABB"/>.</returns> - public readonly AABB Merge(AABB with) + /// <param name="with">The other <see cref="Aabb"/>.</param> + /// <returns>The merged <see cref="Aabb"/>.</returns> + public readonly Aabb Merge(Aabb with) { Vector3 beg1 = _position; Vector3 beg2 = with._position; - var end1 = new Vector3(_size.x, _size.y, _size.z) + beg1; - var end2 = new Vector3(with._size.x, with._size.y, with._size.z) + beg2; + var end1 = new Vector3(_size.X, _size.Y, _size.Z) + beg1; + var end2 = new Vector3(with._size.X, with._size.Y, with._size.Z) + beg2; var min = new Vector3( - beg1.x < beg2.x ? beg1.x : beg2.x, - beg1.y < beg2.y ? beg1.y : beg2.y, - beg1.z < beg2.z ? beg1.z : beg2.z + beg1.X < beg2.X ? beg1.X : beg2.X, + beg1.Y < beg2.Y ? beg1.Y : beg2.Y, + beg1.Z < beg2.Z ? beg1.Z : beg2.Z ); var max = new Vector3( - end1.x > end2.x ? end1.x : end2.x, - end1.y > end2.y ? end1.y : end2.y, - end1.z > end2.z ? end1.z : end2.z + end1.X > end2.X ? end1.X : end2.X, + end1.Y > end2.Y ? end1.Y : end2.Y, + end1.Z > end2.Z ? end1.Z : end2.Z ); - return new AABB(min, max - min); + return new Aabb(min, max - min); } /// <summary> - /// Constructs an <see cref="AABB"/> from a position and size. + /// Constructs an <see cref="Aabb"/> from a position and size. /// </summary> /// <param name="position">The position.</param> /// <param name="size">The size, typically positive.</param> - public AABB(Vector3 position, Vector3 size) + public Aabb(Vector3 position, Vector3 size) { _position = position; _size = size; } /// <summary> - /// Constructs an <see cref="AABB"/> from a <paramref name="position"/>, + /// Constructs an <see cref="Aabb"/> from a <paramref name="position"/>, /// <paramref name="width"/>, <paramref name="height"/>, and <paramref name="depth"/>. /// </summary> /// <param name="position">The position.</param> /// <param name="width">The width, typically positive.</param> /// <param name="height">The height, typically positive.</param> /// <param name="depth">The depth, typically positive.</param> - public AABB(Vector3 position, real_t width, real_t height, real_t depth) + public Aabb(Vector3 position, real_t width, real_t height, real_t depth) { _position = position; _size = new Vector3(width, height, depth); } /// <summary> - /// Constructs an <see cref="AABB"/> from <paramref name="x"/>, + /// Constructs an <see cref="Aabb"/> from <paramref name="x"/>, /// <paramref name="y"/>, <paramref name="z"/>, and <paramref name="size"/>. /// </summary> /// <param name="x">The position's X coordinate.</param> /// <param name="y">The position's Y coordinate.</param> /// <param name="z">The position's Z coordinate.</param> /// <param name="size">The size, typically positive.</param> - public AABB(real_t x, real_t y, real_t z, Vector3 size) + public Aabb(real_t x, real_t y, real_t z, Vector3 size) { _position = new Vector3(x, y, z); _size = size; } /// <summary> - /// Constructs an <see cref="AABB"/> from <paramref name="x"/>, + /// Constructs an <see cref="Aabb"/> from <paramref name="x"/>, /// <paramref name="y"/>, <paramref name="z"/>, <paramref name="width"/>, /// <paramref name="height"/>, and <paramref name="depth"/>. /// </summary> @@ -649,7 +649,7 @@ namespace Godot /// <param name="width">The width, typically positive.</param> /// <param name="height">The height, typically positive.</param> /// <param name="depth">The depth, typically positive.</param> - public AABB(real_t x, real_t y, real_t z, real_t width, real_t height, real_t depth) + public Aabb(real_t x, real_t y, real_t z, real_t width, real_t height, real_t depth) { _position = new Vector3(x, y, z); _size = new Vector3(width, height, depth); @@ -663,7 +663,7 @@ namespace Godot /// <param name="left">The left AABB.</param> /// <param name="right">The right AABB.</param> /// <returns>Whether or not the AABBs are exactly equal.</returns> - public static bool operator ==(AABB left, AABB right) + public static bool operator ==(Aabb left, Aabb right) { return left.Equals(right); } @@ -676,7 +676,7 @@ namespace Godot /// <param name="left">The left AABB.</param> /// <param name="right">The right AABB.</param> /// <returns>Whether or not the AABBs are not equal.</returns> - public static bool operator !=(AABB left, AABB right) + public static bool operator !=(Aabb left, Aabb right) { return !left.Equals(right); } @@ -691,7 +691,7 @@ namespace Godot /// <returns>Whether or not the AABB and the object are equal.</returns> public override readonly bool Equals(object obj) { - return obj is AABB other && Equals(other); + return obj is Aabb other && Equals(other); } /// <summary> @@ -701,7 +701,7 @@ namespace Godot /// </summary> /// <param name="other">The other AABB.</param> /// <returns>Whether or not the AABBs are exactly equal.</returns> - public readonly bool Equals(AABB other) + public readonly bool Equals(Aabb other) { return _position == other._position && _size == other._size; } @@ -712,13 +712,13 @@ namespace Godot /// </summary> /// <param name="other">The other AABB to compare.</param> /// <returns>Whether or not the AABBs structures are approximately equal.</returns> - public readonly bool IsEqualApprox(AABB other) + public readonly bool IsEqualApprox(Aabb other) { return _position.IsEqualApprox(other._position) && _size.IsEqualApprox(other._size); } /// <summary> - /// Serves as the hash function for <see cref="AABB"/>. + /// Serves as the hash function for <see cref="Aabb"/>. /// </summary> /// <returns>A hash code for this AABB.</returns> public override readonly int GetHashCode() @@ -727,7 +727,7 @@ namespace Godot } /// <summary> - /// Converts this <see cref="AABB"/> to a string. + /// Converts this <see cref="Aabb"/> to a string. /// </summary> /// <returns>A string representation of this AABB.</returns> public override readonly string ToString() @@ -736,7 +736,7 @@ namespace Godot } /// <summary> - /// Converts this <see cref="AABB"/> to a string with the given <paramref name="format"/>. + /// Converts this <see cref="Aabb"/> to a string with the given <paramref name="format"/>. /// </summary> /// <returns>A string representation of this AABB.</returns> public readonly string ToString(string format) diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Array.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Array.cs index df306e5244..f4646d1d3c 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Array.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Array.cs @@ -99,7 +99,7 @@ namespace Godot.Collections this[i] = array[i]; } - public Array(Span<RID> array) : this() + public Array(Span<Rid> array) : this() { if (array == null) throw new ArgumentNullException(nameof(array)); @@ -120,7 +120,7 @@ namespace Godot.Collections // fine as long as the array is not mutated. However, Span does this type checking at // instantiation, so it's not possible to use it even when not mutating anything. // ReSharper disable once RedundantNameQualifier - public Array(ReadOnlySpan<Godot.Object> array) : this() + public Array(ReadOnlySpan<GodotObject> array) : this() { if (array == null) throw new ArgumentNullException(nameof(array)); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/GodotClassNameAttribute.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/GodotClassNameAttribute.cs new file mode 100644 index 0000000000..b19427f60d --- /dev/null +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/GodotClassNameAttribute.cs @@ -0,0 +1,24 @@ +using System; + +namespace Godot +{ + /// <summary> + /// Attribute that specifies the engine class name when it's not the same + /// as the generated C# class name. This allows introspection code to find + /// the name associated with the class. If the attribute is not present, + /// the C# class name can be used instead. + /// </summary> + [AttributeUsage(AttributeTargets.Class)] + public class GodotClassNameAttribute : Attribute + { + /// <summary> + /// Original engine class name. + /// </summary> + public string Name { get; } + + public GodotClassNameAttribute(string name) + { + Name = name; + } + } +} diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/RPCAttribute.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/RpcAttribute.cs index 02a38d310e..6a73d6f70c 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/RPCAttribute.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/RpcAttribute.cs @@ -5,16 +5,16 @@ namespace Godot /// <summary> /// Attribute that changes the RPC mode for the annotated <c>method</c> to the given <see cref="Mode"/>, /// optionally specifying the <see cref="TransferMode"/> and <see cref="TransferChannel"/> (on supported peers). - /// See <see cref="MultiplayerAPI.RPCMode"/> and <see cref="MultiplayerPeer.TransferModeEnum"/>. + /// See <see cref="MultiplayerApi.RpcMode"/> and <see cref="MultiplayerPeer.TransferModeEnum"/>. /// By default, methods are not exposed to networking (and RPCs). /// </summary> [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] - public sealed class RPCAttribute : Attribute + public sealed class RpcAttribute : Attribute { /// <summary> /// RPC mode for the annotated method. /// </summary> - public MultiplayerAPI.RPCMode Mode { get; } = MultiplayerAPI.RPCMode.Disabled; + public MultiplayerApi.RpcMode Mode { get; } = MultiplayerApi.RpcMode.Disabled; /// <summary> /// If the method will also be called locally; otherwise, it is only called remotely. @@ -32,10 +32,10 @@ namespace Godot public int TransferChannel { get; init; } = 0; /// <summary> - /// Constructs a <see cref="RPCAttribute"/> instance. + /// Constructs a <see cref="RpcAttribute"/> instance. /// </summary> /// <param name="mode">The RPC mode to use.</param> - public RPCAttribute(MultiplayerAPI.RPCMode mode = MultiplayerAPI.RPCMode.Authority) + public RpcAttribute(MultiplayerApi.RpcMode mode = MultiplayerApi.RpcMode.Authority) { Mode = mode; } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs index 2b139a78bd..ca963cbf4f 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs @@ -27,7 +27,7 @@ namespace Godot /// The basis matrix's X vector (column 0). /// </summary> /// <value>Equivalent to <see cref="Column0"/> and array index <c>[0]</c>.</value> - public Vector3 x + public Vector3 X { readonly get => Column0; set => Column0 = value; @@ -37,7 +37,7 @@ namespace Godot /// The basis matrix's Y vector (column 1). /// </summary> /// <value>Equivalent to <see cref="Column1"/> and array index <c>[1]</c>.</value> - public Vector3 y + public Vector3 Y { readonly get => Column1; set => Column1 = value; @@ -47,7 +47,7 @@ namespace Godot /// The basis matrix's Z vector (column 2). /// </summary> /// <value>Equivalent to <see cref="Column2"/> and array index <c>[2]</c>.</value> - public Vector3 z + public Vector3 Z { readonly get => Column2; set => Column2 = value; @@ -77,45 +77,45 @@ namespace Godot /// <summary> /// Column 0 of the basis matrix (the X vector). /// </summary> - /// <value>Equivalent to <see cref="x"/> and array index <c>[0]</c>.</value> + /// <value>Equivalent to <see cref="X"/> and array index <c>[0]</c>.</value> public Vector3 Column0 { - readonly get => new Vector3(Row0.x, Row1.x, Row2.x); + readonly get => new Vector3(Row0.X, Row1.X, Row2.X); set { - Row0.x = value.x; - Row1.x = value.y; - Row2.x = value.z; + Row0.X = value.X; + Row1.X = value.Y; + Row2.X = value.Z; } } /// <summary> /// Column 1 of the basis matrix (the Y vector). /// </summary> - /// <value>Equivalent to <see cref="y"/> and array index <c>[1]</c>.</value> + /// <value>Equivalent to <see cref="Y"/> and array index <c>[1]</c>.</value> public Vector3 Column1 { - readonly get => new Vector3(Row0.y, Row1.y, Row2.y); + readonly get => new Vector3(Row0.Y, Row1.Y, Row2.Y); set { - Row0.y = value.x; - Row1.y = value.y; - Row2.y = value.z; + Row0.Y = value.X; + Row1.Y = value.Y; + Row2.Y = value.Z; } } /// <summary> /// Column 2 of the basis matrix (the Z vector). /// </summary> - /// <value>Equivalent to <see cref="z"/> and array index <c>[2]</c>.</value> + /// <value>Equivalent to <see cref="Z"/> and array index <c>[2]</c>.</value> public Vector3 Column2 { - readonly get => new Vector3(Row0.z, Row1.z, Row2.z); + readonly get => new Vector3(Row0.Z, Row1.Z, Row2.Z); set { - Row0.z = value.x; - Row1.z = value.y; - Row2.z = value.z; + Row0.Z = value.X; + Row1.Z = value.Y; + Row2.Z = value.Z; } } @@ -213,9 +213,9 @@ namespace Godot private void SetDiagonal(Vector3 diagonal) { - Row0 = new Vector3(diagonal.x, 0, 0); - Row1 = new Vector3(0, diagonal.y, 0); - Row2 = new Vector3(0, 0, diagonal.z); + Row0 = new Vector3(diagonal.X, 0, 0); + Row1 = new Vector3(0, diagonal.Y, 0); + Row2 = new Vector3(0, 0, diagonal.Z); } /// <summary> @@ -270,29 +270,29 @@ namespace Godot if (Row1[0] == 0 && Row0[1] == 0 && Row1[2] == 0 && Row2[1] == 0 && Row1[1] == 1) { // return the simplest form (human friendlier in editor and scripts) - euler.x = 0; - euler.y = Mathf.Atan2(Row0[2], Row0[0]); - euler.z = 0; + euler.X = 0; + euler.Y = Mathf.Atan2(Row0[2], Row0[0]); + euler.Z = 0; } else { - euler.x = Mathf.Atan2(-Row1[2], Row2[2]); - euler.y = Mathf.Asin(sy); - euler.z = Mathf.Atan2(-Row0[1], Row0[0]); + euler.X = Mathf.Atan2(-Row1[2], Row2[2]); + euler.Y = Mathf.Asin(sy); + euler.Z = Mathf.Atan2(-Row0[1], Row0[0]); } } else { - euler.x = Mathf.Atan2(Row2[1], Row1[1]); - euler.y = -Mathf.Tau / 4.0f; - euler.z = 0.0f; + euler.X = Mathf.Atan2(Row2[1], Row1[1]); + euler.Y = -Mathf.Tau / 4.0f; + euler.Z = 0.0f; } } else { - euler.x = Mathf.Atan2(Row2[1], Row1[1]); - euler.y = Mathf.Tau / 4.0f; - euler.z = 0.0f; + euler.X = Mathf.Atan2(Row2[1], Row1[1]); + euler.Y = Mathf.Tau / 4.0f; + euler.Z = 0.0f; } return euler; } @@ -310,24 +310,24 @@ namespace Godot { if (sz > -(1.0f - Mathf.Epsilon)) { - euler.x = Mathf.Atan2(Row2[1], Row1[1]); - euler.y = Mathf.Atan2(Row0[2], Row0[0]); - euler.z = Mathf.Asin(-sz); + euler.X = Mathf.Atan2(Row2[1], Row1[1]); + euler.Y = Mathf.Atan2(Row0[2], Row0[0]); + euler.Z = Mathf.Asin(-sz); } else { // It's -1 - euler.x = -Mathf.Atan2(Row1[2], Row2[2]); - euler.y = 0.0f; - euler.z = Mathf.Tau / 4.0f; + euler.X = -Mathf.Atan2(Row1[2], Row2[2]); + euler.Y = 0.0f; + euler.Z = Mathf.Tau / 4.0f; } } else { // It's 1 - euler.x = -Mathf.Atan2(Row1[2], Row2[2]); - euler.y = 0.0f; - euler.z = -Mathf.Tau / 4.0f; + euler.X = -Mathf.Atan2(Row1[2], Row2[2]); + euler.Y = 0.0f; + euler.Z = -Mathf.Tau / 4.0f; } return euler; } @@ -349,29 +349,29 @@ namespace Godot if (Row1[0] == 0 && Row0[1] == 0 && Row0[2] == 0 && Row2[0] == 0 && Row0[0] == 1) { // return the simplest form (human friendlier in editor and scripts) - euler.x = Mathf.Atan2(-m12, Row1[1]); - euler.y = 0; - euler.z = 0; + euler.X = Mathf.Atan2(-m12, Row1[1]); + euler.Y = 0; + euler.Z = 0; } else { - euler.x = Mathf.Asin(-m12); - euler.y = Mathf.Atan2(Row0[2], Row2[2]); - euler.z = Mathf.Atan2(Row1[0], Row1[1]); + euler.X = Mathf.Asin(-m12); + euler.Y = Mathf.Atan2(Row0[2], Row2[2]); + euler.Z = Mathf.Atan2(Row1[0], Row1[1]); } } else { // m12 == -1 - euler.x = Mathf.Tau / 4.0f; - euler.y = Mathf.Atan2(Row0[1], Row0[0]); - euler.z = 0; + euler.X = Mathf.Tau / 4.0f; + euler.Y = Mathf.Atan2(Row0[1], Row0[0]); + euler.Z = 0; } } else { // m12 == 1 - euler.x = -Mathf.Tau / 4.0f; - euler.y = -Mathf.Atan2(Row0[1], Row0[0]); - euler.z = 0; + euler.X = -Mathf.Tau / 4.0f; + euler.Y = -Mathf.Atan2(Row0[1], Row0[0]); + euler.Z = 0; } return euler; @@ -390,24 +390,24 @@ namespace Godot { if (sz > -(1.0f - Mathf.Epsilon)) { - euler.x = Mathf.Atan2(-Row1[2], Row1[1]); - euler.y = Mathf.Atan2(-Row2[0], Row0[0]); - euler.z = Mathf.Asin(sz); + euler.X = Mathf.Atan2(-Row1[2], Row1[1]); + euler.Y = Mathf.Atan2(-Row2[0], Row0[0]); + euler.Z = Mathf.Asin(sz); } else { // It's -1 - euler.x = Mathf.Atan2(Row2[1], Row2[2]); - euler.y = 0.0f; - euler.z = -Mathf.Tau / 4.0f; + euler.X = Mathf.Atan2(Row2[1], Row2[2]); + euler.Y = 0.0f; + euler.Z = -Mathf.Tau / 4.0f; } } else { // It's 1 - euler.x = Mathf.Atan2(Row2[1], Row2[2]); - euler.y = 0.0f; - euler.z = Mathf.Tau / 4.0f; + euler.X = Mathf.Atan2(Row2[1], Row2[2]); + euler.Y = 0.0f; + euler.Z = Mathf.Tau / 4.0f; } return euler; } @@ -425,24 +425,24 @@ namespace Godot { if (sx > -(1.0f - Mathf.Epsilon)) { - euler.x = Mathf.Asin(sx); - euler.y = Mathf.Atan2(-Row2[0], Row2[2]); - euler.z = Mathf.Atan2(-Row0[1], Row1[1]); + euler.X = Mathf.Asin(sx); + euler.Y = Mathf.Atan2(-Row2[0], Row2[2]); + euler.Z = Mathf.Atan2(-Row0[1], Row1[1]); } else { // It's -1 - euler.x = -Mathf.Tau / 4.0f; - euler.y = Mathf.Atan2(Row0[2], Row0[0]); - euler.z = 0; + euler.X = -Mathf.Tau / 4.0f; + euler.Y = Mathf.Atan2(Row0[2], Row0[0]); + euler.Z = 0; } } else { // It's 1 - euler.x = Mathf.Tau / 4.0f; - euler.y = Mathf.Atan2(Row0[2], Row0[0]); - euler.z = 0; + euler.X = Mathf.Tau / 4.0f; + euler.Y = Mathf.Atan2(Row0[2], Row0[0]); + euler.Z = 0; } return euler; } @@ -460,24 +460,24 @@ namespace Godot { if (sy > -(1.0f - Mathf.Epsilon)) { - euler.x = Mathf.Atan2(Row2[1], Row2[2]); - euler.y = Mathf.Asin(-sy); - euler.z = Mathf.Atan2(Row1[0], Row0[0]); + euler.X = Mathf.Atan2(Row2[1], Row2[2]); + euler.Y = Mathf.Asin(-sy); + euler.Z = Mathf.Atan2(Row1[0], Row0[0]); } else { // It's -1 - euler.x = 0; - euler.y = Mathf.Tau / 4.0f; - euler.z = -Mathf.Atan2(Row0[1], Row1[1]); + euler.X = 0; + euler.Y = Mathf.Tau / 4.0f; + euler.Z = -Mathf.Atan2(Row0[1], Row1[1]); } } else { // It's 1 - euler.x = 0; - euler.y = -Mathf.Tau / 4.0f; - euler.z = -Mathf.Atan2(Row0[1], Row1[1]); + euler.X = 0; + euler.Y = -Mathf.Tau / 4.0f; + euler.Z = -Mathf.Atan2(Row0[1], Row1[1]); } return euler; } @@ -653,9 +653,9 @@ namespace Godot public readonly Basis Scaled(Vector3 scale) { Basis b = this; - b.Row0 *= scale.x; - b.Row1 *= scale.y; - b.Row2 *= scale.z; + b.Row0 *= scale.X; + b.Row1 *= scale.Y; + b.Row2 *= scale.Z; return b; } @@ -792,18 +792,18 @@ namespace Godot { real_t s = 2.0f / quaternion.LengthSquared(); - real_t xs = quaternion.x * s; - real_t ys = quaternion.y * s; - real_t zs = quaternion.z * s; - real_t wx = quaternion.w * xs; - real_t wy = quaternion.w * ys; - real_t wz = quaternion.w * zs; - real_t xx = quaternion.x * xs; - real_t xy = quaternion.x * ys; - real_t xz = quaternion.x * zs; - real_t yy = quaternion.y * ys; - real_t yz = quaternion.y * zs; - real_t zz = quaternion.z * zs; + real_t xs = quaternion.X * s; + real_t ys = quaternion.Y * s; + real_t zs = quaternion.Z * s; + real_t wx = quaternion.W * xs; + real_t wy = quaternion.W * ys; + real_t wz = quaternion.W * zs; + real_t xx = quaternion.X * xs; + real_t xy = quaternion.X * ys; + real_t xz = quaternion.X * zs; + real_t yy = quaternion.Y * ys; + real_t yz = quaternion.Y * zs; + real_t zz = quaternion.Z * zs; Row0 = new Vector3(1.0f - (yy + zz), xy - wz, xz + wy); Row1 = new Vector3(xy + wz, 1.0f - (xx + zz), yz - wx); @@ -818,29 +818,29 @@ namespace Godot /// <param name="angle">The angle to rotate, in radians.</param> public Basis(Vector3 axis, real_t angle) { - Vector3 axisSq = new Vector3(axis.x * axis.x, axis.y * axis.y, axis.z * axis.z); + Vector3 axisSq = new Vector3(axis.X * axis.X, axis.Y * axis.Y, axis.Z * axis.Z); (real_t sin, real_t cos) = Mathf.SinCos(angle); - Row0.x = axisSq.x + cos * (1.0f - axisSq.x); - Row1.y = axisSq.y + cos * (1.0f - axisSq.y); - Row2.z = axisSq.z + cos * (1.0f - axisSq.z); + Row0.X = axisSq.X + cos * (1.0f - axisSq.X); + Row1.Y = axisSq.Y + cos * (1.0f - axisSq.Y); + Row2.Z = axisSq.Z + cos * (1.0f - axisSq.Z); real_t t = 1.0f - cos; - real_t xyzt = axis.x * axis.y * t; - real_t zyxs = axis.z * sin; - Row0.y = xyzt - zyxs; - Row1.x = xyzt + zyxs; + real_t xyzt = axis.X * axis.Y * t; + real_t zyxs = axis.Z * sin; + Row0.Y = xyzt - zyxs; + Row1.X = xyzt + zyxs; - xyzt = axis.x * axis.z * t; - zyxs = axis.y * sin; - Row0.z = xyzt + zyxs; - Row2.x = xyzt - zyxs; + xyzt = axis.X * axis.Z * t; + zyxs = axis.Y * sin; + Row0.Z = xyzt + zyxs; + Row2.X = xyzt - zyxs; - xyzt = axis.y * axis.z * t; - zyxs = axis.x * sin; - Row1.z = xyzt - zyxs; - Row2.y = xyzt + zyxs; + xyzt = axis.Y * axis.Z * t; + zyxs = axis.X * sin; + Row1.Z = xyzt - zyxs; + Row2.Y = xyzt + zyxs; } /// <summary> @@ -851,9 +851,9 @@ namespace Godot /// <param name="column2">The Z vector, or Column2.</param> public Basis(Vector3 column0, Vector3 column1, Vector3 column2) { - Row0 = new Vector3(column0.x, column1.x, column2.x); - Row1 = new Vector3(column0.y, column1.y, column2.y); - Row2 = new Vector3(column0.z, column1.z, column2.z); + Row0 = new Vector3(column0.X, column1.X, column2.X); + Row1 = new Vector3(column0.Y, column1.Y, column2.Y); + Row2 = new Vector3(column0.Z, column1.Z, column2.Z); // Same as: // Column0 = column0; // Column1 = column1; @@ -863,17 +863,17 @@ namespace Godot /// <summary> /// Constructs a transformation matrix from the given components. - /// Arguments are named such that xy is equal to calling <c>x.y</c>. + /// Arguments are named such that xy is equal to calling <c>X.Y</c>. /// </summary> - /// <param name="xx">The X component of the X column vector, accessed via <c>b.x.x</c> or <c>[0][0]</c>.</param> - /// <param name="yx">The X component of the Y column vector, accessed via <c>b.y.x</c> or <c>[1][0]</c>.</param> - /// <param name="zx">The X component of the Z column vector, accessed via <c>b.z.x</c> or <c>[2][0]</c>.</param> - /// <param name="xy">The Y component of the X column vector, accessed via <c>b.x.y</c> or <c>[0][1]</c>.</param> - /// <param name="yy">The Y component of the Y column vector, accessed via <c>b.y.y</c> or <c>[1][1]</c>.</param> - /// <param name="zy">The Y component of the Z column vector, accessed via <c>b.y.y</c> or <c>[2][1]</c>.</param> - /// <param name="xz">The Z component of the X column vector, accessed via <c>b.x.y</c> or <c>[0][2]</c>.</param> - /// <param name="yz">The Z component of the Y column vector, accessed via <c>b.y.y</c> or <c>[1][2]</c>.</param> - /// <param name="zz">The Z component of the Z column vector, accessed via <c>b.y.y</c> or <c>[2][2]</c>.</param> + /// <param name="xx">The X component of the X column vector, accessed via <c>b.X.X</c> or <c>[0][0]</c>.</param> + /// <param name="yx">The X component of the Y column vector, accessed via <c>b.Y.X</c> or <c>[1][0]</c>.</param> + /// <param name="zx">The X component of the Z column vector, accessed via <c>b.Z.X</c> or <c>[2][0]</c>.</param> + /// <param name="xy">The Y component of the X column vector, accessed via <c>b.X.Y</c> or <c>[0][1]</c>.</param> + /// <param name="yy">The Y component of the Y column vector, accessed via <c>b.Y.Y</c> or <c>[1][1]</c>.</param> + /// <param name="zy">The Y component of the Z column vector, accessed via <c>b.Y.Y</c> or <c>[2][1]</c>.</param> + /// <param name="xz">The Z component of the X column vector, accessed via <c>b.X.Y</c> or <c>[0][2]</c>.</param> + /// <param name="yz">The Z component of the Y column vector, accessed via <c>b.Y.Y</c> or <c>[1][2]</c>.</param> + /// <param name="zz">The Z component of the Z column vector, accessed via <c>b.Y.Y</c> or <c>[2][2]</c>.</param> public Basis(real_t xx, real_t yx, real_t zx, real_t xy, real_t yy, real_t zy, real_t xz, real_t yz, real_t zz) { Row0 = new Vector3(xx, yx, zx); @@ -888,7 +888,7 @@ namespace Godot /// <param name="order">The order to compose the Euler angles.</param> public static Basis FromEuler(Vector3 euler, EulerOrder order = EulerOrder.Yxz) { - (real_t sin, real_t cos) = Mathf.SinCos(euler.x); + (real_t sin, real_t cos) = Mathf.SinCos(euler.X); Basis xmat = new Basis ( new Vector3(1, 0, 0), @@ -896,7 +896,7 @@ namespace Godot new Vector3(0, -sin, cos) ); - (sin, cos) = Mathf.SinCos(euler.y); + (sin, cos) = Mathf.SinCos(euler.Y); Basis ymat = new Basis ( new Vector3(cos, 0, -sin), @@ -904,7 +904,7 @@ namespace Godot new Vector3(sin, 0, cos) ); - (sin, cos) = Mathf.SinCos(euler.z); + (sin, cos) = Mathf.SinCos(euler.Z); Basis zmat = new Basis ( new Vector3(cos, sin, 0), @@ -941,9 +941,9 @@ namespace Godot public static Basis FromScale(Vector3 scale) { return new Basis( - scale.x, 0, 0, - 0, scale.y, 0, - 0, 0, scale.z + scale.X, 0, 0, + 0, scale.Y, 0, + 0, 0, scale.Z ); } @@ -994,9 +994,9 @@ namespace Godot { return new Vector3 ( - basis.Row0[0] * vector.x + basis.Row1[0] * vector.y + basis.Row2[0] * vector.z, - basis.Row0[1] * vector.x + basis.Row1[1] * vector.y + basis.Row2[1] * vector.z, - basis.Row0[2] * vector.x + basis.Row1[2] * vector.y + basis.Row2[2] * vector.z + basis.Row0[0] * vector.X + basis.Row1[0] * vector.Y + basis.Row2[0] * vector.Z, + basis.Row0[1] * vector.X + basis.Row1[1] * vector.Y + basis.Row2[1] * vector.Z, + basis.Row0[2] * vector.X + basis.Row1[2] * vector.Y + basis.Row2[2] * vector.Z ); } @@ -1077,7 +1077,7 @@ namespace Godot /// <returns>A string representation of this basis.</returns> public override readonly string ToString() { - return $"[X: {x}, Y: {y}, Z: {z}]"; + return $"[X: {X}, Y: {Y}, Z: {Z}]"; } /// <summary> @@ -1086,7 +1086,7 @@ namespace Godot /// <returns>A string representation of this basis.</returns> public readonly string ToString(string format) { - return $"[X: {x.ToString(format)}, Y: {y.ToString(format)}, Z: {z.ToString(format)}]"; + return $"[X: {X.ToString(format)}, Y: {Y.ToString(format)}, Z: {Z.ToString(format)}]"; } } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/CSharpInstanceBridge.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/CSharpInstanceBridge.cs index ccb21502c0..16be494d99 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/CSharpInstanceBridge.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/CSharpInstanceBridge.cs @@ -12,7 +12,7 @@ namespace Godot.Bridge { try { - var godotObject = (Object)GCHandle.FromIntPtr(godotObjectGCHandle).Target; + var godotObject = (GodotObject)GCHandle.FromIntPtr(godotObjectGCHandle).Target; if (godotObject == null) { @@ -49,7 +49,7 @@ namespace Godot.Bridge { try { - var godotObject = (Object)GCHandle.FromIntPtr(godotObjectGCHandle).Target; + var godotObject = (GodotObject)GCHandle.FromIntPtr(godotObjectGCHandle).Target; if (godotObject == null) throw new InvalidOperationException(); @@ -79,7 +79,7 @@ namespace Godot.Bridge { try { - var godotObject = (Object)GCHandle.FromIntPtr(godotObjectGCHandle).Target; + var godotObject = (GodotObject)GCHandle.FromIntPtr(godotObjectGCHandle).Target; if (godotObject == null) throw new InvalidOperationException(); @@ -134,7 +134,7 @@ namespace Godot.Bridge { try { - var godotObject = (Object)GCHandle.FromIntPtr(godotObjectGCHandle).Target; + var godotObject = (GodotObject)GCHandle.FromIntPtr(godotObjectGCHandle).Target; if (okIfNull.ToBool()) godotObject?.Dispose(); @@ -152,7 +152,7 @@ namespace Godot.Bridge { try { - var self = (Object)GCHandle.FromIntPtr(godotObjectGCHandle).Target; + var self = (GodotObject)GCHandle.FromIntPtr(godotObjectGCHandle).Target; if (self == null) { @@ -186,7 +186,7 @@ namespace Godot.Bridge { try { - var godotObject = (Object)GCHandle.FromIntPtr(godotObjectGCHandle).Target; + var godotObject = (GodotObject)GCHandle.FromIntPtr(godotObjectGCHandle).Target; if (godotObject == null) return godot_bool.False; @@ -209,7 +209,7 @@ namespace Godot.Bridge { try { - var godotObject = (Object)GCHandle.FromIntPtr(godotObjectGCHandle).Target; + var godotObject = (GodotObject)GCHandle.FromIntPtr(godotObjectGCHandle).Target; if (godotObject == null) return; @@ -242,7 +242,7 @@ namespace Godot.Bridge { try { - var godotObject = (Object)GCHandle.FromIntPtr(godotObjectGCHandle).Target; + var godotObject = (GodotObject)GCHandle.FromIntPtr(godotObjectGCHandle).Target; if (godotObject == null) return; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/GodotSerializationInfo.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/GodotSerializationInfo.cs index 6d20f95007..47feb1902f 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/GodotSerializationInfo.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/GodotSerializationInfo.cs @@ -48,7 +48,7 @@ public sealed class GodotSerializationInfo : IDisposable { _signalEvents[name] = serializedData; } - else if (OS.IsStdoutVerbose()) + else if (OS.IsStdOutVerbose()) { Console.WriteLine($"Failed to serialize event signal delegate: {name}"); } @@ -72,7 +72,7 @@ public sealed class GodotSerializationInfo : IDisposable return true; } - else if (OS.IsStdoutVerbose()) + else if (OS.IsStdOutVerbose()) { Console.WriteLine($"Failed to deserialize event signal delegate: {name}"); } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/ScriptManagerBridge.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/ScriptManagerBridge.cs index dafa83431b..859b47c276 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/ScriptManagerBridge.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/ScriptManagerBridge.cs @@ -100,7 +100,7 @@ namespace Godot.Bridge Type nativeType = TypeGetProxyClass(nativeTypeNameStr) ?? throw new InvalidOperationException( "Wrapper class not found for type: " + nativeTypeNameStr); - var obj = (Object)FormatterServices.GetUninitializedObject(nativeType); + var obj = (GodotObject)FormatterServices.GetUninitializedObject(nativeType); var ctor = nativeType.GetConstructor( BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance, @@ -150,7 +150,7 @@ namespace Godot.Bridge } } - var obj = (Object)FormatterServices.GetUninitializedObject(scriptType); + var obj = (GodotObject)FormatterServices.GetUninitializedObject(scriptType); var parameters = ctor.GetParameters(); int paramCount = parameters.Length; @@ -189,7 +189,7 @@ namespace Godot.Bridge return; } - var native = Object.InternalGetClassNativeBase(scriptType); + var native = GodotObject.InternalGetClassNativeBase(scriptType); var field = native?.GetField("NativeName", BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); @@ -222,7 +222,7 @@ namespace Godot.Bridge { try { - var target = (Object?)GCHandle.FromIntPtr(gcHandlePtr).Target; + var target = (GodotObject?)GCHandle.FromIntPtr(gcHandlePtr).Target; if (target != null) target.NativePtr = newPtr; } @@ -239,7 +239,7 @@ namespace Godot.Bridge if (nativeTypeNameStr[0] == '_') nativeTypeNameStr = nativeTypeNameStr.Substring(1); - Type? wrapperType = typeof(Object).Assembly.GetType("Godot." + nativeTypeNameStr); + Type? wrapperType = typeof(GodotObject).Assembly.GetType("Godot." + nativeTypeNameStr); if (wrapperType == null) { @@ -252,8 +252,8 @@ namespace Godot.Bridge if (wrapperType != null && IsStatic(wrapperType)) { - // A static class means this is a Godot singleton class. If an instance is needed we use Godot.Object. - return typeof(Object); + // A static class means this is a Godot singleton class. If an instance is needed we use GodotObject. + return typeof(GodotObject); } return wrapperType; @@ -293,7 +293,7 @@ namespace Godot.Bridge // such as when disabling C# source generators (for whatever reason) or when using a // language other than C# that has nothing similar to source generators to automate it. - var typeOfGodotObject = typeof(Object); + var typeOfGodotObject = typeof(GodotObject); foreach (var type in assembly.GetTypes()) { @@ -331,7 +331,7 @@ namespace Godot.Bridge { try { - var owner = (Object?)GCHandle.FromIntPtr(ownerGCHandlePtr).Target; + var owner = (GodotObject?)GCHandle.FromIntPtr(ownerGCHandlePtr).Target; if (owner == null) { @@ -539,9 +539,9 @@ namespace Godot.Bridge } // ReSharper disable once RedundantNameQualifier - if (!typeof(Godot.Object).IsAssignableFrom(scriptType)) + if (!typeof(GodotObject).IsAssignableFrom(scriptType)) { - // The class no longer inherits Godot.Object, can't reload + // The class no longer inherits GodotObject, can't reload return godot_bool.False; } @@ -589,7 +589,7 @@ namespace Godot.Bridge using var methods = new Collections.Array(); Type? top = scriptType; - Type native = Object.InternalGetClassNativeBase(top); + Type native = GodotObject.InternalGetClassNativeBase(top); while (top != null && top != native) { @@ -650,7 +650,7 @@ namespace Godot.Bridge continue; var rpcAttr = method.GetCustomAttributes(inherit: false) - .OfType<RPCAttribute>().FirstOrDefault(); + .OfType<RpcAttribute>().FirstOrDefault(); if (rpcAttr == null) continue; @@ -899,7 +899,7 @@ namespace Godot.Bridge try { Type? top = _scriptTypeBiMap.GetScriptType(scriptPtr); - Type native = Object.InternalGetClassNativeBase(top); + Type native = GodotObject.InternalGetClassNativeBase(top); while (top != null && top != native) { diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Callable.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Callable.cs index 23b0aa9204..219a9a8c15 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Callable.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Callable.cs @@ -28,7 +28,7 @@ namespace Godot /// </example> public readonly partial struct Callable { - private readonly Object _target; + private readonly GodotObject _target; private readonly StringName _method; private readonly Delegate _delegate; private readonly unsafe delegate* managed<object, NativeVariantPtrArgs, out godot_variant, void> _trampoline; @@ -36,7 +36,7 @@ namespace Godot /// <summary> /// Object that contains the method. /// </summary> - public Object Target => _target; + public GodotObject Target => _target; /// <summary> /// Name of the method that will be called. @@ -60,7 +60,7 @@ namespace Godot /// </summary> /// <param name="target">Object that contains the method.</param> /// <param name="method">Name of the method that will be called.</param> - public unsafe Callable(Object target, StringName method) + public unsafe Callable(GodotObject target, StringName method) { _target = target; _method = method; @@ -71,7 +71,7 @@ namespace Godot private unsafe Callable(Delegate @delegate, delegate* managed<object, NativeVariantPtrArgs, out godot_variant, void> trampoline) { - _target = @delegate?.Target as Object; + _target = @delegate?.Target as GodotObject; _method = null; _delegate = @delegate; _trampoline = trampoline; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs index 6a7863112a..555811bab2 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs @@ -21,97 +21,97 @@ namespace Godot /// <summary> /// The color's red component, typically on the range of 0 to 1. /// </summary> - public float r; + public float R; /// <summary> /// The color's green component, typically on the range of 0 to 1. /// </summary> - public float g; + public float G; /// <summary> /// The color's blue component, typically on the range of 0 to 1. /// </summary> - public float b; + public float B; /// <summary> /// The color's alpha (transparency) component, typically on the range of 0 to 1. /// </summary> - public float a; + public float A; /// <summary> - /// Wrapper for <see cref="r"/> that uses the range 0 to 255 instead of 0 to 1. + /// Wrapper for <see cref="R"/> that uses the range 0 to 255 instead of 0 to 1. /// </summary> /// <value>Getting is equivalent to multiplying by 255 and rounding. Setting is equivalent to dividing by 255.</value> - public int r8 + public int R8 { readonly get { - return (int)Math.Round(r * 255.0f); + return (int)Math.Round(R * 255.0f); } set { - r = value / 255.0f; + R = value / 255.0f; } } /// <summary> - /// Wrapper for <see cref="g"/> that uses the range 0 to 255 instead of 0 to 1. + /// Wrapper for <see cref="G"/> that uses the range 0 to 255 instead of 0 to 1. /// </summary> /// <value>Getting is equivalent to multiplying by 255 and rounding. Setting is equivalent to dividing by 255.</value> - public int g8 + public int G8 { readonly get { - return (int)Math.Round(g * 255.0f); + return (int)Math.Round(G * 255.0f); } set { - g = value / 255.0f; + G = value / 255.0f; } } /// <summary> - /// Wrapper for <see cref="b"/> that uses the range 0 to 255 instead of 0 to 1. + /// Wrapper for <see cref="B"/> that uses the range 0 to 255 instead of 0 to 1. /// </summary> /// <value>Getting is equivalent to multiplying by 255 and rounding. Setting is equivalent to dividing by 255.</value> - public int b8 + public int B8 { readonly get { - return (int)Math.Round(b * 255.0f); + return (int)Math.Round(B * 255.0f); } set { - b = value / 255.0f; + B = value / 255.0f; } } /// <summary> - /// Wrapper for <see cref="a"/> that uses the range 0 to 255 instead of 0 to 1. + /// Wrapper for <see cref="A"/> that uses the range 0 to 255 instead of 0 to 1. /// </summary> /// <value>Getting is equivalent to multiplying by 255 and rounding. Setting is equivalent to dividing by 255.</value> - public int a8 + public int A8 { readonly get { - return (int)Math.Round(a * 255.0f); + return (int)Math.Round(A * 255.0f); } set { - a = value / 255.0f; + A = value / 255.0f; } } /// <summary> /// The HSV hue of this color, on the range 0 to 1. /// </summary> - /// <value>Getting is a long process, refer to the source code for details. Setting uses <see cref="FromHSV"/>.</value> - public float h + /// <value>Getting is a long process, refer to the source code for details. Setting uses <see cref="FromHsv"/>.</value> + public float H { readonly get { - float max = Math.Max(r, Math.Max(g, b)); - float min = Math.Min(r, Math.Min(g, b)); + float max = Math.Max(R, Math.Max(G, B)); + float min = Math.Min(R, Math.Min(G, B)); float delta = max - min; @@ -122,17 +122,17 @@ namespace Godot float h; - if (r == max) + if (R == max) { - h = (g - b) / delta; // Between yellow & magenta + h = (G - B) / delta; // Between yellow & magenta } - else if (g == max) + else if (G == max) { - h = 2 + ((b - r) / delta); // Between cyan & yellow + h = 2 + ((B - R) / delta); // Between cyan & yellow } else { - h = 4 + ((r - g) / delta); // Between magenta & cyan + h = 4 + ((R - G) / delta); // Between magenta & cyan } h /= 6.0f; @@ -146,20 +146,20 @@ namespace Godot } set { - this = FromHSV(value, s, v, a); + this = FromHsv(value, S, V, A); } } /// <summary> /// The HSV saturation of this color, on the range 0 to 1. /// </summary> - /// <value>Getting is equivalent to the ratio between the min and max RGB value. Setting uses <see cref="FromHSV"/>.</value> - public float s + /// <value>Getting is equivalent to the ratio between the min and max RGB value. Setting uses <see cref="FromHsv"/>.</value> + public float S { readonly get { - float max = Math.Max(r, Math.Max(g, b)); - float min = Math.Min(r, Math.Min(g, b)); + float max = Math.Max(R, Math.Max(G, B)); + float min = Math.Min(R, Math.Min(G, B)); float delta = max - min; @@ -167,23 +167,23 @@ namespace Godot } set { - this = FromHSV(h, value, v, a); + this = FromHsv(H, value, V, A); } } /// <summary> /// The HSV value (brightness) of this color, on the range 0 to 1. /// </summary> - /// <value>Getting is equivalent to using <see cref="Math.Max(float, float)"/> on the RGB components. Setting uses <see cref="FromHSV"/>.</value> - public float v + /// <value>Getting is equivalent to using <see cref="Math.Max(float, float)"/> on the RGB components. Setting uses <see cref="FromHsv"/>.</value> + public float V { readonly get { - return Math.Max(r, Math.Max(g, b)); + return Math.Max(R, Math.Max(G, B)); } set { - this = FromHSV(h, s, value, a); + this = FromHsv(H, S, value, A); } } @@ -197,17 +197,17 @@ namespace Godot /// </summary> public readonly float Luminance { - get { return 0.2126f * r + 0.7152f * g + 0.0722f * b; } + get { return 0.2126f * R + 0.7152f * G + 0.0722f * B; } } /// <summary> /// Access color components using their index. /// </summary> /// <value> - /// <c>[0]</c> is equivalent to <see cref="r"/>, - /// <c>[1]</c> is equivalent to <see cref="g"/>, - /// <c>[2]</c> is equivalent to <see cref="b"/>, - /// <c>[3]</c> is equivalent to <see cref="a"/>. + /// <c>[0]</c> is equivalent to <see cref="R"/>, + /// <c>[1]</c> is equivalent to <see cref="G"/>, + /// <c>[2]</c> is equivalent to <see cref="B"/>, + /// <c>[3]</c> is equivalent to <see cref="A"/>. /// </value> public float this[int index] { @@ -216,13 +216,13 @@ namespace Godot switch (index) { case 0: - return r; + return R; case 1: - return g; + return G; case 2: - return b; + return B; case 3: - return a; + return A; default: throw new ArgumentOutOfRangeException(nameof(index)); } @@ -232,16 +232,16 @@ namespace Godot switch (index) { case 0: - r = value; + R = value; return; case 1: - g = value; + G = value; return; case 2: - b = value; + B = value; return; case 3: - a = value; + A = value; return; default: throw new ArgumentOutOfRangeException(nameof(index)); @@ -260,17 +260,17 @@ namespace Godot { Color res; - float sa = 1.0f - over.a; - res.a = (a * sa) + over.a; + float sa = 1.0f - over.A; + res.A = (A * sa) + over.A; - if (res.a == 0) + if (res.A == 0) { return new Color(0, 0, 0, 0); } - res.r = ((r * a * sa) + (over.r * over.a)) / res.a; - res.g = ((g * a * sa) + (over.g * over.a)) / res.a; - res.b = ((b * a * sa) + (over.b * over.a)) / res.a; + res.R = ((R * A * sa) + (over.R * over.A)) / res.A; + res.G = ((G * A * sa) + (over.G * over.A)) / res.A; + res.B = ((B * A * sa) + (over.B * over.A)) / res.A; return res; } @@ -289,10 +289,10 @@ namespace Godot Color maximum = max ?? new Color(1, 1, 1, 1); return new Color ( - (float)Mathf.Clamp(r, minimum.r, maximum.r), - (float)Mathf.Clamp(g, minimum.g, maximum.g), - (float)Mathf.Clamp(b, minimum.b, maximum.b), - (float)Mathf.Clamp(a, minimum.a, maximum.a) + (float)Mathf.Clamp(R, minimum.R, maximum.R), + (float)Mathf.Clamp(G, minimum.G, maximum.G), + (float)Mathf.Clamp(B, minimum.B, maximum.B), + (float)Mathf.Clamp(A, minimum.A, maximum.A) ); } @@ -305,9 +305,9 @@ namespace Godot public readonly Color Darkened(float amount) { Color res = this; - res.r *= 1.0f - amount; - res.g *= 1.0f - amount; - res.b *= 1.0f - amount; + res.R *= 1.0f - amount; + res.G *= 1.0f - amount; + res.B *= 1.0f - amount; return res; } @@ -318,10 +318,10 @@ namespace Godot public readonly Color Inverted() { return new Color( - 1.0f - r, - 1.0f - g, - 1.0f - b, - a + 1.0f - R, + 1.0f - G, + 1.0f - B, + A ); } @@ -334,9 +334,9 @@ namespace Godot public readonly Color Lightened(float amount) { Color res = this; - res.r += (1.0f - res.r) * amount; - res.g += (1.0f - res.g) * amount; - res.b += (1.0f - res.b) * amount; + res.R += (1.0f - res.R) * amount; + res.G += (1.0f - res.G) * amount; + res.B += (1.0f - res.B) * amount; return res; } @@ -351,10 +351,10 @@ namespace Godot { return new Color ( - (float)Mathf.Lerp(r, to.r, weight), - (float)Mathf.Lerp(g, to.g, weight), - (float)Mathf.Lerp(b, to.b, weight), - (float)Mathf.Lerp(a, to.a, weight) + (float)Mathf.Lerp(R, to.R, weight), + (float)Mathf.Lerp(G, to.G, weight), + (float)Mathf.Lerp(B, to.B, weight), + (float)Mathf.Lerp(A, to.A, weight) ); } @@ -367,9 +367,9 @@ namespace Godot public readonly Color LinearToSrgb() { return new Color( - r < 0.0031308f ? 12.92f * r : (1.0f + 0.055f) * (float)Mathf.Pow(r, 1.0f / 2.4f) - 0.055f, - g < 0.0031308f ? 12.92f * g : (1.0f + 0.055f) * (float)Mathf.Pow(g, 1.0f / 2.4f) - 0.055f, - b < 0.0031308f ? 12.92f * b : (1.0f + 0.055f) * (float)Mathf.Pow(b, 1.0f / 2.4f) - 0.055f, a); + R < 0.0031308f ? 12.92f * R : (1.0f + 0.055f) * (float)Mathf.Pow(R, 1.0f / 2.4f) - 0.055f, + G < 0.0031308f ? 12.92f * G : (1.0f + 0.055f) * (float)Mathf.Pow(G, 1.0f / 2.4f) - 0.055f, + B < 0.0031308f ? 12.92f * B : (1.0f + 0.055f) * (float)Mathf.Pow(B, 1.0f / 2.4f) - 0.055f, A); } /// <summary> @@ -381,10 +381,10 @@ namespace Godot public readonly Color SrgbToLinear() { return new Color( - r < 0.04045f ? r * (1.0f / 12.92f) : (float)Mathf.Pow((r + 0.055f) * (float)(1.0 / (1.0 + 0.055)), 2.4f), - g < 0.04045f ? g * (1.0f / 12.92f) : (float)Mathf.Pow((g + 0.055f) * (float)(1.0 / (1.0 + 0.055)), 2.4f), - b < 0.04045f ? b * (1.0f / 12.92f) : (float)Mathf.Pow((b + 0.055f) * (float)(1.0 / (1.0 + 0.055)), 2.4f), - a); + R < 0.04045f ? R * (1.0f / 12.92f) : (float)Mathf.Pow((R + 0.055f) * (float)(1.0 / (1.0 + 0.055)), 2.4f), + G < 0.04045f ? G * (1.0f / 12.92f) : (float)Mathf.Pow((G + 0.055f) * (float)(1.0 / (1.0 + 0.055)), 2.4f), + B < 0.04045f ? B * (1.0f / 12.92f) : (float)Mathf.Pow((B + 0.055f) * (float)(1.0 / (1.0 + 0.055)), 2.4f), + A); } /// <summary> @@ -395,13 +395,13 @@ namespace Godot /// <returns>A <see langword="uint"/> representing this color in ABGR32 format.</returns> public readonly uint ToAbgr32() { - uint c = (byte)Math.Round(a * 255); + uint c = (byte)Math.Round(A * 255); c <<= 8; - c |= (byte)Math.Round(b * 255); + c |= (byte)Math.Round(B * 255); c <<= 8; - c |= (byte)Math.Round(g * 255); + c |= (byte)Math.Round(G * 255); c <<= 8; - c |= (byte)Math.Round(r * 255); + c |= (byte)Math.Round(R * 255); return c; } @@ -414,13 +414,13 @@ namespace Godot /// <returns>A <see langword="ulong"/> representing this color in ABGR64 format.</returns> public readonly ulong ToAbgr64() { - ulong c = (ushort)Math.Round(a * 65535); + ulong c = (ushort)Math.Round(A * 65535); c <<= 16; - c |= (ushort)Math.Round(b * 65535); + c |= (ushort)Math.Round(B * 65535); c <<= 16; - c |= (ushort)Math.Round(g * 65535); + c |= (ushort)Math.Round(G * 65535); c <<= 16; - c |= (ushort)Math.Round(r * 65535); + c |= (ushort)Math.Round(R * 65535); return c; } @@ -433,13 +433,13 @@ namespace Godot /// <returns>A <see langword="uint"/> representing this color in ARGB32 format.</returns> public readonly uint ToArgb32() { - uint c = (byte)Math.Round(a * 255); + uint c = (byte)Math.Round(A * 255); c <<= 8; - c |= (byte)Math.Round(r * 255); + c |= (byte)Math.Round(R * 255); c <<= 8; - c |= (byte)Math.Round(g * 255); + c |= (byte)Math.Round(G * 255); c <<= 8; - c |= (byte)Math.Round(b * 255); + c |= (byte)Math.Round(B * 255); return c; } @@ -452,13 +452,13 @@ namespace Godot /// <returns>A <see langword="ulong"/> representing this color in ARGB64 format.</returns> public readonly ulong ToArgb64() { - ulong c = (ushort)Math.Round(a * 65535); + ulong c = (ushort)Math.Round(A * 65535); c <<= 16; - c |= (ushort)Math.Round(r * 65535); + c |= (ushort)Math.Round(R * 65535); c <<= 16; - c |= (ushort)Math.Round(g * 65535); + c |= (ushort)Math.Round(G * 65535); c <<= 16; - c |= (ushort)Math.Round(b * 65535); + c |= (ushort)Math.Round(B * 65535); return c; } @@ -471,13 +471,13 @@ namespace Godot /// <returns>A <see langword="uint"/> representing this color in RGBA32 format.</returns> public readonly uint ToRgba32() { - uint c = (byte)Math.Round(r * 255); + uint c = (byte)Math.Round(R * 255); c <<= 8; - c |= (byte)Math.Round(g * 255); + c |= (byte)Math.Round(G * 255); c <<= 8; - c |= (byte)Math.Round(b * 255); + c |= (byte)Math.Round(B * 255); c <<= 8; - c |= (byte)Math.Round(a * 255); + c |= (byte)Math.Round(A * 255); return c; } @@ -490,13 +490,13 @@ namespace Godot /// <returns>A <see langword="ulong"/> representing this color in RGBA64 format.</returns> public readonly ulong ToRgba64() { - ulong c = (ushort)Math.Round(r * 65535); + ulong c = (ushort)Math.Round(R * 65535); c <<= 16; - c |= (ushort)Math.Round(g * 65535); + c |= (ushort)Math.Round(G * 65535); c <<= 16; - c |= (ushort)Math.Round(b * 65535); + c |= (ushort)Math.Round(B * 65535); c <<= 16; - c |= (ushort)Math.Round(a * 65535); + c |= (ushort)Math.Round(A * 65535); return c; } @@ -508,17 +508,17 @@ namespace Godot /// Whether or not to include alpha. If <see langword="false"/>, the color is RGB instead of RGBA. /// </param> /// <returns>A string for the HTML hexadecimal representation of this color.</returns> - public readonly string ToHTML(bool includeAlpha = true) + public readonly string ToHtml(bool includeAlpha = true) { string txt = string.Empty; - txt += ToHex32(r); - txt += ToHex32(g); - txt += ToHex32(b); + txt += ToHex32(R); + txt += ToHex32(G); + txt += ToHex32(B); if (includeAlpha) { - txt += ToHex32(a); + txt += ToHex32(A); } return txt; @@ -533,10 +533,10 @@ namespace Godot /// <param name="a">The color's alpha (transparency) value, typically on the range of 0 to 1. Default: 1.</param> public Color(float r, float g, float b, float a = 1.0f) { - this.r = r; - this.g = g; - this.b = b; - this.a = a; + R = r; + G = g; + B = b; + A = a; } /// <summary> @@ -546,10 +546,10 @@ namespace Godot /// <param name="a">The color's alpha (transparency) value, typically on the range of 0 to 1. Default: 1.</param> public Color(Color c, float a = 1.0f) { - r = c.r; - g = c.g; - b = c.b; - this.a = a; + R = c.R; + G = c.G; + B = c.B; + A = a; } /// <summary> @@ -559,13 +559,13 @@ namespace Godot /// <param name="rgba">The <see langword="uint"/> representing the color.</param> public Color(uint rgba) { - a = (rgba & 0xFF) / 255.0f; + A = (rgba & 0xFF) / 255.0f; rgba >>= 8; - b = (rgba & 0xFF) / 255.0f; + B = (rgba & 0xFF) / 255.0f; rgba >>= 8; - g = (rgba & 0xFF) / 255.0f; + G = (rgba & 0xFF) / 255.0f; rgba >>= 8; - r = (rgba & 0xFF) / 255.0f; + R = (rgba & 0xFF) / 255.0f; } /// <summary> @@ -575,13 +575,13 @@ namespace Godot /// <param name="rgba">The <see langword="ulong"/> representing the color.</param> public Color(ulong rgba) { - a = (rgba & 0xFFFF) / 65535.0f; + A = (rgba & 0xFFFF) / 65535.0f; rgba >>= 16; - b = (rgba & 0xFFFF) / 65535.0f; + B = (rgba & 0xFFFF) / 65535.0f; rgba >>= 16; - g = (rgba & 0xFFFF) / 65535.0f; + G = (rgba & 0xFFFF) / 65535.0f; rgba >>= 16; - r = (rgba & 0xFFFF) / 65535.0f; + R = (rgba & 0xFFFF) / 65535.0f; } /// <summary> @@ -598,7 +598,7 @@ namespace Godot { if (HtmlIsValid(code)) { - this = FromHTML(code); + this = FromHtml(code); } else { @@ -616,7 +616,7 @@ namespace Godot public Color(string code, float alpha) { this = new Color(code); - a = alpha; + A = alpha; } /// <summary> @@ -626,15 +626,15 @@ namespace Godot /// <exception name="ArgumentOutOfRangeException"> /// <paramref name="rgba"/> color code is invalid. /// </exception> - public static Color FromHTML(ReadOnlySpan<char> rgba) + public static Color FromHtml(ReadOnlySpan<char> rgba) { Color c; if (rgba.Length == 0) { - c.r = 0f; - c.g = 0f; - c.b = 0f; - c.a = 1.0f; + c.R = 0f; + c.G = 0f; + c.B = 0f; + c.A = 1.0f; return c; } @@ -670,44 +670,44 @@ namespace Godot $"Invalid color code. Length is {rgba.Length}, but a length of 6 or 8 is expected: {rgba}"); } - c.a = 1.0f; + c.A = 1.0f; if (isShorthand) { - c.r = ParseCol4(rgba, 0) / 15f; - c.g = ParseCol4(rgba, 1) / 15f; - c.b = ParseCol4(rgba, 2) / 15f; + c.R = ParseCol4(rgba, 0) / 15f; + c.G = ParseCol4(rgba, 1) / 15f; + c.B = ParseCol4(rgba, 2) / 15f; if (alpha) { - c.a = ParseCol4(rgba, 3) / 15f; + c.A = ParseCol4(rgba, 3) / 15f; } } else { - c.r = ParseCol8(rgba, 0) / 255f; - c.g = ParseCol8(rgba, 2) / 255f; - c.b = ParseCol8(rgba, 4) / 255f; + c.R = ParseCol8(rgba, 0) / 255f; + c.G = ParseCol8(rgba, 2) / 255f; + c.B = ParseCol8(rgba, 4) / 255f; if (alpha) { - c.a = ParseCol8(rgba, 6) / 255f; + c.A = ParseCol8(rgba, 6) / 255f; } } - if (c.r < 0) + if (c.R < 0) { throw new ArgumentOutOfRangeException($"Invalid color code. Red part is not valid hexadecimal: {rgba}"); } - if (c.g < 0) + if (c.G < 0) { throw new ArgumentOutOfRangeException($"Invalid color code. Green part is not valid hexadecimal: {rgba}"); } - if (c.b < 0) + if (c.B < 0) { throw new ArgumentOutOfRangeException($"Invalid color code. Blue part is not valid hexadecimal: {rgba}"); } - if (c.a < 0) + if (c.A < 0) { throw new ArgumentOutOfRangeException($"Invalid color code. Alpha part is not valid hexadecimal: {rgba}"); } @@ -793,7 +793,7 @@ namespace Godot /// <param name="value">The HSV value (brightness), typically on the range of 0 to 1.</param> /// <param name="alpha">The alpha (transparency) value, typically on the range of 0 to 1.</param> /// <returns>The constructed color.</returns> - public static Color FromHSV(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) { @@ -837,10 +837,10 @@ namespace Godot /// <param name="hue">Output parameter for the HSV hue.</param> /// <param name="saturation">Output parameter for the HSV saturation.</param> /// <param name="value">Output parameter for the HSV value.</param> - public readonly void ToHSV(out float hue, out float saturation, out float value) + public readonly void ToHsv(out float hue, out float saturation, out float value) { - float max = (float)Mathf.Max(r, Mathf.Max(g, b)); - float min = (float)Mathf.Min(r, Mathf.Min(g, b)); + float max = (float)Mathf.Max(R, Mathf.Max(G, B)); + float min = (float)Mathf.Min(R, Mathf.Min(G, B)); float delta = max - min; @@ -850,17 +850,17 @@ namespace Godot } else { - if (r == max) + if (R == max) { - hue = (g - b) / delta; // Between yellow & magenta + hue = (G - B) / delta; // Between yellow & magenta } - else if (g == max) + else if (G == max) { - hue = 2 + ((b - r) / delta); // Between cyan & yellow + hue = 2 + ((B - R) / delta); // Between cyan & yellow } else { - hue = 4 + ((r - g) / delta); // Between magenta & cyan + hue = 4 + ((R - G) / delta); // Between magenta & cyan } hue /= 6.0f; @@ -950,7 +950,7 @@ namespace Godot { if (HtmlIsValid(str)) { - return FromHTML(str); + return FromHtml(str); } else { @@ -1012,10 +1012,10 @@ namespace Godot /// <returns>The added color.</returns> public static Color operator +(Color left, Color right) { - left.r += right.r; - left.g += right.g; - left.b += right.b; - left.a += right.a; + left.R += right.R; + left.G += right.G; + left.B += right.B; + left.A += right.A; return left; } @@ -1028,17 +1028,17 @@ namespace Godot /// <returns>The subtracted color.</returns> public static Color operator -(Color left, Color right) { - left.r -= right.r; - left.g -= right.g; - left.b -= right.b; - left.a -= right.a; + left.R -= right.R; + left.G -= right.G; + left.B -= right.B; + left.A -= right.A; return left; } /// <summary> /// Inverts the given color. This is equivalent to /// <c>Colors.White - c</c> or - /// <c>new Color(1 - c.r, 1 - c.g, 1 - c.b, 1 - c.a)</c>. + /// <c>new Color(1 - c.R, 1 - c.G, 1 - c.B, 1 - c.A)</c>. /// </summary> /// <param name="color">The color to invert.</param> /// <returns>The inverted color.</returns> @@ -1056,10 +1056,10 @@ namespace Godot /// <returns>The multiplied color.</returns> public static Color operator *(Color color, float scale) { - color.r *= scale; - color.g *= scale; - color.b *= scale; - color.a *= scale; + color.R *= scale; + color.G *= scale; + color.B *= scale; + color.A *= scale; return color; } @@ -1072,10 +1072,10 @@ namespace Godot /// <returns>The multiplied color.</returns> public static Color operator *(float scale, Color color) { - color.r *= scale; - color.g *= scale; - color.b *= scale; - color.a *= scale; + color.R *= scale; + color.G *= scale; + color.B *= scale; + color.A *= scale; return color; } @@ -1088,10 +1088,10 @@ namespace Godot /// <returns>The multiplied color.</returns> public static Color operator *(Color left, Color right) { - left.r *= right.r; - left.g *= right.g; - left.b *= right.b; - left.a *= right.a; + left.R *= right.R; + left.G *= right.G; + left.B *= right.B; + left.A *= right.A; return left; } @@ -1104,10 +1104,10 @@ namespace Godot /// <returns>The divided color.</returns> public static Color operator /(Color color, float scale) { - color.r /= scale; - color.g /= scale; - color.b /= scale; - color.a /= scale; + color.R /= scale; + color.G /= scale; + color.B /= scale; + color.A /= scale; return color; } @@ -1120,10 +1120,10 @@ namespace Godot /// <returns>The divided color.</returns> public static Color operator /(Color left, Color right) { - left.r /= right.r; - left.g /= right.g; - left.b /= right.b; - left.a /= right.a; + left.R /= right.R; + left.G /= right.G; + left.B /= right.B; + left.A /= right.A; return left; } @@ -1167,19 +1167,19 @@ namespace Godot /// <returns>Whether or not the left is less than the right.</returns> public static bool operator <(Color left, Color right) { - if (left.r == right.r) + if (left.R == right.R) { - if (left.g == right.g) + if (left.G == right.G) { - if (left.b == right.b) + if (left.B == right.B) { - return left.a < right.a; + return left.A < right.A; } - return left.b < right.b; + return left.B < right.B; } - return left.g < right.g; + return left.G < right.G; } - return left.r < right.r; + return left.R < right.R; } /// <summary> @@ -1196,19 +1196,19 @@ namespace Godot /// <returns>Whether or not the left is greater than the right.</returns> public static bool operator >(Color left, Color right) { - if (left.r == right.r) + if (left.R == right.R) { - if (left.g == right.g) + if (left.G == right.G) { - if (left.b == right.b) + if (left.B == right.B) { - return left.a > right.a; + return left.A > right.A; } - return left.b > right.b; + return left.B > right.B; } - return left.g > right.g; + return left.G > right.G; } - return left.r > right.r; + return left.R > right.R; } /// <summary> @@ -1225,19 +1225,19 @@ namespace Godot /// <returns>Whether or not the left is less than or equal to the right.</returns> public static bool operator <=(Color left, Color right) { - if (left.r == right.r) + if (left.R == right.R) { - if (left.g == right.g) + if (left.G == right.G) { - if (left.b == right.b) + if (left.B == right.B) { - return left.a <= right.a; + return left.A <= right.A; } - return left.b < right.b; + return left.B < right.B; } - return left.g < right.g; + return left.G < right.G; } - return left.r < right.r; + return left.R < right.R; } /// <summary> @@ -1254,19 +1254,19 @@ namespace Godot /// <returns>Whether or not the left is greater than or equal to the right.</returns> public static bool operator >=(Color left, Color right) { - if (left.r == right.r) + if (left.R == right.R) { - if (left.g == right.g) + if (left.G == right.G) { - if (left.b == right.b) + if (left.B == right.B) { - return left.a >= right.a; + return left.A >= right.A; } - return left.b > right.b; + return left.B > right.B; } - return left.g > right.g; + return left.G > right.G; } - return left.r > right.r; + return left.R > right.R; } /// <summary> @@ -1288,7 +1288,7 @@ namespace Godot /// <returns>Whether or not the colors are equal.</returns> public readonly bool Equals(Color other) { - return r == other.r && g == other.g && b == other.b && a == other.a; + return R == other.R && G == other.G && B == other.B && A == other.A; } /// <summary> @@ -1299,7 +1299,7 @@ namespace Godot /// <returns>Whether or not the colors are approximately equal.</returns> public readonly bool IsEqualApprox(Color other) { - return Mathf.IsEqualApprox(r, other.r) && Mathf.IsEqualApprox(g, other.g) && Mathf.IsEqualApprox(b, other.b) && Mathf.IsEqualApprox(a, other.a); + return Mathf.IsEqualApprox(R, other.R) && Mathf.IsEqualApprox(G, other.G) && Mathf.IsEqualApprox(B, other.B) && Mathf.IsEqualApprox(A, other.A); } /// <summary> @@ -1308,7 +1308,7 @@ namespace Godot /// <returns>A hash code for this color.</returns> public override readonly int GetHashCode() { - return r.GetHashCode() ^ g.GetHashCode() ^ b.GetHashCode() ^ a.GetHashCode(); + return R.GetHashCode() ^ G.GetHashCode() ^ B.GetHashCode() ^ A.GetHashCode(); } /// <summary> @@ -1317,7 +1317,7 @@ namespace Godot /// <returns>A string representation of this color.</returns> public override readonly string ToString() { - return $"({r}, {g}, {b}, {a})"; + return $"({R}, {G}, {B}, {A})"; } /// <summary> @@ -1326,7 +1326,7 @@ namespace Godot /// <returns>A string representation of this color.</returns> public readonly string ToString(string format) { - return $"({r.ToString(format)}, {g.ToString(format)}, {b.ToString(format)}, {a.ToString(format)})"; + return $"({R.ToString(format)}, {G.ToString(format)}, {B.ToString(format)}, {A.ToString(format)})"; } } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/DelegateUtils.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/DelegateUtils.cs index 0f97149130..4a54f67cc9 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/DelegateUtils.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/DelegateUtils.cs @@ -126,7 +126,7 @@ namespace Godot } } // ReSharper disable once RedundantNameQualifier - case Godot.Object godotObject: + case GodotObject godotObject: { using (var stream = new MemoryStream()) using (var writer = new BinaryWriter(stream)) @@ -399,7 +399,7 @@ namespace Godot { ulong objectId = reader.ReadUInt64(); // ReSharper disable once RedundantNameQualifier - Godot.Object godotObject = Godot.Object.InstanceFromId(objectId); + GodotObject godotObject = GodotObject.InstanceFromId(objectId); if (godotObject == null) return false; @@ -581,31 +581,31 @@ namespace Godot return VariantUtils.CreateFrom(@double); case Vector2 vector2: return VariantUtils.CreateFrom(vector2); - case Vector2i vector2I: + case Vector2I vector2I: return VariantUtils.CreateFrom(vector2I); case Rect2 rect2: return VariantUtils.CreateFrom(rect2); - case Rect2i rect2I: + case Rect2I rect2I: return VariantUtils.CreateFrom(rect2I); case Transform2D transform2D: return VariantUtils.CreateFrom(transform2D); case Vector3 vector3: return VariantUtils.CreateFrom(vector3); - case Vector3i vector3I: + case Vector3I vector3I: return VariantUtils.CreateFrom(vector3I); case Vector4 vector4: return VariantUtils.CreateFrom(vector4); - case Vector4i vector4I: + case Vector4I vector4I: return VariantUtils.CreateFrom(vector4I); case Basis basis: return VariantUtils.CreateFrom(basis); case Quaternion quaternion: return VariantUtils.CreateFrom(quaternion); - case Transform3D transform3d: - return VariantUtils.CreateFrom(transform3d); + case Transform3D transform3D: + return VariantUtils.CreateFrom(transform3D); case Projection projection: return VariantUtils.CreateFrom(projection); - case AABB aabb: + case Aabb aabb: return VariantUtils.CreateFrom(aabb); case Color color: return VariantUtils.CreateFrom(color); @@ -639,15 +639,15 @@ namespace Godot return VariantUtils.CreateFrom(stringNameArray); case NodePath[] nodePathArray: return VariantUtils.CreateFrom(nodePathArray); - case RID[] ridArray: + case Rid[] ridArray: return VariantUtils.CreateFrom(ridArray); - case Godot.Object[] godotObjectArray: + case GodotObject[] godotObjectArray: return VariantUtils.CreateFrom(godotObjectArray); case StringName stringName: return VariantUtils.CreateFrom(stringName); case NodePath nodePath: return VariantUtils.CreateFrom(nodePath); - case RID rid: + case Rid rid: return VariantUtils.CreateFrom(rid); case Collections.Dictionary godotDictionary: return VariantUtils.CreateFrom(godotDictionary); @@ -655,7 +655,7 @@ namespace Godot return VariantUtils.CreateFrom(godotArray); case Variant variant: return VariantUtils.CreateFrom(variant); - case Godot.Object godotObject: + case GodotObject godotObject: return VariantUtils.CreateFrom(godotObject); case Enum @enum: return VariantUtils.CreateFrom(Convert.ToInt64(@enum)); @@ -690,18 +690,18 @@ namespace Godot [typeof(float)] = (in godot_variant variant) => VariantUtils.ConvertTo<float>(variant), [typeof(double)] = (in godot_variant variant) => VariantUtils.ConvertTo<double>(variant), [typeof(Vector2)] = (in godot_variant variant) => VariantUtils.ConvertTo<Vector2>(variant), - [typeof(Vector2i)] = (in godot_variant variant) => VariantUtils.ConvertTo<Vector2i>(variant), + [typeof(Vector2I)] = (in godot_variant variant) => VariantUtils.ConvertTo<Vector2I>(variant), [typeof(Rect2)] = (in godot_variant variant) => VariantUtils.ConvertTo<Rect2>(variant), - [typeof(Rect2i)] = (in godot_variant variant) => VariantUtils.ConvertTo<Rect2i>(variant), + [typeof(Rect2I)] = (in godot_variant variant) => VariantUtils.ConvertTo<Rect2I>(variant), [typeof(Transform2D)] = (in godot_variant variant) => VariantUtils.ConvertTo<Transform2D>(variant), [typeof(Vector3)] = (in godot_variant variant) => VariantUtils.ConvertTo<Vector3>(variant), - [typeof(Vector3i)] = (in godot_variant variant) => VariantUtils.ConvertTo<Vector3i>(variant), + [typeof(Vector3I)] = (in godot_variant variant) => VariantUtils.ConvertTo<Vector3I>(variant), [typeof(Basis)] = (in godot_variant variant) => VariantUtils.ConvertTo<Basis>(variant), [typeof(Quaternion)] = (in godot_variant variant) => VariantUtils.ConvertTo<Quaternion>(variant), [typeof(Transform3D)] = (in godot_variant variant) => VariantUtils.ConvertTo<Transform3D>(variant), [typeof(Vector4)] = (in godot_variant variant) => VariantUtils.ConvertTo<Vector4>(variant), - [typeof(Vector4i)] = (in godot_variant variant) => VariantUtils.ConvertTo<Vector4i>(variant), - [typeof(AABB)] = (in godot_variant variant) => VariantUtils.ConvertTo<AABB>(variant), + [typeof(Vector4I)] = (in godot_variant variant) => VariantUtils.ConvertTo<Vector4I>(variant), + [typeof(Aabb)] = (in godot_variant variant) => VariantUtils.ConvertTo<Aabb>(variant), [typeof(Color)] = (in godot_variant variant) => VariantUtils.ConvertTo<Color>(variant), [typeof(Plane)] = (in godot_variant variant) => VariantUtils.ConvertTo<Plane>(variant), [typeof(Callable)] = (in godot_variant variant) => VariantUtils.ConvertTo<Callable>(variant), @@ -719,10 +719,10 @@ namespace Godot [typeof(StringName[])] = (in godot_variant variant) => VariantUtils.ConvertTo<StringName[]>(variant), [typeof(NodePath[])] = (in godot_variant variant) => VariantUtils.ConvertTo<NodePath[]>(variant), - [typeof(RID[])] = (in godot_variant variant) => VariantUtils.ConvertTo<RID[]>(variant), + [typeof(Rid[])] = (in godot_variant variant) => VariantUtils.ConvertTo<Rid[]>(variant), [typeof(StringName)] = (in godot_variant variant) => VariantUtils.ConvertTo<StringName>(variant), [typeof(NodePath)] = (in godot_variant variant) => VariantUtils.ConvertTo<NodePath>(variant), - [typeof(RID)] = (in godot_variant variant) => VariantUtils.ConvertTo<RID>(variant), + [typeof(Rid)] = (in godot_variant variant) => VariantUtils.ConvertTo<Rid>(variant), [typeof(Godot.Collections.Dictionary)] = (in godot_variant variant) => VariantUtils.ConvertTo<Godot.Collections.Dictionary>(variant), [typeof(Godot.Collections.Array)] = @@ -736,18 +736,18 @@ namespace Godot if (ToSystemObjectFuncByType.TryGetValue(type, out var func)) return func(variant); - if (typeof(Godot.Object).IsAssignableFrom(type)) - return Convert.ChangeType(VariantUtils.ConvertTo<Godot.Object>(variant), type); + if (typeof(GodotObject).IsAssignableFrom(type)) + return Convert.ChangeType(VariantUtils.ConvertTo<GodotObject>(variant), type); - if (typeof(Godot.Object[]).IsAssignableFrom(type)) + if (typeof(GodotObject[]).IsAssignableFrom(type)) { - static Godot.Object[] ConvertToSystemArrayOfGodotObject(in godot_array nativeArray, Type type) + static GodotObject[] ConvertToSystemArrayOfGodotObject(in godot_array nativeArray, Type type) { var array = Collections.Array.CreateTakingOwnershipOfDisposableValue( NativeFuncs.godotsharp_array_new_copy(nativeArray)); int length = array.Count; - var ret = (Godot.Object[])Activator.CreateInstance(type, length)!; + var ret = (GodotObject[])Activator.CreateInstance(type, length)!; for (int i = 0; i < length; i++) ret[i] = array[i].AsGodotObject(); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs index 505763e6a2..fa304c1b94 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs @@ -74,7 +74,7 @@ namespace Godot.Collections /// the original dictionary. If <see langword="false"/>, a shallow copy is made and /// references to the original nested arrays and dictionaries are kept, so that /// modifying a sub-array or dictionary in the copy will also impact those - /// referenced in the source dictionary. Note that any <see cref="Object"/> derived + /// referenced in the source dictionary. Note that any <see cref="GodotObject"/> derived /// elements will be shallow copied regardless of the <paramref name="deep"/> /// setting. /// </summary> @@ -494,7 +494,7 @@ namespace Godot.Collections /// the original dictionary. If <see langword="false"/>, a shallow copy is made and /// references to the original nested arrays and dictionaries are kept, so that /// modifying a sub-array or dictionary in the copy will also impact those - /// referenced in the source dictionary. Note that any <see cref="Object"/> derived + /// referenced in the source dictionary. Note that any <see cref="GodotObject"/> derived /// elements will be shallow copied regardless of the <paramref name="deep"/> /// setting. /// </summary> diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/DisposablesTracker.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/DisposablesTracker.cs index 421b588560..53292e10cf 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/DisposablesTracker.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/DisposablesTracker.cs @@ -28,7 +28,7 @@ namespace Godot try { - isStdoutVerbose = OS.IsStdoutVerbose(); + isStdoutVerbose = OS.IsStdOutVerbose(); } catch (ObjectDisposedException) { @@ -43,9 +43,9 @@ namespace Godot // like StringName, NodePath, Godot.Collections.Array/Dictionary, etc. // The Godot Object Dispose() method may need any of the later instances. - foreach (WeakReference<Object> item in GodotObjectInstances.Keys) + foreach (WeakReference<GodotObject> item in GodotObjectInstances.Keys) { - if (item.TryGetTarget(out Object? self)) + if (item.TryGetTarget(out GodotObject? self)) self.Dispose(); } @@ -60,15 +60,15 @@ namespace Godot } // ReSharper disable once RedundantNameQualifier - private static ConcurrentDictionary<WeakReference<Godot.Object>, byte> GodotObjectInstances { get; } = + private static ConcurrentDictionary<WeakReference<GodotObject>, byte> GodotObjectInstances { get; } = new(); private static ConcurrentDictionary<WeakReference<IDisposable>, byte> OtherInstances { get; } = new(); - public static WeakReference<Object> RegisterGodotObject(Object godotObject) + public static WeakReference<GodotObject> RegisterGodotObject(GodotObject godotObject) { - var weakReferenceToSelf = new WeakReference<Object>(godotObject); + var weakReferenceToSelf = new WeakReference<GodotObject>(godotObject); GodotObjectInstances.TryAdd(weakReferenceToSelf, 0); return weakReferenceToSelf; } @@ -80,7 +80,7 @@ namespace Godot return weakReferenceToSelf; } - public static void UnregisterGodotObject(Object godotObject, WeakReference<Object> weakReferenceToSelf) + public static void UnregisterGodotObject(GodotObject godotObject, WeakReference<GodotObject> weakReferenceToSelf) { if (!GodotObjectInstances.TryRemove(weakReferenceToSelf, out _)) throw new ArgumentException("Godot Object not registered.", nameof(weakReferenceToSelf)); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Extensions/ObjectExtensions.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Extensions/GodotObjectExtensions.cs index a9f3f02856..6c90c17078 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Extensions/ObjectExtensions.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Extensions/GodotObjectExtensions.cs @@ -3,10 +3,10 @@ using Godot.NativeInterop; namespace Godot { - public partial class Object + public partial class GodotObject { /// <summary> - /// Returns the <see cref="Object"/> that corresponds to <paramref name="instanceId"/>. + /// Returns the <see cref="GodotObject"/> that corresponds to <paramref name="instanceId"/>. /// All Objects have a unique instance ID. See also <see cref="GetInstanceId"/>. /// </summary> /// <example> @@ -25,14 +25,14 @@ namespace Godot /// </code> /// </example> /// <param name="instanceId">Instance ID of the Object to retrieve.</param> - /// <returns>The <see cref="Object"/> instance.</returns> - public static Object InstanceFromId(ulong instanceId) + /// <returns>The <see cref="GodotObject"/> instance.</returns> + public static GodotObject InstanceFromId(ulong instanceId) { return InteropUtils.UnmanagedGetManaged(NativeFuncs.godotsharp_instance_from_id(instanceId)); } /// <summary> - /// Returns <see langword="true"/> if the <see cref="Object"/> that corresponds + /// Returns <see langword="true"/> if the <see cref="GodotObject"/> that corresponds /// to <paramref name="id"/> is a valid object (e.g. has not been deleted from /// memory). All Objects have a unique instance ID. /// </summary> @@ -45,11 +45,11 @@ namespace Godot /// <summary> /// Returns <see langword="true"/> if <paramref name="instance"/> is a - /// valid <see cref="Object"/> (e.g. has not been deleted from memory). + /// valid <see cref="GodotObject"/> (e.g. has not been deleted from memory). /// </summary> /// <param name="instance">The instance to check.</param> /// <returns>If the instance is a valid object.</returns> - public static bool IsInstanceValid(Object instance) + public static bool IsInstanceValid(GodotObject instance) { return instance != null && instance.NativeInstance != IntPtr.Zero; } @@ -68,7 +68,7 @@ namespace Godot /// <returns> /// The <see cref="WeakRef"/> reference to the object or <see langword="null"/>. /// </returns> - public static WeakRef WeakRef(Object obj) + public static WeakRef WeakRef(GodotObject obj) { if (!IsInstanceValid(obj)) return null; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Object.base.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotObject.base.cs index 60ee6eb6f4..b9a5ac82d1 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Object.base.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotObject.base.cs @@ -5,20 +5,20 @@ using Godot.NativeInterop; namespace Godot { - public partial class Object : IDisposable + public partial class GodotObject : IDisposable { private bool _disposed = false; - private static readonly Type CachedType = typeof(Object); + private static readonly Type CachedType = typeof(GodotObject); internal IntPtr NativePtr; private bool _memoryOwn; - private WeakReference<Object> _weakReferenceToSelf; + private WeakReference<GodotObject> _weakReferenceToSelf; /// <summary> - /// Constructs a new <see cref="Object"/>. + /// Constructs a new <see cref="GodotObject"/>. /// </summary> - public Object() : this(false) + public GodotObject() : this(false) { unsafe { @@ -49,17 +49,17 @@ namespace Godot _weakReferenceToSelf = DisposablesTracker.RegisterGodotObject(this); } - internal Object(bool memoryOwn) + internal GodotObject(bool memoryOwn) { _memoryOwn = memoryOwn; } /// <summary> - /// The pointer to the native instance of this <see cref="Object"/>. + /// The pointer to the native instance of this <see cref="GodotObject"/>. /// </summary> public IntPtr NativeInstance => NativePtr; - internal static IntPtr GetPtr(Object instance) + internal static IntPtr GetPtr(GodotObject instance) { if (instance == null) return IntPtr.Zero; @@ -75,13 +75,13 @@ namespace Godot return instance.NativePtr; } - ~Object() + ~GodotObject() { Dispose(false); } /// <summary> - /// Disposes of this <see cref="Object"/>. + /// Disposes of this <see cref="GodotObject"/>. /// </summary> public void Dispose() { @@ -90,7 +90,7 @@ namespace Godot } /// <summary> - /// Disposes implementation of this <see cref="Object"/>. + /// Disposes implementation of this <see cref="GodotObject"/>. /// </summary> protected virtual void Dispose(bool disposing) { @@ -129,7 +129,7 @@ namespace Godot } /// <summary> - /// Converts this <see cref="Object"/> to a string. + /// Converts this <see cref="GodotObject"/> to a string. /// </summary> /// <returns>A string representation of this object.</returns> public override string ToString() @@ -166,7 +166,7 @@ namespace Godot /// A <see cref="SignalAwaiter"/> that completes when /// <paramref name="source"/> emits the <paramref name="signal"/>. /// </returns> - public SignalAwaiter ToSignal(Object source, StringName signal) + public SignalAwaiter ToSignal(GodotObject source, StringName signal) { return new SignalAwaiter(source, signal, this); } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Object.exceptions.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotObject.exceptions.cs index 0fcc4ee01b..a7640043ce 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Object.exceptions.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotObject.exceptions.cs @@ -5,7 +5,7 @@ using System.Text; namespace Godot { - public partial class Object + public partial class GodotObject { public class NativeMemberNotFoundException : Exception { diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/ExceptionUtils.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/ExceptionUtils.cs index 5a0ea2ba13..71a2adadcb 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/ExceptionUtils.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/ExceptionUtils.cs @@ -68,7 +68,7 @@ namespace Godot.NativeInterop string file = globalFrames.Count > 0 ? globalFrames[0].File ?? "" : ""; string func = globalFrames.Count > 0 ? globalFrames[0].Func : ""; int line = globalFrames.Count > 0 ? globalFrames[0].Line : 0; - string errorMsg = "Exception"; + string errorMsg = e.GetType().FullName ?? ""; using godot_string nFile = Marshaling.ConvertStringToNative(file); using godot_string nFunc = Marshaling.ConvertStringToNative(func); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/InteropStructs.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/InteropStructs.cs index aa9e2cb8eb..c295e500de 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/InteropStructs.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/InteropStructs.cs @@ -126,10 +126,10 @@ namespace Godot.NativeInterop [FieldOffset(0)] public godot_bool _bool; [FieldOffset(0)] public long _int; [FieldOffset(0)] public double _float; - [FieldOffset(0)] public Transform2D* _transform2D; - [FieldOffset(0)] public AABB* _aabb; + [FieldOffset(0)] public Transform2D* _transform2d; + [FieldOffset(0)] public Aabb* _aabb; [FieldOffset(0)] public Basis* _basis; - [FieldOffset(0)] public Transform3D* _transform3D; + [FieldOffset(0)] public Transform3D* _transform3d; [FieldOffset(0)] public Projection* _projection; [FieldOffset(0)] private godot_variant_data_mem _mem; @@ -137,18 +137,18 @@ namespace Godot.NativeInterop [FieldOffset(0)] public godot_string_name _m_string_name; [FieldOffset(0)] public godot_string _m_string; [FieldOffset(0)] public Vector4 _m_vector4; - [FieldOffset(0)] public Vector4i _m_vector4i; + [FieldOffset(0)] public Vector4I _m_vector4i; [FieldOffset(0)] public Vector3 _m_vector3; - [FieldOffset(0)] public Vector3i _m_vector3i; + [FieldOffset(0)] public Vector3I _m_vector3i; [FieldOffset(0)] public Vector2 _m_vector2; - [FieldOffset(0)] public Vector2i _m_vector2i; + [FieldOffset(0)] public Vector2I _m_vector2i; [FieldOffset(0)] public Rect2 _m_rect2; - [FieldOffset(0)] public Rect2i _m_rect2i; + [FieldOffset(0)] public Rect2I _m_rect2i; [FieldOffset(0)] public Plane _m_plane; [FieldOffset(0)] public Quaternion _m_quaternion; [FieldOffset(0)] public Color _m_color; [FieldOffset(0)] public godot_node_path _m_node_path; - [FieldOffset(0)] public RID _m_rid; + [FieldOffset(0)] public Rid _m_rid; [FieldOffset(0)] public godot_variant_obj_data _m_obj_data; [FieldOffset(0)] public godot_callable _m_callable; [FieldOffset(0)] public godot_signal _m_signal; @@ -211,10 +211,10 @@ namespace Godot.NativeInterop public readonly unsafe Transform2D* Transform2D { [MethodImpl(MethodImplOptions.AggressiveInlining)] - get => _data._transform2D; + get => _data._transform2d; } - public readonly unsafe AABB* AABB + public readonly unsafe Aabb* Aabb { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => _data._aabb; @@ -229,7 +229,7 @@ namespace Godot.NativeInterop public readonly unsafe Transform3D* Transform3D { [MethodImpl(MethodImplOptions.AggressiveInlining)] - get => _data._transform3D; + get => _data._transform3d; } public readonly unsafe Projection* Projection @@ -262,7 +262,7 @@ namespace Godot.NativeInterop set => _data._m_vector4 = value; } - public Vector4i Vector4i + public Vector4I Vector4I { [MethodImpl(MethodImplOptions.AggressiveInlining)] readonly get => _data._m_vector4i; @@ -278,7 +278,7 @@ namespace Godot.NativeInterop set => _data._m_vector3 = value; } - public Vector3i Vector3i + public Vector3I Vector3I { [MethodImpl(MethodImplOptions.AggressiveInlining)] readonly get => _data._m_vector3i; @@ -294,7 +294,7 @@ namespace Godot.NativeInterop set => _data._m_vector2 = value; } - public Vector2i Vector2i + public Vector2I Vector2I { [MethodImpl(MethodImplOptions.AggressiveInlining)] readonly get => _data._m_vector2i; @@ -310,7 +310,7 @@ namespace Godot.NativeInterop set => _data._m_rect2 = value; } - public Rect2i Rect2i + public Rect2I Rect2I { [MethodImpl(MethodImplOptions.AggressiveInlining)] readonly get => _data._m_rect2i; @@ -350,7 +350,7 @@ namespace Godot.NativeInterop set => _data._m_node_path = value; } - public RID RID + public Rid Rid { [MethodImpl(MethodImplOptions.AggressiveInlining)] readonly get => _data._m_rid; @@ -405,13 +405,13 @@ namespace Godot.NativeInterop case Variant.Type.Int: case Variant.Type.Float: case Variant.Type.Vector2: - case Variant.Type.Vector2i: + case Variant.Type.Vector2I: case Variant.Type.Rect2: - case Variant.Type.Rect2i: + case Variant.Type.Rect2I: case Variant.Type.Vector3: - case Variant.Type.Vector3i: + case Variant.Type.Vector3I: case Variant.Type.Vector4: - case Variant.Type.Vector4i: + case Variant.Type.Vector4I: case Variant.Type.Plane: case Variant.Type.Quaternion: case Variant.Type.Color: diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/InteropUtils.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/InteropUtils.cs index 82f1c04d40..cc308bfdb3 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/InteropUtils.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/InteropUtils.cs @@ -8,7 +8,7 @@ namespace Godot.NativeInterop { internal static class InteropUtils { - public static Object UnmanagedGetManaged(IntPtr unmanaged) + public static GodotObject UnmanagedGetManaged(IntPtr unmanaged) { // The native pointer may be null if (unmanaged == IntPtr.Zero) @@ -23,7 +23,7 @@ namespace Godot.NativeInterop unmanaged, out hasCsScriptInstance); if (gcHandlePtr != IntPtr.Zero) - return (Object)GCHandle.FromIntPtr(gcHandlePtr).Target; + return (GodotObject)GCHandle.FromIntPtr(gcHandlePtr).Target; // Otherwise, if the object has a CSharpInstance script instance, return null @@ -37,17 +37,17 @@ namespace Godot.NativeInterop object target = gcHandlePtr != IntPtr.Zero ? GCHandle.FromIntPtr(gcHandlePtr).Target : null; if (target != null) - return (Object)target; + return (GodotObject)target; // If the native instance binding GC handle target was collected, create a new one gcHandlePtr = NativeFuncs.godotsharp_internal_unmanaged_instance_binding_create_managed( unmanaged, gcHandlePtr); - return gcHandlePtr != IntPtr.Zero ? (Object)GCHandle.FromIntPtr(gcHandlePtr).Target : null; + return gcHandlePtr != IntPtr.Zero ? (GodotObject)GCHandle.FromIntPtr(gcHandlePtr).Target : null; } - public static void TieManagedToUnmanaged(Object managed, IntPtr unmanaged, + public static void TieManagedToUnmanaged(GodotObject managed, IntPtr unmanaged, StringName nativeName, bool refCounted, Type type, Type nativeType) { var gcHandle = refCounted ? @@ -76,7 +76,7 @@ namespace Godot.NativeInterop } } - public static void TieManagedToUnmanagedWithPreSetup(Object managed, IntPtr unmanaged, + public static void TieManagedToUnmanagedWithPreSetup(GodotObject managed, IntPtr unmanaged, Type type, Type nativeType) { if (type == nativeType) @@ -87,7 +87,7 @@ namespace Godot.NativeInterop GCHandle.ToIntPtr(strongGCHandle), unmanaged); } - public static Object EngineGetSingleton(string name) + public static GodotObject EngineGetSingleton(string name) { using godot_string src = Marshaling.ConvertStringToNative(name); return UnmanagedGetManaged(NativeFuncs.godotsharp_engine_get_singleton(src)); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/Marshaling.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/Marshaling.cs index 11e600ca0b..93a83b701b 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/Marshaling.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/Marshaling.cs @@ -51,29 +51,29 @@ namespace Godot.NativeInterop if (type == typeof(Vector2)) return Variant.Type.Vector2; - if (type == typeof(Vector2i)) - return Variant.Type.Vector2i; + if (type == typeof(Vector2I)) + return Variant.Type.Vector2I; if (type == typeof(Rect2)) return Variant.Type.Rect2; - if (type == typeof(Rect2i)) - return Variant.Type.Rect2i; + if (type == typeof(Rect2I)) + return Variant.Type.Rect2I; if (type == typeof(Transform2D)) - return Variant.Type.Transform2d; + return Variant.Type.Transform2D; if (type == typeof(Vector3)) return Variant.Type.Vector3; - if (type == typeof(Vector3i)) - return Variant.Type.Vector3i; + if (type == typeof(Vector3I)) + return Variant.Type.Vector3I; if (type == typeof(Vector4)) return Variant.Type.Vector4; - if (type == typeof(Vector4i)) - return Variant.Type.Vector4i; + if (type == typeof(Vector4I)) + return Variant.Type.Vector4I; if (type == typeof(Basis)) return Variant.Type.Basis; @@ -82,12 +82,12 @@ namespace Godot.NativeInterop return Variant.Type.Quaternion; if (type == typeof(Transform3D)) - return Variant.Type.Transform3d; + return Variant.Type.Transform3D; if (type == typeof(Projection)) return Variant.Type.Projection; - if (type == typeof(AABB)) + if (type == typeof(Aabb)) return Variant.Type.Aabb; if (type == typeof(Color)) @@ -140,15 +140,15 @@ namespace Godot.NativeInterop if (type == typeof(NodePath[])) return Variant.Type.Array; - if (type == typeof(RID[])) + if (type == typeof(Rid[])) return Variant.Type.Array; - if (typeof(Godot.Object[]).IsAssignableFrom(type)) + if (typeof(GodotObject[]).IsAssignableFrom(type)) return Variant.Type.Array; } else if (type.IsGenericType) { - if (typeof(Godot.Object).IsAssignableFrom(type)) + if (typeof(GodotObject).IsAssignableFrom(type)) return Variant.Type.Object; // We use `IsAssignableFrom` with our helper interfaces to detect generic Godot collections @@ -167,7 +167,7 @@ namespace Godot.NativeInterop } else { - if (typeof(Godot.Object).IsAssignableFrom(type)) + if (typeof(GodotObject).IsAssignableFrom(type)) return Variant.Type.Object; if (typeof(StringName) == type) @@ -176,7 +176,7 @@ namespace Godot.NativeInterop if (typeof(NodePath) == type) return Variant.Type.NodePath; - if (typeof(RID) == type) + if (typeof(Rid) == type) return Variant.Type.Rid; if (typeof(Collections.Dictionary) == type) @@ -232,7 +232,7 @@ namespace Godot.NativeInterop var gcHandle = CustomGCHandle.AllocStrong(p_managed_callable.Delegate); IntPtr objectPtr = p_managed_callable.Target != null ? - Object.GetPtr(p_managed_callable.Target) : + GodotObject.GetPtr(p_managed_callable.Target) : IntPtr.Zero; unsafe @@ -310,7 +310,7 @@ namespace Godot.NativeInterop public static Signal ConvertSignalToManaged(in godot_signal p_signal) { - var owner = Godot.Object.InstanceFromId(p_signal.ObjectId); + var owner = GodotObject.InstanceFromId(p_signal.ObjectId); var name = StringName.CreateTakingOwnershipOfDisposableValue( NativeFuncs.godotsharp_string_name_new_copy(p_signal.Name)); return new Signal(owner, name); @@ -319,7 +319,7 @@ namespace Godot.NativeInterop // Array internal static T[] ConvertNativeGodotArrayToSystemArrayOfGodotObjectType<T>(in godot_array p_array) - where T : Godot.Object + where T : GodotObject { var array = Collections.Array.CreateTakingOwnershipOfDisposableValue( NativeFuncs.godotsharp_array_new_copy(p_array)); @@ -361,16 +361,16 @@ namespace Godot.NativeInterop return ret; } - internal static RID[] ConvertNativeGodotArrayToSystemArrayOfRID(in godot_array p_array) + internal static Rid[] ConvertNativeGodotArrayToSystemArrayOfRid(in godot_array p_array) { var array = Collections.Array.CreateTakingOwnershipOfDisposableValue( NativeFuncs.godotsharp_array_new_copy(p_array)); int length = array.Count; - var ret = new RID[length]; + var ret = new Rid[length]; for (int i = 0; i < length; i++) - ret[i] = array[i].AsRID(); + ret[i] = array[i].AsRid(); return ret; } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/NativeFuncs.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/NativeFuncs.cs index 66c94166ae..d116284e1c 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/NativeFuncs.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/NativeFuncs.cs @@ -184,7 +184,7 @@ namespace Godot.NativeInterop public static partial void godotsharp_variant_new_projection(out godot_variant r_dest, in Projection p_proj); - public static partial void godotsharp_variant_new_aabb(out godot_variant r_dest, in AABB p_aabb); + public static partial void godotsharp_variant_new_aabb(out godot_variant r_dest, in Aabb p_aabb); public static partial void godotsharp_variant_new_dictionary(out godot_variant r_dest, in godot_dictionary p_dict); @@ -228,27 +228,27 @@ namespace Godot.NativeInterop public static partial Vector2 godotsharp_variant_as_vector2(in godot_variant p_self); - public static partial Vector2i godotsharp_variant_as_vector2i(in godot_variant p_self); + public static partial Vector2I godotsharp_variant_as_vector2i(in godot_variant p_self); public static partial Rect2 godotsharp_variant_as_rect2(in godot_variant p_self); - public static partial Rect2i godotsharp_variant_as_rect2i(in godot_variant p_self); + public static partial Rect2I godotsharp_variant_as_rect2i(in godot_variant p_self); public static partial Vector3 godotsharp_variant_as_vector3(in godot_variant p_self); - public static partial Vector3i godotsharp_variant_as_vector3i(in godot_variant p_self); + public static partial Vector3I godotsharp_variant_as_vector3i(in godot_variant p_self); public static partial Transform2D godotsharp_variant_as_transform2d(in godot_variant p_self); public static partial Vector4 godotsharp_variant_as_vector4(in godot_variant p_self); - public static partial Vector4i godotsharp_variant_as_vector4i(in godot_variant p_self); + public static partial Vector4I godotsharp_variant_as_vector4i(in godot_variant p_self); public static partial Plane godotsharp_variant_as_plane(in godot_variant p_self); public static partial Quaternion godotsharp_variant_as_quaternion(in godot_variant p_self); - public static partial AABB godotsharp_variant_as_aabb(in godot_variant p_self); + public static partial Aabb godotsharp_variant_as_aabb(in godot_variant p_self); public static partial Basis godotsharp_variant_as_basis(in godot_variant p_self); @@ -262,7 +262,7 @@ namespace Godot.NativeInterop public static partial godot_node_path godotsharp_variant_as_node_path(in godot_variant p_self); - public static partial RID godotsharp_variant_as_rid(in godot_variant p_self); + public static partial Rid godotsharp_variant_as_rid(in godot_variant p_self); public static partial godot_callable godotsharp_variant_as_callable(in godot_variant p_self); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/NativeFuncs.extended.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/NativeFuncs.extended.cs index 9f0b55431b..44ec16dca9 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/NativeFuncs.extended.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/NativeFuncs.extended.cs @@ -18,20 +18,20 @@ namespace Godot.NativeInterop return new godot_variant() { Float = src.Float, Type = Variant.Type.Float }; case Variant.Type.Vector2: return new godot_variant() { Vector2 = src.Vector2, Type = Variant.Type.Vector2 }; - case Variant.Type.Vector2i: - return new godot_variant() { Vector2i = src.Vector2i, Type = Variant.Type.Vector2i }; + case Variant.Type.Vector2I: + return new godot_variant() { Vector2I = src.Vector2I, Type = Variant.Type.Vector2I }; case Variant.Type.Rect2: return new godot_variant() { Rect2 = src.Rect2, Type = Variant.Type.Rect2 }; - case Variant.Type.Rect2i: - return new godot_variant() { Rect2i = src.Rect2i, Type = Variant.Type.Rect2i }; + case Variant.Type.Rect2I: + return new godot_variant() { Rect2I = src.Rect2I, Type = Variant.Type.Rect2I }; case Variant.Type.Vector3: return new godot_variant() { Vector3 = src.Vector3, Type = Variant.Type.Vector3 }; - case Variant.Type.Vector3i: - return new godot_variant() { Vector3i = src.Vector3i, Type = Variant.Type.Vector3i }; + case Variant.Type.Vector3I: + return new godot_variant() { Vector3I = src.Vector3I, Type = Variant.Type.Vector3I }; case Variant.Type.Vector4: return new godot_variant() { Vector4 = src.Vector4, Type = Variant.Type.Vector4 }; - case Variant.Type.Vector4i: - return new godot_variant() { Vector4i = src.Vector4i, Type = Variant.Type.Vector4i }; + case Variant.Type.Vector4I: + return new godot_variant() { Vector4I = src.Vector4I, Type = Variant.Type.Vector4I }; case Variant.Type.Plane: return new godot_variant() { Plane = src.Plane, Type = Variant.Type.Plane }; case Variant.Type.Quaternion: @@ -39,7 +39,7 @@ namespace Godot.NativeInterop case Variant.Type.Color: return new godot_variant() { Color = src.Color, Type = Variant.Type.Color }; case Variant.Type.Rid: - return new godot_variant() { RID = src.RID, Type = Variant.Type.Rid }; + return new godot_variant() { Rid = src.Rid, Type = Variant.Type.Rid }; } godotsharp_variant_new_copy(out godot_variant ret, src); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/VariantUtils.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/VariantUtils.cs index bb306ddaea..e6bcd9393d 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/VariantUtils.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/VariantUtils.cs @@ -10,8 +10,8 @@ namespace Godot.NativeInterop { public static partial class VariantUtils { - public static godot_variant CreateFromRID(RID from) - => new() { Type = Variant.Type.Rid, RID = from }; + public static godot_variant CreateFromRid(Rid from) + => new() { Type = Variant.Type.Rid, Rid = from }; public static godot_variant CreateFromBool(bool from) => new() { Type = Variant.Type.Bool, Bool = from.ToGodotBool() }; @@ -28,26 +28,26 @@ namespace Godot.NativeInterop public static godot_variant CreateFromVector2(Vector2 from) => new() { Type = Variant.Type.Vector2, Vector2 = from }; - public static godot_variant CreateFromVector2i(Vector2i from) - => new() { Type = Variant.Type.Vector2i, Vector2i = from }; + public static godot_variant CreateFromVector2I(Vector2I from) + => new() { Type = Variant.Type.Vector2I, Vector2I = from }; public static godot_variant CreateFromVector3(Vector3 from) => new() { Type = Variant.Type.Vector3, Vector3 = from }; - public static godot_variant CreateFromVector3i(Vector3i from) - => new() { Type = Variant.Type.Vector3i, Vector3i = from }; + public static godot_variant CreateFromVector3I(Vector3I from) + => new() { Type = Variant.Type.Vector3I, Vector3I = from }; public static godot_variant CreateFromVector4(Vector4 from) => new() { Type = Variant.Type.Vector4, Vector4 = from }; - public static godot_variant CreateFromVector4i(Vector4i from) - => new() { Type = Variant.Type.Vector4i, Vector4i = from }; + public static godot_variant CreateFromVector4I(Vector4I from) + => new() { Type = Variant.Type.Vector4I, Vector4I = from }; public static godot_variant CreateFromRect2(Rect2 from) => new() { Type = Variant.Type.Rect2, Rect2 = from }; - public static godot_variant CreateFromRect2i(Rect2i from) - => new() { Type = Variant.Type.Rect2i, Rect2i = from }; + public static godot_variant CreateFromRect2I(Rect2I from) + => new() { Type = Variant.Type.Rect2I, Rect2I = from }; public static godot_variant CreateFromQuaternion(Quaternion from) => new() { Type = Variant.Type.Quaternion, Quaternion = from }; @@ -82,7 +82,7 @@ namespace Godot.NativeInterop return ret; } - public static godot_variant CreateFromAABB(AABB from) + public static godot_variant CreateFromAabb(Aabb from) { NativeFuncs.godotsharp_variant_new_aabb(out godot_variant ret, from); return ret; @@ -237,11 +237,11 @@ namespace Godot.NativeInterop public static godot_variant CreateFromSystemArrayOfNodePath(Span<NodePath> from) => CreateFromArray(new Collections.Array(from)); - public static godot_variant CreateFromSystemArrayOfRID(Span<RID> from) + public static godot_variant CreateFromSystemArrayOfRid(Span<Rid> from) => CreateFromArray(new Collections.Array(from)); // ReSharper disable once RedundantNameQualifier - public static godot_variant CreateFromSystemArrayOfGodotObject(Godot.Object[]? from) + public static godot_variant CreateFromSystemArrayOfGodotObject(GodotObject[]? from) { if (from == null) return default; // Nil @@ -307,8 +307,8 @@ namespace Godot.NativeInterop [MethodImpl(MethodImplOptions.AggressiveInlining)] // ReSharper disable once RedundantNameQualifier - public static godot_variant CreateFromGodotObject(Godot.Object? from) - => from != null ? CreateFromGodotObjectPtr(Object.GetPtr(from)) : default; + public static godot_variant CreateFromGodotObject(GodotObject? from) + => from != null ? CreateFromGodotObjectPtr(GodotObject.GetPtr(from)) : default; // We avoid the internal call if the stored type is the same we want. @@ -375,9 +375,9 @@ namespace Godot.NativeInterop p_var.Vector2 : NativeFuncs.godotsharp_variant_as_vector2(p_var); - public static Vector2i ConvertToVector2i(in godot_variant p_var) - => p_var.Type == Variant.Type.Vector2i ? - p_var.Vector2i : + public static Vector2I ConvertToVector2I(in godot_variant p_var) + => p_var.Type == Variant.Type.Vector2I ? + p_var.Vector2I : NativeFuncs.godotsharp_variant_as_vector2i(p_var); public static Rect2 ConvertToRect2(in godot_variant p_var) @@ -385,13 +385,13 @@ namespace Godot.NativeInterop p_var.Rect2 : NativeFuncs.godotsharp_variant_as_rect2(p_var); - public static Rect2i ConvertToRect2i(in godot_variant p_var) - => p_var.Type == Variant.Type.Rect2i ? - p_var.Rect2i : + public static Rect2I ConvertToRect2I(in godot_variant p_var) + => p_var.Type == Variant.Type.Rect2I ? + p_var.Rect2I : NativeFuncs.godotsharp_variant_as_rect2i(p_var); public static unsafe Transform2D ConvertToTransform2D(in godot_variant p_var) - => p_var.Type == Variant.Type.Transform2d ? + => p_var.Type == Variant.Type.Transform2D ? *p_var.Transform2D : NativeFuncs.godotsharp_variant_as_transform2d(p_var); @@ -400,9 +400,9 @@ namespace Godot.NativeInterop p_var.Vector3 : NativeFuncs.godotsharp_variant_as_vector3(p_var); - public static Vector3i ConvertToVector3i(in godot_variant p_var) - => p_var.Type == Variant.Type.Vector3i ? - p_var.Vector3i : + public static Vector3I ConvertToVector3I(in godot_variant p_var) + => p_var.Type == Variant.Type.Vector3I ? + p_var.Vector3I : NativeFuncs.godotsharp_variant_as_vector3i(p_var); public static unsafe Vector4 ConvertToVector4(in godot_variant p_var) @@ -410,9 +410,9 @@ namespace Godot.NativeInterop p_var.Vector4 : NativeFuncs.godotsharp_variant_as_vector4(p_var); - public static unsafe Vector4i ConvertToVector4i(in godot_variant p_var) - => p_var.Type == Variant.Type.Vector4i ? - p_var.Vector4i : + public static unsafe Vector4I ConvertToVector4I(in godot_variant p_var) + => p_var.Type == Variant.Type.Vector4I ? + p_var.Vector4I : NativeFuncs.godotsharp_variant_as_vector4i(p_var); public static unsafe Basis ConvertToBasis(in godot_variant p_var) @@ -426,7 +426,7 @@ namespace Godot.NativeInterop NativeFuncs.godotsharp_variant_as_quaternion(p_var); public static unsafe Transform3D ConvertToTransform3D(in godot_variant p_var) - => p_var.Type == Variant.Type.Transform3d ? + => p_var.Type == Variant.Type.Transform3D ? *p_var.Transform3D : NativeFuncs.godotsharp_variant_as_transform3d(p_var); @@ -435,9 +435,9 @@ namespace Godot.NativeInterop *p_var.Projection : NativeFuncs.godotsharp_variant_as_projection(p_var); - public static unsafe AABB ConvertToAABB(in godot_variant p_var) + public static unsafe Aabb ConvertToAabb(in godot_variant p_var) => p_var.Type == Variant.Type.Aabb ? - *p_var.AABB : + *p_var.Aabb : NativeFuncs.godotsharp_variant_as_aabb(p_var); public static Color ConvertToColor(in godot_variant p_var) @@ -450,9 +450,9 @@ namespace Godot.NativeInterop p_var.Plane : NativeFuncs.godotsharp_variant_as_plane(p_var); - public static RID ConvertToRID(in godot_variant p_var) + public static Rid ConvertToRid(in godot_variant p_var) => p_var.Type == Variant.Type.Rid ? - p_var.RID : + p_var.Rid : NativeFuncs.godotsharp_variant_as_rid(p_var); public static IntPtr ConvertToGodotObjectPtr(in godot_variant p_var) @@ -460,7 +460,7 @@ namespace Godot.NativeInterop [MethodImpl(MethodImplOptions.AggressiveInlining)] // ReSharper disable once RedundantNameQualifier - public static Godot.Object ConvertToGodotObject(in godot_variant p_var) + public static GodotObject ConvertToGodotObject(in godot_variant p_var) => InteropUtils.UnmanagedGetManaged(ConvertToGodotObjectPtr(p_var)); public static string ConvertToString(in godot_variant p_var) @@ -608,15 +608,15 @@ namespace Godot.NativeInterop return Marshaling.ConvertNativeGodotArrayToSystemArrayOfNodePath(godotArray); } - public static RID[] ConvertToSystemArrayOfRID(in godot_variant p_var) + public static Rid[] ConvertToSystemArrayOfRid(in godot_variant p_var) { using var godotArray = NativeFuncs.godotsharp_variant_as_array(p_var); - return Marshaling.ConvertNativeGodotArrayToSystemArrayOfRID(godotArray); + return Marshaling.ConvertNativeGodotArrayToSystemArrayOfRid(godotArray); } public static T[] ConvertToSystemArrayOfGodotObject<T>(in godot_variant p_var) // ReSharper disable once RedundantNameQualifier - where T : Godot.Object + where T : GodotObject { using var godotArray = NativeFuncs.godotsharp_variant_as_array(p_var); return Marshaling.ConvertNativeGodotArrayToSystemArrayOfGodotObjectType<T>(godotArray); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/VariantUtils.generic.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/VariantUtils.generic.cs index 3d64533269..12b0a47079 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/VariantUtils.generic.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/NativeInterop/VariantUtils.generic.cs @@ -80,14 +80,14 @@ public partial class VariantUtils if (typeof(T) == typeof(Vector2)) return CreateFromVector2(UnsafeAs<Vector2>(from)); - if (typeof(T) == typeof(Vector2i)) - return CreateFromVector2i(UnsafeAs<Vector2i>(from)); + if (typeof(T) == typeof(Vector2I)) + return CreateFromVector2I(UnsafeAs<Vector2I>(from)); if (typeof(T) == typeof(Rect2)) return CreateFromRect2(UnsafeAs<Rect2>(from)); - if (typeof(T) == typeof(Rect2i)) - return CreateFromRect2i(UnsafeAs<Rect2i>(from)); + if (typeof(T) == typeof(Rect2I)) + return CreateFromRect2I(UnsafeAs<Rect2I>(from)); if (typeof(T) == typeof(Transform2D)) return CreateFromTransform2D(UnsafeAs<Transform2D>(from)); @@ -98,8 +98,8 @@ public partial class VariantUtils if (typeof(T) == typeof(Vector3)) return CreateFromVector3(UnsafeAs<Vector3>(from)); - if (typeof(T) == typeof(Vector3i)) - return CreateFromVector3i(UnsafeAs<Vector3i>(from)); + if (typeof(T) == typeof(Vector3I)) + return CreateFromVector3I(UnsafeAs<Vector3I>(from)); if (typeof(T) == typeof(Basis)) return CreateFromBasis(UnsafeAs<Basis>(from)); @@ -113,11 +113,11 @@ public partial class VariantUtils if (typeof(T) == typeof(Vector4)) return CreateFromVector4(UnsafeAs<Vector4>(from)); - if (typeof(T) == typeof(Vector4i)) - return CreateFromVector4i(UnsafeAs<Vector4i>(from)); + if (typeof(T) == typeof(Vector4I)) + return CreateFromVector4I(UnsafeAs<Vector4I>(from)); - if (typeof(T) == typeof(AABB)) - return CreateFromAABB(UnsafeAs<AABB>(from)); + if (typeof(T) == typeof(Aabb)) + return CreateFromAabb(UnsafeAs<Aabb>(from)); if (typeof(T) == typeof(Color)) return CreateFromColor(UnsafeAs<Color>(from)); @@ -167,8 +167,8 @@ public partial class VariantUtils if (typeof(T) == typeof(NodePath[])) return CreateFromSystemArrayOfNodePath(UnsafeAs<NodePath[]>(from)); - if (typeof(T) == typeof(RID[])) - return CreateFromSystemArrayOfRID(UnsafeAs<RID[]>(from)); + if (typeof(T) == typeof(Rid[])) + return CreateFromSystemArrayOfRid(UnsafeAs<Rid[]>(from)); if (typeof(T) == typeof(StringName)) return CreateFromStringName(UnsafeAs<StringName>(from)); @@ -176,8 +176,8 @@ public partial class VariantUtils if (typeof(T) == typeof(NodePath)) return CreateFromNodePath(UnsafeAs<NodePath>(from)); - if (typeof(T) == typeof(RID)) - return CreateFromRID(UnsafeAs<RID>(from)); + if (typeof(T) == typeof(Rid)) + return CreateFromRid(UnsafeAs<Rid>(from)); if (typeof(T) == typeof(Godot.Collections.Dictionary)) return CreateFromDictionary(UnsafeAs<Godot.Collections.Dictionary>(from)); @@ -192,8 +192,8 @@ public partial class VariantUtils // `typeof(X).IsAssignableFrom(typeof(T))` is optimized away - if (typeof(Godot.Object).IsAssignableFrom(typeof(T))) - return CreateFromGodotObject(UnsafeAs<Godot.Object>(from)); + if (typeof(GodotObject).IsAssignableFrom(typeof(T))) + return CreateFromGodotObject(UnsafeAs<GodotObject>(from)); // `typeof(T).IsValueType` is optimized away // `typeof(T).IsEnum` is NOT optimized away: https://github.com/dotnet/runtime/issues/67113 @@ -269,14 +269,14 @@ public partial class VariantUtils if (typeof(T) == typeof(Vector2)) return UnsafeAsT(ConvertToVector2(variant)); - if (typeof(T) == typeof(Vector2i)) - return UnsafeAsT(ConvertToVector2i(variant)); + if (typeof(T) == typeof(Vector2I)) + return UnsafeAsT(ConvertToVector2I(variant)); if (typeof(T) == typeof(Rect2)) return UnsafeAsT(ConvertToRect2(variant)); - if (typeof(T) == typeof(Rect2i)) - return UnsafeAsT(ConvertToRect2i(variant)); + if (typeof(T) == typeof(Rect2I)) + return UnsafeAsT(ConvertToRect2I(variant)); if (typeof(T) == typeof(Transform2D)) return UnsafeAsT(ConvertToTransform2D(variant)); @@ -284,8 +284,8 @@ public partial class VariantUtils if (typeof(T) == typeof(Vector3)) return UnsafeAsT(ConvertToVector3(variant)); - if (typeof(T) == typeof(Vector3i)) - return UnsafeAsT(ConvertToVector3i(variant)); + if (typeof(T) == typeof(Vector3I)) + return UnsafeAsT(ConvertToVector3I(variant)); if (typeof(T) == typeof(Basis)) return UnsafeAsT(ConvertToBasis(variant)); @@ -302,11 +302,11 @@ public partial class VariantUtils if (typeof(T) == typeof(Vector4)) return UnsafeAsT(ConvertToVector4(variant)); - if (typeof(T) == typeof(Vector4i)) - return UnsafeAsT(ConvertToVector4i(variant)); + if (typeof(T) == typeof(Vector4I)) + return UnsafeAsT(ConvertToVector4I(variant)); - if (typeof(T) == typeof(AABB)) - return UnsafeAsT(ConvertToAABB(variant)); + if (typeof(T) == typeof(Aabb)) + return UnsafeAsT(ConvertToAabb(variant)); if (typeof(T) == typeof(Color)) return UnsafeAsT(ConvertToColor(variant)); @@ -356,8 +356,8 @@ public partial class VariantUtils if (typeof(T) == typeof(NodePath[])) return UnsafeAsT(ConvertToSystemArrayOfNodePath(variant)); - if (typeof(T) == typeof(RID[])) - return UnsafeAsT(ConvertToSystemArrayOfRID(variant)); + if (typeof(T) == typeof(Rid[])) + return UnsafeAsT(ConvertToSystemArrayOfRid(variant)); if (typeof(T) == typeof(StringName)) return UnsafeAsT(ConvertToStringName(variant)); @@ -365,8 +365,8 @@ public partial class VariantUtils if (typeof(T) == typeof(NodePath)) return UnsafeAsT(ConvertToNodePath(variant)); - if (typeof(T) == typeof(RID)) - return UnsafeAsT(ConvertToRID(variant)); + if (typeof(T) == typeof(Rid)) + return UnsafeAsT(ConvertToRid(variant)); if (typeof(T) == typeof(Godot.Collections.Dictionary)) return UnsafeAsT(ConvertToDictionary(variant)); @@ -381,7 +381,7 @@ public partial class VariantUtils // `typeof(X).IsAssignableFrom(typeof(T))` is optimized away - if (typeof(Godot.Object).IsAssignableFrom(typeof(T))) + if (typeof(GodotObject).IsAssignableFrom(typeof(T))) return (T)(object)ConvertToGodotObject(variant); // `typeof(T).IsValueType` is optimized away diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs index 8a125e3c73..55b7a83fc2 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs @@ -13,13 +13,14 @@ namespace Godot public struct Plane : IEquatable<Plane> { private Vector3 _normal; + private real_t _d; /// <summary> /// The normal of the plane, which must be a unit vector. /// In the scalar equation of the plane <c>ax + by + cz = d</c>, this is /// the vector <c>(a, b, c)</c>, where <c>d</c> is the <see cref="D"/> property. /// </summary> - /// <value>Equivalent to <see cref="x"/>, <see cref="y"/>, and <see cref="z"/>.</value> + /// <value>Equivalent to <see cref="X"/>, <see cref="Y"/>, and <see cref="Z"/>.</value> public Vector3 Normal { readonly get { return _normal; } @@ -27,18 +28,32 @@ namespace Godot } /// <summary> + /// The distance from the origin to the plane (in the direction of + /// <see cref="Normal"/>). This value is typically non-negative. + /// In the scalar equation of the plane <c>ax + by + cz = d</c>, + /// this is <c>d</c>, while the <c>(a, b, c)</c> coordinates are represented + /// by the <see cref="Normal"/> property. + /// </summary> + /// <value>The plane's distance from the origin.</value> + public real_t D + { + readonly get { return _d; } + set { _d = value; } + } + + /// <summary> /// The X component of the plane's normal vector. /// </summary> /// <value>Equivalent to <see cref="Normal"/>'s X value.</value> - public real_t x + public real_t X { readonly get { - return _normal.x; + return _normal.X; } set { - _normal.x = value; + _normal.X = value; } } @@ -46,15 +61,15 @@ namespace Godot /// The Y component of the plane's normal vector. /// </summary> /// <value>Equivalent to <see cref="Normal"/>'s Y value.</value> - public real_t y + public real_t Y { readonly get { - return _normal.y; + return _normal.Y; } set { - _normal.y = value; + _normal.Y = value; } } @@ -62,36 +77,26 @@ namespace Godot /// The Z component of the plane's normal vector. /// </summary> /// <value>Equivalent to <see cref="Normal"/>'s Z value.</value> - public real_t z + public real_t Z { readonly get { - return _normal.z; + return _normal.Z; } set { - _normal.z = value; + _normal.Z = value; } } /// <summary> - /// The distance from the origin to the plane (in the direction of - /// <see cref="Normal"/>). This value is typically non-negative. - /// In the scalar equation of the plane <c>ax + by + cz = d</c>, - /// this is <c>d</c>, while the <c>(a, b, c)</c> coordinates are represented - /// by the <see cref="Normal"/> property. - /// </summary> - /// <value>The plane's distance from the origin.</value> - public real_t D { get; set; } - - /// <summary> /// Returns the shortest distance from this plane to the position <paramref name="point"/>. /// </summary> /// <param name="point">The position to use for the calculation.</param> /// <returns>The shortest distance.</returns> public readonly real_t DistanceTo(Vector3 point) { - return _normal.Dot(point) - D; + return _normal.Dot(point) - _d; } /// <summary> @@ -101,7 +106,7 @@ namespace Godot /// <value>Equivalent to <see cref="Normal"/> multiplied by <see cref="D"/>.</value> public readonly Vector3 GetCenter() { - return _normal * D; + return _normal * _d; } /// <summary> @@ -113,7 +118,7 @@ namespace Godot /// <returns>A <see langword="bool"/> for whether or not the plane has the point.</returns> public readonly bool HasPoint(Vector3 point, real_t tolerance = Mathf.Epsilon) { - real_t dist = _normal.Dot(point) - D; + real_t dist = _normal.Dot(point) - _d; return Mathf.Abs(dist) <= tolerance; } @@ -133,9 +138,9 @@ namespace Godot return null; } - Vector3 result = (b._normal.Cross(c._normal) * D) + - (c._normal.Cross(_normal) * b.D) + - (_normal.Cross(b._normal) * c.D); + Vector3 result = (b._normal.Cross(c._normal) * _d) + + (c._normal.Cross(_normal) * b._d) + + (_normal.Cross(b._normal) * c._d); return result / denom; } @@ -157,7 +162,7 @@ namespace Godot return null; } - real_t dist = (_normal.Dot(from) - D) / den; + real_t dist = (_normal.Dot(from) - _d) / den; // This is a ray, before the emitting pos (from) does not exist if (dist > Mathf.Epsilon) @@ -186,7 +191,7 @@ namespace Godot return null; } - real_t dist = (_normal.Dot(begin) - D) / den; + real_t dist = (_normal.Dot(begin) - _d) / den; // Only allow dist to be in the range of 0 to 1, with tolerance. if (dist < -Mathf.Epsilon || dist > 1.0f + Mathf.Epsilon) @@ -214,7 +219,7 @@ namespace Godot /// <returns>A <see langword="bool"/> for whether or not the point is above the plane.</returns> public readonly bool IsPointOver(Vector3 point) { - return _normal.Dot(point) > D; + return _normal.Dot(point) > _d; } /// <summary> @@ -230,7 +235,7 @@ namespace Godot return new Plane(0, 0, 0, 0); } - return new Plane(_normal / len, D / len); + return new Plane(_normal / len, _d / len); } /// <summary> @@ -279,7 +284,7 @@ namespace Godot public Plane(real_t a, real_t b, real_t c, real_t d) { _normal = new Vector3(a, b, c); - D = d; + _d = d; } /// <summary> @@ -290,7 +295,7 @@ namespace Godot public Plane(Vector3 normal) { _normal = normal; - D = 0; + _d = 0; } /// <summary> @@ -302,7 +307,7 @@ namespace Godot public Plane(Vector3 normal, real_t d) { _normal = normal; - D = d; + _d = d; } /// <summary> @@ -314,7 +319,7 @@ namespace Godot public Plane(Vector3 normal, Vector3 point) { _normal = normal; - D = _normal.Dot(point); + _d = _normal.Dot(point); } /// <summary> @@ -327,7 +332,7 @@ namespace Godot { _normal = (v1 - v3).Cross(v1 - v2); _normal.Normalize(); - D = _normal.Dot(v1); + _d = _normal.Dot(v1); } /// <summary> @@ -341,7 +346,7 @@ namespace Godot /// <returns>The negated/flipped plane.</returns> public static Plane operator -(Plane plane) { - return new Plane(-plane._normal, -plane.D); + return new Plane(-plane._normal, -plane._d); } /// <summary> @@ -389,7 +394,7 @@ namespace Godot /// <returns>Whether or not the planes are exactly equal.</returns> public readonly bool Equals(Plane other) { - return _normal == other._normal && D == other.D; + return _normal == other._normal && _d == other._d; } /// <summary> @@ -400,7 +405,7 @@ namespace Godot /// <returns>Whether or not the planes are approximately equal.</returns> public readonly bool IsEqualApprox(Plane other) { - return _normal.IsEqualApprox(other._normal) && Mathf.IsEqualApprox(D, other.D); + return _normal.IsEqualApprox(other._normal) && Mathf.IsEqualApprox(_d, other._d); } /// <summary> @@ -409,7 +414,7 @@ namespace Godot /// <returns>A hash code for this plane.</returns> public override readonly int GetHashCode() { - return _normal.GetHashCode() ^ D.GetHashCode(); + return _normal.GetHashCode() ^ _d.GetHashCode(); } /// <summary> @@ -418,7 +423,7 @@ namespace Godot /// <returns>A string representation of this plane.</returns> public override readonly string ToString() { - return $"{_normal}, {D}"; + return $"{_normal}, {_d}"; } /// <summary> @@ -427,7 +432,7 @@ namespace Godot /// <returns>A string representation of this plane.</returns> public readonly string ToString(string format) { - return $"{_normal.ToString(format)}, {D.ToString(format)}"; + return $"{_normal.ToString(format)}, {_d.ToString(format)}"; } } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Projection.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Projection.cs index f11b3c553a..84fc73b87a 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Projection.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Projection.cs @@ -49,22 +49,22 @@ namespace Godot /// <summary> /// The projection's X column. Also accessible by using the index position <c>[0]</c>. /// </summary> - public Vector4 x; + public Vector4 X; /// <summary> /// The projection's Y column. Also accessible by using the index position <c>[1]</c>. /// </summary> - public Vector4 y; + public Vector4 Y; /// <summary> /// The projection's Z column. Also accessible by using the index position <c>[2]</c>. /// </summary> - public Vector4 z; + public Vector4 Z; /// <summary> /// The projection's W column. Also accessible by using the index position <c>[3]</c>. /// </summary> - public Vector4 w; + public Vector4 W; /// <summary> /// Access whole columns in the form of <see cref="Vector4"/>. @@ -80,13 +80,13 @@ namespace Godot switch (column) { case 0: - return x; + return X; case 1: - return y; + return Y; case 2: - return z; + return Z; case 3: - return w; + return W; default: throw new ArgumentOutOfRangeException(nameof(column)); } @@ -96,16 +96,16 @@ namespace Godot switch (column) { case 0: - x = value; + X = value; return; case 1: - y = value; + Y = value; return; case 2: - z = value; + Z = value; return; case 3: - w = value; + W = value; return; default: throw new ArgumentOutOfRangeException(nameof(column)); @@ -128,13 +128,13 @@ namespace Godot switch (column) { case 0: - return x[row]; + return X[row]; case 1: - return y[row]; + return Y[row]; case 2: - return z[row]; + return Z[row]; case 3: - return w[row]; + return W[row]; default: throw new ArgumentOutOfRangeException(nameof(column)); } @@ -144,16 +144,16 @@ namespace Godot switch (column) { case 0: - x[row] = value; + X[row] = value; return; case 1: - y[row] = value; + Y[row] = value; return; case 2: - z[row] = value; + Z[row] = value; return; case 3: - w[row] = value; + W[row] = value; return; default: throw new ArgumentOutOfRangeException(nameof(column)); @@ -180,20 +180,20 @@ namespace Godot /// <summary> /// Creates a new <see cref="Projection"/> that scales a given projection to fit around - /// a given <see cref="AABB"/> in projection space. + /// a given <see cref="Aabb"/> in projection space. /// </summary> - /// <param name="aabb">The AABB to fit the projection around.</param> + /// <param name="aabb">The Aabb to fit the projection around.</param> /// <returns>The created projection.</returns> - public static Projection CreateFitAabb(AABB aabb) + public static Projection CreateFitAabb(Aabb aabb) { Vector3 min = aabb.Position; Vector3 max = aabb.Position + aabb.Size; return new Projection( - new Vector4(2 / (max.x - min.x), 0, 0, 0), - new Vector4(0, 2 / (max.y - min.y), 0, 0), - new Vector4(0, 0, 2 / (max.z - min.z), 0), - new Vector4(-(max.x + min.x) / (max.x - min.x), -(max.y + min.y) / (max.y - min.y), -(max.z + min.z) / (max.z - min.z), 1) + new Vector4(2 / (max.X - min.X), 0, 0, 0), + new Vector4(0, 2 / (max.Y - min.Y), 0, 0), + new Vector4(0, 0, 2 / (max.Z - min.Z), 0), + new Vector4(-(max.X + min.X) / (max.X - min.X), -(max.Y + min.Y) / (max.Y - min.Y), -(max.Z + min.Z) / (max.Z - min.Z), 1) ); } @@ -300,7 +300,7 @@ namespace Godot { size *= aspect; } - return CreateFrustum(-size / 2 + offset.x, +size / 2 + offset.x, -size / aspect / 2 + offset.y, +size / aspect / 2 + offset.y, near, far); + return CreateFrustum(-size / 2 + offset.X, +size / 2 + offset.X, -size / aspect / 2 + offset.Y, +size / aspect / 2 + offset.Y, near, far); } /// <summary> @@ -311,10 +311,10 @@ namespace Godot public static Projection CreateLightAtlasRect(Rect2 rect) { return new Projection( - new Vector4(rect.Size.x, 0, 0, 0), - new Vector4(0, rect.Size.y, 0, 0), + new Vector4(rect.Size.X, 0, 0, 0), + new Vector4(0, rect.Size.Y, 0, 0), new Vector4(0, 0, 1, 0), - new Vector4(rect.Position.x, rect.Position.y, 0, 1) + new Vector4(rect.Position.X, rect.Position.Y, 0, 1) ); } @@ -332,13 +332,13 @@ namespace Godot public static Projection CreateOrthogonal(real_t left, real_t right, real_t bottom, real_t top, real_t zNear, real_t zFar) { Projection proj = Projection.Identity; - proj.x.x = (real_t)2.0 / (right - left); - proj.w.x = -((right + left) / (right - left)); - proj.y.y = (real_t)2.0 / (top - bottom); - proj.w.y = -((top + bottom) / (top - bottom)); - proj.z.z = (real_t)(-2.0) / (zFar - zNear); - proj.w.z = -((zFar + zNear) / (zFar - zNear)); - proj.w.w = (real_t)1.0; + proj.X.X = (real_t)2.0 / (right - left); + proj.W.X = -((right + left) / (right - left)); + proj.Y.Y = (real_t)2.0 / (top - bottom); + proj.W.Y = -((top + bottom) / (top - bottom)); + proj.Z.Z = (real_t)(-2.0) / (zFar - zNear); + proj.W.Z = -((zFar + zNear) / (zFar - zNear)); + proj.W.W = (real_t)1.0; return proj; } @@ -392,12 +392,12 @@ namespace Godot Projection proj = Projection.Identity; - proj.x.x = cotangent / aspect; - proj.y.y = cotangent; - proj.z.z = -(zFar + zNear) / deltaZ; - proj.z.w = -1; - proj.w.z = -2 * zNear * zFar / deltaZ; - proj.w.w = 0; + proj.X.X = cotangent / aspect; + proj.Y.Y = cotangent; + proj.Z.Z = -(zFar + zNear) / deltaZ; + proj.Z.W = -1; + proj.W.Z = -2 * zNear * zFar / deltaZ; + proj.W.W = 0; return proj; } @@ -456,7 +456,7 @@ namespace Godot } Projection proj = CreateFrustum(left, right, -ymax, ymax, zNear, zFar); Projection cm = Projection.Identity; - cm.w.x = modeltranslation; + cm.W.X = modeltranslation; return proj * cm; } @@ -469,18 +469,18 @@ namespace Godot /// <returns>The determinant calculated from this projection.</returns> public readonly real_t Determinant() { - return x.w * y.z * z.y * w.x - x.z * y.w * z.y * w.x - - x.w * y.y * z.z * w.x + x.y * y.w * z.z * w.x + - x.z * y.y * z.w * w.x - x.y * y.z * z.w * w.x - - x.w * y.z * z.x * w.y + x.z * y.w * z.x * w.y + - x.w * y.x * z.z * w.y - x.x * y.w * z.z * w.y - - x.z * y.x * z.w * w.y + x.x * y.z * z.w * w.y + - x.w * y.y * z.x * w.z - x.y * y.w * z.x * w.z - - x.w * y.x * z.y * w.z + x.x * y.w * z.y * w.z + - x.y * y.x * z.w * w.z - x.x * y.y * z.w * w.z - - x.z * y.y * z.x * w.w + x.y * y.z * z.x * w.w + - x.z * y.x * z.y * w.w - x.x * y.z * z.y * w.w - - x.y * y.x * z.z * w.w + x.x * y.y * z.z * w.w; + return X.W * Y.Z * Z.Y * W.X - X.Z * Y.W * Z.Y * W.X - + X.W * Y.Y * Z.Z * W.X + X.Y * Y.W * Z.Z * W.X + + X.Z * Y.Y * Z.W * W.X - X.Y * Y.Z * Z.W * W.X - + X.W * Y.Z * Z.X * W.Y + X.Z * Y.W * Z.X * W.Y + + X.W * Y.X * Z.Z * W.Y - X.X * Y.W * Z.Z * W.Y - + X.Z * Y.X * Z.W * W.Y + X.X * Y.Z * Z.W * W.Y + + X.W * Y.Y * Z.X * W.Z - X.Y * Y.W * Z.X * W.Z - + X.W * Y.X * Z.Y * W.Z + X.X * Y.W * Z.Y * W.Z + + X.Y * Y.X * Z.W * W.Z - X.X * Y.Y * Z.W * W.Z - + X.Z * Y.Y * Z.X * W.W + X.Y * Y.Z * Z.X * W.W + + X.Z * Y.X * Z.Y * W.W - X.X * Y.Z * Z.Y * W.W - + X.Y * Y.X * Z.Z * W.W + X.X * Y.Y * Z.Z * W.W; } /// <summary> @@ -490,7 +490,7 @@ namespace Godot public readonly real_t GetAspect() { Vector2 vpHe = GetViewportHalfExtents(); - return vpHe.x / vpHe.y; + return vpHe.X / vpHe.Y; } /// <summary> @@ -499,15 +499,15 @@ namespace Godot /// <returns>The horizontal field of view of this projection.</returns> public readonly real_t GetFov() { - Plane rightPlane = new Plane(x.w - x.x, y.w - y.x, z.w - z.x, -w.w + w.x).Normalized(); - if (z.x == 0 && z.y == 0) + Plane rightPlane = new Plane(X.W - X.X, Y.W - Y.X, Z.W - Z.X, -W.W + W.X).Normalized(); + if (Z.X == 0 && Z.Y == 0) { - return Mathf.RadToDeg(Mathf.Acos(Mathf.Abs(rightPlane.Normal.x))) * (real_t)2.0; + return Mathf.RadToDeg(Mathf.Acos(Mathf.Abs(rightPlane.Normal.X))) * (real_t)2.0; } else { - Plane leftPlane = new Plane(x.w + x.x, y.w + y.x, z.w + z.x, w.w + w.x).Normalized(); - return Mathf.RadToDeg(Mathf.Acos(Mathf.Abs(leftPlane.Normal.x))) + Mathf.RadToDeg(Mathf.Acos(Mathf.Abs(rightPlane.Normal.x))); + Plane leftPlane = new Plane(X.W + X.X, Y.W + Y.X, Z.W + Z.X, W.W + W.X).Normalized(); + return Mathf.RadToDeg(Mathf.Acos(Mathf.Abs(leftPlane.Normal.X))) + Mathf.RadToDeg(Mathf.Acos(Mathf.Abs(rightPlane.Normal.X))); } } @@ -531,12 +531,12 @@ namespace Godot { if (IsOrthogonal()) { - return GetViewportHalfExtents().x; + return GetViewportHalfExtents().X; } else { real_t zn = GetZNear(); - real_t width = GetViewportHalfExtents().x * (real_t)2.0; + real_t width = GetViewportHalfExtents().X * (real_t)2.0; return (real_t)1.0 / (zn / width); } } @@ -551,7 +551,7 @@ namespace Godot { Vector3 result = this * new Vector3(1, 0, -1); - return (int)((result.x * (real_t)0.5 + (real_t)0.5) * forPixelWidth); + return (int)((result.X * (real_t)0.5 + (real_t)0.5) * forPixelWidth); } /// <summary> @@ -567,12 +567,12 @@ namespace Godot { Plane newPlane = plane switch { - Planes.Near => new Plane(x.w + x.z, y.w + y.z, z.w + z.z, w.w + w.z), - Planes.Far => new Plane(x.w - x.z, y.w - y.z, z.w - z.z, w.w - w.z), - Planes.Left => new Plane(x.w + x.x, y.w + y.x, z.w + z.x, w.w + w.x), - Planes.Top => new Plane(x.w - x.y, y.w - y.y, z.w - z.y, w.w - w.y), - Planes.Right => new Plane(x.w - x.x, y.w - y.x, z.w - z.x, w.w - w.x), - Planes.Bottom => new Plane(x.w + x.y, y.w + y.y, z.w + z.y, w.w + w.y), + Planes.Near => new Plane(X.W + X.Z, Y.W + Y.Z, Z.W + Z.Z, W.W + W.Z), + Planes.Far => new Plane(X.W - X.Z, Y.W - Y.Z, Z.W - Z.Z, W.W - W.Z), + Planes.Left => new Plane(X.W + X.X, Y.W + Y.X, Z.W + Z.X, W.W + W.X), + Planes.Top => new Plane(X.W - X.Y, Y.W - Y.Y, Z.W - Z.Y, W.W - W.Y), + Planes.Right => new Plane(X.W - X.X, Y.W - Y.X, Z.W - Z.X, W.W - W.X), + Planes.Bottom => new Plane(X.W + X.Y, Y.W + Y.Y, Z.W + Z.Y, W.W + W.Y), _ => new Plane(), }; newPlane.Normal = -newPlane.Normal; @@ -586,7 +586,7 @@ namespace Godot public readonly Vector2 GetFarPlaneHalfExtents() { var res = GetProjectionPlane(Planes.Far).Intersect3(GetProjectionPlane(Planes.Right), GetProjectionPlane(Planes.Top)); - return new Vector2(res.Value.x, res.Value.y); + return new Vector2(res.Value.X, res.Value.Y); } /// <summary> @@ -597,7 +597,7 @@ namespace Godot public readonly Vector2 GetViewportHalfExtents() { var res = GetProjectionPlane(Planes.Near).Intersect3(GetProjectionPlane(Planes.Right), GetProjectionPlane(Planes.Top)); - return new Vector2(res.Value.x, res.Value.y); + return new Vector2(res.Value.X, res.Value.Y); } /// <summary> @@ -625,7 +625,7 @@ namespace Godot public readonly Projection FlippedY() { Projection proj = this; - proj.y = -proj.y; + proj.Y = -proj.Y; return proj; } @@ -642,8 +642,8 @@ namespace Godot real_t zFar = GetZFar(); real_t zNear = newZNear; real_t deltaZ = zFar - zNear; - proj.z.z = -(zFar + zNear) / deltaZ; - proj.w.z = -2 * zNear * zFar / deltaZ; + proj.Z.Z = -(zFar + zNear) / deltaZ; + proj.W.Z = -2 * zNear * zFar / deltaZ; return proj; } @@ -656,8 +656,8 @@ namespace Godot public readonly Projection JitterOffseted(Vector2 offset) { Projection proj = this; - proj.w.x += offset.x; - proj.w.y += offset.y; + proj.W.X += offset.X; + proj.W.Y += offset.Y; return proj; } @@ -795,7 +795,7 @@ namespace Godot /// <returns>If the projection performs an orthogonal projection.</returns> public readonly bool IsOrthogonal() { - return w.w == (real_t)1.0; + return W.W == (real_t)1.0; } // Constants @@ -835,10 +835,10 @@ namespace Godot /// <param name="w">The W column, or column index 3.</param> public Projection(Vector4 x, Vector4 y, Vector4 z, Vector4 w) { - this.x = x; - this.y = y; - this.z = z; - this.w = w; + X = x; + Y = y; + Z = z; + W = w; } /// <summary> @@ -847,10 +847,10 @@ namespace Godot /// <param name="transform">The <see cref="Transform3D"/>.</param> public Projection(Transform3D transform) { - x = new Vector4(transform.basis.Row0.x, transform.basis.Row1.x, transform.basis.Row2.x, 0); - y = new Vector4(transform.basis.Row0.y, transform.basis.Row1.y, transform.basis.Row2.y, 0); - z = new Vector4(transform.basis.Row0.z, transform.basis.Row1.z, transform.basis.Row2.z, 0); - w = new Vector4(transform.origin.x, transform.origin.y, transform.origin.z, 1); + X = new Vector4(transform.Basis.Row0.X, transform.Basis.Row1.X, transform.Basis.Row2.X, 0); + Y = new Vector4(transform.Basis.Row0.Y, transform.Basis.Row1.Y, transform.Basis.Row2.Y, 0); + Z = new Vector4(transform.Basis.Row0.Z, transform.Basis.Row1.Z, transform.Basis.Row2.Z, 0); + W = new Vector4(transform.Origin.X, transform.Origin.Y, transform.Origin.Z, 1); } /// <summary> @@ -865,25 +865,25 @@ namespace Godot { return new Projection( new Vector4( - left.x.x * right.x.x + left.y.x * right.x.y + left.z.x * right.x.z + left.w.x * right.x.w, - left.x.y * right.x.x + left.y.y * right.x.y + left.z.y * right.x.z + left.w.y * right.x.w, - left.x.z * right.x.x + left.y.z * right.x.y + left.z.z * right.x.z + left.w.z * right.x.w, - left.x.w * right.x.x + left.y.w * right.x.y + left.z.w * right.x.z + left.w.w * right.x.w + left.X.X * right.X.X + left.Y.X * right.X.Y + left.Z.X * right.X.Z + left.W.X * right.X.W, + left.X.Y * right.X.X + left.Y.Y * right.X.Y + left.Z.Y * right.X.Z + left.W.Y * right.X.W, + left.X.Z * right.X.X + left.Y.Z * right.X.Y + left.Z.Z * right.X.Z + left.W.Z * right.X.W, + left.X.W * right.X.X + left.Y.W * right.X.Y + left.Z.W * right.X.Z + left.W.W * right.X.W ), new Vector4( - left.x.x * right.y.x + left.y.x * right.y.y + left.z.x * right.y.z + left.w.x * right.y.w, - left.x.y * right.y.x + left.y.y * right.y.y + left.z.y * right.y.z + left.w.y * right.y.w, - left.x.z * right.y.x + left.y.z * right.y.y + left.z.z * right.y.z + left.w.z * right.y.w, - left.x.w * right.y.x + left.y.w * right.y.y + left.z.w * right.y.z + left.w.w * right.y.w + left.X.X * right.Y.X + left.Y.X * right.Y.Y + left.Z.X * right.Y.Z + left.W.X * right.Y.W, + left.X.Y * right.Y.X + left.Y.Y * right.Y.Y + left.Z.Y * right.Y.Z + left.W.Y * right.Y.W, + left.X.Z * right.Y.X + left.Y.Z * right.Y.Y + left.Z.Z * right.Y.Z + left.W.Z * right.Y.W, + left.X.W * right.Y.X + left.Y.W * right.Y.Y + left.Z.W * right.Y.Z + left.W.W * right.Y.W ), new Vector4( - left.x.x * right.z.x + left.y.x * right.z.y + left.z.x * right.z.z + left.w.x * right.z.w, - left.x.y * right.z.x + left.y.y * right.z.y + left.z.y * right.z.z + left.w.y * right.z.w, - left.x.z * right.z.x + left.y.z * right.z.y + left.z.z * right.z.z + left.w.z * right.z.w, - left.x.w * right.z.x + left.y.w * right.z.y + left.z.w * right.z.z + left.w.w * right.z.w + left.X.X * right.Z.X + left.Y.X * right.Z.Y + left.Z.X * right.Z.Z + left.W.X * right.Z.W, + left.X.Y * right.Z.X + left.Y.Y * right.Z.Y + left.Z.Y * right.Z.Z + left.W.Y * right.Z.W, + left.X.Z * right.Z.X + left.Y.Z * right.Z.Y + left.Z.Z * right.Z.Z + left.W.Z * right.Z.W, + left.X.W * right.Z.X + left.Y.W * right.Z.Y + left.Z.W * right.Z.Z + left.W.W * right.Z.W ), new Vector4( - left.x.x * right.w.x + left.y.x * right.w.y + left.z.x * right.w.z + left.w.x * right.w.w, - left.x.y * right.w.x + left.y.y * right.w.y + left.z.y * right.w.z + left.w.y * right.w.w, - left.x.z * right.w.x + left.y.z * right.w.y + left.z.z * right.w.z + left.w.z * right.w.w, - left.x.w * right.w.x + left.y.w * right.w.y + left.z.w * right.w.z + left.w.w * right.w.w + left.X.X * right.W.X + left.Y.X * right.W.Y + left.Z.X * right.W.Z + left.W.X * right.W.W, + left.X.Y * right.W.X + left.Y.Y * right.W.Y + left.Z.Y * right.W.Z + left.W.Y * right.W.W, + left.X.Z * right.W.X + left.Y.Z * right.W.Y + left.Z.Z * right.W.Z + left.W.Z * right.W.W, + left.X.W * right.W.X + left.Y.W * right.W.Y + left.Z.W * right.W.Z + left.W.W * right.W.W ) ); } @@ -897,10 +897,10 @@ namespace Godot public static Vector4 operator *(Projection proj, Vector4 vector) { return new Vector4( - proj.x.x * vector.x + proj.y.x * vector.y + proj.z.x * vector.z + proj.w.x * vector.w, - proj.x.y * vector.x + proj.y.y * vector.y + proj.z.y * vector.z + proj.w.y * vector.w, - proj.x.z * vector.x + proj.y.z * vector.y + proj.z.z * vector.z + proj.w.z * vector.w, - proj.x.w * vector.x + proj.y.w * vector.y + proj.z.w * vector.z + proj.w.w * vector.w + proj.X.X * vector.X + proj.Y.X * vector.Y + proj.Z.X * vector.Z + proj.W.X * vector.W, + proj.X.Y * vector.X + proj.Y.Y * vector.Y + proj.Z.Y * vector.Z + proj.W.Y * vector.W, + proj.X.Z * vector.X + proj.Y.Z * vector.Y + proj.Z.Z * vector.Z + proj.W.Z * vector.W, + proj.X.W * vector.X + proj.Y.W * vector.Y + proj.Z.W * vector.Z + proj.W.W * vector.W ); } @@ -913,10 +913,10 @@ namespace Godot public static Vector4 operator *(Vector4 vector, Projection proj) { return new Vector4( - proj.x.x * vector.x + proj.x.y * vector.y + proj.x.z * vector.z + proj.x.w * vector.w, - proj.y.x * vector.x + proj.y.y * vector.y + proj.y.z * vector.z + proj.y.w * vector.w, - proj.z.x * vector.x + proj.z.y * vector.y + proj.z.z * vector.z + proj.z.w * vector.w, - proj.w.x * vector.x + proj.w.y * vector.y + proj.w.z * vector.z + proj.w.w * vector.w + proj.X.X * vector.X + proj.X.Y * vector.Y + proj.X.Z * vector.Z + proj.X.W * vector.W, + proj.Y.X * vector.X + proj.Y.Y * vector.Y + proj.Y.Z * vector.Z + proj.Y.W * vector.W, + proj.Z.X * vector.X + proj.Z.Y * vector.Y + proj.Z.Z * vector.Z + proj.Z.W * vector.W, + proj.W.X * vector.X + proj.W.Y * vector.Y + proj.W.Z * vector.Z + proj.W.W * vector.W ); } @@ -929,11 +929,11 @@ namespace Godot public static Vector3 operator *(Projection proj, Vector3 vector) { Vector3 ret = new Vector3( - proj.x.x * vector.x + proj.y.x * vector.y + proj.z.x * vector.z + proj.w.x, - proj.x.y * vector.x + proj.y.y * vector.y + proj.z.y * vector.z + proj.w.y, - proj.x.z * vector.x + proj.y.z * vector.y + proj.z.z * vector.z + proj.w.z + proj.X.X * vector.X + proj.Y.X * vector.Y + proj.Z.X * vector.Z + proj.W.X, + proj.X.Y * vector.X + proj.Y.Y * vector.Y + proj.Z.Y * vector.Z + proj.W.Y, + proj.X.Z * vector.X + proj.Y.Z * vector.Y + proj.Z.Z * vector.Z + proj.W.Z ); - return ret / (proj.x.w * vector.x + proj.y.w * vector.y + proj.z.w * vector.z + proj.w.w); + return ret / (proj.X.W * vector.X + proj.Y.W * vector.Y + proj.Z.W * vector.Z + proj.W.W); } /// <summary> @@ -966,11 +966,11 @@ namespace Godot { return new Transform3D( new Basis( - new Vector3(proj.x.x, proj.x.y, proj.x.z), - new Vector3(proj.y.x, proj.y.y, proj.y.z), - new Vector3(proj.z.x, proj.z.y, proj.z.z) + new Vector3(proj.X.X, proj.X.Y, proj.X.Z), + new Vector3(proj.Y.X, proj.Y.Y, proj.Y.Z), + new Vector3(proj.Z.X, proj.Z.Y, proj.Z.Z) ), - new Vector3(proj.w.x, proj.w.y, proj.w.z) + new Vector3(proj.W.X, proj.W.Y, proj.W.Z) ); } @@ -992,7 +992,7 @@ namespace Godot /// <returns>Whether or not the projections are exactly equal.</returns> public readonly bool Equals(Projection other) { - return x == other.x && y == other.y && z == other.z && w == other.w; + return X == other.X && Y == other.Y && Z == other.Z && W == other.W; } /// <summary> @@ -1001,7 +1001,7 @@ namespace Godot /// <returns>A hash code for this projection.</returns> public override readonly int GetHashCode() { - return y.GetHashCode() ^ x.GetHashCode() ^ z.GetHashCode() ^ w.GetHashCode(); + return Y.GetHashCode() ^ X.GetHashCode() ^ Z.GetHashCode() ^ W.GetHashCode(); } /// <summary> @@ -1010,7 +1010,7 @@ namespace Godot /// <returns>A string representation of this projection.</returns> public override readonly string ToString() { - return $"{x.x}, {x.y}, {x.z}, {x.w}\n{y.x}, {y.y}, {y.z}, {y.w}\n{z.x}, {z.y}, {z.z}, {z.w}\n{w.x}, {w.y}, {w.z}, {w.w}\n"; + return $"{X.X}, {X.Y}, {X.Z}, {X.W}\n{Y.X}, {Y.Y}, {Y.Z}, {Y.W}\n{Z.X}, {Z.Y}, {Z.Z}, {Z.W}\n{W.X}, {W.Y}, {W.Z}, {W.W}\n"; } /// <summary> @@ -1019,10 +1019,10 @@ namespace Godot /// <returns>A string representation of this projection.</returns> public readonly string ToString(string format) { - return $"{x.x.ToString(format)}, {x.y.ToString(format)}, {x.z.ToString(format)}, {x.w.ToString(format)}\n" + - $"{y.x.ToString(format)}, {y.y.ToString(format)}, {y.z.ToString(format)}, {y.w.ToString(format)}\n" + - $"{z.x.ToString(format)}, {z.y.ToString(format)}, {z.z.ToString(format)}, {z.w.ToString(format)}\n" + - $"{w.x.ToString(format)}, {w.y.ToString(format)}, {w.z.ToString(format)}, {w.w.ToString(format)}\n"; + return $"{X.X.ToString(format)}, {X.Y.ToString(format)}, {X.Z.ToString(format)}, {X.W.ToString(format)}\n" + + $"{Y.X.ToString(format)}, {Y.Y.ToString(format)}, {Y.Z.ToString(format)}, {Y.W.ToString(format)}\n" + + $"{Z.X.ToString(format)}, {Z.Y.ToString(format)}, {Z.Z.ToString(format)}, {Z.W.ToString(format)}\n" + + $"{W.X.ToString(format)}, {W.Y.ToString(format)}, {W.Z.ToString(format)}, {W.W.ToString(format)}\n"; } } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs index 8e4f9178f7..9c2a6fc654 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs @@ -24,25 +24,25 @@ namespace Godot /// X component of the quaternion (imaginary <c>i</c> axis part). /// Quaternion components should usually not be manipulated directly. /// </summary> - public real_t x; + public real_t X; /// <summary> /// Y component of the quaternion (imaginary <c>j</c> axis part). /// Quaternion components should usually not be manipulated directly. /// </summary> - public real_t y; + public real_t Y; /// <summary> /// Z component of the quaternion (imaginary <c>k</c> axis part). /// Quaternion components should usually not be manipulated directly. /// </summary> - public real_t z; + public real_t Z; /// <summary> /// W component of the quaternion (real part). /// Quaternion components should usually not be manipulated directly. /// </summary> - public real_t w; + public real_t W; /// <summary> /// Access quaternion components using their index. @@ -51,10 +51,10 @@ namespace Godot /// <paramref name="index"/> is not 0, 1, 2 or 3. /// </exception> /// <value> - /// <c>[0]</c> is equivalent to <see cref="x"/>, - /// <c>[1]</c> is equivalent to <see cref="y"/>, - /// <c>[2]</c> is equivalent to <see cref="z"/>, - /// <c>[3]</c> is equivalent to <see cref="w"/>. + /// <c>[0]</c> is equivalent to <see cref="X"/>, + /// <c>[1]</c> is equivalent to <see cref="Y"/>, + /// <c>[2]</c> is equivalent to <see cref="Z"/>, + /// <c>[3]</c> is equivalent to <see cref="W"/>. /// </value> public real_t this[int index] { @@ -63,13 +63,13 @@ namespace Godot switch (index) { case 0: - return x; + return X; case 1: - return y; + return Y; case 2: - return z; + return Z; case 3: - return w; + return W; default: throw new ArgumentOutOfRangeException(nameof(index)); } @@ -79,16 +79,16 @@ namespace Godot switch (index) { case 0: - x = value; + X = value; break; case 1: - y = value; + Y = value; break; case 2: - z = value; + Z = value; break; case 3: - w = value; + W = value; break; default: throw new ArgumentOutOfRangeException(nameof(index)); @@ -155,9 +155,9 @@ namespace Godot Quaternion lnPre = (fromQ.Inverse() * preQ).Log(); Quaternion lnPost = (fromQ.Inverse() * postQ).Log(); Quaternion ln = new Quaternion( - Mathf.CubicInterpolate(lnFrom.x, lnTo.x, lnPre.x, lnPost.x, weight), - Mathf.CubicInterpolate(lnFrom.y, lnTo.y, lnPre.y, lnPost.y, weight), - Mathf.CubicInterpolate(lnFrom.z, lnTo.z, lnPre.z, lnPost.z, weight), + Mathf.CubicInterpolate(lnFrom.X, lnTo.X, lnPre.X, lnPost.X, weight), + Mathf.CubicInterpolate(lnFrom.Y, lnTo.Y, lnPre.Y, lnPost.Y, weight), + Mathf.CubicInterpolate(lnFrom.Z, lnTo.Z, lnPre.Z, lnPost.Z, weight), 0); Quaternion q1 = fromQ * ln.Exp(); @@ -167,9 +167,9 @@ namespace Godot lnPre = (toQ.Inverse() * preQ).Log(); lnPost = (toQ.Inverse() * postQ).Log(); ln = new Quaternion( - Mathf.CubicInterpolate(lnFrom.x, lnTo.x, lnPre.x, lnPost.x, weight), - Mathf.CubicInterpolate(lnFrom.y, lnTo.y, lnPre.y, lnPost.y, weight), - Mathf.CubicInterpolate(lnFrom.z, lnTo.z, lnPre.z, lnPost.z, weight), + Mathf.CubicInterpolate(lnFrom.X, lnTo.X, lnPre.X, lnPost.X, weight), + Mathf.CubicInterpolate(lnFrom.Y, lnTo.Y, lnPre.Y, lnPost.Y, weight), + Mathf.CubicInterpolate(lnFrom.Z, lnTo.Z, lnPre.Z, lnPost.Z, weight), 0); Quaternion q2 = toQ * ln.Exp(); @@ -224,9 +224,9 @@ namespace Godot Quaternion lnPre = (fromQ.Inverse() * preQ).Log(); Quaternion lnPost = (fromQ.Inverse() * postQ).Log(); Quaternion ln = new Quaternion( - Mathf.CubicInterpolateInTime(lnFrom.x, lnTo.x, lnPre.x, lnPost.x, weight, bT, preAT, postBT), - Mathf.CubicInterpolateInTime(lnFrom.y, lnTo.y, lnPre.y, lnPost.y, weight, bT, preAT, postBT), - Mathf.CubicInterpolateInTime(lnFrom.z, lnTo.z, lnPre.z, lnPost.z, weight, bT, preAT, postBT), + Mathf.CubicInterpolateInTime(lnFrom.X, lnTo.X, lnPre.X, lnPost.X, weight, bT, preAT, postBT), + Mathf.CubicInterpolateInTime(lnFrom.Y, lnTo.Y, lnPre.Y, lnPost.Y, weight, bT, preAT, postBT), + Mathf.CubicInterpolateInTime(lnFrom.Z, lnTo.Z, lnPre.Z, lnPost.Z, weight, bT, preAT, postBT), 0); Quaternion q1 = fromQ * ln.Exp(); @@ -236,9 +236,9 @@ namespace Godot lnPre = (toQ.Inverse() * preQ).Log(); lnPost = (toQ.Inverse() * postQ).Log(); ln = new Quaternion( - Mathf.CubicInterpolateInTime(lnFrom.x, lnTo.x, lnPre.x, lnPost.x, weight, bT, preAT, postBT), - Mathf.CubicInterpolateInTime(lnFrom.y, lnTo.y, lnPre.y, lnPost.y, weight, bT, preAT, postBT), - Mathf.CubicInterpolateInTime(lnFrom.z, lnTo.z, lnPre.z, lnPost.z, weight, bT, preAT, postBT), + Mathf.CubicInterpolateInTime(lnFrom.X, lnTo.X, lnPre.X, lnPost.X, weight, bT, preAT, postBT), + Mathf.CubicInterpolateInTime(lnFrom.Y, lnTo.Y, lnPre.Y, lnPost.Y, weight, bT, preAT, postBT), + Mathf.CubicInterpolateInTime(lnFrom.Z, lnTo.Z, lnPre.Z, lnPost.Z, weight, bT, preAT, postBT), 0); Quaternion q2 = toQ * ln.Exp(); @@ -253,12 +253,12 @@ namespace Godot /// <returns>The dot product.</returns> public readonly real_t Dot(Quaternion b) { - return (x * b.x) + (y * b.y) + (z * b.z) + (w * b.w); + return (X * b.X) + (Y * b.Y) + (Z * b.Z) + (W * b.W); } public readonly Quaternion Exp() { - Vector3 v = new Vector3(x, y, z); + Vector3 v = new Vector3(X, Y, Z); real_t theta = v.Length(); v = v.Normalized(); if (theta < Mathf.Epsilon || !v.IsNormalized()) @@ -270,18 +270,18 @@ namespace Godot public readonly real_t GetAngle() { - return 2 * Mathf.Acos(w); + return 2 * Mathf.Acos(W); } public readonly Vector3 GetAxis() { - if (Mathf.Abs(w) > 1 - Mathf.Epsilon) + if (Mathf.Abs(W) > 1 - Mathf.Epsilon) { - return new Vector3(x, y, z); + return new Vector3(X, Y, Z); } - real_t r = 1 / Mathf.Sqrt(1 - w * w); - return new Vector3(x * r, y * r, z * r); + real_t r = 1 / Mathf.Sqrt(1 - W * W); + return new Vector3(X * r, Y * r, Z * r); } /// <summary> @@ -315,7 +315,7 @@ namespace Godot throw new InvalidOperationException("Quaternion is not normalized."); } #endif - return new Quaternion(-x, -y, -z, w); + return new Quaternion(-X, -Y, -Z, W); } /// <summary> @@ -325,7 +325,7 @@ namespace Godot /// <returns>Whether this vector is finite or not.</returns> public readonly bool IsFinite() { - return Mathf.IsFinite(x) && Mathf.IsFinite(y) && Mathf.IsFinite(z) && Mathf.IsFinite(w); + return Mathf.IsFinite(X) && Mathf.IsFinite(Y) && Mathf.IsFinite(Z) && Mathf.IsFinite(W); } /// <summary> @@ -340,7 +340,7 @@ namespace Godot public readonly Quaternion Log() { Vector3 v = GetAxis() * GetAngle(); - return new Quaternion(v.x, v.y, v.z, 0); + return new Quaternion(v.X, v.Y, v.Z, 0); } /// <summary> @@ -432,10 +432,10 @@ namespace Godot // Calculate final values. return new Quaternion ( - (scale0 * x) + (scale1 * to1.x), - (scale0 * y) + (scale1 * to1.y), - (scale0 * z) + (scale1 * to1.z), - (scale0 * w) + (scale1 * to1.w) + (scale0 * X) + (scale1 * to1.X), + (scale0 * Y) + (scale1 * to1.Y), + (scale0 * Z) + (scale1 * to1.Z), + (scale0 * W) + (scale1 * to1.W) ); } @@ -474,10 +474,10 @@ namespace Godot return new Quaternion ( - (invFactor * x) + (newFactor * to.x), - (invFactor * y) + (newFactor * to.y), - (invFactor * z) + (newFactor * to.z), - (invFactor * w) + (newFactor * to.w) + (invFactor * X) + (newFactor * to.X), + (invFactor * Y) + (newFactor * to.Y), + (invFactor * Z) + (newFactor * to.Z), + (invFactor * W) + (newFactor * to.W) ); } @@ -501,10 +501,10 @@ namespace Godot /// <param name="w">W component of the quaternion (real part).</param> public Quaternion(real_t x, real_t y, real_t z, real_t w) { - this.x = x; - this.y = y; - this.z = z; - this.w = w; + X = x; + Y = y; + Z = z; + W = w; } /// <summary> @@ -535,20 +535,20 @@ namespace Godot if (d == 0f) { - x = 0f; - y = 0f; - z = 0f; - w = 0f; + X = 0f; + Y = 0f; + Z = 0f; + W = 0f; } else { (real_t sin, real_t cos) = Mathf.SinCos(angle * 0.5f); real_t s = sin / d; - x = axis.x * s; - y = axis.y * s; - z = axis.z * s; - w = cos; + X = axis.X * s; + Y = axis.Y * s; + Z = axis.Z * s; + W = cos; } } @@ -559,20 +559,20 @@ namespace Godot if (d < -1.0f + Mathf.Epsilon) { - x = 0f; - y = 1f; - z = 0f; - w = 0f; + X = 0f; + Y = 1f; + Z = 0f; + W = 0f; } else { real_t s = Mathf.Sqrt((1.0f + d) * 2.0f); real_t rs = 1.0f / s; - x = c.x * rs; - y = c.y * rs; - z = c.z * rs; - w = s * 0.5f; + X = c.X * rs; + Y = c.Y * rs; + Z = c.Z * rs; + W = s * 0.5f; } } @@ -584,9 +584,9 @@ namespace Godot /// <param name="eulerYXZ">Euler angles that the quaternion will be rotated by.</param> public static Quaternion FromEuler(Vector3 eulerYXZ) { - real_t halfA1 = eulerYXZ.y * 0.5f; - real_t halfA2 = eulerYXZ.x * 0.5f; - real_t halfA3 = eulerYXZ.z * 0.5f; + real_t halfA1 = eulerYXZ.Y * 0.5f; + real_t halfA2 = eulerYXZ.X * 0.5f; + real_t halfA3 = eulerYXZ.Z * 0.5f; // R = Y(a1).X(a2).Z(a3) convention for Euler angles. // Conversion to quaternion as listed in https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19770024290.pdf (page A-6) @@ -616,10 +616,10 @@ namespace Godot { return new Quaternion ( - (left.w * right.x) + (left.x * right.w) + (left.y * right.z) - (left.z * right.y), - (left.w * right.y) + (left.y * right.w) + (left.z * right.x) - (left.x * right.z), - (left.w * right.z) + (left.z * right.w) + (left.x * right.y) - (left.y * right.x), - (left.w * right.w) - (left.x * right.x) - (left.y * right.y) - (left.z * right.z) + (left.W * right.X) + (left.X * right.W) + (left.Y * right.Z) - (left.Z * right.Y), + (left.W * right.Y) + (left.Y * right.W) + (left.Z * right.X) - (left.X * right.Z), + (left.W * right.Z) + (left.Z * right.W) + (left.X * right.Y) - (left.Y * right.X), + (left.W * right.W) - (left.X * right.X) - (left.Y * right.Y) - (left.Z * right.Z) ); } @@ -637,9 +637,9 @@ namespace Godot throw new InvalidOperationException("Quaternion is not normalized."); } #endif - var u = new Vector3(quaternion.x, quaternion.y, quaternion.z); + var u = new Vector3(quaternion.X, quaternion.Y, quaternion.Z); Vector3 uv = u.Cross(vector); - return vector + (((uv * quaternion.w) + u.Cross(uv)) * 2); + return vector + (((uv * quaternion.W) + u.Cross(uv)) * 2); } /// <summary> @@ -665,7 +665,7 @@ namespace Godot /// <returns>The added quaternion.</returns> public static Quaternion operator +(Quaternion left, Quaternion right) { - return new Quaternion(left.x + right.x, left.y + right.y, left.z + right.z, left.w + right.w); + return new Quaternion(left.X + right.X, left.Y + right.Y, left.Z + right.Z, left.W + right.W); } /// <summary> @@ -679,20 +679,20 @@ namespace Godot /// <returns>The subtracted quaternion.</returns> public static Quaternion operator -(Quaternion left, Quaternion right) { - return new Quaternion(left.x - right.x, left.y - right.y, left.z - right.z, left.w - right.w); + return new Quaternion(left.X - right.X, left.Y - right.Y, left.Z - right.Z, left.W - right.W); } /// <summary> /// Returns the negative value of the <see cref="Quaternion"/>. /// This is the same as writing - /// <c>new Quaternion(-q.x, -q.y, -q.z, -q.w)</c>. This operation + /// <c>new Quaternion(-q.X, -q.Y, -q.Z, -q.W)</c>. This operation /// results in a quaternion that represents the same rotation. /// </summary> /// <param name="quat">The quaternion to negate.</param> /// <returns>The negated quaternion.</returns> public static Quaternion operator -(Quaternion quat) { - return new Quaternion(-quat.x, -quat.y, -quat.z, -quat.w); + return new Quaternion(-quat.X, -quat.Y, -quat.Z, -quat.W); } /// <summary> @@ -706,7 +706,7 @@ namespace Godot /// <returns>The multiplied quaternion.</returns> public static Quaternion operator *(Quaternion left, real_t right) { - return new Quaternion(left.x * right, left.y * right, left.z * right, left.w * right); + return new Quaternion(left.X * right, left.Y * right, left.Z * right, left.W * right); } /// <summary> @@ -720,7 +720,7 @@ namespace Godot /// <returns>The multiplied quaternion.</returns> public static Quaternion operator *(real_t left, Quaternion right) { - return new Quaternion(right.x * left, right.y * left, right.z * left, right.w * left); + return new Quaternion(right.X * left, right.Y * left, right.Z * left, right.W * left); } /// <summary> @@ -780,7 +780,7 @@ namespace Godot /// <returns>Whether or not the quaternions are exactly equal.</returns> public readonly bool Equals(Quaternion other) { - return x == other.x && y == other.y && z == other.z && w == other.w; + return X == other.X && Y == other.Y && Z == other.Z && W == other.W; } /// <summary> @@ -791,7 +791,7 @@ namespace Godot /// <returns>Whether or not the quaternions are approximately equal.</returns> public readonly bool IsEqualApprox(Quaternion other) { - return Mathf.IsEqualApprox(x, other.x) && Mathf.IsEqualApprox(y, other.y) && Mathf.IsEqualApprox(z, other.z) && Mathf.IsEqualApprox(w, other.w); + return Mathf.IsEqualApprox(X, other.X) && Mathf.IsEqualApprox(Y, other.Y) && Mathf.IsEqualApprox(Z, other.Z) && Mathf.IsEqualApprox(W, other.W); } /// <summary> @@ -800,7 +800,7 @@ namespace Godot /// <returns>A hash code for this quaternion.</returns> public override readonly int GetHashCode() { - return y.GetHashCode() ^ x.GetHashCode() ^ z.GetHashCode() ^ w.GetHashCode(); + return Y.GetHashCode() ^ X.GetHashCode() ^ Z.GetHashCode() ^ W.GetHashCode(); } /// <summary> @@ -809,7 +809,7 @@ namespace Godot /// <returns>A string representation of this quaternion.</returns> public override readonly string ToString() { - return $"({x}, {y}, {z}, {w})"; + return $"({X}, {Y}, {Z}, {W})"; } /// <summary> @@ -818,7 +818,7 @@ namespace Godot /// <returns>A string representation of this quaternion.</returns> public readonly string ToString(string format) { - return $"({x.ToString(format)}, {y.ToString(format)}, {z.ToString(format)}, {w.ToString(format)})"; + return $"({X.ToString(format)}, {Y.ToString(format)}, {Z.ToString(format)}, {W.ToString(format)})"; } } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs index 1a8696d3bc..be4004a0f9 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs @@ -66,7 +66,7 @@ namespace Godot public readonly Rect2 Abs() { Vector2 end = End; - Vector2 topLeft = new Vector2(Mathf.Min(_position.x, end.x), Mathf.Min(_position.y, end.y)); + Vector2 topLeft = new Vector2(Mathf.Min(_position.X, end.X), Mathf.Min(_position.Y, end.Y)); return new Rect2(topLeft, _size.Abs()); } @@ -88,14 +88,14 @@ namespace Godot 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; } @@ -119,9 +119,9 @@ namespace Godot /// </returns> public readonly 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; + 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; } /// <summary> @@ -136,22 +136,22 @@ namespace Godot Vector2 begin = expanded._position; Vector2 end = expanded._position + expanded._size; - if (to.x < begin.x) + if (to.X < begin.X) { - begin.x = to.x; + begin.X = to.X; } - if (to.y < begin.y) + if (to.Y < begin.Y) { - begin.y = to.y; + begin.Y = to.Y; } - if (to.x > end.x) + if (to.X > end.X) { - end.x = to.x; + end.X = to.X; } - if (to.y > end.y) + if (to.Y > end.Y) { - end.y = to.y; + end.Y = to.Y; } expanded._position = begin; @@ -166,7 +166,7 @@ namespace Godot /// <returns>The area.</returns> public readonly real_t GetArea() { - return _size.x * _size.y; + return _size.X * _size.Y; } /// <summary> @@ -191,10 +191,10 @@ namespace Godot { Rect2 g = this; - g._position.x -= by; - g._position.y -= by; - g._size.x += by * 2; - g._size.y += by * 2; + g._position.X -= by; + g._position.Y -= by; + g._size.X += by * 2; + g._size.Y += by * 2; return g; } @@ -214,10 +214,10 @@ namespace Godot { Rect2 g = this; - g._position.x -= left; - g._position.y -= top; - g._size.x += left + right; - g._size.y += top + bottom; + g._position.X -= left; + g._position.Y -= top; + g._size.X += left + right; + g._size.Y += top + bottom; return g; } @@ -254,7 +254,7 @@ namespace Godot /// </returns> public readonly bool HasArea() { - return _size.x > 0.0f && _size.y > 0.0f; + return _size.X > 0.0f && _size.Y > 0.0f; } /// <summary> @@ -267,14 +267,14 @@ namespace Godot /// </returns> public readonly bool HasPoint(Vector2 point) { - if (point.x < _position.x) + if (point.X < _position.X) return false; - if (point.y < _position.y) + if (point.Y < _position.Y) return false; - if (point.x >= _position.x + _size.x) + if (point.X >= _position.X + _size.X) return false; - if (point.y >= _position.y + _size.y) + if (point.Y >= _position.Y + _size.Y) return false; return true; @@ -295,38 +295,38 @@ namespace Godot { if (includeBorders) { - if (_position.x > b._position.x + b._size.x) + if (_position.X > b._position.X + b._size.X) { return false; } - if (_position.x + _size.x < b._position.x) + if (_position.X + _size.X < b._position.X) { return false; } - if (_position.y > b._position.y + b._size.y) + if (_position.Y > b._position.Y + b._size.Y) { return false; } - if (_position.y + _size.y < b._position.y) + if (_position.Y + _size.Y < b._position.Y) { return false; } } else { - if (_position.x >= b._position.x + b._size.x) + if (_position.X >= b._position.X + b._size.X) { return false; } - if (_position.x + _size.x <= b._position.x) + if (_position.X + _size.X <= b._position.X) { return false; } - if (_position.y >= b._position.y + b._size.y) + if (_position.Y >= b._position.Y + b._size.Y) { return false; } - if (_position.y + _size.y <= b._position.y) + if (_position.Y + _size.Y <= b._position.Y) { return false; } @@ -344,11 +344,11 @@ namespace Godot { 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._position; // Make relative again diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2I.cs index cf8939a859..5b06101db5 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2I.cs @@ -4,21 +4,21 @@ using System.Runtime.InteropServices; namespace Godot { /// <summary> - /// 2D axis-aligned bounding box using integers. Rect2i consists of a position, a size, and + /// 2D axis-aligned bounding box using integers. Rect2I consists of a position, a size, and /// several utility functions. It is typically used for fast overlap tests. /// </summary> [Serializable] [StructLayout(LayoutKind.Sequential)] - public struct Rect2i : IEquatable<Rect2i> + public struct Rect2I : IEquatable<Rect2I> { - private Vector2i _position; - private Vector2i _size; + private Vector2I _position; + private Vector2I _size; /// <summary> /// Beginning corner. Typically has values lower than <see cref="End"/>. /// </summary> /// <value>Directly uses a private field.</value> - public Vector2i Position + public Vector2I Position { readonly get { return _position; } set { _position = value; } @@ -29,7 +29,7 @@ namespace Godot /// If the size is negative, you can use <see cref="Abs"/> to fix it. /// </summary> /// <value>Directly uses a private field.</value> - public Vector2i Size + public Vector2I Size { readonly get { return _size; } set { _size = value; } @@ -43,14 +43,14 @@ namespace Godot /// Getting is equivalent to <paramref name="value"/> = <see cref="Position"/> + <see cref="Size"/>, /// setting is equivalent to <see cref="Size"/> = <paramref name="value"/> - <see cref="Position"/> /// </value> - public Vector2i End + public Vector2I End { readonly get { return _position + _size; } set { _size = value - _position; } } /// <summary> - /// The area of this <see cref="Rect2i"/>. + /// The area of this <see cref="Rect2I"/>. /// </summary> /// <value>Equivalent to <see cref="GetArea()"/>.</value> public readonly int Area @@ -59,89 +59,89 @@ namespace Godot } /// <summary> - /// Returns a <see cref="Rect2i"/> with equivalent position and size, modified so that + /// Returns a <see cref="Rect2I"/> with equivalent position and size, modified so that /// the top-left corner is the origin and width and height are positive. /// </summary> - /// <returns>The modified <see cref="Rect2i"/>.</returns> - public readonly Rect2i Abs() + /// <returns>The modified <see cref="Rect2I"/>.</returns> + public readonly Rect2I Abs() { - Vector2i end = End; - Vector2i topLeft = new Vector2i(Mathf.Min(_position.x, end.x), Mathf.Min(_position.y, end.y)); - return new Rect2i(topLeft, _size.Abs()); + Vector2I end = End; + Vector2I topLeft = new Vector2I(Mathf.Min(_position.X, end.X), Mathf.Min(_position.Y, end.Y)); + return new Rect2I(topLeft, _size.Abs()); } /// <summary> - /// Returns the intersection of this <see cref="Rect2i"/> and <paramref name="b"/>. - /// If the rectangles do not intersect, an empty <see cref="Rect2i"/> is returned. + /// Returns the intersection of this <see cref="Rect2I"/> and <paramref name="b"/>. + /// If the rectangles do not intersect, an empty <see cref="Rect2I"/> is returned. /// </summary> - /// <param name="b">The other <see cref="Rect2i"/>.</param> + /// <param name="b">The other <see cref="Rect2I"/>.</param> /// <returns> - /// The intersection of this <see cref="Rect2i"/> and <paramref name="b"/>, - /// or an empty <see cref="Rect2i"/> if they do not intersect. + /// The intersection of this <see cref="Rect2I"/> and <paramref name="b"/>, + /// or an empty <see cref="Rect2I"/> if they do not intersect. /// </returns> - public readonly Rect2i Intersection(Rect2i b) + public readonly Rect2I Intersection(Rect2I b) { - Rect2i newRect = b; + Rect2I newRect = b; if (!Intersects(newRect)) { - return new Rect2i(); + return new Rect2I(); } - 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); - Vector2i bEnd = b._position + b._size; - Vector2i end = _position + _size; + Vector2I bEnd = b._position + b._size; + Vector2I 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; } /// <summary> - /// Returns <see langword="true"/> if this <see cref="Rect2i"/> completely encloses another one. + /// Returns <see langword="true"/> if this <see cref="Rect2I"/> completely encloses another one. /// </summary> - /// <param name="b">The other <see cref="Rect2i"/> that may be enclosed.</param> + /// <param name="b">The other <see cref="Rect2I"/> that may be enclosed.</param> /// <returns> - /// A <see langword="bool"/> for whether or not this <see cref="Rect2i"/> encloses <paramref name="b"/>. + /// A <see langword="bool"/> for whether or not this <see cref="Rect2I"/> encloses <paramref name="b"/>. /// </returns> - public readonly bool Encloses(Rect2i b) + public readonly bool Encloses(Rect2I 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; + 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; } /// <summary> - /// Returns this <see cref="Rect2i"/> expanded to include a given point. + /// Returns this <see cref="Rect2I"/> expanded to include a given point. /// </summary> /// <param name="to">The point to include.</param> - /// <returns>The expanded <see cref="Rect2i"/>.</returns> - public readonly Rect2i Expand(Vector2i to) + /// <returns>The expanded <see cref="Rect2I"/>.</returns> + public readonly Rect2I Expand(Vector2I to) { - Rect2i expanded = this; + Rect2I expanded = this; - Vector2i begin = expanded._position; - Vector2i end = expanded._position + expanded._size; + Vector2I begin = expanded._position; + Vector2I end = expanded._position + expanded._size; - if (to.x < begin.x) + if (to.X < begin.X) { - begin.x = to.x; + begin.X = to.X; } - if (to.y < begin.y) + if (to.Y < begin.Y) { - begin.y = to.y; + begin.Y = to.Y; } - if (to.x > end.x) + if (to.X > end.X) { - end.x = to.x; + end.X = to.X; } - if (to.y > end.y) + if (to.Y > end.Y) { - end.y = to.y; + end.Y = to.Y; } expanded._position = begin; @@ -151,48 +151,48 @@ namespace Godot } /// <summary> - /// Returns the area of the <see cref="Rect2i"/>. + /// Returns the area of the <see cref="Rect2I"/>. /// </summary> /// <returns>The area.</returns> public readonly int GetArea() { - return _size.x * _size.y; + return _size.X * _size.Y; } /// <summary> - /// Returns the center of the <see cref="Rect2i"/>, which is equal + /// Returns the center of the <see cref="Rect2I"/>, which is equal /// to <see cref="Position"/> + (<see cref="Size"/> / 2). /// If <see cref="Size"/> is an odd number, the returned center /// value will be rounded towards <see cref="Position"/>. /// </summary> /// <returns>The center.</returns> - public readonly Vector2i GetCenter() + public readonly Vector2I GetCenter() { return _position + (_size / 2); } /// <summary> - /// Returns a copy of the <see cref="Rect2i"/> grown by the specified amount + /// Returns a copy of the <see cref="Rect2I"/> grown by the specified amount /// on all sides. /// </summary> /// <seealso cref="GrowIndividual(int, int, int, int)"/> /// <seealso cref="GrowSide(Side, int)"/> /// <param name="by">The amount to grow by.</param> - /// <returns>The grown <see cref="Rect2i"/>.</returns> - public readonly Rect2i Grow(int by) + /// <returns>The grown <see cref="Rect2I"/>.</returns> + public readonly Rect2I Grow(int by) { - Rect2i g = this; + Rect2I g = this; - g._position.x -= by; - g._position.y -= by; - g._size.x += by * 2; - g._size.y += by * 2; + g._position.X -= by; + g._position.Y -= by; + g._size.X += by * 2; + g._size.Y += by * 2; return g; } /// <summary> - /// Returns a copy of the <see cref="Rect2i"/> grown by the specified amount + /// Returns a copy of the <see cref="Rect2I"/> grown by the specified amount /// on each side individually. /// </summary> /// <seealso cref="Grow(int)"/> @@ -201,31 +201,31 @@ namespace Godot /// <param name="top">The amount to grow by on the top side.</param> /// <param name="right">The amount to grow by on the right side.</param> /// <param name="bottom">The amount to grow by on the bottom side.</param> - /// <returns>The grown <see cref="Rect2i"/>.</returns> - public readonly Rect2i GrowIndividual(int left, int top, int right, int bottom) + /// <returns>The grown <see cref="Rect2I"/>.</returns> + public readonly Rect2I GrowIndividual(int left, int top, int right, int bottom) { - Rect2i g = this; + Rect2I g = this; - g._position.x -= left; - g._position.y -= top; - g._size.x += left + right; - g._size.y += top + bottom; + g._position.X -= left; + g._position.Y -= top; + g._size.X += left + right; + g._size.Y += top + bottom; return g; } /// <summary> - /// Returns a copy of the <see cref="Rect2i"/> grown by the specified amount + /// Returns a copy of the <see cref="Rect2I"/> grown by the specified amount /// on the specified <see cref="Side"/>. /// </summary> /// <seealso cref="Grow(int)"/> /// <seealso cref="GrowIndividual(int, int, int, int)"/> /// <param name="side">The side to grow.</param> /// <param name="by">The amount to grow by.</param> - /// <returns>The grown <see cref="Rect2i"/>.</returns> - public readonly Rect2i GrowSide(Side side, int by) + /// <returns>The grown <see cref="Rect2I"/>.</returns> + public readonly Rect2I GrowSide(Side side, int by) { - Rect2i g = this; + Rect2I g = this; g = g.GrowIndividual(Side.Left == side ? by : 0, Side.Top == side ? by : 0, @@ -236,76 +236,76 @@ namespace Godot } /// <summary> - /// Returns <see langword="true"/> if the <see cref="Rect2i"/> has - /// area, and <see langword="false"/> if the <see cref="Rect2i"/> + /// Returns <see langword="true"/> if the <see cref="Rect2I"/> has + /// area, and <see langword="false"/> if the <see cref="Rect2I"/> /// is linear, empty, or has a negative <see cref="Size"/>. /// See also <see cref="GetArea"/>. /// </summary> /// <returns> - /// A <see langword="bool"/> for whether or not the <see cref="Rect2i"/> has area. + /// A <see langword="bool"/> for whether or not the <see cref="Rect2I"/> has area. /// </returns> public readonly bool HasArea() { - return _size.x > 0 && _size.y > 0; + return _size.X > 0 && _size.Y > 0; } /// <summary> - /// Returns <see langword="true"/> if the <see cref="Rect2i"/> contains a point, + /// Returns <see langword="true"/> if the <see cref="Rect2I"/> contains a point, /// or <see langword="false"/> otherwise. /// </summary> /// <param name="point">The point to check.</param> /// <returns> - /// A <see langword="bool"/> for whether or not the <see cref="Rect2i"/> contains <paramref name="point"/>. + /// A <see langword="bool"/> for whether or not the <see cref="Rect2I"/> contains <paramref name="point"/>. /// </returns> - public readonly bool HasPoint(Vector2i point) + public readonly bool HasPoint(Vector2I point) { - if (point.x < _position.x) + if (point.X < _position.X) return false; - if (point.y < _position.y) + if (point.Y < _position.Y) return false; - if (point.x >= _position.x + _size.x) + if (point.X >= _position.X + _size.X) return false; - if (point.y >= _position.y + _size.y) + if (point.Y >= _position.Y + _size.Y) return false; return true; } /// <summary> - /// Returns <see langword="true"/> if the <see cref="Rect2i"/> overlaps with <paramref name="b"/> + /// Returns <see langword="true"/> if the <see cref="Rect2I"/> overlaps with <paramref name="b"/> /// (i.e. they have at least one point in common). /// </summary> - /// <param name="b">The other <see cref="Rect2i"/> to check for intersections with.</param> + /// <param name="b">The other <see cref="Rect2I"/> to check for intersections with.</param> /// <returns>A <see langword="bool"/> for whether or not they are intersecting.</returns> - public readonly bool Intersects(Rect2i b) + public readonly bool Intersects(Rect2I b) { - if (_position.x >= b._position.x + b._size.x) + if (_position.X >= b._position.X + b._size.X) return false; - if (_position.x + _size.x <= b._position.x) + if (_position.X + _size.X <= b._position.X) return false; - if (_position.y >= b._position.y + b._size.y) + if (_position.Y >= b._position.Y + b._size.Y) return false; - if (_position.y + _size.y <= b._position.y) + if (_position.Y + _size.Y <= b._position.Y) return false; return true; } /// <summary> - /// Returns a larger <see cref="Rect2i"/> that contains this <see cref="Rect2i"/> and <paramref name="b"/>. + /// Returns a larger <see cref="Rect2I"/> that contains this <see cref="Rect2I"/> and <paramref name="b"/>. /// </summary> - /// <param name="b">The other <see cref="Rect2i"/>.</param> - /// <returns>The merged <see cref="Rect2i"/>.</returns> - public readonly Rect2i Merge(Rect2i b) + /// <param name="b">The other <see cref="Rect2I"/>.</param> + /// <returns>The merged <see cref="Rect2I"/>.</returns> + public readonly Rect2I Merge(Rect2I b) { - Rect2i newRect; + Rect2I 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._position; // Make relative again @@ -313,93 +313,93 @@ namespace Godot } /// <summary> - /// Constructs a <see cref="Rect2i"/> from a position and size. + /// Constructs a <see cref="Rect2I"/> from a position and size. /// </summary> /// <param name="position">The position.</param> /// <param name="size">The size.</param> - public Rect2i(Vector2i position, Vector2i size) + public Rect2I(Vector2I position, Vector2I size) { _position = position; _size = size; } /// <summary> - /// Constructs a <see cref="Rect2i"/> from a position, width, and height. + /// Constructs a <see cref="Rect2I"/> from a position, width, and height. /// </summary> /// <param name="position">The position.</param> /// <param name="width">The width.</param> /// <param name="height">The height.</param> - public Rect2i(Vector2i position, int width, int height) + public Rect2I(Vector2I position, int width, int height) { _position = position; - _size = new Vector2i(width, height); + _size = new Vector2I(width, height); } /// <summary> - /// Constructs a <see cref="Rect2i"/> from x, y, and size. + /// Constructs a <see cref="Rect2I"/> from x, y, and size. /// </summary> /// <param name="x">The position's X coordinate.</param> /// <param name="y">The position's Y coordinate.</param> /// <param name="size">The size.</param> - public Rect2i(int x, int y, Vector2i size) + public Rect2I(int x, int y, Vector2I size) { - _position = new Vector2i(x, y); + _position = new Vector2I(x, y); _size = size; } /// <summary> - /// Constructs a <see cref="Rect2i"/> from x, y, width, and height. + /// Constructs a <see cref="Rect2I"/> from x, y, width, and height. /// </summary> /// <param name="x">The position's X coordinate.</param> /// <param name="y">The position's Y coordinate.</param> /// <param name="width">The width.</param> /// <param name="height">The height.</param> - public Rect2i(int x, int y, int width, int height) + public Rect2I(int x, int y, int width, int height) { - _position = new Vector2i(x, y); - _size = new Vector2i(width, height); + _position = new Vector2I(x, y); + _size = new Vector2I(width, height); } /// <summary> /// Returns <see langword="true"/> if the - /// <see cref="Rect2i"/>s are exactly equal. + /// <see cref="Rect2I"/>s are exactly equal. /// </summary> /// <param name="left">The left rect.</param> /// <param name="right">The right rect.</param> /// <returns>Whether or not the rects are equal.</returns> - public static bool operator ==(Rect2i left, Rect2i right) + public static bool operator ==(Rect2I left, Rect2I right) { return left.Equals(right); } /// <summary> /// Returns <see langword="true"/> if the - /// <see cref="Rect2i"/>s are not equal. + /// <see cref="Rect2I"/>s are not equal. /// </summary> /// <param name="left">The left rect.</param> /// <param name="right">The right rect.</param> /// <returns>Whether or not the rects are not equal.</returns> - public static bool operator !=(Rect2i left, Rect2i right) + public static bool operator !=(Rect2I left, Rect2I right) { return !left.Equals(right); } /// <summary> - /// Converts this <see cref="Rect2i"/> to a <see cref="Rect2"/>. + /// Converts this <see cref="Rect2I"/> to a <see cref="Rect2"/>. /// </summary> /// <param name="value">The rect to convert.</param> - public static implicit operator Rect2(Rect2i value) + public static implicit operator Rect2(Rect2I value) { return new Rect2(value._position, value._size); } /// <summary> - /// Converts a <see cref="Rect2"/> to a <see cref="Rect2i"/>. + /// Converts a <see cref="Rect2"/> to a <see cref="Rect2I"/>. /// </summary> /// <param name="value">The rect to convert.</param> - public static explicit operator Rect2i(Rect2 value) + public static explicit operator Rect2I(Rect2 value) { - return new Rect2i((Vector2i)value.Position, (Vector2i)value.Size); + return new Rect2I((Vector2I)value.Position, (Vector2I)value.Size); } /// <summary> @@ -409,7 +409,7 @@ namespace Godot /// <returns>Whether or not the rect and the other object are equal.</returns> public override readonly bool Equals(object obj) { - return obj is Rect2i other && Equals(other); + return obj is Rect2I other && Equals(other); } /// <summary> @@ -417,13 +417,13 @@ namespace Godot /// </summary> /// <param name="other">The other rect to compare.</param> /// <returns>Whether or not the rects are equal.</returns> - public readonly bool Equals(Rect2i other) + public readonly bool Equals(Rect2I other) { return _position.Equals(other._position) && _size.Equals(other._size); } /// <summary> - /// Serves as the hash function for <see cref="Rect2i"/>. + /// Serves as the hash function for <see cref="Rect2I"/>. /// </summary> /// <returns>A hash code for this rect.</returns> public override readonly int GetHashCode() @@ -432,7 +432,7 @@ namespace Godot } /// <summary> - /// Converts this <see cref="Rect2i"/> to a string. + /// Converts this <see cref="Rect2I"/> to a string. /// </summary> /// <returns>A string representation of this rect.</returns> public override readonly string ToString() @@ -441,7 +441,7 @@ namespace Godot } /// <summary> - /// Converts this <see cref="Rect2i"/> to a string with the given <paramref name="format"/>. + /// Converts this <see cref="Rect2I"/> to a string with the given <paramref name="format"/>. /// </summary> /// <returns>A string representation of this rect.</returns> public readonly string ToString(string format) diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/RID.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rid.cs index 59b9faf16c..150eb98fc7 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/RID.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rid.cs @@ -6,25 +6,25 @@ using Godot.NativeInterop; namespace Godot { /// <summary> - /// The RID type is used to access the unique integer ID of a resource. + /// The Rid type is used to access the unique integer ID of a resource. /// They are opaque, which means they do not grant access to the associated /// resource by themselves. They are used by and with the low-level Server /// classes such as <see cref="RenderingServer"/>. /// </summary> [StructLayout(LayoutKind.Sequential)] - public readonly struct RID + public readonly struct Rid { private readonly ulong _id; // Default is 0 - internal RID(ulong id) + internal Rid(ulong id) { _id = id; } /// <summary> - /// Constructs a new <see cref="RID"/> for the given <see cref="Object"/> <paramref name="from"/>. + /// Constructs a new <see cref="Rid"/> for the given <see cref="GodotObject"/> <paramref name="from"/>. /// </summary> - public RID(Object from) + public Rid(GodotObject from) => _id = from is Resource res ? res.GetRid()._id : default; /// <summary> @@ -34,9 +34,9 @@ namespace Godot public ulong Id => _id; /// <summary> - /// Converts this <see cref="RID"/> to a string. + /// Converts this <see cref="Rid"/> to a string. /// </summary> - /// <returns>A string representation of this RID.</returns> - public override string ToString() => $"RID({Id})"; + /// <returns>A string representation of this Rid.</returns> + public override string ToString() => $"Rid({Id})"; } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Signal.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Signal.cs index f9b8f06603..9ac8abd37b 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Signal.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Signal.cs @@ -5,13 +5,14 @@ namespace Godot /// </summary> public readonly struct Signal : IAwaitable<Variant[]> { - private readonly Object _owner; + private readonly GodotObject _owner; private readonly StringName _signalName; /// <summary> /// Object that contains the signal. /// </summary> - public Object Owner => _owner; + public GodotObject Owner => _owner; + /// <summary> /// Name of the signal. /// </summary> @@ -23,7 +24,7 @@ namespace Godot /// </summary> /// <param name="owner">Object that contains the signal.</param> /// <param name="name">Name of the signal.</param> - public Signal(Object owner, StringName name) + public Signal(GodotObject owner, StringName name) { _owner = owner; _signalName = name; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/SignalAwaiter.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/SignalAwaiter.cs index 96fb891086..a67f626d35 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/SignalAwaiter.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/SignalAwaiter.cs @@ -10,13 +10,13 @@ namespace Godot private Variant[] _result; private Action _continuation; - public SignalAwaiter(Object source, StringName signal, Object target) + public SignalAwaiter(GodotObject source, StringName signal, GodotObject target) { var awaiterGcHandle = CustomGCHandle.AllocStrong(this); using godot_string_name signalSrc = NativeFuncs.godotsharp_string_name_new_copy( (godot_string_name)(signal?.NativeValue ?? default)); - NativeFuncs.godotsharp_internal_signal_awaiter_connect(Object.GetPtr(source), in signalSrc, - Object.GetPtr(target), GCHandle.ToIntPtr(awaiterGcHandle)); + NativeFuncs.godotsharp_internal_signal_awaiter_connect(GodotObject.GetPtr(source), in signalSrc, + GodotObject.GetPtr(target), GCHandle.ToIntPtr(awaiterGcHandle)); } public bool IsCompleted => _completed; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs index d4329d78c1..cb9525b49c 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs @@ -675,15 +675,15 @@ namespace Godot /// <summary> /// Converts ASCII encoded array to string. - /// Fast alternative to <see cref="GetStringFromUTF8"/> if the + /// Fast alternative to <see cref="GetStringFromUtf8"/> if the /// content is ASCII-only. Unlike the UTF-8 function this function /// maps every byte to a character in the array. Multibyte sequences /// will not be interpreted correctly. For parsing user input always - /// use <see cref="GetStringFromUTF8"/>. + /// use <see cref="GetStringFromUtf8"/>. /// </summary> /// <param name="bytes">A byte array of ASCII characters (on the range of 0-127).</param> /// <returns>A string created from the bytes.</returns> - public static string GetStringFromASCII(this byte[] bytes) + public static string GetStringFromAscii(this byte[] bytes) { return Encoding.ASCII.GetString(bytes); } @@ -693,7 +693,7 @@ namespace Godot /// </summary> /// <param name="bytes">A byte array of UTF-16 characters.</param> /// <returns>A string created from the bytes.</returns> - public static string GetStringFromUTF16(this byte[] bytes) + public static string GetStringFromUtf16(this byte[] bytes) { return Encoding.Unicode.GetString(bytes); } @@ -703,14 +703,14 @@ namespace Godot /// </summary> /// <param name="bytes">A byte array of UTF-32 characters.</param> /// <returns>A string created from the bytes.</returns> - public static string GetStringFromUTF32(this byte[] bytes) + public static string GetStringFromUtf32(this byte[] bytes) { return Encoding.UTF32.GetString(bytes); } /// <summary> /// Converts UTF-8 encoded array to string. - /// Slower than <see cref="GetStringFromASCII"/> but supports UTF-8 + /// Slower than <see cref="GetStringFromAscii"/> but supports UTF-8 /// encoded data. Use this function if you are unsure about the /// source of the data. For user input this function /// should always be preferred. @@ -719,7 +719,7 @@ namespace Godot /// A byte array of UTF-8 characters (a character may take up multiple bytes). /// </param> /// <returns>A string created from the bytes.</returns> - public static string GetStringFromUTF8(this byte[] bytes) + public static string GetStringFromUtf8(this byte[] bytes) { return Encoding.UTF8.GetString(bytes); } @@ -1287,10 +1287,10 @@ namespace Godot /// <summary> /// Returns the MD5 hash of the string as an array of bytes. /// </summary> - /// <seealso cref="MD5Text(string)"/> + /// <seealso cref="Md5Text(string)"/> /// <param name="instance">The string to hash.</param> /// <returns>The MD5 hash of the string.</returns> - public static byte[] MD5Buffer(this string instance) + public static byte[] Md5Buffer(this string instance) { #pragma warning disable CA5351 // Do Not Use Broken Cryptographic Algorithms return MD5.HashData(Encoding.UTF8.GetBytes(instance)); @@ -1300,12 +1300,12 @@ namespace Godot /// <summary> /// Returns the MD5 hash of the string as a string. /// </summary> - /// <seealso cref="MD5Buffer(string)"/> + /// <seealso cref="Md5Buffer(string)"/> /// <param name="instance">The string to hash.</param> /// <returns>The MD5 hash of the string.</returns> - public static string MD5Text(this string instance) + public static string Md5Text(this string instance) { - return instance.MD5Buffer().HexEncode(); + return instance.Md5Buffer().HexEncode(); } /// <summary> @@ -1523,10 +1523,10 @@ namespace Godot /// <summary> /// Returns the SHA-1 hash of the string as an array of bytes. /// </summary> - /// <seealso cref="SHA1Text(string)"/> + /// <seealso cref="Sha1Text(string)"/> /// <param name="instance">The string to hash.</param> /// <returns>The SHA-1 hash of the string.</returns> - public static byte[] SHA1Buffer(this string instance) + public static byte[] Sha1Buffer(this string instance) { #pragma warning disable CA5350 // Do Not Use Weak Cryptographic Algorithms return SHA1.HashData(Encoding.UTF8.GetBytes(instance)); @@ -1536,21 +1536,21 @@ namespace Godot /// <summary> /// Returns the SHA-1 hash of the string as a string. /// </summary> - /// <seealso cref="SHA1Buffer(string)"/> + /// <seealso cref="Sha1Buffer(string)"/> /// <param name="instance">The string to hash.</param> /// <returns>The SHA-1 hash of the string.</returns> - public static string SHA1Text(this string instance) + public static string Sha1Text(this string instance) { - return instance.SHA1Buffer().HexEncode(); + return instance.Sha1Buffer().HexEncode(); } /// <summary> /// Returns the SHA-256 hash of the string as an array of bytes. /// </summary> - /// <seealso cref="SHA256Text(string)"/> + /// <seealso cref="Sha256Text(string)"/> /// <param name="instance">The string to hash.</param> /// <returns>The SHA-256 hash of the string.</returns> - public static byte[] SHA256Buffer(this string instance) + public static byte[] Sha256Buffer(this string instance) { return SHA256.HashData(Encoding.UTF8.GetBytes(instance)); } @@ -1558,12 +1558,12 @@ namespace Godot /// <summary> /// Returns the SHA-256 hash of the string as a string. /// </summary> - /// <seealso cref="SHA256Buffer(string)"/> + /// <seealso cref="Sha256Buffer(string)"/> /// <param name="instance">The string to hash.</param> /// <returns>The SHA-256 hash of the string.</returns> - public static string SHA256Text(this string instance) + public static string Sha256Text(this string instance) { - return instance.SHA256Buffer().HexEncode(); + return instance.Sha256Buffer().HexEncode(); } /// <summary> @@ -1745,15 +1745,15 @@ namespace Godot /// <summary> /// Converts the String (which is a character array) to PackedByteArray (which is an array of bytes). - /// The conversion is faster compared to <see cref="ToUTF8Buffer(string)"/>, + /// The conversion is faster compared to <see cref="ToUtf8Buffer(string)"/>, /// as this method assumes that all the characters in the String are ASCII characters. /// </summary> - /// <seealso cref="ToUTF8Buffer(string)"/> - /// <seealso cref="ToUTF16Buffer(string)"/> - /// <seealso cref="ToUTF32Buffer(string)"/> + /// <seealso cref="ToUtf8Buffer(string)"/> + /// <seealso cref="ToUtf16Buffer(string)"/> + /// <seealso cref="ToUtf32Buffer(string)"/> /// <param name="instance">The string to convert.</param> /// <returns>The string as ASCII encoded bytes.</returns> - public static byte[] ToASCIIBuffer(this string instance) + public static byte[] ToAsciiBuffer(this string instance) { return Encoding.ASCII.GetBytes(instance); } @@ -1783,12 +1783,12 @@ namespace Godot /// <summary> /// Converts the string (which is an array of characters) to an UTF-16 encoded array of bytes. /// </summary> - /// <seealso cref="ToASCIIBuffer(string)"/> - /// <seealso cref="ToUTF32Buffer(string)"/> - /// <seealso cref="ToUTF8Buffer(string)"/> + /// <seealso cref="ToAsciiBuffer(string)"/> + /// <seealso cref="ToUtf32Buffer(string)"/> + /// <seealso cref="ToUtf8Buffer(string)"/> /// <param name="instance">The string to convert.</param> /// <returns>The string as UTF-16 encoded bytes.</returns> - public static byte[] ToUTF16Buffer(this string instance) + public static byte[] ToUtf16Buffer(this string instance) { return Encoding.Unicode.GetBytes(instance); } @@ -1796,28 +1796,28 @@ namespace Godot /// <summary> /// Converts the string (which is an array of characters) to an UTF-32 encoded array of bytes. /// </summary> - /// <seealso cref="ToASCIIBuffer(string)"/> - /// <seealso cref="ToUTF16Buffer(string)"/> - /// <seealso cref="ToUTF8Buffer(string)"/> + /// <seealso cref="ToAsciiBuffer(string)"/> + /// <seealso cref="ToUtf16Buffer(string)"/> + /// <seealso cref="ToUtf8Buffer(string)"/> /// <param name="instance">The string to convert.</param> /// <returns>The string as UTF-32 encoded bytes.</returns> - public static byte[] ToUTF32Buffer(this string instance) + public static byte[] ToUtf32Buffer(this string instance) { return Encoding.UTF32.GetBytes(instance); } /// <summary> /// Converts the string (which is an array of characters) to an UTF-8 encoded array of bytes. - /// The conversion is a bit slower than <see cref="ToASCIIBuffer(string)"/>, + /// The conversion is a bit slower than <see cref="ToAsciiBuffer(string)"/>, /// but supports all UTF-8 characters. Therefore, you should prefer this function - /// over <see cref="ToASCIIBuffer(string)"/>. + /// over <see cref="ToAsciiBuffer(string)"/>. /// </summary> - /// <seealso cref="ToASCIIBuffer(string)"/> - /// <seealso cref="ToUTF16Buffer(string)"/> - /// <seealso cref="ToUTF32Buffer(string)"/> + /// <seealso cref="ToAsciiBuffer(string)"/> + /// <seealso cref="ToUtf16Buffer(string)"/> + /// <seealso cref="ToUtf32Buffer(string)"/> /// <param name="instance">The string to convert.</param> /// <returns>The string as UTF-8 encoded bytes.</returns> - public static byte[] ToUTF8Buffer(this string instance) + public static byte[] ToUtf8Buffer(this string instance) { return Encoding.UTF8.GetBytes(instance); } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs index 1dfa83ffc6..e939396926 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs @@ -19,23 +19,23 @@ namespace Godot /// <summary> /// The basis matrix's X vector (column 0). Equivalent to array index <c>[0]</c>. /// </summary> - public Vector2 x; + public Vector2 X; /// <summary> /// The basis matrix's Y vector (column 1). Equivalent to array index <c>[1]</c>. /// </summary> - public Vector2 y; + public Vector2 Y; /// <summary> /// The origin vector (column 2, the third column). Equivalent to array index <c>[2]</c>. /// The origin vector represents translation. /// </summary> - public Vector2 origin; + public Vector2 Origin; /// <summary> /// Returns the transform's rotation (in radians). /// </summary> - public readonly real_t Rotation => Mathf.Atan2(x.y, x.x); + public readonly real_t Rotation => Mathf.Atan2(X.Y, X.X); /// <summary> /// Returns the scale. @@ -45,13 +45,13 @@ namespace Godot get { real_t detSign = Mathf.Sign(BasisDeterminant()); - return new Vector2(x.Length(), detSign * y.Length()); + return new Vector2(X.Length(), detSign * Y.Length()); } } /// <summary> /// Access whole columns in the form of <see cref="Vector2"/>. - /// The third column is the <see cref="origin"/> vector. + /// The third column is the <see cref="Origin"/> vector. /// </summary> /// <param name="column">Which column vector.</param> /// <exception cref="ArgumentOutOfRangeException"> @@ -64,11 +64,11 @@ namespace Godot switch (column) { case 0: - return x; + return X; case 1: - return y; + return Y; case 2: - return origin; + return Origin; default: throw new ArgumentOutOfRangeException(nameof(column)); } @@ -78,13 +78,13 @@ namespace Godot switch (column) { case 0: - x = value; + X = value; return; case 1: - y = value; + Y = value; return; case 2: - origin = value; + Origin = value; return; default: throw new ArgumentOutOfRangeException(nameof(column)); @@ -94,7 +94,7 @@ namespace Godot /// <summary> /// Access matrix elements in column-major order. - /// The third column is the <see cref="origin"/> vector. + /// The third column is the <see cref="Origin"/> vector. /// </summary> /// <param name="column">Which column, the matrix horizontal position.</param> /// <param name="row">Which row, the matrix vertical position.</param> @@ -152,12 +152,12 @@ namespace Godot [MethodImpl(MethodImplOptions.AggressiveInlining)] private readonly real_t BasisDeterminant() { - return (x.x * y.y) - (x.y * y.x); + return (X.X * Y.Y) - (X.Y * Y.X); } /// <summary> /// Returns a vector transformed (multiplied) by the basis matrix. - /// This method does not account for translation (the <see cref="origin"/> vector). + /// This method does not account for translation (the <see cref="Origin"/> vector). /// </summary> /// <seealso cref="BasisXformInv(Vector2)"/> /// <param name="v">A vector to transform.</param> @@ -169,7 +169,7 @@ namespace Godot /// <summary> /// Returns a vector transformed (multiplied) by the inverse basis matrix. - /// This method does not account for translation (the <see cref="origin"/> vector). + /// This method does not account for translation (the <see cref="Origin"/> vector). /// /// Note: This results in a multiplication by the inverse of the /// basis matrix only if it represents a rotation-reflection. @@ -179,7 +179,7 @@ namespace Godot /// <returns>The inversely transformed vector.</returns> public readonly Vector2 BasisXformInv(Vector2 v) { - return new Vector2(x.Dot(v), y.Dot(v)); + return new Vector2(X.Dot(v), Y.Dot(v)); } /// <summary> @@ -222,14 +222,14 @@ namespace Godot } // Extract parameters - Vector2 p1 = origin; - Vector2 p2 = transform.origin; + Vector2 p1 = Origin; + Vector2 p2 = transform.Origin; // Construct matrix - var res = new Transform2D(Mathf.Atan2(v.y, v.x), p1.Lerp(p2, weight)); + var res = new Transform2D(Mathf.Atan2(v.Y, v.X), p1.Lerp(p2, weight)); Vector2 scale = s1.Lerp(s2, weight); - res.x *= scale; - res.y *= scale; + res.X *= scale; + res.Y *= scale; return res; } @@ -245,10 +245,10 @@ namespace Godot Transform2D inv = this; // Swap - inv.x.y = y.x; - inv.y.x = x.y; + inv.X.Y = Y.X; + inv.Y.X = X.Y; - inv.origin = inv.BasisXform(-inv.origin); + inv.Origin = inv.BasisXform(-inv.Origin); return inv; } @@ -260,7 +260,7 @@ namespace Godot /// <returns>Whether this vector is finite or not.</returns> public readonly bool IsFinite() { - return x.IsFinite() && y.IsFinite() && origin.IsFinite(); + return X.IsFinite() && Y.IsFinite() && Origin.IsFinite(); } /// <summary> @@ -272,15 +272,15 @@ namespace Godot { Transform2D on = this; - Vector2 onX = on.x; - Vector2 onY = on.y; + Vector2 onX = on.X; + Vector2 onY = on.Y; onX.Normalize(); onY = onY - (onX * onX.Dot(onY)); onY.Normalize(); - on.x = onX; - on.y = onY; + on.X = onX; + on.Y = onY; return on; } @@ -319,9 +319,9 @@ namespace Godot public readonly Transform2D Scaled(Vector2 scale) { Transform2D copy = this; - copy.x *= scale; - copy.y *= scale; - copy.origin *= scale; + copy.X *= scale; + copy.Y *= scale; + copy.Origin *= scale; return copy; } @@ -335,8 +335,8 @@ namespace Godot public readonly Transform2D ScaledLocal(Vector2 scale) { Transform2D copy = this; - copy.x *= scale; - copy.y *= scale; + copy.X *= scale; + copy.Y *= scale; return copy; } @@ -360,7 +360,7 @@ namespace Godot public readonly Transform2D Translated(Vector2 offset) { Transform2D copy = this; - copy.origin += offset; + copy.Origin += offset; return copy; } @@ -374,7 +374,7 @@ namespace Godot public readonly Transform2D TranslatedLocal(Vector2 offset) { Transform2D copy = this; - copy.origin += copy.BasisXform(offset); + copy.Origin += copy.BasisXform(offset); return copy; } @@ -409,26 +409,26 @@ namespace Godot /// <param name="originPos">The origin vector, or column index 2.</param> public Transform2D(Vector2 xAxis, Vector2 yAxis, Vector2 originPos) { - x = xAxis; - y = yAxis; - origin = originPos; + X = xAxis; + Y = yAxis; + Origin = originPos; } /// <summary> /// Constructs a transformation matrix from the given components. - /// Arguments are named such that xy is equal to calling <c>x.y</c>. - /// </summary> - /// <param name="xx">The X component of the X column vector, accessed via <c>t.x.x</c> or <c>[0][0]</c>.</param> - /// <param name="xy">The Y component of the X column vector, accessed via <c>t.x.y</c> or <c>[0][1]</c>.</param> - /// <param name="yx">The X component of the Y column vector, accessed via <c>t.y.x</c> or <c>[1][0]</c>.</param> - /// <param name="yy">The Y component of the Y column vector, accessed via <c>t.y.y</c> or <c>[1][1]</c>.</param> - /// <param name="ox">The X component of the origin vector, accessed via <c>t.origin.x</c> or <c>[2][0]</c>.</param> - /// <param name="oy">The Y component of the origin vector, accessed via <c>t.origin.y</c> or <c>[2][1]</c>.</param> + /// Arguments are named such that xy is equal to calling <c>X.Y</c>. + /// </summary> + /// <param name="xx">The X component of the X column vector, accessed via <c>t.X.X</c> or <c>[0][0]</c>.</param> + /// <param name="xy">The Y component of the X column vector, accessed via <c>t.X.Y</c> or <c>[0][1]</c>.</param> + /// <param name="yx">The X component of the Y column vector, accessed via <c>t.Y.X</c> or <c>[1][0]</c>.</param> + /// <param name="yy">The Y component of the Y column vector, accessed via <c>t.Y.Y</c> or <c>[1][1]</c>.</param> + /// <param name="ox">The X component of the origin vector, accessed via <c>t.Origin.X</c> or <c>[2][0]</c>.</param> + /// <param name="oy">The Y component of the origin vector, accessed via <c>t.Origin.Y</c> or <c>[2][1]</c>.</param> public Transform2D(real_t xx, real_t xy, real_t yx, real_t yy, real_t ox, real_t oy) { - x = new Vector2(xx, xy); - y = new Vector2(yx, yy); - origin = new Vector2(ox, oy); + X = new Vector2(xx, xy); + Y = new Vector2(yx, yy); + Origin = new Vector2(ox, oy); } /// <summary> @@ -440,10 +440,10 @@ namespace Godot public Transform2D(real_t rotation, Vector2 origin) { (real_t sin, real_t cos) = Mathf.SinCos(rotation); - x.x = y.y = cos; - x.y = y.x = sin; - y.x *= -1; - this.origin = origin; + X.X = Y.Y = cos; + X.Y = Y.X = sin; + Y.X *= -1; + Origin = origin; } /// <summary> @@ -459,11 +459,11 @@ namespace Godot { (real_t rotationSin, real_t rotationCos) = Mathf.SinCos(rotation); (real_t rotationSkewSin, real_t rotationSkewCos) = Mathf.SinCos(rotation + skew); - x.x = rotationCos * scale.x; - y.y = rotationSkewCos * scale.y; - y.x = -rotationSkewSin * scale.y; - x.y = rotationSin * scale.x; - this.origin = origin; + X.X = rotationCos * scale.X; + Y.Y = rotationSkewCos * scale.Y; + Y.X = -rotationSkewSin * scale.Y; + X.Y = rotationSin * scale.X; + Origin = origin; } /// <summary> @@ -476,17 +476,17 @@ namespace Godot /// <returns>The composed transform.</returns> public static Transform2D operator *(Transform2D left, Transform2D right) { - left.origin = left * right.origin; + left.Origin = left * right.Origin; - real_t x0 = left.Tdotx(right.x); - real_t x1 = left.Tdoty(right.x); - real_t y0 = left.Tdotx(right.y); - real_t y1 = left.Tdoty(right.y); + real_t x0 = left.Tdotx(right.X); + real_t x1 = left.Tdoty(right.X); + real_t y0 = left.Tdotx(right.Y); + real_t y1 = left.Tdoty(right.Y); - left.x.x = x0; - left.x.y = x1; - left.y.x = y0; - left.y.y = y1; + left.X.X = x0; + left.X.Y = x1; + left.Y.X = y0; + left.Y.Y = y1; return left; } @@ -499,7 +499,7 @@ namespace Godot /// <returns>The transformed Vector2.</returns> public static Vector2 operator *(Transform2D transform, Vector2 vector) { - return new Vector2(transform.Tdotx(vector), transform.Tdoty(vector)) + transform.origin; + return new Vector2(transform.Tdotx(vector), transform.Tdoty(vector)) + transform.Origin; } /// <summary> @@ -510,8 +510,8 @@ namespace Godot /// <returns>The inversely transformed Vector2.</returns> public static Vector2 operator *(Vector2 vector, Transform2D transform) { - Vector2 vInv = vector - transform.origin; - return new Vector2(transform.x.Dot(vInv), transform.y.Dot(vInv)); + Vector2 vInv = vector - transform.Origin; + return new Vector2(transform.X.Dot(vInv), transform.Y.Dot(vInv)); } /// <summary> @@ -523,8 +523,8 @@ namespace Godot public static Rect2 operator *(Transform2D transform, Rect2 rect) { Vector2 pos = transform * rect.Position; - Vector2 toX = transform.x * rect.Size.x; - Vector2 toY = transform.y * rect.Size.y; + Vector2 toX = transform.X * rect.Size.X; + Vector2 toY = transform.Y * rect.Size.Y; return new Rect2(pos, new Vector2()).Expand(pos + toX).Expand(pos + toY).Expand(pos + toX + toY); } @@ -538,9 +538,9 @@ namespace Godot public static Rect2 operator *(Rect2 rect, Transform2D transform) { Vector2 pos = rect.Position * transform; - Vector2 to1 = new Vector2(rect.Position.x, rect.Position.y + rect.Size.y) * transform; - Vector2 to2 = new Vector2(rect.Position.x + rect.Size.x, rect.Position.y + rect.Size.y) * transform; - Vector2 to3 = new Vector2(rect.Position.x + rect.Size.x, rect.Position.y) * transform; + Vector2 to1 = new Vector2(rect.Position.X, rect.Position.Y + rect.Size.Y) * transform; + Vector2 to2 = new Vector2(rect.Position.X + rect.Size.X, rect.Position.Y + rect.Size.Y) * transform; + Vector2 to3 = new Vector2(rect.Position.X + rect.Size.X, rect.Position.Y) * transform; return new Rect2(pos, new Vector2()).Expand(to1).Expand(to2).Expand(to3); } @@ -629,7 +629,7 @@ namespace Godot /// <returns>Whether or not the matrices are exactly equal.</returns> public readonly bool Equals(Transform2D other) { - return x.Equals(other.x) && y.Equals(other.y) && origin.Equals(other.origin); + return X.Equals(other.X) && Y.Equals(other.Y) && Origin.Equals(other.Origin); } /// <summary> @@ -640,7 +640,7 @@ namespace Godot /// <returns>Whether or not the matrices are approximately equal.</returns> public readonly bool IsEqualApprox(Transform2D other) { - return x.IsEqualApprox(other.x) && y.IsEqualApprox(other.y) && origin.IsEqualApprox(other.origin); + return X.IsEqualApprox(other.X) && Y.IsEqualApprox(other.Y) && Origin.IsEqualApprox(other.Origin); } /// <summary> @@ -649,7 +649,7 @@ namespace Godot /// <returns>A hash code for this transform.</returns> public override readonly int GetHashCode() { - return x.GetHashCode() ^ y.GetHashCode() ^ origin.GetHashCode(); + return X.GetHashCode() ^ Y.GetHashCode() ^ Origin.GetHashCode(); } /// <summary> @@ -658,7 +658,7 @@ namespace Godot /// <returns>A string representation of this transform.</returns> public override readonly string ToString() { - return $"[X: {x}, Y: {y}, O: {origin}]"; + return $"[X: {X}, Y: {Y}, O: {Origin}]"; } /// <summary> @@ -667,7 +667,7 @@ namespace Godot /// <returns>A string representation of this transform.</returns> public readonly string ToString(string format) { - return $"[X: {x.ToString(format)}, Y: {y.ToString(format)}, O: {origin.ToString(format)}]"; + return $"[X: {X.ToString(format)}, Y: {Y.ToString(format)}, O: {Origin.ToString(format)}]"; } } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs index ce5f98a6fc..b34e95c04d 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs @@ -6,7 +6,7 @@ namespace Godot /// <summary> /// 3×4 matrix (3 rows, 4 columns) used for 3D linear transformations. /// It can represent transformations such as translation, rotation, or scaling. - /// It consists of a <see cref="Basis"/> (first 3 columns) and a + /// It consists of a <see cref="Godot.Basis"/> (first 3 columns) and a /// <see cref="Vector3"/> for the origin (last column). /// /// For more information, read this documentation article: @@ -17,19 +17,19 @@ namespace Godot public struct Transform3D : IEquatable<Transform3D> { /// <summary> - /// The <see cref="Basis"/> of this transform. Contains the X, Y, and Z basis + /// The <see cref="Godot.Basis"/> of this transform. Contains the X, Y, and Z basis /// vectors (columns 0 to 2) and is responsible for rotation and scale. /// </summary> - public Basis basis; + public Basis Basis; /// <summary> /// The origin vector (column 3, the fourth column). Equivalent to array index <c>[3]</c>. /// </summary> - public Vector3 origin; + public Vector3 Origin; /// <summary> /// Access whole columns in the form of <see cref="Vector3"/>. - /// The fourth column is the <see cref="origin"/> vector. + /// The fourth column is the <see cref="Origin"/> vector. /// </summary> /// <param name="column">Which column vector.</param> /// <exception cref="ArgumentOutOfRangeException"> @@ -42,13 +42,13 @@ namespace Godot switch (column) { case 0: - return basis.Column0; + return Basis.Column0; case 1: - return basis.Column1; + return Basis.Column1; case 2: - return basis.Column2; + return Basis.Column2; case 3: - return origin; + return Origin; default: throw new ArgumentOutOfRangeException(nameof(column)); } @@ -58,16 +58,16 @@ namespace Godot switch (column) { case 0: - basis.Column0 = value; + Basis.Column0 = value; return; case 1: - basis.Column1 = value; + Basis.Column1 = value; return; case 2: - basis.Column2 = value; + Basis.Column2 = value; return; case 3: - origin = value; + Origin = value; return; default: throw new ArgumentOutOfRangeException(nameof(column)); @@ -77,7 +77,7 @@ namespace Godot /// <summary> /// Access matrix elements in column-major order. - /// The fourth column is the <see cref="origin"/> vector. + /// The fourth column is the <see cref="Origin"/> vector. /// </summary> /// <param name="column">Which column, the matrix horizontal position.</param> /// <param name="row">Which row, the matrix vertical position.</param> @@ -87,18 +87,18 @@ namespace Godot { if (column == 3) { - return origin[row]; + return Origin[row]; } - return basis[column, row]; + return Basis[column, row]; } set { if (column == 3) { - origin[row] = value; + Origin[row] = value; return; } - basis[column, row] = value; + Basis[column, row] = value; } } @@ -110,8 +110,8 @@ namespace Godot /// <returns>The inverse transformation matrix.</returns> public readonly Transform3D AffineInverse() { - Basis basisInv = basis.Inverse(); - return new Transform3D(basisInv, basisInv * -origin); + Basis basisInv = Basis.Inverse(); + return new Transform3D(basisInv, basisInv * -Origin); } /// <summary> @@ -124,19 +124,19 @@ namespace Godot /// <returns>The interpolated transform.</returns> public readonly Transform3D InterpolateWith(Transform3D transform, real_t weight) { - Vector3 sourceScale = basis.Scale; - Quaternion sourceRotation = basis.GetRotationQuaternion(); - Vector3 sourceLocation = origin; + Vector3 sourceScale = Basis.Scale; + Quaternion sourceRotation = Basis.GetRotationQuaternion(); + Vector3 sourceLocation = Origin; - Vector3 destinationScale = transform.basis.Scale; - Quaternion destinationRotation = transform.basis.GetRotationQuaternion(); - Vector3 destinationLocation = transform.origin; + Vector3 destinationScale = transform.Basis.Scale; + Quaternion destinationRotation = transform.Basis.GetRotationQuaternion(); + Vector3 destinationLocation = transform.Origin; var interpolated = new Transform3D(); Quaternion quaternion = sourceRotation.Slerp(destinationRotation, weight).Normalized(); Vector3 scale = sourceScale.Lerp(destinationScale, weight); - interpolated.basis.SetQuaternionScale(quaternion, scale); - interpolated.origin = sourceLocation.Lerp(destinationLocation, weight); + interpolated.Basis.SetQuaternionScale(quaternion, scale); + interpolated.Origin = sourceLocation.Lerp(destinationLocation, weight); return interpolated; } @@ -149,8 +149,8 @@ namespace Godot /// <returns>The inverse matrix.</returns> public readonly Transform3D Inverse() { - Basis basisTr = basis.Transposed(); - return new Transform3D(basisTr, basisTr * -origin); + Basis basisTr = Basis.Transposed(); + return new Transform3D(basisTr, basisTr * -Origin); } /// <summary> @@ -160,7 +160,7 @@ namespace Godot /// <returns>Whether this vector is finite or not.</returns> public readonly bool IsFinite() { - return basis.IsFinite() && origin.IsFinite(); + return Basis.IsFinite() && Origin.IsFinite(); } /// <summary> @@ -179,7 +179,7 @@ namespace Godot public readonly Transform3D LookingAt(Vector3 target, Vector3 up) { Transform3D t = this; - t.SetLookAt(origin, target, up); + t.SetLookAt(Origin, target, up); return t; } @@ -190,7 +190,7 @@ namespace Godot /// <returns>The orthonormalized transform.</returns> public readonly Transform3D Orthonormalized() { - return new Transform3D(basis.Orthonormalized(), origin); + return new Transform3D(Basis.Orthonormalized(), Origin); } /// <summary> @@ -219,7 +219,7 @@ namespace Godot public readonly Transform3D RotatedLocal(Vector3 axis, real_t angle) { Basis tmpBasis = new Basis(axis, angle); - return new Transform3D(basis * tmpBasis, origin); + return new Transform3D(Basis * tmpBasis, Origin); } /// <summary> @@ -231,7 +231,7 @@ namespace Godot /// <returns>The scaled transformation matrix.</returns> public readonly Transform3D Scaled(Vector3 scale) { - return new Transform3D(basis.Scaled(scale), origin * scale); + return new Transform3D(Basis.Scaled(scale), Origin * scale); } /// <summary> @@ -244,7 +244,7 @@ namespace Godot public readonly Transform3D ScaledLocal(Vector3 scale) { Basis tmpBasis = Basis.FromScale(scale); - return new Transform3D(basis * tmpBasis, origin); + return new Transform3D(Basis * tmpBasis, Origin); } private void SetLookAt(Vector3 eye, Vector3 target, Vector3 up) @@ -265,9 +265,9 @@ namespace Godot column0.Normalize(); column1.Normalize(); - basis = new Basis(column0, column1, column2); + Basis = new Basis(column0, column1, column2); - origin = eye; + Origin = eye; } /// <summary> @@ -279,7 +279,7 @@ namespace Godot /// <returns>The translated matrix.</returns> public readonly Transform3D Translated(Vector3 offset) { - return new Transform3D(basis, origin + offset); + return new Transform3D(Basis, Origin + offset); } /// <summary> @@ -291,11 +291,11 @@ namespace Godot /// <returns>The translated matrix.</returns> public readonly Transform3D TranslatedLocal(Vector3 offset) { - return new Transform3D(basis, new Vector3 + return new Transform3D(Basis, new Vector3 ( - origin[0] + basis.Row0.Dot(offset), - origin[1] + basis.Row1.Dot(offset), - origin[2] + basis.Row2.Dot(offset) + Origin[0] + Basis.Row0.Dot(offset), + Origin[1] + Basis.Row1.Dot(offset), + Origin[2] + Basis.Row2.Dot(offset) )); } @@ -337,64 +337,64 @@ namespace Godot /// <param name="origin">The origin vector, or column index 3.</param> public Transform3D(Vector3 column0, Vector3 column1, Vector3 column2, Vector3 origin) { - basis = new Basis(column0, column1, column2); - this.origin = origin; + Basis = new Basis(column0, column1, column2); + Origin = origin; } /// <summary> /// Constructs a transformation matrix from the given components. - /// Arguments are named such that xy is equal to calling <c>basis.x.y</c>. - /// </summary> - /// <param name="xx">The X component of the X column vector, accessed via <c>t.basis.x.x</c> or <c>[0][0]</c>.</param> - /// <param name="yx">The X component of the Y column vector, accessed via <c>t.basis.y.x</c> or <c>[1][0]</c>.</param> - /// <param name="zx">The X component of the Z column vector, accessed via <c>t.basis.z.x</c> or <c>[2][0]</c>.</param> - /// <param name="xy">The Y component of the X column vector, accessed via <c>t.basis.x.y</c> or <c>[0][1]</c>.</param> - /// <param name="yy">The Y component of the Y column vector, accessed via <c>t.basis.y.y</c> or <c>[1][1]</c>.</param> - /// <param name="zy">The Y component of the Z column vector, accessed via <c>t.basis.y.y</c> or <c>[2][1]</c>.</param> - /// <param name="xz">The Z component of the X column vector, accessed via <c>t.basis.x.y</c> or <c>[0][2]</c>.</param> - /// <param name="yz">The Z component of the Y column vector, accessed via <c>t.basis.y.y</c> or <c>[1][2]</c>.</param> - /// <param name="zz">The Z component of the Z column vector, accessed via <c>t.basis.y.y</c> or <c>[2][2]</c>.</param> - /// <param name="ox">The X component of the origin vector, accessed via <c>t.origin.x</c> or <c>[2][0]</c>.</param> - /// <param name="oy">The Y component of the origin vector, accessed via <c>t.origin.y</c> or <c>[2][1]</c>.</param> - /// <param name="oz">The Z component of the origin vector, accessed via <c>t.origin.z</c> or <c>[2][2]</c>.</param> + /// Arguments are named such that xy is equal to calling <c>Basis.X.Y</c>. + /// </summary> + /// <param name="xx">The X component of the X column vector, accessed via <c>t.Basis.X.X</c> or <c>[0][0]</c>.</param> + /// <param name="yx">The X component of the Y column vector, accessed via <c>t.Basis.Y.X</c> or <c>[1][0]</c>.</param> + /// <param name="zx">The X component of the Z column vector, accessed via <c>t.Basis.Z.X</c> or <c>[2][0]</c>.</param> + /// <param name="xy">The Y component of the X column vector, accessed via <c>t.Basis.X.Y</c> or <c>[0][1]</c>.</param> + /// <param name="yy">The Y component of the Y column vector, accessed via <c>t.Basis.Y.Y</c> or <c>[1][1]</c>.</param> + /// <param name="zy">The Y component of the Z column vector, accessed via <c>t.Basis.Y.Y</c> or <c>[2][1]</c>.</param> + /// <param name="xz">The Z component of the X column vector, accessed via <c>t.Basis.X.Y</c> or <c>[0][2]</c>.</param> + /// <param name="yz">The Z component of the Y column vector, accessed via <c>t.Basis.Y.Y</c> or <c>[1][2]</c>.</param> + /// <param name="zz">The Z component of the Z column vector, accessed via <c>t.Basis.Y.Y</c> or <c>[2][2]</c>.</param> + /// <param name="ox">The X component of the origin vector, accessed via <c>t.Origin.X</c> or <c>[2][0]</c>.</param> + /// <param name="oy">The Y component of the origin vector, accessed via <c>t.Origin.Y</c> or <c>[2][1]</c>.</param> + /// <param name="oz">The Z component of the origin vector, accessed via <c>t.Origin.Z</c> or <c>[2][2]</c>.</param> public Transform3D(real_t xx, real_t yx, real_t zx, real_t xy, real_t yy, real_t zy, real_t xz, real_t yz, real_t zz, real_t ox, real_t oy, real_t oz) { - basis = new Basis(xx, yx, zx, xy, yy, zy, xz, yz, zz); - origin = new Vector3(ox, oy, oz); + Basis = new Basis(xx, yx, zx, xy, yy, zy, xz, yz, zz); + Origin = new Vector3(ox, oy, oz); } /// <summary> /// Constructs a transformation matrix from the given <paramref name="basis"/> and /// <paramref name="origin"/> vector. /// </summary> - /// <param name="basis">The <see cref="Basis"/> to create the basis from.</param> + /// <param name="basis">The <see cref="Godot.Basis"/> to create the basis from.</param> /// <param name="origin">The origin vector, or column index 3.</param> public Transform3D(Basis basis, Vector3 origin) { - this.basis = basis; - this.origin = origin; + Basis = basis; + Origin = origin; } /// <summary> /// Constructs a transformation matrix from the given <paramref name="projection"/> - /// by trimming the last row of the projection matrix (<c>projection.x.w</c>, - /// <c>projection.y.w</c>, <c>projection.z.w</c>, and <c>projection.w.w</c> + /// by trimming the last row of the projection matrix (<c>projection.X.W</c>, + /// <c>projection.Y.W</c>, <c>projection.Z.W</c>, and <c>projection.W.W</c> /// are not copied over). /// </summary> /// <param name="projection">The <see cref="Projection"/> to create the transform from.</param> public Transform3D(Projection projection) { - basis = new Basis + Basis = new Basis ( - projection.x.x, projection.y.x, projection.z.x, - projection.x.y, projection.y.y, projection.z.y, - projection.x.z, projection.y.z, projection.z.z + projection.X.X, projection.Y.X, projection.Z.X, + projection.X.Y, projection.Y.Y, projection.Z.Y, + projection.X.Z, projection.Y.Z, projection.Z.Z ); - origin = new Vector3 + Origin = new Vector3 ( - projection.w.x, - projection.w.y, - projection.w.z + projection.W.X, + projection.W.Y, + projection.W.Z ); } @@ -408,8 +408,8 @@ namespace Godot /// <returns>The composed transform.</returns> public static Transform3D operator *(Transform3D left, Transform3D right) { - left.origin = left * right.origin; - left.basis *= right.basis; + left.Origin = left * right.Origin; + left.Basis *= right.Basis; return left; } @@ -423,9 +423,9 @@ namespace Godot { return new Vector3 ( - transform.basis.Row0.Dot(vector) + transform.origin.x, - transform.basis.Row1.Dot(vector) + transform.origin.y, - transform.basis.Row2.Dot(vector) + transform.origin.z + transform.Basis.Row0.Dot(vector) + transform.Origin.X, + transform.Basis.Row1.Dot(vector) + transform.Origin.Y, + transform.Basis.Row2.Dot(vector) + transform.Origin.Z ); } @@ -440,13 +440,13 @@ namespace Godot /// <returns>The inversely transformed Vector3.</returns> public static Vector3 operator *(Vector3 vector, Transform3D transform) { - Vector3 vInv = vector - transform.origin; + Vector3 vInv = vector - transform.Origin; return new Vector3 ( - (transform.basis.Row0[0] * vInv.x) + (transform.basis.Row1[0] * vInv.y) + (transform.basis.Row2[0] * vInv.z), - (transform.basis.Row0[1] * vInv.x) + (transform.basis.Row1[1] * vInv.y) + (transform.basis.Row2[1] * vInv.z), - (transform.basis.Row0[2] * vInv.x) + (transform.basis.Row1[2] * vInv.y) + (transform.basis.Row2[2] * vInv.z) + (transform.Basis.Row0[0] * vInv.X) + (transform.Basis.Row1[0] * vInv.Y) + (transform.Basis.Row2[0] * vInv.Z), + (transform.Basis.Row0[1] * vInv.X) + (transform.Basis.Row1[1] * vInv.Y) + (transform.Basis.Row2[1] * vInv.Z), + (transform.Basis.Row0[2] * vInv.X) + (transform.Basis.Row1[2] * vInv.Y) + (transform.Basis.Row2[2] * vInv.Z) ); } @@ -456,19 +456,19 @@ namespace Godot /// <param name="transform">The transformation to apply.</param> /// <param name="aabb">An AABB to transform.</param> /// <returns>The transformed AABB.</returns> - public static AABB operator *(Transform3D transform, AABB aabb) + public static Aabb operator *(Transform3D transform, Aabb aabb) { Vector3 min = aabb.Position; Vector3 max = aabb.Position + aabb.Size; - Vector3 tmin = transform.origin; - Vector3 tmax = transform.origin; + Vector3 tmin = transform.Origin; + Vector3 tmax = transform.Origin; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { - real_t e = transform.basis[i][j] * min[j]; - real_t f = transform.basis[i][j] * max[j]; + real_t e = transform.Basis[i][j] * min[j]; + real_t f = transform.Basis[i][j] * max[j]; if (e < f) { tmin[i] += e; @@ -482,7 +482,7 @@ namespace Godot } } - return new AABB(tmin, tmax - tmin); + return new Aabb(tmin, tmax - tmin); } /// <summary> @@ -491,18 +491,18 @@ namespace Godot /// <param name="aabb">An AABB to inversely transform.</param> /// <param name="transform">The transformation to apply.</param> /// <returns>The inversely transformed AABB.</returns> - public static AABB operator *(AABB aabb, Transform3D transform) + public static Aabb operator *(Aabb aabb, Transform3D transform) { - Vector3 pos = new Vector3(aabb.Position.x + aabb.Size.x, aabb.Position.y + aabb.Size.y, aabb.Position.z + aabb.Size.z) * transform; - Vector3 to1 = new Vector3(aabb.Position.x + aabb.Size.x, aabb.Position.y + aabb.Size.y, aabb.Position.z) * transform; - Vector3 to2 = new Vector3(aabb.Position.x + aabb.Size.x, aabb.Position.y, aabb.Position.z + aabb.Size.z) * transform; - Vector3 to3 = new Vector3(aabb.Position.x + aabb.Size.x, aabb.Position.y, aabb.Position.z) * transform; - Vector3 to4 = new Vector3(aabb.Position.x, aabb.Position.y + aabb.Size.y, aabb.Position.z + aabb.Size.z) * transform; - Vector3 to5 = new Vector3(aabb.Position.x, aabb.Position.y + aabb.Size.y, aabb.Position.z) * transform; - Vector3 to6 = new Vector3(aabb.Position.x, aabb.Position.y, aabb.Position.z + aabb.Size.z) * transform; - Vector3 to7 = new Vector3(aabb.Position.x, aabb.Position.y, aabb.Position.z) * transform; + Vector3 pos = new Vector3(aabb.Position.X + aabb.Size.X, aabb.Position.Y + aabb.Size.Y, aabb.Position.Z + aabb.Size.Z) * transform; + Vector3 to1 = new Vector3(aabb.Position.X + aabb.Size.X, aabb.Position.Y + aabb.Size.Y, aabb.Position.Z) * transform; + Vector3 to2 = new Vector3(aabb.Position.X + aabb.Size.X, aabb.Position.Y, aabb.Position.Z + aabb.Size.Z) * transform; + Vector3 to3 = new Vector3(aabb.Position.X + aabb.Size.X, aabb.Position.Y, aabb.Position.Z) * transform; + Vector3 to4 = new Vector3(aabb.Position.X, aabb.Position.Y + aabb.Size.Y, aabb.Position.Z + aabb.Size.Z) * transform; + Vector3 to5 = new Vector3(aabb.Position.X, aabb.Position.Y + aabb.Size.Y, aabb.Position.Z) * transform; + Vector3 to6 = new Vector3(aabb.Position.X, aabb.Position.Y, aabb.Position.Z + aabb.Size.Z) * transform; + Vector3 to7 = new Vector3(aabb.Position.X, aabb.Position.Y, aabb.Position.Z) * transform; - return new AABB(pos, new Vector3()).Expand(to1).Expand(to2).Expand(to3).Expand(to4).Expand(to5).Expand(to6).Expand(to7); + return new Aabb(pos, new Vector3()).Expand(to1).Expand(to2).Expand(to3).Expand(to4).Expand(to5).Expand(to6).Expand(to7); } /// <summary> @@ -513,7 +513,7 @@ namespace Godot /// <returns>The transformed Plane.</returns> public static Plane operator *(Transform3D transform, Plane plane) { - Basis bInvTrans = transform.basis.Inverse().Transposed(); + Basis bInvTrans = transform.Basis.Inverse().Transposed(); // Transform a single point on the plane. Vector3 point = transform * (plane.Normal * plane.D); @@ -534,7 +534,7 @@ namespace Godot public static Plane operator *(Plane plane, Transform3D transform) { Transform3D tInv = transform.AffineInverse(); - Basis bTrans = transform.basis.Transposed(); + Basis bTrans = transform.Basis.Transposed(); // Transform a single point on the plane. Vector3 point = tInv * (plane.Normal * plane.D); @@ -637,7 +637,7 @@ namespace Godot /// <returns>Whether or not the matrices are exactly equal.</returns> public readonly bool Equals(Transform3D other) { - return basis.Equals(other.basis) && origin.Equals(other.origin); + return Basis.Equals(other.Basis) && Origin.Equals(other.Origin); } /// <summary> @@ -648,7 +648,7 @@ namespace Godot /// <returns>Whether or not the matrices are approximately equal.</returns> public readonly bool IsEqualApprox(Transform3D other) { - return basis.IsEqualApprox(other.basis) && origin.IsEqualApprox(other.origin); + return Basis.IsEqualApprox(other.Basis) && Origin.IsEqualApprox(other.Origin); } /// <summary> @@ -657,7 +657,7 @@ namespace Godot /// <returns>A hash code for this transform.</returns> public override readonly int GetHashCode() { - return basis.GetHashCode() ^ origin.GetHashCode(); + return Basis.GetHashCode() ^ Origin.GetHashCode(); } /// <summary> @@ -666,7 +666,7 @@ namespace Godot /// <returns>A string representation of this transform.</returns> public override readonly string ToString() { - return $"[X: {basis.x}, Y: {basis.y}, Z: {basis.z}, O: {origin}]"; + return $"[X: {Basis.X}, Y: {Basis.Y}, Z: {Basis.Z}, O: {Origin}]"; } /// <summary> @@ -675,7 +675,7 @@ namespace Godot /// <returns>A string representation of this transform.</returns> public readonly string ToString(string format) { - return $"[X: {basis.x.ToString(format)}, Y: {basis.y.ToString(format)}, Z: {basis.z.ToString(format)}, O: {origin.ToString(format)}]"; + return $"[X: {Basis.X.ToString(format)}, Y: {Basis.Y.ToString(format)}, Z: {Basis.Z.ToString(format)}, O: {Origin.ToString(format)}]"; } } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Variant.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Variant.cs index 0ac2e2969c..9aad965ad0 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Variant.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Variant.cs @@ -60,13 +60,13 @@ public partial struct Variant : IDisposable case Type.Int: case Type.Float: case Type.Vector2: - case Type.Vector2i: + case Type.Vector2I: case Type.Rect2: - case Type.Rect2i: + case Type.Rect2I: case Type.Vector3: - case Type.Vector3i: + case Type.Vector3I: case Type.Vector4: - case Type.Vector4i: + case Type.Vector4I: case Type.Plane: case Type.Quaternion: case Type.Color: @@ -117,24 +117,24 @@ public partial struct Variant : IDisposable Type.Float => AsDouble(), Type.String => AsString(), Type.Vector2 => AsVector2(), - Type.Vector2i => AsVector2i(), + Type.Vector2I => AsVector2I(), Type.Rect2 => AsRect2(), - Type.Rect2i => AsRect2i(), + Type.Rect2I => AsRect2I(), Type.Vector3 => AsVector3(), - Type.Vector3i => AsVector3i(), - Type.Transform2d => AsTransform2D(), + Type.Vector3I => AsVector3I(), + Type.Transform2D => AsTransform2D(), Type.Vector4 => AsVector4(), - Type.Vector4i => AsVector4i(), + Type.Vector4I => AsVector4I(), Type.Plane => AsPlane(), Type.Quaternion => AsQuaternion(), - Type.Aabb => AsAABB(), + Type.Aabb => AsAabb(), Type.Basis => AsBasis(), - Type.Transform3d => AsTransform3D(), + Type.Transform3D => AsTransform3D(), Type.Projection => AsProjection(), Type.Color => AsColor(), Type.StringName => AsStringName(), Type.NodePath => AsNodePath(), - Type.Rid => AsRID(), + Type.Rid => AsRid(), Type.Object => AsGodotObject(), Type.Callable => AsCallable(), Type.Signal => AsSignal(), @@ -219,16 +219,16 @@ public partial struct Variant : IDisposable VariantUtils.ConvertToVector2((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Vector2i AsVector2i() => - VariantUtils.ConvertToVector2i((godot_variant)NativeVar); + public Vector2I AsVector2I() => + VariantUtils.ConvertToVector2I((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] public Rect2 AsRect2() => VariantUtils.ConvertToRect2((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Rect2i AsRect2i() => - VariantUtils.ConvertToRect2i((godot_variant)NativeVar); + public Rect2I AsRect2I() => + VariantUtils.ConvertToRect2I((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] public Transform2D AsTransform2D() => @@ -239,8 +239,8 @@ public partial struct Variant : IDisposable VariantUtils.ConvertToVector3((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Vector3i AsVector3i() => - VariantUtils.ConvertToVector3i((godot_variant)NativeVar); + public Vector3I AsVector3I() => + VariantUtils.ConvertToVector3I((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] public Basis AsBasis() => @@ -259,16 +259,16 @@ public partial struct Variant : IDisposable VariantUtils.ConvertToVector4((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Vector4i AsVector4i() => - VariantUtils.ConvertToVector4i((godot_variant)NativeVar); + public Vector4I AsVector4I() => + VariantUtils.ConvertToVector4I((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] public Projection AsProjection() => VariantUtils.ConvertToProjection((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public AABB AsAABB() => - VariantUtils.ConvertToAABB((godot_variant)NativeVar); + public Aabb AsAabb() => + VariantUtils.ConvertToAabb((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] public Color AsColor() => @@ -324,7 +324,7 @@ public partial struct Variant : IDisposable [MethodImpl(MethodImplOptions.AggressiveInlining)] public T[] AsGodotObjectArray<T>() - where T : Godot.Object => + where T : GodotObject => VariantUtils.ConvertToSystemArrayOfGodotObject<T>((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -344,11 +344,11 @@ public partial struct Variant : IDisposable VariantUtils.ConvertToSystemArrayOfNodePath((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public RID[] AsSystemArrayOfRID() => - VariantUtils.ConvertToSystemArrayOfRID((godot_variant)NativeVar); + public Rid[] AsSystemArrayOfRid() => + VariantUtils.ConvertToSystemArrayOfRid((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Godot.Object AsGodotObject() => + public GodotObject AsGodotObject() => VariantUtils.ConvertToGodotObject((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -360,8 +360,8 @@ public partial struct Variant : IDisposable VariantUtils.ConvertToNodePath((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public RID AsRID() => - VariantUtils.ConvertToRID((godot_variant)NativeVar); + public Rid AsRid() => + VariantUtils.ConvertToRid((godot_variant)NativeVar); [MethodImpl(MethodImplOptions.AggressiveInlining)] public Collections.Dictionary AsGodotDictionary() => @@ -416,13 +416,13 @@ public partial struct Variant : IDisposable public static explicit operator Vector2(Variant from) => from.AsVector2(); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static explicit operator Vector2i(Variant from) => from.AsVector2i(); + public static explicit operator Vector2I(Variant from) => from.AsVector2I(); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static explicit operator Rect2(Variant from) => from.AsRect2(); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static explicit operator Rect2i(Variant from) => from.AsRect2i(); + public static explicit operator Rect2I(Variant from) => from.AsRect2I(); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static explicit operator Transform2D(Variant from) => from.AsTransform2D(); @@ -431,7 +431,7 @@ public partial struct Variant : IDisposable public static explicit operator Vector3(Variant from) => from.AsVector3(); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static explicit operator Vector3i(Variant from) => from.AsVector3i(); + public static explicit operator Vector3I(Variant from) => from.AsVector3I(); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static explicit operator Basis(Variant from) => from.AsBasis(); @@ -446,13 +446,13 @@ public partial struct Variant : IDisposable public static explicit operator Vector4(Variant from) => from.AsVector4(); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static explicit operator Vector4i(Variant from) => from.AsVector4i(); + public static explicit operator Vector4I(Variant from) => from.AsVector4I(); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static explicit operator Projection(Variant from) => from.AsProjection(); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static explicit operator AABB(Variant from) => from.AsAABB(); + public static explicit operator Aabb(Variant from) => from.AsAabb(); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static explicit operator Color(Variant from) => from.AsColor(); @@ -500,10 +500,10 @@ public partial struct Variant : IDisposable public static explicit operator NodePath[](Variant from) => from.AsSystemArrayOfNodePath(); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static explicit operator RID[](Variant from) => from.AsSystemArrayOfRID(); + public static explicit operator Rid[](Variant from) => from.AsSystemArrayOfRid(); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static explicit operator Godot.Object(Variant from) => from.AsGodotObject(); + public static explicit operator GodotObject(Variant from) => from.AsGodotObject(); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static explicit operator StringName(Variant from) => from.AsStringName(); @@ -512,7 +512,7 @@ public partial struct Variant : IDisposable public static explicit operator NodePath(Variant from) => from.AsNodePath(); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static explicit operator RID(Variant from) => from.AsRID(); + public static explicit operator Rid(Variant from) => from.AsRid(); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static explicit operator Collections.Dictionary(Variant from) => from.AsGodotDictionary(); @@ -566,13 +566,13 @@ public partial struct Variant : IDisposable public static Variant CreateFrom(Vector2 from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Variant CreateFrom(Vector2i from) => from; + public static Variant CreateFrom(Vector2I from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Variant CreateFrom(Rect2 from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Variant CreateFrom(Rect2i from) => from; + public static Variant CreateFrom(Rect2I from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Variant CreateFrom(Transform2D from) => from; @@ -581,7 +581,7 @@ public partial struct Variant : IDisposable public static Variant CreateFrom(Vector3 from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Variant CreateFrom(Vector3i from) => from; + public static Variant CreateFrom(Vector3I from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Variant CreateFrom(Basis from) => from; @@ -596,13 +596,13 @@ public partial struct Variant : IDisposable public static Variant CreateFrom(Vector4 from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Variant CreateFrom(Vector4i from) => from; + public static Variant CreateFrom(Vector4I from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Variant CreateFrom(Projection from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Variant CreateFrom(AABB from) => from; + public static Variant CreateFrom(Aabb from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Variant CreateFrom(Color from) => from; @@ -644,7 +644,7 @@ public partial struct Variant : IDisposable public static Variant CreateFrom(Span<Color> from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Variant CreateFrom(Godot.Object[] from) => from; + public static Variant CreateFrom(GodotObject[] from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Variant CreateFrom<[MustBeVariant] TKey, [MustBeVariant] TValue>(Collections.Dictionary<TKey, TValue> from) => @@ -661,10 +661,10 @@ public partial struct Variant : IDisposable public static Variant CreateFrom(Span<NodePath> from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Variant CreateFrom(Span<RID> from) => from; + public static Variant CreateFrom(Span<Rid> from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Variant CreateFrom(Godot.Object from) => from; + public static Variant CreateFrom(GodotObject from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Variant CreateFrom(StringName from) => from; @@ -673,7 +673,7 @@ public partial struct Variant : IDisposable public static Variant CreateFrom(NodePath from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Variant CreateFrom(RID from) => from; + public static Variant CreateFrom(Rid from) => from; [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Variant CreateFrom(Collections.Dictionary from) => from; @@ -740,16 +740,16 @@ public partial struct Variant : IDisposable CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromVector2(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static implicit operator Variant(Vector2i from) => - CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromVector2i(from)); + public static implicit operator Variant(Vector2I from) => + CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromVector2I(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static implicit operator Variant(Rect2 from) => CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromRect2(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static implicit operator Variant(Rect2i from) => - CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromRect2i(from)); + public static implicit operator Variant(Rect2I from) => + CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromRect2I(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static implicit operator Variant(Transform2D from) => @@ -760,8 +760,8 @@ public partial struct Variant : IDisposable CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromVector3(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static implicit operator Variant(Vector3i from) => - CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromVector3i(from)); + public static implicit operator Variant(Vector3I from) => + CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromVector3I(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static implicit operator Variant(Basis from) => @@ -780,16 +780,16 @@ public partial struct Variant : IDisposable CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromVector4(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static implicit operator Variant(Vector4i from) => - CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromVector4i(from)); + public static implicit operator Variant(Vector4I from) => + CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromVector4I(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static implicit operator Variant(Projection from) => CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromProjection(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static implicit operator Variant(AABB from) => - CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromAABB(from)); + public static implicit operator Variant(Aabb from) => + CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromAabb(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static implicit operator Variant(Color from) => @@ -844,7 +844,7 @@ public partial struct Variant : IDisposable (Variant)from.AsSpan(); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static implicit operator Variant(Godot.Object[] from) => + public static implicit operator Variant(GodotObject[] from) => CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromSystemArrayOfGodotObject(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -856,7 +856,7 @@ public partial struct Variant : IDisposable (Variant)from.AsSpan(); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static implicit operator Variant(RID[] from) => + public static implicit operator Variant(Rid[] from) => (Variant)from.AsSpan(); [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -904,11 +904,11 @@ public partial struct Variant : IDisposable CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromSystemArrayOfNodePath(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static implicit operator Variant(Span<RID> from) => - CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromSystemArrayOfRID(from)); + public static implicit operator Variant(Span<Rid> from) => + CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromSystemArrayOfRid(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static implicit operator Variant(Godot.Object from) => + public static implicit operator Variant(GodotObject from) => CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromGodotObject(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -920,8 +920,8 @@ public partial struct Variant : IDisposable CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromNodePath(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static implicit operator Variant(RID from) => - CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromRID(from)); + public static implicit operator Variant(Rid from) => + CreateTakingOwnershipOfDisposableValue(VariantUtils.CreateFromRid(from)); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static implicit operator Variant(Collections.Dictionary from) => diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs index 07cb34cadd..0bf8f25f06 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs @@ -29,12 +29,12 @@ namespace Godot /// <summary> /// The vector's X component. Also accessible by using the index position <c>[0]</c>. /// </summary> - public real_t x; + public real_t X; /// <summary> /// The vector's Y component. Also accessible by using the index position <c>[1]</c>. /// </summary> - public real_t y; + public real_t Y; /// <summary> /// Access vector components using their index. @@ -43,8 +43,8 @@ namespace Godot /// <paramref name="index"/> is not 0 or 1. /// </exception> /// <value> - /// <c>[0]</c> is equivalent to <see cref="x"/>, - /// <c>[1]</c> is equivalent to <see cref="y"/>. + /// <c>[0]</c> is equivalent to <see cref="X"/>, + /// <c>[1]</c> is equivalent to <see cref="Y"/>. /// </value> public real_t this[int index] { @@ -53,9 +53,9 @@ namespace Godot switch (index) { case 0: - return x; + return X; case 1: - return y; + return Y; default: throw new ArgumentOutOfRangeException(nameof(index)); } @@ -65,10 +65,10 @@ namespace Godot switch (index) { case 0: - x = value; + X = value; return; case 1: - y = value; + Y = value; return; default: throw new ArgumentOutOfRangeException(nameof(index)); @@ -81,8 +81,8 @@ namespace Godot /// </summary> public readonly void Deconstruct(out real_t x, out real_t y) { - x = this.x; - y = this.y; + x = X; + y = Y; } internal void Normalize() @@ -91,13 +91,13 @@ namespace Godot if (lengthsq == 0) { - x = y = 0f; + X = Y = 0f; } else { real_t length = Mathf.Sqrt(lengthsq); - x /= length; - y /= length; + X /= length; + Y /= length; } } @@ -107,19 +107,19 @@ namespace Godot /// <returns>A vector with <see cref="Mathf.Abs(real_t)"/> called on each component.</returns> public readonly Vector2 Abs() { - return new Vector2(Mathf.Abs(x), Mathf.Abs(y)); + return new Vector2(Mathf.Abs(X), Mathf.Abs(Y)); } /// <summary> /// Returns this vector's angle with respect to the X axis, or (1, 0) vector, in radians. /// /// Equivalent to the result of <see cref="Mathf.Atan2(real_t, real_t)"/> when - /// called with the vector's <see cref="y"/> and <see cref="x"/> as parameters: <c>Mathf.Atan2(v.y, v.x)</c>. + /// called with the vector's <see cref="Y"/> and <see cref="X"/> as parameters: <c>Mathf.Atan2(v.Y, v.X)</c>. /// </summary> /// <returns>The angle of this vector, in radians.</returns> public readonly real_t Angle() { - return Mathf.Atan2(y, x); + return Mathf.Atan2(Y, X); } /// <summary> @@ -139,16 +139,16 @@ namespace Godot /// <returns>The angle between the two vectors, in radians.</returns> public readonly real_t AngleToPoint(Vector2 to) { - return Mathf.Atan2(to.y - y, to.x - x); + return Mathf.Atan2(to.Y - Y, to.X - X); } /// <summary> - /// Returns the aspect ratio of this vector, the ratio of <see cref="x"/> to <see cref="y"/>. + /// Returns the aspect ratio of this vector, the ratio of <see cref="X"/> to <see cref="Y"/>. /// </summary> - /// <returns>The <see cref="x"/> component divided by the <see cref="y"/> component.</returns> + /// <returns>The <see cref="X"/> component divided by the <see cref="Y"/> component.</returns> public readonly real_t Aspect() { - return x / y; + return X / Y; } /// <summary> @@ -167,7 +167,7 @@ namespace Godot /// <returns>A vector with <see cref="Mathf.Ceil"/> called on each component.</returns> public readonly Vector2 Ceil() { - return new Vector2(Mathf.Ceil(x), Mathf.Ceil(y)); + return new Vector2(Mathf.Ceil(X), Mathf.Ceil(Y)); } /// <summary> @@ -182,8 +182,8 @@ namespace Godot { return new Vector2 ( - Mathf.Clamp(x, min.x, max.x), - Mathf.Clamp(y, min.y, max.y) + Mathf.Clamp(X, min.X, max.X), + Mathf.Clamp(Y, min.Y, max.Y) ); } @@ -194,7 +194,7 @@ namespace Godot /// <returns>The cross product value.</returns> public readonly real_t Cross(Vector2 with) { - return (x * with.y) - (y * with.x); + return (X * with.Y) - (Y * with.X); } /// <summary> @@ -210,8 +210,8 @@ namespace Godot { return new Vector2 ( - Mathf.CubicInterpolate(x, b.x, preA.x, postB.x, weight), - Mathf.CubicInterpolate(y, b.y, preA.y, postB.y, weight) + Mathf.CubicInterpolate(X, b.X, preA.X, postB.X, weight), + Mathf.CubicInterpolate(Y, b.Y, preA.Y, postB.Y, weight) ); } @@ -233,8 +233,8 @@ namespace Godot { return new Vector2 ( - Mathf.CubicInterpolateInTime(x, b.x, preA.x, postB.x, weight, t, preAT, postBT), - Mathf.CubicInterpolateInTime(y, b.y, preA.y, postB.y, weight, t, preAT, postBT) + Mathf.CubicInterpolateInTime(X, b.X, preA.X, postB.X, weight, t, preAT, postBT), + Mathf.CubicInterpolateInTime(Y, b.Y, preA.Y, postB.Y, weight, t, preAT, postBT) ); } @@ -251,8 +251,8 @@ namespace Godot { return new Vector2 ( - Mathf.BezierInterpolate(x, control1.x, control2.x, end.x, t), - Mathf.BezierInterpolate(y, control1.y, control2.y, end.y, t) + Mathf.BezierInterpolate(X, control1.X, control2.X, end.X, t), + Mathf.BezierInterpolate(Y, control1.Y, control2.Y, end.Y, t) ); } @@ -268,8 +268,8 @@ namespace Godot public readonly Vector2 BezierDerivative(Vector2 control1, Vector2 control2, Vector2 end, real_t t) { return new Vector2( - Mathf.BezierDerivative(x, control1.x, control2.x, end.x, t), - Mathf.BezierDerivative(y, control1.y, control2.y, end.y, t) + Mathf.BezierDerivative(X, control1.X, control2.X, end.X, t), + Mathf.BezierDerivative(Y, control1.Y, control2.Y, end.Y, t) ); } @@ -280,7 +280,7 @@ namespace Godot /// <returns>The direction from this vector to <paramref name="to"/>.</returns> public readonly Vector2 DirectionTo(Vector2 to) { - return new Vector2(to.x - x, to.y - y).Normalized(); + return new Vector2(to.X - X, to.Y - Y).Normalized(); } /// <summary> @@ -292,7 +292,7 @@ namespace Godot /// <returns>The squared distance between the two vectors.</returns> public readonly real_t DistanceSquaredTo(Vector2 to) { - return (x - to.x) * (x - to.x) + (y - to.y) * (y - to.y); + return (X - to.X) * (X - to.X) + (Y - to.Y) * (Y - to.Y); } /// <summary> @@ -302,7 +302,7 @@ namespace Godot /// <returns>The distance between the two vectors.</returns> public readonly real_t 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)); } /// <summary> @@ -312,7 +312,7 @@ namespace Godot /// <returns>The dot product of the two vectors.</returns> public readonly real_t Dot(Vector2 with) { - return (x * with.x) + (y * with.y); + return (X * with.X) + (Y * with.Y); } /// <summary> @@ -321,16 +321,16 @@ namespace Godot /// <returns>A vector with <see cref="Mathf.Floor"/> called on each component.</returns> public readonly Vector2 Floor() { - return new Vector2(Mathf.Floor(x), Mathf.Floor(y)); + return new Vector2(Mathf.Floor(X), Mathf.Floor(Y)); } /// <summary> - /// Returns the inverse of this vector. This is the same as <c>new Vector2(1 / v.x, 1 / v.y)</c>. + /// Returns the inverse of this vector. This is the same as <c>new Vector2(1 / v.X, 1 / v.Y)</c>. /// </summary> /// <returns>The inverse of this vector.</returns> public readonly Vector2 Inverse() { - return new Vector2(1 / x, 1 / y); + return new Vector2(1 / X, 1 / Y); } /// <summary> @@ -340,7 +340,7 @@ namespace Godot /// <returns>Whether this vector is finite or not.</returns> public readonly bool IsFinite() { - return Mathf.IsFinite(x) && Mathf.IsFinite(y); + return Mathf.IsFinite(X) && Mathf.IsFinite(Y); } /// <summary> @@ -359,7 +359,7 @@ namespace Godot /// <returns>The length of this vector.</returns> public readonly real_t Length() { - return Mathf.Sqrt((x * x) + (y * y)); + return Mathf.Sqrt((X * X) + (Y * Y)); } /// <summary> @@ -370,7 +370,7 @@ namespace Godot /// <returns>The squared length of this vector.</returns> public readonly real_t LengthSquared() { - return (x * x) + (y * y); + return (X * X) + (Y * Y); } /// <summary> @@ -384,8 +384,8 @@ namespace Godot { return new Vector2 ( - Mathf.Lerp(x, to.x, weight), - Mathf.Lerp(y, to.y, weight) + Mathf.Lerp(X, to.X, weight), + Mathf.Lerp(Y, to.Y, weight) ); } @@ -415,7 +415,7 @@ namespace Godot /// <returns>The index of the highest axis.</returns> public readonly Axis MaxAxisIndex() { - return x < y ? Axis.Y : Axis.X; + return X < Y ? Axis.Y : Axis.X; } /// <summary> @@ -425,7 +425,7 @@ namespace Godot /// <returns>The index of the lowest axis.</returns> public readonly Axis MinAxisIndex() { - return x < y ? Axis.X : Axis.Y; + return X < Y ? Axis.X : Axis.Y; } /// <summary> @@ -467,8 +467,8 @@ namespace Godot public readonly Vector2 PosMod(real_t mod) { Vector2 v; - v.x = Mathf.PosMod(x, mod); - v.y = Mathf.PosMod(y, mod); + v.X = Mathf.PosMod(X, mod); + v.Y = Mathf.PosMod(Y, mod); return v; } @@ -483,8 +483,8 @@ namespace Godot public readonly Vector2 PosMod(Vector2 modv) { Vector2 v; - v.x = Mathf.PosMod(x, modv.x); - v.y = Mathf.PosMod(y, modv.y); + v.X = Mathf.PosMod(X, modv.X); + v.Y = Mathf.PosMod(Y, modv.Y); return v; } @@ -524,8 +524,8 @@ namespace Godot (real_t sin, real_t cos) = Mathf.SinCos(angle); return new Vector2 ( - x * cos - y * sin, - x * sin + y * cos + X * cos - Y * sin, + X * sin + Y * cos ); } @@ -536,7 +536,7 @@ namespace Godot /// <returns>The rounded vector.</returns> public readonly Vector2 Round() { - return new Vector2(Mathf.Round(x), Mathf.Round(y)); + return new Vector2(Mathf.Round(X), Mathf.Round(Y)); } /// <summary> @@ -548,8 +548,8 @@ namespace Godot public readonly Vector2 Sign() { Vector2 v; - v.x = Mathf.Sign(x); - v.y = Mathf.Sign(y); + v.X = Mathf.Sign(X); + v.Y = Mathf.Sign(Y); return v; } @@ -597,7 +597,7 @@ namespace Godot /// <returns>The snapped vector.</returns> public readonly Vector2 Snapped(Vector2 step) { - return new Vector2(Mathf.Snapped(x, step.x), Mathf.Snapped(y, step.y)); + return new Vector2(Mathf.Snapped(X, step.X), Mathf.Snapped(Y, step.Y)); } /// <summary> @@ -607,7 +607,7 @@ namespace Godot /// <returns>The perpendicular vector.</returns> public readonly Vector2 Orthogonal() { - return new Vector2(y, -x); + return new Vector2(Y, -X); } // Constants @@ -664,8 +664,8 @@ namespace Godot /// <param name="y">The vector's Y component.</param> public Vector2(real_t x, real_t y) { - this.x = x; - this.y = y; + X = x; + Y = y; } /// <summary> @@ -689,8 +689,8 @@ namespace Godot /// <returns>The added vector.</returns> public static Vector2 operator +(Vector2 left, Vector2 right) { - left.x += right.x; - left.y += right.y; + left.X += right.X; + left.Y += right.Y; return left; } @@ -703,14 +703,14 @@ namespace Godot /// <returns>The subtracted vector.</returns> public static Vector2 operator -(Vector2 left, Vector2 right) { - left.x -= right.x; - left.y -= right.y; + left.X -= right.X; + left.Y -= right.Y; return left; } /// <summary> /// Returns the negative value of the <see cref="Vector2"/>. - /// This is the same as writing <c>new Vector2(-v.x, -v.y)</c>. + /// This is the same as writing <c>new Vector2(-v.X, -v.Y)</c>. /// This operation flips the direction of the vector while /// keeping the same magnitude. /// With floats, the number zero can be either positive or negative. @@ -719,8 +719,8 @@ namespace Godot /// <returns>The negated/flipped vector.</returns> public static Vector2 operator -(Vector2 vec) { - vec.x = -vec.x; - vec.y = -vec.y; + vec.X = -vec.X; + vec.Y = -vec.Y; return vec; } @@ -733,8 +733,8 @@ namespace Godot /// <returns>The multiplied vector.</returns> public static Vector2 operator *(Vector2 vec, real_t scale) { - vec.x *= scale; - vec.y *= scale; + vec.X *= scale; + vec.Y *= scale; return vec; } @@ -747,8 +747,8 @@ namespace Godot /// <returns>The multiplied vector.</returns> public static Vector2 operator *(real_t scale, Vector2 vec) { - vec.x *= scale; - vec.y *= scale; + vec.X *= scale; + vec.Y *= scale; return vec; } @@ -761,8 +761,8 @@ namespace Godot /// <returns>The multiplied vector.</returns> public static Vector2 operator *(Vector2 left, Vector2 right) { - left.x *= right.x; - left.y *= right.y; + left.X *= right.X; + left.Y *= right.Y; return left; } @@ -775,8 +775,8 @@ namespace Godot /// <returns>The divided vector.</returns> public static Vector2 operator /(Vector2 vec, real_t divisor) { - vec.x /= divisor; - vec.y /= divisor; + vec.X /= divisor; + vec.Y /= divisor; return vec; } @@ -789,8 +789,8 @@ namespace Godot /// <returns>The divided vector.</returns> public static Vector2 operator /(Vector2 vec, Vector2 divisorv) { - vec.x /= divisorv.x; - vec.y /= divisorv.y; + vec.X /= divisorv.X; + vec.Y /= divisorv.Y; return vec; } @@ -812,8 +812,8 @@ namespace Godot /// <returns>The remainder vector.</returns> public static Vector2 operator %(Vector2 vec, real_t divisor) { - vec.x %= divisor; - vec.y %= divisor; + vec.X %= divisor; + vec.Y %= divisor; return vec; } @@ -835,8 +835,8 @@ namespace Godot /// <returns>The remainder vector.</returns> public static Vector2 operator %(Vector2 vec, Vector2 divisorv) { - vec.x %= divisorv.x; - vec.y %= divisorv.y; + vec.X %= divisorv.X; + vec.Y %= divisorv.Y; return vec; } @@ -879,11 +879,11 @@ namespace Godot /// <returns>Whether or not the left is less than the right.</returns> public static bool operator <(Vector2 left, Vector2 right) { - if (left.x == right.x) + if (left.X == right.X) { - return left.y < right.y; + return left.Y < right.Y; } - return left.x < right.x; + return left.X < right.X; } /// <summary> @@ -899,11 +899,11 @@ namespace Godot /// <returns>Whether or not the left is greater than the right.</returns> public static bool operator >(Vector2 left, Vector2 right) { - if (left.x == right.x) + if (left.X == right.X) { - return left.y > right.y; + return left.Y > right.Y; } - return left.x > right.x; + return left.X > right.X; } /// <summary> @@ -919,11 +919,11 @@ namespace Godot /// <returns>Whether or not the left is less than or equal to the right.</returns> public static bool operator <=(Vector2 left, Vector2 right) { - if (left.x == right.x) + if (left.X == right.X) { - return left.y <= right.y; + return left.Y <= right.Y; } - return left.x < right.x; + return left.X < right.X; } /// <summary> @@ -939,11 +939,11 @@ namespace Godot /// <returns>Whether or not the left is greater than or equal to the right.</returns> public static bool operator >=(Vector2 left, Vector2 right) { - if (left.x == right.x) + if (left.X == right.X) { - return left.y >= right.y; + return left.Y >= right.Y; } - return left.x > right.x; + return left.X > right.X; } /// <summary> @@ -968,7 +968,7 @@ namespace Godot /// <returns>Whether or not the vectors are exactly equal.</returns> public readonly bool Equals(Vector2 other) { - return x == other.x && y == other.y; + return X == other.X && Y == other.Y; } /// <summary> @@ -979,7 +979,7 @@ namespace Godot /// <returns>Whether or not the vectors are approximately equal.</returns> public readonly bool IsEqualApprox(Vector2 other) { - return Mathf.IsEqualApprox(x, other.x) && Mathf.IsEqualApprox(y, other.y); + return Mathf.IsEqualApprox(X, other.X) && Mathf.IsEqualApprox(Y, other.Y); } /// <summary> @@ -991,7 +991,7 @@ namespace Godot /// <returns>Whether or not the vector is approximately zero.</returns> public readonly bool IsZeroApprox() { - return Mathf.IsZeroApprox(x) && Mathf.IsZeroApprox(y); + return Mathf.IsZeroApprox(X) && Mathf.IsZeroApprox(Y); } /// <summary> @@ -1000,7 +1000,7 @@ namespace Godot /// <returns>A hash code for this vector.</returns> public override readonly int GetHashCode() { - return y.GetHashCode() ^ x.GetHashCode(); + return Y.GetHashCode() ^ X.GetHashCode(); } /// <summary> @@ -1009,7 +1009,7 @@ namespace Godot /// <returns>A string representation of this vector.</returns> public override readonly string ToString() { - return $"({x}, {y})"; + return $"({X}, {Y})"; } /// <summary> @@ -1018,7 +1018,7 @@ namespace Godot /// <returns>A string representation of this vector.</returns> public readonly string ToString(string format) { - return $"({x.ToString(format)}, {y.ToString(format)})"; + return $"({X.ToString(format)}, {Y.ToString(format)})"; } } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2I.cs index 740fedec66..e849939ebb 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2I.cs @@ -8,7 +8,7 @@ namespace Godot /// </summary> [Serializable] [StructLayout(LayoutKind.Sequential)] - public struct Vector2i : IEquatable<Vector2i> + public struct Vector2I : IEquatable<Vector2I> { /// <summary> /// Enumerated index values for the axes. @@ -29,12 +29,12 @@ namespace Godot /// <summary> /// The vector's X component. Also accessible by using the index position <c>[0]</c>. /// </summary> - public int x; + public int X; /// <summary> /// The vector's Y component. Also accessible by using the index position <c>[1]</c>. /// </summary> - public int y; + public int Y; /// <summary> /// Access vector components using their index. @@ -43,8 +43,8 @@ namespace Godot /// <paramref name="index"/> is not 0 or 1. /// </exception> /// <value> - /// <c>[0]</c> is equivalent to <see cref="x"/>, - /// <c>[1]</c> is equivalent to <see cref="y"/>. + /// <c>[0]</c> is equivalent to <see cref="X"/>, + /// <c>[1]</c> is equivalent to <see cref="Y"/>. /// </value> public int this[int index] { @@ -53,9 +53,9 @@ namespace Godot switch (index) { case 0: - return x; + return X; case 1: - return y; + return Y; default: throw new ArgumentOutOfRangeException(nameof(index)); } @@ -65,10 +65,10 @@ namespace Godot switch (index) { case 0: - x = value; + X = value; return; case 1: - y = value; + Y = value; return; default: throw new ArgumentOutOfRangeException(nameof(index)); @@ -81,26 +81,26 @@ namespace Godot /// </summary> public readonly void Deconstruct(out int x, out int y) { - x = this.x; - y = this.y; + x = X; + y = Y; } /// <summary> /// Returns a new vector with all components in absolute values (i.e. positive). /// </summary> /// <returns>A vector with <see cref="Mathf.Abs(int)"/> called on each component.</returns> - public readonly Vector2i Abs() + public readonly Vector2I Abs() { - return new Vector2i(Mathf.Abs(x), Mathf.Abs(y)); + return new Vector2I(Mathf.Abs(X), Mathf.Abs(Y)); } /// <summary> - /// Returns the aspect ratio of this vector, the ratio of <see cref="x"/> to <see cref="y"/>. + /// Returns the aspect ratio of this vector, the ratio of <see cref="X"/> to <see cref="Y"/>. /// </summary> - /// <returns>The <see cref="x"/> component divided by the <see cref="y"/> component.</returns> + /// <returns>The <see cref="X"/> component divided by the <see cref="Y"/> component.</returns> public readonly real_t Aspect() { - return x / (real_t)y; + return X / (real_t)Y; } /// <summary> @@ -111,12 +111,12 @@ namespace Godot /// <param name="min">The vector with minimum allowed values.</param> /// <param name="max">The vector with maximum allowed values.</param> /// <returns>The vector with all components clamped.</returns> - public readonly Vector2i Clamp(Vector2i min, Vector2i max) + public readonly Vector2I Clamp(Vector2I min, Vector2I max) { - return new Vector2i + return new Vector2I ( - Mathf.Clamp(x, min.x, max.x), - Mathf.Clamp(y, min.y, max.y) + Mathf.Clamp(X, min.X, max.X), + Mathf.Clamp(Y, min.Y, max.Y) ); } @@ -127,8 +127,8 @@ namespace Godot /// <returns>The length of this vector.</returns> public readonly real_t Length() { - int x2 = x * x; - int y2 = y * y; + int x2 = X * X; + int y2 = Y * Y; return Mathf.Sqrt(x2 + y2); } @@ -141,8 +141,8 @@ namespace Godot /// <returns>The squared length of this vector.</returns> public readonly int LengthSquared() { - int x2 = x * x; - int y2 = y * y; + int x2 = X * X; + int y2 = Y * Y; return x2 + y2; } @@ -154,7 +154,7 @@ namespace Godot /// <returns>The index of the highest axis.</returns> public readonly Axis MaxAxisIndex() { - return x < y ? Axis.Y : Axis.X; + return X < Y ? Axis.Y : Axis.X; } /// <summary> @@ -164,7 +164,7 @@ namespace Godot /// <returns>The index of the lowest axis.</returns> public readonly Axis MinAxisIndex() { - return x < y ? Axis.X : Axis.Y; + return X < Y ? Axis.X : Axis.Y; } /// <summary> @@ -173,181 +173,181 @@ namespace Godot /// by calling <see cref="Mathf.Sign(int)"/> on each component. /// </summary> /// <returns>A vector with all components as either <c>1</c>, <c>-1</c>, or <c>0</c>.</returns> - public readonly Vector2i Sign() + public readonly Vector2I Sign() { - Vector2i v = this; - v.x = Mathf.Sign(v.x); - v.y = Mathf.Sign(v.y); + Vector2I v = this; + v.X = Mathf.Sign(v.X); + v.Y = Mathf.Sign(v.Y); return v; } // Constants - private static readonly Vector2i _zero = new Vector2i(0, 0); - private static readonly Vector2i _one = new Vector2i(1, 1); + private static readonly Vector2I _zero = new Vector2I(0, 0); + private static readonly Vector2I _one = new Vector2I(1, 1); - private static readonly Vector2i _up = new Vector2i(0, -1); - private static readonly Vector2i _down = new Vector2i(0, 1); - private static readonly Vector2i _right = new Vector2i(1, 0); - private static readonly Vector2i _left = new Vector2i(-1, 0); + private static readonly Vector2I _up = new Vector2I(0, -1); + private static readonly Vector2I _down = new Vector2I(0, 1); + private static readonly Vector2I _right = new Vector2I(1, 0); + private static readonly Vector2I _left = new Vector2I(-1, 0); /// <summary> /// Zero vector, a vector with all components set to <c>0</c>. /// </summary> - /// <value>Equivalent to <c>new Vector2i(0, 0)</c>.</value> - public static Vector2i Zero { get { return _zero; } } + /// <value>Equivalent to <c>new Vector2I(0, 0)</c>.</value> + public static Vector2I Zero { get { return _zero; } } /// <summary> /// One vector, a vector with all components set to <c>1</c>. /// </summary> - /// <value>Equivalent to <c>new Vector2i(1, 1)</c>.</value> - public static Vector2i One { get { return _one; } } + /// <value>Equivalent to <c>new Vector2I(1, 1)</c>.</value> + public static Vector2I One { get { return _one; } } /// <summary> /// Up unit vector. Y is down in 2D, so this vector points -Y. /// </summary> - /// <value>Equivalent to <c>new Vector2i(0, -1)</c>.</value> - public static Vector2i Up { get { return _up; } } + /// <value>Equivalent to <c>new Vector2I(0, -1)</c>.</value> + public static Vector2I Up { get { return _up; } } /// <summary> /// Down unit vector. Y is down in 2D, so this vector points +Y. /// </summary> - /// <value>Equivalent to <c>new Vector2i(0, 1)</c>.</value> - public static Vector2i Down { get { return _down; } } + /// <value>Equivalent to <c>new Vector2I(0, 1)</c>.</value> + public static Vector2I Down { get { return _down; } } /// <summary> /// Right unit vector. Represents the direction of right. /// </summary> - /// <value>Equivalent to <c>new Vector2i(1, 0)</c>.</value> - public static Vector2i Right { get { return _right; } } + /// <value>Equivalent to <c>new Vector2I(1, 0)</c>.</value> + public static Vector2I Right { get { return _right; } } /// <summary> /// Left unit vector. Represents the direction of left. /// </summary> - /// <value>Equivalent to <c>new Vector2i(-1, 0)</c>.</value> - public static Vector2i Left { get { return _left; } } + /// <value>Equivalent to <c>new Vector2I(-1, 0)</c>.</value> + public static Vector2I Left { get { return _left; } } /// <summary> - /// Constructs a new <see cref="Vector2i"/> with the given components. + /// Constructs a new <see cref="Vector2I"/> with the given components. /// </summary> /// <param name="x">The vector's X component.</param> /// <param name="y">The vector's Y component.</param> - public Vector2i(int x, int y) + public Vector2I(int x, int y) { - this.x = x; - this.y = y; + X = x; + Y = y; } /// <summary> - /// Adds each component of the <see cref="Vector2i"/> - /// with the components of the given <see cref="Vector2i"/>. + /// Adds each component of the <see cref="Vector2I"/> + /// with the components of the given <see cref="Vector2I"/>. /// </summary> /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>The added vector.</returns> - public static Vector2i operator +(Vector2i left, Vector2i right) + public static Vector2I operator +(Vector2I left, Vector2I right) { - left.x += right.x; - left.y += right.y; + left.X += right.X; + left.Y += right.Y; return left; } /// <summary> - /// Subtracts each component of the <see cref="Vector2i"/> - /// by the components of the given <see cref="Vector2i"/>. + /// Subtracts each component of the <see cref="Vector2I"/> + /// by the components of the given <see cref="Vector2I"/>. /// </summary> /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>The subtracted vector.</returns> - public static Vector2i operator -(Vector2i left, Vector2i right) + public static Vector2I operator -(Vector2I left, Vector2I right) { - left.x -= right.x; - left.y -= right.y; + left.X -= right.X; + left.Y -= right.Y; return left; } /// <summary> - /// Returns the negative value of the <see cref="Vector2i"/>. - /// This is the same as writing <c>new Vector2i(-v.x, -v.y)</c>. + /// Returns the negative value of the <see cref="Vector2I"/>. + /// This is the same as writing <c>new Vector2I(-v.X, -v.Y)</c>. /// This operation flips the direction of the vector while /// keeping the same magnitude. /// </summary> /// <param name="vec">The vector to negate/flip.</param> /// <returns>The negated/flipped vector.</returns> - public static Vector2i operator -(Vector2i vec) + public static Vector2I operator -(Vector2I vec) { - vec.x = -vec.x; - vec.y = -vec.y; + vec.X = -vec.X; + vec.Y = -vec.Y; return vec; } /// <summary> - /// Multiplies each component of the <see cref="Vector2i"/> + /// Multiplies each component of the <see cref="Vector2I"/> /// by the given <see langword="int"/>. /// </summary> /// <param name="vec">The vector to multiply.</param> /// <param name="scale">The scale to multiply by.</param> /// <returns>The multiplied vector.</returns> - public static Vector2i operator *(Vector2i vec, int scale) + public static Vector2I operator *(Vector2I vec, int scale) { - vec.x *= scale; - vec.y *= scale; + vec.X *= scale; + vec.Y *= scale; return vec; } /// <summary> - /// Multiplies each component of the <see cref="Vector2i"/> + /// Multiplies each component of the <see cref="Vector2I"/> /// by the given <see langword="int"/>. /// </summary> /// <param name="scale">The scale to multiply by.</param> /// <param name="vec">The vector to multiply.</param> /// <returns>The multiplied vector.</returns> - public static Vector2i operator *(int scale, Vector2i vec) + public static Vector2I operator *(int scale, Vector2I vec) { - vec.x *= scale; - vec.y *= scale; + vec.X *= scale; + vec.Y *= scale; return vec; } /// <summary> - /// Multiplies each component of the <see cref="Vector2i"/> - /// by the components of the given <see cref="Vector2i"/>. + /// Multiplies each component of the <see cref="Vector2I"/> + /// by the components of the given <see cref="Vector2I"/>. /// </summary> /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>The multiplied vector.</returns> - public static Vector2i operator *(Vector2i left, Vector2i right) + public static Vector2I operator *(Vector2I left, Vector2I right) { - left.x *= right.x; - left.y *= right.y; + left.X *= right.X; + left.Y *= right.Y; return left; } /// <summary> - /// Divides each component of the <see cref="Vector2i"/> + /// Divides each component of the <see cref="Vector2I"/> /// by the given <see langword="int"/>. /// </summary> /// <param name="vec">The dividend vector.</param> /// <param name="divisor">The divisor value.</param> /// <returns>The divided vector.</returns> - public static Vector2i operator /(Vector2i vec, int divisor) + public static Vector2I operator /(Vector2I vec, int divisor) { - vec.x /= divisor; - vec.y /= divisor; + vec.X /= divisor; + vec.Y /= divisor; return vec; } /// <summary> - /// Divides each component of the <see cref="Vector2i"/> - /// by the components of the given <see cref="Vector2i"/>. + /// Divides each component of the <see cref="Vector2I"/> + /// by the components of the given <see cref="Vector2I"/>. /// </summary> /// <param name="vec">The dividend vector.</param> /// <param name="divisorv">The divisor vector.</param> /// <returns>The divided vector.</returns> - public static Vector2i operator /(Vector2i vec, Vector2i divisorv) + public static Vector2I operator /(Vector2I vec, Vector2I divisorv) { - vec.x /= divisorv.x; - vec.y /= divisorv.y; + vec.X /= divisorv.X; + vec.Y /= divisorv.Y; return vec; } /// <summary> - /// Gets the remainder of each component of the <see cref="Vector2i"/> + /// Gets the remainder of each component of the <see cref="Vector2I"/> /// with the components of the given <see langword="int"/>. /// This operation uses truncated division, which is often not desired /// as it does not work well with negative numbers. @@ -356,22 +356,22 @@ namespace Godot /// </summary> /// <example> /// <code> - /// GD.Print(new Vector2i(10, -20) % 7); // Prints "(3, -6)" + /// GD.Print(new Vector2I(10, -20) % 7); // Prints "(3, -6)" /// </code> /// </example> /// <param name="vec">The dividend vector.</param> /// <param name="divisor">The divisor value.</param> /// <returns>The remainder vector.</returns> - public static Vector2i operator %(Vector2i vec, int divisor) + public static Vector2I operator %(Vector2I vec, int divisor) { - vec.x %= divisor; - vec.y %= divisor; + vec.X %= divisor; + vec.Y %= divisor; return vec; } /// <summary> - /// Gets the remainder of each component of the <see cref="Vector2i"/> - /// with the components of the given <see cref="Vector2i"/>. + /// Gets the remainder of each component of the <see cref="Vector2I"/> + /// with the components of the given <see cref="Vector2I"/>. /// This operation uses truncated division, which is often not desired /// as it does not work well with negative numbers. /// Consider using <see cref="Mathf.PosMod(int, int)"/> instead @@ -379,16 +379,16 @@ namespace Godot /// </summary> /// <example> /// <code> - /// GD.Print(new Vector2i(10, -20) % new Vector2i(7, 8)); // Prints "(3, -4)" + /// GD.Print(new Vector2I(10, -20) % new Vector2I(7, 8)); // Prints "(3, -4)" /// </code> /// </example> /// <param name="vec">The dividend vector.</param> /// <param name="divisorv">The divisor vector.</param> /// <returns>The remainder vector.</returns> - public static Vector2i operator %(Vector2i vec, Vector2i divisorv) + public static Vector2I operator %(Vector2I vec, Vector2I divisorv) { - vec.x %= divisorv.x; - vec.y %= divisorv.y; + vec.X %= divisorv.X; + vec.Y %= divisorv.Y; return vec; } @@ -398,7 +398,7 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the vectors are equal.</returns> - public static bool operator ==(Vector2i left, Vector2i right) + public static bool operator ==(Vector2I left, Vector2I right) { return left.Equals(right); } @@ -409,13 +409,13 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the vectors are not equal.</returns> - public static bool operator !=(Vector2i left, Vector2i right) + public static bool operator !=(Vector2I left, Vector2I right) { return !left.Equals(right); } /// <summary> - /// Compares two <see cref="Vector2i"/> vectors by first checking if + /// Compares two <see cref="Vector2I"/> vectors by first checking if /// the X value of the <paramref name="left"/> vector is less than /// the X value of the <paramref name="right"/> vector. /// If the X values are exactly equal, then it repeats this check @@ -425,17 +425,17 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the left is less than the right.</returns> - public static bool operator <(Vector2i left, Vector2i right) + public static bool operator <(Vector2I left, Vector2I right) { - if (left.x == right.x) + if (left.X == right.X) { - return left.y < right.y; + return left.Y < right.Y; } - return left.x < right.x; + return left.X < right.X; } /// <summary> - /// Compares two <see cref="Vector2i"/> vectors by first checking if + /// Compares two <see cref="Vector2I"/> vectors by first checking if /// the X value of the <paramref name="left"/> vector is greater than /// the X value of the <paramref name="right"/> vector. /// If the X values are exactly equal, then it repeats this check @@ -445,17 +445,17 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the left is greater than the right.</returns> - public static bool operator >(Vector2i left, Vector2i right) + public static bool operator >(Vector2I left, Vector2I right) { - if (left.x == right.x) + if (left.X == right.X) { - return left.y > right.y; + return left.Y > right.Y; } - return left.x > right.x; + return left.X > right.X; } /// <summary> - /// Compares two <see cref="Vector2i"/> vectors by first checking if + /// Compares two <see cref="Vector2I"/> vectors by first checking if /// the X value of the <paramref name="left"/> vector is less than /// or equal to the X value of the <paramref name="right"/> vector. /// If the X values are exactly equal, then it repeats this check @@ -465,17 +465,17 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the left is less than or equal to the right.</returns> - public static bool operator <=(Vector2i left, Vector2i right) + public static bool operator <=(Vector2I left, Vector2I right) { - if (left.x == right.x) + if (left.X == right.X) { - return left.y <= right.y; + return left.Y <= right.Y; } - return left.x < right.x; + return left.X < right.X; } /// <summary> - /// Compares two <see cref="Vector2i"/> vectors by first checking if + /// Compares two <see cref="Vector2I"/> vectors by first checking if /// the X value of the <paramref name="left"/> vector is greater than /// or equal to the X value of the <paramref name="right"/> vector. /// If the X values are exactly equal, then it repeats this check @@ -485,33 +485,33 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the left is greater than or equal to the right.</returns> - public static bool operator >=(Vector2i left, Vector2i right) + public static bool operator >=(Vector2I left, Vector2I right) { - if (left.x == right.x) + if (left.X == right.X) { - return left.y >= right.y; + return left.Y >= right.Y; } - return left.x > right.x; + return left.X > right.X; } /// <summary> - /// Converts this <see cref="Vector2i"/> to a <see cref="Vector2"/>. + /// Converts this <see cref="Vector2I"/> to a <see cref="Vector2"/>. /// </summary> /// <param name="value">The vector to convert.</param> - public static implicit operator Vector2(Vector2i value) + public static implicit operator Vector2(Vector2I value) { - return new Vector2(value.x, value.y); + return new Vector2(value.X, value.Y); } /// <summary> - /// Converts a <see cref="Vector2"/> to a <see cref="Vector2i"/>. + /// Converts a <see cref="Vector2"/> to a <see cref="Vector2I"/>. /// </summary> /// <param name="value">The vector to convert.</param> - public static explicit operator Vector2i(Vector2 value) + public static explicit operator Vector2I(Vector2 value) { - return new Vector2i( - Mathf.RoundToInt(value.x), - Mathf.RoundToInt(value.y) + return new Vector2I( + Mathf.RoundToInt(value.X), + Mathf.RoundToInt(value.Y) ); } @@ -523,7 +523,7 @@ namespace Godot /// <returns>Whether or not the vector and the object are equal.</returns> public override readonly bool Equals(object obj) { - return obj is Vector2i other && Equals(other); + return obj is Vector2I other && Equals(other); } /// <summary> @@ -531,36 +531,36 @@ namespace Godot /// </summary> /// <param name="other">The other vector.</param> /// <returns>Whether or not the vectors are equal.</returns> - public readonly bool Equals(Vector2i other) + public readonly bool Equals(Vector2I other) { - return x == other.x && y == other.y; + return X == other.X && Y == other.Y; } /// <summary> - /// Serves as the hash function for <see cref="Vector2i"/>. + /// Serves as the hash function for <see cref="Vector2I"/>. /// </summary> /// <returns>A hash code for this vector.</returns> public override readonly int GetHashCode() { - return y.GetHashCode() ^ x.GetHashCode(); + return Y.GetHashCode() ^ X.GetHashCode(); } /// <summary> - /// Converts this <see cref="Vector2i"/> to a string. + /// Converts this <see cref="Vector2I"/> to a string. /// </summary> /// <returns>A string representation of this vector.</returns> public override readonly string ToString() { - return $"({x}, {y})"; + return $"({X}, {Y})"; } /// <summary> - /// Converts this <see cref="Vector2i"/> to a string with the given <paramref name="format"/>. + /// Converts this <see cref="Vector2I"/> to a string with the given <paramref name="format"/>. /// </summary> /// <returns>A string representation of this vector.</returns> public readonly string ToString(string format) { - return $"({x.ToString(format)}, {y.ToString(format)})"; + return $"({X.ToString(format)}, {Y.ToString(format)})"; } } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs index b017ba5853..c773c0fda6 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs @@ -33,17 +33,17 @@ namespace Godot /// <summary> /// The vector's X component. Also accessible by using the index position <c>[0]</c>. /// </summary> - public real_t x; + public real_t X; /// <summary> /// The vector's Y component. Also accessible by using the index position <c>[1]</c>. /// </summary> - public real_t y; + public real_t Y; /// <summary> /// The vector's Z component. Also accessible by using the index position <c>[2]</c>. /// </summary> - public real_t z; + public real_t Z; /// <summary> /// Access vector components using their index. @@ -52,9 +52,9 @@ namespace Godot /// <paramref name="index"/> is not 0, 1 or 2. /// </exception> /// <value> - /// <c>[0]</c> is equivalent to <see cref="x"/>, - /// <c>[1]</c> is equivalent to <see cref="y"/>, - /// <c>[2]</c> is equivalent to <see cref="z"/>. + /// <c>[0]</c> is equivalent to <see cref="X"/>, + /// <c>[1]</c> is equivalent to <see cref="Y"/>, + /// <c>[2]</c> is equivalent to <see cref="Z"/>. /// </value> public real_t this[int index] { @@ -63,11 +63,11 @@ namespace Godot switch (index) { case 0: - return x; + return X; case 1: - return y; + return Y; case 2: - return z; + return Z; default: throw new ArgumentOutOfRangeException(nameof(index)); } @@ -77,13 +77,13 @@ namespace Godot switch (index) { case 0: - x = value; + X = value; return; case 1: - y = value; + Y = value; return; case 2: - z = value; + Z = value; return; default: throw new ArgumentOutOfRangeException(nameof(index)); @@ -96,9 +96,9 @@ namespace Godot /// </summary> public readonly void Deconstruct(out real_t x, out real_t y, out real_t z) { - x = this.x; - y = this.y; - z = this.z; + x = X; + y = Y; + z = Z; } internal void Normalize() @@ -107,14 +107,14 @@ namespace Godot if (lengthsq == 0) { - x = y = z = 0f; + X = Y = Z = 0f; } else { real_t length = Mathf.Sqrt(lengthsq); - x /= length; - y /= length; - z /= length; + X /= length; + Y /= length; + Z /= length; } } @@ -124,7 +124,7 @@ namespace Godot /// <returns>A vector with <see cref="Mathf.Abs(real_t)"/> called on each component.</returns> public readonly 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)); } /// <summary> @@ -153,7 +153,7 @@ namespace Godot /// <returns>A vector with <see cref="Mathf.Ceil"/> called on each component.</returns> public readonly 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)); } /// <summary> @@ -168,9 +168,9 @@ namespace Godot { return new Vector3 ( - Mathf.Clamp(x, min.x, max.x), - Mathf.Clamp(y, min.y, max.y), - Mathf.Clamp(z, min.z, max.z) + Mathf.Clamp(X, min.X, max.X), + Mathf.Clamp(Y, min.Y, max.Y), + Mathf.Clamp(Z, min.Z, max.Z) ); } @@ -183,9 +183,9 @@ namespace Godot { return new Vector3 ( - (y * with.z) - (z * with.y), - (z * with.x) - (x * with.z), - (x * with.y) - (y * with.x) + (Y * with.Z) - (Z * with.Y), + (Z * with.X) - (X * with.Z), + (X * with.Y) - (Y * with.X) ); } @@ -202,9 +202,9 @@ namespace Godot { return new Vector3 ( - Mathf.CubicInterpolate(x, b.x, preA.x, postB.x, weight), - Mathf.CubicInterpolate(y, b.y, preA.y, postB.y, weight), - Mathf.CubicInterpolate(z, b.z, preA.z, postB.z, weight) + Mathf.CubicInterpolate(X, b.X, preA.X, postB.X, weight), + Mathf.CubicInterpolate(Y, b.Y, preA.Y, postB.Y, weight), + Mathf.CubicInterpolate(Z, b.Z, preA.Z, postB.Z, weight) ); } @@ -226,9 +226,9 @@ namespace Godot { return new Vector3 ( - Mathf.CubicInterpolateInTime(x, b.x, preA.x, postB.x, weight, t, preAT, postBT), - Mathf.CubicInterpolateInTime(y, b.y, preA.y, postB.y, weight, t, preAT, postBT), - Mathf.CubicInterpolateInTime(z, b.z, preA.z, postB.z, weight, t, preAT, postBT) + Mathf.CubicInterpolateInTime(X, b.X, preA.X, postB.X, weight, t, preAT, postBT), + Mathf.CubicInterpolateInTime(Y, b.Y, preA.Y, postB.Y, weight, t, preAT, postBT), + Mathf.CubicInterpolateInTime(Z, b.Z, preA.Z, postB.Z, weight, t, preAT, postBT) ); } @@ -245,9 +245,9 @@ namespace Godot { return new Vector3 ( - Mathf.BezierInterpolate(x, control1.x, control2.x, end.x, t), - Mathf.BezierInterpolate(y, control1.y, control2.y, end.y, t), - Mathf.BezierInterpolate(z, control1.z, control2.z, end.z, t) + Mathf.BezierInterpolate(X, control1.X, control2.X, end.X, t), + Mathf.BezierInterpolate(Y, control1.Y, control2.Y, end.Y, t), + Mathf.BezierInterpolate(Z, control1.Z, control2.Z, end.Z, t) ); } @@ -263,9 +263,9 @@ namespace Godot public readonly Vector3 BezierDerivative(Vector3 control1, Vector3 control2, Vector3 end, real_t t) { return new Vector3( - Mathf.BezierDerivative(x, control1.x, control2.x, end.x, t), - Mathf.BezierDerivative(y, control1.y, control2.y, end.y, t), - Mathf.BezierDerivative(z, control1.z, control2.z, end.y, t) + Mathf.BezierDerivative(X, control1.X, control2.X, end.X, t), + Mathf.BezierDerivative(Y, control1.Y, control2.Y, end.Y, t), + Mathf.BezierDerivative(Z, control1.Z, control2.Z, end.Y, t) ); } @@ -276,7 +276,7 @@ namespace Godot /// <returns>The direction from this vector to <paramref name="to"/>.</returns> public readonly Vector3 DirectionTo(Vector3 to) { - return new Vector3(to.x - x, to.y - y, to.z - z).Normalized(); + return new Vector3(to.X - X, to.Y - Y, to.Z - Z).Normalized(); } /// <summary> @@ -309,7 +309,7 @@ namespace Godot /// <returns>The dot product of the two vectors.</returns> public readonly real_t Dot(Vector3 with) { - return (x * with.x) + (y * with.y) + (z * with.z); + return (X * with.X) + (Y * with.Y) + (Z * with.Z); } /// <summary> @@ -318,16 +318,16 @@ namespace Godot /// <returns>A vector with <see cref="Mathf.Floor"/> called on each component.</returns> public readonly 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)); } /// <summary> - /// Returns the inverse of this vector. This is the same as <c>new Vector3(1 / v.x, 1 / v.y, 1 / v.z)</c>. + /// Returns the inverse of this vector. This is the same as <c>new Vector3(1 / v.X, 1 / v.Y, 1 / v.Z)</c>. /// </summary> /// <returns>The inverse of this vector.</returns> public readonly Vector3 Inverse() { - return new Vector3(1 / x, 1 / y, 1 / z); + return new Vector3(1 / X, 1 / Y, 1 / Z); } /// <summary> @@ -337,7 +337,7 @@ namespace Godot /// <returns>Whether this vector is finite or not.</returns> public readonly bool IsFinite() { - return Mathf.IsFinite(x) && Mathf.IsFinite(y) && Mathf.IsFinite(z); + return Mathf.IsFinite(X) && Mathf.IsFinite(Y) && Mathf.IsFinite(Z); } /// <summary> @@ -356,9 +356,9 @@ namespace Godot /// <returns>The length of this vector.</returns> public readonly real_t Length() { - real_t x2 = x * x; - real_t y2 = y * y; - real_t z2 = z * z; + real_t x2 = X * X; + real_t y2 = Y * Y; + real_t z2 = Z * Z; return Mathf.Sqrt(x2 + y2 + z2); } @@ -371,9 +371,9 @@ namespace Godot /// <returns>The squared length of this vector.</returns> public readonly real_t LengthSquared() { - real_t x2 = x * x; - real_t y2 = y * y; - real_t z2 = z * z; + real_t x2 = X * X; + real_t y2 = Y * Y; + real_t z2 = Z * Z; return x2 + y2 + z2; } @@ -389,9 +389,9 @@ namespace Godot { return new Vector3 ( - Mathf.Lerp(x, to.x, weight), - Mathf.Lerp(y, to.y, weight), - Mathf.Lerp(z, to.z, weight) + Mathf.Lerp(X, to.X, weight), + Mathf.Lerp(Y, to.Y, weight), + Mathf.Lerp(Z, to.Z, weight) ); } @@ -421,7 +421,7 @@ namespace Godot /// <returns>The index of the highest axis.</returns> public readonly Axis MaxAxisIndex() { - return x < y ? (y < z ? Axis.Z : Axis.Y) : (x < z ? Axis.Z : Axis.X); + return X < Y ? (Y < Z ? Axis.Z : Axis.Y) : (X < Z ? Axis.Z : Axis.X); } /// <summary> @@ -431,7 +431,7 @@ namespace Godot /// <returns>The index of the lowest axis.</returns> public readonly Axis MinAxisIndex() { - return x < y ? (x < z ? Axis.X : Axis.Z) : (y < z ? Axis.Y : Axis.Z); + return X < Y ? (X < Z ? Axis.X : Axis.Z) : (Y < Z ? Axis.Y : Axis.Z); } /// <summary> @@ -470,9 +470,9 @@ namespace Godot public readonly Basis Outer(Vector3 with) { return new Basis( - x * with.x, x * with.y, x * with.z, - y * with.x, y * with.y, y * with.z, - z * with.x, z * with.y, z * with.z + X * with.X, X * with.Y, X * with.Z, + Y * with.X, Y * with.Y, Y * with.Z, + Z * with.X, Z * with.Y, Z * with.Z ); } @@ -487,9 +487,9 @@ namespace Godot public readonly Vector3 PosMod(real_t mod) { Vector3 v; - v.x = Mathf.PosMod(x, mod); - v.y = Mathf.PosMod(y, mod); - v.z = Mathf.PosMod(z, mod); + v.X = Mathf.PosMod(X, mod); + v.Y = Mathf.PosMod(Y, mod); + v.Z = Mathf.PosMod(Z, mod); return v; } @@ -504,9 +504,9 @@ namespace Godot public readonly Vector3 PosMod(Vector3 modv) { Vector3 v; - v.x = Mathf.PosMod(x, modv.x); - v.y = Mathf.PosMod(y, modv.y); - v.z = Mathf.PosMod(z, modv.z); + v.X = Mathf.PosMod(X, modv.X); + v.Y = Mathf.PosMod(Y, modv.Y); + v.Z = Mathf.PosMod(Z, modv.Z); return v; } @@ -561,7 +561,7 @@ namespace Godot /// <returns>The rounded vector.</returns> public readonly Vector3 Round() { - return new Vector3(Mathf.Round(x), Mathf.Round(y), Mathf.Round(z)); + return new Vector3(Mathf.Round(X), Mathf.Round(Y), Mathf.Round(Z)); } /// <summary> @@ -573,9 +573,9 @@ namespace Godot public readonly Vector3 Sign() { Vector3 v; - v.x = Mathf.Sign(x); - v.y = Mathf.Sign(y); - v.z = Mathf.Sign(z); + v.X = Mathf.Sign(X); + v.Y = Mathf.Sign(Y); + v.Z = Mathf.Sign(Z); return v; } @@ -642,9 +642,9 @@ namespace Godot { return new Vector3 ( - Mathf.Snapped(x, step.x), - Mathf.Snapped(y, step.y), - Mathf.Snapped(z, step.z) + Mathf.Snapped(X, step.X), + Mathf.Snapped(Y, step.Y), + Mathf.Snapped(Z, step.Z) ); } @@ -719,9 +719,9 @@ namespace Godot /// <param name="z">The vector's Z component.</param> public Vector3(real_t x, real_t y, real_t z) { - this.x = x; - this.y = y; - this.z = z; + X = x; + Y = y; + Z = z; } /// <summary> @@ -733,9 +733,9 @@ namespace Godot /// <returns>The added vector.</returns> public static Vector3 operator +(Vector3 left, Vector3 right) { - left.x += right.x; - left.y += right.y; - left.z += right.z; + left.X += right.X; + left.Y += right.Y; + left.Z += right.Z; return left; } @@ -748,15 +748,15 @@ namespace Godot /// <returns>The subtracted vector.</returns> public static Vector3 operator -(Vector3 left, Vector3 right) { - left.x -= right.x; - left.y -= right.y; - left.z -= right.z; + left.X -= right.X; + left.Y -= right.Y; + left.Z -= right.Z; return left; } /// <summary> /// Returns the negative value of the <see cref="Vector3"/>. - /// This is the same as writing <c>new Vector3(-v.x, -v.y, -v.z)</c>. + /// This is the same as writing <c>new Vector3(-v.X, -v.Y, -v.Z)</c>. /// This operation flips the direction of the vector while /// keeping the same magnitude. /// With floats, the number zero can be either positive or negative. @@ -765,9 +765,9 @@ namespace Godot /// <returns>The negated/flipped vector.</returns> public static Vector3 operator -(Vector3 vec) { - vec.x = -vec.x; - vec.y = -vec.y; - vec.z = -vec.z; + vec.X = -vec.X; + vec.Y = -vec.Y; + vec.Z = -vec.Z; return vec; } @@ -780,9 +780,9 @@ namespace Godot /// <returns>The multiplied vector.</returns> public static Vector3 operator *(Vector3 vec, real_t scale) { - vec.x *= scale; - vec.y *= scale; - vec.z *= scale; + vec.X *= scale; + vec.Y *= scale; + vec.Z *= scale; return vec; } @@ -795,9 +795,9 @@ namespace Godot /// <returns>The multiplied vector.</returns> public static Vector3 operator *(real_t scale, Vector3 vec) { - vec.x *= scale; - vec.y *= scale; - vec.z *= scale; + vec.X *= scale; + vec.Y *= scale; + vec.Z *= scale; return vec; } @@ -810,9 +810,9 @@ namespace Godot /// <returns>The multiplied vector.</returns> public static Vector3 operator *(Vector3 left, Vector3 right) { - left.x *= right.x; - left.y *= right.y; - left.z *= right.z; + left.X *= right.X; + left.Y *= right.Y; + left.Z *= right.Z; return left; } @@ -825,9 +825,9 @@ namespace Godot /// <returns>The divided vector.</returns> public static Vector3 operator /(Vector3 vec, real_t divisor) { - vec.x /= divisor; - vec.y /= divisor; - vec.z /= divisor; + vec.X /= divisor; + vec.Y /= divisor; + vec.Z /= divisor; return vec; } @@ -840,9 +840,9 @@ namespace Godot /// <returns>The divided vector.</returns> public static Vector3 operator /(Vector3 vec, Vector3 divisorv) { - vec.x /= divisorv.x; - vec.y /= divisorv.y; - vec.z /= divisorv.z; + vec.X /= divisorv.X; + vec.Y /= divisorv.Y; + vec.Z /= divisorv.Z; return vec; } @@ -864,9 +864,9 @@ namespace Godot /// <returns>The remainder vector.</returns> public static Vector3 operator %(Vector3 vec, real_t divisor) { - vec.x %= divisor; - vec.y %= divisor; - vec.z %= divisor; + vec.X %= divisor; + vec.Y %= divisor; + vec.Z %= divisor; return vec; } @@ -888,9 +888,9 @@ namespace Godot /// <returns>The remainder vector.</returns> public static Vector3 operator %(Vector3 vec, Vector3 divisorv) { - vec.x %= divisorv.x; - vec.y %= divisorv.y; - vec.z %= divisorv.z; + vec.X %= divisorv.X; + vec.Y %= divisorv.Y; + vec.Z %= divisorv.Z; return vec; } @@ -933,15 +933,15 @@ namespace Godot /// <returns>Whether or not the left is less than the right.</returns> public static bool operator <(Vector3 left, Vector3 right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - return left.z < right.z; + return left.Z < right.Z; } - return left.y < right.y; + return left.Y < right.Y; } - return left.x < right.x; + return left.X < right.X; } /// <summary> @@ -957,15 +957,15 @@ namespace Godot /// <returns>Whether or not the left is greater than the right.</returns> public static bool operator >(Vector3 left, Vector3 right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - return left.z > right.z; + return left.Z > right.Z; } - return left.y > right.y; + return left.Y > right.Y; } - return left.x > right.x; + return left.X > right.X; } /// <summary> @@ -981,15 +981,15 @@ namespace Godot /// <returns>Whether or not the left is less than or equal to the right.</returns> public static bool operator <=(Vector3 left, Vector3 right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - return left.z <= right.z; + return left.Z <= right.Z; } - return left.y < right.y; + return left.Y < right.Y; } - return left.x < right.x; + return left.X < right.X; } /// <summary> @@ -1005,15 +1005,15 @@ namespace Godot /// <returns>Whether or not the left is greater than or equal to the right.</returns> public static bool operator >=(Vector3 left, Vector3 right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - return left.z >= right.z; + return left.Z >= right.Z; } - return left.y > right.y; + return left.Y > right.Y; } - return left.x > right.x; + return left.X > right.X; } /// <summary> @@ -1038,7 +1038,7 @@ namespace Godot /// <returns>Whether or not the vectors are exactly equal.</returns> public readonly bool Equals(Vector3 other) { - return x == other.x && y == other.y && z == other.z; + return X == other.X && Y == other.Y && Z == other.Z; } /// <summary> @@ -1049,7 +1049,7 @@ namespace Godot /// <returns>Whether or not the vectors are approximately equal.</returns> public readonly bool IsEqualApprox(Vector3 other) { - return Mathf.IsEqualApprox(x, other.x) && Mathf.IsEqualApprox(y, other.y) && Mathf.IsEqualApprox(z, other.z); + return Mathf.IsEqualApprox(X, other.X) && Mathf.IsEqualApprox(Y, other.Y) && Mathf.IsEqualApprox(Z, other.Z); } /// <summary> @@ -1061,7 +1061,7 @@ namespace Godot /// <returns>Whether or not the vector is approximately zero.</returns> public readonly bool IsZeroApprox() { - return Mathf.IsZeroApprox(x) && Mathf.IsZeroApprox(y) && Mathf.IsZeroApprox(z); + return Mathf.IsZeroApprox(X) && Mathf.IsZeroApprox(Y) && Mathf.IsZeroApprox(Z); } /// <summary> @@ -1070,7 +1070,7 @@ namespace Godot /// <returns>A hash code for this vector.</returns> public override readonly int GetHashCode() { - return y.GetHashCode() ^ x.GetHashCode() ^ z.GetHashCode(); + return Y.GetHashCode() ^ X.GetHashCode() ^ Z.GetHashCode(); } /// <summary> @@ -1079,7 +1079,7 @@ namespace Godot /// <returns>A string representation of this vector.</returns> public override readonly string ToString() { - return $"({x}, {y}, {z})"; + return $"({X}, {Y}, {Z})"; } /// <summary> @@ -1088,7 +1088,7 @@ namespace Godot /// <returns>A string representation of this vector.</returns> public readonly string ToString(string format) { - return $"({x.ToString(format)}, {y.ToString(format)}, {z.ToString(format)})"; + return $"({X.ToString(format)}, {Y.ToString(format)}, {Z.ToString(format)})"; } } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3I.cs index de0c6d27e7..fe899527ef 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3I.cs @@ -8,7 +8,7 @@ namespace Godot /// </summary> [Serializable] [StructLayout(LayoutKind.Sequential)] - public struct Vector3i : IEquatable<Vector3i> + public struct Vector3I : IEquatable<Vector3I> { /// <summary> /// Enumerated index values for the axes. @@ -33,17 +33,17 @@ namespace Godot /// <summary> /// The vector's X component. Also accessible by using the index position <c>[0]</c>. /// </summary> - public int x; + public int X; /// <summary> /// The vector's Y component. Also accessible by using the index position <c>[1]</c>. /// </summary> - public int y; + public int Y; /// <summary> /// The vector's Z component. Also accessible by using the index position <c>[2]</c>. /// </summary> - public int z; + public int Z; /// <summary> /// Access vector components using their <paramref name="index"/>. @@ -52,9 +52,9 @@ namespace Godot /// <paramref name="index"/> is not 0, 1 or 2. /// </exception> /// <value> - /// <c>[0]</c> is equivalent to <see cref="x"/>, - /// <c>[1]</c> is equivalent to <see cref="y"/>, - /// <c>[2]</c> is equivalent to <see cref="z"/>. + /// <c>[0]</c> is equivalent to <see cref="X"/>, + /// <c>[1]</c> is equivalent to <see cref="Y"/>, + /// <c>[2]</c> is equivalent to <see cref="Z"/>. /// </value> public int this[int index] { @@ -63,11 +63,11 @@ namespace Godot switch (index) { case 0: - return x; + return X; case 1: - return y; + return Y; case 2: - return z; + return Z; default: throw new ArgumentOutOfRangeException(nameof(index)); } @@ -77,13 +77,13 @@ namespace Godot switch (index) { case 0: - x = value; + X = value; return; case 1: - y = value; + Y = value; return; case 2: - z = value; + Z = value; return; default: throw new ArgumentOutOfRangeException(nameof(index)); @@ -96,18 +96,18 @@ namespace Godot /// </summary> public readonly void Deconstruct(out int x, out int y, out int z) { - x = this.x; - y = this.y; - z = this.z; + x = X; + y = Y; + z = Z; } /// <summary> /// Returns a new vector with all components in absolute values (i.e. positive). /// </summary> /// <returns>A vector with <see cref="Mathf.Abs(int)"/> called on each component.</returns> - public readonly Vector3i Abs() + public readonly Vector3I Abs() { - return new Vector3i(Mathf.Abs(x), Mathf.Abs(y), Mathf.Abs(z)); + return new Vector3I(Mathf.Abs(X), Mathf.Abs(Y), Mathf.Abs(Z)); } /// <summary> @@ -118,13 +118,13 @@ namespace Godot /// <param name="min">The vector with minimum allowed values.</param> /// <param name="max">The vector with maximum allowed values.</param> /// <returns>The vector with all components clamped.</returns> - public readonly Vector3i Clamp(Vector3i min, Vector3i max) + public readonly Vector3I Clamp(Vector3I min, Vector3I max) { - return new Vector3i + return new Vector3I ( - Mathf.Clamp(x, min.x, max.x), - Mathf.Clamp(y, min.y, max.y), - Mathf.Clamp(z, min.z, max.z) + Mathf.Clamp(X, min.X, max.X), + Mathf.Clamp(Y, min.Y, max.Y), + Mathf.Clamp(Z, min.Z, max.Z) ); } @@ -135,9 +135,9 @@ namespace Godot /// <returns>The length of this vector.</returns> public readonly real_t Length() { - int x2 = x * x; - int y2 = y * y; - int z2 = z * z; + int x2 = X * X; + int y2 = Y * Y; + int z2 = Z * Z; return Mathf.Sqrt(x2 + y2 + z2); } @@ -150,9 +150,9 @@ namespace Godot /// <returns>The squared length of this vector.</returns> public readonly int LengthSquared() { - int x2 = x * x; - int y2 = y * y; - int z2 = z * z; + int x2 = X * X; + int y2 = Y * Y; + int z2 = Z * Z; return x2 + y2 + z2; } @@ -164,7 +164,7 @@ namespace Godot /// <returns>The index of the highest axis.</returns> public readonly Axis MaxAxisIndex() { - return x < y ? (y < z ? Axis.Z : Axis.Y) : (x < z ? Axis.Z : Axis.X); + return X < Y ? (Y < Z ? Axis.Z : Axis.Y) : (X < Z ? Axis.Z : Axis.X); } /// <summary> @@ -174,7 +174,7 @@ namespace Godot /// <returns>The index of the lowest axis.</returns> public readonly Axis MinAxisIndex() { - return x < y ? (x < z ? Axis.X : Axis.Z) : (y < z ? Axis.Y : Axis.Z); + return X < Y ? (X < Z ? Axis.X : Axis.Z) : (Y < Z ? Axis.Y : Axis.Z); } /// <summary> @@ -183,208 +183,208 @@ namespace Godot /// by calling <see cref="Mathf.Sign(int)"/> on each component. /// </summary> /// <returns>A vector with all components as either <c>1</c>, <c>-1</c>, or <c>0</c>.</returns> - public readonly Vector3i Sign() + public readonly Vector3I Sign() { - Vector3i v = this; - v.x = Mathf.Sign(v.x); - v.y = Mathf.Sign(v.y); - v.z = Mathf.Sign(v.z); + Vector3I v = this; + v.X = Mathf.Sign(v.X); + v.Y = Mathf.Sign(v.Y); + v.Z = Mathf.Sign(v.Z); return v; } // Constants - private static readonly Vector3i _zero = new Vector3i(0, 0, 0); - private static readonly Vector3i _one = new Vector3i(1, 1, 1); + private static readonly Vector3I _zero = new Vector3I(0, 0, 0); + private static readonly Vector3I _one = new Vector3I(1, 1, 1); - private static readonly Vector3i _up = new Vector3i(0, 1, 0); - private static readonly Vector3i _down = new Vector3i(0, -1, 0); - private static readonly Vector3i _right = new Vector3i(1, 0, 0); - private static readonly Vector3i _left = new Vector3i(-1, 0, 0); - private static readonly Vector3i _forward = new Vector3i(0, 0, -1); - private static readonly Vector3i _back = new Vector3i(0, 0, 1); + private static readonly Vector3I _up = new Vector3I(0, 1, 0); + private static readonly Vector3I _down = new Vector3I(0, -1, 0); + private static readonly Vector3I _right = new Vector3I(1, 0, 0); + private static readonly Vector3I _left = new Vector3I(-1, 0, 0); + private static readonly Vector3I _forward = new Vector3I(0, 0, -1); + private static readonly Vector3I _back = new Vector3I(0, 0, 1); /// <summary> /// Zero vector, a vector with all components set to <c>0</c>. /// </summary> - /// <value>Equivalent to <c>new Vector3i(0, 0, 0)</c>.</value> - public static Vector3i Zero { get { return _zero; } } + /// <value>Equivalent to <c>new Vector3I(0, 0, 0)</c>.</value> + public static Vector3I Zero { get { return _zero; } } /// <summary> /// One vector, a vector with all components set to <c>1</c>. /// </summary> - /// <value>Equivalent to <c>new Vector3i(1, 1, 1)</c>.</value> - public static Vector3i One { get { return _one; } } + /// <value>Equivalent to <c>new Vector3I(1, 1, 1)</c>.</value> + public static Vector3I One { get { return _one; } } /// <summary> /// Up unit vector. /// </summary> - /// <value>Equivalent to <c>new Vector3i(0, 1, 0)</c>.</value> - public static Vector3i Up { get { return _up; } } + /// <value>Equivalent to <c>new Vector3I(0, 1, 0)</c>.</value> + public static Vector3I Up { get { return _up; } } /// <summary> /// Down unit vector. /// </summary> - /// <value>Equivalent to <c>new Vector3i(0, -1, 0)</c>.</value> - public static Vector3i Down { get { return _down; } } + /// <value>Equivalent to <c>new Vector3I(0, -1, 0)</c>.</value> + public static Vector3I Down { get { return _down; } } /// <summary> /// Right unit vector. Represents the local direction of right, /// and the global direction of east. /// </summary> - /// <value>Equivalent to <c>new Vector3i(1, 0, 0)</c>.</value> - public static Vector3i Right { get { return _right; } } + /// <value>Equivalent to <c>new Vector3I(1, 0, 0)</c>.</value> + public static Vector3I Right { get { return _right; } } /// <summary> /// Left unit vector. Represents the local direction of left, /// and the global direction of west. /// </summary> - /// <value>Equivalent to <c>new Vector3i(-1, 0, 0)</c>.</value> - public static Vector3i Left { get { return _left; } } + /// <value>Equivalent to <c>new Vector3I(-1, 0, 0)</c>.</value> + public static Vector3I Left { get { return _left; } } /// <summary> /// Forward unit vector. Represents the local direction of forward, /// and the global direction of north. /// </summary> - /// <value>Equivalent to <c>new Vector3i(0, 0, -1)</c>.</value> - public static Vector3i Forward { get { return _forward; } } + /// <value>Equivalent to <c>new Vector3I(0, 0, -1)</c>.</value> + public static Vector3I Forward { get { return _forward; } } /// <summary> /// Back unit vector. Represents the local direction of back, /// and the global direction of south. /// </summary> - /// <value>Equivalent to <c>new Vector3i(0, 0, 1)</c>.</value> - public static Vector3i Back { get { return _back; } } + /// <value>Equivalent to <c>new Vector3I(0, 0, 1)</c>.</value> + public static Vector3I Back { get { return _back; } } /// <summary> - /// Constructs a new <see cref="Vector3i"/> with the given components. + /// Constructs a new <see cref="Vector3I"/> with the given components. /// </summary> /// <param name="x">The vector's X component.</param> /// <param name="y">The vector's Y component.</param> /// <param name="z">The vector's Z component.</param> - public Vector3i(int x, int y, int z) + public Vector3I(int x, int y, int z) { - this.x = x; - this.y = y; - this.z = z; + X = x; + Y = y; + Z = z; } /// <summary> - /// Adds each component of the <see cref="Vector3i"/> - /// with the components of the given <see cref="Vector3i"/>. + /// Adds each component of the <see cref="Vector3I"/> + /// with the components of the given <see cref="Vector3I"/>. /// </summary> /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>The added vector.</returns> - public static Vector3i operator +(Vector3i left, Vector3i right) + public static Vector3I operator +(Vector3I left, Vector3I right) { - left.x += right.x; - left.y += right.y; - left.z += right.z; + left.X += right.X; + left.Y += right.Y; + left.Z += right.Z; return left; } /// <summary> - /// Subtracts each component of the <see cref="Vector3i"/> - /// by the components of the given <see cref="Vector3i"/>. + /// Subtracts each component of the <see cref="Vector3I"/> + /// by the components of the given <see cref="Vector3I"/>. /// </summary> /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>The subtracted vector.</returns> - public static Vector3i operator -(Vector3i left, Vector3i right) + public static Vector3I operator -(Vector3I left, Vector3I right) { - left.x -= right.x; - left.y -= right.y; - left.z -= right.z; + left.X -= right.X; + left.Y -= right.Y; + left.Z -= right.Z; return left; } /// <summary> - /// Returns the negative value of the <see cref="Vector3i"/>. - /// This is the same as writing <c>new Vector3i(-v.x, -v.y, -v.z)</c>. + /// Returns the negative value of the <see cref="Vector3I"/>. + /// This is the same as writing <c>new Vector3I(-v.X, -v.Y, -v.Z)</c>. /// This operation flips the direction of the vector while /// keeping the same magnitude. /// </summary> /// <param name="vec">The vector to negate/flip.</param> /// <returns>The negated/flipped vector.</returns> - public static Vector3i operator -(Vector3i vec) + public static Vector3I operator -(Vector3I vec) { - vec.x = -vec.x; - vec.y = -vec.y; - vec.z = -vec.z; + vec.X = -vec.X; + vec.Y = -vec.Y; + vec.Z = -vec.Z; return vec; } /// <summary> - /// Multiplies each component of the <see cref="Vector3i"/> + /// Multiplies each component of the <see cref="Vector3I"/> /// by the given <see langword="int"/>. /// </summary> /// <param name="vec">The vector to multiply.</param> /// <param name="scale">The scale to multiply by.</param> /// <returns>The multiplied vector.</returns> - public static Vector3i operator *(Vector3i vec, int scale) + public static Vector3I operator *(Vector3I vec, int scale) { - vec.x *= scale; - vec.y *= scale; - vec.z *= scale; + vec.X *= scale; + vec.Y *= scale; + vec.Z *= scale; return vec; } /// <summary> - /// Multiplies each component of the <see cref="Vector3i"/> + /// Multiplies each component of the <see cref="Vector3I"/> /// by the given <see langword="int"/>. /// </summary> /// <param name="scale">The scale to multiply by.</param> /// <param name="vec">The vector to multiply.</param> /// <returns>The multiplied vector.</returns> - public static Vector3i operator *(int scale, Vector3i vec) + public static Vector3I operator *(int scale, Vector3I vec) { - vec.x *= scale; - vec.y *= scale; - vec.z *= scale; + vec.X *= scale; + vec.Y *= scale; + vec.Z *= scale; return vec; } /// <summary> - /// Multiplies each component of the <see cref="Vector3i"/> - /// by the components of the given <see cref="Vector3i"/>. + /// Multiplies each component of the <see cref="Vector3I"/> + /// by the components of the given <see cref="Vector3I"/>. /// </summary> /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>The multiplied vector.</returns> - public static Vector3i operator *(Vector3i left, Vector3i right) + public static Vector3I operator *(Vector3I left, Vector3I right) { - left.x *= right.x; - left.y *= right.y; - left.z *= right.z; + left.X *= right.X; + left.Y *= right.Y; + left.Z *= right.Z; return left; } /// <summary> - /// Divides each component of the <see cref="Vector3i"/> + /// Divides each component of the <see cref="Vector3I"/> /// by the given <see langword="int"/>. /// </summary> /// <param name="vec">The dividend vector.</param> /// <param name="divisor">The divisor value.</param> /// <returns>The divided vector.</returns> - public static Vector3i operator /(Vector3i vec, int divisor) + public static Vector3I operator /(Vector3I vec, int divisor) { - vec.x /= divisor; - vec.y /= divisor; - vec.z /= divisor; + vec.X /= divisor; + vec.Y /= divisor; + vec.Z /= divisor; return vec; } /// <summary> - /// Divides each component of the <see cref="Vector3i"/> - /// by the components of the given <see cref="Vector3i"/>. + /// Divides each component of the <see cref="Vector3I"/> + /// by the components of the given <see cref="Vector3I"/>. /// </summary> /// <param name="vec">The dividend vector.</param> /// <param name="divisorv">The divisor vector.</param> /// <returns>The divided vector.</returns> - public static Vector3i operator /(Vector3i vec, Vector3i divisorv) + public static Vector3I operator /(Vector3I vec, Vector3I divisorv) { - vec.x /= divisorv.x; - vec.y /= divisorv.y; - vec.z /= divisorv.z; + vec.X /= divisorv.X; + vec.Y /= divisorv.Y; + vec.Z /= divisorv.Z; return vec; } /// <summary> - /// Gets the remainder of each component of the <see cref="Vector3i"/> + /// Gets the remainder of each component of the <see cref="Vector3I"/> /// with the components of the given <see langword="int"/>. /// This operation uses truncated division, which is often not desired /// as it does not work well with negative numbers. @@ -393,23 +393,23 @@ namespace Godot /// </summary> /// <example> /// <code> - /// GD.Print(new Vector3i(10, -20, 30) % 7); // Prints "(3, -6, 2)" + /// GD.Print(new Vector3I(10, -20, 30) % 7); // Prints "(3, -6, 2)" /// </code> /// </example> /// <param name="vec">The dividend vector.</param> /// <param name="divisor">The divisor value.</param> /// <returns>The remainder vector.</returns> - public static Vector3i operator %(Vector3i vec, int divisor) + public static Vector3I operator %(Vector3I vec, int divisor) { - vec.x %= divisor; - vec.y %= divisor; - vec.z %= divisor; + vec.X %= divisor; + vec.Y %= divisor; + vec.Z %= divisor; return vec; } /// <summary> - /// Gets the remainder of each component of the <see cref="Vector3i"/> - /// with the components of the given <see cref="Vector3i"/>. + /// Gets the remainder of each component of the <see cref="Vector3I"/> + /// with the components of the given <see cref="Vector3I"/>. /// This operation uses truncated division, which is often not desired /// as it does not work well with negative numbers. /// Consider using <see cref="Mathf.PosMod(int, int)"/> instead @@ -417,17 +417,17 @@ namespace Godot /// </summary> /// <example> /// <code> - /// GD.Print(new Vector3i(10, -20, 30) % new Vector3i(7, 8, 9)); // Prints "(3, -4, 3)" + /// GD.Print(new Vector3I(10, -20, 30) % new Vector3I(7, 8, 9)); // Prints "(3, -4, 3)" /// </code> /// </example> /// <param name="vec">The dividend vector.</param> /// <param name="divisorv">The divisor vector.</param> /// <returns>The remainder vector.</returns> - public static Vector3i operator %(Vector3i vec, Vector3i divisorv) + public static Vector3I operator %(Vector3I vec, Vector3I divisorv) { - vec.x %= divisorv.x; - vec.y %= divisorv.y; - vec.z %= divisorv.z; + vec.X %= divisorv.X; + vec.Y %= divisorv.Y; + vec.Z %= divisorv.Z; return vec; } @@ -437,7 +437,7 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the vectors are equal.</returns> - public static bool operator ==(Vector3i left, Vector3i right) + public static bool operator ==(Vector3I left, Vector3I right) { return left.Equals(right); } @@ -448,13 +448,13 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the vectors are not equal.</returns> - public static bool operator !=(Vector3i left, Vector3i right) + public static bool operator !=(Vector3I left, Vector3I right) { return !left.Equals(right); } /// <summary> - /// Compares two <see cref="Vector3i"/> vectors by first checking if + /// Compares two <see cref="Vector3I"/> vectors by first checking if /// the X value of the <paramref name="left"/> vector is less than /// the X value of the <paramref name="right"/> vector. /// If the X values are exactly equal, then it repeats this check @@ -464,21 +464,21 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the left is less than the right.</returns> - public static bool operator <(Vector3i left, Vector3i right) + public static bool operator <(Vector3I left, Vector3I right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - return left.z < right.z; + return left.Z < right.Z; } - return left.y < right.y; + return left.Y < right.Y; } - return left.x < right.x; + return left.X < right.X; } /// <summary> - /// Compares two <see cref="Vector3i"/> vectors by first checking if + /// Compares two <see cref="Vector3I"/> vectors by first checking if /// the X value of the <paramref name="left"/> vector is greater than /// the X value of the <paramref name="right"/> vector. /// If the X values are exactly equal, then it repeats this check @@ -488,21 +488,21 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the left is greater than the right.</returns> - public static bool operator >(Vector3i left, Vector3i right) + public static bool operator >(Vector3I left, Vector3I right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - return left.z > right.z; + return left.Z > right.Z; } - return left.y > right.y; + return left.Y > right.Y; } - return left.x > right.x; + return left.X > right.X; } /// <summary> - /// Compares two <see cref="Vector3i"/> vectors by first checking if + /// Compares two <see cref="Vector3I"/> vectors by first checking if /// the X value of the <paramref name="left"/> vector is less than /// or equal to the X value of the <paramref name="right"/> vector. /// If the X values are exactly equal, then it repeats this check @@ -512,21 +512,21 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the left is less than or equal to the right.</returns> - public static bool operator <=(Vector3i left, Vector3i right) + public static bool operator <=(Vector3I left, Vector3I right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - return left.z <= right.z; + return left.Z <= right.Z; } - return left.y < right.y; + return left.Y < right.Y; } - return left.x < right.x; + return left.X < right.X; } /// <summary> - /// Compares two <see cref="Vector3i"/> vectors by first checking if + /// Compares two <see cref="Vector3I"/> vectors by first checking if /// the X value of the <paramref name="left"/> vector is greater than /// or equal to the X value of the <paramref name="right"/> vector. /// If the X values are exactly equal, then it repeats this check @@ -536,38 +536,38 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the left is greater than or equal to the right.</returns> - public static bool operator >=(Vector3i left, Vector3i right) + public static bool operator >=(Vector3I left, Vector3I right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - return left.z >= right.z; + return left.Z >= right.Z; } - return left.y > right.y; + return left.Y > right.Y; } - return left.x > right.x; + return left.X > right.X; } /// <summary> - /// Converts this <see cref="Vector3i"/> to a <see cref="Vector3"/>. + /// Converts this <see cref="Vector3I"/> to a <see cref="Vector3"/>. /// </summary> /// <param name="value">The vector to convert.</param> - public static implicit operator Vector3(Vector3i value) + public static implicit operator Vector3(Vector3I value) { - return new Vector3(value.x, value.y, value.z); + return new Vector3(value.X, value.Y, value.Z); } /// <summary> - /// Converts a <see cref="Vector3"/> to a <see cref="Vector3i"/>. + /// Converts a <see cref="Vector3"/> to a <see cref="Vector3I"/>. /// </summary> /// <param name="value">The vector to convert.</param> - public static explicit operator Vector3i(Vector3 value) + public static explicit operator Vector3I(Vector3 value) { - return new Vector3i( - Mathf.RoundToInt(value.x), - Mathf.RoundToInt(value.y), - Mathf.RoundToInt(value.z) + return new Vector3I( + Mathf.RoundToInt(value.X), + Mathf.RoundToInt(value.Y), + Mathf.RoundToInt(value.Z) ); } @@ -579,7 +579,7 @@ namespace Godot /// <returns>Whether or not the vector and the object are equal.</returns> public override readonly bool Equals(object obj) { - return obj is Vector3i other && Equals(other); + return obj is Vector3I other && Equals(other); } /// <summary> @@ -587,36 +587,36 @@ namespace Godot /// </summary> /// <param name="other">The other vector.</param> /// <returns>Whether or not the vectors are equal.</returns> - public readonly bool Equals(Vector3i other) + public readonly bool Equals(Vector3I other) { - return x == other.x && y == other.y && z == other.z; + return X == other.X && Y == other.Y && Z == other.Z; } /// <summary> - /// Serves as the hash function for <see cref="Vector3i"/>. + /// Serves as the hash function for <see cref="Vector3I"/>. /// </summary> /// <returns>A hash code for this vector.</returns> public override readonly int GetHashCode() { - return y.GetHashCode() ^ x.GetHashCode() ^ z.GetHashCode(); + return Y.GetHashCode() ^ X.GetHashCode() ^ Z.GetHashCode(); } /// <summary> - /// Converts this <see cref="Vector3i"/> to a string. + /// Converts this <see cref="Vector3I"/> to a string. /// </summary> /// <returns>A string representation of this vector.</returns> public override readonly string ToString() { - return $"({x}, {y}, {z})"; + return $"({X}, {Y}, {Z})"; } /// <summary> - /// Converts this <see cref="Vector3i"/> to a string with the given <paramref name="format"/>. + /// Converts this <see cref="Vector3I"/> to a string with the given <paramref name="format"/>. /// </summary> /// <returns>A string representation of this vector.</returns> public readonly string ToString(string format) { - return $"({x.ToString(format)}, {y.ToString(format)}, {z.ToString(format)})"; + return $"({X.ToString(format)}, {Y.ToString(format)}, {Z.ToString(format)})"; } } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4.cs index 0f4528bb40..1fd39632b0 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4.cs @@ -37,22 +37,22 @@ namespace Godot /// <summary> /// The vector's X component. Also accessible by using the index position <c>[0]</c>. /// </summary> - public real_t x; + public real_t X; /// <summary> /// The vector's Y component. Also accessible by using the index position <c>[1]</c>. /// </summary> - public real_t y; + public real_t Y; /// <summary> /// The vector's Z component. Also accessible by using the index position <c>[2]</c>. /// </summary> - public real_t z; + public real_t Z; /// <summary> /// The vector's W component. Also accessible by using the index position <c>[3]</c>. /// </summary> - public real_t w; + public real_t W; /// <summary> /// Access vector components using their index. @@ -61,10 +61,10 @@ namespace Godot /// <paramref name="index"/> is not 0, 1, 2 or 3. /// </exception> /// <value> - /// <c>[0]</c> is equivalent to <see cref="x"/>, - /// <c>[1]</c> is equivalent to <see cref="y"/>, - /// <c>[2]</c> is equivalent to <see cref="z"/>. - /// <c>[3]</c> is equivalent to <see cref="w"/>. + /// <c>[0]</c> is equivalent to <see cref="X"/>, + /// <c>[1]</c> is equivalent to <see cref="Y"/>, + /// <c>[2]</c> is equivalent to <see cref="Z"/>. + /// <c>[3]</c> is equivalent to <see cref="W"/>. /// </value> public real_t this[int index] { @@ -73,13 +73,13 @@ namespace Godot switch (index) { case 0: - return x; + return X; case 1: - return y; + return Y; case 2: - return z; + return Z; case 3: - return w; + return W; default: throw new ArgumentOutOfRangeException(nameof(index)); } @@ -89,16 +89,16 @@ namespace Godot switch (index) { case 0: - x = value; + X = value; return; case 1: - y = value; + Y = value; return; case 2: - z = value; + Z = value; return; case 3: - w = value; + W = value; return; default: throw new ArgumentOutOfRangeException(nameof(index)); @@ -111,10 +111,10 @@ namespace Godot /// </summary> public readonly void Deconstruct(out real_t x, out real_t y, out real_t z, out real_t w) { - x = this.x; - y = this.y; - z = this.z; - w = this.w; + x = X; + y = Y; + z = Z; + w = W; } internal void Normalize() @@ -123,15 +123,15 @@ namespace Godot if (lengthsq == 0) { - x = y = z = w = 0f; + X = Y = Z = W = 0f; } else { real_t length = Mathf.Sqrt(lengthsq); - x /= length; - y /= length; - z /= length; - w /= length; + X /= length; + Y /= length; + Z /= length; + W /= length; } } @@ -141,7 +141,7 @@ namespace Godot /// <returns>A vector with <see cref="Mathf.Abs(real_t)"/> called on each component.</returns> public readonly Vector4 Abs() { - return new Vector4(Mathf.Abs(x), Mathf.Abs(y), Mathf.Abs(z), Mathf.Abs(w)); + return new Vector4(Mathf.Abs(X), Mathf.Abs(Y), Mathf.Abs(Z), Mathf.Abs(W)); } /// <summary> @@ -150,7 +150,7 @@ namespace Godot /// <returns>A vector with <see cref="Mathf.Ceil"/> called on each component.</returns> public readonly Vector4 Ceil() { - return new Vector4(Mathf.Ceil(x), Mathf.Ceil(y), Mathf.Ceil(z), Mathf.Ceil(w)); + return new Vector4(Mathf.Ceil(X), Mathf.Ceil(Y), Mathf.Ceil(Z), Mathf.Ceil(W)); } /// <summary> @@ -165,10 +165,10 @@ namespace Godot { return new Vector4 ( - Mathf.Clamp(x, min.x, max.x), - Mathf.Clamp(y, min.y, max.y), - Mathf.Clamp(z, min.z, max.z), - Mathf.Clamp(w, min.w, max.w) + Mathf.Clamp(X, min.X, max.X), + Mathf.Clamp(Y, min.Y, max.Y), + Mathf.Clamp(Z, min.Z, max.Z), + Mathf.Clamp(W, min.W, max.W) ); } @@ -185,10 +185,10 @@ namespace Godot { return new Vector4 ( - Mathf.CubicInterpolate(x, b.x, preA.x, postB.x, weight), - Mathf.CubicInterpolate(y, b.y, preA.y, postB.y, weight), - Mathf.CubicInterpolate(z, b.z, preA.z, postB.z, weight), - Mathf.CubicInterpolate(w, b.w, preA.w, postB.w, weight) + Mathf.CubicInterpolate(X, b.X, preA.X, postB.X, weight), + Mathf.CubicInterpolate(Y, b.Y, preA.Y, postB.Y, weight), + Mathf.CubicInterpolate(Z, b.Z, preA.Z, postB.Z, weight), + Mathf.CubicInterpolate(W, b.W, preA.W, postB.W, weight) ); } @@ -210,10 +210,10 @@ namespace Godot { return new Vector4 ( - Mathf.CubicInterpolateInTime(x, b.x, preA.x, postB.x, weight, t, preAT, postBT), - Mathf.CubicInterpolateInTime(y, b.y, preA.y, postB.y, weight, t, preAT, postBT), - Mathf.CubicInterpolateInTime(z, b.z, preA.z, postB.z, weight, t, preAT, postBT), - Mathf.CubicInterpolateInTime(w, b.w, preA.w, postB.w, weight, t, preAT, postBT) + Mathf.CubicInterpolateInTime(X, b.X, preA.X, postB.X, weight, t, preAT, postBT), + Mathf.CubicInterpolateInTime(Y, b.Y, preA.Y, postB.Y, weight, t, preAT, postBT), + Mathf.CubicInterpolateInTime(Z, b.Z, preA.Z, postB.Z, weight, t, preAT, postBT), + Mathf.CubicInterpolateInTime(W, b.W, preA.W, postB.W, weight, t, preAT, postBT) ); } @@ -224,7 +224,7 @@ namespace Godot /// <returns>The direction from this vector to <paramref name="to"/>.</returns> public readonly Vector4 DirectionTo(Vector4 to) { - Vector4 ret = new Vector4(to.x - x, to.y - y, to.z - z, to.w - w); + Vector4 ret = new Vector4(to.X - X, to.Y - Y, to.Z - Z, to.W - W); ret.Normalize(); return ret; } @@ -258,7 +258,7 @@ namespace Godot /// <returns>The dot product of the two vectors.</returns> public readonly real_t Dot(Vector4 with) { - return (x * with.x) + (y * with.y) + (z * with.z) + (w * with.w); + return (X * with.X) + (Y * with.Y) + (Z * with.Z) + (W * with.W); } /// <summary> @@ -267,16 +267,16 @@ namespace Godot /// <returns>A vector with <see cref="Mathf.Floor"/> called on each component.</returns> public readonly Vector4 Floor() { - return new Vector4(Mathf.Floor(x), Mathf.Floor(y), Mathf.Floor(z), Mathf.Floor(w)); + return new Vector4(Mathf.Floor(X), Mathf.Floor(Y), Mathf.Floor(Z), Mathf.Floor(W)); } /// <summary> - /// Returns the inverse of this vector. This is the same as <c>new Vector4(1 / v.x, 1 / v.y, 1 / v.z, 1 / v.w)</c>. + /// Returns the inverse of this vector. This is the same as <c>new Vector4(1 / v.X, 1 / v.Y, 1 / v.Z, 1 / v.W)</c>. /// </summary> /// <returns>The inverse of this vector.</returns> public readonly Vector4 Inverse() { - return new Vector4(1 / x, 1 / y, 1 / z, 1 / w); + return new Vector4(1 / X, 1 / Y, 1 / Z, 1 / W); } /// <summary> @@ -286,7 +286,7 @@ namespace Godot /// <returns>Whether this vector is finite or not.</returns> public readonly bool IsFinite() { - return Mathf.IsFinite(x) && Mathf.IsFinite(y) && Mathf.IsFinite(z) && Mathf.IsFinite(w); + return Mathf.IsFinite(X) && Mathf.IsFinite(Y) && Mathf.IsFinite(Z) && Mathf.IsFinite(W); } /// <summary> @@ -305,10 +305,10 @@ namespace Godot /// <returns>The length of this vector.</returns> public readonly real_t Length() { - real_t x2 = x * x; - real_t y2 = y * y; - real_t z2 = z * z; - real_t w2 = w * w; + real_t x2 = X * X; + real_t y2 = Y * Y; + real_t z2 = Z * Z; + real_t w2 = W * W; return Mathf.Sqrt(x2 + y2 + z2 + w2); } @@ -321,10 +321,10 @@ namespace Godot /// <returns>The squared length of this vector.</returns> public readonly real_t LengthSquared() { - real_t x2 = x * x; - real_t y2 = y * y; - real_t z2 = z * z; - real_t w2 = w * w; + real_t x2 = X * X; + real_t y2 = Y * Y; + real_t z2 = Z * Z; + real_t w2 = W * W; return x2 + y2 + z2 + w2; } @@ -340,10 +340,10 @@ namespace Godot { return new Vector4 ( - Mathf.Lerp(x, to.x, weight), - Mathf.Lerp(y, to.y, weight), - Mathf.Lerp(z, to.z, weight), - Mathf.Lerp(w, to.w, weight) + Mathf.Lerp(X, to.X, weight), + Mathf.Lerp(Y, to.Y, weight), + Mathf.Lerp(Z, to.Z, weight), + Mathf.Lerp(W, to.W, weight) ); } @@ -355,7 +355,7 @@ namespace Godot public readonly Axis MaxAxisIndex() { int max_index = 0; - real_t max_value = x; + real_t max_value = X; for (int i = 1; i < 4; i++) { if (this[i] > max_value) @@ -375,7 +375,7 @@ namespace Godot public readonly Axis MinAxisIndex() { int min_index = 0; - real_t min_value = x; + real_t min_value = X; for (int i = 1; i < 4; i++) { if (this[i] <= min_value) @@ -409,10 +409,10 @@ namespace Godot public readonly Vector4 PosMod(real_t mod) { return new Vector4( - Mathf.PosMod(x, mod), - Mathf.PosMod(y, mod), - Mathf.PosMod(z, mod), - Mathf.PosMod(w, mod) + Mathf.PosMod(X, mod), + Mathf.PosMod(Y, mod), + Mathf.PosMod(Z, mod), + Mathf.PosMod(W, mod) ); } @@ -427,10 +427,10 @@ namespace Godot public readonly Vector4 PosMod(Vector4 modv) { return new Vector4( - Mathf.PosMod(x, modv.x), - Mathf.PosMod(y, modv.y), - Mathf.PosMod(z, modv.z), - Mathf.PosMod(w, modv.w) + Mathf.PosMod(X, modv.X), + Mathf.PosMod(Y, modv.Y), + Mathf.PosMod(Z, modv.Z), + Mathf.PosMod(W, modv.W) ); } @@ -441,7 +441,7 @@ namespace Godot /// <returns>The rounded vector.</returns> public readonly Vector4 Round() { - return new Vector4(Mathf.Round(x), Mathf.Round(y), Mathf.Round(z), Mathf.Round(w)); + return new Vector4(Mathf.Round(X), Mathf.Round(Y), Mathf.Round(Z), Mathf.Round(W)); } /// <summary> @@ -453,10 +453,10 @@ namespace Godot public readonly Vector4 Sign() { Vector4 v; - v.x = Mathf.Sign(x); - v.y = Mathf.Sign(y); - v.z = Mathf.Sign(z); - v.w = Mathf.Sign(w); + v.X = Mathf.Sign(X); + v.Y = Mathf.Sign(Y); + v.Z = Mathf.Sign(Z); + v.W = Mathf.Sign(W); return v; } @@ -469,10 +469,10 @@ namespace Godot public readonly Vector4 Snapped(Vector4 step) { return new Vector4( - Mathf.Snapped(x, step.x), - Mathf.Snapped(y, step.y), - Mathf.Snapped(z, step.z), - Mathf.Snapped(w, step.w) + Mathf.Snapped(X, step.X), + Mathf.Snapped(Y, step.Y), + Mathf.Snapped(Z, step.Z), + Mathf.Snapped(W, step.W) ); } @@ -506,10 +506,10 @@ namespace Godot /// <param name="w">The vector's W component.</param> public Vector4(real_t x, real_t y, real_t z, real_t w) { - this.x = x; - this.y = y; - this.z = z; - this.w = w; + X = x; + Y = y; + Z = z; + W = w; } /// <summary> @@ -521,10 +521,10 @@ namespace Godot /// <returns>The added vector.</returns> public static Vector4 operator +(Vector4 left, Vector4 right) { - left.x += right.x; - left.y += right.y; - left.z += right.z; - left.w += right.w; + left.X += right.X; + left.Y += right.Y; + left.Z += right.Z; + left.W += right.W; return left; } @@ -537,16 +537,16 @@ namespace Godot /// <returns>The subtracted vector.</returns> public static Vector4 operator -(Vector4 left, Vector4 right) { - left.x -= right.x; - left.y -= right.y; - left.z -= right.z; - left.w -= right.w; + left.X -= right.X; + left.Y -= right.Y; + left.Z -= right.Z; + left.W -= right.W; return left; } /// <summary> /// Returns the negative value of the <see cref="Vector4"/>. - /// This is the same as writing <c>new Vector4(-v.x, -v.y, -v.z, -v.w)</c>. + /// This is the same as writing <c>new Vector4(-v.X, -v.Y, -v.Z, -v.W)</c>. /// This operation flips the direction of the vector while /// keeping the same magnitude. /// With floats, the number zero can be either positive or negative. @@ -555,10 +555,10 @@ namespace Godot /// <returns>The negated/flipped vector.</returns> public static Vector4 operator -(Vector4 vec) { - vec.x = -vec.x; - vec.y = -vec.y; - vec.z = -vec.z; - vec.w = -vec.w; + vec.X = -vec.X; + vec.Y = -vec.Y; + vec.Z = -vec.Z; + vec.W = -vec.W; return vec; } @@ -571,10 +571,10 @@ namespace Godot /// <returns>The multiplied vector.</returns> public static Vector4 operator *(Vector4 vec, real_t scale) { - vec.x *= scale; - vec.y *= scale; - vec.z *= scale; - vec.w *= scale; + vec.X *= scale; + vec.Y *= scale; + vec.Z *= scale; + vec.W *= scale; return vec; } @@ -587,10 +587,10 @@ namespace Godot /// <returns>The multiplied vector.</returns> public static Vector4 operator *(real_t scale, Vector4 vec) { - vec.x *= scale; - vec.y *= scale; - vec.z *= scale; - vec.w *= scale; + vec.X *= scale; + vec.Y *= scale; + vec.Z *= scale; + vec.W *= scale; return vec; } @@ -603,10 +603,10 @@ namespace Godot /// <returns>The multiplied vector.</returns> public static Vector4 operator *(Vector4 left, Vector4 right) { - left.x *= right.x; - left.y *= right.y; - left.z *= right.z; - left.w *= right.w; + left.X *= right.X; + left.Y *= right.Y; + left.Z *= right.Z; + left.W *= right.W; return left; } @@ -619,10 +619,10 @@ namespace Godot /// <returns>The divided vector.</returns> public static Vector4 operator /(Vector4 vec, real_t divisor) { - vec.x /= divisor; - vec.y /= divisor; - vec.z /= divisor; - vec.w /= divisor; + vec.X /= divisor; + vec.Y /= divisor; + vec.Z /= divisor; + vec.W /= divisor; return vec; } @@ -635,10 +635,10 @@ namespace Godot /// <returns>The divided vector.</returns> public static Vector4 operator /(Vector4 vec, Vector4 divisorv) { - vec.x /= divisorv.x; - vec.y /= divisorv.y; - vec.z /= divisorv.z; - vec.w /= divisorv.w; + vec.X /= divisorv.X; + vec.Y /= divisorv.Y; + vec.Z /= divisorv.Z; + vec.W /= divisorv.W; return vec; } @@ -660,10 +660,10 @@ namespace Godot /// <returns>The remainder vector.</returns> public static Vector4 operator %(Vector4 vec, real_t divisor) { - vec.x %= divisor; - vec.y %= divisor; - vec.z %= divisor; - vec.w %= divisor; + vec.X %= divisor; + vec.Y %= divisor; + vec.Z %= divisor; + vec.W %= divisor; return vec; } @@ -685,10 +685,10 @@ namespace Godot /// <returns>The remainder vector.</returns> public static Vector4 operator %(Vector4 vec, Vector4 divisorv) { - vec.x %= divisorv.x; - vec.y %= divisorv.y; - vec.z %= divisorv.z; - vec.w %= divisorv.w; + vec.X %= divisorv.X; + vec.Y %= divisorv.Y; + vec.Z %= divisorv.Z; + vec.W %= divisorv.W; return vec; } @@ -731,19 +731,19 @@ namespace Godot /// <returns>Whether or not the left is less than the right.</returns> public static bool operator <(Vector4 left, Vector4 right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - if (left.z == right.z) + if (left.Z == right.Z) { - return left.w < right.w; + return left.W < right.W; } - return left.z < right.z; + return left.Z < right.Z; } - return left.y < right.y; + return left.Y < right.Y; } - return left.x < right.x; + return left.X < right.X; } /// <summary> @@ -759,19 +759,19 @@ namespace Godot /// <returns>Whether or not the left is greater than the right.</returns> public static bool operator >(Vector4 left, Vector4 right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - if (left.z == right.z) + if (left.Z == right.Z) { - return left.w > right.w; + return left.W > right.W; } - return left.z > right.z; + return left.Z > right.Z; } - return left.y > right.y; + return left.Y > right.Y; } - return left.x > right.x; + return left.X > right.X; } /// <summary> @@ -787,19 +787,19 @@ namespace Godot /// <returns>Whether or not the left is less than or equal to the right.</returns> public static bool operator <=(Vector4 left, Vector4 right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - if (left.z == right.z) + if (left.Z == right.Z) { - return left.w <= right.w; + return left.W <= right.W; } - return left.z < right.z; + return left.Z < right.Z; } - return left.y < right.y; + return left.Y < right.Y; } - return left.x < right.x; + return left.X < right.X; } /// <summary> @@ -815,19 +815,19 @@ namespace Godot /// <returns>Whether or not the left is greater than or equal to the right.</returns> public static bool operator >=(Vector4 left, Vector4 right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - if (left.z == right.z) + if (left.Z == right.Z) { - return left.w >= right.w; + return left.W >= right.W; } - return left.z > right.z; + return left.Z > right.Z; } - return left.y > right.y; + return left.Y > right.Y; } - return left.x > right.x; + return left.X > right.X; } /// <summary> @@ -852,7 +852,7 @@ namespace Godot /// <returns>Whether or not the vectors are exactly equal.</returns> public readonly bool Equals(Vector4 other) { - return x == other.x && y == other.y && z == other.z && w == other.w; + return X == other.X && Y == other.Y && Z == other.Z && W == other.W; } /// <summary> @@ -863,7 +863,7 @@ namespace Godot /// <returns>Whether or not the vectors are approximately equal.</returns> public readonly bool IsEqualApprox(Vector4 other) { - return Mathf.IsEqualApprox(x, other.x) && Mathf.IsEqualApprox(y, other.y) && Mathf.IsEqualApprox(z, other.z) && Mathf.IsEqualApprox(w, other.w); + return Mathf.IsEqualApprox(X, other.X) && Mathf.IsEqualApprox(Y, other.Y) && Mathf.IsEqualApprox(Z, other.Z) && Mathf.IsEqualApprox(W, other.W); } /// <summary> @@ -875,7 +875,7 @@ namespace Godot /// <returns>Whether or not the vector is approximately zero.</returns> public readonly bool IsZeroApprox() { - return Mathf.IsZeroApprox(x) && Mathf.IsZeroApprox(y) && Mathf.IsZeroApprox(z) && Mathf.IsZeroApprox(w); + return Mathf.IsZeroApprox(X) && Mathf.IsZeroApprox(Y) && Mathf.IsZeroApprox(Z) && Mathf.IsZeroApprox(W); } /// <summary> @@ -884,7 +884,7 @@ namespace Godot /// <returns>A hash code for this vector.</returns> public override readonly int GetHashCode() { - return y.GetHashCode() ^ x.GetHashCode() ^ z.GetHashCode() ^ w.GetHashCode(); + return Y.GetHashCode() ^ X.GetHashCode() ^ Z.GetHashCode() ^ W.GetHashCode(); } /// <summary> @@ -893,7 +893,7 @@ namespace Godot /// <returns>A string representation of this vector.</returns> public override string ToString() { - return $"({x}, {y}, {z}, {w})"; + return $"({X}, {Y}, {Z}, {W})"; } /// <summary> @@ -902,7 +902,7 @@ namespace Godot /// <returns>A string representation of this vector.</returns> public readonly string ToString(string format) { - return $"({x.ToString(format)}, {y.ToString(format)}, {z.ToString(format)}, {w.ToString(format)})"; + return $"({X.ToString(format)}, {Y.ToString(format)}, {Z.ToString(format)}, {W.ToString(format)})"; } } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4i.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4I.cs index 00ecc64856..f065327066 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4i.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4I.cs @@ -8,7 +8,7 @@ namespace Godot /// </summary> [Serializable] [StructLayout(LayoutKind.Sequential)] - public struct Vector4i : IEquatable<Vector4i> + public struct Vector4I : IEquatable<Vector4I> { /// <summary> /// Enumerated index values for the axes. @@ -37,22 +37,22 @@ namespace Godot /// <summary> /// The vector's X component. Also accessible by using the index position <c>[0]</c>. /// </summary> - public int x; + public int X; /// <summary> /// The vector's Y component. Also accessible by using the index position <c>[1]</c>. /// </summary> - public int y; + public int Y; /// <summary> /// The vector's Z component. Also accessible by using the index position <c>[2]</c>. /// </summary> - public int z; + public int Z; /// <summary> /// The vector's W component. Also accessible by using the index position <c>[3]</c>. /// </summary> - public int w; + public int W; /// <summary> /// Access vector components using their <paramref name="index"/>. @@ -61,10 +61,10 @@ namespace Godot /// <paramref name="index"/> is not 0, 1, 2 or 3. /// </exception> /// <value> - /// <c>[0]</c> is equivalent to <see cref="x"/>, - /// <c>[1]</c> is equivalent to <see cref="y"/>, - /// <c>[2]</c> is equivalent to <see cref="z"/>. - /// <c>[3]</c> is equivalent to <see cref="w"/>. + /// <c>[0]</c> is equivalent to <see cref="X"/>, + /// <c>[1]</c> is equivalent to <see cref="Y"/>, + /// <c>[2]</c> is equivalent to <see cref="Z"/>. + /// <c>[3]</c> is equivalent to <see cref="W"/>. /// </value> public int this[int index] { @@ -73,13 +73,13 @@ namespace Godot switch (index) { case 0: - return x; + return X; case 1: - return y; + return Y; case 2: - return z; + return Z; case 3: - return w; + return W; default: throw new ArgumentOutOfRangeException(nameof(index)); } @@ -89,16 +89,16 @@ namespace Godot switch (index) { case 0: - x = value; + X = value; return; case 1: - y = value; + Y = value; return; case 2: - z = value; + Z = value; return; case 3: - w = value; + W = value; return; default: throw new ArgumentOutOfRangeException(nameof(index)); @@ -111,19 +111,19 @@ namespace Godot /// </summary> public readonly void Deconstruct(out int x, out int y, out int z, out int w) { - x = this.x; - y = this.y; - z = this.z; - w = this.w; + x = X; + y = Y; + z = Z; + w = W; } /// <summary> /// Returns a new vector with all components in absolute values (i.e. positive). /// </summary> /// <returns>A vector with <see cref="Mathf.Abs(int)"/> called on each component.</returns> - public readonly Vector4i Abs() + public readonly Vector4I Abs() { - return new Vector4i(Mathf.Abs(x), Mathf.Abs(y), Mathf.Abs(z), Mathf.Abs(w)); + return new Vector4I(Mathf.Abs(X), Mathf.Abs(Y), Mathf.Abs(Z), Mathf.Abs(W)); } /// <summary> @@ -134,14 +134,14 @@ namespace Godot /// <param name="min">The vector with minimum allowed values.</param> /// <param name="max">The vector with maximum allowed values.</param> /// <returns>The vector with all components clamped.</returns> - public readonly Vector4i Clamp(Vector4i min, Vector4i max) + public readonly Vector4I Clamp(Vector4I min, Vector4I max) { - return new Vector4i + return new Vector4I ( - Mathf.Clamp(x, min.x, max.x), - Mathf.Clamp(y, min.y, max.y), - Mathf.Clamp(z, min.z, max.z), - Mathf.Clamp(w, min.w, max.w) + Mathf.Clamp(X, min.X, max.X), + Mathf.Clamp(Y, min.Y, max.Y), + Mathf.Clamp(Z, min.Z, max.Z), + Mathf.Clamp(W, min.W, max.W) ); } @@ -152,10 +152,10 @@ namespace Godot /// <returns>The length of this vector.</returns> public readonly real_t Length() { - int x2 = x * x; - int y2 = y * y; - int z2 = z * z; - int w2 = w * w; + int x2 = X * X; + int y2 = Y * Y; + int z2 = Z * Z; + int w2 = W * W; return Mathf.Sqrt(x2 + y2 + z2 + w2); } @@ -168,10 +168,10 @@ namespace Godot /// <returns>The squared length of this vector.</returns> public readonly int LengthSquared() { - int x2 = x * x; - int y2 = y * y; - int z2 = z * z; - int w2 = w * w; + int x2 = X * X; + int y2 = Y * Y; + int z2 = Z * Z; + int w2 = W * W; return x2 + y2 + z2 + w2; } @@ -184,7 +184,7 @@ namespace Godot public readonly Axis MaxAxisIndex() { int max_index = 0; - int max_value = x; + int max_value = X; for (int i = 1; i < 4; i++) { if (this[i] > max_value) @@ -204,7 +204,7 @@ namespace Godot public readonly Axis MinAxisIndex() { int min_index = 0; - int min_value = x; + int min_value = X; for (int i = 1; i < 4; i++) { if (this[i] <= min_value) @@ -222,213 +222,217 @@ namespace Godot /// by calling <see cref="Mathf.Sign(int)"/> on each component. /// </summary> /// <returns>A vector with all components as either <c>1</c>, <c>-1</c>, or <c>0</c>.</returns> - public readonly Vector4i Sign() + public readonly Vector4I Sign() { - return new Vector4i(Mathf.Sign(x), Mathf.Sign(y), Mathf.Sign(z), Mathf.Sign(w)); + return new Vector4I(Mathf.Sign(X), Mathf.Sign(Y), Mathf.Sign(Z), Mathf.Sign(W)); } // Constants - private static readonly Vector4i _zero = new Vector4i(0, 0, 0, 0); - private static readonly Vector4i _one = new Vector4i(1, 1, 1, 1); + private static readonly Vector4I _zero = new Vector4I(0, 0, 0, 0); + private static readonly Vector4I _one = new Vector4I(1, 1, 1, 1); /// <summary> /// Zero vector, a vector with all components set to <c>0</c>. /// </summary> - /// <value>Equivalent to <c>new Vector4i(0, 0, 0, 0)</c>.</value> - public static Vector4i Zero { get { return _zero; } } + /// <value>Equivalent to <c>new Vector4I(0, 0, 0, 0)</c>.</value> + public static Vector4I Zero { get { return _zero; } } /// <summary> /// One vector, a vector with all components set to <c>1</c>. /// </summary> - /// <value>Equivalent to <c>new Vector4i(1, 1, 1, 1)</c>.</value> - public static Vector4i One { get { return _one; } } + /// <value>Equivalent to <c>new Vector4I(1, 1, 1, 1)</c>.</value> + public static Vector4I One { get { return _one; } } /// <summary> - /// Constructs a new <see cref="Vector4i"/> with the given components. + /// Constructs a new <see cref="Vector4I"/> with the given components. /// </summary> /// <param name="x">The vector's X component.</param> /// <param name="y">The vector's Y component.</param> /// <param name="z">The vector's Z component.</param> /// <param name="w">The vector's W component.</param> - public Vector4i(int x, int y, int z, int w) + public Vector4I(int x, int y, int z, int w) { - this.x = x; - this.y = y; - this.z = z; - this.w = w; + X = x; + Y = y; + Z = z; + W = w; } /// <summary> - /// Adds each component of the <see cref="Vector4i"/> - /// with the components of the given <see cref="Vector4i"/>. + /// Adds each component of the <see cref="Vector4I"/> + /// with the components of the given <see cref="Vector4I"/>. /// </summary> /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>The added vector.</returns> - public static Vector4i operator +(Vector4i left, Vector4i right) + public static Vector4I operator +(Vector4I left, Vector4I right) { - left.x += right.x; - left.y += right.y; - left.z += right.z; - left.w += right.w; + left.X += right.X; + left.Y += right.Y; + left.Z += right.Z; + left.W += right.W; return left; } /// <summary> - /// Subtracts each component of the <see cref="Vector4i"/> - /// by the components of the given <see cref="Vector4i"/>. + /// Subtracts each component of the <see cref="Vector4I"/> + /// by the components of the given <see cref="Vector4I"/>. /// </summary> /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>The subtracted vector.</returns> - public static Vector4i operator -(Vector4i left, Vector4i right) + public static Vector4I operator -(Vector4I left, Vector4I right) { - left.x -= right.x; - left.y -= right.y; - left.z -= right.z; - left.w -= right.w; + left.X -= right.X; + left.Y -= right.Y; + left.Z -= right.Z; + left.W -= right.W; return left; } /// <summary> - /// Returns the negative value of the <see cref="Vector4i"/>. - /// This is the same as writing <c>new Vector4i(-v.x, -v.y, -v.z, -v.w)</c>. + /// Returns the negative value of the <see cref="Vector4I"/>. + /// This is the same as writing <c>new Vector4I(-v.X, -v.Y, -v.Z, -v.W)</c>. /// This operation flips the direction of the vector while /// keeping the same magnitude. /// </summary> /// <param name="vec">The vector to negate/flip.</param> /// <returns>The negated/flipped vector.</returns> - public static Vector4i operator -(Vector4i vec) + public static Vector4I operator -(Vector4I vec) { - vec.x = -vec.x; - vec.y = -vec.y; - vec.z = -vec.z; - vec.w = -vec.w; + vec.X = -vec.X; + vec.Y = -vec.Y; + vec.Z = -vec.Z; + vec.W = -vec.W; return vec; } /// <summary> - /// Multiplies each component of the <see cref="Vector4i"/> + /// Multiplies each component of the <see cref="Vector4I"/> /// by the given <see langword="int"/>. /// </summary> /// <param name="vec">The vector to multiply.</param> /// <param name="scale">The scale to multiply by.</param> /// <returns>The multiplied vector.</returns> - public static Vector4i operator *(Vector4i vec, int scale) + public static Vector4I operator *(Vector4I vec, int scale) { - vec.x *= scale; - vec.y *= scale; - vec.z *= scale; - vec.w *= scale; + vec.X *= scale; + vec.Y *= scale; + vec.Z *= scale; + vec.W *= scale; return vec; } /// <summary> - /// Multiplies each component of the <see cref="Vector4i"/> + /// Multiplies each component of the <see cref="Vector4I"/> /// by the given <see langword="int"/>. /// </summary> /// <param name="scale">The scale to multiply by.</param> /// <param name="vec">The vector to multiply.</param> /// <returns>The multiplied vector.</returns> - public static Vector4i operator *(int scale, Vector4i vec) + public static Vector4I operator *(int scale, Vector4I vec) { - vec.x *= scale; - vec.y *= scale; - vec.z *= scale; - vec.w *= scale; + vec.X *= scale; + vec.Y *= scale; + vec.Z *= scale; + vec.W *= scale; return vec; } /// <summary> - /// Multiplies each component of the <see cref="Vector4i"/> - /// by the components of the given <see cref="Vector4i"/>. + /// Multiplies each component of the <see cref="Vector4I"/> + /// by the components of the given <see cref="Vector4I"/>. /// </summary> /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>The multiplied vector.</returns> - public static Vector4i operator *(Vector4i left, Vector4i right) + public static Vector4I operator *(Vector4I left, Vector4I right) { - left.x *= right.x; - left.y *= right.y; - left.z *= right.z; - left.w *= right.w; + left.X *= right.X; + left.Y *= right.Y; + left.Z *= right.Z; + left.W *= right.W; return left; } /// <summary> - /// Divides each component of the <see cref="Vector4i"/> + /// Divides each component of the <see cref="Vector4I"/> /// by the given <see langword="int"/>. /// </summary> /// <param name="vec">The dividend vector.</param> /// <param name="divisor">The divisor value.</param> /// <returns>The divided vector.</returns> - public static Vector4i operator /(Vector4i vec, int divisor) + public static Vector4I operator /(Vector4I vec, int divisor) { - vec.x /= divisor; - vec.y /= divisor; - vec.z /= divisor; - vec.w /= divisor; + vec.X /= divisor; + vec.Y /= divisor; + vec.Z /= divisor; + vec.W /= divisor; return vec; } /// <summary> - /// Divides each component of the <see cref="Vector4i"/> - /// by the components of the given <see cref="Vector4i"/>. + /// Divides each component of the <see cref="Vector4I"/> + /// by the components of the given <see cref="Vector4I"/>. /// </summary> /// <param name="vec">The dividend vector.</param> /// <param name="divisorv">The divisor vector.</param> /// <returns>The divided vector.</returns> - public static Vector4i operator /(Vector4i vec, Vector4i divisorv) + public static Vector4I operator /(Vector4I vec, Vector4I divisorv) { - vec.x /= divisorv.x; - vec.y /= divisorv.y; - vec.z /= divisorv.z; - vec.w /= divisorv.w; + vec.X /= divisorv.X; + vec.Y /= divisorv.Y; + vec.Z /= divisorv.Z; + vec.W /= divisorv.W; return vec; } /// <summary> - /// Gets the remainder of each component of the <see cref="Vector4i"/> + /// Gets the remainder of each component of the <see cref="Vector4I"/> /// with the components of the given <see langword="int"/>. /// This operation uses truncated division, which is often not desired /// as it does not work well with negative numbers. + /// Consider using <see cref="Mathf.PosMod(int, int)"/> instead + /// if you want to handle negative numbers. /// </summary> /// <example> /// <code> - /// GD.Print(new Vecto43i(10, -20, 30, -40) % 7); // Prints "(3, -6, 2, -5)" + /// GD.Print(new Vector4I(10, -20, 30, -40) % 7); // Prints "(3, -6, 2, -5)" /// </code> /// </example> /// <param name="vec">The dividend vector.</param> /// <param name="divisor">The divisor value.</param> /// <returns>The remainder vector.</returns> - public static Vector4i operator %(Vector4i vec, int divisor) + public static Vector4I operator %(Vector4I vec, int divisor) { - vec.x %= divisor; - vec.y %= divisor; - vec.z %= divisor; - vec.w %= divisor; + vec.X %= divisor; + vec.Y %= divisor; + vec.Z %= divisor; + vec.W %= divisor; return vec; } /// <summary> - /// Gets the remainder of each component of the <see cref="Vector4i"/> - /// with the components of the given <see cref="Vector4i"/>. + /// Gets the remainder of each component of the <see cref="Vector4I"/> + /// with the components of the given <see cref="Vector4I"/>. /// This operation uses truncated division, which is often not desired /// as it does not work well with negative numbers. + /// Consider using <see cref="Mathf.PosMod(int, int)"/> instead + /// if you want to handle negative numbers. /// </summary> /// <example> /// <code> - /// GD.Print(new Vector4i(10, -20, 30, -40) % new Vector4i(6, 7, 8, 9)); // Prints "(4, -6, 6, -4)" + /// GD.Print(new Vector4I(10, -20, 30, -40) % new Vector4I(6, 7, 8, 9)); // Prints "(4, -6, 6, -4)" /// </code> /// </example> /// <param name="vec">The dividend vector.</param> /// <param name="divisorv">The divisor vector.</param> /// <returns>The remainder vector.</returns> - public static Vector4i operator %(Vector4i vec, Vector4i divisorv) + public static Vector4I operator %(Vector4I vec, Vector4I divisorv) { - vec.x %= divisorv.x; - vec.y %= divisorv.y; - vec.z %= divisorv.z; - vec.w %= divisorv.w; + vec.X %= divisorv.X; + vec.Y %= divisorv.Y; + vec.Z %= divisorv.Z; + vec.W %= divisorv.W; return vec; } @@ -438,7 +442,7 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the vectors are equal.</returns> - public static bool operator ==(Vector4i left, Vector4i right) + public static bool operator ==(Vector4I left, Vector4I right) { return left.Equals(right); } @@ -449,13 +453,13 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the vectors are not equal.</returns> - public static bool operator !=(Vector4i left, Vector4i right) + public static bool operator !=(Vector4I left, Vector4I right) { return !left.Equals(right); } /// <summary> - /// Compares two <see cref="Vector4i"/> vectors by first checking if + /// Compares two <see cref="Vector4I"/> vectors by first checking if /// the X value of the <paramref name="left"/> vector is less than /// the X value of the <paramref name="right"/> vector. /// If the X values are exactly equal, then it repeats this check @@ -465,25 +469,25 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the left is less than the right.</returns> - public static bool operator <(Vector4i left, Vector4i right) + public static bool operator <(Vector4I left, Vector4I right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - if (left.z == right.z) + if (left.Z == right.Z) { - return left.w < right.w; + return left.W < right.W; } - return left.z < right.z; + return left.Z < right.Z; } - return left.y < right.y; + return left.Y < right.Y; } - return left.x < right.x; + return left.X < right.X; } /// <summary> - /// Compares two <see cref="Vector4i"/> vectors by first checking if + /// Compares two <see cref="Vector4I"/> vectors by first checking if /// the X value of the <paramref name="left"/> vector is greater than /// the X value of the <paramref name="right"/> vector. /// If the X values are exactly equal, then it repeats this check @@ -493,25 +497,25 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the left is greater than the right.</returns> - public static bool operator >(Vector4i left, Vector4i right) + public static bool operator >(Vector4I left, Vector4I right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - if (left.z == right.z) + if (left.Z == right.Z) { - return left.w > right.w; + return left.W > right.W; } - return left.z > right.z; + return left.Z > right.Z; } - return left.y > right.y; + return left.Y > right.Y; } - return left.x > right.x; + return left.X > right.X; } /// <summary> - /// Compares two <see cref="Vector4i"/> vectors by first checking if + /// Compares two <see cref="Vector4I"/> vectors by first checking if /// the X value of the <paramref name="left"/> vector is less than /// or equal to the X value of the <paramref name="right"/> vector. /// If the X values are exactly equal, then it repeats this check @@ -521,25 +525,25 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the left is less than or equal to the right.</returns> - public static bool operator <=(Vector4i left, Vector4i right) + public static bool operator <=(Vector4I left, Vector4I right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - if (left.z == right.z) + if (left.Z == right.Z) { - return left.w <= right.w; + return left.W <= right.W; } - return left.z < right.z; + return left.Z < right.Z; } - return left.y < right.y; + return left.Y < right.Y; } - return left.x < right.x; + return left.X < right.X; } /// <summary> - /// Compares two <see cref="Vector4i"/> vectors by first checking if + /// Compares two <see cref="Vector4I"/> vectors by first checking if /// the X value of the <paramref name="left"/> vector is greater than /// or equal to the X value of the <paramref name="right"/> vector. /// If the X values are exactly equal, then it repeats this check @@ -549,43 +553,43 @@ namespace Godot /// <param name="left">The left vector.</param> /// <param name="right">The right vector.</param> /// <returns>Whether or not the left is greater than or equal to the right.</returns> - public static bool operator >=(Vector4i left, Vector4i right) + public static bool operator >=(Vector4I left, Vector4I right) { - if (left.x == right.x) + if (left.X == right.X) { - if (left.y == right.y) + if (left.Y == right.Y) { - if (left.z == right.z) + if (left.Z == right.Z) { - return left.w >= right.w; + return left.W >= right.W; } - return left.z > right.z; + return left.Z > right.Z; } - return left.y > right.y; + return left.Y > right.Y; } - return left.x > right.x; + return left.X > right.X; } /// <summary> - /// Converts this <see cref="Vector4i"/> to a <see cref="Vector4"/>. + /// Converts this <see cref="Vector4I"/> to a <see cref="Vector4"/>. /// </summary> /// <param name="value">The vector to convert.</param> - public static implicit operator Vector4(Vector4i value) + public static implicit operator Vector4(Vector4I value) { - return new Vector4(value.x, value.y, value.z, value.w); + return new Vector4(value.X, value.Y, value.Z, value.W); } /// <summary> - /// Converts a <see cref="Vector4"/> to a <see cref="Vector4i"/>. + /// Converts a <see cref="Vector4"/> to a <see cref="Vector4I"/>. /// </summary> /// <param name="value">The vector to convert.</param> - public static explicit operator Vector4i(Vector4 value) + public static explicit operator Vector4I(Vector4 value) { - return new Vector4i( - Mathf.RoundToInt(value.x), - Mathf.RoundToInt(value.y), - Mathf.RoundToInt(value.z), - Mathf.RoundToInt(value.w) + return new Vector4I( + Mathf.RoundToInt(value.X), + Mathf.RoundToInt(value.Y), + Mathf.RoundToInt(value.Z), + Mathf.RoundToInt(value.W) ); } @@ -597,7 +601,7 @@ namespace Godot /// <returns>Whether or not the vector and the object are equal.</returns> public override readonly bool Equals(object obj) { - return obj is Vector4i other && Equals(other); + return obj is Vector4I other && Equals(other); } /// <summary> @@ -605,36 +609,36 @@ namespace Godot /// </summary> /// <param name="other">The other vector.</param> /// <returns>Whether or not the vectors are equal.</returns> - public readonly bool Equals(Vector4i other) + public readonly bool Equals(Vector4I other) { - return x == other.x && y == other.y && z == other.z && w == other.w; + return X == other.X && Y == other.Y && Z == other.Z && W == other.W; } /// <summary> - /// Serves as the hash function for <see cref="Vector4i"/>. + /// Serves as the hash function for <see cref="Vector4I"/>. /// </summary> /// <returns>A hash code for this vector.</returns> public override readonly int GetHashCode() { - return y.GetHashCode() ^ x.GetHashCode() ^ z.GetHashCode() ^ w.GetHashCode(); + return Y.GetHashCode() ^ X.GetHashCode() ^ Z.GetHashCode() ^ W.GetHashCode(); } /// <summary> - /// Converts this <see cref="Vector4i"/> to a string. + /// Converts this <see cref="Vector4I"/> to a string. /// </summary> /// <returns>A string representation of this vector.</returns> public override readonly string ToString() { - return $"({x}, {y}, {z}, {w})"; + return $"({X}, {Y}, {Z}, {W})"; } /// <summary> - /// Converts this <see cref="Vector4i"/> to a string with the given <paramref name="format"/>. + /// Converts this <see cref="Vector4I"/> to a string with the given <paramref name="format"/>. /// </summary> /// <returns>A string representation of this vector.</returns> public readonly string ToString(string format) { - return $"({x.ToString(format)}, {y.ToString(format)}, {z.ToString(format)}), {w.ToString(format)})"; + return $"({X.ToString(format)}, {Y.ToString(format)}, {Z.ToString(format)}), {W.ToString(format)})"; } } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/GodotSharp.csproj b/modules/mono/glue/GodotSharp/GodotSharp/GodotSharp.csproj index 644212c74d..7aa2f7e959 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/GodotSharp.csproj +++ b/modules/mono/glue/GodotSharp/GodotSharp/GodotSharp.csproj @@ -49,7 +49,7 @@ </ItemGroup> <!-- Sources --> <ItemGroup> - <Compile Include="Core\AABB.cs" /> + <Compile Include="Core\Aabb.cs" /> <Compile Include="Core\Bridge\GodotSerializationInfo.cs" /> <Compile Include="Core\Bridge\MethodInfo.cs" /> <Compile Include="Core\Callable.generics.cs" /> @@ -60,8 +60,9 @@ <Compile Include="Core\Attributes\ExportCategoryAttribute.cs" /> <Compile Include="Core\Attributes\ExportGroupAttribute.cs" /> <Compile Include="Core\Attributes\ExportSubgroupAttribute.cs" /> + <Compile Include="Core\Attributes\GodotClassNameAttribute.cs" /> <Compile Include="Core\Attributes\MustBeVariantAttribute.cs" /> - <Compile Include="Core\Attributes\RPCAttribute.cs" /> + <Compile Include="Core\Attributes\RpcAttribute.cs" /> <Compile Include="Core\Attributes\ScriptPathAttribute.cs" /> <Compile Include="Core\Attributes\SignalAttribute.cs" /> <Compile Include="Core\Attributes\ToolAttribute.cs" /> @@ -80,11 +81,13 @@ <Compile Include="Core\DelegateUtils.cs" /> <Compile Include="Core\Dictionary.cs" /> <Compile Include="Core\Dispatcher.cs" /> + <Compile Include="Core\Extensions\GodotObjectExtensions.cs" /> <Compile Include="Core\Extensions\NodeExtensions.cs" /> - <Compile Include="Core\Extensions\ObjectExtensions.cs" /> <Compile Include="Core\Extensions\PackedSceneExtensions.cs" /> <Compile Include="Core\Extensions\ResourceLoaderExtensions.cs" /> <Compile Include="Core\GD.cs" /> + <Compile Include="Core\GodotObject.base.cs" /> + <Compile Include="Core\GodotObject.exceptions.cs" /> <Compile Include="Core\GodotSynchronizationContext.cs" /> <Compile Include="Core\GodotTaskScheduler.cs" /> <Compile Include="Core\GodotTraceListener.cs" /> @@ -104,15 +107,13 @@ <Compile Include="Core\NativeInterop\VariantUtils.cs" /> <Compile Include="Core\NativeInterop\VariantUtils.generic.cs" /> <Compile Include="Core\NodePath.cs" /> - <Compile Include="Core\Object.base.cs" /> - <Compile Include="Core\Object.exceptions.cs" /> <Compile Include="Core\Plane.cs" /> <Compile Include="Core\Projection.cs" /> <Compile Include="Core\Quaternion.cs" /> <Compile Include="Core\Rect2.cs" /> - <Compile Include="Core\Rect2i.cs" /> + <Compile Include="Core\Rect2I.cs" /> <Compile Include="Core\ReflectionUtils.cs" /> - <Compile Include="Core\RID.cs" /> + <Compile Include="Core\Rid.cs" /> <Compile Include="Core\NativeInterop\NativeFuncs.cs" /> <Compile Include="Core\NativeInterop\InteropStructs.cs" /> <Compile Include="Core\NativeInterop\Marshaling.cs" /> @@ -124,11 +125,11 @@ <Compile Include="Core\Transform3D.cs" /> <Compile Include="Core\Variant.cs" /> <Compile Include="Core\Vector2.cs" /> - <Compile Include="Core\Vector2i.cs" /> + <Compile Include="Core\Vector2I.cs" /> <Compile Include="Core\Vector3.cs" /> - <Compile Include="Core\Vector3i.cs" /> + <Compile Include="Core\Vector3I.cs" /> <Compile Include="Core\Vector4.cs" /> - <Compile Include="Core\Vector4i.cs" /> + <Compile Include="Core\Vector4I.cs" /> <Compile Include="GlobalUsings.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> diff --git a/modules/mono/glue/runtime_interop.cpp b/modules/mono/glue/runtime_interop.cpp index 55e09f0501..e7f50d2caa 100644 --- a/modules/mono/glue/runtime_interop.cpp +++ b/modules/mono/glue/runtime_interop.cpp @@ -31,6 +31,7 @@ #include "runtime_interop.h" #include "core/config/engine.h" +#include "core/config/project_settings.h" #include "core/debugger/engine_debugger.h" #include "core/debugger/script_debugger.h" #include "core/io/marshalls.h" @@ -45,6 +46,7 @@ #include "modules/mono/managed_callable.h" #include "modules/mono/mono_gd/gd_mono_cache.h" #include "modules/mono/signal_awaiter_utils.h" +#include "modules/mono/utils/path_utils.h" #ifdef __cplusplus extern "C" { @@ -84,7 +86,8 @@ void godotsharp_stack_info_vector_destroy( void godotsharp_internal_script_debugger_send_error(const String *p_func, const String *p_file, int32_t p_line, const String *p_err, const String *p_descr, bool p_warning, const Vector<ScriptLanguage::StackInfo> *p_stack_info_vector) { - EngineDebugger::get_script_debugger()->send_error(*p_func, *p_file, p_line, *p_err, *p_descr, + const String file = ProjectSettings::get_singleton()->localize_path(p_file->simplify_path()); + EngineDebugger::get_script_debugger()->send_error(*p_func, file, p_line, *p_err, *p_descr, true, p_warning ? ERR_HANDLER_WARNING : ERR_HANDLER_ERROR, *p_stack_info_vector); } diff --git a/modules/mono/utils/naming_utils.cpp b/modules/mono/utils/naming_utils.cpp new file mode 100644 index 0000000000..dc9bc3485a --- /dev/null +++ b/modules/mono/utils/naming_utils.cpp @@ -0,0 +1,293 @@ +/**************************************************************************/ +/* naming_utils.cpp */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* 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 "naming_utils.h" + +#include "core/string/ucaps.h" +#include "core/templates/hash_map.h" + +HashMap<String, String> _create_hashmap_from_vector(Vector<Pair<String, String>> vector) { + HashMap<String, String> hashmap = HashMap<String, String>(vector.size()); + for (const Pair<String, String> &pair : vector) { + hashmap.insert(pair.first, pair.second); + } + return hashmap; +} + +// Hardcoded collection of PascalCase name conversions. +const HashMap<String, String> pascal_case_name_overrides = _create_hashmap_from_vector({ + { "BitMap", "Bitmap" }, + { "JSONRPC", "JsonRpc" }, + { "Object", "GodotObject" }, + { "OpenXRIPBinding", "OpenXRIPBinding" }, + { "SkeletonModification2DCCDIK", "SkeletonModification2DCcdik" }, + { "SkeletonModification2DFABRIK", "SkeletonModification2DFabrik" }, + { "SkeletonModification3DCCDIK", "SkeletonModification3DCcdik" }, + { "SkeletonModification3DFABRIK", "SkeletonModification3DFabrik" }, + { "System", "System_" }, + { "Thread", "GodotThread" }, +}); + +// Hardcoded collection of PascalCase part conversions. +const HashMap<String, String> pascal_case_part_overrides = _create_hashmap_from_vector({ + { "AA", "AA" }, // Anti Aliasing + { "AO", "AO" }, // Ambient Occlusion + { "FILENAME", "FileName" }, + { "FADEIN", "FadeIn" }, + { "FADEOUT", "FadeOut" }, + { "FX", "FX" }, + { "GI", "GI" }, // Global Illumination + { "GZIP", "GZip" }, + { "HBOX", "HBox" }, // Horizontal Box + { "ID", "Id" }, + { "IO", "IO" }, // Input/Output + { "IP", "IP" }, // Internet Protocol + { "IV", "IV" }, // Initialization Vector + { "MACOS", "MacOS" }, + { "NODEPATH", "NodePath" }, + { "SPIRV", "SpirV" }, + { "STDIN", "StdIn" }, + { "STDOUT", "StdOut" }, + { "USERNAME", "UserName" }, + { "UV", "UV" }, + { "UV2", "UV2" }, + { "VBOX", "VBox" }, // Vertical Box + { "WHITESPACE", "WhiteSpace" }, + { "WM", "WM" }, + { "XR", "XR" }, + { "XRAPI", "XRApi" }, +}); + +String _get_pascal_case_part_override(String p_part, bool p_input_is_upper = true) { + if (!p_input_is_upper) { + for (int i = 0; i < p_part.length(); i++) { + p_part[i] = _find_upper(p_part[i]); + } + } + + if (pascal_case_part_overrides.has(p_part)) { + return pascal_case_part_overrides.get(p_part); + } + + return String(); +} + +Vector<String> _split_pascal_case(const String &p_identifier) { + Vector<String> parts; + int current_part_start = 0; + bool prev_was_upper = is_ascii_upper_case(p_identifier[0]); + for (int i = 1; i < p_identifier.length(); i++) { + if (prev_was_upper) { + if (is_digit(p_identifier[i]) || is_ascii_lower_case(p_identifier[i])) { + if (!is_digit(p_identifier[i])) { + // These conditions only apply when the separator is not a digit. + if (i - current_part_start == 1) { + // Upper character was only the beggining of a word. + prev_was_upper = false; + continue; + } + if (i != p_identifier.length()) { + // If this is not the last character, the last uppercase + // character is the start of the next word. + i--; + } + } + if (i - current_part_start > 0) { + parts.append(p_identifier.substr(current_part_start, i - current_part_start)); + current_part_start = i; + prev_was_upper = false; + } + } + } else { + if (is_digit(p_identifier[i]) || is_ascii_upper_case(p_identifier[i])) { + parts.append(p_identifier.substr(current_part_start, i - current_part_start)); + current_part_start = i; + prev_was_upper = true; + } + } + } + + // Add the rest of the identifier as the last part. + if (current_part_start != p_identifier.length()) { + parts.append(p_identifier.substr(current_part_start)); + } + + return parts; +} + +String pascal_to_pascal_case(const String &p_identifier) { + if (p_identifier.length() == 0) { + return p_identifier; + } + + if (p_identifier.length() <= 2) { + return p_identifier.to_upper(); + } + + if (pascal_case_name_overrides.has(p_identifier)) { + // Use hardcoded value for the identifier. + return pascal_case_name_overrides.get(p_identifier); + } + + Vector<String> parts = _split_pascal_case(p_identifier); + + String ret; + + for (String &part : parts) { + String part_override = _get_pascal_case_part_override(part); + if (!part_override.is_empty()) { + // Use hardcoded value for part. + ret += part_override; + continue; + } + + if (part.length() <= 2 && part.to_upper() == part) { + // Acronym of length 1 or 2. + for (int j = 0; j < part.length(); j++) { + part[j] = _find_upper(part[j]); + } + ret += part; + continue; + } + + part[0] = _find_upper(part[0]); + for (int i = 1; i < part.length(); i++) { + if (is_digit(part[i - 1])) { + // Use uppercase after digits. + part[i] = _find_upper(part[i]); + continue; + } + + part[i] = _find_lower(part[i]); + } + ret += part; + } + + return ret; +} + +String snake_to_pascal_case(const String &p_identifier, bool p_input_is_upper) { + String ret; + Vector<String> parts = p_identifier.split("_", true); + + for (int i = 0; i < parts.size(); i++) { + String part = parts[i]; + + String part_override = _get_pascal_case_part_override(part, p_input_is_upper); + if (!part_override.is_empty()) { + // Use hardcoded value for part. + ret += part_override; + continue; + } + + if (!part.is_empty()) { + part[0] = _find_upper(part[0]); + for (int j = 1; j < part.length(); j++) { + if (is_digit(part[j - 1])) { + // Use uppercase after digits. + part[j] = _find_upper(part[j]); + continue; + } + + if (p_input_is_upper) { + part[j] = _find_lower(part[j]); + } + } + ret += part; + } else { + if (i == 0 || i == (parts.size() - 1)) { + // Preserve underscores at the beginning and end + ret += "_"; + } else { + // Preserve contiguous underscores + if (parts[i - 1].length()) { + ret += "__"; + } else { + ret += "_"; + } + } + } + } + + return ret; +} + +String snake_to_camel_case(const String &p_identifier, bool p_input_is_upper) { + String ret; + Vector<String> parts = p_identifier.split("_", true); + + for (int i = 0; i < parts.size(); i++) { + String part = parts[i]; + + String part_override = _get_pascal_case_part_override(part, p_input_is_upper); + if (!part_override.is_empty()) { + // Use hardcoded value for part. + if (i == 0) { + part_override[0] = _find_lower(part_override[0]); + } + ret += part_override; + continue; + } + + if (!part.is_empty()) { + if (i == 0) { + part[0] = _find_lower(part[0]); + } else { + part[0] = _find_upper(part[0]); + } + for (int j = 1; j < part.length(); j++) { + if (is_digit(part[j - 1])) { + // Use uppercase after digits. + part[j] = _find_upper(part[j]); + continue; + } + + if (p_input_is_upper) { + part[j] = _find_lower(part[j]); + } + } + ret += part; + } else { + if (i == 0 || i == (parts.size() - 1)) { + // Preserve underscores at the beginning and end + ret += "_"; + } else { + // Preserve contiguous underscores + if (parts[i - 1].length()) { + ret += "__"; + } else { + ret += "_"; + } + } + } + } + + return ret; +} diff --git a/modules/mono/utils/naming_utils.h b/modules/mono/utils/naming_utils.h new file mode 100644 index 0000000000..ac64a5c114 --- /dev/null +++ b/modules/mono/utils/naming_utils.h @@ -0,0 +1,42 @@ +/**************************************************************************/ +/* naming_utils.h */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* 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. */ +/**************************************************************************/ + +#ifndef MONO_NAMING_UTILS_H +#define MONO_NAMING_UTILS_H + +#include "core/string/ustring.h" + +String pascal_to_pascal_case(const String &p_identifier); + +String snake_to_pascal_case(const String &p_identifier, bool p_input_is_upper = false); + +String snake_to_camel_case(const String &p_identifier, bool p_input_is_upper = false); + +#endif // MONO_NAMING_UTILS_H diff --git a/platform/linuxbsd/export/export_plugin.cpp b/platform/linuxbsd/export/export_plugin.cpp index c900cad007..2528bb2b99 100644 --- a/platform/linuxbsd/export/export_plugin.cpp +++ b/platform/linuxbsd/export/export_plugin.cpp @@ -378,8 +378,8 @@ Error EditorExportPlatformLinuxBSD::run(const Ref<EditorExportPreset> &p_preset, if (port.is_empty()) { port = "22"; } - Vector<String> extra_args_ssh = p_preset->get("ssh_remote_deploy/extra_args_ssh").operator String().split(" "); - Vector<String> extra_args_scp = p_preset->get("ssh_remote_deploy/extra_args_scp").operator String().split(" "); + Vector<String> extra_args_ssh = p_preset->get("ssh_remote_deploy/extra_args_ssh").operator String().split(" ", false); + Vector<String> extra_args_scp = p_preset->get("ssh_remote_deploy/extra_args_scp").operator String().split(" ", false); const String basepath = dest.path_join("tmp_linuxbsd_export"); diff --git a/platform/linuxbsd/x11/key_mapping_x11.cpp b/platform/linuxbsd/x11/key_mapping_x11.cpp index 506372292d..e5eba6ccad 100644 --- a/platform/linuxbsd/x11/key_mapping_x11.cpp +++ b/platform/linuxbsd/x11/key_mapping_x11.cpp @@ -30,20 +30,6 @@ #include "key_mapping_x11.h" -#include "core/templates/hash_map.h" - -struct HashMapHasherKeys { - static _FORCE_INLINE_ uint32_t hash(const Key p_key) { return hash_fmix32(static_cast<uint32_t>(p_key)); } - static _FORCE_INLINE_ uint32_t hash(const char32_t p_uchar) { return hash_fmix32(p_uchar); } - static _FORCE_INLINE_ uint32_t hash(const unsigned p_key) { return hash_fmix32(p_key); } - static _FORCE_INLINE_ uint32_t hash(const KeySym p_key) { return hash_fmix32(p_key); } -}; - -HashMap<KeySym, Key, HashMapHasherKeys> xkeysym_map; -HashMap<unsigned int, Key, HashMapHasherKeys> scancode_map; -HashMap<Key, unsigned int, HashMapHasherKeys> scancode_map_inv; -HashMap<KeySym, char32_t, HashMapHasherKeys> xkeysym_unicode_map; - void KeyMappingX11::initialize() { // X11 Keysym to Godot Key map. diff --git a/platform/linuxbsd/x11/key_mapping_x11.h b/platform/linuxbsd/x11/key_mapping_x11.h index d4278a563c..48beefff4c 100644 --- a/platform/linuxbsd/x11/key_mapping_x11.h +++ b/platform/linuxbsd/x11/key_mapping_x11.h @@ -39,8 +39,21 @@ #include <X11/keysymdef.h> #include "core/os/keyboard.h" +#include "core/templates/hash_map.h" class KeyMappingX11 { + struct HashMapHasherKeys { + static _FORCE_INLINE_ uint32_t hash(const Key p_key) { return hash_fmix32(static_cast<uint32_t>(p_key)); } + static _FORCE_INLINE_ uint32_t hash(const char32_t p_uchar) { return hash_fmix32(p_uchar); } + static _FORCE_INLINE_ uint32_t hash(const unsigned p_key) { return hash_fmix32(p_key); } + static _FORCE_INLINE_ uint32_t hash(const KeySym p_key) { return hash_fmix32(p_key); } + }; + + static inline HashMap<KeySym, Key, HashMapHasherKeys> xkeysym_map; + static inline HashMap<unsigned int, Key, HashMapHasherKeys> scancode_map; + static inline HashMap<Key, unsigned int, HashMapHasherKeys> scancode_map_inv; + static inline HashMap<KeySym, char32_t, HashMapHasherKeys> xkeysym_unicode_map; + KeyMappingX11() {} public: diff --git a/platform/macos/export/export_plugin.cpp b/platform/macos/export/export_plugin.cpp index 73fbd45400..5c20016aa5 100644 --- a/platform/macos/export/export_plugin.cpp +++ b/platform/macos/export/export_plugin.cpp @@ -2016,8 +2016,8 @@ Error EditorExportPlatformMacOS::run(const Ref<EditorExportPreset> &p_preset, in if (port.is_empty()) { port = "22"; } - Vector<String> extra_args_ssh = p_preset->get("ssh_remote_deploy/extra_args_ssh").operator String().split(" "); - Vector<String> extra_args_scp = p_preset->get("ssh_remote_deploy/extra_args_scp").operator String().split(" "); + Vector<String> extra_args_ssh = p_preset->get("ssh_remote_deploy/extra_args_ssh").operator String().split(" ", false); + Vector<String> extra_args_scp = p_preset->get("ssh_remote_deploy/extra_args_scp").operator String().split(" ", false); const String basepath = dest.path_join("tmp_macos_export"); diff --git a/platform/windows/export/export_plugin.cpp b/platform/windows/export/export_plugin.cpp index bf32b16018..4107a8a17e 100644 --- a/platform/windows/export/export_plugin.cpp +++ b/platform/windows/export/export_plugin.cpp @@ -831,8 +831,8 @@ Error EditorExportPlatformWindows::run(const Ref<EditorExportPreset> &p_preset, if (port.is_empty()) { port = "22"; } - Vector<String> extra_args_ssh = p_preset->get("ssh_remote_deploy/extra_args_ssh").operator String().split(" "); - Vector<String> extra_args_scp = p_preset->get("ssh_remote_deploy/extra_args_scp").operator String().split(" "); + Vector<String> extra_args_ssh = p_preset->get("ssh_remote_deploy/extra_args_ssh").operator String().split(" ", false); + Vector<String> extra_args_scp = p_preset->get("ssh_remote_deploy/extra_args_scp").operator String().split(" ", false); const String basepath = dest.path_join("tmp_windows_export"); diff --git a/scene/2d/animated_sprite_2d.cpp b/scene/2d/animated_sprite_2d.cpp index a4a965aa41..ccf9696d82 100644 --- a/scene/2d/animated_sprite_2d.cpp +++ b/scene/2d/animated_sprite_2d.cpp @@ -117,7 +117,6 @@ void AnimatedSprite2D::_validate_property(PropertyInfo &p_property) const { } if (p_property.name == "animation") { - p_property.hint = PROPERTY_HINT_ENUM; List<StringName> names; frames->get_animation_list(&names); names.sort_custom<StringName::AlphCompare>(); @@ -167,6 +166,12 @@ void AnimatedSprite2D::_validate_property(PropertyInfo &p_property) const { void AnimatedSprite2D::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_READY: { + if (!Engine::get_singleton()->is_editor_hint() && !frames.is_null() && frames->has_animation(autoplay)) { + play(autoplay); + } + } break; + case NOTIFICATION_INTERNAL_PROCESS: { if (frames.is_null() || !frames->has_animation(animation)) { return; @@ -176,7 +181,8 @@ void AnimatedSprite2D::_notification(int p_what) { int i = 0; while (remaining) { // Animation speed may be changed by animation_finished or frame_changed signals. - double speed = frames->get_animation_speed(animation) * Math::abs(speed_scale); + double speed = frames->get_animation_speed(animation) * speed_scale * custom_speed_scale * frame_speed_scale; + double abs_speed = Math::abs(speed); if (speed == 0) { return; // Do nothing. @@ -185,53 +191,57 @@ void AnimatedSprite2D::_notification(int p_what) { // Frame count may be changed by animation_finished or frame_changed signals. int fc = frames->get_frame_count(animation); - if (timeout <= 0) { - int last_frame = fc - 1; - if (!playing_backwards) { - // Forward. + int last_frame = fc - 1; + if (!signbit(speed)) { + // Forwards. + if (frame_progress >= 1.0) { if (frame >= last_frame) { if (frames->get_animation_loop(animation)) { frame = 0; - emit_signal(SceneStringNames::get_singleton()->animation_finished); + emit_signal("animation_looped"); } else { frame = last_frame; - if (!is_over) { - is_over = true; - emit_signal(SceneStringNames::get_singleton()->animation_finished); - } + pause(); + emit_signal(SceneStringNames::get_singleton()->animation_finished); + return; } } else { frame++; } - } else { - // Reversed. + _calc_frame_speed_scale(); + frame_progress = 0.0; + queue_redraw(); + emit_signal(SceneStringNames::get_singleton()->frame_changed); + } + double to_process = MIN((1.0 - frame_progress) / abs_speed, remaining); + frame_progress += to_process * abs_speed; + remaining -= to_process; + } else { + // Backwards. + if (frame_progress <= 0) { if (frame <= 0) { if (frames->get_animation_loop(animation)) { frame = last_frame; - emit_signal(SceneStringNames::get_singleton()->animation_finished); + emit_signal("animation_looped"); } else { frame = 0; - if (!is_over) { - is_over = true; - emit_signal(SceneStringNames::get_singleton()->animation_finished); - } + pause(); + emit_signal(SceneStringNames::get_singleton()->animation_finished); + return; } } else { frame--; } + _calc_frame_speed_scale(); + frame_progress = 1.0; + queue_redraw(); + emit_signal(SceneStringNames::get_singleton()->frame_changed); } - - timeout = _get_frame_duration(); - - queue_redraw(); - - emit_signal(SceneStringNames::get_singleton()->frame_changed); + double to_process = MIN(frame_progress / abs_speed, remaining); + frame_progress -= to_process * abs_speed; + remaining -= to_process; } - double to_process = MIN(timeout / speed, remaining); - timeout -= to_process * speed; - remaining -= to_process; - i++; if (i > fc) { return; // Prevents freezing if to_process is each time much less than remaining. @@ -275,25 +285,37 @@ void AnimatedSprite2D::_notification(int p_what) { } void AnimatedSprite2D::set_sprite_frames(const Ref<SpriteFrames> &p_frames) { + if (frames == p_frames) { + return; + } + if (frames.is_valid()) { frames->disconnect(SceneStringNames::get_singleton()->changed, callable_mp(this, &AnimatedSprite2D::_res_changed)); } - + stop(); frames = p_frames; if (frames.is_valid()) { frames->connect(SceneStringNames::get_singleton()->changed, callable_mp(this, &AnimatedSprite2D::_res_changed)); - } - if (frames.is_null()) { - frame = 0; - } else { - set_frame(frame); + List<StringName> al; + frames->get_animation_list(&al); + if (al.size() == 0) { + set_animation(StringName()); + set_autoplay(String()); + } else { + if (!frames->has_animation(animation)) { + set_animation(al[0]); + } + if (!frames->has_animation(autoplay)) { + set_autoplay(String()); + } + } } notify_property_list_changed(); - _reset_timeout(); queue_redraw(); update_configuration_warnings(); + emit_signal("sprite_frames_changed"); } Ref<SpriteFrames> AnimatedSprite2D::get_sprite_frames() const { @@ -301,44 +323,63 @@ Ref<SpriteFrames> AnimatedSprite2D::get_sprite_frames() const { } void AnimatedSprite2D::set_frame(int p_frame) { + set_frame_and_progress(p_frame, signbit(get_playing_speed()) ? 1.0 : 0.0); +} + +int AnimatedSprite2D::get_frame() const { + return frame; +} + +void AnimatedSprite2D::set_frame_progress(real_t p_progress) { + frame_progress = p_progress; +} + +real_t AnimatedSprite2D::get_frame_progress() const { + return frame_progress; +} + +void AnimatedSprite2D::set_frame_and_progress(int p_frame, real_t p_progress) { if (frames.is_null()) { return; } - if (frames->has_animation(animation)) { - int limit = frames->get_frame_count(animation); - if (p_frame >= limit) { - p_frame = limit - 1; - } - } + bool has_animation = frames->has_animation(animation); + int end_frame = has_animation ? MAX(0, frames->get_frame_count(animation) - 1) : 0; + bool is_changed = frame != p_frame; if (p_frame < 0) { - p_frame = 0; + frame = 0; + } else if (has_animation && p_frame > end_frame) { + frame = end_frame; + } else { + frame = p_frame; } - if (frame == p_frame) { - return; - } + _calc_frame_speed_scale(); + frame_progress = p_progress; - frame = p_frame; - _reset_timeout(); + if (!is_changed) { + return; // No change, don't redraw. + } queue_redraw(); emit_signal(SceneStringNames::get_singleton()->frame_changed); } -int AnimatedSprite2D::get_frame() const { - return frame; -} - void AnimatedSprite2D::set_speed_scale(float p_speed_scale) { speed_scale = p_speed_scale; - playing_backwards = signbit(speed_scale) != backwards; } float AnimatedSprite2D::get_speed_scale() const { return speed_scale; } +float AnimatedSprite2D::get_playing_speed() const { + if (!playing) { + return 0; + } + return speed_scale * custom_speed_scale; +} + void AnimatedSprite2D::set_centered(bool p_center) { centered = p_center; queue_redraw(); @@ -378,69 +419,130 @@ bool AnimatedSprite2D::is_flipped_v() const { } void AnimatedSprite2D::_res_changed() { - set_frame(frame); + set_frame_and_progress(frame, frame_progress); queue_redraw(); notify_property_list_changed(); } -void AnimatedSprite2D::set_playing(bool p_playing) { - if (playing == p_playing) { - return; +bool AnimatedSprite2D::is_playing() const { + return playing; +} + +void AnimatedSprite2D::set_autoplay(const String &p_name) { + if (is_inside_tree() && !Engine::get_singleton()->is_editor_hint()) { + WARN_PRINT("Setting autoplay after the node has been added to the scene has no effect."); } - playing = p_playing; - playing_backwards = signbit(speed_scale) != backwards; - set_process_internal(playing); - notify_property_list_changed(); + + autoplay = p_name; } -bool AnimatedSprite2D::is_playing() const { - return playing; +String AnimatedSprite2D::get_autoplay() const { + return autoplay; } -void AnimatedSprite2D::play(const StringName &p_animation, bool p_backwards) { - backwards = p_backwards; - playing_backwards = signbit(speed_scale) != backwards; +void AnimatedSprite2D::play(const StringName &p_name, float p_custom_scale, bool p_from_end) { + StringName name = p_name; - if (p_animation) { - set_animation(p_animation); - if (frames.is_valid() && playing_backwards && get_frame() == 0) { - set_frame(frames->get_frame_count(p_animation) - 1); + if (name == StringName()) { + name = animation; + } + + ERR_FAIL_COND_MSG(frames == nullptr, vformat("There is no animation with name '%s'.", name)); + ERR_FAIL_COND_MSG(!frames->get_animation_names().has(name), vformat("There is no animation with name '%s'.", name)); + + if (frames->get_frame_count(name) == 0) { + return; + } + + playing = true; + custom_speed_scale = p_custom_scale; + + int end_frame = MAX(0, frames->get_frame_count(animation) - 1); + if (name != animation) { + animation = name; + if (p_from_end) { + set_frame_and_progress(end_frame, 1.0); + } else { + set_frame_and_progress(0, 0.0); } + emit_signal("animation_changed"); + } else { + bool is_backward = signbit(speed_scale * custom_speed_scale); + if (p_from_end && is_backward && frame == 0 && frame_progress <= 0.0) { + set_frame_and_progress(end_frame, 1.0); + } else if (!p_from_end && !is_backward && frame == end_frame && frame_progress >= 1.0) { + set_frame_and_progress(0, 0.0); + } + } + + notify_property_list_changed(); + set_process_internal(true); +} + +void AnimatedSprite2D::play_backwards(const StringName &p_name) { + play(p_name, -1, true); +} + +void AnimatedSprite2D::_stop_internal(bool p_reset) { + playing = false; + if (p_reset) { + custom_speed_scale = 1.0; + set_frame_and_progress(0, 0.0); } + notify_property_list_changed(); + set_process_internal(false); +} - is_over = false; - set_playing(true); +void AnimatedSprite2D::pause() { + _stop_internal(false); } void AnimatedSprite2D::stop() { - set_playing(false); - backwards = false; - _reset_timeout(); + _stop_internal(true); } double AnimatedSprite2D::_get_frame_duration() { if (frames.is_valid() && frames->has_animation(animation)) { return frames->get_frame_duration(animation, frame); } - return 0.0; + return 1.0; } -void AnimatedSprite2D::_reset_timeout() { - timeout = _get_frame_duration(); - is_over = false; +void AnimatedSprite2D::_calc_frame_speed_scale() { + frame_speed_scale = 1.0 / _get_frame_duration(); } -void AnimatedSprite2D::set_animation(const StringName &p_animation) { - ERR_FAIL_COND_MSG(frames == nullptr, vformat("There is no animation with name '%s'.", p_animation)); - ERR_FAIL_COND_MSG(!frames->get_animation_names().has(p_animation), vformat("There is no animation with name '%s'.", p_animation)); +void AnimatedSprite2D::set_animation(const StringName &p_name) { + if (animation == p_name) { + return; + } + + animation = p_name; + + emit_signal("animation_changed"); - if (animation == p_animation) { + if (frames == nullptr) { + animation = StringName(); + stop(); + ERR_FAIL_MSG(vformat("There is no animation with name '%s'.", p_name)); + } + + int frame_count = frames->get_frame_count(animation); + if (animation == StringName() || frame_count == 0) { + stop(); return; + } else if (!frames->get_animation_names().has(animation)) { + animation = StringName(); + stop(); + ERR_FAIL_MSG(vformat("There is no animation with name '%s'.", p_name)); + } + + if (signbit(get_playing_speed())) { + set_frame_and_progress(frame_count - 1, 1.0); + } else { + set_frame_and_progress(0, 0.0); } - animation = p_animation; - set_frame(0); - _reset_timeout(); notify_property_list_changed(); queue_redraw(); } @@ -468,17 +570,30 @@ void AnimatedSprite2D::get_argument_options(const StringName &p_function, int p_ Node::get_argument_options(p_function, p_idx, r_options); } +#ifndef DISABLE_DEPRECATED +bool AnimatedSprite2D::_set(const StringName &p_name, const Variant &p_value) { + if ((p_name == SNAME("frames"))) { + set_sprite_frames(p_value); + return true; + } + return false; +} +#endif void AnimatedSprite2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_sprite_frames", "sprite_frames"), &AnimatedSprite2D::set_sprite_frames); ClassDB::bind_method(D_METHOD("get_sprite_frames"), &AnimatedSprite2D::get_sprite_frames); - ClassDB::bind_method(D_METHOD("set_animation", "animation"), &AnimatedSprite2D::set_animation); + ClassDB::bind_method(D_METHOD("set_animation", "name"), &AnimatedSprite2D::set_animation); ClassDB::bind_method(D_METHOD("get_animation"), &AnimatedSprite2D::get_animation); - ClassDB::bind_method(D_METHOD("set_playing", "playing"), &AnimatedSprite2D::set_playing); + ClassDB::bind_method(D_METHOD("set_autoplay", "name"), &AnimatedSprite2D::set_autoplay); + ClassDB::bind_method(D_METHOD("get_autoplay"), &AnimatedSprite2D::get_autoplay); + ClassDB::bind_method(D_METHOD("is_playing"), &AnimatedSprite2D::is_playing); - ClassDB::bind_method(D_METHOD("play", "anim", "backwards"), &AnimatedSprite2D::play, DEFVAL(StringName()), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("play", "name", "custom_speed", "from_end"), &AnimatedSprite2D::play, DEFVAL(StringName()), DEFVAL(1.0), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("play_backwards", "name"), &AnimatedSprite2D::play_backwards, DEFVAL(StringName())); + ClassDB::bind_method(D_METHOD("pause"), &AnimatedSprite2D::pause); ClassDB::bind_method(D_METHOD("stop"), &AnimatedSprite2D::stop); ClassDB::bind_method(D_METHOD("set_centered", "centered"), &AnimatedSprite2D::set_centered); @@ -496,18 +611,28 @@ void AnimatedSprite2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_frame", "frame"), &AnimatedSprite2D::set_frame); ClassDB::bind_method(D_METHOD("get_frame"), &AnimatedSprite2D::get_frame); + ClassDB::bind_method(D_METHOD("set_frame_progress", "progress"), &AnimatedSprite2D::set_frame_progress); + ClassDB::bind_method(D_METHOD("get_frame_progress"), &AnimatedSprite2D::get_frame_progress); + + ClassDB::bind_method(D_METHOD("set_frame_and_progress", "frame", "progress"), &AnimatedSprite2D::set_frame_and_progress); + ClassDB::bind_method(D_METHOD("set_speed_scale", "speed_scale"), &AnimatedSprite2D::set_speed_scale); ClassDB::bind_method(D_METHOD("get_speed_scale"), &AnimatedSprite2D::get_speed_scale); + ClassDB::bind_method(D_METHOD("get_playing_speed"), &AnimatedSprite2D::get_playing_speed); + ADD_SIGNAL(MethodInfo("sprite_frames_changed")); + ADD_SIGNAL(MethodInfo("animation_changed")); ADD_SIGNAL(MethodInfo("frame_changed")); + ADD_SIGNAL(MethodInfo("animation_looped")); ADD_SIGNAL(MethodInfo("animation_finished")); ADD_GROUP("Animation", ""); - ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "frames", PROPERTY_HINT_RESOURCE_TYPE, "SpriteFrames"), "set_sprite_frames", "get_sprite_frames"); - ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "animation"), "set_animation", "get_animation"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "sprite_frames", PROPERTY_HINT_RESOURCE_TYPE, "SpriteFrames"), "set_sprite_frames", "get_sprite_frames"); + ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "animation", PROPERTY_HINT_ENUM, ""), "set_animation", "get_animation"); + ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "autoplay", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_autoplay", "get_autoplay"); ADD_PROPERTY(PropertyInfo(Variant::INT, "frame"), "set_frame", "get_frame"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "frame_progress", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_frame_progress", "get_frame_progress"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "speed_scale"), "set_speed_scale", "get_speed_scale"); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "playing"), "set_playing", "is_playing"); ADD_GROUP("Offset", ""); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "centered"), "set_centered", "is_centered"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset", PROPERTY_HINT_NONE, "suffix:px"), "set_offset", "get_offset"); diff --git a/scene/2d/animated_sprite_2d.h b/scene/2d/animated_sprite_2d.h index c1d35f3a2f..ac53bd26ee 100644 --- a/scene/2d/animated_sprite_2d.h +++ b/scene/2d/animated_sprite_2d.h @@ -38,18 +38,19 @@ class AnimatedSprite2D : public Node2D { GDCLASS(AnimatedSprite2D, Node2D); Ref<SpriteFrames> frames; + String autoplay; + bool playing = false; - bool playing_backwards = false; - bool backwards = false; StringName animation = "default"; int frame = 0; float speed_scale = 1.0; + float custom_speed_scale = 1.0; bool centered = true; Point2 offset; - bool is_over = false; - float timeout = 0.0; + real_t frame_speed_scale = 1.0; + real_t frame_progress = 0.0; bool hflip = false; bool vflip = false; @@ -57,10 +58,15 @@ class AnimatedSprite2D : public Node2D { void _res_changed(); double _get_frame_duration(); - void _reset_timeout(); + void _calc_frame_speed_scale(); + void _stop_internal(bool p_reset); + Rect2 _get_rect() const; protected: +#ifndef DISABLE_DEPRECATED + bool _set(const StringName &p_name, const Variant &p_value); +#endif static void _bind_methods(); void _notification(int p_what); void _validate_property(PropertyInfo &p_property) const; @@ -82,20 +88,30 @@ public: void set_sprite_frames(const Ref<SpriteFrames> &p_frames); Ref<SpriteFrames> get_sprite_frames() const; - void play(const StringName &p_animation = StringName(), bool p_backwards = false); + void play(const StringName &p_name = StringName(), float p_custom_scale = 1.0, bool p_from_end = false); + void play_backwards(const StringName &p_name = StringName()); + void pause(); void stop(); - void set_playing(bool p_playing); bool is_playing() const; - void set_animation(const StringName &p_animation); + void set_animation(const StringName &p_name); StringName get_animation() const; + void set_autoplay(const String &p_name); + String get_autoplay() const; + void set_frame(int p_frame); int get_frame() const; + void set_frame_progress(real_t p_progress); + real_t get_frame_progress() const; + + void set_frame_and_progress(int p_frame, real_t p_progress); + void set_speed_scale(float p_speed_scale); float get_speed_scale() const; + float get_playing_speed() const; void set_centered(bool p_center); bool is_centered() const; diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp index 71d76c0d1c..635c566ef8 100644 --- a/scene/3d/sprite_3d.cpp +++ b/scene/3d/sprite_3d.cpp @@ -866,7 +866,6 @@ void AnimatedSprite3D::_validate_property(PropertyInfo &p_property) const { } if (p_property.name == "animation") { - p_property.hint = PROPERTY_HINT_ENUM; List<StringName> names; frames->get_animation_list(&names); names.sort_custom<StringName::AlphCompare>(); @@ -916,6 +915,12 @@ void AnimatedSprite3D::_validate_property(PropertyInfo &p_property) const { void AnimatedSprite3D::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_READY: { + if (!Engine::get_singleton()->is_editor_hint() && !frames.is_null() && frames->has_animation(autoplay)) { + play(autoplay); + } + } break; + case NOTIFICATION_INTERNAL_PROCESS: { if (frames.is_null() || !frames->has_animation(animation)) { return; @@ -925,7 +930,8 @@ void AnimatedSprite3D::_notification(int p_what) { int i = 0; while (remaining) { // Animation speed may be changed by animation_finished or frame_changed signals. - double speed = frames->get_animation_speed(animation) * Math::abs(speed_scale); + double speed = frames->get_animation_speed(animation) * speed_scale * custom_speed_scale * frame_speed_scale; + double abs_speed = Math::abs(speed); if (speed == 0) { return; // Do nothing. @@ -934,53 +940,57 @@ void AnimatedSprite3D::_notification(int p_what) { // Frame count may be changed by animation_finished or frame_changed signals. int fc = frames->get_frame_count(animation); - if (timeout <= 0) { - int last_frame = fc - 1; - if (!playing_backwards) { - // Forward. + int last_frame = fc - 1; + if (!signbit(speed)) { + // Forwards. + if (frame_progress >= 1.0) { if (frame >= last_frame) { if (frames->get_animation_loop(animation)) { frame = 0; - emit_signal(SceneStringNames::get_singleton()->animation_finished); + emit_signal("animation_looped"); } else { frame = last_frame; - if (!is_over) { - is_over = true; - emit_signal(SceneStringNames::get_singleton()->animation_finished); - } + pause(); + emit_signal(SceneStringNames::get_singleton()->animation_finished); + return; } } else { frame++; } - } else { - // Reversed. + _calc_frame_speed_scale(); + frame_progress = 0.0; + _queue_redraw(); + emit_signal(SceneStringNames::get_singleton()->frame_changed); + } + double to_process = MIN((1.0 - frame_progress) / abs_speed, remaining); + frame_progress += to_process * abs_speed; + remaining -= to_process; + } else { + // Backwards. + if (frame_progress <= 0) { if (frame <= 0) { if (frames->get_animation_loop(animation)) { frame = last_frame; - emit_signal(SceneStringNames::get_singleton()->animation_finished); + emit_signal("animation_looped"); } else { frame = 0; - if (!is_over) { - is_over = true; - emit_signal(SceneStringNames::get_singleton()->animation_finished); - } + pause(); + emit_signal(SceneStringNames::get_singleton()->animation_finished); + return; } } else { frame--; } + _calc_frame_speed_scale(); + frame_progress = 1.0; + _queue_redraw(); + emit_signal(SceneStringNames::get_singleton()->frame_changed); } - - timeout = _get_frame_duration(); - - _queue_redraw(); - - emit_signal(SceneStringNames::get_singleton()->frame_changed); + double to_process = MIN(frame_progress / abs_speed, remaining); + frame_progress -= to_process * abs_speed; + remaining -= to_process; } - double to_process = MIN(timeout / speed, remaining); - timeout -= to_process * speed; - remaining -= to_process; - i++; if (i > fc) { return; // Prevents freezing if to_process is each time much less than remaining. @@ -991,25 +1001,37 @@ void AnimatedSprite3D::_notification(int p_what) { } void AnimatedSprite3D::set_sprite_frames(const Ref<SpriteFrames> &p_frames) { + if (frames == p_frames) { + return; + } + if (frames.is_valid()) { frames->disconnect(SceneStringNames::get_singleton()->changed, callable_mp(this, &AnimatedSprite3D::_res_changed)); } - + stop(); frames = p_frames; if (frames.is_valid()) { frames->connect(SceneStringNames::get_singleton()->changed, callable_mp(this, &AnimatedSprite3D::_res_changed)); - } - if (frames.is_null()) { - frame = 0; - } else { - set_frame(frame); + List<StringName> al; + frames->get_animation_list(&al); + if (al.size() == 0) { + set_animation(StringName()); + set_autoplay(String()); + } else { + if (!frames->has_animation(animation)) { + set_animation(al[0]); + } + if (!frames->has_animation(autoplay)) { + set_autoplay(String()); + } + } } notify_property_list_changed(); - _reset_timeout(); _queue_redraw(); update_configuration_warnings(); + emit_signal("sprite_frames_changed"); } Ref<SpriteFrames> AnimatedSprite3D::get_sprite_frames() const { @@ -1017,44 +1039,63 @@ Ref<SpriteFrames> AnimatedSprite3D::get_sprite_frames() const { } void AnimatedSprite3D::set_frame(int p_frame) { + set_frame_and_progress(p_frame, signbit(get_playing_speed()) ? 1.0 : 0.0); +} + +int AnimatedSprite3D::get_frame() const { + return frame; +} + +void AnimatedSprite3D::set_frame_progress(real_t p_progress) { + frame_progress = p_progress; +} + +real_t AnimatedSprite3D::get_frame_progress() const { + return frame_progress; +} + +void AnimatedSprite3D::set_frame_and_progress(int p_frame, real_t p_progress) { if (frames.is_null()) { return; } - if (frames->has_animation(animation)) { - int limit = frames->get_frame_count(animation); - if (p_frame >= limit) { - p_frame = limit - 1; - } - } + bool has_animation = frames->has_animation(animation); + int end_frame = has_animation ? MAX(0, frames->get_frame_count(animation) - 1) : 0; + bool is_changed = frame != p_frame; if (p_frame < 0) { - p_frame = 0; + frame = 0; + } else if (has_animation && p_frame > end_frame) { + frame = end_frame; + } else { + frame = p_frame; } - if (frame == p_frame) { - return; - } + _calc_frame_speed_scale(); + frame_progress = p_progress; - frame = p_frame; - _reset_timeout(); + if (!is_changed) { + return; // No change, don't redraw. + } _queue_redraw(); emit_signal(SceneStringNames::get_singleton()->frame_changed); } -int AnimatedSprite3D::get_frame() const { - return frame; -} - void AnimatedSprite3D::set_speed_scale(float p_speed_scale) { speed_scale = p_speed_scale; - playing_backwards = signbit(speed_scale) != backwards; } float AnimatedSprite3D::get_speed_scale() const { return speed_scale; } +float AnimatedSprite3D::get_playing_speed() const { + if (!playing) { + return 0; + } + return speed_scale * custom_speed_scale; +} + Rect2 AnimatedSprite3D::get_item_rect() const { if (frames.is_null() || !frames->has_animation(animation)) { return Rect2(0, 0, 1, 1); @@ -1085,69 +1126,130 @@ Rect2 AnimatedSprite3D::get_item_rect() const { } void AnimatedSprite3D::_res_changed() { - set_frame(frame); + set_frame_and_progress(frame, frame_progress); _queue_redraw(); notify_property_list_changed(); } -void AnimatedSprite3D::set_playing(bool p_playing) { - if (playing == p_playing) { - return; +bool AnimatedSprite3D::is_playing() const { + return playing; +} + +void AnimatedSprite3D::set_autoplay(const String &p_name) { + if (is_inside_tree() && !Engine::get_singleton()->is_editor_hint()) { + WARN_PRINT("Setting autoplay after the node has been added to the scene has no effect."); } - playing = p_playing; - playing_backwards = signbit(speed_scale) != backwards; - set_process_internal(playing); - notify_property_list_changed(); + + autoplay = p_name; } -bool AnimatedSprite3D::is_playing() const { - return playing; +String AnimatedSprite3D::get_autoplay() const { + return autoplay; } -void AnimatedSprite3D::play(const StringName &p_animation, bool p_backwards) { - backwards = p_backwards; - playing_backwards = signbit(speed_scale) != backwards; +void AnimatedSprite3D::play(const StringName &p_name, float p_custom_scale, bool p_from_end) { + StringName name = p_name; + + if (name == StringName()) { + name = animation; + } + + ERR_FAIL_COND_MSG(frames == nullptr, vformat("There is no animation with name '%s'.", name)); + ERR_FAIL_COND_MSG(!frames->get_animation_names().has(name), vformat("There is no animation with name '%s'.", name)); - if (p_animation) { - set_animation(p_animation); - if (frames.is_valid() && playing_backwards && get_frame() == 0) { - set_frame(frames->get_frame_count(p_animation) - 1); + if (frames->get_frame_count(name) == 0) { + return; + } + + playing = true; + custom_speed_scale = p_custom_scale; + + int end_frame = MAX(0, frames->get_frame_count(animation) - 1); + if (name != animation) { + animation = name; + if (p_from_end) { + set_frame_and_progress(end_frame, 1.0); + } else { + set_frame_and_progress(0, 0.0); + } + emit_signal("animation_changed"); + } else { + bool is_backward = signbit(speed_scale * custom_speed_scale); + if (p_from_end && is_backward && frame == 0 && frame_progress <= 0.0) { + set_frame_and_progress(end_frame, 1.0); + } else if (!p_from_end && !is_backward && frame == end_frame && frame_progress >= 1.0) { + set_frame_and_progress(0, 0.0); } } - is_over = false; - set_playing(true); + notify_property_list_changed(); + set_process_internal(true); +} + +void AnimatedSprite3D::play_backwards(const StringName &p_name) { + play(p_name, -1, true); +} + +void AnimatedSprite3D::_stop_internal(bool p_reset) { + playing = false; + if (p_reset) { + custom_speed_scale = 1.0; + set_frame_and_progress(0, 0.0); + } + notify_property_list_changed(); + set_process_internal(false); +} + +void AnimatedSprite3D::pause() { + _stop_internal(false); } void AnimatedSprite3D::stop() { - set_playing(false); - backwards = false; - _reset_timeout(); + _stop_internal(true); } double AnimatedSprite3D::_get_frame_duration() { if (frames.is_valid() && frames->has_animation(animation)) { return frames->get_frame_duration(animation, frame); } - return 0.0; + return 1.0; } -void AnimatedSprite3D::_reset_timeout() { - timeout = _get_frame_duration(); - is_over = false; +void AnimatedSprite3D::_calc_frame_speed_scale() { + frame_speed_scale = 1.0 / _get_frame_duration(); } -void AnimatedSprite3D::set_animation(const StringName &p_animation) { - ERR_FAIL_COND_MSG(frames == nullptr, vformat("There is no animation with name '%s'.", p_animation)); - ERR_FAIL_COND_MSG(!frames->get_animation_names().has(p_animation), vformat("There is no animation with name '%s'.", p_animation)); +void AnimatedSprite3D::set_animation(const StringName &p_name) { + if (animation == p_name) { + return; + } + + animation = p_name; - if (animation == p_animation) { + emit_signal("animation_changed"); + + if (frames == nullptr) { + animation = StringName(); + stop(); + ERR_FAIL_MSG(vformat("There is no animation with name '%s'.", p_name)); + } + + int frame_count = frames->get_frame_count(animation); + if (animation == StringName() || frame_count == 0) { + stop(); return; + } else if (!frames->get_animation_names().has(animation)) { + animation = StringName(); + stop(); + ERR_FAIL_MSG(vformat("There is no animation with name '%s'.", p_name)); + } + + if (signbit(get_playing_speed())) { + set_frame_and_progress(frame_count - 1, 1.0); + } else { + set_frame_and_progress(0, 0.0); } - animation = p_animation; - set_frame(0); - _reset_timeout(); notify_property_list_changed(); _queue_redraw(); } @@ -1175,35 +1277,58 @@ void AnimatedSprite3D::get_argument_options(const StringName &p_function, int p_ Node::get_argument_options(p_function, p_idx, r_options); } +#ifndef DISABLE_DEPRECATED +bool AnimatedSprite3D::_set(const StringName &p_name, const Variant &p_value) { + if ((p_name == SNAME("frames"))) { + set_sprite_frames(p_value); + return true; + } + return false; +} +#endif void AnimatedSprite3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_sprite_frames", "sprite_frames"), &AnimatedSprite3D::set_sprite_frames); ClassDB::bind_method(D_METHOD("get_sprite_frames"), &AnimatedSprite3D::get_sprite_frames); - ClassDB::bind_method(D_METHOD("set_animation", "animation"), &AnimatedSprite3D::set_animation); + ClassDB::bind_method(D_METHOD("set_animation", "name"), &AnimatedSprite3D::set_animation); ClassDB::bind_method(D_METHOD("get_animation"), &AnimatedSprite3D::get_animation); - ClassDB::bind_method(D_METHOD("set_playing", "playing"), &AnimatedSprite3D::set_playing); + ClassDB::bind_method(D_METHOD("set_autoplay", "name"), &AnimatedSprite3D::set_autoplay); + ClassDB::bind_method(D_METHOD("get_autoplay"), &AnimatedSprite3D::get_autoplay); + ClassDB::bind_method(D_METHOD("is_playing"), &AnimatedSprite3D::is_playing); - ClassDB::bind_method(D_METHOD("play", "anim", "backwards"), &AnimatedSprite3D::play, DEFVAL(StringName()), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("play", "name", "custom_speed", "from_end"), &AnimatedSprite3D::play, DEFVAL(StringName()), DEFVAL(1.0), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("play_backwards", "name"), &AnimatedSprite3D::play_backwards, DEFVAL(StringName())); + ClassDB::bind_method(D_METHOD("pause"), &AnimatedSprite3D::pause); ClassDB::bind_method(D_METHOD("stop"), &AnimatedSprite3D::stop); ClassDB::bind_method(D_METHOD("set_frame", "frame"), &AnimatedSprite3D::set_frame); ClassDB::bind_method(D_METHOD("get_frame"), &AnimatedSprite3D::get_frame); + ClassDB::bind_method(D_METHOD("set_frame_progress", "progress"), &AnimatedSprite3D::set_frame_progress); + ClassDB::bind_method(D_METHOD("get_frame_progress"), &AnimatedSprite3D::get_frame_progress); + + ClassDB::bind_method(D_METHOD("set_frame_and_progress", "frame", "progress"), &AnimatedSprite3D::set_frame_and_progress); + ClassDB::bind_method(D_METHOD("set_speed_scale", "speed_scale"), &AnimatedSprite3D::set_speed_scale); ClassDB::bind_method(D_METHOD("get_speed_scale"), &AnimatedSprite3D::get_speed_scale); + ClassDB::bind_method(D_METHOD("get_playing_speed"), &AnimatedSprite3D::get_playing_speed); ClassDB::bind_method(D_METHOD("_res_changed"), &AnimatedSprite3D::_res_changed); + ADD_SIGNAL(MethodInfo("sprite_frames_changed")); + ADD_SIGNAL(MethodInfo("animation_changed")); ADD_SIGNAL(MethodInfo("frame_changed")); + ADD_SIGNAL(MethodInfo("animation_looped")); ADD_SIGNAL(MethodInfo("animation_finished")); - ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "frames", PROPERTY_HINT_RESOURCE_TYPE, "SpriteFrames"), "set_sprite_frames", "get_sprite_frames"); - ADD_PROPERTY(PropertyInfo(Variant::STRING, "animation"), "set_animation", "get_animation"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "sprite_frames", PROPERTY_HINT_RESOURCE_TYPE, "SpriteFrames"), "set_sprite_frames", "get_sprite_frames"); + ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "animation", PROPERTY_HINT_ENUM, ""), "set_animation", "get_animation"); + ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "autoplay", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_autoplay", "get_autoplay"); ADD_PROPERTY(PropertyInfo(Variant::INT, "frame"), "set_frame", "get_frame"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "frame_progress", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_frame_progress", "get_frame_progress"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "speed_scale"), "set_speed_scale", "get_speed_scale"); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "playing"), "set_playing", "is_playing"); } AnimatedSprite3D::AnimatedSprite3D() { diff --git a/scene/3d/sprite_3d.h b/scene/3d/sprite_3d.h index c5509aa723..d0fd767d89 100644 --- a/scene/3d/sprite_3d.h +++ b/scene/3d/sprite_3d.h @@ -209,24 +209,29 @@ class AnimatedSprite3D : public SpriteBase3D { GDCLASS(AnimatedSprite3D, SpriteBase3D); Ref<SpriteFrames> frames; + String autoplay; + bool playing = false; - bool playing_backwards = false; - bool backwards = false; StringName animation = "default"; int frame = 0; float speed_scale = 1.0; + float custom_speed_scale = 1.0; bool centered = false; - bool is_over = false; - double timeout = 0.0; + real_t frame_speed_scale = 1.0; + real_t frame_progress = 0.0; void _res_changed(); double _get_frame_duration(); - void _reset_timeout(); + void _calc_frame_speed_scale(); + void _stop_internal(bool p_reset); protected: +#ifndef DISABLE_DEPRECATED + bool _set(const StringName &p_name, const Variant &p_value); +#endif virtual void _draw() override; static void _bind_methods(); void _notification(int p_what); @@ -236,20 +241,30 @@ public: void set_sprite_frames(const Ref<SpriteFrames> &p_frames); Ref<SpriteFrames> get_sprite_frames() const; - void play(const StringName &p_animation = StringName(), bool p_backwards = false); + void play(const StringName &p_name = StringName(), float p_custom_scale = 1.0, bool p_from_end = false); + void play_backwards(const StringName &p_name = StringName()); + void pause(); void stop(); - void set_playing(bool p_playing); bool is_playing() const; - void set_animation(const StringName &p_animation); + void set_animation(const StringName &p_name); StringName get_animation() const; + void set_autoplay(const String &p_name); + String get_autoplay() const; + void set_frame(int p_frame); int get_frame() const; + void set_frame_progress(real_t p_progress); + real_t get_frame_progress() const; + + void set_frame_and_progress(int p_frame, real_t p_progress); + void set_speed_scale(float p_speed_scale); float get_speed_scale() const; + float get_playing_speed() const; virtual Rect2 get_item_rect() const override; diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index 77d82990d1..63e0fb6935 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -1722,8 +1722,11 @@ bool AnimationPlayer::is_playing() const { void AnimationPlayer::set_current_animation(const String &p_anim) { if (p_anim == "[stop]" || p_anim.is_empty()) { stop(); - } else if (!is_playing() || playback.assigned != p_anim) { + } else if (!is_playing()) { play(p_anim); + } else if (playback.assigned != p_anim) { + float speed = get_playing_speed(); + play(p_anim, -1.0, speed, signbit(speed)); } else { // Same animation, do not replay from start } @@ -1735,7 +1738,8 @@ String AnimationPlayer::get_current_animation() const { void AnimationPlayer::set_assigned_animation(const String &p_anim) { if (is_playing()) { - play(p_anim); + float speed = get_playing_speed(); + play(p_anim, -1.0, speed, signbit(speed)); } else { ERR_FAIL_COND_MSG(!animation_set.has(p_anim), vformat("Animation not found: %s.", p_anim)); playback.current.pos = 0; @@ -2217,7 +2221,7 @@ void AnimationPlayer::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_process_mode", PROPERTY_HINT_ENUM, "Physics,Idle,Manual"), "set_process_callback", "get_process_callback"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "playback_default_blend_time", PROPERTY_HINT_RANGE, "0,4096,0.01,suffix:s"), "set_default_blend_time", "get_default_blend_time"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "playback_active", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_active", "is_active"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "playback_speed", PROPERTY_HINT_RANGE, "-64,64,0.01"), "set_speed_scale", "get_speed_scale"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "speed_scale", PROPERTY_HINT_RANGE, "-64,64,0.01"), "set_speed_scale", "get_speed_scale"); ADD_PROPERTY(PropertyInfo(Variant::INT, "method_call_mode", PROPERTY_HINT_ENUM, "Deferred,Immediate"), "set_method_call_mode", "get_method_call_mode"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "movie_quit_on_finish"), "set_movie_quit_on_finish_enabled", "is_movie_quit_on_finish_enabled"); diff --git a/scene/animation/animation_tree.cpp b/scene/animation/animation_tree.cpp index a2a1a0aaef..05b6c72cbd 100644 --- a/scene/animation/animation_tree.cpp +++ b/scene/animation/animation_tree.cpp @@ -1411,7 +1411,7 @@ void AnimationTree::_process_graph(double p_delta) { case Animation::TYPE_METHOD: { #ifdef TOOLS_ENABLED if (!can_call) { - return; + continue; } #endif // TOOLS_ENABLED TrackCacheMethod *t = static_cast<TrackCacheMethod *>(track); diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 5aa777b40c..dba08e16cb 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -247,7 +247,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) { return; } if (b->is_pressed() && b->get_button_index() == MouseButton::RIGHT && context_menu_enabled) { - _ensure_menu(); + _update_context_menu(); menu->set_position(get_screen_position() + get_local_mouse_position()); menu->reset_size(); menu->popup(); @@ -452,7 +452,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) { if (context_menu_enabled) { if (k->is_action("ui_menu", true)) { - _ensure_menu(); + _update_context_menu(); Point2 pos = Point2(get_caret_pixel_pos().x, (get_size().y + theme_cache.font->get_height(theme_cache.font_size)) / 2); menu->set_position(get_screen_position() + pos); menu->reset_size(); @@ -2077,7 +2077,9 @@ bool LineEdit::is_menu_visible() const { } PopupMenu *LineEdit::get_menu() const { - const_cast<LineEdit *>(this)->_ensure_menu(); + if (!menu) { + const_cast<LineEdit *>(this)->_generate_context_menu(); + } return menu; } @@ -2335,6 +2337,115 @@ Key LineEdit::_get_menu_action_accelerator(const String &p_action) { } } +void LineEdit::_generate_context_menu() { + menu = memnew(PopupMenu); + add_child(menu, false, INTERNAL_MODE_FRONT); + + menu_dir = memnew(PopupMenu); + menu_dir->set_name("DirMenu"); + menu_dir->add_radio_check_item(RTR("Same as Layout Direction"), MENU_DIR_INHERITED); + menu_dir->add_radio_check_item(RTR("Auto-Detect Direction"), MENU_DIR_AUTO); + menu_dir->add_radio_check_item(RTR("Left-to-Right"), MENU_DIR_LTR); + menu_dir->add_radio_check_item(RTR("Right-to-Left"), MENU_DIR_RTL); + menu->add_child(menu_dir, false, INTERNAL_MODE_FRONT); + + menu_ctl = memnew(PopupMenu); + menu_ctl->set_name("CTLMenu"); + menu_ctl->add_item(RTR("Left-to-Right Mark (LRM)"), MENU_INSERT_LRM); + menu_ctl->add_item(RTR("Right-to-Left Mark (RLM)"), MENU_INSERT_RLM); + menu_ctl->add_item(RTR("Start of Left-to-Right Embedding (LRE)"), MENU_INSERT_LRE); + menu_ctl->add_item(RTR("Start of Right-to-Left Embedding (RLE)"), MENU_INSERT_RLE); + menu_ctl->add_item(RTR("Start of Left-to-Right Override (LRO)"), MENU_INSERT_LRO); + menu_ctl->add_item(RTR("Start of Right-to-Left Override (RLO)"), MENU_INSERT_RLO); + menu_ctl->add_item(RTR("Pop Direction Formatting (PDF)"), MENU_INSERT_PDF); + menu_ctl->add_separator(); + menu_ctl->add_item(RTR("Arabic Letter Mark (ALM)"), MENU_INSERT_ALM); + menu_ctl->add_item(RTR("Left-to-Right Isolate (LRI)"), MENU_INSERT_LRI); + menu_ctl->add_item(RTR("Right-to-Left Isolate (RLI)"), MENU_INSERT_RLI); + menu_ctl->add_item(RTR("First Strong Isolate (FSI)"), MENU_INSERT_FSI); + menu_ctl->add_item(RTR("Pop Direction Isolate (PDI)"), MENU_INSERT_PDI); + menu_ctl->add_separator(); + menu_ctl->add_item(RTR("Zero-Width Joiner (ZWJ)"), MENU_INSERT_ZWJ); + menu_ctl->add_item(RTR("Zero-Width Non-Joiner (ZWNJ)"), MENU_INSERT_ZWNJ); + menu_ctl->add_item(RTR("Word Joiner (WJ)"), MENU_INSERT_WJ); + menu_ctl->add_item(RTR("Soft Hyphen (SHY)"), MENU_INSERT_SHY); + menu->add_child(menu_ctl, false, INTERNAL_MODE_FRONT); + + menu->add_item(RTR("Cut"), MENU_CUT); + menu->add_item(RTR("Copy"), MENU_COPY); + menu->add_item(RTR("Paste"), MENU_PASTE); + menu->add_separator(); + menu->add_item(RTR("Select All"), MENU_SELECT_ALL); + menu->add_item(RTR("Clear"), MENU_CLEAR); + menu->add_separator(); + menu->add_item(RTR("Undo"), MENU_UNDO); + menu->add_item(RTR("Redo"), MENU_REDO); + menu->add_separator(); + menu->add_submenu_item(RTR("Text Writing Direction"), "DirMenu", MENU_SUBMENU_TEXT_DIR); + menu->add_separator(); + menu->add_check_item(RTR("Display Control Characters"), MENU_DISPLAY_UCC); + menu->add_submenu_item(RTR("Insert Control Character"), "CTLMenu", MENU_SUBMENU_INSERT_UCC); + + menu->connect("id_pressed", callable_mp(this, &LineEdit::menu_option)); + menu_dir->connect("id_pressed", callable_mp(this, &LineEdit::menu_option)); + menu_ctl->connect("id_pressed", callable_mp(this, &LineEdit::menu_option)); + + menu->connect(SNAME("focus_entered"), callable_mp(this, &LineEdit::_validate_caret_can_draw)); + menu->connect(SNAME("focus_exited"), callable_mp(this, &LineEdit::_validate_caret_can_draw)); +} + +void LineEdit::_update_context_menu() { + if (!menu) { + _generate_context_menu(); + } + + int idx = -1; + +#define MENU_ITEM_ACTION_DISABLED(m_menu, m_id, m_action, m_disabled) \ + idx = m_menu->get_item_index(m_id); \ + if (idx >= 0) { \ + m_menu->set_item_accelerator(idx, shortcut_keys_enabled ? _get_menu_action_accelerator(m_action) : Key::NONE); \ + m_menu->set_item_disabled(idx, m_disabled); \ + } + +#define MENU_ITEM_ACTION(m_menu, m_id, m_action) \ + idx = m_menu->get_item_index(m_id); \ + if (idx >= 0) { \ + m_menu->set_item_accelerator(idx, shortcut_keys_enabled ? _get_menu_action_accelerator(m_action) : Key::NONE); \ + } + +#define MENU_ITEM_DISABLED(m_menu, m_id, m_disabled) \ + idx = m_menu->get_item_index(m_id); \ + if (idx >= 0) { \ + m_menu->set_item_disabled(idx, m_disabled); \ + } + +#define MENU_ITEM_CHECKED(m_menu, m_id, m_checked) \ + idx = m_menu->get_item_index(m_id); \ + if (idx >= 0) { \ + m_menu->set_item_checked(idx, m_checked); \ + } + + MENU_ITEM_ACTION_DISABLED(menu, MENU_CUT, "ui_cut", !editable) + MENU_ITEM_ACTION(menu, MENU_COPY, "ui_copy") + MENU_ITEM_ACTION_DISABLED(menu, MENU_PASTE, "ui_paste", !editable) + MENU_ITEM_ACTION_DISABLED(menu, MENU_SELECT_ALL, "ui_text_select_all", !selecting_enabled) + MENU_ITEM_DISABLED(menu, MENU_CLEAR, !editable) + MENU_ITEM_ACTION_DISABLED(menu, MENU_UNDO, "ui_undo", !editable || !has_undo()) + MENU_ITEM_ACTION_DISABLED(menu, MENU_REDO, "ui_redo", !editable || !has_redo()) + MENU_ITEM_CHECKED(menu_dir, MENU_DIR_INHERITED, text_direction == TEXT_DIRECTION_INHERITED) + MENU_ITEM_CHECKED(menu_dir, MENU_DIR_AUTO, text_direction == TEXT_DIRECTION_AUTO) + MENU_ITEM_CHECKED(menu_dir, MENU_DIR_LTR, text_direction == TEXT_DIRECTION_LTR) + MENU_ITEM_CHECKED(menu_dir, MENU_DIR_RTL, text_direction == TEXT_DIRECTION_RTL) + MENU_ITEM_CHECKED(menu, MENU_DISPLAY_UCC, draw_control_chars) + MENU_ITEM_DISABLED(menu, MENU_SUBMENU_INSERT_UCC, !editable) + +#undef MENU_ITEM_ACTION_DISABLED +#undef MENU_ITEM_ACTION +#undef MENU_ITEM_DISABLED +#undef MENU_ITEM_CHECKED +} + void LineEdit::_validate_property(PropertyInfo &p_property) const { if (!caret_blink_enabled && p_property.name == "caret_blink_interval") { p_property.usage = PROPERTY_USAGE_NO_EDITOR; @@ -2429,11 +2540,13 @@ void LineEdit::_bind_methods() { BIND_ENUM_CONSTANT(MENU_SELECT_ALL); BIND_ENUM_CONSTANT(MENU_UNDO); BIND_ENUM_CONSTANT(MENU_REDO); + BIND_ENUM_CONSTANT(MENU_SUBMENU_TEXT_DIR); BIND_ENUM_CONSTANT(MENU_DIR_INHERITED); BIND_ENUM_CONSTANT(MENU_DIR_AUTO); BIND_ENUM_CONSTANT(MENU_DIR_LTR); BIND_ENUM_CONSTANT(MENU_DIR_RTL); BIND_ENUM_CONSTANT(MENU_DISPLAY_UCC); + BIND_ENUM_CONSTANT(MENU_SUBMENU_INSERT_UCC); BIND_ENUM_CONSTANT(MENU_INSERT_LRM); BIND_ENUM_CONSTANT(MENU_INSERT_RLM); BIND_ENUM_CONSTANT(MENU_INSERT_LRE); @@ -2496,86 +2609,6 @@ void LineEdit::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "structured_text_bidi_override_options"), "set_structured_text_bidi_override_options", "get_structured_text_bidi_override_options"); } -void LineEdit::_ensure_menu() { - if (!menu) { - menu = memnew(PopupMenu); - add_child(menu, false, INTERNAL_MODE_FRONT); - - menu_dir = memnew(PopupMenu); - menu_dir->set_name("DirMenu"); - menu_dir->add_radio_check_item(RTR("Same as Layout Direction"), MENU_DIR_INHERITED); - menu_dir->add_radio_check_item(RTR("Auto-Detect Direction"), MENU_DIR_AUTO); - menu_dir->add_radio_check_item(RTR("Left-to-Right"), MENU_DIR_LTR); - menu_dir->add_radio_check_item(RTR("Right-to-Left"), MENU_DIR_RTL); - menu->add_child(menu_dir, false, INTERNAL_MODE_FRONT); - - menu_ctl = memnew(PopupMenu); - menu_ctl->set_name("CTLMenu"); - menu_ctl->add_item(RTR("Left-to-Right Mark (LRM)"), MENU_INSERT_LRM); - menu_ctl->add_item(RTR("Right-to-Left Mark (RLM)"), MENU_INSERT_RLM); - menu_ctl->add_item(RTR("Start of Left-to-Right Embedding (LRE)"), MENU_INSERT_LRE); - menu_ctl->add_item(RTR("Start of Right-to-Left Embedding (RLE)"), MENU_INSERT_RLE); - menu_ctl->add_item(RTR("Start of Left-to-Right Override (LRO)"), MENU_INSERT_LRO); - menu_ctl->add_item(RTR("Start of Right-to-Left Override (RLO)"), MENU_INSERT_RLO); - menu_ctl->add_item(RTR("Pop Direction Formatting (PDF)"), MENU_INSERT_PDF); - menu_ctl->add_separator(); - menu_ctl->add_item(RTR("Arabic Letter Mark (ALM)"), MENU_INSERT_ALM); - menu_ctl->add_item(RTR("Left-to-Right Isolate (LRI)"), MENU_INSERT_LRI); - menu_ctl->add_item(RTR("Right-to-Left Isolate (RLI)"), MENU_INSERT_RLI); - menu_ctl->add_item(RTR("First Strong Isolate (FSI)"), MENU_INSERT_FSI); - menu_ctl->add_item(RTR("Pop Direction Isolate (PDI)"), MENU_INSERT_PDI); - menu_ctl->add_separator(); - menu_ctl->add_item(RTR("Zero-Width Joiner (ZWJ)"), MENU_INSERT_ZWJ); - menu_ctl->add_item(RTR("Zero-Width Non-Joiner (ZWNJ)"), MENU_INSERT_ZWNJ); - menu_ctl->add_item(RTR("Word Joiner (WJ)"), MENU_INSERT_WJ); - menu_ctl->add_item(RTR("Soft Hyphen (SHY)"), MENU_INSERT_SHY); - menu->add_child(menu_ctl, false, INTERNAL_MODE_FRONT); - - menu->connect("id_pressed", callable_mp(this, &LineEdit::menu_option)); - menu->connect(SNAME("focus_entered"), callable_mp(this, &LineEdit::_validate_caret_can_draw)); - menu->connect(SNAME("focus_exited"), callable_mp(this, &LineEdit::_validate_caret_can_draw)); - menu_dir->connect("id_pressed", callable_mp(this, &LineEdit::menu_option)); - menu_ctl->connect("id_pressed", callable_mp(this, &LineEdit::menu_option)); - } - - // Reorganize context menu. - menu->clear(); - if (editable) { - menu->add_item(RTR("Cut"), MENU_CUT, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_cut") : Key::NONE); - } - menu->add_item(RTR("Copy"), MENU_COPY, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_copy") : Key::NONE); - if (editable) { - menu->add_item(RTR("Paste"), MENU_PASTE, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_paste") : Key::NONE); - } - menu->add_separator(); - if (is_selecting_enabled()) { - menu->add_item(RTR("Select All"), MENU_SELECT_ALL, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_text_select_all") : Key::NONE); - } - if (editable) { - menu->add_item(RTR("Clear"), MENU_CLEAR); - menu->add_separator(); - menu->add_item(RTR("Undo"), MENU_UNDO, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_undo") : Key::NONE); - menu->add_item(RTR("Redo"), MENU_REDO, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_redo") : Key::NONE); - } - menu->add_separator(); - menu->add_submenu_item(RTR("Text Writing Direction"), "DirMenu"); - menu->add_separator(); - menu->add_check_item(RTR("Display Control Characters"), MENU_DISPLAY_UCC); - menu->set_item_checked(menu->get_item_index(MENU_DISPLAY_UCC), draw_control_chars); - if (editable) { - menu->add_submenu_item(RTR("Insert Control Character"), "CTLMenu"); - } - menu_dir->set_item_checked(menu_dir->get_item_index(MENU_DIR_INHERITED), text_direction == TEXT_DIRECTION_INHERITED); - menu_dir->set_item_checked(menu_dir->get_item_index(MENU_DIR_AUTO), text_direction == TEXT_DIRECTION_AUTO); - menu_dir->set_item_checked(menu_dir->get_item_index(MENU_DIR_LTR), text_direction == TEXT_DIRECTION_LTR); - menu_dir->set_item_checked(menu_dir->get_item_index(MENU_DIR_RTL), text_direction == TEXT_DIRECTION_RTL); - - if (editable) { - menu->set_item_disabled(menu->get_item_index(MENU_UNDO), !has_undo()); - menu->set_item_disabled(menu->get_item_index(MENU_REDO), !has_redo()); - } -} - LineEdit::LineEdit(const String &p_placeholder) { text_rid = TS->create_shaped_text(); _create_undo_state(); diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h index 5107845a5e..81c506069a 100644 --- a/scene/gui/line_edit.h +++ b/scene/gui/line_edit.h @@ -46,11 +46,13 @@ public: MENU_SELECT_ALL, MENU_UNDO, MENU_REDO, + MENU_SUBMENU_TEXT_DIR, MENU_DIR_INHERITED, MENU_DIR_AUTO, MENU_DIR_LTR, MENU_DIR_RTL, MENU_DISPLAY_UCC, + MENU_SUBMENU_INSERT_UCC, MENU_INSERT_LRM, MENU_INSERT_RLM, MENU_INSERT_LRE, @@ -207,6 +209,8 @@ private: void _create_undo_state(); Key _get_menu_action_accelerator(const String &p_action); + void _generate_context_menu(); + void _update_context_menu(); void _shape(); void _fit_to_width(); @@ -239,8 +243,6 @@ private: void _backspace(bool p_word = false, bool p_all_to_left = false); void _delete(bool p_word = false, bool p_all_to_right = false); - void _ensure_menu(); - protected: bool _is_over_clear_button(const Point2 &p_pos) const; virtual void _update_theme_item_cache() override; diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index 9baf7c9180..71ee3c8d0d 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -2808,7 +2808,7 @@ void RichTextLabel::_process_line_caches() { int ctrl_height = get_size().height; int fi = main->first_invalid_line.load(); - int total_chars = (fi == 0) ? 0 : (main->lines[fi].char_offset + main->lines[fi].char_count); + int total_chars = main->lines[fi].char_offset; float total_height = (fi == 0) ? 0 : _calculate_line_vertical_offset(main->lines[fi - 1]); for (int i = fi; i < (int)main->lines.size(); i++) { diff --git a/scene/gui/subviewport_container.cpp b/scene/gui/subviewport_container.cpp index 440597c24a..7c1d2f95a9 100644 --- a/scene/gui/subviewport_container.cpp +++ b/scene/gui/subviewport_container.cpp @@ -180,24 +180,51 @@ void SubViewportContainer::input(const Ref<InputEvent> &p_event) { return; } - Transform2D xform = get_global_transform_with_canvas(); + if (_is_propagated_in_gui_input(p_event)) { + return; + } - if (stretch) { - Transform2D scale_xf; - scale_xf.scale(Vector2(shrink, shrink)); - xform *= scale_xf; + _send_event_to_viewports(p_event); +} + +void SubViewportContainer::gui_input(const Ref<InputEvent> &p_event) { + ERR_FAIL_COND(p_event.is_null()); + + if (Engine::get_singleton()->is_editor_hint()) { + return; } - Ref<InputEvent> ev = p_event->xformed_by(xform.affine_inverse()); + if (!_is_propagated_in_gui_input(p_event)) { + return; + } + if (stretch && shrink > 1) { + Transform2D xform; + xform.scale(Vector2(1, 1) / shrink); + _send_event_to_viewports(p_event->xformed_by(xform)); + } else { + _send_event_to_viewports(p_event); + } +} + +void SubViewportContainer::_send_event_to_viewports(const Ref<InputEvent> &p_event) { for (int i = 0; i < get_child_count(); i++) { SubViewport *c = Object::cast_to<SubViewport>(get_child(i)); if (!c || c->is_input_disabled()) { continue; } - c->push_input(ev); + c->push_input(p_event); + } +} + +bool SubViewportContainer::_is_propagated_in_gui_input(const Ref<InputEvent> &p_event) { + // Propagation of events with a position property happen in gui_input + // Propagation of other events happen in input + if (Object::cast_to<InputEventMouse>(*p_event) || Object::cast_to<InputEventScreenDrag>(*p_event) || Object::cast_to<InputEventScreenTouch>(*p_event) || Object::cast_to<InputEventGesture>(*p_event)) { + return true; } + return false; } void SubViewportContainer::unhandled_input(const Ref<InputEvent> &p_event) { diff --git a/scene/gui/subviewport_container.h b/scene/gui/subviewport_container.h index d918c4a615..d3236b0c4e 100644 --- a/scene/gui/subviewport_container.h +++ b/scene/gui/subviewport_container.h @@ -39,6 +39,8 @@ class SubViewportContainer : public Container { bool stretch = false; int shrink = 1; void _notify_viewports(int p_notification); + bool _is_propagated_in_gui_input(const Ref<InputEvent> &p_event); + void _send_event_to_viewports(const Ref<InputEvent> &p_event); protected: void _notification(int p_what); @@ -52,6 +54,7 @@ public: bool is_stretch_enabled() const; virtual void input(const Ref<InputEvent> &p_event) override; + virtual void gui_input(const Ref<InputEvent> &p_event) override; virtual void unhandled_input(const Ref<InputEvent> &p_event) override; void set_stretch_shrink(int p_shrink); int get_stretch_shrink() const; diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 723f3fe7af..d785280701 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -1861,7 +1861,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) { } if (context_menu_enabled) { - _generate_context_menu(); + _update_context_menu(); menu->set_position(get_screen_position() + mpos); menu->reset_size(); menu->popup(); @@ -2141,7 +2141,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) { // MISC. if (k->is_action("ui_menu", true)) { if (context_menu_enabled) { - _generate_context_menu(); + _update_context_menu(); adjust_viewport_to_caret(); menu->set_position(get_screen_position() + get_caret_draw_pos()); menu->reset_size(); @@ -3726,7 +3726,9 @@ void TextEdit::paste_primary_clipboard(int p_caret) { // Context menu. PopupMenu *TextEdit::get_menu() const { - const_cast<TextEdit *>(this)->_generate_context_menu(); + if (!menu) { + const_cast<TextEdit *>(this)->_generate_context_menu(); + } return menu; } @@ -6075,11 +6077,13 @@ void TextEdit::_bind_methods() { BIND_ENUM_CONSTANT(MENU_SELECT_ALL); BIND_ENUM_CONSTANT(MENU_UNDO); BIND_ENUM_CONSTANT(MENU_REDO); + BIND_ENUM_CONSTANT(MENU_SUBMENU_TEXT_DIR); BIND_ENUM_CONSTANT(MENU_DIR_INHERITED); BIND_ENUM_CONSTANT(MENU_DIR_AUTO); BIND_ENUM_CONSTANT(MENU_DIR_LTR); BIND_ENUM_CONSTANT(MENU_DIR_RTL); BIND_ENUM_CONSTANT(MENU_DISPLAY_UCC); + BIND_ENUM_CONSTANT(MENU_SUBMENU_INSERT_UCC); BIND_ENUM_CONSTANT(MENU_INSERT_LRM); BIND_ENUM_CONSTANT(MENU_INSERT_RLM); BIND_ENUM_CONSTANT(MENU_INSERT_LRE); @@ -6730,87 +6734,7 @@ void TextEdit::_paste_primary_clipboard_internal(int p_caret) { grab_focus(); } -/* Text. */ // Context menu. -void TextEdit::_generate_context_menu() { - if (!menu) { - menu = memnew(PopupMenu); - add_child(menu, false, INTERNAL_MODE_FRONT); - - menu_dir = memnew(PopupMenu); - menu_dir->set_name("DirMenu"); - menu_dir->add_radio_check_item(RTR("Same as Layout Direction"), MENU_DIR_INHERITED); - menu_dir->add_radio_check_item(RTR("Auto-Detect Direction"), MENU_DIR_AUTO); - menu_dir->add_radio_check_item(RTR("Left-to-Right"), MENU_DIR_LTR); - menu_dir->add_radio_check_item(RTR("Right-to-Left"), MENU_DIR_RTL); - menu->add_child(menu_dir, false, INTERNAL_MODE_FRONT); - - menu_ctl = memnew(PopupMenu); - menu_ctl->set_name("CTLMenu"); - menu_ctl->add_item(RTR("Left-to-Right Mark (LRM)"), MENU_INSERT_LRM); - menu_ctl->add_item(RTR("Right-to-Left Mark (RLM)"), MENU_INSERT_RLM); - menu_ctl->add_item(RTR("Start of Left-to-Right Embedding (LRE)"), MENU_INSERT_LRE); - menu_ctl->add_item(RTR("Start of Right-to-Left Embedding (RLE)"), MENU_INSERT_RLE); - menu_ctl->add_item(RTR("Start of Left-to-Right Override (LRO)"), MENU_INSERT_LRO); - menu_ctl->add_item(RTR("Start of Right-to-Left Override (RLO)"), MENU_INSERT_RLO); - menu_ctl->add_item(RTR("Pop Direction Formatting (PDF)"), MENU_INSERT_PDF); - menu_ctl->add_separator(); - menu_ctl->add_item(RTR("Arabic Letter Mark (ALM)"), MENU_INSERT_ALM); - menu_ctl->add_item(RTR("Left-to-Right Isolate (LRI)"), MENU_INSERT_LRI); - menu_ctl->add_item(RTR("Right-to-Left Isolate (RLI)"), MENU_INSERT_RLI); - menu_ctl->add_item(RTR("First Strong Isolate (FSI)"), MENU_INSERT_FSI); - menu_ctl->add_item(RTR("Pop Direction Isolate (PDI)"), MENU_INSERT_PDI); - menu_ctl->add_separator(); - menu_ctl->add_item(RTR("Zero-Width Joiner (ZWJ)"), MENU_INSERT_ZWJ); - menu_ctl->add_item(RTR("Zero-Width Non-Joiner (ZWNJ)"), MENU_INSERT_ZWNJ); - menu_ctl->add_item(RTR("Word Joiner (WJ)"), MENU_INSERT_WJ); - menu_ctl->add_item(RTR("Soft Hyphen (SHY)"), MENU_INSERT_SHY); - menu->add_child(menu_ctl, false, INTERNAL_MODE_FRONT); - - menu->connect("id_pressed", callable_mp(this, &TextEdit::menu_option)); - menu_dir->connect("id_pressed", callable_mp(this, &TextEdit::menu_option)); - menu_ctl->connect("id_pressed", callable_mp(this, &TextEdit::menu_option)); - } - - // Reorganize context menu. - menu->clear(); - if (editable) { - menu->add_item(RTR("Cut"), MENU_CUT, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_cut") : Key::NONE); - } - menu->add_item(RTR("Copy"), MENU_COPY, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_copy") : Key::NONE); - if (editable) { - menu->add_item(RTR("Paste"), MENU_PASTE, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_paste") : Key::NONE); - } - if (selecting_enabled || editable) { - menu->add_separator(); - } - if (selecting_enabled) { - menu->add_item(RTR("Select All"), MENU_SELECT_ALL, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_text_select_all") : Key::NONE); - } - if (editable) { - menu->add_item(RTR("Clear"), MENU_CLEAR); - menu->add_separator(); - menu->add_item(RTR("Undo"), MENU_UNDO, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_undo") : Key::NONE); - menu->add_item(RTR("Redo"), MENU_REDO, is_shortcut_keys_enabled() ? _get_menu_action_accelerator("ui_redo") : Key::NONE); - } - menu->add_separator(); - menu->add_submenu_item(RTR("Text Writing Direction"), "DirMenu"); - menu->add_separator(); - menu->add_check_item(RTR("Display Control Characters"), MENU_DISPLAY_UCC); - menu->set_item_checked(menu->get_item_index(MENU_DISPLAY_UCC), draw_control_chars); - if (editable) { - menu->add_submenu_item(RTR("Insert Control Character"), "CTLMenu"); - } - menu_dir->set_item_checked(menu_dir->get_item_index(MENU_DIR_INHERITED), text_direction == TEXT_DIRECTION_INHERITED); - menu_dir->set_item_checked(menu_dir->get_item_index(MENU_DIR_AUTO), text_direction == TEXT_DIRECTION_AUTO); - menu_dir->set_item_checked(menu_dir->get_item_index(MENU_DIR_LTR), text_direction == TEXT_DIRECTION_LTR); - menu_dir->set_item_checked(menu_dir->get_item_index(MENU_DIR_RTL), text_direction == TEXT_DIRECTION_RTL); - - if (editable) { - menu->set_item_disabled(menu->get_item_index(MENU_UNDO), !has_undo()); - menu->set_item_disabled(menu->get_item_index(MENU_REDO), !has_redo()); - } -} Key TextEdit::_get_menu_action_accelerator(const String &p_action) { const List<Ref<InputEvent>> *events = InputMap::get_singleton()->action_get_events(p_action); @@ -6837,6 +6761,112 @@ Key TextEdit::_get_menu_action_accelerator(const String &p_action) { } } +void TextEdit::_generate_context_menu() { + menu = memnew(PopupMenu); + add_child(menu, false, INTERNAL_MODE_FRONT); + + menu_dir = memnew(PopupMenu); + menu_dir->set_name("DirMenu"); + menu_dir->add_radio_check_item(RTR("Same as Layout Direction"), MENU_DIR_INHERITED); + menu_dir->add_radio_check_item(RTR("Auto-Detect Direction"), MENU_DIR_AUTO); + menu_dir->add_radio_check_item(RTR("Left-to-Right"), MENU_DIR_LTR); + menu_dir->add_radio_check_item(RTR("Right-to-Left"), MENU_DIR_RTL); + menu->add_child(menu_dir, false, INTERNAL_MODE_FRONT); + + menu_ctl = memnew(PopupMenu); + menu_ctl->set_name("CTLMenu"); + menu_ctl->add_item(RTR("Left-to-Right Mark (LRM)"), MENU_INSERT_LRM); + menu_ctl->add_item(RTR("Right-to-Left Mark (RLM)"), MENU_INSERT_RLM); + menu_ctl->add_item(RTR("Start of Left-to-Right Embedding (LRE)"), MENU_INSERT_LRE); + menu_ctl->add_item(RTR("Start of Right-to-Left Embedding (RLE)"), MENU_INSERT_RLE); + menu_ctl->add_item(RTR("Start of Left-to-Right Override (LRO)"), MENU_INSERT_LRO); + menu_ctl->add_item(RTR("Start of Right-to-Left Override (RLO)"), MENU_INSERT_RLO); + menu_ctl->add_item(RTR("Pop Direction Formatting (PDF)"), MENU_INSERT_PDF); + menu_ctl->add_separator(); + menu_ctl->add_item(RTR("Arabic Letter Mark (ALM)"), MENU_INSERT_ALM); + menu_ctl->add_item(RTR("Left-to-Right Isolate (LRI)"), MENU_INSERT_LRI); + menu_ctl->add_item(RTR("Right-to-Left Isolate (RLI)"), MENU_INSERT_RLI); + menu_ctl->add_item(RTR("First Strong Isolate (FSI)"), MENU_INSERT_FSI); + menu_ctl->add_item(RTR("Pop Direction Isolate (PDI)"), MENU_INSERT_PDI); + menu_ctl->add_separator(); + menu_ctl->add_item(RTR("Zero-Width Joiner (ZWJ)"), MENU_INSERT_ZWJ); + menu_ctl->add_item(RTR("Zero-Width Non-Joiner (ZWNJ)"), MENU_INSERT_ZWNJ); + menu_ctl->add_item(RTR("Word Joiner (WJ)"), MENU_INSERT_WJ); + menu_ctl->add_item(RTR("Soft Hyphen (SHY)"), MENU_INSERT_SHY); + menu->add_child(menu_ctl, false, INTERNAL_MODE_FRONT); + + menu->add_item(RTR("Cut"), MENU_CUT); + menu->add_item(RTR("Copy"), MENU_COPY); + menu->add_item(RTR("Paste"), MENU_PASTE); + menu->add_separator(); + menu->add_item(RTR("Select All"), MENU_SELECT_ALL); + menu->add_item(RTR("Clear"), MENU_CLEAR); + menu->add_separator(); + menu->add_item(RTR("Undo"), MENU_UNDO); + menu->add_item(RTR("Redo"), MENU_REDO); + menu->add_separator(); + menu->add_submenu_item(RTR("Text Writing Direction"), "DirMenu", MENU_SUBMENU_TEXT_DIR); + menu->add_separator(); + menu->add_check_item(RTR("Display Control Characters"), MENU_DISPLAY_UCC); + menu->add_submenu_item(RTR("Insert Control Character"), "CTLMenu", MENU_SUBMENU_INSERT_UCC); + + menu->connect("id_pressed", callable_mp(this, &TextEdit::menu_option)); + menu_dir->connect("id_pressed", callable_mp(this, &TextEdit::menu_option)); + menu_ctl->connect("id_pressed", callable_mp(this, &TextEdit::menu_option)); +} + +void TextEdit::_update_context_menu() { + if (!menu) { + _generate_context_menu(); + } + + int idx = -1; + +#define MENU_ITEM_ACTION_DISABLED(m_menu, m_id, m_action, m_disabled) \ + idx = m_menu->get_item_index(m_id); \ + if (idx >= 0) { \ + m_menu->set_item_accelerator(idx, shortcut_keys_enabled ? _get_menu_action_accelerator(m_action) : Key::NONE); \ + m_menu->set_item_disabled(idx, m_disabled); \ + } + +#define MENU_ITEM_ACTION(m_menu, m_id, m_action) \ + idx = m_menu->get_item_index(m_id); \ + if (idx >= 0) { \ + m_menu->set_item_accelerator(idx, shortcut_keys_enabled ? _get_menu_action_accelerator(m_action) : Key::NONE); \ + } + +#define MENU_ITEM_DISABLED(m_menu, m_id, m_disabled) \ + idx = m_menu->get_item_index(m_id); \ + if (idx >= 0) { \ + m_menu->set_item_disabled(idx, m_disabled); \ + } + +#define MENU_ITEM_CHECKED(m_menu, m_id, m_checked) \ + idx = m_menu->get_item_index(m_id); \ + if (idx >= 0) { \ + m_menu->set_item_checked(idx, m_checked); \ + } + + MENU_ITEM_ACTION_DISABLED(menu, MENU_CUT, "ui_cut", !editable) + MENU_ITEM_ACTION(menu, MENU_COPY, "ui_copy") + MENU_ITEM_ACTION_DISABLED(menu, MENU_PASTE, "ui_paste", !editable) + MENU_ITEM_ACTION_DISABLED(menu, MENU_SELECT_ALL, "ui_text_select_all", !selecting_enabled) + MENU_ITEM_DISABLED(menu, MENU_CLEAR, !editable) + MENU_ITEM_ACTION_DISABLED(menu, MENU_UNDO, "ui_undo", !editable || !has_undo()) + MENU_ITEM_ACTION_DISABLED(menu, MENU_REDO, "ui_redo", !editable || !has_redo()) + MENU_ITEM_CHECKED(menu_dir, MENU_DIR_INHERITED, text_direction == TEXT_DIRECTION_INHERITED) + MENU_ITEM_CHECKED(menu_dir, MENU_DIR_AUTO, text_direction == TEXT_DIRECTION_AUTO) + MENU_ITEM_CHECKED(menu_dir, MENU_DIR_LTR, text_direction == TEXT_DIRECTION_LTR) + MENU_ITEM_CHECKED(menu_dir, MENU_DIR_RTL, text_direction == TEXT_DIRECTION_RTL) + MENU_ITEM_CHECKED(menu, MENU_DISPLAY_UCC, draw_control_chars) + MENU_ITEM_DISABLED(menu, MENU_SUBMENU_INSERT_UCC, !editable) + +#undef MENU_ITEM_ACTION_DISABLED +#undef MENU_ITEM_ACTION +#undef MENU_ITEM_DISABLED +#undef MENU_ITEM_CHECKED +} + /* Versioning */ void TextEdit::_push_current_op() { if (pending_action_end) { diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index 2ec2f39409..a084fa3833 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -87,11 +87,13 @@ public: MENU_SELECT_ALL, MENU_UNDO, MENU_REDO, + MENU_SUBMENU_TEXT_DIR, MENU_DIR_INHERITED, MENU_DIR_AUTO, MENU_DIR_LTR, MENU_DIR_RTL, MENU_DISPLAY_UCC, + MENU_SUBMENU_INSERT_UCC, MENU_INSERT_LRM, MENU_INSERT_RLM, MENU_INSERT_LRE, @@ -303,8 +305,9 @@ private: PopupMenu *menu_dir = nullptr; PopupMenu *menu_ctl = nullptr; - void _generate_context_menu(); Key _get_menu_action_accelerator(const String &p_action); + void _generate_context_menu(); + void _update_context_menu(); /* Versioning */ struct Caret; diff --git a/scene/resources/sprite_frames.cpp b/scene/resources/sprite_frames.cpp index c101974248..818be38681 100644 --- a/scene/resources/sprite_frames.cpp +++ b/scene/resources/sprite_frames.cpp @@ -36,7 +36,7 @@ void SpriteFrames::add_frame(const StringName &p_anim, const Ref<Texture2D> &p_t HashMap<StringName, Anim>::Iterator E = animations.find(p_anim); ERR_FAIL_COND_MSG(!E, "Animation '" + String(p_anim) + "' doesn't exist."); - p_duration = MAX(0.0, p_duration); + p_duration = MAX(SPRITE_FRAME_MINIMUM_DURATION, p_duration); Frame frame = { p_texture, p_duration }; @@ -57,7 +57,7 @@ void SpriteFrames::set_frame(const StringName &p_anim, int p_idx, const Ref<Text return; } - p_duration = MAX(0.0, p_duration); + p_duration = MAX(SPRITE_FRAME_MINIMUM_DURATION, p_duration); Frame frame = { p_texture, p_duration }; @@ -214,7 +214,7 @@ void SpriteFrames::_set_animations(const Array &p_animations) { ERR_CONTINUE(!f.has("texture")); ERR_CONTINUE(!f.has("duration")); - Frame frame = { f["texture"], f["duration"] }; + Frame frame = { f["texture"], MAX(SPRITE_FRAME_MINIMUM_DURATION, (float)f["duration"]) }; anim.frames.push_back(frame); } diff --git a/scene/resources/sprite_frames.h b/scene/resources/sprite_frames.h index 61bead6948..6de2b4a37b 100644 --- a/scene/resources/sprite_frames.h +++ b/scene/resources/sprite_frames.h @@ -33,6 +33,8 @@ #include "scene/resources/texture.h" +static const float SPRITE_FRAME_MINIMUM_DURATION = 0.01; + class SpriteFrames : public Resource { GDCLASS(SpriteFrames, Resource); @@ -89,10 +91,10 @@ public: _FORCE_INLINE_ float get_frame_duration(const StringName &p_anim, int p_idx) const { HashMap<StringName, Anim>::ConstIterator E = animations.find(p_anim); - ERR_FAIL_COND_V_MSG(!E, 0.0, "Animation '" + String(p_anim) + "' doesn't exist."); - ERR_FAIL_COND_V(p_idx < 0, 0.0); + ERR_FAIL_COND_V_MSG(!E, 1.0, "Animation '" + String(p_anim) + "' doesn't exist."); + ERR_FAIL_COND_V(p_idx < 0, 1.0); if (p_idx >= E->value.frames.size()) { - return 0.0; + return 1.0; } return E->value.frames[p_idx].duration; |