1 /** 2 Defines a 2D collision polygon. 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.collisionpolygon2d; 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.node2d; 24 import godot.canvasitem; 25 import godot.node; 26 /** 27 Defines a 2D collision polygon. 28 29 Provides a 2D collision polygon to a $(D CollisionObject2D) parent. Polygon can be drawn in the editor or specified by a list of vertices. 30 */ 31 @GodotBaseClass struct CollisionPolygon2D 32 { 33 enum string _GODOT_internal_name = "CollisionPolygon2D"; 34 public: 35 @nogc nothrow: 36 union { godot_object _godot_object; Node2D _GODOT_base; } 37 alias _GODOT_base this; 38 alias BaseClasses = AliasSeq!(typeof(_GODOT_base), typeof(_GODOT_base).BaseClasses); 39 package(godot) __gshared bool _classBindingInitialized = false; 40 package(godot) static struct _classBinding 41 { 42 __gshared: 43 @GodotName("set_polygon") GodotMethod!(void, PoolVector2Array) setPolygon; 44 @GodotName("get_polygon") GodotMethod!(PoolVector2Array) getPolygon; 45 @GodotName("set_build_mode") GodotMethod!(void, long) setBuildMode; 46 @GodotName("get_build_mode") GodotMethod!(CollisionPolygon2D.BuildMode) getBuildMode; 47 @GodotName("set_disabled") GodotMethod!(void, bool) setDisabled; 48 @GodotName("is_disabled") GodotMethod!(bool) isDisabled; 49 @GodotName("set_one_way_collision") GodotMethod!(void, bool) setOneWayCollision; 50 @GodotName("is_one_way_collision_enabled") GodotMethod!(bool) isOneWayCollisionEnabled; 51 } 52 bool opEquals(in CollisionPolygon2D other) const { return _godot_object.ptr is other._godot_object.ptr; } 53 CollisionPolygon2D opAssign(T : typeof(null))(T n) { _godot_object.ptr = null; } 54 bool opEquals(typeof(null) n) const { return _godot_object.ptr is null; } 55 mixin baseCasts; 56 static CollisionPolygon2D _new() 57 { 58 static godot_class_constructor constructor; 59 if(constructor is null) constructor = _godot_api.godot_get_class_constructor("CollisionPolygon2D"); 60 if(constructor is null) return typeof(this).init; 61 return cast(CollisionPolygon2D)(constructor()); 62 } 63 @disable new(size_t s); 64 /// 65 enum BuildMode : int 66 { 67 /** 68 Collisions will include the polygon and its contained area. 69 */ 70 buildSolids = 0, 71 /** 72 Collisions will only include the polygon edges. 73 */ 74 buildSegments = 1, 75 } 76 /// 77 enum Constants : int 78 { 79 buildSolids = 0, 80 buildSegments = 1, 81 } 82 /** 83 84 */ 85 void setPolygon(in PoolVector2Array polygon) 86 { 87 checkClassBinding!(typeof(this))(); 88 ptrcall!(void)(_classBinding.setPolygon, _godot_object, polygon); 89 } 90 /** 91 92 */ 93 PoolVector2Array getPolygon() const 94 { 95 checkClassBinding!(typeof(this))(); 96 return ptrcall!(PoolVector2Array)(_classBinding.getPolygon, _godot_object); 97 } 98 /** 99 100 */ 101 void setBuildMode(in long build_mode) 102 { 103 checkClassBinding!(typeof(this))(); 104 ptrcall!(void)(_classBinding.setBuildMode, _godot_object, build_mode); 105 } 106 /** 107 108 */ 109 CollisionPolygon2D.BuildMode getBuildMode() const 110 { 111 checkClassBinding!(typeof(this))(); 112 return ptrcall!(CollisionPolygon2D.BuildMode)(_classBinding.getBuildMode, _godot_object); 113 } 114 /** 115 116 */ 117 void setDisabled(in bool disabled) 118 { 119 checkClassBinding!(typeof(this))(); 120 ptrcall!(void)(_classBinding.setDisabled, _godot_object, disabled); 121 } 122 /** 123 124 */ 125 bool isDisabled() const 126 { 127 checkClassBinding!(typeof(this))(); 128 return ptrcall!(bool)(_classBinding.isDisabled, _godot_object); 129 } 130 /** 131 132 */ 133 void setOneWayCollision(in bool enabled) 134 { 135 checkClassBinding!(typeof(this))(); 136 ptrcall!(void)(_classBinding.setOneWayCollision, _godot_object, enabled); 137 } 138 /** 139 140 */ 141 bool isOneWayCollisionEnabled() const 142 { 143 checkClassBinding!(typeof(this))(); 144 return ptrcall!(bool)(_classBinding.isOneWayCollisionEnabled, _godot_object); 145 } 146 /** 147 Collision build mode. Use one of the `BUILD_*` constants. Default value: `BUILD_SOLIDS`. 148 */ 149 @property CollisionPolygon2D.BuildMode buildMode() 150 { 151 return getBuildMode(); 152 } 153 /// ditto 154 @property void buildMode(long v) 155 { 156 setBuildMode(v); 157 } 158 /** 159 The polygon's list of vertices. The final point will be connected to the first. 160 */ 161 @property PoolVector2Array polygon() 162 { 163 return getPolygon(); 164 } 165 /// ditto 166 @property void polygon(PoolVector2Array v) 167 { 168 setPolygon(v); 169 } 170 /** 171 If `true` no collisions will be detected. 172 */ 173 @property bool disabled() 174 { 175 return isDisabled(); 176 } 177 /// ditto 178 @property void disabled(bool v) 179 { 180 setDisabled(v); 181 } 182 /** 183 If `true` only edges that face up, relative to CollisionPolygon2D's rotation, will collide with other objects. 184 */ 185 @property bool oneWayCollision() 186 { 187 return isOneWayCollisionEnabled(); 188 } 189 /// ditto 190 @property void oneWayCollision(bool v) 191 { 192 setOneWayCollision(v); 193 } 194 }