1 /**
2 The generic 6-degrees-of-freedom joint can implement a variety of joint types by locking certain axes' rotation or translation.
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.generic6dofjoint;
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.joint;
25 /**
26 The generic 6-degrees-of-freedom joint can implement a variety of joint types by locking certain axes' rotation or translation.
27 
28 The first 3 DOF axes are linear axes, which represent translation of Bodies, and the latter 3 DOF axes represent the angular motion. Each axis can be either locked, or limited.
29 */
30 @GodotBaseClass struct Generic6DOFJoint
31 {
32 	package(godot) enum string _GODOT_internal_name = "Generic6DOFJoint";
33 public:
34 @nogc nothrow:
35 	union { /** */ godot_object _godot_object; /** */ Joint _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_angular_hi_limit_x") GodotMethod!(double) _getAngularHiLimitX;
43 		@GodotName("_get_angular_hi_limit_y") GodotMethod!(double) _getAngularHiLimitY;
44 		@GodotName("_get_angular_hi_limit_z") GodotMethod!(double) _getAngularHiLimitZ;
45 		@GodotName("_get_angular_lo_limit_x") GodotMethod!(double) _getAngularLoLimitX;
46 		@GodotName("_get_angular_lo_limit_y") GodotMethod!(double) _getAngularLoLimitY;
47 		@GodotName("_get_angular_lo_limit_z") GodotMethod!(double) _getAngularLoLimitZ;
48 		@GodotName("_set_angular_hi_limit_x") GodotMethod!(void, double) _setAngularHiLimitX;
49 		@GodotName("_set_angular_hi_limit_y") GodotMethod!(void, double) _setAngularHiLimitY;
50 		@GodotName("_set_angular_hi_limit_z") GodotMethod!(void, double) _setAngularHiLimitZ;
51 		@GodotName("_set_angular_lo_limit_x") GodotMethod!(void, double) _setAngularLoLimitX;
52 		@GodotName("_set_angular_lo_limit_y") GodotMethod!(void, double) _setAngularLoLimitY;
53 		@GodotName("_set_angular_lo_limit_z") GodotMethod!(void, double) _setAngularLoLimitZ;
54 		@GodotName("get_flag_x") GodotMethod!(bool, long) getFlagX;
55 		@GodotName("get_flag_y") GodotMethod!(bool, long) getFlagY;
56 		@GodotName("get_flag_z") GodotMethod!(bool, long) getFlagZ;
57 		@GodotName("get_param_x") GodotMethod!(double, long) getParamX;
58 		@GodotName("get_param_y") GodotMethod!(double, long) getParamY;
59 		@GodotName("get_param_z") GodotMethod!(double, long) getParamZ;
60 		@GodotName("set_flag_x") GodotMethod!(void, long, bool) setFlagX;
61 		@GodotName("set_flag_y") GodotMethod!(void, long, bool) setFlagY;
62 		@GodotName("set_flag_z") GodotMethod!(void, long, bool) setFlagZ;
63 		@GodotName("set_param_x") GodotMethod!(void, long, double) setParamX;
64 		@GodotName("set_param_y") GodotMethod!(void, long, double) setParamY;
65 		@GodotName("set_param_z") GodotMethod!(void, long, double) setParamZ;
66 	}
67 	/// 
68 	pragma(inline, true) bool opEquals(in Generic6DOFJoint other) const
69 	{ return _godot_object.ptr is other._godot_object.ptr; }
70 	/// 
71 	pragma(inline, true) typeof(null) opAssign(typeof(null) n)
72 	{ _godot_object.ptr = n; return null; }
73 	/// 
74 	pragma(inline, true) bool opEquals(typeof(null) n) const
75 	{ return _godot_object.ptr is n; }
76 	/// 
77 	size_t toHash() const @trusted { return cast(size_t)_godot_object.ptr; }
78 	mixin baseCasts;
79 	/// Construct a new instance of Generic6DOFJoint.
80 	/// Note: use `memnew!Generic6DOFJoint` instead.
81 	static Generic6DOFJoint _new()
82 	{
83 		static godot_class_constructor constructor;
84 		if(constructor is null) constructor = _godot_api.godot_get_class_constructor("Generic6DOFJoint");
85 		if(constructor is null) return typeof(this).init;
86 		return cast(Generic6DOFJoint)(constructor());
87 	}
88 	@disable new(size_t s);
89 	/// 
90 	enum Param : int
91 	{
92 		/**
93 		The minimum difference between the pivot points' axes.
94 		*/
95 		paramLinearLowerLimit = 0,
96 		/**
97 		The maximum difference between the pivot points' axes.
98 		*/
99 		paramLinearUpperLimit = 1,
100 		/**
101 		A factor applied to the movement across the axes. The lower, the slower the movement.
102 		*/
103 		paramLinearLimitSoftness = 2,
104 		/**
105 		The amount of restitution on the axes' movement. The lower, the more momentum gets lost.
106 		*/
107 		paramLinearRestitution = 3,
108 		/**
109 		The amount of damping that happens at the linear motion across the axes.
110 		*/
111 		paramLinearDamping = 4,
112 		/**
113 		The velocity the linear motor will try to reach.
114 		*/
115 		paramLinearMotorTargetVelocity = 5,
116 		/**
117 		The maximum force the linear motor will apply while trying to reach the velocity target.
118 		*/
119 		paramLinearMotorForceLimit = 6,
120 		/**
121 		
122 		*/
123 		paramLinearSpringStiffness = 7,
124 		/**
125 		
126 		*/
127 		paramLinearSpringDamping = 8,
128 		/**
129 		
130 		*/
131 		paramLinearSpringEquilibriumPoint = 9,
132 		/**
133 		The minimum rotation in negative direction to break loose and rotate around the axes.
134 		*/
135 		paramAngularLowerLimit = 10,
136 		/**
137 		The minimum rotation in positive direction to break loose and rotate around the axes.
138 		*/
139 		paramAngularUpperLimit = 11,
140 		/**
141 		The speed of all rotations across the axes.
142 		*/
143 		paramAngularLimitSoftness = 12,
144 		/**
145 		The amount of rotational damping across the axes. The lower, the more dampening occurs.
146 		*/
147 		paramAngularDamping = 13,
148 		/**
149 		The amount of rotational restitution across the axes. The lower, the more restitution occurs.
150 		*/
151 		paramAngularRestitution = 14,
152 		/**
153 		The maximum amount of force that can occur, when rotating around the axes.
154 		*/
155 		paramAngularForceLimit = 15,
156 		/**
157 		When rotating across the axes, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower.
158 		*/
159 		paramAngularErp = 16,
160 		/**
161 		Target speed for the motor at the axes.
162 		*/
163 		paramAngularMotorTargetVelocity = 17,
164 		/**
165 		Maximum acceleration for the motor at the axes.
166 		*/
167 		paramAngularMotorForceLimit = 18,
168 		/**
169 		
170 		*/
171 		paramAngularSpringStiffness = 19,
172 		/**
173 		
174 		*/
175 		paramAngularSpringDamping = 20,
176 		/**
177 		
178 		*/
179 		paramAngularSpringEquilibriumPoint = 21,
180 		/**
181 		Represents the size of the $(D param) enum.
182 		*/
183 		paramMax = 22,
184 	}
185 	/// 
186 	enum Flag : int
187 	{
188 		/**
189 		If enabled, linear motion is possible within the given limits.
190 		*/
191 		flagEnableLinearLimit = 0,
192 		/**
193 		If enabled, rotational motion is possible within the given limits.
194 		*/
195 		flagEnableAngularLimit = 1,
196 		/**
197 		
198 		*/
199 		flagEnableAngularSpring = 2,
200 		/**
201 		
202 		*/
203 		flagEnableLinearSpring = 3,
204 		/**
205 		If enabled, there is a rotational motor across these axes.
206 		*/
207 		flagEnableMotor = 4,
208 		/**
209 		If enabled, there is a linear motor across these axes.
210 		*/
211 		flagEnableLinearMotor = 5,
212 		/**
213 		Represents the size of the $(D flag) enum.
214 		*/
215 		flagMax = 6,
216 	}
217 	/// 
218 	enum Constants : int
219 	{
220 		paramLinearLowerLimit = 0,
221 		flagEnableLinearLimit = 0,
222 		flagEnableAngularLimit = 1,
223 		paramLinearUpperLimit = 1,
224 		paramLinearLimitSoftness = 2,
225 		flagEnableAngularSpring = 2,
226 		paramLinearRestitution = 3,
227 		flagEnableLinearSpring = 3,
228 		flagEnableMotor = 4,
229 		paramLinearDamping = 4,
230 		flagEnableLinearMotor = 5,
231 		paramLinearMotorTargetVelocity = 5,
232 		flagMax = 6,
233 		paramLinearMotorForceLimit = 6,
234 		paramLinearSpringStiffness = 7,
235 		paramLinearSpringDamping = 8,
236 		paramLinearSpringEquilibriumPoint = 9,
237 		paramAngularLowerLimit = 10,
238 		paramAngularUpperLimit = 11,
239 		paramAngularLimitSoftness = 12,
240 		paramAngularDamping = 13,
241 		paramAngularRestitution = 14,
242 		paramAngularForceLimit = 15,
243 		paramAngularErp = 16,
244 		paramAngularMotorTargetVelocity = 17,
245 		paramAngularMotorForceLimit = 18,
246 		paramAngularSpringStiffness = 19,
247 		paramAngularSpringDamping = 20,
248 		paramAngularSpringEquilibriumPoint = 21,
249 		paramMax = 22,
250 	}
251 	/**
252 	
253 	*/
254 	double _getAngularHiLimitX() const
255 	{
256 		Array _GODOT_args = Array.make();
257 		String _GODOT_method_name = String("_get_angular_hi_limit_x");
258 		return this.callv(_GODOT_method_name, _GODOT_args).as!(RefOrT!double);
259 	}
260 	/**
261 	
262 	*/
263 	double _getAngularHiLimitY() const
264 	{
265 		Array _GODOT_args = Array.make();
266 		String _GODOT_method_name = String("_get_angular_hi_limit_y");
267 		return this.callv(_GODOT_method_name, _GODOT_args).as!(RefOrT!double);
268 	}
269 	/**
270 	
271 	*/
272 	double _getAngularHiLimitZ() const
273 	{
274 		Array _GODOT_args = Array.make();
275 		String _GODOT_method_name = String("_get_angular_hi_limit_z");
276 		return this.callv(_GODOT_method_name, _GODOT_args).as!(RefOrT!double);
277 	}
278 	/**
279 	
280 	*/
281 	double _getAngularLoLimitX() const
282 	{
283 		Array _GODOT_args = Array.make();
284 		String _GODOT_method_name = String("_get_angular_lo_limit_x");
285 		return this.callv(_GODOT_method_name, _GODOT_args).as!(RefOrT!double);
286 	}
287 	/**
288 	
289 	*/
290 	double _getAngularLoLimitY() const
291 	{
292 		Array _GODOT_args = Array.make();
293 		String _GODOT_method_name = String("_get_angular_lo_limit_y");
294 		return this.callv(_GODOT_method_name, _GODOT_args).as!(RefOrT!double);
295 	}
296 	/**
297 	
298 	*/
299 	double _getAngularLoLimitZ() const
300 	{
301 		Array _GODOT_args = Array.make();
302 		String _GODOT_method_name = String("_get_angular_lo_limit_z");
303 		return this.callv(_GODOT_method_name, _GODOT_args).as!(RefOrT!double);
304 	}
305 	/**
306 	
307 	*/
308 	void _setAngularHiLimitX(in double angle)
309 	{
310 		Array _GODOT_args = Array.make();
311 		_GODOT_args.append(angle);
312 		String _GODOT_method_name = String("_set_angular_hi_limit_x");
313 		this.callv(_GODOT_method_name, _GODOT_args);
314 	}
315 	/**
316 	
317 	*/
318 	void _setAngularHiLimitY(in double angle)
319 	{
320 		Array _GODOT_args = Array.make();
321 		_GODOT_args.append(angle);
322 		String _GODOT_method_name = String("_set_angular_hi_limit_y");
323 		this.callv(_GODOT_method_name, _GODOT_args);
324 	}
325 	/**
326 	
327 	*/
328 	void _setAngularHiLimitZ(in double angle)
329 	{
330 		Array _GODOT_args = Array.make();
331 		_GODOT_args.append(angle);
332 		String _GODOT_method_name = String("_set_angular_hi_limit_z");
333 		this.callv(_GODOT_method_name, _GODOT_args);
334 	}
335 	/**
336 	
337 	*/
338 	void _setAngularLoLimitX(in double angle)
339 	{
340 		Array _GODOT_args = Array.make();
341 		_GODOT_args.append(angle);
342 		String _GODOT_method_name = String("_set_angular_lo_limit_x");
343 		this.callv(_GODOT_method_name, _GODOT_args);
344 	}
345 	/**
346 	
347 	*/
348 	void _setAngularLoLimitY(in double angle)
349 	{
350 		Array _GODOT_args = Array.make();
351 		_GODOT_args.append(angle);
352 		String _GODOT_method_name = String("_set_angular_lo_limit_y");
353 		this.callv(_GODOT_method_name, _GODOT_args);
354 	}
355 	/**
356 	
357 	*/
358 	void _setAngularLoLimitZ(in double angle)
359 	{
360 		Array _GODOT_args = Array.make();
361 		_GODOT_args.append(angle);
362 		String _GODOT_method_name = String("_set_angular_lo_limit_z");
363 		this.callv(_GODOT_method_name, _GODOT_args);
364 	}
365 	/**
366 	
367 	*/
368 	bool getFlagX(in long flag) const
369 	{
370 		checkClassBinding!(typeof(this))();
371 		return ptrcall!(bool)(GDNativeClassBinding.getFlagX, _godot_object, flag);
372 	}
373 	/**
374 	
375 	*/
376 	bool getFlagY(in long flag) const
377 	{
378 		checkClassBinding!(typeof(this))();
379 		return ptrcall!(bool)(GDNativeClassBinding.getFlagY, _godot_object, flag);
380 	}
381 	/**
382 	
383 	*/
384 	bool getFlagZ(in long flag) const
385 	{
386 		checkClassBinding!(typeof(this))();
387 		return ptrcall!(bool)(GDNativeClassBinding.getFlagZ, _godot_object, flag);
388 	}
389 	/**
390 	
391 	*/
392 	double getParamX(in long param) const
393 	{
394 		checkClassBinding!(typeof(this))();
395 		return ptrcall!(double)(GDNativeClassBinding.getParamX, _godot_object, param);
396 	}
397 	/**
398 	
399 	*/
400 	double getParamY(in long param) const
401 	{
402 		checkClassBinding!(typeof(this))();
403 		return ptrcall!(double)(GDNativeClassBinding.getParamY, _godot_object, param);
404 	}
405 	/**
406 	
407 	*/
408 	double getParamZ(in long param) const
409 	{
410 		checkClassBinding!(typeof(this))();
411 		return ptrcall!(double)(GDNativeClassBinding.getParamZ, _godot_object, param);
412 	}
413 	/**
414 	
415 	*/
416 	void setFlagX(in long flag, in bool value)
417 	{
418 		checkClassBinding!(typeof(this))();
419 		ptrcall!(void)(GDNativeClassBinding.setFlagX, _godot_object, flag, value);
420 	}
421 	/**
422 	
423 	*/
424 	void setFlagY(in long flag, in bool value)
425 	{
426 		checkClassBinding!(typeof(this))();
427 		ptrcall!(void)(GDNativeClassBinding.setFlagY, _godot_object, flag, value);
428 	}
429 	/**
430 	
431 	*/
432 	void setFlagZ(in long flag, in bool value)
433 	{
434 		checkClassBinding!(typeof(this))();
435 		ptrcall!(void)(GDNativeClassBinding.setFlagZ, _godot_object, flag, value);
436 	}
437 	/**
438 	
439 	*/
440 	void setParamX(in long param, in double value)
441 	{
442 		checkClassBinding!(typeof(this))();
443 		ptrcall!(void)(GDNativeClassBinding.setParamX, _godot_object, param, value);
444 	}
445 	/**
446 	
447 	*/
448 	void setParamY(in long param, in double value)
449 	{
450 		checkClassBinding!(typeof(this))();
451 		ptrcall!(void)(GDNativeClassBinding.setParamY, _godot_object, param, value);
452 	}
453 	/**
454 	
455 	*/
456 	void setParamZ(in long param, in double value)
457 	{
458 		checkClassBinding!(typeof(this))();
459 		ptrcall!(void)(GDNativeClassBinding.setParamZ, _godot_object, param, value);
460 	}
461 	/**
462 	The amount of rotational damping across the X axis.
463 	The lower, the longer an impulse from one side takes to travel to the other side.
464 	*/
465 	@property double angularLimitXDamping()
466 	{
467 		return getParamX(13);
468 	}
469 	/// ditto
470 	@property void angularLimitXDamping(double v)
471 	{
472 		setParamX(13, v);
473 	}
474 	/**
475 	If `true`, rotation across the X axis is limited.
476 	*/
477 	@property bool angularLimitXEnabled()
478 	{
479 		return getFlagX(1);
480 	}
481 	/// ditto
482 	@property void angularLimitXEnabled(bool v)
483 	{
484 		setFlagX(1, v);
485 	}
486 	/**
487 	When rotating across the X axis, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower.
488 	*/
489 	@property double angularLimitXErp()
490 	{
491 		return getParamX(16);
492 	}
493 	/// ditto
494 	@property void angularLimitXErp(double v)
495 	{
496 		setParamX(16, v);
497 	}
498 	/**
499 	The maximum amount of force that can occur, when rotating around the X axis.
500 	*/
501 	@property double angularLimitXForceLimit()
502 	{
503 		return getParamX(15);
504 	}
505 	/// ditto
506 	@property void angularLimitXForceLimit(double v)
507 	{
508 		setParamX(15, v);
509 	}
510 	/**
511 	The minimum rotation in negative direction to break loose and rotate around the X axis.
512 	*/
513 	@property double angularLimitXLowerAngle()
514 	{
515 		return _getAngularLoLimitX();
516 	}
517 	/// ditto
518 	@property void angularLimitXLowerAngle(double v)
519 	{
520 		_setAngularLoLimitX(v);
521 	}
522 	/**
523 	The amount of rotational restitution across the X axis. The lower, the more restitution occurs.
524 	*/
525 	@property double angularLimitXRestitution()
526 	{
527 		return getParamX(14);
528 	}
529 	/// ditto
530 	@property void angularLimitXRestitution(double v)
531 	{
532 		setParamX(14, v);
533 	}
534 	/**
535 	The speed of all rotations across the X axis.
536 	*/
537 	@property double angularLimitXSoftness()
538 	{
539 		return getParamX(12);
540 	}
541 	/// ditto
542 	@property void angularLimitXSoftness(double v)
543 	{
544 		setParamX(12, v);
545 	}
546 	/**
547 	The minimum rotation in positive direction to break loose and rotate around the X axis.
548 	*/
549 	@property double angularLimitXUpperAngle()
550 	{
551 		return _getAngularHiLimitX();
552 	}
553 	/// ditto
554 	@property void angularLimitXUpperAngle(double v)
555 	{
556 		_setAngularHiLimitX(v);
557 	}
558 	/**
559 	The amount of rotational damping across the Y axis. The lower, the more dampening occurs.
560 	*/
561 	@property double angularLimitYDamping()
562 	{
563 		return getParamY(13);
564 	}
565 	/// ditto
566 	@property void angularLimitYDamping(double v)
567 	{
568 		setParamY(13, v);
569 	}
570 	/**
571 	If `true`, rotation across the Y axis is limited.
572 	*/
573 	@property bool angularLimitYEnabled()
574 	{
575 		return getFlagY(1);
576 	}
577 	/// ditto
578 	@property void angularLimitYEnabled(bool v)
579 	{
580 		setFlagY(1, v);
581 	}
582 	/**
583 	When rotating across the Y axis, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower.
584 	*/
585 	@property double angularLimitYErp()
586 	{
587 		return getParamY(16);
588 	}
589 	/// ditto
590 	@property void angularLimitYErp(double v)
591 	{
592 		setParamY(16, v);
593 	}
594 	/**
595 	The maximum amount of force that can occur, when rotating around the Y axis.
596 	*/
597 	@property double angularLimitYForceLimit()
598 	{
599 		return getParamY(15);
600 	}
601 	/// ditto
602 	@property void angularLimitYForceLimit(double v)
603 	{
604 		setParamY(15, v);
605 	}
606 	/**
607 	The minimum rotation in negative direction to break loose and rotate around the Y axis.
608 	*/
609 	@property double angularLimitYLowerAngle()
610 	{
611 		return _getAngularLoLimitY();
612 	}
613 	/// ditto
614 	@property void angularLimitYLowerAngle(double v)
615 	{
616 		_setAngularLoLimitY(v);
617 	}
618 	/**
619 	The amount of rotational restitution across the Y axis. The lower, the more restitution occurs.
620 	*/
621 	@property double angularLimitYRestitution()
622 	{
623 		return getParamY(14);
624 	}
625 	/// ditto
626 	@property void angularLimitYRestitution(double v)
627 	{
628 		setParamY(14, v);
629 	}
630 	/**
631 	The speed of all rotations across the Y axis.
632 	*/
633 	@property double angularLimitYSoftness()
634 	{
635 		return getParamY(12);
636 	}
637 	/// ditto
638 	@property void angularLimitYSoftness(double v)
639 	{
640 		setParamY(12, v);
641 	}
642 	/**
643 	The minimum rotation in positive direction to break loose and rotate around the Y axis.
644 	*/
645 	@property double angularLimitYUpperAngle()
646 	{
647 		return _getAngularHiLimitY();
648 	}
649 	/// ditto
650 	@property void angularLimitYUpperAngle(double v)
651 	{
652 		_setAngularHiLimitY(v);
653 	}
654 	/**
655 	The amount of rotational damping across the Z axis. The lower, the more dampening occurs.
656 	*/
657 	@property double angularLimitZDamping()
658 	{
659 		return getParamZ(13);
660 	}
661 	/// ditto
662 	@property void angularLimitZDamping(double v)
663 	{
664 		setParamZ(13, v);
665 	}
666 	/**
667 	If `true`, rotation across the Z axis is limited.
668 	*/
669 	@property bool angularLimitZEnabled()
670 	{
671 		return getFlagZ(1);
672 	}
673 	/// ditto
674 	@property void angularLimitZEnabled(bool v)
675 	{
676 		setFlagZ(1, v);
677 	}
678 	/**
679 	When rotating across the Z axis, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower.
680 	*/
681 	@property double angularLimitZErp()
682 	{
683 		return getParamZ(16);
684 	}
685 	/// ditto
686 	@property void angularLimitZErp(double v)
687 	{
688 		setParamZ(16, v);
689 	}
690 	/**
691 	The maximum amount of force that can occur, when rotating around the Z axis.
692 	*/
693 	@property double angularLimitZForceLimit()
694 	{
695 		return getParamZ(15);
696 	}
697 	/// ditto
698 	@property void angularLimitZForceLimit(double v)
699 	{
700 		setParamZ(15, v);
701 	}
702 	/**
703 	The minimum rotation in negative direction to break loose and rotate around the Z axis.
704 	*/
705 	@property double angularLimitZLowerAngle()
706 	{
707 		return _getAngularLoLimitZ();
708 	}
709 	/// ditto
710 	@property void angularLimitZLowerAngle(double v)
711 	{
712 		_setAngularLoLimitZ(v);
713 	}
714 	/**
715 	The amount of rotational restitution across the Z axis. The lower, the more restitution occurs.
716 	*/
717 	@property double angularLimitZRestitution()
718 	{
719 		return getParamZ(14);
720 	}
721 	/// ditto
722 	@property void angularLimitZRestitution(double v)
723 	{
724 		setParamZ(14, v);
725 	}
726 	/**
727 	The speed of all rotations across the Z axis.
728 	*/
729 	@property double angularLimitZSoftness()
730 	{
731 		return getParamZ(12);
732 	}
733 	/// ditto
734 	@property void angularLimitZSoftness(double v)
735 	{
736 		setParamZ(12, v);
737 	}
738 	/**
739 	The minimum rotation in positive direction to break loose and rotate around the Z axis.
740 	*/
741 	@property double angularLimitZUpperAngle()
742 	{
743 		return _getAngularHiLimitZ();
744 	}
745 	/// ditto
746 	@property void angularLimitZUpperAngle(double v)
747 	{
748 		_setAngularHiLimitZ(v);
749 	}
750 	/**
751 	If `true`, a rotating motor at the X axis is enabled.
752 	*/
753 	@property bool angularMotorXEnabled()
754 	{
755 		return getFlagX(4);
756 	}
757 	/// ditto
758 	@property void angularMotorXEnabled(bool v)
759 	{
760 		setFlagX(4, v);
761 	}
762 	/**
763 	Maximum acceleration for the motor at the X axis.
764 	*/
765 	@property double angularMotorXForceLimit()
766 	{
767 		return getParamX(18);
768 	}
769 	/// ditto
770 	@property void angularMotorXForceLimit(double v)
771 	{
772 		setParamX(18, v);
773 	}
774 	/**
775 	Target speed for the motor at the X axis.
776 	*/
777 	@property double angularMotorXTargetVelocity()
778 	{
779 		return getParamX(17);
780 	}
781 	/// ditto
782 	@property void angularMotorXTargetVelocity(double v)
783 	{
784 		setParamX(17, v);
785 	}
786 	/**
787 	If `true`, a rotating motor at the Y axis is enabled.
788 	*/
789 	@property bool angularMotorYEnabled()
790 	{
791 		return getFlagY(4);
792 	}
793 	/// ditto
794 	@property void angularMotorYEnabled(bool v)
795 	{
796 		setFlagY(4, v);
797 	}
798 	/**
799 	Maximum acceleration for the motor at the Y axis.
800 	*/
801 	@property double angularMotorYForceLimit()
802 	{
803 		return getParamY(18);
804 	}
805 	/// ditto
806 	@property void angularMotorYForceLimit(double v)
807 	{
808 		setParamY(18, v);
809 	}
810 	/**
811 	Target speed for the motor at the Y axis.
812 	*/
813 	@property double angularMotorYTargetVelocity()
814 	{
815 		return getParamY(17);
816 	}
817 	/// ditto
818 	@property void angularMotorYTargetVelocity(double v)
819 	{
820 		setParamY(17, v);
821 	}
822 	/**
823 	If `true`, a rotating motor at the Z axis is enabled.
824 	*/
825 	@property bool angularMotorZEnabled()
826 	{
827 		return getFlagZ(4);
828 	}
829 	/// ditto
830 	@property void angularMotorZEnabled(bool v)
831 	{
832 		setFlagZ(4, v);
833 	}
834 	/**
835 	Maximum acceleration for the motor at the Z axis.
836 	*/
837 	@property double angularMotorZForceLimit()
838 	{
839 		return getParamZ(18);
840 	}
841 	/// ditto
842 	@property void angularMotorZForceLimit(double v)
843 	{
844 		setParamZ(18, v);
845 	}
846 	/**
847 	Target speed for the motor at the Z axis.
848 	*/
849 	@property double angularMotorZTargetVelocity()
850 	{
851 		return getParamZ(17);
852 	}
853 	/// ditto
854 	@property void angularMotorZTargetVelocity(double v)
855 	{
856 		setParamZ(17, v);
857 	}
858 	/**
859 	
860 	*/
861 	@property double angularSpringXDamping()
862 	{
863 		return getParamX(20);
864 	}
865 	/// ditto
866 	@property void angularSpringXDamping(double v)
867 	{
868 		setParamX(20, v);
869 	}
870 	/**
871 	
872 	*/
873 	@property bool angularSpringXEnabled()
874 	{
875 		return getFlagX(2);
876 	}
877 	/// ditto
878 	@property void angularSpringXEnabled(bool v)
879 	{
880 		setFlagX(2, v);
881 	}
882 	/**
883 	
884 	*/
885 	@property double angularSpringXEquilibriumPoint()
886 	{
887 		return getParamX(21);
888 	}
889 	/// ditto
890 	@property void angularSpringXEquilibriumPoint(double v)
891 	{
892 		setParamX(21, v);
893 	}
894 	/**
895 	
896 	*/
897 	@property double angularSpringXStiffness()
898 	{
899 		return getParamX(19);
900 	}
901 	/// ditto
902 	@property void angularSpringXStiffness(double v)
903 	{
904 		setParamX(19, v);
905 	}
906 	/**
907 	
908 	*/
909 	@property double angularSpringYDamping()
910 	{
911 		return getParamY(20);
912 	}
913 	/// ditto
914 	@property void angularSpringYDamping(double v)
915 	{
916 		setParamY(20, v);
917 	}
918 	/**
919 	
920 	*/
921 	@property bool angularSpringYEnabled()
922 	{
923 		return getFlagY(2);
924 	}
925 	/// ditto
926 	@property void angularSpringYEnabled(bool v)
927 	{
928 		setFlagY(2, v);
929 	}
930 	/**
931 	
932 	*/
933 	@property double angularSpringYEquilibriumPoint()
934 	{
935 		return getParamY(21);
936 	}
937 	/// ditto
938 	@property void angularSpringYEquilibriumPoint(double v)
939 	{
940 		setParamY(21, v);
941 	}
942 	/**
943 	
944 	*/
945 	@property double angularSpringYStiffness()
946 	{
947 		return getParamY(19);
948 	}
949 	/// ditto
950 	@property void angularSpringYStiffness(double v)
951 	{
952 		setParamY(19, v);
953 	}
954 	/**
955 	
956 	*/
957 	@property double angularSpringZDamping()
958 	{
959 		return getParamZ(20);
960 	}
961 	/// ditto
962 	@property void angularSpringZDamping(double v)
963 	{
964 		setParamZ(20, v);
965 	}
966 	/**
967 	
968 	*/
969 	@property bool angularSpringZEnabled()
970 	{
971 		return getFlagZ(2);
972 	}
973 	/// ditto
974 	@property void angularSpringZEnabled(bool v)
975 	{
976 		setFlagZ(2, v);
977 	}
978 	/**
979 	
980 	*/
981 	@property double angularSpringZEquilibriumPoint()
982 	{
983 		return getParamZ(21);
984 	}
985 	/// ditto
986 	@property void angularSpringZEquilibriumPoint(double v)
987 	{
988 		setParamZ(21, v);
989 	}
990 	/**
991 	
992 	*/
993 	@property double angularSpringZStiffness()
994 	{
995 		return getParamZ(19);
996 	}
997 	/// ditto
998 	@property void angularSpringZStiffness(double v)
999 	{
1000 		setParamZ(19, v);
1001 	}
1002 	/**
1003 	The amount of damping that happens at the X motion.
1004 	*/
1005 	@property double linearLimitXDamping()
1006 	{
1007 		return getParamX(4);
1008 	}
1009 	/// ditto
1010 	@property void linearLimitXDamping(double v)
1011 	{
1012 		setParamX(4, v);
1013 	}
1014 	/**
1015 	If `true`, the linear motion across the X axis is limited.
1016 	*/
1017 	@property bool linearLimitXEnabled()
1018 	{
1019 		return getFlagX(0);
1020 	}
1021 	/// ditto
1022 	@property void linearLimitXEnabled(bool v)
1023 	{
1024 		setFlagX(0, v);
1025 	}
1026 	/**
1027 	The minimum difference between the pivot points' X axis.
1028 	*/
1029 	@property double linearLimitXLowerDistance()
1030 	{
1031 		return getParamX(0);
1032 	}
1033 	/// ditto
1034 	@property void linearLimitXLowerDistance(double v)
1035 	{
1036 		setParamX(0, v);
1037 	}
1038 	/**
1039 	The amount of restitution on the X axis movement. The lower, the more momentum gets lost.
1040 	*/
1041 	@property double linearLimitXRestitution()
1042 	{
1043 		return getParamX(3);
1044 	}
1045 	/// ditto
1046 	@property void linearLimitXRestitution(double v)
1047 	{
1048 		setParamX(3, v);
1049 	}
1050 	/**
1051 	A factor applied to the movement across the X axis. The lower, the slower the movement.
1052 	*/
1053 	@property double linearLimitXSoftness()
1054 	{
1055 		return getParamX(2);
1056 	}
1057 	/// ditto
1058 	@property void linearLimitXSoftness(double v)
1059 	{
1060 		setParamX(2, v);
1061 	}
1062 	/**
1063 	The maximum difference between the pivot points' X axis.
1064 	*/
1065 	@property double linearLimitXUpperDistance()
1066 	{
1067 		return getParamX(1);
1068 	}
1069 	/// ditto
1070 	@property void linearLimitXUpperDistance(double v)
1071 	{
1072 		setParamX(1, v);
1073 	}
1074 	/**
1075 	The amount of damping that happens at the Y motion.
1076 	*/
1077 	@property double linearLimitYDamping()
1078 	{
1079 		return getParamY(4);
1080 	}
1081 	/// ditto
1082 	@property void linearLimitYDamping(double v)
1083 	{
1084 		setParamY(4, v);
1085 	}
1086 	/**
1087 	If `true`, the linear motion across the Y axis is limited.
1088 	*/
1089 	@property bool linearLimitYEnabled()
1090 	{
1091 		return getFlagY(0);
1092 	}
1093 	/// ditto
1094 	@property void linearLimitYEnabled(bool v)
1095 	{
1096 		setFlagY(0, v);
1097 	}
1098 	/**
1099 	The minimum difference between the pivot points' Y axis.
1100 	*/
1101 	@property double linearLimitYLowerDistance()
1102 	{
1103 		return getParamY(0);
1104 	}
1105 	/// ditto
1106 	@property void linearLimitYLowerDistance(double v)
1107 	{
1108 		setParamY(0, v);
1109 	}
1110 	/**
1111 	The amount of restitution on the Y axis movement. The lower, the more momentum gets lost.
1112 	*/
1113 	@property double linearLimitYRestitution()
1114 	{
1115 		return getParamY(3);
1116 	}
1117 	/// ditto
1118 	@property void linearLimitYRestitution(double v)
1119 	{
1120 		setParamY(3, v);
1121 	}
1122 	/**
1123 	A factor applied to the movement across the Y axis. The lower, the slower the movement.
1124 	*/
1125 	@property double linearLimitYSoftness()
1126 	{
1127 		return getParamY(2);
1128 	}
1129 	/// ditto
1130 	@property void linearLimitYSoftness(double v)
1131 	{
1132 		setParamY(2, v);
1133 	}
1134 	/**
1135 	The maximum difference between the pivot points' Y axis.
1136 	*/
1137 	@property double linearLimitYUpperDistance()
1138 	{
1139 		return getParamY(1);
1140 	}
1141 	/// ditto
1142 	@property void linearLimitYUpperDistance(double v)
1143 	{
1144 		setParamY(1, v);
1145 	}
1146 	/**
1147 	The amount of damping that happens at the Z motion.
1148 	*/
1149 	@property double linearLimitZDamping()
1150 	{
1151 		return getParamZ(4);
1152 	}
1153 	/// ditto
1154 	@property void linearLimitZDamping(double v)
1155 	{
1156 		setParamZ(4, v);
1157 	}
1158 	/**
1159 	If `true`, the linear motion across the Z axis is limited.
1160 	*/
1161 	@property bool linearLimitZEnabled()
1162 	{
1163 		return getFlagZ(0);
1164 	}
1165 	/// ditto
1166 	@property void linearLimitZEnabled(bool v)
1167 	{
1168 		setFlagZ(0, v);
1169 	}
1170 	/**
1171 	The minimum difference between the pivot points' Z axis.
1172 	*/
1173 	@property double linearLimitZLowerDistance()
1174 	{
1175 		return getParamZ(0);
1176 	}
1177 	/// ditto
1178 	@property void linearLimitZLowerDistance(double v)
1179 	{
1180 		setParamZ(0, v);
1181 	}
1182 	/**
1183 	The amount of restitution on the Z axis movement. The lower, the more momentum gets lost.
1184 	*/
1185 	@property double linearLimitZRestitution()
1186 	{
1187 		return getParamZ(3);
1188 	}
1189 	/// ditto
1190 	@property void linearLimitZRestitution(double v)
1191 	{
1192 		setParamZ(3, v);
1193 	}
1194 	/**
1195 	A factor applied to the movement across the Z axis. The lower, the slower the movement.
1196 	*/
1197 	@property double linearLimitZSoftness()
1198 	{
1199 		return getParamZ(2);
1200 	}
1201 	/// ditto
1202 	@property void linearLimitZSoftness(double v)
1203 	{
1204 		setParamZ(2, v);
1205 	}
1206 	/**
1207 	The maximum difference between the pivot points' Z axis.
1208 	*/
1209 	@property double linearLimitZUpperDistance()
1210 	{
1211 		return getParamZ(1);
1212 	}
1213 	/// ditto
1214 	@property void linearLimitZUpperDistance(double v)
1215 	{
1216 		setParamZ(1, v);
1217 	}
1218 	/**
1219 	If `true`, then there is a linear motor on the X axis. It will attempt to reach the target velocity while staying within the force limits.
1220 	*/
1221 	@property bool linearMotorXEnabled()
1222 	{
1223 		return getFlagX(5);
1224 	}
1225 	/// ditto
1226 	@property void linearMotorXEnabled(bool v)
1227 	{
1228 		setFlagX(5, v);
1229 	}
1230 	/**
1231 	The maximum force the linear motor can apply on the X axis while trying to reach the target velocity.
1232 	*/
1233 	@property double linearMotorXForceLimit()
1234 	{
1235 		return getParamX(6);
1236 	}
1237 	/// ditto
1238 	@property void linearMotorXForceLimit(double v)
1239 	{
1240 		setParamX(6, v);
1241 	}
1242 	/**
1243 	The speed that the linear motor will attempt to reach on the X axis.
1244 	*/
1245 	@property double linearMotorXTargetVelocity()
1246 	{
1247 		return getParamX(5);
1248 	}
1249 	/// ditto
1250 	@property void linearMotorXTargetVelocity(double v)
1251 	{
1252 		setParamX(5, v);
1253 	}
1254 	/**
1255 	If `true`, then there is a linear motor on the Y axis. It will attempt to reach the target velocity while staying within the force limits.
1256 	*/
1257 	@property bool linearMotorYEnabled()
1258 	{
1259 		return getFlagY(5);
1260 	}
1261 	/// ditto
1262 	@property void linearMotorYEnabled(bool v)
1263 	{
1264 		setFlagY(5, v);
1265 	}
1266 	/**
1267 	The maximum force the linear motor can apply on the Y axis while trying to reach the target velocity.
1268 	*/
1269 	@property double linearMotorYForceLimit()
1270 	{
1271 		return getParamY(6);
1272 	}
1273 	/// ditto
1274 	@property void linearMotorYForceLimit(double v)
1275 	{
1276 		setParamY(6, v);
1277 	}
1278 	/**
1279 	The speed that the linear motor will attempt to reach on the Y axis.
1280 	*/
1281 	@property double linearMotorYTargetVelocity()
1282 	{
1283 		return getParamY(5);
1284 	}
1285 	/// ditto
1286 	@property void linearMotorYTargetVelocity(double v)
1287 	{
1288 		setParamY(5, v);
1289 	}
1290 	/**
1291 	If `true`, then there is a linear motor on the Z axis. It will attempt to reach the target velocity while staying within the force limits.
1292 	*/
1293 	@property bool linearMotorZEnabled()
1294 	{
1295 		return getFlagZ(5);
1296 	}
1297 	/// ditto
1298 	@property void linearMotorZEnabled(bool v)
1299 	{
1300 		setFlagZ(5, v);
1301 	}
1302 	/**
1303 	The maximum force the linear motor can apply on the Z axis while trying to reach the target velocity.
1304 	*/
1305 	@property double linearMotorZForceLimit()
1306 	{
1307 		return getParamZ(6);
1308 	}
1309 	/// ditto
1310 	@property void linearMotorZForceLimit(double v)
1311 	{
1312 		setParamZ(6, v);
1313 	}
1314 	/**
1315 	The speed that the linear motor will attempt to reach on the Z axis.
1316 	*/
1317 	@property double linearMotorZTargetVelocity()
1318 	{
1319 		return getParamZ(5);
1320 	}
1321 	/// ditto
1322 	@property void linearMotorZTargetVelocity(double v)
1323 	{
1324 		setParamZ(5, v);
1325 	}
1326 	/**
1327 	
1328 	*/
1329 	@property double linearSpringXDamping()
1330 	{
1331 		return getParamX(8);
1332 	}
1333 	/// ditto
1334 	@property void linearSpringXDamping(double v)
1335 	{
1336 		setParamX(8, v);
1337 	}
1338 	/**
1339 	
1340 	*/
1341 	@property bool linearSpringXEnabled()
1342 	{
1343 		return getFlagX(3);
1344 	}
1345 	/// ditto
1346 	@property void linearSpringXEnabled(bool v)
1347 	{
1348 		setFlagX(3, v);
1349 	}
1350 	/**
1351 	
1352 	*/
1353 	@property double linearSpringXEquilibriumPoint()
1354 	{
1355 		return getParamX(9);
1356 	}
1357 	/// ditto
1358 	@property void linearSpringXEquilibriumPoint(double v)
1359 	{
1360 		setParamX(9, v);
1361 	}
1362 	/**
1363 	
1364 	*/
1365 	@property double linearSpringXStiffness()
1366 	{
1367 		return getParamX(7);
1368 	}
1369 	/// ditto
1370 	@property void linearSpringXStiffness(double v)
1371 	{
1372 		setParamX(7, v);
1373 	}
1374 	/**
1375 	
1376 	*/
1377 	@property double linearSpringYDamping()
1378 	{
1379 		return getParamY(8);
1380 	}
1381 	/// ditto
1382 	@property void linearSpringYDamping(double v)
1383 	{
1384 		setParamY(8, v);
1385 	}
1386 	/**
1387 	
1388 	*/
1389 	@property bool linearSpringYEnabled()
1390 	{
1391 		return getFlagY(3);
1392 	}
1393 	/// ditto
1394 	@property void linearSpringYEnabled(bool v)
1395 	{
1396 		setFlagY(3, v);
1397 	}
1398 	/**
1399 	
1400 	*/
1401 	@property double linearSpringYEquilibriumPoint()
1402 	{
1403 		return getParamY(9);
1404 	}
1405 	/// ditto
1406 	@property void linearSpringYEquilibriumPoint(double v)
1407 	{
1408 		setParamY(9, v);
1409 	}
1410 	/**
1411 	
1412 	*/
1413 	@property double linearSpringYStiffness()
1414 	{
1415 		return getParamY(7);
1416 	}
1417 	/// ditto
1418 	@property void linearSpringYStiffness(double v)
1419 	{
1420 		setParamY(7, v);
1421 	}
1422 	/**
1423 	
1424 	*/
1425 	@property double linearSpringZDamping()
1426 	{
1427 		return getParamZ(8);
1428 	}
1429 	/// ditto
1430 	@property void linearSpringZDamping(double v)
1431 	{
1432 		setParamZ(8, v);
1433 	}
1434 	/**
1435 	
1436 	*/
1437 	@property bool linearSpringZEnabled()
1438 	{
1439 		return getFlagZ(3);
1440 	}
1441 	/// ditto
1442 	@property void linearSpringZEnabled(bool v)
1443 	{
1444 		setFlagZ(3, v);
1445 	}
1446 	/**
1447 	
1448 	*/
1449 	@property double linearSpringZEquilibriumPoint()
1450 	{
1451 		return getParamZ(9);
1452 	}
1453 	/// ditto
1454 	@property void linearSpringZEquilibriumPoint(double v)
1455 	{
1456 		setParamZ(9, v);
1457 	}
1458 	/**
1459 	
1460 	*/
1461 	@property double linearSpringZStiffness()
1462 	{
1463 		return getParamZ(7);
1464 	}
1465 	/// ditto
1466 	@property void linearSpringZStiffness(double v)
1467 	{
1468 		setParamZ(7, v);
1469 	}
1470 }