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.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.joint;
24 import godot.spatial;
25 import godot.node;
26 /**
27 The generic 6 degrees of freedom joint can implement a variety of joint-types by locking certain axes' rotation or translation.
28 
29 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.
30 */
31 @GodotBaseClass struct Generic6DOFJoint
32 {
33 	enum string _GODOT_internal_name = "Generic6DOFJoint";
34 public:
35 @nogc nothrow:
36 	union { godot_object _godot_object; Joint _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_angular_hi_limit_x") GodotMethod!(void, double) _setAngularHiLimitX;
44 		@GodotName("_get_angular_hi_limit_x") GodotMethod!(double) _getAngularHiLimitX;
45 		@GodotName("_set_angular_lo_limit_x") GodotMethod!(void, double) _setAngularLoLimitX;
46 		@GodotName("_get_angular_lo_limit_x") GodotMethod!(double) _getAngularLoLimitX;
47 		@GodotName("_set_angular_hi_limit_y") GodotMethod!(void, double) _setAngularHiLimitY;
48 		@GodotName("_get_angular_hi_limit_y") GodotMethod!(double) _getAngularHiLimitY;
49 		@GodotName("_set_angular_lo_limit_y") GodotMethod!(void, double) _setAngularLoLimitY;
50 		@GodotName("_get_angular_lo_limit_y") GodotMethod!(double) _getAngularLoLimitY;
51 		@GodotName("_set_angular_hi_limit_z") GodotMethod!(void, double) _setAngularHiLimitZ;
52 		@GodotName("_get_angular_hi_limit_z") GodotMethod!(double) _getAngularHiLimitZ;
53 		@GodotName("_set_angular_lo_limit_z") GodotMethod!(void, double) _setAngularLoLimitZ;
54 		@GodotName("_get_angular_lo_limit_z") GodotMethod!(double) _getAngularLoLimitZ;
55 		@GodotName("set_param_x") GodotMethod!(void, long, double) setParamX;
56 		@GodotName("get_param_x") GodotMethod!(double, long) getParamX;
57 		@GodotName("set_param_y") GodotMethod!(void, long, double) setParamY;
58 		@GodotName("get_param_y") GodotMethod!(double, long) getParamY;
59 		@GodotName("set_param_z") GodotMethod!(void, long, double) setParamZ;
60 		@GodotName("get_param_z") GodotMethod!(double, long) getParamZ;
61 		@GodotName("set_flag_x") GodotMethod!(void, long, bool) setFlagX;
62 		@GodotName("get_flag_x") GodotMethod!(bool, long) getFlagX;
63 		@GodotName("set_flag_y") GodotMethod!(void, long, bool) setFlagY;
64 		@GodotName("get_flag_y") GodotMethod!(bool, long) getFlagY;
65 		@GodotName("set_flag_z") GodotMethod!(void, long, bool) setFlagZ;
66 		@GodotName("get_flag_z") GodotMethod!(bool, long) getFlagZ;
67 	}
68 	bool opEquals(in Generic6DOFJoint other) const { return _godot_object.ptr is other._godot_object.ptr; }
69 	Generic6DOFJoint opAssign(T : typeof(null))(T n) { _godot_object.ptr = null; }
70 	bool opEquals(typeof(null) n) const { return _godot_object.ptr is null; }
71 	mixin baseCasts;
72 	static Generic6DOFJoint _new()
73 	{
74 		static godot_class_constructor constructor;
75 		if(constructor is null) constructor = _godot_api.godot_get_class_constructor("Generic6DOFJoint");
76 		if(constructor is null) return typeof(this).init;
77 		return cast(Generic6DOFJoint)(constructor());
78 	}
79 	@disable new(size_t s);
80 	/// 
81 	enum Param : int
82 	{
83 		/**
84 		The minimum difference between the pivot points' axes.
85 		*/
86 		paramLinearLowerLimit = 0,
87 		/**
88 		The maximum difference between the pivot points' axes.
89 		*/
90 		paramLinearUpperLimit = 1,
91 		/**
92 		A factor applied to the movement across the axes The lower, the slower the movement.
93 		*/
94 		paramLinearLimitSoftness = 2,
95 		/**
96 		The amount of restitution on the axes movement The lower, the more momentum gets lost.
97 		*/
98 		paramLinearRestitution = 3,
99 		/**
100 		The amount of damping that happens at the linear motion across the axes.
101 		*/
102 		paramLinearDamping = 4,
103 		/**
104 		The velocity the linear motor will try to reach.
105 		*/
106 		paramLinearMotorTargetVelocity = 5,
107 		/**
108 		The maximum force the linear motor will apply while trying to reach the velocity target.
109 		*/
110 		paramLinearMotorForceLimit = 6,
111 		/**
112 		The minimum rotation in negative direction to break loose and rotate around the axes.
113 		*/
114 		paramAngularLowerLimit = 7,
115 		/**
116 		The minimum rotation in positive direction to break loose and rotate around the axes.
117 		*/
118 		paramAngularUpperLimit = 8,
119 		/**
120 		The speed of all rotations across the axes.
121 		*/
122 		paramAngularLimitSoftness = 9,
123 		/**
124 		The amount of rotational damping across the axes. The lower, the more dampening occurs.
125 		*/
126 		paramAngularDamping = 10,
127 		/**
128 		The amount of rotational restitution across the axes. The lower, the more restitution occurs.
129 		*/
130 		paramAngularRestitution = 11,
131 		/**
132 		The maximum amount of force that can occur, when rotating around the axes.
133 		*/
134 		paramAngularForceLimit = 12,
135 		/**
136 		When rotating across the axes, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower.
137 		*/
138 		paramAngularErp = 13,
139 		/**
140 		Target speed for the motor at the axes.
141 		*/
142 		paramAngularMotorTargetVelocity = 14,
143 		/**
144 		Maximum acceleration for the motor at the axes.
145 		*/
146 		paramAngularMotorForceLimit = 15,
147 		/**
148 		End flag of PARAM_* constants, used internally.
149 		*/
150 		paramMax = 16,
151 	}
152 	/// 
153 	enum Flag : int
154 	{
155 		/**
156 		If `set` there is linear motion possible within the given limits.
157 		*/
158 		flagEnableLinearLimit = 0,
159 		/**
160 		If `set` there is rotational motion possible.
161 		*/
162 		flagEnableAngularLimit = 1,
163 		/**
164 		If `set` there is a rotational motor across these axes.
165 		*/
166 		flagEnableMotor = 2,
167 		/**
168 		
169 		*/
170 		flagEnableLinearMotor = 3,
171 		/**
172 		End flag of FLAG_* constants, used internally.
173 		*/
174 		flagMax = 4,
175 	}
176 	/// 
177 	enum Constants : int
178 	{
179 		flagEnableLinearLimit = 0,
180 		paramLinearLowerLimit = 0,
181 		flagEnableAngularLimit = 1,
182 		paramLinearUpperLimit = 1,
183 		paramLinearLimitSoftness = 2,
184 		flagEnableMotor = 2,
185 		paramLinearRestitution = 3,
186 		flagEnableLinearMotor = 3,
187 		flagMax = 4,
188 		paramLinearDamping = 4,
189 		paramLinearMotorTargetVelocity = 5,
190 		paramLinearMotorForceLimit = 6,
191 		paramAngularLowerLimit = 7,
192 		paramAngularUpperLimit = 8,
193 		paramAngularLimitSoftness = 9,
194 		paramAngularDamping = 10,
195 		paramAngularRestitution = 11,
196 		paramAngularForceLimit = 12,
197 		paramAngularErp = 13,
198 		paramAngularMotorTargetVelocity = 14,
199 		paramAngularMotorForceLimit = 15,
200 		paramMax = 16,
201 	}
202 	/**
203 	
204 	*/
205 	void _setAngularHiLimitX(in double angle)
206 	{
207 		Array _GODOT_args = Array.empty_array;
208 		_GODOT_args.append(angle);
209 		String _GODOT_method_name = String("_set_angular_hi_limit_x");
210 		this.callv(_GODOT_method_name, _GODOT_args);
211 	}
212 	/**
213 	
214 	*/
215 	double _getAngularHiLimitX() const
216 	{
217 		Array _GODOT_args = Array.empty_array;
218 		String _GODOT_method_name = String("_get_angular_hi_limit_x");
219 		return this.callv(_GODOT_method_name, _GODOT_args).as!(RefOrT!double);
220 	}
221 	/**
222 	
223 	*/
224 	void _setAngularLoLimitX(in double angle)
225 	{
226 		Array _GODOT_args = Array.empty_array;
227 		_GODOT_args.append(angle);
228 		String _GODOT_method_name = String("_set_angular_lo_limit_x");
229 		this.callv(_GODOT_method_name, _GODOT_args);
230 	}
231 	/**
232 	
233 	*/
234 	double _getAngularLoLimitX() const
235 	{
236 		Array _GODOT_args = Array.empty_array;
237 		String _GODOT_method_name = String("_get_angular_lo_limit_x");
238 		return this.callv(_GODOT_method_name, _GODOT_args).as!(RefOrT!double);
239 	}
240 	/**
241 	
242 	*/
243 	void _setAngularHiLimitY(in double angle)
244 	{
245 		Array _GODOT_args = Array.empty_array;
246 		_GODOT_args.append(angle);
247 		String _GODOT_method_name = String("_set_angular_hi_limit_y");
248 		this.callv(_GODOT_method_name, _GODOT_args);
249 	}
250 	/**
251 	
252 	*/
253 	double _getAngularHiLimitY() const
254 	{
255 		Array _GODOT_args = Array.empty_array;
256 		String _GODOT_method_name = String("_get_angular_hi_limit_y");
257 		return this.callv(_GODOT_method_name, _GODOT_args).as!(RefOrT!double);
258 	}
259 	/**
260 	
261 	*/
262 	void _setAngularLoLimitY(in double angle)
263 	{
264 		Array _GODOT_args = Array.empty_array;
265 		_GODOT_args.append(angle);
266 		String _GODOT_method_name = String("_set_angular_lo_limit_y");
267 		this.callv(_GODOT_method_name, _GODOT_args);
268 	}
269 	/**
270 	
271 	*/
272 	double _getAngularLoLimitY() const
273 	{
274 		Array _GODOT_args = Array.empty_array;
275 		String _GODOT_method_name = String("_get_angular_lo_limit_y");
276 		return this.callv(_GODOT_method_name, _GODOT_args).as!(RefOrT!double);
277 	}
278 	/**
279 	
280 	*/
281 	void _setAngularHiLimitZ(in double angle)
282 	{
283 		Array _GODOT_args = Array.empty_array;
284 		_GODOT_args.append(angle);
285 		String _GODOT_method_name = String("_set_angular_hi_limit_z");
286 		this.callv(_GODOT_method_name, _GODOT_args);
287 	}
288 	/**
289 	
290 	*/
291 	double _getAngularHiLimitZ() const
292 	{
293 		Array _GODOT_args = Array.empty_array;
294 		String _GODOT_method_name = String("_get_angular_hi_limit_z");
295 		return this.callv(_GODOT_method_name, _GODOT_args).as!(RefOrT!double);
296 	}
297 	/**
298 	
299 	*/
300 	void _setAngularLoLimitZ(in double angle)
301 	{
302 		Array _GODOT_args = Array.empty_array;
303 		_GODOT_args.append(angle);
304 		String _GODOT_method_name = String("_set_angular_lo_limit_z");
305 		this.callv(_GODOT_method_name, _GODOT_args);
306 	}
307 	/**
308 	
309 	*/
310 	double _getAngularLoLimitZ() const
311 	{
312 		Array _GODOT_args = Array.empty_array;
313 		String _GODOT_method_name = String("_get_angular_lo_limit_z");
314 		return this.callv(_GODOT_method_name, _GODOT_args).as!(RefOrT!double);
315 	}
316 	/**
317 	
318 	*/
319 	void setParamX(in long param, in double value)
320 	{
321 		checkClassBinding!(typeof(this))();
322 		ptrcall!(void)(_classBinding.setParamX, _godot_object, param, value);
323 	}
324 	/**
325 	
326 	*/
327 	double getParamX(in long param) const
328 	{
329 		checkClassBinding!(typeof(this))();
330 		return ptrcall!(double)(_classBinding.getParamX, _godot_object, param);
331 	}
332 	/**
333 	
334 	*/
335 	void setParamY(in long param, in double value)
336 	{
337 		checkClassBinding!(typeof(this))();
338 		ptrcall!(void)(_classBinding.setParamY, _godot_object, param, value);
339 	}
340 	/**
341 	
342 	*/
343 	double getParamY(in long param) const
344 	{
345 		checkClassBinding!(typeof(this))();
346 		return ptrcall!(double)(_classBinding.getParamY, _godot_object, param);
347 	}
348 	/**
349 	
350 	*/
351 	void setParamZ(in long param, in double value)
352 	{
353 		checkClassBinding!(typeof(this))();
354 		ptrcall!(void)(_classBinding.setParamZ, _godot_object, param, value);
355 	}
356 	/**
357 	
358 	*/
359 	double getParamZ(in long param) const
360 	{
361 		checkClassBinding!(typeof(this))();
362 		return ptrcall!(double)(_classBinding.getParamZ, _godot_object, param);
363 	}
364 	/**
365 	
366 	*/
367 	void setFlagX(in long flag, in bool value)
368 	{
369 		checkClassBinding!(typeof(this))();
370 		ptrcall!(void)(_classBinding.setFlagX, _godot_object, flag, value);
371 	}
372 	/**
373 	
374 	*/
375 	bool getFlagX(in long flag) const
376 	{
377 		checkClassBinding!(typeof(this))();
378 		return ptrcall!(bool)(_classBinding.getFlagX, _godot_object, flag);
379 	}
380 	/**
381 	
382 	*/
383 	void setFlagY(in long flag, in bool value)
384 	{
385 		checkClassBinding!(typeof(this))();
386 		ptrcall!(void)(_classBinding.setFlagY, _godot_object, flag, value);
387 	}
388 	/**
389 	
390 	*/
391 	bool getFlagY(in long flag) const
392 	{
393 		checkClassBinding!(typeof(this))();
394 		return ptrcall!(bool)(_classBinding.getFlagY, _godot_object, flag);
395 	}
396 	/**
397 	
398 	*/
399 	void setFlagZ(in long flag, in bool value)
400 	{
401 		checkClassBinding!(typeof(this))();
402 		ptrcall!(void)(_classBinding.setFlagZ, _godot_object, flag, value);
403 	}
404 	/**
405 	
406 	*/
407 	bool getFlagZ(in long flag) const
408 	{
409 		checkClassBinding!(typeof(this))();
410 		return ptrcall!(bool)(_classBinding.getFlagZ, _godot_object, flag);
411 	}
412 	/**
413 	If `true` the linear motion across the x-axis is limited.
414 	*/
415 	@property bool linearLimitXEnabled()
416 	{
417 		return getFlagX(0);
418 	}
419 	/// ditto
420 	@property void linearLimitXEnabled(bool v)
421 	{
422 		setFlagX(0, v);
423 	}
424 	/**
425 	The maximum difference between the pivot points' x-axis.
426 	*/
427 	@property double linearLimitXUpperDistance()
428 	{
429 		return getParamX(1);
430 	}
431 	/// ditto
432 	@property void linearLimitXUpperDistance(double v)
433 	{
434 		setParamX(1, v);
435 	}
436 	/**
437 	The minimum difference between the pivot points' x-axis.
438 	*/
439 	@property double linearLimitXLowerDistance()
440 	{
441 		return getParamX(0);
442 	}
443 	/// ditto
444 	@property void linearLimitXLowerDistance(double v)
445 	{
446 		setParamX(0, v);
447 	}
448 	/**
449 	A factor applied to the movement across the x-axis The lower, the slower the movement.
450 	*/
451 	@property double linearLimitXSoftness()
452 	{
453 		return getParamX(2);
454 	}
455 	/// ditto
456 	@property void linearLimitXSoftness(double v)
457 	{
458 		setParamX(2, v);
459 	}
460 	/**
461 	The amount of restitution on the x-axis movement The lower, the more momentum gets lost.
462 	*/
463 	@property double linearLimitXRestitution()
464 	{
465 		return getParamX(3);
466 	}
467 	/// ditto
468 	@property void linearLimitXRestitution(double v)
469 	{
470 		setParamX(3, v);
471 	}
472 	/**
473 	The amount of damping that happens at the x-motion.
474 	*/
475 	@property double linearLimitXDamping()
476 	{
477 		return getParamX(4);
478 	}
479 	/// ditto
480 	@property void linearLimitXDamping(double v)
481 	{
482 		setParamX(4, v);
483 	}
484 	/**
485 	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.
486 	*/
487 	@property bool linearMotorXEnabled()
488 	{
489 		return getFlagX(3);
490 	}
491 	/// ditto
492 	@property void linearMotorXEnabled(bool v)
493 	{
494 		setFlagX(3, v);
495 	}
496 	/**
497 	The speed that the linear motor will attempt to reach on the x-axis.
498 	*/
499 	@property double linearMotorXTargetVelocity()
500 	{
501 		return getParamX(5);
502 	}
503 	/// ditto
504 	@property void linearMotorXTargetVelocity(double v)
505 	{
506 		setParamX(5, v);
507 	}
508 	/**
509 	The maximum force the linear motor can apply on the x-axis while trying to reach the target velocity.
510 	*/
511 	@property double linearMotorXForceLimit()
512 	{
513 		return getParamX(6);
514 	}
515 	/// ditto
516 	@property void linearMotorXForceLimit(double v)
517 	{
518 		setParamX(6, v);
519 	}
520 	/**
521 	If `true` rotation across the x-axis is limited.
522 	*/
523 	@property bool angularLimitXEnabled()
524 	{
525 		return getFlagX(1);
526 	}
527 	/// ditto
528 	@property void angularLimitXEnabled(bool v)
529 	{
530 		setFlagX(1, v);
531 	}
532 	/**
533 	The minimum rotation in positive direction to break loose and rotate around the x-axis.
534 	*/
535 	@property double angularLimitXUpperAngle()
536 	{
537 		return _getAngularHiLimitX();
538 	}
539 	/// ditto
540 	@property void angularLimitXUpperAngle(double v)
541 	{
542 		_setAngularHiLimitX(v);
543 	}
544 	/**
545 	The minimum rotation in negative direction to break loose and rotate around the x-axis.
546 	*/
547 	@property double angularLimitXLowerAngle()
548 	{
549 		return _getAngularLoLimitX();
550 	}
551 	/// ditto
552 	@property void angularLimitXLowerAngle(double v)
553 	{
554 		_setAngularLoLimitX(v);
555 	}
556 	/**
557 	The speed of all rotations across the x-axis.
558 	*/
559 	@property double angularLimitXSoftness()
560 	{
561 		return getParamX(9);
562 	}
563 	/// ditto
564 	@property void angularLimitXSoftness(double v)
565 	{
566 		setParamX(9, v);
567 	}
568 	/**
569 	The amount of rotational restitution across the x-axis. The lower, the more restitution occurs.
570 	*/
571 	@property double angularLimitXRestitution()
572 	{
573 		return getParamX(11);
574 	}
575 	/// ditto
576 	@property void angularLimitXRestitution(double v)
577 	{
578 		setParamX(11, v);
579 	}
580 	/**
581 	The amount of rotational damping across the x-axis.
582 	The lower, the longer an impulse from one side takes to travel to the other side.
583 	*/
584 	@property double angularLimitXDamping()
585 	{
586 		return getParamX(10);
587 	}
588 	/// ditto
589 	@property void angularLimitXDamping(double v)
590 	{
591 		setParamX(10, v);
592 	}
593 	/**
594 	The maximum amount of force that can occur, when rotating around x-axis.
595 	*/
596 	@property double angularLimitXForceLimit()
597 	{
598 		return getParamX(12);
599 	}
600 	/// ditto
601 	@property void angularLimitXForceLimit(double v)
602 	{
603 		setParamX(12, v);
604 	}
605 	/**
606 	When rotating across x-axis, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower.
607 	*/
608 	@property double angularLimitXErp()
609 	{
610 		return getParamX(13);
611 	}
612 	/// ditto
613 	@property void angularLimitXErp(double v)
614 	{
615 		setParamX(13, v);
616 	}
617 	/**
618 	If `true` a rotating motor at the x-axis is enabled.
619 	*/
620 	@property bool angularMotorXEnabled()
621 	{
622 		return getFlagX(2);
623 	}
624 	/// ditto
625 	@property void angularMotorXEnabled(bool v)
626 	{
627 		setFlagX(2, v);
628 	}
629 	/**
630 	Target speed for the motor at the x-axis.
631 	*/
632 	@property double angularMotorXTargetVelocity()
633 	{
634 		return getParamX(14);
635 	}
636 	/// ditto
637 	@property void angularMotorXTargetVelocity(double v)
638 	{
639 		setParamX(14, v);
640 	}
641 	/**
642 	Maximum acceleration for the motor at the x-axis.
643 	*/
644 	@property double angularMotorXForceLimit()
645 	{
646 		return getParamX(15);
647 	}
648 	/// ditto
649 	@property void angularMotorXForceLimit(double v)
650 	{
651 		setParamX(15, v);
652 	}
653 	/**
654 	If `true` the linear motion across the y-axis is limited.
655 	*/
656 	@property bool linearLimitYEnabled()
657 	{
658 		return getFlagY(0);
659 	}
660 	/// ditto
661 	@property void linearLimitYEnabled(bool v)
662 	{
663 		setFlagY(0, v);
664 	}
665 	/**
666 	The maximum difference between the pivot points' y-axis.
667 	*/
668 	@property double linearLimitYUpperDistance()
669 	{
670 		return getParamY(1);
671 	}
672 	/// ditto
673 	@property void linearLimitYUpperDistance(double v)
674 	{
675 		setParamY(1, v);
676 	}
677 	/**
678 	The minimum difference between the pivot points' y-axis.
679 	*/
680 	@property double linearLimitYLowerDistance()
681 	{
682 		return getParamY(0);
683 	}
684 	/// ditto
685 	@property void linearLimitYLowerDistance(double v)
686 	{
687 		setParamY(0, v);
688 	}
689 	/**
690 	A factor applied to the movement across the y-axis The lower, the slower the movement.
691 	*/
692 	@property double linearLimitYSoftness()
693 	{
694 		return getParamY(2);
695 	}
696 	/// ditto
697 	@property void linearLimitYSoftness(double v)
698 	{
699 		setParamY(2, v);
700 	}
701 	/**
702 	The amount of restitution on the y-axis movement The lower, the more momentum gets lost.
703 	*/
704 	@property double linearLimitYRestitution()
705 	{
706 		return getParamY(3);
707 	}
708 	/// ditto
709 	@property void linearLimitYRestitution(double v)
710 	{
711 		setParamY(3, v);
712 	}
713 	/**
714 	The amount of damping that happens at the y-motion.
715 	*/
716 	@property double linearLimitYDamping()
717 	{
718 		return getParamY(4);
719 	}
720 	/// ditto
721 	@property void linearLimitYDamping(double v)
722 	{
723 		setParamY(4, v);
724 	}
725 	/**
726 	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.
727 	*/
728 	@property bool linearMotorYEnabled()
729 	{
730 		return getFlagY(3);
731 	}
732 	/// ditto
733 	@property void linearMotorYEnabled(bool v)
734 	{
735 		setFlagY(3, v);
736 	}
737 	/**
738 	The speed that the linear motor will attempt to reach on the y-axis.
739 	*/
740 	@property double linearMotorYTargetVelocity()
741 	{
742 		return getParamY(5);
743 	}
744 	/// ditto
745 	@property void linearMotorYTargetVelocity(double v)
746 	{
747 		setParamY(5, v);
748 	}
749 	/**
750 	The maximum force the linear motor can apply on the y-axis while trying to reach the target velocity.
751 	*/
752 	@property double linearMotorYForceLimit()
753 	{
754 		return getParamY(6);
755 	}
756 	/// ditto
757 	@property void linearMotorYForceLimit(double v)
758 	{
759 		setParamY(6, v);
760 	}
761 	/**
762 	If `true` rotation across the y-axis is limited.
763 	*/
764 	@property bool angularLimitYEnabled()
765 	{
766 		return getFlagY(1);
767 	}
768 	/// ditto
769 	@property void angularLimitYEnabled(bool v)
770 	{
771 		setFlagY(1, v);
772 	}
773 	/**
774 	The minimum rotation in positive direction to break loose and rotate around the y-axis.
775 	*/
776 	@property double angularLimitYUpperAngle()
777 	{
778 		return _getAngularHiLimitY();
779 	}
780 	/// ditto
781 	@property void angularLimitYUpperAngle(double v)
782 	{
783 		_setAngularHiLimitY(v);
784 	}
785 	/**
786 	The minimum rotation in negative direction to break loose and rotate around the y-axis.
787 	*/
788 	@property double angularLimitYLowerAngle()
789 	{
790 		return _getAngularLoLimitY();
791 	}
792 	/// ditto
793 	@property void angularLimitYLowerAngle(double v)
794 	{
795 		_setAngularLoLimitY(v);
796 	}
797 	/**
798 	The speed of all rotations across the y-axis.
799 	*/
800 	@property double angularLimitYSoftness()
801 	{
802 		return getParamY(9);
803 	}
804 	/// ditto
805 	@property void angularLimitYSoftness(double v)
806 	{
807 		setParamY(9, v);
808 	}
809 	/**
810 	The amount of rotational restitution across the y-axis. The lower, the more restitution occurs.
811 	*/
812 	@property double angularLimitYRestitution()
813 	{
814 		return getParamY(11);
815 	}
816 	/// ditto
817 	@property void angularLimitYRestitution(double v)
818 	{
819 		setParamY(11, v);
820 	}
821 	/**
822 	The amount of rotational damping across the y-axis. The lower, the more dampening occurs.
823 	*/
824 	@property double angularLimitYDamping()
825 	{
826 		return getParamY(10);
827 	}
828 	/// ditto
829 	@property void angularLimitYDamping(double v)
830 	{
831 		setParamY(10, v);
832 	}
833 	/**
834 	The maximum amount of force that can occur, when rotating around y-axis.
835 	*/
836 	@property double angularLimitYForceLimit()
837 	{
838 		return getParamY(12);
839 	}
840 	/// ditto
841 	@property void angularLimitYForceLimit(double v)
842 	{
843 		setParamY(12, v);
844 	}
845 	/**
846 	When rotating across y-axis, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower.
847 	*/
848 	@property double angularLimitYErp()
849 	{
850 		return getParamY(13);
851 	}
852 	/// ditto
853 	@property void angularLimitYErp(double v)
854 	{
855 		setParamY(13, v);
856 	}
857 	/**
858 	If `true` a rotating motor at the y-axis is enabled.
859 	*/
860 	@property bool angularMotorYEnabled()
861 	{
862 		return getFlagY(2);
863 	}
864 	/// ditto
865 	@property void angularMotorYEnabled(bool v)
866 	{
867 		setFlagY(2, v);
868 	}
869 	/**
870 	Target speed for the motor at the y-axis.
871 	*/
872 	@property double angularMotorYTargetVelocity()
873 	{
874 		return getParamY(14);
875 	}
876 	/// ditto
877 	@property void angularMotorYTargetVelocity(double v)
878 	{
879 		setParamY(14, v);
880 	}
881 	/**
882 	Maximum acceleration for the motor at the y-axis.
883 	*/
884 	@property double angularMotorYForceLimit()
885 	{
886 		return getParamY(15);
887 	}
888 	/// ditto
889 	@property void angularMotorYForceLimit(double v)
890 	{
891 		setParamY(15, v);
892 	}
893 	/**
894 	If `true` the linear motion across the z-axis is limited.
895 	*/
896 	@property bool linearLimitZEnabled()
897 	{
898 		return getFlagZ(0);
899 	}
900 	/// ditto
901 	@property void linearLimitZEnabled(bool v)
902 	{
903 		setFlagZ(0, v);
904 	}
905 	/**
906 	The maximum difference between the pivot points' z-axis.
907 	*/
908 	@property double linearLimitZUpperDistance()
909 	{
910 		return getParamZ(1);
911 	}
912 	/// ditto
913 	@property void linearLimitZUpperDistance(double v)
914 	{
915 		setParamZ(1, v);
916 	}
917 	/**
918 	The minimum difference between the pivot points' z-axis.
919 	*/
920 	@property double linearLimitZLowerDistance()
921 	{
922 		return getParamZ(0);
923 	}
924 	/// ditto
925 	@property void linearLimitZLowerDistance(double v)
926 	{
927 		setParamZ(0, v);
928 	}
929 	/**
930 	A factor applied to the movement across the z-axis The lower, the slower the movement.
931 	*/
932 	@property double linearLimitZSoftness()
933 	{
934 		return getParamZ(2);
935 	}
936 	/// ditto
937 	@property void linearLimitZSoftness(double v)
938 	{
939 		setParamZ(2, v);
940 	}
941 	/**
942 	The amount of restitution on the z-axis movement The lower, the more momentum gets lost.
943 	*/
944 	@property double linearLimitZRestitution()
945 	{
946 		return getParamZ(3);
947 	}
948 	/// ditto
949 	@property void linearLimitZRestitution(double v)
950 	{
951 		setParamZ(3, v);
952 	}
953 	/**
954 	The amount of damping that happens at the z-motion.
955 	*/
956 	@property double linearLimitZDamping()
957 	{
958 		return getParamZ(4);
959 	}
960 	/// ditto
961 	@property void linearLimitZDamping(double v)
962 	{
963 		setParamZ(4, v);
964 	}
965 	/**
966 	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.
967 	*/
968 	@property bool linearMotorZEnabled()
969 	{
970 		return getFlagZ(3);
971 	}
972 	/// ditto
973 	@property void linearMotorZEnabled(bool v)
974 	{
975 		setFlagZ(3, v);
976 	}
977 	/**
978 	The speed that the linear motor will attempt to reach on the z-axis.
979 	*/
980 	@property double linearMotorZTargetVelocity()
981 	{
982 		return getParamZ(5);
983 	}
984 	/// ditto
985 	@property void linearMotorZTargetVelocity(double v)
986 	{
987 		setParamZ(5, v);
988 	}
989 	/**
990 	The maximum force the linear motor can apply on the z-axis while trying to reach the target velocity.
991 	*/
992 	@property double linearMotorZForceLimit()
993 	{
994 		return getParamZ(6);
995 	}
996 	/// ditto
997 	@property void linearMotorZForceLimit(double v)
998 	{
999 		setParamZ(6, v);
1000 	}
1001 	/**
1002 	If `true` rotation across the z-axis is limited.
1003 	*/
1004 	@property bool angularLimitZEnabled()
1005 	{
1006 		return getFlagZ(1);
1007 	}
1008 	/// ditto
1009 	@property void angularLimitZEnabled(bool v)
1010 	{
1011 		setFlagZ(1, v);
1012 	}
1013 	/**
1014 	The minimum rotation in positive direction to break loose and rotate around the z-axis.
1015 	*/
1016 	@property double angularLimitZUpperAngle()
1017 	{
1018 		return _getAngularHiLimitZ();
1019 	}
1020 	/// ditto
1021 	@property void angularLimitZUpperAngle(double v)
1022 	{
1023 		_setAngularHiLimitZ(v);
1024 	}
1025 	/**
1026 	The minimum rotation in negative direction to break loose and rotate around the z-axis.
1027 	*/
1028 	@property double angularLimitZLowerAngle()
1029 	{
1030 		return _getAngularLoLimitZ();
1031 	}
1032 	/// ditto
1033 	@property void angularLimitZLowerAngle(double v)
1034 	{
1035 		_setAngularLoLimitZ(v);
1036 	}
1037 	/**
1038 	The speed of all rotations across the z-axis.
1039 	*/
1040 	@property double angularLimitZSoftness()
1041 	{
1042 		return getParamZ(9);
1043 	}
1044 	/// ditto
1045 	@property void angularLimitZSoftness(double v)
1046 	{
1047 		setParamZ(9, v);
1048 	}
1049 	/**
1050 	The amount of rotational restitution across the z-axis. The lower, the more restitution occurs.
1051 	*/
1052 	@property double angularLimitZRestitution()
1053 	{
1054 		return getParamZ(11);
1055 	}
1056 	/// ditto
1057 	@property void angularLimitZRestitution(double v)
1058 	{
1059 		setParamZ(11, v);
1060 	}
1061 	/**
1062 	The amount of rotational damping across the z-axis. The lower, the more dampening occurs.
1063 	*/
1064 	@property double angularLimitZDamping()
1065 	{
1066 		return getParamZ(10);
1067 	}
1068 	/// ditto
1069 	@property void angularLimitZDamping(double v)
1070 	{
1071 		setParamZ(10, v);
1072 	}
1073 	/**
1074 	The maximum amount of force that can occur, when rotating around z-axis.
1075 	*/
1076 	@property double angularLimitZForceLimit()
1077 	{
1078 		return getParamZ(12);
1079 	}
1080 	/// ditto
1081 	@property void angularLimitZForceLimit(double v)
1082 	{
1083 		setParamZ(12, v);
1084 	}
1085 	/**
1086 	When rotating across z-axis, this error tolerance factor defines how much the correction gets slowed down. The lower, the slower.
1087 	*/
1088 	@property double angularLimitZErp()
1089 	{
1090 		return getParamZ(13);
1091 	}
1092 	/// ditto
1093 	@property void angularLimitZErp(double v)
1094 	{
1095 		setParamZ(13, v);
1096 	}
1097 	/**
1098 	If `true` a rotating motor at the z-axis is enabled.
1099 	*/
1100 	@property bool angularMotorZEnabled()
1101 	{
1102 		return getFlagZ(2);
1103 	}
1104 	/// ditto
1105 	@property void angularMotorZEnabled(bool v)
1106 	{
1107 		setFlagZ(2, v);
1108 	}
1109 	/**
1110 	Target speed for the motor at the z-axis.
1111 	*/
1112 	@property double angularMotorZTargetVelocity()
1113 	{
1114 		return getParamZ(14);
1115 	}
1116 	/// ditto
1117 	@property void angularMotorZTargetVelocity(double v)
1118 	{
1119 		setParamZ(14, v);
1120 	}
1121 	/**
1122 	Maximum acceleration for the motor at the z-axis.
1123 	*/
1124 	@property double angularMotorZForceLimit()
1125 	{
1126 		return getParamZ(15);
1127 	}
1128 	/// ditto
1129 	@property void angularMotorZForceLimit(double v)
1130 	{
1131 		setParamZ(15, v);
1132 	}
1133 }