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 }