Merge pull request #50748 from JFonS/gizmo_rework
Node3D gizmo improvements
This commit is contained in:
commit
4c3d5850de
@ -32,9 +32,9 @@
|
|||||||
|
|
||||||
#include "core/templates/sort_array.h"
|
#include "core/templates/sort_array.h"
|
||||||
|
|
||||||
int TriangleMesh::_create_bvh(BVH *p_bvh, BVH **p_bb, int p_from, int p_size, int p_depth, int &max_depth, int &max_alloc) {
|
int TriangleMesh::_create_bvh(BVH *p_bvh, BVH **p_bb, int p_from, int p_size, int p_depth, int &r_max_depth, int &r_max_alloc) {
|
||||||
if (p_depth > max_depth) {
|
if (p_depth > r_max_depth) {
|
||||||
max_depth = p_depth;
|
r_max_depth = p_depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_size == 1) {
|
if (p_size == 1) {
|
||||||
@ -70,10 +70,10 @@ int TriangleMesh::_create_bvh(BVH *p_bvh, BVH **p_bb, int p_from, int p_size, in
|
|||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
int left = _create_bvh(p_bvh, p_bb, p_from, p_size / 2, p_depth + 1, max_depth, max_alloc);
|
int left = _create_bvh(p_bvh, p_bb, p_from, p_size / 2, p_depth + 1, r_max_depth, r_max_alloc);
|
||||||
int right = _create_bvh(p_bvh, p_bb, p_from + p_size / 2, p_size - p_size / 2, p_depth + 1, max_depth, max_alloc);
|
int right = _create_bvh(p_bvh, p_bb, p_from + p_size / 2, p_size - p_size / 2, p_depth + 1, r_max_depth, r_max_alloc);
|
||||||
|
|
||||||
int index = max_alloc++;
|
int index = r_max_alloc++;
|
||||||
BVH *_new = &p_bvh[index];
|
BVH *_new = &p_bvh[index];
|
||||||
_new->aabb = aabb;
|
_new->aabb = aabb;
|
||||||
_new->center = aabb.position + aabb.size * 0.5;
|
_new->center = aabb.position + aabb.size * 0.5;
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<class name="EditorNode3DGizmo" inherits="Node3DGizmo" version="4.0">
|
<class name="EditorNode3DGizmo" inherits="Node3DGizmo" version="4.0">
|
||||||
<brief_description>
|
<brief_description>
|
||||||
Custom gizmo for editing Node3D objects.
|
Gizmo for editing Node3D objects.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<description>
|
<description>
|
||||||
Custom gizmo that is used for providing custom visualization and editing (handles) for Node3D objects. See [EditorNode3DGizmoPlugin] for more information.
|
Gizmo that is used for providing custom visualization and editing (handles and subgizmos) for Node3D objects. Can be overridden to create custom gizmos, but for simple gizmos creating a [EditorNode3DGizmoPlugin] is usually recommended.
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
@ -12,64 +12,119 @@
|
|||||||
<method name="_commit_handle" qualifiers="virtual">
|
<method name="_commit_handle" qualifiers="virtual">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="index" type="int">
|
<argument index="0" name="id" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="1" name="restore" type="Variant">
|
<argument index="1" name="restore" type="Variant">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="2" name="cancel" type="bool" default="false">
|
<argument index="2" name="cancel" type="bool" default="false">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Commit a handle being edited (handles must have been previously added by [method add_handles]).
|
Override this method to commit a handle being edited (handles must have been previously added by [method add_handles]). This usually means creating an [UndoRedo] action for the change, using the current handle value as "do" and the [code]restore[/code] argument as "undo".
|
||||||
If the [code]cancel[/code] parameter is [code]true[/code], an option to restore the edited value to the original is provided.
|
If the [code]cancel[/code] argument is [code]true[/code], the [code]restore[/code] value should be directly set, without any [UndoRedo] action.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="_commit_subgizmos" qualifiers="virtual">
|
||||||
|
<return type="void">
|
||||||
|
</return>
|
||||||
|
<argument index="0" name="ids" type="PackedInt32Array">
|
||||||
|
</argument>
|
||||||
|
<argument index="1" name="restore" type="Array">
|
||||||
|
</argument>
|
||||||
|
<argument index="2" name="cancel" type="bool" default="false">
|
||||||
|
</argument>
|
||||||
|
<description>
|
||||||
|
Override this method to commit a group of subgizmos being edited (see [method _subgizmos_intersect_ray] and [method _subgizmos_intersect_frustum]). This usually means creating an [UndoRedo] action for the change, using the current transforms as "do" and the [code]restore[/code] transforms as "undo".
|
||||||
|
If the [code]cancel[/code] argument is [code]true[/code], the [code]restore[/code] transforms should be directly set, without any [UndoRedo] action.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="_get_handle_name" qualifiers="virtual">
|
<method name="_get_handle_name" qualifiers="virtual">
|
||||||
<return type="String">
|
<return type="String">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="index" type="int">
|
<argument index="0" name="id" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Gets the name of an edited handle (handles must have been previously added by [method add_handles]).
|
Override this method to return the name of an edited handle (handles must have been previously added by [method add_handles]).
|
||||||
Handles can be named for reference to the user when editing.
|
Handles can be named for reference to the user when editing.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="_get_handle_value" qualifiers="virtual">
|
<method name="_get_handle_value" qualifiers="virtual">
|
||||||
<return type="Variant">
|
<return type="Variant">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="index" type="int">
|
<argument index="0" name="id" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Gets actual value of a handle. This value can be anything and used for eventually undoing the motion when calling [method _commit_handle].
|
Override this method to return the current value of a handle. This value will be requested at the start of an edit and used as the [code]restore[/code] argument in [method _commit_handle].
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="_get_subgizmo_transform" qualifiers="virtual">
|
||||||
|
<return type="Transform3D">
|
||||||
|
</return>
|
||||||
|
<argument index="0" name="id" type="int">
|
||||||
|
</argument>
|
||||||
|
<description>
|
||||||
|
Override this method to return the current transform of a subgizmo. This transform will be requested at the start of an edit and used as the [code]restore[/code] argument in [method _commit_subgizmos].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="_is_handle_highlighted" qualifiers="virtual">
|
<method name="_is_handle_highlighted" qualifiers="virtual">
|
||||||
<return type="bool">
|
<return type="bool">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="index" type="int">
|
<argument index="0" name="id" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Returns [code]true[/code] if the handle at index [code]index[/code] is highlighted by being hovered with the mouse.
|
Override this method to return [code]true[/code] whenever the given handle should be highlighted in the editor.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="_redraw" qualifiers="virtual">
|
<method name="_redraw" qualifiers="virtual">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
This function is called when the [Node3D] this gizmo refers to changes (the [method Node3D.update_gizmo] is called).
|
Override this method to add all the gizmo elements whenever a gizmo update is requested. It's common to call [method clear] at the beginning of this method and then add visual elements depending on the node's properties.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="_set_handle" qualifiers="virtual">
|
<method name="_set_handle" qualifiers="virtual">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="index" type="int">
|
<argument index="0" name="id" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="1" name="camera" type="Camera3D">
|
<argument index="1" name="camera" type="Camera3D">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="2" name="point" type="Vector2">
|
<argument index="2" name="point" type="Vector2">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
This function is used when the user drags a gizmo handle (previously added with [method add_handles]) in screen coordinates.
|
Override this method to update the node properties when the user drags a gizmo handle (previously added with [method add_handles]). The provided [code]point[/code] is the mouse position in screen coordinates and the [code]camera[/code] can be used to convert it to raycasts.
|
||||||
The [Camera3D] is also provided so screen coordinates can be converted to raycasts.
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="_set_subgizmo_transform" qualifiers="virtual">
|
||||||
|
<return type="void">
|
||||||
|
</return>
|
||||||
|
<argument index="0" name="id" type="int">
|
||||||
|
</argument>
|
||||||
|
<argument index="1" name="transform" type="Transform3D">
|
||||||
|
</argument>
|
||||||
|
<description>
|
||||||
|
Override this method to update the node properties during subgizmo editing (see [method _subgizmos_intersect_ray] and [method _subgizmos_intersect_frustum]). The [code]transform[/code] is given in the Node3D's local coordinate system.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="_subgizmos_intersect_frustum" qualifiers="virtual">
|
||||||
|
<return type="PackedInt32Array">
|
||||||
|
</return>
|
||||||
|
<argument index="0" name="camera" type="Camera3D">
|
||||||
|
</argument>
|
||||||
|
<argument index="1" name="frustum" type="Array">
|
||||||
|
</argument>
|
||||||
|
<description>
|
||||||
|
Override this method to allow selecting subgizmos using mouse drag box selection. Given a [code]camera[/code] and a [code]frustum[/code], this method should return which subgizmos are contained within the frustum. The [code]frustum[/code] argument consists of an [code]Array[/code] with all the [code]Plane[/code]s that make up the selection frustum. The returned value should contain a list of unique subgizmo identifiers, which can have any non-negative value and will be used in other virtual methods like [method _get_subgizmo_transform] or [method _commit_subgizmos].
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="_subgizmos_intersect_ray" qualifiers="virtual">
|
||||||
|
<return type="int">
|
||||||
|
</return>
|
||||||
|
<argument index="0" name="camera" type="Camera3D">
|
||||||
|
</argument>
|
||||||
|
<argument index="1" name="point" type="Vector2">
|
||||||
|
</argument>
|
||||||
|
<description>
|
||||||
|
Override this method to allow selecting subgizmos using mouse clicks. Given a [code]camera[/code] and a [code]point[/code] in screen coordinates, this method should return which subgizmo should be selected. The returned value should be a unique subgizmo identifier, which can have any non-negative value and will be used in other virtual methods like [method _get_subgizmo_transform] or [method _commit_subgizmos].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="add_collision_segments">
|
<method name="add_collision_segments">
|
||||||
@ -78,7 +133,7 @@
|
|||||||
<argument index="0" name="segments" type="PackedVector3Array">
|
<argument index="0" name="segments" type="PackedVector3Array">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Adds the specified [code]segments[/code] to the gizmo's collision shape for picking. Call this function during [method _redraw].
|
Adds the specified [code]segments[/code] to the gizmo's collision shape for picking. Call this method during [method _redraw].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="add_collision_triangles">
|
<method name="add_collision_triangles">
|
||||||
@ -87,7 +142,7 @@
|
|||||||
<argument index="0" name="triangles" type="TriangleMesh">
|
<argument index="0" name="triangles" type="TriangleMesh">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Adds collision triangles to the gizmo for picking. A [TriangleMesh] can be generated from a regular [Mesh] too. Call this function during [method _redraw].
|
Adds collision triangles to the gizmo for picking. A [TriangleMesh] can be generated from a regular [Mesh] too. Call this method during [method _redraw].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="add_handles">
|
<method name="add_handles">
|
||||||
@ -97,13 +152,15 @@
|
|||||||
</argument>
|
</argument>
|
||||||
<argument index="1" name="material" type="Material">
|
<argument index="1" name="material" type="Material">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="2" name="billboard" type="bool" default="false">
|
<argument index="2" name="ids" type="PackedInt32Array">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="3" name="secondary" type="bool" default="false">
|
<argument index="3" name="billboard" type="bool" default="false">
|
||||||
|
</argument>
|
||||||
|
<argument index="4" name="secondary" type="bool" default="false">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Adds a list of handles (points) which can be used to deform the object being edited.
|
Adds a list of handles (points) which can be used to edit the properties of the gizmo's Node3D. The [code]ids[/code] argument can be used to specify a custom identifier for each handle, if an empty [code]Array[/code] is passed, the ids will be assigned automatically from the [code]handles[/code] argument order.
|
||||||
There are virtual functions which will be called upon editing of these handles. Call this function during [method _redraw].
|
There are virtual methods which will be called upon editing of these handles. Call this method during [method _redraw].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="add_lines">
|
<method name="add_lines">
|
||||||
@ -118,7 +175,7 @@
|
|||||||
<argument index="3" name="modulate" type="Color" default="Color(1, 1, 1, 1)">
|
<argument index="3" name="modulate" type="Color" default="Color(1, 1, 1, 1)">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Adds lines to the gizmo (as sets of 2 points), with a given material. The lines are used for visualizing the gizmo. Call this function during [method _redraw].
|
Adds lines to the gizmo (as sets of 2 points), with a given material. The lines are used for visualizing the gizmo. Call this method during [method _redraw].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="add_mesh">
|
<method name="add_mesh">
|
||||||
@ -126,14 +183,14 @@
|
|||||||
</return>
|
</return>
|
||||||
<argument index="0" name="mesh" type="ArrayMesh">
|
<argument index="0" name="mesh" type="ArrayMesh">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="1" name="billboard" type="bool" default="false">
|
<argument index="1" name="material" type="Material" default="null">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="2" name="skeleton" type="SkinReference" default="null">
|
<argument index="2" name="transform" type="Transform3D" default="Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="3" name="material" type="Material" default="null">
|
<argument index="3" name="skeleton" type="SkinReference" default="null">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Adds a mesh to the gizmo with the specified [code]billboard[/code] state, [code]skeleton[/code] and [code]material[/code]. If [code]billboard[/code] is [code]true[/code], the mesh will rotate to always face the camera. Call this function during [method _redraw].
|
Adds a mesh to the gizmo with the specified [code]material[/code], local [code]transform[/code] and [code]skeleton[/code]. Call this method during [method _redraw].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="add_unscaled_billboard">
|
<method name="add_unscaled_billboard">
|
||||||
@ -146,7 +203,7 @@
|
|||||||
<argument index="2" name="modulate" type="Color" default="Color(1, 1, 1, 1)">
|
<argument index="2" name="modulate" type="Color" default="Color(1, 1, 1, 1)">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Adds an unscaled billboard for visualization. Call this function during [method _redraw].
|
Adds an unscaled billboard for visualization and selection. Call this method during [method _redraw].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="clear">
|
<method name="clear">
|
||||||
@ -170,6 +227,22 @@
|
|||||||
Returns the Node3D node associated with this gizmo.
|
Returns the Node3D node associated with this gizmo.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="get_subgizmo_selection" qualifiers="const">
|
||||||
|
<return type="PackedInt32Array">
|
||||||
|
</return>
|
||||||
|
<description>
|
||||||
|
Returns a list of the currently selected subgizmos. Can be used to highlight selected elements during [method _redraw].
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="is_subgizmo_selected" qualifiers="const">
|
||||||
|
<return type="bool">
|
||||||
|
</return>
|
||||||
|
<argument index="0" name="arg0" type="int">
|
||||||
|
</argument>
|
||||||
|
<description>
|
||||||
|
Returns [code]true[/code] if the given subgizmo is currently selected. Can be used to highlight selected elements during [method _redraw].
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
<method name="set_hidden">
|
<method name="set_hidden">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
</return>
|
</return>
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
<return type="bool">
|
<return type="bool">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Override this method to define whether the gizmo can be hidden or not. Returns [code]true[/code] if not overridden.
|
Override this method to define whether the gizmos handled by this plugin can be hidden or not. Returns [code]true[/code] if not overridden.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="_commit_handle" qualifiers="virtual">
|
<method name="_commit_handle" qualifiers="virtual">
|
||||||
@ -22,14 +22,31 @@
|
|||||||
</return>
|
</return>
|
||||||
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="1" name="index" type="int">
|
<argument index="1" name="id" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="2" name="restore" type="Variant">
|
<argument index="2" name="restore" type="Variant">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="3" name="cancel" type="bool" default="false">
|
<argument index="3" name="cancel" type="bool" default="false">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Override this method to commit gizmo handles. Called for this plugin's active gizmos.
|
Override this method to commit a handle being edited (handles must have been previously added by [method EditorNode3DGizmo.add_handles] during [method _redraw]). This usually means creating an [UndoRedo] action for the change, using the current handle value as "do" and the [code]restore[/code] argument as "undo".
|
||||||
|
If the [code]cancel[/code] argument is [code]true[/code], the [code]restore[/code] value should be directly set, without any [UndoRedo] action. Called for this plugin's active gizmos.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="_commit_subgizmos" qualifiers="virtual">
|
||||||
|
<return type="void">
|
||||||
|
</return>
|
||||||
|
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
||||||
|
</argument>
|
||||||
|
<argument index="1" name="ids" type="PackedInt32Array">
|
||||||
|
</argument>
|
||||||
|
<argument index="2" name="restore" type="Array">
|
||||||
|
</argument>
|
||||||
|
<argument index="3" name="cancel" type="bool" default="false">
|
||||||
|
</argument>
|
||||||
|
<description>
|
||||||
|
Override this method to commit a group of subgizmos being edited (see [method _subgizmos_intersect_ray] and [method _subgizmos_intersect_frustum]). This usually means creating an [UndoRedo] action for the change, using the current transforms as "do" and the [code]restore[/code] transforms as "undo".
|
||||||
|
If the [code]cancel[/code] argument is [code]true[/code], the [code]restore[/code] transforms should be directly set, without any [UndoRedo] action. Called for this plugin's active gizmos.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="_create_gizmo" qualifiers="virtual">
|
<method name="_create_gizmo" qualifiers="virtual">
|
||||||
@ -53,7 +70,7 @@
|
|||||||
</return>
|
</return>
|
||||||
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="1" name="index" type="int">
|
<argument index="1" name="id" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Override this method to provide gizmo's handle names. Called for this plugin's active gizmos.
|
Override this method to provide gizmo's handle names. Called for this plugin's active gizmos.
|
||||||
@ -64,18 +81,29 @@
|
|||||||
</return>
|
</return>
|
||||||
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="1" name="index" type="int">
|
<argument index="1" name="id" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Gets actual value of a handle from gizmo. Called for this plugin's active gizmos.
|
Override this method to return the current value of a handle. This value will be requested at the start of an edit and used as the [code]restore[/code] argument in [method _commit_handle]. Called for this plugin's active gizmos.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="_get_priority" qualifiers="virtual">
|
<method name="_get_priority" qualifiers="virtual">
|
||||||
<return type="int">
|
<return type="int">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Override this method to set the gizmo's priority. Higher values correspond to higher priority. If a gizmo with higher priority conflicts with another gizmo, only the gizmo with higher priority will be used.
|
Override this method to set the gizmo's priority. Gizmos with higher priority will have precedence when processing inputs like handles or subgizmos selection.
|
||||||
All built-in editor gizmos return a priority of [code]-1[/code]. If not overridden, this method will return [code]0[/code], which means custom gizmos will automatically override built-in gizmos.
|
All built-in editor gizmos return a priority of [code]-1[/code]. If not overridden, this method will return [code]0[/code], which means custom gizmos will automatically get higher priority than built-in gizmos.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="_get_subgizmo_transform" qualifiers="virtual">
|
||||||
|
<return type="Transform3D">
|
||||||
|
</return>
|
||||||
|
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
||||||
|
</argument>
|
||||||
|
<argument index="1" name="id" type="int">
|
||||||
|
</argument>
|
||||||
|
<description>
|
||||||
|
Override this method to return the current transform of a subgizmo. This transform will be requested at the start of an edit and used in the [code]restore[/code] argument in [method _commit_subgizmos]. Called for this plugin's active gizmos.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="_has_gizmo" qualifiers="virtual">
|
<method name="_has_gizmo" qualifiers="virtual">
|
||||||
@ -92,10 +120,10 @@
|
|||||||
</return>
|
</return>
|
||||||
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="1" name="index" type="int">
|
<argument index="1" name="id" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Gets whether a handle is highlighted or not. Called for this plugin's active gizmos.
|
Override this method to return [code]true[/code] whenever to given handle should be highlighted in the editor. Called for this plugin's active gizmos.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="_is_selectable_when_hidden" qualifiers="virtual">
|
<method name="_is_selectable_when_hidden" qualifiers="virtual">
|
||||||
@ -111,7 +139,7 @@
|
|||||||
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Callback to redraw the provided gizmo. Called for this plugin's active gizmos.
|
Override this method to add all the gizmo elements whenever a gizmo update is requested. It's common to call [method EditorNode3DGizmo.clear] at the beginning of this method and then add visual elements depending on the node's properties.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="_set_handle" qualifiers="virtual">
|
<method name="_set_handle" qualifiers="virtual">
|
||||||
@ -119,14 +147,53 @@
|
|||||||
</return>
|
</return>
|
||||||
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="1" name="index" type="int">
|
<argument index="1" name="id" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="2" name="camera" type="Camera3D">
|
<argument index="2" name="camera" type="Camera3D">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="3" name="point" type="Vector2">
|
<argument index="3" name="point" type="Vector2">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Update the value of a handle after it has been updated. Called for this plugin's active gizmos.
|
Override this method to update the node's properties when the user drags a gizmo handle (previously added with [method EditorNode3DGizmo.add_handles]). The provided [code]point[/code] is the mouse position in screen coordinates and the [code]camera[/code] can be used to convert it to raycasts. Called for this plugin's active gizmos.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="_set_subgizmo_transform" qualifiers="virtual">
|
||||||
|
<return type="void">
|
||||||
|
</return>
|
||||||
|
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
||||||
|
</argument>
|
||||||
|
<argument index="1" name="id" type="int">
|
||||||
|
</argument>
|
||||||
|
<argument index="2" name="transform" type="Transform3D">
|
||||||
|
</argument>
|
||||||
|
<description>
|
||||||
|
Override this method to update the node properties during subgizmo editing (see [method _subgizmos_intersect_ray] and [method _subgizmos_intersect_frustum]). The [code]transform[/code] is given in the Node3D's local coordinate system. Called for this plugin's active gizmos.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="_subgizmos_intersect_frustum" qualifiers="virtual">
|
||||||
|
<return type="PackedInt32Array">
|
||||||
|
</return>
|
||||||
|
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
||||||
|
</argument>
|
||||||
|
<argument index="1" name="camera" type="Camera3D">
|
||||||
|
</argument>
|
||||||
|
<argument index="2" name="frustum" type="Array">
|
||||||
|
</argument>
|
||||||
|
<description>
|
||||||
|
Override this method to allow selecting subgizmos using mouse drag box selection. Given a [code]camera[/code] and a [code]frustum[/code], this method should return which subgizmos are contained within the frustum. The [code]frustum[/code] argument consists of an [code]Array[/code] with all the [code]Plane[/code]s that make up the selection frustum. The returned value should contain a list of unique subgizmo identifiers, these identifiers can have any non-negative value and will be used in other virtual methods like [method _get_subgizmo_transform] or [method _commit_subgizmos]. Called for this plugin's active gizmos.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="_subgizmos_intersect_ray" qualifiers="virtual">
|
||||||
|
<return type="int">
|
||||||
|
</return>
|
||||||
|
<argument index="0" name="gizmo" type="EditorNode3DGizmo">
|
||||||
|
</argument>
|
||||||
|
<argument index="1" name="camera" type="Camera3D">
|
||||||
|
</argument>
|
||||||
|
<argument index="2" name="point" type="Vector2">
|
||||||
|
</argument>
|
||||||
|
<description>
|
||||||
|
Override this method to allow selecting subgizmos using mouse clicks. Given a [code]camera[/code] and a [code]point[/code] in screen coordinates, this method should return which subgizmo should be selected. The returned value should be a unique subgizmo identifier, which can have any non-negative value and will be used in other virtual methods like [method _get_subgizmo_transform] or [method _commit_subgizmos]. Called for this plugin's active gizmos.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="add_material">
|
<method name="add_material">
|
||||||
|
@ -13,6 +13,29 @@
|
|||||||
<link title="All 3D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/3d</link>
|
<link title="All 3D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/3d</link>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<methods>
|
<methods>
|
||||||
|
<method name="add_gizmo">
|
||||||
|
<return type="void">
|
||||||
|
</return>
|
||||||
|
<argument index="0" name="gizmo" type="Node3DGizmo">
|
||||||
|
</argument>
|
||||||
|
<description>
|
||||||
|
Attach a gizmo to this [code]Node3D[/code].
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="clear_gizmos">
|
||||||
|
<return type="void">
|
||||||
|
</return>
|
||||||
|
<description>
|
||||||
|
Clear all gizmos attached to this [code]Node3D[/code].
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
|
<method name="clear_subgizmo_selection">
|
||||||
|
<return type="void">
|
||||||
|
</return>
|
||||||
|
<description>
|
||||||
|
Clears subgizmo selection for this node in the editor. Useful when subgizmo IDs become invalid after a property change.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
<method name="force_update_transform">
|
<method name="force_update_transform">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
</return>
|
</return>
|
||||||
@ -20,6 +43,13 @@
|
|||||||
Forces the transform to update. Transform changes in physics are not instant for performance reasons. Transforms are accumulated and then set. Use this if you need an up-to-date transform when doing physics operations.
|
Forces the transform to update. Transform changes in physics are not instant for performance reasons. Transforms are accumulated and then set. Use this if you need an up-to-date transform when doing physics operations.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="get_gizmos" qualifiers="const">
|
||||||
|
<return type="Array">
|
||||||
|
</return>
|
||||||
|
<description>
|
||||||
|
Returns all the gizmos attached to this [code]Node3D[/code].
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
<method name="get_parent_node_3d" qualifiers="const">
|
<method name="get_parent_node_3d" qualifiers="const">
|
||||||
<return type="Node3D">
|
<return type="Node3D">
|
||||||
</return>
|
</return>
|
||||||
@ -276,18 +306,15 @@
|
|||||||
Changes the node's position by the given offset [Vector3] in local space.
|
Changes the node's position by the given offset [Vector3] in local space.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="update_gizmo">
|
<method name="update_gizmos">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Updates the [Node3DGizmo] of this node.
|
Updates all the [Node3DGizmo]s attached to this node.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
</methods>
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
<member name="gizmo" type="Node3DGizmo" setter="set_gizmo" getter="get_gizmo">
|
|
||||||
The [Node3DGizmo] for this node. Used for example in [EditorNode3DGizmo] as custom visualization and editing handles in Editor.
|
|
||||||
</member>
|
|
||||||
<member name="global_transform" type="Transform3D" setter="set_global_transform" getter="get_global_transform">
|
<member name="global_transform" type="Transform3D" setter="set_global_transform" getter="get_global_transform">
|
||||||
World3D space (global) [Transform3D] of this node.
|
World3D space (global) [Transform3D] of this node.
|
||||||
</member>
|
</member>
|
||||||
@ -324,7 +351,7 @@
|
|||||||
<constants>
|
<constants>
|
||||||
<constant name="NOTIFICATION_TRANSFORM_CHANGED" value="2000">
|
<constant name="NOTIFICATION_TRANSFORM_CHANGED" value="2000">
|
||||||
Node3D nodes receives this notification when their global transform changes. This means that either the current or a parent node changed its transform.
|
Node3D nodes receives this notification when their global transform changes. This means that either the current or a parent node changed its transform.
|
||||||
In order for [constant NOTIFICATION_TRANSFORM_CHANGED] to work, users first need to ask for it, with [method set_notify_transform]. The notification is also sent if the node is in the editor context and it has a valid gizmo.
|
In order for [constant NOTIFICATION_TRANSFORM_CHANGED] to work, users first need to ask for it, with [method set_notify_transform]. The notification is also sent if the node is in the editor context and it has at least one valid gizmo.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="NOTIFICATION_ENTER_WORLD" value="41">
|
<constant name="NOTIFICATION_ENTER_WORLD" value="41">
|
||||||
Node3D nodes receives this notification when they are registered to new [World3D] resource.
|
Node3D nodes receives this notification when they are registered to new [World3D] resource.
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -28,13 +28,156 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#ifndef SPATIAL_EDITOR_GIZMOS_H
|
#ifndef NODE_3D_EDITOR_GIZMOS_H
|
||||||
#define SPATIAL_EDITOR_GIZMOS_H
|
#define NODE_3D_EDITOR_GIZMOS_H
|
||||||
|
|
||||||
#include "editor/plugins/node_3d_editor_plugin.h"
|
#include "core/templates/ordered_hash_map.h"
|
||||||
#include "scene/3d/camera_3d.h"
|
#include "scene/3d/node_3d.h"
|
||||||
|
#include "scene/3d/skeleton_3d.h"
|
||||||
|
|
||||||
class Camera3D;
|
class Camera3D;
|
||||||
|
class Timer;
|
||||||
|
class EditorNode3DGizmoPlugin;
|
||||||
|
|
||||||
|
class EditorNode3DGizmo : public Node3DGizmo {
|
||||||
|
GDCLASS(EditorNode3DGizmo, Node3DGizmo);
|
||||||
|
|
||||||
|
struct Instance {
|
||||||
|
RID instance;
|
||||||
|
Ref<ArrayMesh> mesh;
|
||||||
|
Ref<Material> material;
|
||||||
|
Ref<SkinReference> skin_reference;
|
||||||
|
bool extra_margin = false;
|
||||||
|
Transform3D xform;
|
||||||
|
|
||||||
|
void create_instance(Node3D *p_base, bool p_hidden = false);
|
||||||
|
};
|
||||||
|
|
||||||
|
bool selected;
|
||||||
|
|
||||||
|
Vector<Vector3> collision_segments;
|
||||||
|
Ref<TriangleMesh> collision_mesh;
|
||||||
|
|
||||||
|
Vector<Vector3> handles;
|
||||||
|
Vector<int> handle_ids;
|
||||||
|
Vector<Vector3> secondary_handles;
|
||||||
|
Vector<int> secondary_handle_ids;
|
||||||
|
|
||||||
|
float selectable_icon_size;
|
||||||
|
bool billboard_handle;
|
||||||
|
|
||||||
|
bool valid;
|
||||||
|
bool hidden;
|
||||||
|
Vector<Instance> instances;
|
||||||
|
Node3D *spatial_node;
|
||||||
|
|
||||||
|
void _set_spatial_node(Node *p_node) { set_spatial_node(Object::cast_to<Node3D>(p_node)); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods();
|
||||||
|
|
||||||
|
EditorNode3DGizmoPlugin *gizmo_plugin;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void add_lines(const Vector<Vector3> &p_lines, const Ref<Material> &p_material, bool p_billboard = false, const Color &p_modulate = Color(1, 1, 1));
|
||||||
|
void add_vertices(const Vector<Vector3> &p_vertices, const Ref<Material> &p_material, Mesh::PrimitiveType p_primitive_type, bool p_billboard = false, const Color &p_modulate = Color(1, 1, 1));
|
||||||
|
void add_mesh(const Ref<ArrayMesh> &p_mesh, const Ref<Material> &p_material = Ref<Material>(), const Transform3D &p_xform = Transform3D(), const Ref<SkinReference> &p_skin_reference = Ref<SkinReference>());
|
||||||
|
void add_collision_segments(const Vector<Vector3> &p_lines);
|
||||||
|
void add_collision_triangles(const Ref<TriangleMesh> &p_tmesh);
|
||||||
|
void add_unscaled_billboard(const Ref<Material> &p_material, float p_scale = 1, const Color &p_modulate = Color(1, 1, 1));
|
||||||
|
void add_handles(const Vector<Vector3> &p_handles, const Ref<Material> &p_material, const Vector<int> &p_ids = Vector<int>(), bool p_billboard = false, bool p_secondary = false);
|
||||||
|
void add_solid_box(Ref<Material> &p_material, Vector3 p_size, Vector3 p_position = Vector3(), const Transform3D &p_xform = Transform3D());
|
||||||
|
|
||||||
|
virtual bool is_handle_highlighted(int p_id) const;
|
||||||
|
virtual String get_handle_name(int p_id) const;
|
||||||
|
virtual Variant get_handle_value(int p_id) const;
|
||||||
|
virtual void set_handle(int p_id, Camera3D *p_camera, const Point2 &p_point) const;
|
||||||
|
virtual void commit_handle(int p_id, const Variant &p_restore, bool p_cancel = false) const;
|
||||||
|
|
||||||
|
virtual int subgizmos_intersect_ray(Camera3D *p_camera, const Vector2 &p_point) const;
|
||||||
|
virtual Vector<int> subgizmos_intersect_frustum(const Camera3D *p_camera, const Vector<Plane> &p_frustum) const;
|
||||||
|
virtual Transform3D get_subgizmo_transform(int p_id) const;
|
||||||
|
virtual void set_subgizmo_transform(int p_id, Transform3D p_transform) const;
|
||||||
|
virtual void commit_subgizmos(const Vector<int> &p_ids, const Vector<Transform3D> &p_restore, bool p_cancel = false) const;
|
||||||
|
|
||||||
|
void set_selected(bool p_selected) { selected = p_selected; }
|
||||||
|
bool is_selected() const { return selected; }
|
||||||
|
|
||||||
|
void set_spatial_node(Node3D *p_node);
|
||||||
|
Node3D *get_spatial_node() const { return spatial_node; }
|
||||||
|
Ref<EditorNode3DGizmoPlugin> get_plugin() const { return gizmo_plugin; }
|
||||||
|
bool intersect_frustum(const Camera3D *p_camera, const Vector<Plane> &p_frustum);
|
||||||
|
void handles_intersect_ray(Camera3D *p_camera, const Vector2 &p_point, bool p_shift_pressed, int &r_id);
|
||||||
|
bool intersect_ray(Camera3D *p_camera, const Point2 &p_point, Vector3 &r_pos, Vector3 &r_normal);
|
||||||
|
bool is_subgizmo_selected(int p_id) const;
|
||||||
|
Vector<int> get_subgizmo_selection() const;
|
||||||
|
|
||||||
|
virtual void clear() override;
|
||||||
|
virtual void create() override;
|
||||||
|
virtual void transform() override;
|
||||||
|
virtual void redraw() override;
|
||||||
|
virtual void free() override;
|
||||||
|
|
||||||
|
virtual bool is_editable() const;
|
||||||
|
|
||||||
|
void set_hidden(bool p_hidden);
|
||||||
|
void set_plugin(EditorNode3DGizmoPlugin *p_plugin);
|
||||||
|
|
||||||
|
EditorNode3DGizmo();
|
||||||
|
~EditorNode3DGizmo();
|
||||||
|
};
|
||||||
|
|
||||||
|
class EditorNode3DGizmoPlugin : public Resource {
|
||||||
|
GDCLASS(EditorNode3DGizmoPlugin, Resource);
|
||||||
|
|
||||||
|
public:
|
||||||
|
static const int VISIBLE = 0;
|
||||||
|
static const int HIDDEN = 1;
|
||||||
|
static const int ON_TOP = 2;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int current_state;
|
||||||
|
List<EditorNode3DGizmo *> current_gizmos;
|
||||||
|
HashMap<String, Vector<Ref<StandardMaterial3D>>> materials;
|
||||||
|
|
||||||
|
static void _bind_methods();
|
||||||
|
virtual bool has_gizmo(Node3D *p_spatial);
|
||||||
|
virtual Ref<EditorNode3DGizmo> create_gizmo(Node3D *p_spatial);
|
||||||
|
|
||||||
|
public:
|
||||||
|
void create_material(const String &p_name, const Color &p_color, bool p_billboard = false, bool p_on_top = false, bool p_use_vertex_color = false);
|
||||||
|
void create_icon_material(const String &p_name, const Ref<Texture2D> &p_texture, bool p_on_top = false, const Color &p_albedo = Color(1, 1, 1, 1));
|
||||||
|
void create_handle_material(const String &p_name, bool p_billboard = false, const Ref<Texture2D> &p_texture = nullptr);
|
||||||
|
void add_material(const String &p_name, Ref<StandardMaterial3D> p_material);
|
||||||
|
|
||||||
|
Ref<StandardMaterial3D> get_material(const String &p_name, const Ref<EditorNode3DGizmo> &p_gizmo = Ref<EditorNode3DGizmo>());
|
||||||
|
|
||||||
|
virtual String get_gizmo_name() const;
|
||||||
|
virtual int get_priority() const;
|
||||||
|
virtual bool can_be_hidden() const;
|
||||||
|
virtual bool is_selectable_when_hidden() const;
|
||||||
|
|
||||||
|
virtual void redraw(EditorNode3DGizmo *p_gizmo);
|
||||||
|
virtual bool is_handle_highlighted(const EditorNode3DGizmo *p_gizmo, int p_id) const;
|
||||||
|
virtual String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const;
|
||||||
|
virtual Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const;
|
||||||
|
virtual void set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const;
|
||||||
|
virtual void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel = false) const;
|
||||||
|
|
||||||
|
virtual int subgizmos_intersect_ray(const EditorNode3DGizmo *p_gizmo, Camera3D *p_camera, const Vector2 &p_point) const;
|
||||||
|
virtual Vector<int> subgizmos_intersect_frustum(const EditorNode3DGizmo *p_gizmo, const Camera3D *p_camera, const Vector<Plane> &p_frustum) const;
|
||||||
|
virtual Transform3D get_subgizmo_transform(const EditorNode3DGizmo *p_gizmo, int p_id) const;
|
||||||
|
virtual void set_subgizmo_transform(const EditorNode3DGizmo *p_gizmo, int p_id, Transform3D p_transform) const;
|
||||||
|
virtual void commit_subgizmos(const EditorNode3DGizmo *p_gizmo, const Vector<int> &p_ids, const Vector<Transform3D> &p_restore, bool p_cancel = false) const;
|
||||||
|
|
||||||
|
Ref<EditorNode3DGizmo> get_gizmo(Node3D *p_spatial);
|
||||||
|
void set_state(int p_state);
|
||||||
|
int get_state() const;
|
||||||
|
void unregister_gizmo(EditorNode3DGizmo *p_gizmo);
|
||||||
|
|
||||||
|
EditorNode3DGizmoPlugin();
|
||||||
|
virtual ~EditorNode3DGizmoPlugin();
|
||||||
|
};
|
||||||
|
|
||||||
class Light3DGizmoPlugin : public EditorNode3DGizmoPlugin {
|
class Light3DGizmoPlugin : public EditorNode3DGizmoPlugin {
|
||||||
GDCLASS(Light3DGizmoPlugin, EditorNode3DGizmoPlugin);
|
GDCLASS(Light3DGizmoPlugin, EditorNode3DGizmoPlugin);
|
||||||
@ -44,10 +187,10 @@ public:
|
|||||||
String get_gizmo_name() const override;
|
String get_gizmo_name() const override;
|
||||||
int get_priority() const override;
|
int get_priority() const override;
|
||||||
|
|
||||||
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
void set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point) override;
|
void set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const override;
|
||||||
void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel = false) override;
|
void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel = false) const override;
|
||||||
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
||||||
|
|
||||||
Light3DGizmoPlugin();
|
Light3DGizmoPlugin();
|
||||||
@ -61,10 +204,10 @@ public:
|
|||||||
String get_gizmo_name() const override;
|
String get_gizmo_name() const override;
|
||||||
int get_priority() const override;
|
int get_priority() const override;
|
||||||
|
|
||||||
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
void set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point) override;
|
void set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const override;
|
||||||
void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel = false) override;
|
void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel = false) const override;
|
||||||
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
||||||
|
|
||||||
AudioStreamPlayer3DGizmoPlugin();
|
AudioStreamPlayer3DGizmoPlugin();
|
||||||
@ -78,10 +221,10 @@ public:
|
|||||||
String get_gizmo_name() const override;
|
String get_gizmo_name() const override;
|
||||||
int get_priority() const override;
|
int get_priority() const override;
|
||||||
|
|
||||||
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
void set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point) override;
|
void set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const override;
|
||||||
void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel = false) override;
|
void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel = false) const override;
|
||||||
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
||||||
|
|
||||||
Camera3DGizmoPlugin();
|
Camera3DGizmoPlugin();
|
||||||
@ -210,10 +353,10 @@ public:
|
|||||||
bool is_selectable_when_hidden() const override;
|
bool is_selectable_when_hidden() const override;
|
||||||
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
||||||
|
|
||||||
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel) override;
|
void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel = false) const override;
|
||||||
bool is_handle_highlighted(const EditorNode3DGizmo *p_gizmo, int idx) const override;
|
bool is_handle_highlighted(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
|
|
||||||
SoftBody3DGizmoPlugin();
|
SoftBody3DGizmoPlugin();
|
||||||
};
|
};
|
||||||
@ -227,10 +370,10 @@ public:
|
|||||||
int get_priority() const override;
|
int get_priority() const override;
|
||||||
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
||||||
|
|
||||||
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
void set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point) override;
|
void set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const override;
|
||||||
void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel = false) override;
|
void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel = false) const override;
|
||||||
|
|
||||||
VisibleOnScreenNotifier3DGizmoPlugin();
|
VisibleOnScreenNotifier3DGizmoPlugin();
|
||||||
};
|
};
|
||||||
@ -257,10 +400,10 @@ public:
|
|||||||
bool is_selectable_when_hidden() const override;
|
bool is_selectable_when_hidden() const override;
|
||||||
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
||||||
|
|
||||||
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
void set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point) override;
|
void set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const override;
|
||||||
void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel = false) override;
|
void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel = false) const override;
|
||||||
|
|
||||||
GPUParticles3DGizmoPlugin();
|
GPUParticles3DGizmoPlugin();
|
||||||
};
|
};
|
||||||
@ -274,10 +417,10 @@ public:
|
|||||||
int get_priority() const override;
|
int get_priority() const override;
|
||||||
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
||||||
|
|
||||||
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
void set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point) override;
|
void set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const override;
|
||||||
void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel = false) override;
|
void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel = false) const override;
|
||||||
|
|
||||||
GPUParticlesCollision3DGizmoPlugin();
|
GPUParticlesCollision3DGizmoPlugin();
|
||||||
};
|
};
|
||||||
@ -291,10 +434,10 @@ public:
|
|||||||
int get_priority() const override;
|
int get_priority() const override;
|
||||||
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
||||||
|
|
||||||
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
void set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point) override;
|
void set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const override;
|
||||||
void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel = false) override;
|
void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel = false) const override;
|
||||||
|
|
||||||
ReflectionProbeGizmoPlugin();
|
ReflectionProbeGizmoPlugin();
|
||||||
};
|
};
|
||||||
@ -308,10 +451,10 @@ public:
|
|||||||
int get_priority() const override;
|
int get_priority() const override;
|
||||||
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
||||||
|
|
||||||
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
void set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point) override;
|
void set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const override;
|
||||||
void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel = false) override;
|
void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel = false) const override;
|
||||||
|
|
||||||
DecalGizmoPlugin();
|
DecalGizmoPlugin();
|
||||||
};
|
};
|
||||||
@ -325,10 +468,10 @@ public:
|
|||||||
int get_priority() const override;
|
int get_priority() const override;
|
||||||
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
||||||
|
|
||||||
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
void set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point) override;
|
void set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const override;
|
||||||
void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel = false) override;
|
void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel = false) const override;
|
||||||
|
|
||||||
VoxelGIGizmoPlugin();
|
VoxelGIGizmoPlugin();
|
||||||
};
|
};
|
||||||
@ -342,10 +485,10 @@ public:
|
|||||||
int get_priority() const override;
|
int get_priority() const override;
|
||||||
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
||||||
|
|
||||||
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
void set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point) override;
|
void set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const override;
|
||||||
void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel = false) override;
|
void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel = false) const override;
|
||||||
|
|
||||||
LightmapGIGizmoPlugin();
|
LightmapGIGizmoPlugin();
|
||||||
};
|
};
|
||||||
@ -359,10 +502,10 @@ public:
|
|||||||
int get_priority() const override;
|
int get_priority() const override;
|
||||||
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
||||||
|
|
||||||
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
void set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point) override;
|
void set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const override;
|
||||||
void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel = false) override;
|
void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel = false) const override;
|
||||||
|
|
||||||
LightmapProbeGizmoPlugin();
|
LightmapProbeGizmoPlugin();
|
||||||
};
|
};
|
||||||
@ -388,10 +531,10 @@ public:
|
|||||||
int get_priority() const override;
|
int get_priority() const override;
|
||||||
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
||||||
|
|
||||||
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
void set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point) override;
|
void set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const override;
|
||||||
void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel = false) override;
|
void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel = false) const override;
|
||||||
|
|
||||||
CollisionShape3DGizmoPlugin();
|
CollisionShape3DGizmoPlugin();
|
||||||
};
|
};
|
||||||
@ -489,4 +632,4 @@ public:
|
|||||||
Joint3DGizmoPlugin();
|
Joint3DGizmoPlugin();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SPATIAL_EDITOR_GIZMOS_H
|
#endif // NODE_3D_EDITOR_GIZMOS_H
|
File diff suppressed because it is too large
Load Diff
@ -34,6 +34,7 @@
|
|||||||
#include "editor/editor_node.h"
|
#include "editor/editor_node.h"
|
||||||
#include "editor/editor_plugin.h"
|
#include "editor/editor_plugin.h"
|
||||||
#include "editor/editor_scale.h"
|
#include "editor/editor_scale.h"
|
||||||
|
#include "editor/plugins/node_3d_editor_gizmos.h"
|
||||||
#include "scene/3d/light_3d.h"
|
#include "scene/3d/light_3d.h"
|
||||||
#include "scene/3d/visual_instance_3d.h"
|
#include "scene/3d/visual_instance_3d.h"
|
||||||
#include "scene/3d/world_environment.h"
|
#include "scene/3d/world_environment.h"
|
||||||
@ -43,96 +44,10 @@
|
|||||||
|
|
||||||
class Camera3D;
|
class Camera3D;
|
||||||
class Node3DEditor;
|
class Node3DEditor;
|
||||||
class EditorNode3DGizmoPlugin;
|
|
||||||
class Node3DEditorViewport;
|
class Node3DEditorViewport;
|
||||||
class SubViewportContainer;
|
class SubViewportContainer;
|
||||||
|
class DirectionalLight3D;
|
||||||
class EditorNode3DGizmo : public Node3DGizmo {
|
class WorldEnvironment;
|
||||||
GDCLASS(EditorNode3DGizmo, Node3DGizmo);
|
|
||||||
|
|
||||||
bool selected;
|
|
||||||
bool instantiated;
|
|
||||||
|
|
||||||
public:
|
|
||||||
void set_selected(bool p_selected) { selected = p_selected; }
|
|
||||||
bool is_selected() const { return selected; }
|
|
||||||
|
|
||||||
struct Instance {
|
|
||||||
RID instance;
|
|
||||||
Ref<ArrayMesh> mesh;
|
|
||||||
Ref<Material> material;
|
|
||||||
Ref<SkinReference> skin_reference;
|
|
||||||
RID skeleton;
|
|
||||||
bool billboard = false;
|
|
||||||
bool unscaled = false;
|
|
||||||
bool can_intersect = false;
|
|
||||||
bool extra_margin = false;
|
|
||||||
|
|
||||||
void create_instance(Node3D *p_base, bool p_hidden = false);
|
|
||||||
};
|
|
||||||
|
|
||||||
Vector<Vector3> collision_segments;
|
|
||||||
Ref<TriangleMesh> collision_mesh;
|
|
||||||
|
|
||||||
struct Handle {
|
|
||||||
Vector3 pos;
|
|
||||||
bool billboard = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
Vector<Vector3> handles;
|
|
||||||
Vector<Vector3> secondary_handles;
|
|
||||||
float selectable_icon_size;
|
|
||||||
bool billboard_handle;
|
|
||||||
|
|
||||||
bool valid;
|
|
||||||
bool hidden;
|
|
||||||
Node3D *base;
|
|
||||||
Vector<Instance> instances;
|
|
||||||
Node3D *spatial_node;
|
|
||||||
EditorNode3DGizmoPlugin *gizmo_plugin;
|
|
||||||
|
|
||||||
void _set_spatial_node(Node *p_node) { set_spatial_node(Object::cast_to<Node3D>(p_node)); }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
public:
|
|
||||||
void add_lines(const Vector<Vector3> &p_lines, const Ref<Material> &p_material, bool p_billboard = false, const Color &p_modulate = Color(1, 1, 1));
|
|
||||||
void add_vertices(const Vector<Vector3> &p_vertices, const Ref<Material> &p_material, Mesh::PrimitiveType p_primitive_type, bool p_billboard = false, const Color &p_modulate = Color(1, 1, 1));
|
|
||||||
void add_mesh(const Ref<ArrayMesh> &p_mesh, bool p_billboard = false, const Ref<SkinReference> &p_skin_reference = Ref<SkinReference>(), const Ref<Material> &p_material = Ref<Material>());
|
|
||||||
void add_collision_segments(const Vector<Vector3> &p_lines);
|
|
||||||
void add_collision_triangles(const Ref<TriangleMesh> &p_tmesh);
|
|
||||||
void add_unscaled_billboard(const Ref<Material> &p_material, float p_scale = 1, const Color &p_modulate = Color(1, 1, 1));
|
|
||||||
void add_handles(const Vector<Vector3> &p_handles, const Ref<Material> &p_material, bool p_billboard = false, bool p_secondary = false);
|
|
||||||
void add_solid_box(Ref<Material> &p_material, Vector3 p_size, Vector3 p_position = Vector3());
|
|
||||||
|
|
||||||
virtual bool is_handle_highlighted(int p_idx) const;
|
|
||||||
virtual String get_handle_name(int p_idx) const;
|
|
||||||
virtual Variant get_handle_value(int p_idx);
|
|
||||||
virtual void set_handle(int p_idx, Camera3D *p_camera, const Point2 &p_point);
|
|
||||||
virtual void commit_handle(int p_idx, const Variant &p_restore, bool p_cancel = false);
|
|
||||||
|
|
||||||
void set_spatial_node(Node3D *p_node);
|
|
||||||
Node3D *get_spatial_node() const { return spatial_node; }
|
|
||||||
Ref<EditorNode3DGizmoPlugin> get_plugin() const { return gizmo_plugin; }
|
|
||||||
Vector3 get_handle_pos(int p_idx) const;
|
|
||||||
bool intersect_frustum(const Camera3D *p_camera, const Vector<Plane> &p_frustum);
|
|
||||||
bool intersect_ray(Camera3D *p_camera, const Point2 &p_point, Vector3 &r_pos, Vector3 &r_normal, int *r_gizmo_handle = nullptr, bool p_sec_first = false);
|
|
||||||
|
|
||||||
virtual void clear() override;
|
|
||||||
virtual void create() override;
|
|
||||||
virtual void transform() override;
|
|
||||||
virtual void redraw() override;
|
|
||||||
virtual void free() override;
|
|
||||||
|
|
||||||
virtual bool is_editable() const;
|
|
||||||
|
|
||||||
void set_hidden(bool p_hidden);
|
|
||||||
void set_plugin(EditorNode3DGizmoPlugin *p_plugin);
|
|
||||||
|
|
||||||
EditorNode3DGizmo();
|
|
||||||
~EditorNode3DGizmo();
|
|
||||||
};
|
|
||||||
|
|
||||||
class ViewportRotationControl : public Control {
|
class ViewportRotationControl : public Control {
|
||||||
GDCLASS(ViewportRotationControl, Control);
|
GDCLASS(ViewportRotationControl, Control);
|
||||||
@ -307,17 +222,15 @@ private:
|
|||||||
struct _RayResult {
|
struct _RayResult {
|
||||||
Node3D *item = nullptr;
|
Node3D *item = nullptr;
|
||||||
float depth = 0;
|
float depth = 0;
|
||||||
int handle = 0;
|
|
||||||
_FORCE_INLINE_ bool operator<(const _RayResult &p_rr) const { return depth < p_rr.depth; }
|
_FORCE_INLINE_ bool operator<(const _RayResult &p_rr) const { return depth < p_rr.depth; }
|
||||||
};
|
};
|
||||||
|
|
||||||
void _update_name();
|
void _update_name();
|
||||||
void _compute_edit(const Point2 &p_point);
|
void _compute_edit(const Point2 &p_point);
|
||||||
void _clear_selected();
|
void _clear_selected();
|
||||||
void _select_clicked(bool p_append, bool p_single, bool p_allow_locked = false);
|
void _select_clicked(bool p_allow_locked);
|
||||||
void _select(Node *p_node, bool p_append, bool p_single);
|
ObjectID _select_ray(const Point2 &p_pos);
|
||||||
ObjectID _select_ray(const Point2 &p_pos, bool p_append, bool &r_includes_current, int *r_gizmo_handle = nullptr, bool p_alt_select = false);
|
void _find_items_at_pos(const Point2 &p_pos, Vector<_RayResult> &r_results, bool p_include_locked);
|
||||||
void _find_items_at_pos(const Point2 &p_pos, bool &r_includes_current, Vector<_RayResult> &results, bool p_alt_select = false, bool p_include_locked_nodes = false);
|
|
||||||
Vector3 _get_ray_pos(const Vector2 &p_pos) const;
|
Vector3 _get_ray_pos(const Vector2 &p_pos) const;
|
||||||
Vector3 _get_ray(const Vector2 &p_pos) const;
|
Vector3 _get_ray(const Vector2 &p_pos) const;
|
||||||
Point2 _point_to_screen(const Vector3 &p_point);
|
Point2 _point_to_screen(const Vector3 &p_point);
|
||||||
@ -329,7 +242,8 @@ private:
|
|||||||
Vector3 _get_screen_to_space(const Vector3 &p_vector3);
|
Vector3 _get_screen_to_space(const Vector3 &p_vector3);
|
||||||
|
|
||||||
void _select_region();
|
void _select_region();
|
||||||
bool _gizmo_select(const Vector2 &p_screenpos, bool p_highlight_only = false);
|
bool _transform_gizmo_select(const Vector2 &p_screenpos, bool p_highlight_only = false);
|
||||||
|
void _transform_gizmo_apply(Node3D *p_node, const Transform3D &p_transform, bool p_local);
|
||||||
|
|
||||||
void _nav_pan(Ref<InputEventWithModifiers> p_event, const Vector2 &p_relative);
|
void _nav_pan(Ref<InputEventWithModifiers> p_event, const Vector2 &p_relative);
|
||||||
void _nav_zoom(Ref<InputEventWithModifiers> p_event, const Vector2 &p_relative);
|
void _nav_zoom(Ref<InputEventWithModifiers> p_event, const Vector2 &p_relative);
|
||||||
@ -342,7 +256,6 @@ private:
|
|||||||
|
|
||||||
ObjectID clicked;
|
ObjectID clicked;
|
||||||
Vector<_RayResult> selection_results;
|
Vector<_RayResult> selection_results;
|
||||||
bool clicked_includes_current;
|
|
||||||
bool clicked_wants_append;
|
bool clicked_wants_append;
|
||||||
|
|
||||||
PopupMenu *selection_menu;
|
PopupMenu *selection_menu;
|
||||||
@ -383,15 +296,12 @@ private:
|
|||||||
Vector3 click_ray;
|
Vector3 click_ray;
|
||||||
Vector3 click_ray_pos;
|
Vector3 click_ray_pos;
|
||||||
Vector3 center;
|
Vector3 center;
|
||||||
Vector3 orig_gizmo_pos;
|
|
||||||
int edited_gizmo = 0;
|
|
||||||
Point2 mouse_pos;
|
Point2 mouse_pos;
|
||||||
Point2 original_mouse_pos;
|
Point2 original_mouse_pos;
|
||||||
bool snap = false;
|
bool snap = false;
|
||||||
Ref<EditorNode3DGizmo> gizmo;
|
Ref<EditorNode3DGizmo> gizmo;
|
||||||
int gizmo_handle = 0;
|
int gizmo_handle = 0;
|
||||||
Variant gizmo_initial_value;
|
Variant gizmo_initial_value;
|
||||||
Vector3 gizmo_initial_pos;
|
|
||||||
} _edit;
|
} _edit;
|
||||||
|
|
||||||
struct Cursor {
|
struct Cursor {
|
||||||
@ -472,6 +382,8 @@ private:
|
|||||||
|
|
||||||
void _project_settings_changed();
|
void _project_settings_changed();
|
||||||
|
|
||||||
|
Transform3D _compute_transform(TransformMode p_mode, const Transform3D &p_original, const Transform3D &p_original_local, Vector3 p_motion, double p_extra, bool p_local);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
@ -512,6 +424,8 @@ public:
|
|||||||
Node3D *sp;
|
Node3D *sp;
|
||||||
RID sbox_instance;
|
RID sbox_instance;
|
||||||
RID sbox_instance_xray;
|
RID sbox_instance_xray;
|
||||||
|
Ref<EditorNode3DGizmo> gizmo;
|
||||||
|
Map<int, Transform3D> subgizmos; // map ID -> initial transform
|
||||||
|
|
||||||
Node3DEditorSelectedItem() {
|
Node3DEditorSelectedItem() {
|
||||||
sp = nullptr;
|
sp = nullptr;
|
||||||
@ -617,7 +531,9 @@ private:
|
|||||||
Ref<StandardMaterial3D> plane_gizmo_color_hl[3];
|
Ref<StandardMaterial3D> plane_gizmo_color_hl[3];
|
||||||
Ref<ShaderMaterial> rotate_gizmo_color_hl[3];
|
Ref<ShaderMaterial> rotate_gizmo_color_hl[3];
|
||||||
|
|
||||||
int over_gizmo_handle;
|
Ref<Node3DGizmo> current_hover_gizmo;
|
||||||
|
int current_hover_gizmo_handle;
|
||||||
|
|
||||||
float snap_translate_value;
|
float snap_translate_value;
|
||||||
float snap_rotate_value;
|
float snap_rotate_value;
|
||||||
float snap_scale_value;
|
float snap_scale_value;
|
||||||
@ -688,7 +604,6 @@ private:
|
|||||||
LineEdit *snap_translate;
|
LineEdit *snap_translate;
|
||||||
LineEdit *snap_rotate;
|
LineEdit *snap_rotate;
|
||||||
LineEdit *snap_scale;
|
LineEdit *snap_scale;
|
||||||
PanelContainer *menu_panel;
|
|
||||||
|
|
||||||
LineEdit *xform_translate[3];
|
LineEdit *xform_translate[3];
|
||||||
LineEdit *xform_rotate[3];
|
LineEdit *xform_rotate[3];
|
||||||
@ -734,6 +649,7 @@ private:
|
|||||||
Node3D *selected;
|
Node3D *selected;
|
||||||
|
|
||||||
void _request_gizmo(Object *p_obj);
|
void _request_gizmo(Object *p_obj);
|
||||||
|
void _clear_subgizmo_selection(Object *p_obj = nullptr);
|
||||||
|
|
||||||
static Node3DEditor *singleton;
|
static Node3DEditor *singleton;
|
||||||
|
|
||||||
@ -746,8 +662,7 @@ private:
|
|||||||
|
|
||||||
Node3DEditor();
|
Node3DEditor();
|
||||||
|
|
||||||
bool is_any_freelook_active() const;
|
void _selection_changed();
|
||||||
|
|
||||||
void _refresh_menu_icons();
|
void _refresh_menu_icons();
|
||||||
|
|
||||||
// Preview Sun and Environment
|
// Preview Sun and Environment
|
||||||
@ -861,10 +776,16 @@ public:
|
|||||||
VSplitContainer *get_shader_split();
|
VSplitContainer *get_shader_split();
|
||||||
HSplitContainer *get_palette_split();
|
HSplitContainer *get_palette_split();
|
||||||
|
|
||||||
Node3D *get_selected() { return selected; }
|
Node3D *get_single_selected_node() { return selected; }
|
||||||
|
bool is_current_selected_gizmo(const EditorNode3DGizmo *p_gizmo);
|
||||||
|
bool is_subgizmo_selected(int p_id);
|
||||||
|
Vector<int> get_subgizmo_selection();
|
||||||
|
|
||||||
int get_over_gizmo_handle() const { return over_gizmo_handle; }
|
Ref<EditorNode3DGizmo> get_current_hover_gizmo() const { return current_hover_gizmo; }
|
||||||
void set_over_gizmo_handle(int idx) { over_gizmo_handle = idx; }
|
void set_current_hover_gizmo(Ref<EditorNode3DGizmo> p_gizmo) { current_hover_gizmo = p_gizmo; }
|
||||||
|
|
||||||
|
void set_current_hover_gizmo_handle(int p_id) { current_hover_gizmo_handle = p_id; }
|
||||||
|
int get_current_hover_gizmo_handle() const { return current_hover_gizmo_handle; }
|
||||||
|
|
||||||
void set_can_preview(Camera3D *p_preview);
|
void set_can_preview(Camera3D *p_preview);
|
||||||
|
|
||||||
@ -907,50 +828,4 @@ public:
|
|||||||
~Node3DEditorPlugin();
|
~Node3DEditorPlugin();
|
||||||
};
|
};
|
||||||
|
|
||||||
class EditorNode3DGizmoPlugin : public Resource {
|
|
||||||
GDCLASS(EditorNode3DGizmoPlugin, Resource);
|
|
||||||
|
|
||||||
public:
|
|
||||||
static const int VISIBLE = 0;
|
|
||||||
static const int HIDDEN = 1;
|
|
||||||
static const int ON_TOP = 2;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
int current_state;
|
|
||||||
List<EditorNode3DGizmo *> current_gizmos;
|
|
||||||
HashMap<String, Vector<Ref<StandardMaterial3D>>> materials;
|
|
||||||
|
|
||||||
static void _bind_methods();
|
|
||||||
virtual bool has_gizmo(Node3D *p_spatial);
|
|
||||||
virtual Ref<EditorNode3DGizmo> create_gizmo(Node3D *p_spatial);
|
|
||||||
|
|
||||||
public:
|
|
||||||
void create_material(const String &p_name, const Color &p_color, bool p_billboard = false, bool p_on_top = false, bool p_use_vertex_color = false);
|
|
||||||
void create_icon_material(const String &p_name, const Ref<Texture2D> &p_texture, bool p_on_top = false, const Color &p_albedo = Color(1, 1, 1, 1));
|
|
||||||
void create_handle_material(const String &p_name, bool p_billboard = false, const Ref<Texture2D> &p_texture = nullptr);
|
|
||||||
void add_material(const String &p_name, Ref<StandardMaterial3D> p_material);
|
|
||||||
|
|
||||||
Ref<StandardMaterial3D> get_material(const String &p_name, const Ref<EditorNode3DGizmo> &p_gizmo = Ref<EditorNode3DGizmo>());
|
|
||||||
|
|
||||||
virtual String get_gizmo_name() const;
|
|
||||||
virtual int get_priority() const;
|
|
||||||
virtual bool can_be_hidden() const;
|
|
||||||
virtual bool is_selectable_when_hidden() const;
|
|
||||||
|
|
||||||
virtual void redraw(EditorNode3DGizmo *p_gizmo);
|
|
||||||
virtual String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const;
|
|
||||||
virtual Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const;
|
|
||||||
virtual void set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point);
|
|
||||||
virtual void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel = false);
|
|
||||||
virtual bool is_handle_highlighted(const EditorNode3DGizmo *p_gizmo, int p_idx) const;
|
|
||||||
|
|
||||||
Ref<EditorNode3DGizmo> get_gizmo(Node3D *p_spatial);
|
|
||||||
void set_state(int p_state);
|
|
||||||
int get_state() const;
|
|
||||||
void unregister_gizmo(EditorNode3DGizmo *p_gizmo);
|
|
||||||
|
|
||||||
EditorNode3DGizmoPlugin();
|
|
||||||
virtual ~EditorNode3DGizmoPlugin();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // NODE_3D_EDITOR_PLUGIN_H
|
#endif // NODE_3D_EDITOR_PLUGIN_H
|
||||||
|
@ -36,20 +36,20 @@
|
|||||||
#include "node_3d_editor_plugin.h"
|
#include "node_3d_editor_plugin.h"
|
||||||
#include "scene/resources/curve.h"
|
#include "scene/resources/curve.h"
|
||||||
|
|
||||||
String Path3DGizmo::get_handle_name(int p_idx) const {
|
String Path3DGizmo::get_handle_name(int p_id) const {
|
||||||
Ref<Curve3D> c = path->get_curve();
|
Ref<Curve3D> c = path->get_curve();
|
||||||
if (c.is_null()) {
|
if (c.is_null()) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_idx < c->get_point_count()) {
|
if (p_id < c->get_point_count()) {
|
||||||
return TTR("Curve Point #") + itos(p_idx);
|
return TTR("Curve Point #") + itos(p_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
p_idx = p_idx - c->get_point_count() + 1;
|
p_id = p_id - c->get_point_count() + 1;
|
||||||
|
|
||||||
int idx = p_idx / 2;
|
int idx = p_id / 2;
|
||||||
int t = p_idx % 2;
|
int t = p_id % 2;
|
||||||
String n = TTR("Curve Point #") + itos(idx);
|
String n = TTR("Curve Point #") + itos(idx);
|
||||||
if (t == 0) {
|
if (t == 0) {
|
||||||
n += " In";
|
n += " In";
|
||||||
@ -60,21 +60,21 @@ String Path3DGizmo::get_handle_name(int p_idx) const {
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
Variant Path3DGizmo::get_handle_value(int p_idx) {
|
Variant Path3DGizmo::get_handle_value(int p_id) const {
|
||||||
Ref<Curve3D> c = path->get_curve();
|
Ref<Curve3D> c = path->get_curve();
|
||||||
if (c.is_null()) {
|
if (c.is_null()) {
|
||||||
return Variant();
|
return Variant();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_idx < c->get_point_count()) {
|
if (p_id < c->get_point_count()) {
|
||||||
original = c->get_point_position(p_idx);
|
original = c->get_point_position(p_id);
|
||||||
return original;
|
return original;
|
||||||
}
|
}
|
||||||
|
|
||||||
p_idx = p_idx - c->get_point_count() + 1;
|
p_id = p_id - c->get_point_count() + 1;
|
||||||
|
|
||||||
int idx = p_idx / 2;
|
int idx = p_id / 2;
|
||||||
int t = p_idx % 2;
|
int t = p_id % 2;
|
||||||
|
|
||||||
Vector3 ofs;
|
Vector3 ofs;
|
||||||
if (t == 0) {
|
if (t == 0) {
|
||||||
@ -88,7 +88,7 @@ Variant Path3DGizmo::get_handle_value(int p_idx) {
|
|||||||
return ofs;
|
return ofs;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Path3DGizmo::set_handle(int p_idx, Camera3D *p_camera, const Point2 &p_point) {
|
void Path3DGizmo::set_handle(int p_id, Camera3D *p_camera, const Point2 &p_point) const {
|
||||||
Ref<Curve3D> c = path->get_curve();
|
Ref<Curve3D> c = path->get_curve();
|
||||||
if (c.is_null()) {
|
if (c.is_null()) {
|
||||||
return;
|
return;
|
||||||
@ -100,7 +100,7 @@ void Path3DGizmo::set_handle(int p_idx, Camera3D *p_camera, const Point2 &p_poin
|
|||||||
Vector3 ray_dir = p_camera->project_ray_normal(p_point);
|
Vector3 ray_dir = p_camera->project_ray_normal(p_point);
|
||||||
|
|
||||||
// Setting curve point positions
|
// Setting curve point positions
|
||||||
if (p_idx < c->get_point_count()) {
|
if (p_id < c->get_point_count()) {
|
||||||
Plane p(gt.xform(original), p_camera->get_transform().basis.get_axis(2));
|
Plane p(gt.xform(original), p_camera->get_transform().basis.get_axis(2));
|
||||||
|
|
||||||
Vector3 inters;
|
Vector3 inters;
|
||||||
@ -112,16 +112,16 @@ void Path3DGizmo::set_handle(int p_idx, Camera3D *p_camera, const Point2 &p_poin
|
|||||||
}
|
}
|
||||||
|
|
||||||
Vector3 local = gi.xform(inters);
|
Vector3 local = gi.xform(inters);
|
||||||
c->set_point_position(p_idx, local);
|
c->set_point_position(p_id, local);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
p_idx = p_idx - c->get_point_count() + 1;
|
p_id = p_id - c->get_point_count() + 1;
|
||||||
|
|
||||||
int idx = p_idx / 2;
|
int idx = p_id / 2;
|
||||||
int t = p_idx % 2;
|
int t = p_id % 2;
|
||||||
|
|
||||||
Vector3 base = c->get_point_position(idx);
|
Vector3 base = c->get_point_position(idx);
|
||||||
|
|
||||||
@ -157,7 +157,7 @@ void Path3DGizmo::set_handle(int p_idx, Camera3D *p_camera, const Point2 &p_poin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Path3DGizmo::commit_handle(int p_idx, const Variant &p_restore, bool p_cancel) {
|
void Path3DGizmo::commit_handle(int p_id, const Variant &p_restore, bool p_cancel) const {
|
||||||
Ref<Curve3D> c = path->get_curve();
|
Ref<Curve3D> c = path->get_curve();
|
||||||
if (c.is_null()) {
|
if (c.is_null()) {
|
||||||
return;
|
return;
|
||||||
@ -165,27 +165,27 @@ void Path3DGizmo::commit_handle(int p_idx, const Variant &p_restore, bool p_canc
|
|||||||
|
|
||||||
UndoRedo *ur = Node3DEditor::get_singleton()->get_undo_redo();
|
UndoRedo *ur = Node3DEditor::get_singleton()->get_undo_redo();
|
||||||
|
|
||||||
if (p_idx < c->get_point_count()) {
|
if (p_id < c->get_point_count()) {
|
||||||
if (p_cancel) {
|
if (p_cancel) {
|
||||||
c->set_point_position(p_idx, p_restore);
|
c->set_point_position(p_id, p_restore);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ur->create_action(TTR("Set Curve Point Position"));
|
ur->create_action(TTR("Set Curve Point Position"));
|
||||||
ur->add_do_method(c.ptr(), "set_point_position", p_idx, c->get_point_position(p_idx));
|
ur->add_do_method(c.ptr(), "set_point_position", p_id, c->get_point_position(p_id));
|
||||||
ur->add_undo_method(c.ptr(), "set_point_position", p_idx, p_restore);
|
ur->add_undo_method(c.ptr(), "set_point_position", p_id, p_restore);
|
||||||
ur->commit_action();
|
ur->commit_action();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
p_idx = p_idx - c->get_point_count() + 1;
|
p_id = p_id - c->get_point_count() + 1;
|
||||||
|
|
||||||
int idx = p_idx / 2;
|
int idx = p_id / 2;
|
||||||
int t = p_idx % 2;
|
int t = p_id % 2;
|
||||||
|
|
||||||
if (t == 0) {
|
if (t == 0) {
|
||||||
if (p_cancel) {
|
if (p_cancel) {
|
||||||
c->set_point_in(p_idx, p_restore);
|
c->set_point_in(p_id, p_restore);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -282,7 +282,7 @@ void Path3DGizmo::redraw() {
|
|||||||
add_handles(handles, handles_material);
|
add_handles(handles, handles_material);
|
||||||
}
|
}
|
||||||
if (sec_handles.size()) {
|
if (sec_handles.size()) {
|
||||||
add_handles(sec_handles, sec_handles_material, false, true);
|
add_handles(sec_handles, sec_handles_material, Vector<int>(), false, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,9 @@
|
|||||||
#ifndef PATH_EDITOR_PLUGIN_H
|
#ifndef PATH_EDITOR_PLUGIN_H
|
||||||
#define PATH_EDITOR_PLUGIN_H
|
#define PATH_EDITOR_PLUGIN_H
|
||||||
|
|
||||||
#include "editor/node_3d_editor_gizmos.h"
|
#include "editor/editor_plugin.h"
|
||||||
|
#include "editor/plugins/node_3d_editor_gizmos.h"
|
||||||
|
#include "scene/3d/camera_3d.h"
|
||||||
#include "scene/3d/path_3d.h"
|
#include "scene/3d/path_3d.h"
|
||||||
|
|
||||||
class Path3DGizmo : public EditorNode3DGizmo {
|
class Path3DGizmo : public EditorNode3DGizmo {
|
||||||
@ -44,9 +46,9 @@ class Path3DGizmo : public EditorNode3DGizmo {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
virtual String get_handle_name(int p_idx) const override;
|
virtual String get_handle_name(int p_idx) const override;
|
||||||
virtual Variant get_handle_value(int p_idx) override;
|
virtual Variant get_handle_value(int p_id) const override;
|
||||||
virtual void set_handle(int p_idx, Camera3D *p_camera, const Point2 &p_point) override;
|
virtual void set_handle(int p_id, Camera3D *p_camera, const Point2 &p_point) const override;
|
||||||
virtual void commit_handle(int p_idx, const Variant &p_restore, bool p_cancel = false) override;
|
virtual void commit_handle(int p_id, const Variant &p_restore, bool p_cancel = false) const override;
|
||||||
|
|
||||||
virtual void redraw() override;
|
virtual void redraw() override;
|
||||||
Path3DGizmo(Path3D *p_path = nullptr);
|
Path3DGizmo(Path3D *p_path = nullptr);
|
||||||
|
@ -29,6 +29,8 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "csg_gizmos.h"
|
#include "csg_gizmos.h"
|
||||||
|
#include "editor/plugins/node_3d_editor_plugin.h"
|
||||||
|
#include "scene/3d/camera_3d.h"
|
||||||
|
|
||||||
///////////
|
///////////
|
||||||
|
|
||||||
@ -48,7 +50,7 @@ CSGShape3DGizmoPlugin::CSGShape3DGizmoPlugin() {
|
|||||||
create_handle_material("handles");
|
create_handle_material("handles");
|
||||||
}
|
}
|
||||||
|
|
||||||
String CSGShape3DGizmoPlugin::get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const {
|
String CSGShape3DGizmoPlugin::get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const {
|
||||||
CSGShape3D *cs = Object::cast_to<CSGShape3D>(p_gizmo->get_spatial_node());
|
CSGShape3D *cs = Object::cast_to<CSGShape3D>(p_gizmo->get_spatial_node());
|
||||||
|
|
||||||
if (Object::cast_to<CSGSphere3D>(cs)) {
|
if (Object::cast_to<CSGSphere3D>(cs)) {
|
||||||
@ -60,17 +62,17 @@ String CSGShape3DGizmoPlugin::get_handle_name(const EditorNode3DGizmo *p_gizmo,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Object::cast_to<CSGCylinder3D>(cs)) {
|
if (Object::cast_to<CSGCylinder3D>(cs)) {
|
||||||
return p_idx == 0 ? "Radius" : "Height";
|
return p_id == 0 ? "Radius" : "Height";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Object::cast_to<CSGTorus3D>(cs)) {
|
if (Object::cast_to<CSGTorus3D>(cs)) {
|
||||||
return p_idx == 0 ? "InnerRadius" : "OuterRadius";
|
return p_id == 0 ? "InnerRadius" : "OuterRadius";
|
||||||
}
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
Variant CSGShape3DGizmoPlugin::get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const {
|
Variant CSGShape3DGizmoPlugin::get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const {
|
||||||
CSGShape3D *cs = Object::cast_to<CSGShape3D>(p_gizmo->get_spatial_node());
|
CSGShape3D *cs = Object::cast_to<CSGShape3D>(p_gizmo->get_spatial_node());
|
||||||
|
|
||||||
if (Object::cast_to<CSGSphere3D>(cs)) {
|
if (Object::cast_to<CSGSphere3D>(cs)) {
|
||||||
@ -85,18 +87,18 @@ Variant CSGShape3DGizmoPlugin::get_handle_value(EditorNode3DGizmo *p_gizmo, int
|
|||||||
|
|
||||||
if (Object::cast_to<CSGCylinder3D>(cs)) {
|
if (Object::cast_to<CSGCylinder3D>(cs)) {
|
||||||
CSGCylinder3D *s = Object::cast_to<CSGCylinder3D>(cs);
|
CSGCylinder3D *s = Object::cast_to<CSGCylinder3D>(cs);
|
||||||
return p_idx == 0 ? s->get_radius() : s->get_height();
|
return p_id == 0 ? s->get_radius() : s->get_height();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Object::cast_to<CSGTorus3D>(cs)) {
|
if (Object::cast_to<CSGTorus3D>(cs)) {
|
||||||
CSGTorus3D *s = Object::cast_to<CSGTorus3D>(cs);
|
CSGTorus3D *s = Object::cast_to<CSGTorus3D>(cs);
|
||||||
return p_idx == 0 ? s->get_inner_radius() : s->get_outer_radius();
|
return p_id == 0 ? s->get_inner_radius() : s->get_outer_radius();
|
||||||
}
|
}
|
||||||
|
|
||||||
return Variant();
|
return Variant();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSGShape3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point) {
|
void CSGShape3DGizmoPlugin::set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const {
|
||||||
CSGShape3D *cs = Object::cast_to<CSGShape3D>(p_gizmo->get_spatial_node());
|
CSGShape3D *cs = Object::cast_to<CSGShape3D>(p_gizmo->get_spatial_node());
|
||||||
|
|
||||||
Transform3D gt = cs->get_global_transform();
|
Transform3D gt = cs->get_global_transform();
|
||||||
@ -129,10 +131,10 @@ void CSGShape3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Ca
|
|||||||
CSGBox3D *s = Object::cast_to<CSGBox3D>(cs);
|
CSGBox3D *s = Object::cast_to<CSGBox3D>(cs);
|
||||||
|
|
||||||
Vector3 axis;
|
Vector3 axis;
|
||||||
axis[p_idx] = 1.0;
|
axis[p_id] = 1.0;
|
||||||
Vector3 ra, rb;
|
Vector3 ra, rb;
|
||||||
Geometry3D::get_closest_points_between_segments(Vector3(), axis * 4096, sg[0], sg[1], ra, rb);
|
Geometry3D::get_closest_points_between_segments(Vector3(), axis * 4096, sg[0], sg[1], ra, rb);
|
||||||
float d = ra[p_idx];
|
float d = ra[p_id];
|
||||||
if (Node3DEditor::get_singleton()->is_snap_enabled()) {
|
if (Node3DEditor::get_singleton()->is_snap_enabled()) {
|
||||||
d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap());
|
d = Math::snapped(d, Node3DEditor::get_singleton()->get_translate_snap());
|
||||||
}
|
}
|
||||||
@ -142,7 +144,7 @@ void CSGShape3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Ca
|
|||||||
}
|
}
|
||||||
|
|
||||||
Vector3 h = s->get_size();
|
Vector3 h = s->get_size();
|
||||||
h[p_idx] = d * 2;
|
h[p_id] = d * 2;
|
||||||
s->set_size(h);
|
s->set_size(h);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,7 +152,7 @@ void CSGShape3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Ca
|
|||||||
CSGCylinder3D *s = Object::cast_to<CSGCylinder3D>(cs);
|
CSGCylinder3D *s = Object::cast_to<CSGCylinder3D>(cs);
|
||||||
|
|
||||||
Vector3 axis;
|
Vector3 axis;
|
||||||
axis[p_idx == 0 ? 0 : 1] = 1.0;
|
axis[p_id == 0 ? 0 : 1] = 1.0;
|
||||||
Vector3 ra, rb;
|
Vector3 ra, rb;
|
||||||
Geometry3D::get_closest_points_between_segments(Vector3(), axis * 4096, sg[0], sg[1], ra, rb);
|
Geometry3D::get_closest_points_between_segments(Vector3(), axis * 4096, sg[0], sg[1], ra, rb);
|
||||||
float d = axis.dot(ra);
|
float d = axis.dot(ra);
|
||||||
@ -162,9 +164,9 @@ void CSGShape3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Ca
|
|||||||
d = 0.001;
|
d = 0.001;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_idx == 0) {
|
if (p_id == 0) {
|
||||||
s->set_radius(d);
|
s->set_radius(d);
|
||||||
} else if (p_idx == 1) {
|
} else if (p_id == 1) {
|
||||||
s->set_height(d * 2.0);
|
s->set_height(d * 2.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -185,15 +187,15 @@ void CSGShape3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Ca
|
|||||||
d = 0.001;
|
d = 0.001;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_idx == 0) {
|
if (p_id == 0) {
|
||||||
s->set_inner_radius(d);
|
s->set_inner_radius(d);
|
||||||
} else if (p_idx == 1) {
|
} else if (p_id == 1) {
|
||||||
s->set_outer_radius(d);
|
s->set_outer_radius(d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSGShape3DGizmoPlugin::commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel) {
|
void CSGShape3DGizmoPlugin::commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel) const {
|
||||||
CSGShape3D *cs = Object::cast_to<CSGShape3D>(p_gizmo->get_spatial_node());
|
CSGShape3D *cs = Object::cast_to<CSGShape3D>(p_gizmo->get_spatial_node());
|
||||||
|
|
||||||
if (Object::cast_to<CSGSphere3D>(cs)) {
|
if (Object::cast_to<CSGSphere3D>(cs)) {
|
||||||
@ -227,7 +229,7 @@ void CSGShape3DGizmoPlugin::commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx,
|
|||||||
if (Object::cast_to<CSGCylinder3D>(cs)) {
|
if (Object::cast_to<CSGCylinder3D>(cs)) {
|
||||||
CSGCylinder3D *s = Object::cast_to<CSGCylinder3D>(cs);
|
CSGCylinder3D *s = Object::cast_to<CSGCylinder3D>(cs);
|
||||||
if (p_cancel) {
|
if (p_cancel) {
|
||||||
if (p_idx == 0) {
|
if (p_id == 0) {
|
||||||
s->set_radius(p_restore);
|
s->set_radius(p_restore);
|
||||||
} else {
|
} else {
|
||||||
s->set_height(p_restore);
|
s->set_height(p_restore);
|
||||||
@ -236,7 +238,7 @@ void CSGShape3DGizmoPlugin::commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
UndoRedo *ur = Node3DEditor::get_singleton()->get_undo_redo();
|
UndoRedo *ur = Node3DEditor::get_singleton()->get_undo_redo();
|
||||||
if (p_idx == 0) {
|
if (p_id == 0) {
|
||||||
ur->create_action(TTR("Change Cylinder Radius"));
|
ur->create_action(TTR("Change Cylinder Radius"));
|
||||||
ur->add_do_method(s, "set_radius", s->get_radius());
|
ur->add_do_method(s, "set_radius", s->get_radius());
|
||||||
ur->add_undo_method(s, "set_radius", p_restore);
|
ur->add_undo_method(s, "set_radius", p_restore);
|
||||||
@ -252,7 +254,7 @@ void CSGShape3DGizmoPlugin::commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx,
|
|||||||
if (Object::cast_to<CSGTorus3D>(cs)) {
|
if (Object::cast_to<CSGTorus3D>(cs)) {
|
||||||
CSGTorus3D *s = Object::cast_to<CSGTorus3D>(cs);
|
CSGTorus3D *s = Object::cast_to<CSGTorus3D>(cs);
|
||||||
if (p_cancel) {
|
if (p_cancel) {
|
||||||
if (p_idx == 0) {
|
if (p_id == 0) {
|
||||||
s->set_inner_radius(p_restore);
|
s->set_inner_radius(p_restore);
|
||||||
} else {
|
} else {
|
||||||
s->set_outer_radius(p_restore);
|
s->set_outer_radius(p_restore);
|
||||||
@ -261,7 +263,7 @@ void CSGShape3DGizmoPlugin::commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
UndoRedo *ur = Node3DEditor::get_singleton()->get_undo_redo();
|
UndoRedo *ur = Node3DEditor::get_singleton()->get_undo_redo();
|
||||||
if (p_idx == 0) {
|
if (p_id == 0) {
|
||||||
ur->create_action(TTR("Change Torus Inner Radius"));
|
ur->create_action(TTR("Change Torus Inner Radius"));
|
||||||
ur->add_do_method(s, "set_inner_radius", s->get_inner_radius());
|
ur->add_do_method(s, "set_inner_radius", s->get_inner_radius());
|
||||||
ur->add_undo_method(s, "set_inner_radius", p_restore);
|
ur->add_undo_method(s, "set_inner_radius", p_restore);
|
||||||
@ -356,7 +358,7 @@ void CSGShape3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
p_gizmo->add_mesh(mesh, false, Ref<SkinReference>(), solid_material);
|
p_gizmo->add_mesh(mesh, solid_material);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Object::cast_to<CSGSphere3D>(cs)) {
|
if (Object::cast_to<CSGSphere3D>(cs)) {
|
||||||
|
@ -33,22 +33,22 @@
|
|||||||
|
|
||||||
#include "csg_shape.h"
|
#include "csg_shape.h"
|
||||||
#include "editor/editor_plugin.h"
|
#include "editor/editor_plugin.h"
|
||||||
#include "editor/node_3d_editor_gizmos.h"
|
#include "editor/plugins/node_3d_editor_gizmos.h"
|
||||||
|
|
||||||
class CSGShape3DGizmoPlugin : public EditorNode3DGizmoPlugin {
|
class CSGShape3DGizmoPlugin : public EditorNode3DGizmoPlugin {
|
||||||
GDCLASS(CSGShape3DGizmoPlugin, EditorNode3DGizmoPlugin);
|
GDCLASS(CSGShape3DGizmoPlugin, EditorNode3DGizmoPlugin);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool has_gizmo(Node3D *p_spatial) override;
|
virtual bool has_gizmo(Node3D *p_spatial) override;
|
||||||
String get_gizmo_name() const override;
|
virtual String get_gizmo_name() const override;
|
||||||
int get_priority() const override;
|
virtual int get_priority() const override;
|
||||||
bool is_selectable_when_hidden() const override;
|
virtual bool is_selectable_when_hidden() const override;
|
||||||
void redraw(EditorNode3DGizmo *p_gizmo) override;
|
virtual void redraw(EditorNode3DGizmo *p_gizmo) override;
|
||||||
|
|
||||||
String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
virtual String get_handle_name(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
Variant get_handle_value(EditorNode3DGizmo *p_gizmo, int p_idx) const override;
|
virtual Variant get_handle_value(const EditorNode3DGizmo *p_gizmo, int p_id) const override;
|
||||||
void set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Camera3D *p_camera, const Point2 &p_point) override;
|
virtual void set_handle(const EditorNode3DGizmo *p_gizmo, int p_id, Camera3D *p_camera, const Point2 &p_point) const override;
|
||||||
void commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx, const Variant &p_restore, bool p_cancel) override;
|
virtual void commit_handle(const EditorNode3DGizmo *p_gizmo, int p_id, const Variant &p_restore, bool p_cancel) const override;
|
||||||
|
|
||||||
CSGShape3DGizmoPlugin();
|
CSGShape3DGizmoPlugin();
|
||||||
};
|
};
|
||||||
|
@ -548,7 +548,7 @@ void CSGShape3D::_notification(int p_what) {
|
|||||||
void CSGShape3D::set_operation(Operation p_operation) {
|
void CSGShape3D::set_operation(Operation p_operation) {
|
||||||
operation = p_operation;
|
operation = p_operation;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
CSGShape3D::Operation CSGShape3D::get_operation() const {
|
CSGShape3D::Operation CSGShape3D::get_operation() const {
|
||||||
@ -845,7 +845,7 @@ CSGBrush *CSGMesh3D::_build_brush() {
|
|||||||
|
|
||||||
void CSGMesh3D::_mesh_changed() {
|
void CSGMesh3D::_mesh_changed() {
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSGMesh3D::set_material(const Ref<Material> &p_material) {
|
void CSGMesh3D::set_material(const Ref<Material> &p_material) {
|
||||||
@ -1034,7 +1034,7 @@ void CSGSphere3D::set_radius(const float p_radius) {
|
|||||||
ERR_FAIL_COND(p_radius <= 0);
|
ERR_FAIL_COND(p_radius <= 0);
|
||||||
radius = p_radius;
|
radius = p_radius;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
float CSGSphere3D::get_radius() const {
|
float CSGSphere3D::get_radius() const {
|
||||||
@ -1044,7 +1044,7 @@ float CSGSphere3D::get_radius() const {
|
|||||||
void CSGSphere3D::set_radial_segments(const int p_radial_segments) {
|
void CSGSphere3D::set_radial_segments(const int p_radial_segments) {
|
||||||
radial_segments = p_radial_segments > 4 ? p_radial_segments : 4;
|
radial_segments = p_radial_segments > 4 ? p_radial_segments : 4;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
int CSGSphere3D::get_radial_segments() const {
|
int CSGSphere3D::get_radial_segments() const {
|
||||||
@ -1054,7 +1054,7 @@ int CSGSphere3D::get_radial_segments() const {
|
|||||||
void CSGSphere3D::set_rings(const int p_rings) {
|
void CSGSphere3D::set_rings(const int p_rings) {
|
||||||
rings = p_rings > 1 ? p_rings : 1;
|
rings = p_rings > 1 ? p_rings : 1;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
int CSGSphere3D::get_rings() const {
|
int CSGSphere3D::get_rings() const {
|
||||||
@ -1203,7 +1203,7 @@ void CSGBox3D::_bind_methods() {
|
|||||||
void CSGBox3D::set_size(const Vector3 &p_size) {
|
void CSGBox3D::set_size(const Vector3 &p_size) {
|
||||||
size = p_size;
|
size = p_size;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3 CSGBox3D::get_size() const {
|
Vector3 CSGBox3D::get_size() const {
|
||||||
@ -1213,7 +1213,7 @@ Vector3 CSGBox3D::get_size() const {
|
|||||||
void CSGBox3D::set_material(const Ref<Material> &p_material) {
|
void CSGBox3D::set_material(const Ref<Material> &p_material) {
|
||||||
material = p_material;
|
material = p_material;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
Ref<Material> CSGBox3D::get_material() const {
|
Ref<Material> CSGBox3D::get_material() const {
|
||||||
@ -1384,7 +1384,7 @@ void CSGCylinder3D::_bind_methods() {
|
|||||||
void CSGCylinder3D::set_radius(const float p_radius) {
|
void CSGCylinder3D::set_radius(const float p_radius) {
|
||||||
radius = p_radius;
|
radius = p_radius;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
float CSGCylinder3D::get_radius() const {
|
float CSGCylinder3D::get_radius() const {
|
||||||
@ -1394,7 +1394,7 @@ float CSGCylinder3D::get_radius() const {
|
|||||||
void CSGCylinder3D::set_height(const float p_height) {
|
void CSGCylinder3D::set_height(const float p_height) {
|
||||||
height = p_height;
|
height = p_height;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
float CSGCylinder3D::get_height() const {
|
float CSGCylinder3D::get_height() const {
|
||||||
@ -1405,7 +1405,7 @@ void CSGCylinder3D::set_sides(const int p_sides) {
|
|||||||
ERR_FAIL_COND(p_sides < 3);
|
ERR_FAIL_COND(p_sides < 3);
|
||||||
sides = p_sides;
|
sides = p_sides;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
int CSGCylinder3D::get_sides() const {
|
int CSGCylinder3D::get_sides() const {
|
||||||
@ -1415,7 +1415,7 @@ int CSGCylinder3D::get_sides() const {
|
|||||||
void CSGCylinder3D::set_cone(const bool p_cone) {
|
void CSGCylinder3D::set_cone(const bool p_cone) {
|
||||||
cone = p_cone;
|
cone = p_cone;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CSGCylinder3D::is_cone() const {
|
bool CSGCylinder3D::is_cone() const {
|
||||||
@ -1603,7 +1603,7 @@ void CSGTorus3D::_bind_methods() {
|
|||||||
void CSGTorus3D::set_inner_radius(const float p_inner_radius) {
|
void CSGTorus3D::set_inner_radius(const float p_inner_radius) {
|
||||||
inner_radius = p_inner_radius;
|
inner_radius = p_inner_radius;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
float CSGTorus3D::get_inner_radius() const {
|
float CSGTorus3D::get_inner_radius() const {
|
||||||
@ -1613,7 +1613,7 @@ float CSGTorus3D::get_inner_radius() const {
|
|||||||
void CSGTorus3D::set_outer_radius(const float p_outer_radius) {
|
void CSGTorus3D::set_outer_radius(const float p_outer_radius) {
|
||||||
outer_radius = p_outer_radius;
|
outer_radius = p_outer_radius;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
float CSGTorus3D::get_outer_radius() const {
|
float CSGTorus3D::get_outer_radius() const {
|
||||||
@ -1624,7 +1624,7 @@ void CSGTorus3D::set_sides(const int p_sides) {
|
|||||||
ERR_FAIL_COND(p_sides < 3);
|
ERR_FAIL_COND(p_sides < 3);
|
||||||
sides = p_sides;
|
sides = p_sides;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
int CSGTorus3D::get_sides() const {
|
int CSGTorus3D::get_sides() const {
|
||||||
@ -1635,7 +1635,7 @@ void CSGTorus3D::set_ring_sides(const int p_ring_sides) {
|
|||||||
ERR_FAIL_COND(p_ring_sides < 3);
|
ERR_FAIL_COND(p_ring_sides < 3);
|
||||||
ring_sides = p_ring_sides;
|
ring_sides = p_ring_sides;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
int CSGTorus3D::get_ring_sides() const {
|
int CSGTorus3D::get_ring_sides() const {
|
||||||
@ -2172,7 +2172,7 @@ void CSGPolygon3D::_validate_property(PropertyInfo &property) const {
|
|||||||
|
|
||||||
void CSGPolygon3D::_path_changed() {
|
void CSGPolygon3D::_path_changed() {
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSGPolygon3D::_path_exited() {
|
void CSGPolygon3D::_path_exited() {
|
||||||
@ -2248,7 +2248,7 @@ void CSGPolygon3D::_bind_methods() {
|
|||||||
void CSGPolygon3D::set_polygon(const Vector<Vector2> &p_polygon) {
|
void CSGPolygon3D::set_polygon(const Vector<Vector2> &p_polygon) {
|
||||||
polygon = p_polygon;
|
polygon = p_polygon;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<Vector2> CSGPolygon3D::get_polygon() const {
|
Vector<Vector2> CSGPolygon3D::get_polygon() const {
|
||||||
@ -2258,7 +2258,7 @@ Vector<Vector2> CSGPolygon3D::get_polygon() const {
|
|||||||
void CSGPolygon3D::set_mode(Mode p_mode) {
|
void CSGPolygon3D::set_mode(Mode p_mode) {
|
||||||
mode = p_mode;
|
mode = p_mode;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
notify_property_list_changed();
|
notify_property_list_changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2270,7 +2270,7 @@ void CSGPolygon3D::set_depth(const float p_depth) {
|
|||||||
ERR_FAIL_COND(p_depth < 0.001);
|
ERR_FAIL_COND(p_depth < 0.001);
|
||||||
depth = p_depth;
|
depth = p_depth;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
float CSGPolygon3D::get_depth() const {
|
float CSGPolygon3D::get_depth() const {
|
||||||
@ -2290,7 +2290,7 @@ void CSGPolygon3D::set_spin_degrees(const float p_spin_degrees) {
|
|||||||
ERR_FAIL_COND(p_spin_degrees < 0.01 || p_spin_degrees > 360);
|
ERR_FAIL_COND(p_spin_degrees < 0.01 || p_spin_degrees > 360);
|
||||||
spin_degrees = p_spin_degrees;
|
spin_degrees = p_spin_degrees;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
float CSGPolygon3D::get_spin_degrees() const {
|
float CSGPolygon3D::get_spin_degrees() const {
|
||||||
@ -2301,7 +2301,7 @@ void CSGPolygon3D::set_spin_sides(const int p_spin_sides) {
|
|||||||
ERR_FAIL_COND(p_spin_sides < 3);
|
ERR_FAIL_COND(p_spin_sides < 3);
|
||||||
spin_sides = p_spin_sides;
|
spin_sides = p_spin_sides;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
int CSGPolygon3D::get_spin_sides() const {
|
int CSGPolygon3D::get_spin_sides() const {
|
||||||
@ -2311,7 +2311,7 @@ int CSGPolygon3D::get_spin_sides() const {
|
|||||||
void CSGPolygon3D::set_path_node(const NodePath &p_path) {
|
void CSGPolygon3D::set_path_node(const NodePath &p_path) {
|
||||||
path_node = p_path;
|
path_node = p_path;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
NodePath CSGPolygon3D::get_path_node() const {
|
NodePath CSGPolygon3D::get_path_node() const {
|
||||||
@ -2322,7 +2322,7 @@ void CSGPolygon3D::set_path_interval(float p_interval) {
|
|||||||
ERR_FAIL_COND_MSG(p_interval < 0.001, "Path interval cannot be smaller than 0.001.");
|
ERR_FAIL_COND_MSG(p_interval < 0.001, "Path interval cannot be smaller than 0.001.");
|
||||||
path_interval = p_interval;
|
path_interval = p_interval;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
float CSGPolygon3D::get_path_interval() const {
|
float CSGPolygon3D::get_path_interval() const {
|
||||||
@ -2332,7 +2332,7 @@ float CSGPolygon3D::get_path_interval() const {
|
|||||||
void CSGPolygon3D::set_path_rotation(PathRotation p_rotation) {
|
void CSGPolygon3D::set_path_rotation(PathRotation p_rotation) {
|
||||||
path_rotation = p_rotation;
|
path_rotation = p_rotation;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
CSGPolygon3D::PathRotation CSGPolygon3D::get_path_rotation() const {
|
CSGPolygon3D::PathRotation CSGPolygon3D::get_path_rotation() const {
|
||||||
@ -2342,7 +2342,7 @@ CSGPolygon3D::PathRotation CSGPolygon3D::get_path_rotation() const {
|
|||||||
void CSGPolygon3D::set_path_local(bool p_enable) {
|
void CSGPolygon3D::set_path_local(bool p_enable) {
|
||||||
path_local = p_enable;
|
path_local = p_enable;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CSGPolygon3D::is_path_local() const {
|
bool CSGPolygon3D::is_path_local() const {
|
||||||
@ -2352,7 +2352,7 @@ bool CSGPolygon3D::is_path_local() const {
|
|||||||
void CSGPolygon3D::set_path_joined(bool p_enable) {
|
void CSGPolygon3D::set_path_joined(bool p_enable) {
|
||||||
path_joined = p_enable;
|
path_joined = p_enable;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CSGPolygon3D::is_path_joined() const {
|
bool CSGPolygon3D::is_path_joined() const {
|
||||||
|
@ -65,7 +65,7 @@ void NavigationMeshEditor::_bake_pressed() {
|
|||||||
NavigationMeshGenerator::get_singleton()->clear(node->get_navigation_mesh());
|
NavigationMeshGenerator::get_singleton()->clear(node->get_navigation_mesh());
|
||||||
NavigationMeshGenerator::get_singleton()->bake(node->get_navigation_mesh(), node);
|
NavigationMeshGenerator::get_singleton()->bake(node->get_navigation_mesh(), node);
|
||||||
|
|
||||||
node->update_gizmo();
|
node->update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NavigationMeshEditor::_clear_pressed() {
|
void NavigationMeshEditor::_clear_pressed() {
|
||||||
@ -77,7 +77,7 @@ void NavigationMeshEditor::_clear_pressed() {
|
|||||||
bake_info->set_text("");
|
bake_info->set_text("");
|
||||||
|
|
||||||
if (node) {
|
if (node) {
|
||||||
node->update_gizmo();
|
node->update_gizmos();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -794,7 +794,7 @@ uint32_t AudioStreamPlayer3D::get_area_mask() const {
|
|||||||
|
|
||||||
void AudioStreamPlayer3D::set_emission_angle_enabled(bool p_enable) {
|
void AudioStreamPlayer3D::set_emission_angle_enabled(bool p_enable) {
|
||||||
emission_angle_enabled = p_enable;
|
emission_angle_enabled = p_enable;
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AudioStreamPlayer3D::is_emission_angle_enabled() const {
|
bool AudioStreamPlayer3D::is_emission_angle_enabled() const {
|
||||||
@ -804,7 +804,7 @@ bool AudioStreamPlayer3D::is_emission_angle_enabled() const {
|
|||||||
void AudioStreamPlayer3D::set_emission_angle(float p_angle) {
|
void AudioStreamPlayer3D::set_emission_angle(float p_angle) {
|
||||||
ERR_FAIL_COND(p_angle < 0 || p_angle > 90);
|
ERR_FAIL_COND(p_angle < 0 || p_angle > 90);
|
||||||
emission_angle = p_angle;
|
emission_angle = p_angle;
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
float AudioStreamPlayer3D::get_emission_angle() const {
|
float AudioStreamPlayer3D::get_emission_angle() const {
|
||||||
|
@ -164,7 +164,7 @@ void Camera3D::set_perspective(float p_fovy_degrees, float p_z_near, float p_z_f
|
|||||||
mode = PROJECTION_PERSPECTIVE;
|
mode = PROJECTION_PERSPECTIVE;
|
||||||
|
|
||||||
RenderingServer::get_singleton()->camera_set_perspective(camera, fov, near, far);
|
RenderingServer::get_singleton()->camera_set_perspective(camera, fov, near, far);
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
force_change = false;
|
force_change = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,7 +181,7 @@ void Camera3D::set_orthogonal(float p_size, float p_z_near, float p_z_far) {
|
|||||||
force_change = false;
|
force_change = false;
|
||||||
|
|
||||||
RenderingServer::get_singleton()->camera_set_orthogonal(camera, size, near, far);
|
RenderingServer::get_singleton()->camera_set_orthogonal(camera, size, near, far);
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera3D::set_frustum(float p_size, Vector2 p_offset, float p_z_near, float p_z_far) {
|
void Camera3D::set_frustum(float p_size, Vector2 p_offset, float p_z_near, float p_z_far) {
|
||||||
@ -198,7 +198,7 @@ void Camera3D::set_frustum(float p_size, Vector2 p_offset, float p_z_near, float
|
|||||||
force_change = false;
|
force_change = false;
|
||||||
|
|
||||||
RenderingServer::get_singleton()->camera_set_frustum(camera, size, frustum_offset, near, far);
|
RenderingServer::get_singleton()->camera_set_frustum(camera, size, frustum_offset, near, far);
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera3D::set_projection(Camera3D::Projection p_mode) {
|
void Camera3D::set_projection(Camera3D::Projection p_mode) {
|
||||||
@ -755,7 +755,7 @@ void ClippedCamera3D::_notification(int p_what) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (p_what == NOTIFICATION_LOCAL_TRANSFORM_CHANGED) {
|
if (p_what == NOTIFICATION_LOCAL_TRANSFORM_CHANGED) {
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ void CollisionPolygon3D::set_polygon(const Vector<Point2> &p_polygon) {
|
|||||||
_build_polygon();
|
_build_polygon();
|
||||||
}
|
}
|
||||||
update_configuration_warnings();
|
update_configuration_warnings();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<Point2> CollisionPolygon3D::get_polygon() const {
|
Vector<Point2> CollisionPolygon3D::get_polygon() const {
|
||||||
@ -136,7 +136,7 @@ AABB CollisionPolygon3D::get_item_rect() const {
|
|||||||
void CollisionPolygon3D::set_depth(real_t p_depth) {
|
void CollisionPolygon3D::set_depth(real_t p_depth) {
|
||||||
depth = p_depth;
|
depth = p_depth;
|
||||||
_build_polygon();
|
_build_polygon();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
real_t CollisionPolygon3D::get_depth() const {
|
real_t CollisionPolygon3D::get_depth() const {
|
||||||
@ -145,7 +145,7 @@ real_t CollisionPolygon3D::get_depth() const {
|
|||||||
|
|
||||||
void CollisionPolygon3D::set_disabled(bool p_disabled) {
|
void CollisionPolygon3D::set_disabled(bool p_disabled) {
|
||||||
disabled = p_disabled;
|
disabled = p_disabled;
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
|
|
||||||
if (parent) {
|
if (parent) {
|
||||||
parent->shape_owner_set_disabled(owner_id, p_disabled);
|
parent->shape_owner_set_disabled(owner_id, p_disabled);
|
||||||
|
@ -117,7 +117,7 @@ void CollisionShape3D::_notification(int p_what) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CollisionShape3D::resource_changed(RES res) {
|
void CollisionShape3D::resource_changed(RES res) {
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
TypedArray<String> CollisionShape3D::get_configuration_warnings() const {
|
TypedArray<String> CollisionShape3D::get_configuration_warnings() const {
|
||||||
@ -166,7 +166,7 @@ void CollisionShape3D::set_shape(const Ref<Shape3D> &p_shape) {
|
|||||||
if (!shape.is_null()) {
|
if (!shape.is_null()) {
|
||||||
shape->register_owner(this);
|
shape->register_owner(this);
|
||||||
}
|
}
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
if (parent) {
|
if (parent) {
|
||||||
parent->shape_owner_clear_shapes(owner_id);
|
parent->shape_owner_clear_shapes(owner_id);
|
||||||
if (shape.is_valid()) {
|
if (shape.is_valid()) {
|
||||||
@ -187,7 +187,7 @@ Ref<Shape3D> CollisionShape3D::get_shape() const {
|
|||||||
|
|
||||||
void CollisionShape3D::set_disabled(bool p_disabled) {
|
void CollisionShape3D::set_disabled(bool p_disabled) {
|
||||||
disabled = p_disabled;
|
disabled = p_disabled;
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
if (parent) {
|
if (parent) {
|
||||||
parent->shape_owner_set_disabled(owner_id, p_disabled);
|
parent->shape_owner_set_disabled(owner_id, p_disabled);
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
void Decal::set_extents(const Vector3 &p_extents) {
|
void Decal::set_extents(const Vector3 &p_extents) {
|
||||||
extents = p_extents;
|
extents = p_extents;
|
||||||
RS::get_singleton()->decal_set_extents(decal, p_extents);
|
RS::get_singleton()->decal_set_extents(decal, p_extents);
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3 Decal::get_extents() const {
|
Vector3 Decal::get_extents() const {
|
||||||
|
@ -99,7 +99,7 @@ void GPUParticles3D::set_randomness_ratio(float p_ratio) {
|
|||||||
void GPUParticles3D::set_visibility_aabb(const AABB &p_aabb) {
|
void GPUParticles3D::set_visibility_aabb(const AABB &p_aabb) {
|
||||||
visibility_aabb = p_aabb;
|
visibility_aabb = p_aabb;
|
||||||
RS::get_singleton()->particles_set_custom_aabb(particles, visibility_aabb);
|
RS::get_singleton()->particles_set_custom_aabb(particles, visibility_aabb);
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GPUParticles3D::set_use_local_coordinates(bool p_enable) {
|
void GPUParticles3D::set_use_local_coordinates(bool p_enable) {
|
||||||
|
@ -73,7 +73,7 @@ void GPUParticlesCollisionSphere::_bind_methods() {
|
|||||||
void GPUParticlesCollisionSphere::set_radius(float p_radius) {
|
void GPUParticlesCollisionSphere::set_radius(float p_radius) {
|
||||||
radius = p_radius;
|
radius = p_radius;
|
||||||
RS::get_singleton()->particles_collision_set_sphere_radius(_get_collision(), radius);
|
RS::get_singleton()->particles_collision_set_sphere_radius(_get_collision(), radius);
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
float GPUParticlesCollisionSphere::get_radius() const {
|
float GPUParticlesCollisionSphere::get_radius() const {
|
||||||
@ -103,7 +103,7 @@ void GPUParticlesCollisionBox::_bind_methods() {
|
|||||||
void GPUParticlesCollisionBox::set_extents(const Vector3 &p_extents) {
|
void GPUParticlesCollisionBox::set_extents(const Vector3 &p_extents) {
|
||||||
extents = p_extents;
|
extents = p_extents;
|
||||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3 GPUParticlesCollisionBox::get_extents() const {
|
Vector3 GPUParticlesCollisionBox::get_extents() const {
|
||||||
@ -545,7 +545,7 @@ float GPUParticlesCollisionSDF::get_thickness() const {
|
|||||||
void GPUParticlesCollisionSDF::set_extents(const Vector3 &p_extents) {
|
void GPUParticlesCollisionSDF::set_extents(const Vector3 &p_extents) {
|
||||||
extents = p_extents;
|
extents = p_extents;
|
||||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3 GPUParticlesCollisionSDF::get_extents() const {
|
Vector3 GPUParticlesCollisionSDF::get_extents() const {
|
||||||
@ -554,7 +554,7 @@ Vector3 GPUParticlesCollisionSDF::get_extents() const {
|
|||||||
|
|
||||||
void GPUParticlesCollisionSDF::set_resolution(Resolution p_resolution) {
|
void GPUParticlesCollisionSDF::set_resolution(Resolution p_resolution) {
|
||||||
resolution = p_resolution;
|
resolution = p_resolution;
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
GPUParticlesCollisionSDF::Resolution GPUParticlesCollisionSDF::get_resolution() const {
|
GPUParticlesCollisionSDF::Resolution GPUParticlesCollisionSDF::get_resolution() const {
|
||||||
@ -680,7 +680,7 @@ float GPUParticlesCollisionHeightField::get_follow_camera_push_ratio() const {
|
|||||||
void GPUParticlesCollisionHeightField::set_extents(const Vector3 &p_extents) {
|
void GPUParticlesCollisionHeightField::set_extents(const Vector3 &p_extents) {
|
||||||
extents = p_extents;
|
extents = p_extents;
|
||||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
RS::get_singleton()->particles_collision_height_field_update(_get_collision());
|
RS::get_singleton()->particles_collision_height_field_update(_get_collision());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -691,7 +691,7 @@ Vector3 GPUParticlesCollisionHeightField::get_extents() const {
|
|||||||
void GPUParticlesCollisionHeightField::set_resolution(Resolution p_resolution) {
|
void GPUParticlesCollisionHeightField::set_resolution(Resolution p_resolution) {
|
||||||
resolution = p_resolution;
|
resolution = p_resolution;
|
||||||
RS::get_singleton()->particles_collision_set_height_field_resolution(_get_collision(), RS::ParticlesCollisionHeightfieldResolution(resolution));
|
RS::get_singleton()->particles_collision_set_height_field_resolution(_get_collision(), RS::ParticlesCollisionHeightfieldResolution(resolution));
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
RS::get_singleton()->particles_collision_height_field_update(_get_collision());
|
RS::get_singleton()->particles_collision_height_field_update(_get_collision());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -761,7 +761,7 @@ float GPUParticlesAttractor3D::get_attenuation() const {
|
|||||||
void GPUParticlesAttractor3D::set_directionality(float p_directionality) {
|
void GPUParticlesAttractor3D::set_directionality(float p_directionality) {
|
||||||
directionality = p_directionality;
|
directionality = p_directionality;
|
||||||
RS::get_singleton()->particles_collision_set_attractor_directionality(collision, p_directionality);
|
RS::get_singleton()->particles_collision_set_attractor_directionality(collision, p_directionality);
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
float GPUParticlesAttractor3D::get_directionality() const {
|
float GPUParticlesAttractor3D::get_directionality() const {
|
||||||
@ -808,7 +808,7 @@ void GPUParticlesAttractorSphere::_bind_methods() {
|
|||||||
void GPUParticlesAttractorSphere::set_radius(float p_radius) {
|
void GPUParticlesAttractorSphere::set_radius(float p_radius) {
|
||||||
radius = p_radius;
|
radius = p_radius;
|
||||||
RS::get_singleton()->particles_collision_set_sphere_radius(_get_collision(), radius);
|
RS::get_singleton()->particles_collision_set_sphere_radius(_get_collision(), radius);
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
float GPUParticlesAttractorSphere::get_radius() const {
|
float GPUParticlesAttractorSphere::get_radius() const {
|
||||||
@ -838,7 +838,7 @@ void GPUParticlesAttractorBox::_bind_methods() {
|
|||||||
void GPUParticlesAttractorBox::set_extents(const Vector3 &p_extents) {
|
void GPUParticlesAttractorBox::set_extents(const Vector3 &p_extents) {
|
||||||
extents = p_extents;
|
extents = p_extents;
|
||||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3 GPUParticlesAttractorBox::get_extents() const {
|
Vector3 GPUParticlesAttractorBox::get_extents() const {
|
||||||
@ -872,7 +872,7 @@ void GPUParticlesAttractorVectorField::_bind_methods() {
|
|||||||
void GPUParticlesAttractorVectorField::set_extents(const Vector3 &p_extents) {
|
void GPUParticlesAttractorVectorField::set_extents(const Vector3 &p_extents) {
|
||||||
extents = p_extents;
|
extents = p_extents;
|
||||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3 GPUParticlesAttractorVectorField::get_extents() const {
|
Vector3 GPUParticlesAttractorVectorField::get_extents() const {
|
||||||
|
@ -45,7 +45,7 @@ void Light3D::set_param(Param p_param, float p_value) {
|
|||||||
RS::get_singleton()->light_set_param(light, RS::LightParam(p_param), p_value);
|
RS::get_singleton()->light_set_param(light, RS::LightParam(p_param), p_value);
|
||||||
|
|
||||||
if (p_param == PARAM_SPOT_ANGLE || p_param == PARAM_RANGE) {
|
if (p_param == PARAM_SPOT_ANGLE || p_param == PARAM_RANGE) {
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
|
|
||||||
if (p_param == PARAM_SPOT_ANGLE) {
|
if (p_param == PARAM_SPOT_ANGLE) {
|
||||||
update_configuration_warnings();
|
update_configuration_warnings();
|
||||||
@ -95,7 +95,7 @@ void Light3D::set_color(const Color &p_color) {
|
|||||||
color = p_color;
|
color = p_color;
|
||||||
RS::get_singleton()->light_set_color(light, p_color);
|
RS::get_singleton()->light_set_color(light, p_color);
|
||||||
// The gizmo color depends on the light color, so update it.
|
// The gizmo color depends on the light color, so update it.
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
Color Light3D::get_color() const {
|
Color Light3D::get_color() const {
|
||||||
|
@ -1250,7 +1250,7 @@ void LightmapGI::set_light_data(const Ref<LightmapGIData> &p_data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
Ref<LightmapGIData> LightmapGI::get_light_data() const {
|
Ref<LightmapGIData> LightmapGI::get_light_data() const {
|
||||||
|
@ -133,7 +133,7 @@ void MeshInstance3D::set_mesh(const Ref<Mesh> &p_mesh) {
|
|||||||
set_base(RID());
|
set_base(RID());
|
||||||
}
|
}
|
||||||
|
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
|
|
||||||
notify_property_list_changed();
|
notify_property_list_changed();
|
||||||
}
|
}
|
||||||
@ -356,7 +356,7 @@ Ref<Material> MeshInstance3D::get_active_material(int p_surface) const {
|
|||||||
void MeshInstance3D::_mesh_changed() {
|
void MeshInstance3D::_mesh_changed() {
|
||||||
ERR_FAIL_COND(mesh.is_null());
|
ERR_FAIL_COND(mesh.is_null());
|
||||||
surface_override_materials.resize(mesh->get_surface_count());
|
surface_override_materials.resize(mesh->get_surface_count());
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MeshInstance3D::create_debug_tangents() {
|
void MeshInstance3D::create_debug_tangents() {
|
||||||
|
@ -59,7 +59,7 @@ void NavigationRegion3D::set_enabled(bool p_enabled) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NavigationRegion3D::is_enabled() const {
|
bool NavigationRegion3D::is_enabled() const {
|
||||||
@ -134,7 +134,7 @@ void NavigationRegion3D::set_navigation_mesh(const Ref<NavigationMesh> &p_navmes
|
|||||||
|
|
||||||
emit_signal(SNAME("navigation_mesh_changed"));
|
emit_signal(SNAME("navigation_mesh_changed"));
|
||||||
|
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
update_configuration_warnings();
|
update_configuration_warnings();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,7 +211,7 @@ void NavigationRegion3D::_bind_methods() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void NavigationRegion3D::_navigation_changed() {
|
void NavigationRegion3D::_navigation_changed() {
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
update_configuration_warnings();
|
update_configuration_warnings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ Node3DGizmo::Node3DGizmo() {
|
|||||||
|
|
||||||
void Node3D::_notify_dirty() {
|
void Node3D::_notify_dirty() {
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
if ((data.gizmo.is_valid() || data.notify_transform) && !data.ignore_notification && !xform_change.in_list()) {
|
if ((!data.gizmos.is_empty() || data.notify_transform) && !data.ignore_notification && !xform_change.in_list()) {
|
||||||
#else
|
#else
|
||||||
if (data.notify_transform && !data.ignore_notification && !xform_change.in_list()) {
|
if (data.notify_transform && !data.ignore_notification && !xform_change.in_list()) {
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ void Node3D::_propagate_transform_changed(Node3D *p_origin) {
|
|||||||
E->get()->_propagate_transform_changed(p_origin);
|
E->get()->_propagate_transform_changed(p_origin);
|
||||||
}
|
}
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
if ((data.gizmo.is_valid() || data.notify_transform) && !data.ignore_notification && !xform_change.in_list()) {
|
if ((!data.gizmos.is_empty() || data.notify_transform) && !data.ignore_notification && !xform_change.in_list()) {
|
||||||
#else
|
#else
|
||||||
if (data.notify_transform && !data.ignore_notification && !xform_change.in_list()) {
|
if (data.notify_transform && !data.ignore_notification && !xform_change.in_list()) {
|
||||||
#endif
|
#endif
|
||||||
@ -181,15 +181,14 @@ void Node3D::_notification(int p_what) {
|
|||||||
}
|
}
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
if (Engine::get_singleton()->is_editor_hint() && get_tree()->is_node_being_edited(this)) {
|
if (Engine::get_singleton()->is_editor_hint() && get_tree()->is_node_being_edited(this)) {
|
||||||
//get_scene()->call_group(SceneMainLoop::GROUP_CALL_REALTIME,SceneStringNames::get_singleton()->_spatial_editor_group,SceneStringNames::get_singleton()->_request_gizmo,this);
|
|
||||||
get_tree()->call_group_flags(0, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_request_gizmo, this);
|
get_tree()->call_group_flags(0, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_request_gizmo, this);
|
||||||
if (!data.gizmo_disabled) {
|
if (!data.gizmos_disabled) {
|
||||||
if (data.gizmo.is_valid()) {
|
for (int i = 0; i < data.gizmos.size(); i++) {
|
||||||
data.gizmo->create();
|
data.gizmos.write[i]->create();
|
||||||
if (is_visible_in_tree()) {
|
if (is_visible_in_tree()) {
|
||||||
data.gizmo->redraw();
|
data.gizmos.write[i]->redraw();
|
||||||
}
|
}
|
||||||
data.gizmo->transform();
|
data.gizmos.write[i]->transform();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -198,10 +197,7 @@ void Node3D::_notification(int p_what) {
|
|||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_EXIT_WORLD: {
|
case NOTIFICATION_EXIT_WORLD: {
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
if (data.gizmo.is_valid()) {
|
clear_gizmos();
|
||||||
data.gizmo->free();
|
|
||||||
data.gizmo.unref();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (get_script_instance()) {
|
if (get_script_instance()) {
|
||||||
@ -215,8 +211,8 @@ void Node3D::_notification(int p_what) {
|
|||||||
|
|
||||||
case NOTIFICATION_TRANSFORM_CHANGED: {
|
case NOTIFICATION_TRANSFORM_CHANGED: {
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
if (data.gizmo.is_valid()) {
|
for (int i = 0; i < data.gizmos.size(); i++) {
|
||||||
data.gizmo->transform();
|
data.gizmos.write[i]->transform();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
} break;
|
} break;
|
||||||
@ -368,80 +364,119 @@ Vector3 Node3D::get_scale() const {
|
|||||||
return data.scale;
|
return data.scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node3D::update_gizmo() {
|
void Node3D::update_gizmos() {
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
if (!is_inside_world()) {
|
if (!is_inside_world()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!data.gizmo.is_valid()) {
|
|
||||||
get_tree()->call_group_flags(SceneTree::GROUP_CALL_REALTIME, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_request_gizmo, this);
|
if (data.gizmos.is_empty()) {
|
||||||
}
|
|
||||||
if (!data.gizmo.is_valid()) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (data.gizmo_dirty) {
|
data.gizmos_dirty = true;
|
||||||
return;
|
MessageQueue::get_singleton()->push_callable(callable_mp(this, &Node3D::_update_gizmos));
|
||||||
}
|
|
||||||
data.gizmo_dirty = true;
|
|
||||||
MessageQueue::get_singleton()->push_call(this, "_update_gizmo");
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node3D::set_gizmo(const Ref<Node3DGizmo> &p_gizmo) {
|
void Node3D::clear_subgizmo_selection() {
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
|
if (!is_inside_world()) {
|
||||||
if (data.gizmo_disabled) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (data.gizmo.is_valid() && is_inside_world()) {
|
|
||||||
data.gizmo->free();
|
if (data.gizmos.is_empty()) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
data.gizmo = p_gizmo;
|
|
||||||
if (data.gizmo.is_valid() && is_inside_world()) {
|
if (Engine::get_singleton()->is_editor_hint() && get_tree()->is_node_being_edited(this)) {
|
||||||
data.gizmo->create();
|
get_tree()->call_group_flags(0, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_clear_subgizmo_selection, this);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void Node3D::add_gizmo(Ref<Node3DGizmo> p_gizmo) {
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
|
||||||
|
if (data.gizmos_disabled || p_gizmo.is_null()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
data.gizmos.push_back(p_gizmo);
|
||||||
|
|
||||||
|
if (p_gizmo.is_valid() && is_inside_world()) {
|
||||||
|
p_gizmo->create();
|
||||||
if (is_visible_in_tree()) {
|
if (is_visible_in_tree()) {
|
||||||
data.gizmo->redraw();
|
p_gizmo->redraw();
|
||||||
}
|
}
|
||||||
data.gizmo->transform();
|
p_gizmo->transform();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
Ref<Node3DGizmo> Node3D::get_gizmo() const {
|
void Node3D::remove_gizmo(Ref<Node3DGizmo> p_gizmo) {
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
|
|
||||||
return data.gizmo;
|
int idx = data.gizmos.find(p_gizmo);
|
||||||
|
if (idx != -1) {
|
||||||
|
p_gizmo->free();
|
||||||
|
data.gizmos.remove(idx);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void Node3D::clear_gizmos() {
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
for (int i = 0; i < data.gizmos.size(); i++) {
|
||||||
|
data.gizmos.write[i]->free();
|
||||||
|
}
|
||||||
|
data.gizmos.clear();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
Array Node3D::get_gizmos_bind() const {
|
||||||
|
Array ret;
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
for (int i = 0; i < data.gizmos.size(); i++) {
|
||||||
|
ret.push_back(Variant(data.gizmos[i].ptr()));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector<Ref<Node3DGizmo>> Node3D::get_gizmos() const {
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
|
||||||
|
return data.gizmos;
|
||||||
#else
|
#else
|
||||||
|
|
||||||
return Ref<Node3DGizmo>();
|
return Vector<Ref<Node3DGizmo>>();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node3D::_update_gizmo() {
|
void Node3D::_update_gizmos() {
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
if (!is_inside_world()) {
|
if (data.gizmos_disabled || !is_inside_world() || !data.gizmos_dirty) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
data.gizmo_dirty = false;
|
data.gizmos_dirty = false;
|
||||||
if (data.gizmo.is_valid()) {
|
for (int i = 0; i < data.gizmos.size(); i++) {
|
||||||
if (is_visible_in_tree()) {
|
if (is_visible_in_tree()) {
|
||||||
data.gizmo->redraw();
|
data.gizmos.write[i]->redraw();
|
||||||
} else {
|
} else {
|
||||||
data.gizmo->clear();
|
data.gizmos.write[i]->clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
void Node3D::set_disable_gizmo(bool p_enabled) {
|
void Node3D::set_disable_gizmos(bool p_enabled) {
|
||||||
data.gizmo_disabled = p_enabled;
|
data.gizmos_disabled = p_enabled;
|
||||||
if (!p_enabled && data.gizmo.is_valid()) {
|
if (!p_enabled) {
|
||||||
data.gizmo = Ref<Node3DGizmo>();
|
clear_gizmos();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void Node3D::set_disable_scale(bool p_enabled) {
|
void Node3D::set_disable_scale(bool p_enabled) {
|
||||||
@ -486,8 +521,9 @@ void Node3D::_propagate_visibility_changed() {
|
|||||||
notification(NOTIFICATION_VISIBILITY_CHANGED);
|
notification(NOTIFICATION_VISIBILITY_CHANGED);
|
||||||
emit_signal(SceneStringNames::get_singleton()->visibility_changed);
|
emit_signal(SceneStringNames::get_singleton()->visibility_changed);
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
if (data.gizmo.is_valid()) {
|
if (!data.gizmos.is_empty()) {
|
||||||
_update_gizmo();
|
data.gizmos_dirty = true;
|
||||||
|
_update_gizmos();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -758,11 +794,11 @@ void Node3D::_bind_methods() {
|
|||||||
ClassDB::bind_method(D_METHOD("set_visibility_parent", "path"), &Node3D::set_visibility_parent);
|
ClassDB::bind_method(D_METHOD("set_visibility_parent", "path"), &Node3D::set_visibility_parent);
|
||||||
ClassDB::bind_method(D_METHOD("get_visibility_parent"), &Node3D::get_visibility_parent);
|
ClassDB::bind_method(D_METHOD("get_visibility_parent"), &Node3D::get_visibility_parent);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("_update_gizmo"), &Node3D::_update_gizmo);
|
ClassDB::bind_method(D_METHOD("update_gizmos"), &Node3D::update_gizmos);
|
||||||
|
ClassDB::bind_method(D_METHOD("add_gizmo", "gizmo"), &Node3D::add_gizmo);
|
||||||
ClassDB::bind_method(D_METHOD("update_gizmo"), &Node3D::update_gizmo);
|
ClassDB::bind_method(D_METHOD("get_gizmos"), &Node3D::get_gizmos_bind);
|
||||||
ClassDB::bind_method(D_METHOD("set_gizmo", "gizmo"), &Node3D::set_gizmo);
|
ClassDB::bind_method(D_METHOD("clear_gizmos"), &Node3D::clear_gizmos);
|
||||||
ClassDB::bind_method(D_METHOD("get_gizmo"), &Node3D::get_gizmo);
|
ClassDB::bind_method(D_METHOD("clear_subgizmo_selection"), &Node3D::clear_subgizmo_selection);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_visible", "visible"), &Node3D::set_visible);
|
ClassDB::bind_method(D_METHOD("set_visible", "visible"), &Node3D::set_visible);
|
||||||
ClassDB::bind_method(D_METHOD("is_visible"), &Node3D::is_visible);
|
ClassDB::bind_method(D_METHOD("is_visible"), &Node3D::is_visible);
|
||||||
@ -813,7 +849,6 @@ void Node3D::_bind_methods() {
|
|||||||
ADD_GROUP("Visibility", "");
|
ADD_GROUP("Visibility", "");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "visible"), "set_visible", "is_visible");
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "visible"), "set_visible", "is_visible");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "visibility_parent", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "GeometryInstance3D"), "set_visibility_parent", "get_visibility_parent");
|
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "visibility_parent", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "GeometryInstance3D"), "set_visibility_parent", "get_visibility_parent");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "gizmo", PROPERTY_HINT_RESOURCE_TYPE, "Node3DGizmo", PROPERTY_USAGE_NONE), "set_gizmo", "get_gizmo");
|
|
||||||
|
|
||||||
ADD_SIGNAL(MethodInfo("visibility_changed"));
|
ADD_SIGNAL(MethodInfo("visibility_changed"));
|
||||||
}
|
}
|
||||||
|
@ -90,16 +90,16 @@ class Node3D : public Node {
|
|||||||
bool disable_scale = false;
|
bool disable_scale = false;
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
Ref<Node3DGizmo> gizmo;
|
Vector<Ref<Node3DGizmo>> gizmos;
|
||||||
bool gizmo_disabled = false;
|
bool gizmos_disabled = false;
|
||||||
bool gizmo_dirty = false;
|
bool gizmos_dirty = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} data;
|
} data;
|
||||||
|
|
||||||
NodePath visibility_parent_path;
|
NodePath visibility_parent_path;
|
||||||
|
|
||||||
void _update_gizmo();
|
void _update_gizmos();
|
||||||
void _notify_dirty();
|
void _notify_dirty();
|
||||||
void _propagate_transform_changed(Node3D *p_origin);
|
void _propagate_transform_changed(Node3D *p_origin);
|
||||||
|
|
||||||
@ -154,10 +154,14 @@ public:
|
|||||||
void set_disable_scale(bool p_enabled);
|
void set_disable_scale(bool p_enabled);
|
||||||
bool is_scale_disabled() const;
|
bool is_scale_disabled() const;
|
||||||
|
|
||||||
void set_disable_gizmo(bool p_enabled);
|
void set_disable_gizmos(bool p_enabled);
|
||||||
void update_gizmo();
|
void update_gizmos();
|
||||||
void set_gizmo(const Ref<Node3DGizmo> &p_gizmo);
|
void clear_subgizmo_selection();
|
||||||
Ref<Node3DGizmo> get_gizmo() const;
|
Vector<Ref<Node3DGizmo>> get_gizmos() const;
|
||||||
|
Array get_gizmos_bind() const;
|
||||||
|
void add_gizmo(Ref<Node3DGizmo> p_gizmo);
|
||||||
|
void remove_gizmo(Ref<Node3DGizmo> p_gizmo);
|
||||||
|
void clear_gizmos();
|
||||||
|
|
||||||
_FORCE_INLINE_ bool is_inside_world() const { return data.inside_world; }
|
_FORCE_INLINE_ bool is_inside_world() const { return data.inside_world; }
|
||||||
|
|
||||||
|
@ -173,12 +173,12 @@ void OccluderInstance3D::set_occluder(const Ref<Occluder3D> &p_occluder) {
|
|||||||
set_base(RID());
|
set_base(RID());
|
||||||
}
|
}
|
||||||
|
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
update_configuration_warnings();
|
update_configuration_warnings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OccluderInstance3D::_occluder_changed() {
|
void OccluderInstance3D::_occluder_changed() {
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
update_configuration_warnings();
|
update_configuration_warnings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ void Path3D::_notification(int p_what) {
|
|||||||
|
|
||||||
void Path3D::_curve_changed() {
|
void Path3D::_curve_changed() {
|
||||||
if (is_inside_tree() && Engine::get_singleton()->is_editor_hint()) {
|
if (is_inside_tree() && Engine::get_singleton()->is_editor_hint()) {
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
if (is_inside_tree()) {
|
if (is_inside_tree()) {
|
||||||
emit_signal(SNAME("curve_changed"));
|
emit_signal(SNAME("curve_changed"));
|
||||||
|
@ -2181,9 +2181,7 @@ bool PhysicalBone3D::_set(const StringName &p_name, const Variant &p_value) {
|
|||||||
if (joint_data) {
|
if (joint_data) {
|
||||||
if (joint_data->_set(p_name, p_value, joint)) {
|
if (joint_data->_set(p_name, p_value, joint)) {
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
if (get_gizmo().is_valid()) {
|
update_gizmos();
|
||||||
get_gizmo()->redraw();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -2371,9 +2369,7 @@ void PhysicalBone3D::_update_joint_offset() {
|
|||||||
set_ignore_transform_notification(false);
|
set_ignore_transform_notification(false);
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
if (get_gizmo().is_valid()) {
|
update_gizmos();
|
||||||
get_gizmo()->redraw();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2540,9 +2536,7 @@ void PhysicalBone3D::set_joint_type(JointType p_joint_type) {
|
|||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
notify_property_list_changed();
|
notify_property_list_changed();
|
||||||
if (get_gizmo().is_valid()) {
|
update_gizmos();
|
||||||
get_gizmo()->redraw();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -348,7 +348,7 @@ void HingeJoint3D::set_param(Param p_param, real_t p_value) {
|
|||||||
PhysicsServer3D::get_singleton()->hinge_joint_set_param(get_joint(), PhysicsServer3D::HingeJointParam(p_param), p_value);
|
PhysicsServer3D::get_singleton()->hinge_joint_set_param(get_joint(), PhysicsServer3D::HingeJointParam(p_param), p_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
real_t HingeJoint3D::get_param(Param p_param) const {
|
real_t HingeJoint3D::get_param(Param p_param) const {
|
||||||
@ -363,7 +363,7 @@ void HingeJoint3D::set_flag(Flag p_flag, bool p_value) {
|
|||||||
PhysicsServer3D::get_singleton()->hinge_joint_set_flag(get_joint(), PhysicsServer3D::HingeJointFlag(p_flag), p_value);
|
PhysicsServer3D::get_singleton()->hinge_joint_set_flag(get_joint(), PhysicsServer3D::HingeJointFlag(p_flag), p_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HingeJoint3D::get_flag(Flag p_flag) const {
|
bool HingeJoint3D::get_flag(Flag p_flag) const {
|
||||||
@ -497,7 +497,7 @@ void SliderJoint3D::set_param(Param p_param, real_t p_value) {
|
|||||||
if (is_configured()) {
|
if (is_configured()) {
|
||||||
PhysicsServer3D::get_singleton()->slider_joint_set_param(get_joint(), PhysicsServer3D::SliderJointParam(p_param), p_value);
|
PhysicsServer3D::get_singleton()->slider_joint_set_param(get_joint(), PhysicsServer3D::SliderJointParam(p_param), p_value);
|
||||||
}
|
}
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
real_t SliderJoint3D::get_param(Param p_param) const {
|
real_t SliderJoint3D::get_param(Param p_param) const {
|
||||||
@ -602,7 +602,7 @@ void ConeTwistJoint3D::set_param(Param p_param, real_t p_value) {
|
|||||||
PhysicsServer3D::get_singleton()->cone_twist_joint_set_param(get_joint(), PhysicsServer3D::ConeTwistJointParam(p_param), p_value);
|
PhysicsServer3D::get_singleton()->cone_twist_joint_set_param(get_joint(), PhysicsServer3D::ConeTwistJointParam(p_param), p_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
real_t ConeTwistJoint3D::get_param(Param p_param) const {
|
real_t ConeTwistJoint3D::get_param(Param p_param) const {
|
||||||
@ -857,7 +857,7 @@ void Generic6DOFJoint3D::set_param_x(Param p_param, real_t p_value) {
|
|||||||
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(get_joint(), Vector3::AXIS_X, PhysicsServer3D::G6DOFJointAxisParam(p_param), p_value);
|
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(get_joint(), Vector3::AXIS_X, PhysicsServer3D::G6DOFJointAxisParam(p_param), p_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
real_t Generic6DOFJoint3D::get_param_x(Param p_param) const {
|
real_t Generic6DOFJoint3D::get_param_x(Param p_param) const {
|
||||||
@ -871,7 +871,7 @@ void Generic6DOFJoint3D::set_param_y(Param p_param, real_t p_value) {
|
|||||||
if (is_configured()) {
|
if (is_configured()) {
|
||||||
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(get_joint(), Vector3::AXIS_Y, PhysicsServer3D::G6DOFJointAxisParam(p_param), p_value);
|
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(get_joint(), Vector3::AXIS_Y, PhysicsServer3D::G6DOFJointAxisParam(p_param), p_value);
|
||||||
}
|
}
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
real_t Generic6DOFJoint3D::get_param_y(Param p_param) const {
|
real_t Generic6DOFJoint3D::get_param_y(Param p_param) const {
|
||||||
@ -885,7 +885,7 @@ void Generic6DOFJoint3D::set_param_z(Param p_param, real_t p_value) {
|
|||||||
if (is_configured()) {
|
if (is_configured()) {
|
||||||
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(get_joint(), Vector3::AXIS_Z, PhysicsServer3D::G6DOFJointAxisParam(p_param), p_value);
|
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_param(get_joint(), Vector3::AXIS_Z, PhysicsServer3D::G6DOFJointAxisParam(p_param), p_value);
|
||||||
}
|
}
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
real_t Generic6DOFJoint3D::get_param_z(Param p_param) const {
|
real_t Generic6DOFJoint3D::get_param_z(Param p_param) const {
|
||||||
@ -899,7 +899,7 @@ void Generic6DOFJoint3D::set_flag_x(Flag p_flag, bool p_enabled) {
|
|||||||
if (is_configured()) {
|
if (is_configured()) {
|
||||||
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_flag(get_joint(), Vector3::AXIS_X, PhysicsServer3D::G6DOFJointAxisFlag(p_flag), p_enabled);
|
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_flag(get_joint(), Vector3::AXIS_X, PhysicsServer3D::G6DOFJointAxisFlag(p_flag), p_enabled);
|
||||||
}
|
}
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Generic6DOFJoint3D::get_flag_x(Flag p_flag) const {
|
bool Generic6DOFJoint3D::get_flag_x(Flag p_flag) const {
|
||||||
@ -913,7 +913,7 @@ void Generic6DOFJoint3D::set_flag_y(Flag p_flag, bool p_enabled) {
|
|||||||
if (is_configured()) {
|
if (is_configured()) {
|
||||||
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_flag(get_joint(), Vector3::AXIS_Y, PhysicsServer3D::G6DOFJointAxisFlag(p_flag), p_enabled);
|
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_flag(get_joint(), Vector3::AXIS_Y, PhysicsServer3D::G6DOFJointAxisFlag(p_flag), p_enabled);
|
||||||
}
|
}
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Generic6DOFJoint3D::get_flag_y(Flag p_flag) const {
|
bool Generic6DOFJoint3D::get_flag_y(Flag p_flag) const {
|
||||||
@ -927,7 +927,7 @@ void Generic6DOFJoint3D::set_flag_z(Flag p_flag, bool p_enabled) {
|
|||||||
if (is_configured()) {
|
if (is_configured()) {
|
||||||
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_flag(get_joint(), Vector3::AXIS_Z, PhysicsServer3D::G6DOFJointAxisFlag(p_flag), p_enabled);
|
PhysicsServer3D::get_singleton()->generic_6dof_joint_set_flag(get_joint(), Vector3::AXIS_Z, PhysicsServer3D::G6DOFJointAxisFlag(p_flag), p_enabled);
|
||||||
}
|
}
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Generic6DOFJoint3D::get_flag_z(Flag p_flag) const {
|
bool Generic6DOFJoint3D::get_flag_z(Flag p_flag) const {
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
void RayCast3D::set_target_position(const Vector3 &p_point) {
|
void RayCast3D::set_target_position(const Vector3 &p_point) {
|
||||||
target_position = p_point;
|
target_position = p_point;
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
|
|
||||||
if (Engine::get_singleton()->is_editor_hint()) {
|
if (Engine::get_singleton()->is_editor_hint()) {
|
||||||
if (is_inside_tree()) {
|
if (is_inside_tree()) {
|
||||||
@ -102,7 +102,7 @@ Vector3 RayCast3D::get_collision_normal() const {
|
|||||||
|
|
||||||
void RayCast3D::set_enabled(bool p_enabled) {
|
void RayCast3D::set_enabled(bool p_enabled) {
|
||||||
enabled = p_enabled;
|
enabled = p_enabled;
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
|
|
||||||
if (is_inside_tree() && !Engine::get_singleton()->is_editor_hint()) {
|
if (is_inside_tree() && !Engine::get_singleton()->is_editor_hint()) {
|
||||||
set_physics_process_internal(p_enabled);
|
set_physics_process_internal(p_enabled);
|
||||||
@ -366,7 +366,7 @@ void RayCast3D::_update_debug_shape_vertices() {
|
|||||||
|
|
||||||
void RayCast3D::set_debug_shape_thickness(const float p_debug_shape_thickness) {
|
void RayCast3D::set_debug_shape_thickness(const float p_debug_shape_thickness) {
|
||||||
debug_shape_thickness = p_debug_shape_thickness;
|
debug_shape_thickness = p_debug_shape_thickness;
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
|
|
||||||
if (Engine::get_singleton()->is_editor_hint()) {
|
if (Engine::get_singleton()->is_editor_hint()) {
|
||||||
if (is_inside_tree()) {
|
if (is_inside_tree()) {
|
||||||
|
@ -101,7 +101,7 @@ void ReflectionProbe::set_extents(const Vector3 &p_extents) {
|
|||||||
RS::get_singleton()->reflection_probe_set_extents(probe, extents);
|
RS::get_singleton()->reflection_probe_set_extents(probe, extents);
|
||||||
RS::get_singleton()->reflection_probe_set_origin_offset(probe, origin_offset);
|
RS::get_singleton()->reflection_probe_set_origin_offset(probe, origin_offset);
|
||||||
|
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3 ReflectionProbe::get_extents() const {
|
Vector3 ReflectionProbe::get_extents() const {
|
||||||
@ -119,7 +119,7 @@ void ReflectionProbe::set_origin_offset(const Vector3 &p_extents) {
|
|||||||
RS::get_singleton()->reflection_probe_set_extents(probe, extents);
|
RS::get_singleton()->reflection_probe_set_extents(probe, extents);
|
||||||
RS::get_singleton()->reflection_probe_set_origin_offset(probe, origin_offset);
|
RS::get_singleton()->reflection_probe_set_origin_offset(probe, origin_offset);
|
||||||
|
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3 ReflectionProbe::get_origin_offset() const {
|
Vector3 ReflectionProbe::get_origin_offset() const {
|
||||||
|
@ -404,7 +404,7 @@ void Skeleton3D::add_bone(const String &p_name) {
|
|||||||
process_order_dirty = true;
|
process_order_dirty = true;
|
||||||
version++;
|
version++;
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
int Skeleton3D::find_bone(const String &p_name) const {
|
int Skeleton3D::find_bone(const String &p_name) const {
|
||||||
|
@ -84,7 +84,7 @@ real_t SpringArm3D::get_length() const {
|
|||||||
|
|
||||||
void SpringArm3D::set_length(real_t p_length) {
|
void SpringArm3D::set_length(real_t p_length) {
|
||||||
if (is_inside_tree() && (Engine::get_singleton()->is_editor_hint() || get_tree()->is_debugging_collisions_hint())) {
|
if (is_inside_tree() && (Engine::get_singleton()->is_editor_hint() || get_tree()->is_debugging_collisions_hint())) {
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
spring_length = p_length;
|
spring_length = p_length;
|
||||||
|
@ -174,7 +174,7 @@ void SpriteBase3D::_queue_update() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
triangle_mesh.unref();
|
triangle_mesh.unref();
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
|
|
||||||
pending_update = true;
|
pending_update = true;
|
||||||
call_deferred(SceneStringNames::get_singleton()->_im_update);
|
call_deferred(SceneStringNames::get_singleton()->_im_update);
|
||||||
|
@ -149,7 +149,7 @@ void VehicleWheel3D::_update(PhysicsDirectBodyState3D *s) {
|
|||||||
|
|
||||||
void VehicleWheel3D::set_radius(real_t p_radius) {
|
void VehicleWheel3D::set_radius(real_t p_radius) {
|
||||||
m_wheelRadius = p_radius;
|
m_wheelRadius = p_radius;
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
real_t VehicleWheel3D::get_radius() const {
|
real_t VehicleWheel3D::get_radius() const {
|
||||||
@ -158,7 +158,7 @@ real_t VehicleWheel3D::get_radius() const {
|
|||||||
|
|
||||||
void VehicleWheel3D::set_suspension_rest_length(real_t p_length) {
|
void VehicleWheel3D::set_suspension_rest_length(real_t p_length) {
|
||||||
m_suspensionRestLength = p_length;
|
m_suspensionRestLength = p_length;
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
real_t VehicleWheel3D::get_suspension_rest_length() const {
|
real_t VehicleWheel3D::get_suspension_rest_length() const {
|
||||||
|
@ -63,7 +63,7 @@ void VisibleOnScreenNotifier3D::set_aabb(const AABB &p_aabb) {
|
|||||||
|
|
||||||
RS::get_singleton()->visibility_notifier_set_aabb(get_base(), aabb);
|
RS::get_singleton()->visibility_notifier_set_aabb(get_base(), aabb);
|
||||||
|
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
AABB VisibleOnScreenNotifier3D::get_aabb() const {
|
AABB VisibleOnScreenNotifier3D::get_aabb() const {
|
||||||
|
@ -265,7 +265,7 @@ Ref<VoxelGIData> VoxelGI::get_probe_data() const {
|
|||||||
void VoxelGI::set_subdiv(Subdiv p_subdiv) {
|
void VoxelGI::set_subdiv(Subdiv p_subdiv) {
|
||||||
ERR_FAIL_INDEX(p_subdiv, SUBDIV_MAX);
|
ERR_FAIL_INDEX(p_subdiv, SUBDIV_MAX);
|
||||||
subdiv = p_subdiv;
|
subdiv = p_subdiv;
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
VoxelGI::Subdiv VoxelGI::get_subdiv() const {
|
VoxelGI::Subdiv VoxelGI::get_subdiv() const {
|
||||||
@ -274,7 +274,7 @@ VoxelGI::Subdiv VoxelGI::get_subdiv() const {
|
|||||||
|
|
||||||
void VoxelGI::set_extents(const Vector3 &p_extents) {
|
void VoxelGI::set_extents(const Vector3 &p_extents) {
|
||||||
extents = p_extents;
|
extents = p_extents;
|
||||||
update_gizmo();
|
update_gizmos();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3 VoxelGI::get_extents() const {
|
Vector3 VoxelGI::get_extents() const {
|
||||||
|
@ -136,6 +136,7 @@ SceneStringNames::SceneStringNames() {
|
|||||||
|
|
||||||
_spatial_editor_group = StaticCString::create("_spatial_editor_group");
|
_spatial_editor_group = StaticCString::create("_spatial_editor_group");
|
||||||
_request_gizmo = StaticCString::create("_request_gizmo");
|
_request_gizmo = StaticCString::create("_request_gizmo");
|
||||||
|
_clear_subgizmo_selection = StaticCString::create("_clear_subgizmo_selection");
|
||||||
|
|
||||||
offset = StaticCString::create("offset");
|
offset = StaticCString::create("offset");
|
||||||
unit_offset = StaticCString::create("unit_offset");
|
unit_offset = StaticCString::create("unit_offset");
|
||||||
|
@ -156,6 +156,7 @@ public:
|
|||||||
|
|
||||||
StringName _spatial_editor_group;
|
StringName _spatial_editor_group;
|
||||||
StringName _request_gizmo;
|
StringName _request_gizmo;
|
||||||
|
StringName _clear_subgizmo_selection;
|
||||||
|
|
||||||
StringName offset;
|
StringName offset;
|
||||||
StringName unit_offset;
|
StringName unit_offset;
|
||||||
|
Loading…
Reference in New Issue
Block a user