1 /**
2 Custom gizmo for editing Spatial objects.
3 
4 Copyright:
5 Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur.  
6 Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md)  
7 Copyright (c) 2017-2018 Godot-D contributors  
8 
9 License: $(LINK2 https://opensource.org/licenses/MIT, MIT License)
10 
11 
12 */
13 module godot.editorspatialgizmo;
14 import std.meta : AliasSeq, staticIndexOf;
15 import std.traits : Unqual;
16 import godot.d.meta;
17 import godot.core;
18 import godot.c;
19 import godot.d.bind;
20 import godot.d.reference;
21 import godot.object;
22 import godot.classdb;
23 import godot.spatialgizmo;
24 import godot.camera;
25 import godot.material;
26 import godot.arraymesh;
27 import godot.trianglemesh;
28 import godot.reference;
29 /**
30 Custom gizmo for editing Spatial objects.
31 
32 Custom gizmo that is used for providing custom visualization and editing (handles) for 3D Spatial objects. These are created by $(D EditorPlugin.createSpatialGizmo).
33 */
34 @GodotBaseClass struct EditorSpatialGizmo
35 {
36 	enum string _GODOT_internal_name = "EditorSpatialGizmo";
37 public:
38 @nogc nothrow:
39 	union { godot_object _godot_object; SpatialGizmo _GODOT_base; }
40 	alias _GODOT_base this;
41 	alias BaseClasses = AliasSeq!(typeof(_GODOT_base), typeof(_GODOT_base).BaseClasses);
42 	package(godot) __gshared bool _classBindingInitialized = false;
43 	package(godot) static struct _classBinding
44 	{
45 		__gshared:
46 		@GodotName("redraw") GodotMethod!(void) redraw;
47 		@GodotName("get_handle_name") GodotMethod!(String, long) getHandleName;
48 		@GodotName("get_handle_value") GodotMethod!(Variant, long) getHandleValue;
49 		@GodotName("set_handle") GodotMethod!(void, long, Camera, Vector2) setHandle;
50 		@GodotName("commit_handle") GodotMethod!(void, long, Variant, bool) commitHandle;
51 		@GodotName("add_lines") GodotMethod!(void, PoolVector3Array, Material, bool) addLines;
52 		@GodotName("add_mesh") GodotMethod!(void, ArrayMesh, bool, RID) addMesh;
53 		@GodotName("add_collision_segments") GodotMethod!(void, PoolVector3Array) addCollisionSegments;
54 		@GodotName("add_collision_triangles") GodotMethod!(void, TriangleMesh) addCollisionTriangles;
55 		@GodotName("add_unscaled_billboard") GodotMethod!(void, Material, double) addUnscaledBillboard;
56 		@GodotName("add_handles") GodotMethod!(void, PoolVector3Array, Material, bool, bool) addHandles;
57 		@GodotName("set_spatial_node") GodotMethod!(void, GodotObject) setSpatialNode;
58 		@GodotName("clear") GodotMethod!(void) clear;
59 		@GodotName("set_hidden") GodotMethod!(void, bool) setHidden;
60 	}
61 	bool opEquals(in EditorSpatialGizmo other) const { return _godot_object.ptr is other._godot_object.ptr; }
62 	EditorSpatialGizmo opAssign(T : typeof(null))(T n) { _godot_object.ptr = null; }
63 	bool opEquals(typeof(null) n) const { return _godot_object.ptr is null; }
64 	mixin baseCasts;
65 	static EditorSpatialGizmo _new()
66 	{
67 		static godot_class_constructor constructor;
68 		if(constructor is null) constructor = _godot_api.godot_get_class_constructor("EditorSpatialGizmo");
69 		if(constructor is null) return typeof(this).init;
70 		return cast(EditorSpatialGizmo)(constructor());
71 	}
72 	@disable new(size_t s);
73 	/**
74 	This function is called when the Spatial this gizmo refers to changes (the $(D Spatial.updateGizmo) is called).
75 	*/
76 	void redraw()
77 	{
78 		Array _GODOT_args = Array.empty_array;
79 		String _GODOT_method_name = String("redraw");
80 		this.callv(_GODOT_method_name, _GODOT_args);
81 	}
82 	/**
83 	Get the name of an edited handle (handles must have been previously added by $(D addHandles)).
84 	Handles can be named for reference to the user when editing.
85 	*/
86 	String getHandleName(in long index)
87 	{
88 		Array _GODOT_args = Array.empty_array;
89 		_GODOT_args.append(index);
90 		String _GODOT_method_name = String("get_handle_name");
91 		return this.callv(_GODOT_method_name, _GODOT_args).as!(RefOrT!String);
92 	}
93 	/**
94 	Get actual value of a handle. This value can be anything and used for eventually undoing the motion when calling $(D commitHandle)
95 	*/
96 	Variant getHandleValue(in long index)
97 	{
98 		Array _GODOT_args = Array.empty_array;
99 		_GODOT_args.append(index);
100 		String _GODOT_method_name = String("get_handle_value");
101 		return this.callv(_GODOT_method_name, _GODOT_args);
102 	}
103 	/**
104 	This function is used when the user drags a gizmo handle (previously added with $(D addHandles)) in screen coordinates.
105 	The $(D Camera) is also provided so screen coordinates can be converted to raycasts.
106 	*/
107 	void setHandle(in long index, Camera camera, in Vector2 point)
108 	{
109 		Array _GODOT_args = Array.empty_array;
110 		_GODOT_args.append(index);
111 		_GODOT_args.append(camera);
112 		_GODOT_args.append(point);
113 		String _GODOT_method_name = String("set_handle");
114 		this.callv(_GODOT_method_name, _GODOT_args);
115 	}
116 	/**
117 	Commit a handle being edited (handles must have been previously added by $(D addHandles)).
118 	If the cancel parameter is true, an option to restore the edited value to the original is provided.
119 	*/
120 	void commitHandle(VariantArg1)(in long index, in VariantArg1 restore, in bool cancel)
121 	{
122 		Array _GODOT_args = Array.empty_array;
123 		_GODOT_args.append(index);
124 		_GODOT_args.append(restore);
125 		_GODOT_args.append(cancel);
126 		String _GODOT_method_name = String("commit_handle");
127 		this.callv(_GODOT_method_name, _GODOT_args);
128 	}
129 	/**
130 	Add 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 $(D redraw).
131 	*/
132 	void addLines(in PoolVector3Array lines, Material material, in bool billboard = false)
133 	{
134 		checkClassBinding!(typeof(this))();
135 		ptrcall!(void)(_classBinding.addLines, _godot_object, lines, material, billboard);
136 	}
137 	/**
138 	
139 	*/
140 	void addMesh(ArrayMesh mesh, in bool billboard = false, in RID skeleton = RID.init)
141 	{
142 		checkClassBinding!(typeof(this))();
143 		ptrcall!(void)(_classBinding.addMesh, _godot_object, mesh, billboard, skeleton);
144 	}
145 	/**
146 	
147 	*/
148 	void addCollisionSegments(in PoolVector3Array segments)
149 	{
150 		checkClassBinding!(typeof(this))();
151 		ptrcall!(void)(_classBinding.addCollisionSegments, _godot_object, segments);
152 	}
153 	/**
154 	Add collision triangles to the gizmo for picking. A $(D TriangleMesh) can be generated from a regular $(D Mesh) too. Call this function during $(D redraw).
155 	*/
156 	void addCollisionTriangles(TriangleMesh triangles)
157 	{
158 		checkClassBinding!(typeof(this))();
159 		ptrcall!(void)(_classBinding.addCollisionTriangles, _godot_object, triangles);
160 	}
161 	/**
162 	Add an unscaled billboard for visualization. Call this function during $(D redraw).
163 	*/
164 	void addUnscaledBillboard(Material material, in double default_scale = 1)
165 	{
166 		checkClassBinding!(typeof(this))();
167 		ptrcall!(void)(_classBinding.addUnscaledBillboard, _godot_object, material, default_scale);
168 	}
169 	/**
170 	Add a list of handles (points) which can be used to deform the object being edited.
171 	There are virtual functions which will be called upon editing of these handles. Call this function during $(D redraw).
172 	*/
173 	void addHandles(in PoolVector3Array handles, Material material, in bool billboard = false, in bool secondary = false)
174 	{
175 		checkClassBinding!(typeof(this))();
176 		ptrcall!(void)(_classBinding.addHandles, _godot_object, handles, material, billboard, secondary);
177 	}
178 	/**
179 	
180 	*/
181 	void setSpatialNode(GodotObject node)
182 	{
183 		checkClassBinding!(typeof(this))();
184 		ptrcall!(void)(_classBinding.setSpatialNode, _godot_object, node);
185 	}
186 	/**
187 	
188 	*/
189 	void clear()
190 	{
191 		checkClassBinding!(typeof(this))();
192 		ptrcall!(void)(_classBinding.clear, _godot_object);
193 	}
194 	/**
195 	
196 	*/
197 	void setHidden(in bool hidden)
198 	{
199 		checkClassBinding!(typeof(this))();
200 		ptrcall!(void)(_classBinding.setHidden, _godot_object, hidden);
201 	}
202 }