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 }