1 /**
2 Line shape for 2D collisions.
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.lineshape2d;
14 import std.meta : AliasSeq, staticIndexOf;
15 import std.traits : Unqual;
16 import godot.d.traits;
17 import godot.core;
18 import godot.c;
19 import godot.d.bind;
20 import godot.d.reference;
21 import godot.globalenums;
22 import godot.object;
23 import godot.classdb;
24 import godot.shape2d;
25 /**
26 Line shape for 2D collisions.
27 
28 It works like a 2D plane and will not allow any physics body to go to the negative side. Not recommended for rigid bodies, and usually not recommended for static bodies either because it forces checks against it on every frame.
29 */
30 @GodotBaseClass struct LineShape2D
31 {
32 	package(godot) enum string _GODOT_internal_name = "LineShape2D";
33 public:
34 @nogc nothrow:
35 	union { /** */ godot_object _godot_object; /** */ Shape2D _GODOT_base; }
36 	alias _GODOT_base this;
37 	alias BaseClasses = AliasSeq!(typeof(_GODOT_base), typeof(_GODOT_base).BaseClasses);
38 	package(godot) __gshared bool _classBindingInitialized = false;
39 	package(godot) static struct GDNativeClassBinding
40 	{
41 		__gshared:
42 		@GodotName("get_d") GodotMethod!(double) getD;
43 		@GodotName("get_normal") GodotMethod!(Vector2) getNormal;
44 		@GodotName("set_d") GodotMethod!(void, double) setD;
45 		@GodotName("set_normal") GodotMethod!(void, Vector2) setNormal;
46 	}
47 	/// 
48 	pragma(inline, true) bool opEquals(in LineShape2D other) const
49 	{ return _godot_object.ptr is other._godot_object.ptr; }
50 	/// 
51 	pragma(inline, true) typeof(null) opAssign(typeof(null) n)
52 	{ _godot_object.ptr = n; return null; }
53 	/// 
54 	pragma(inline, true) bool opEquals(typeof(null) n) const
55 	{ return _godot_object.ptr is n; }
56 	/// 
57 	size_t toHash() const @trusted { return cast(size_t)_godot_object.ptr; }
58 	mixin baseCasts;
59 	/// Construct a new instance of LineShape2D.
60 	/// Note: use `memnew!LineShape2D` instead.
61 	static LineShape2D _new()
62 	{
63 		static godot_class_constructor constructor;
64 		if(constructor is null) constructor = _godot_api.godot_get_class_constructor("LineShape2D");
65 		if(constructor is null) return typeof(this).init;
66 		return cast(LineShape2D)(constructor());
67 	}
68 	@disable new(size_t s);
69 	/**
70 	
71 	*/
72 	double getD() const
73 	{
74 		checkClassBinding!(typeof(this))();
75 		return ptrcall!(double)(GDNativeClassBinding.getD, _godot_object);
76 	}
77 	/**
78 	
79 	*/
80 	Vector2 getNormal() const
81 	{
82 		checkClassBinding!(typeof(this))();
83 		return ptrcall!(Vector2)(GDNativeClassBinding.getNormal, _godot_object);
84 	}
85 	/**
86 	
87 	*/
88 	void setD(in double d)
89 	{
90 		checkClassBinding!(typeof(this))();
91 		ptrcall!(void)(GDNativeClassBinding.setD, _godot_object, d);
92 	}
93 	/**
94 	
95 	*/
96 	void setNormal(in Vector2 normal)
97 	{
98 		checkClassBinding!(typeof(this))();
99 		ptrcall!(void)(GDNativeClassBinding.setNormal, _godot_object, normal);
100 	}
101 	/**
102 	The line's distance from the origin.
103 	*/
104 	@property double d()
105 	{
106 		return getD();
107 	}
108 	/// ditto
109 	@property void d(double v)
110 	{
111 		setD(v);
112 	}
113 	/**
114 	The line's normal.
115 	*/
116 	@property Vector2 normal()
117 	{
118 		return getNormal();
119 	}
120 	/// ditto
121 	@property void normal(Vector2 v)
122 	{
123 		setNormal(v);
124 	}
125 }