gdcore-tools 2.0.0-gd-v5.5.230-autobuild → 2.0.0-gd-v5.5.231-autobuild

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/Runtime/CustomRuntimeObject.js +1 -1
  2. package/dist/Runtime/CustomRuntimeObject.js.map +2 -2
  3. package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js +1 -1
  4. package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js.map +2 -2
  5. package/dist/Runtime/Extensions/3D/JsExtension.js +6 -2
  6. package/dist/Runtime/Extensions/DestroyOutsideBehavior/destroyoutsideruntimebehavior.js +1 -1
  7. package/dist/Runtime/Extensions/DestroyOutsideBehavior/destroyoutsideruntimebehavior.js.map +2 -2
  8. package/dist/Runtime/Extensions/Multiplayer/messageManager.js +1 -1
  9. package/dist/Runtime/Extensions/Multiplayer/messageManager.js.map +2 -2
  10. package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js +1 -1
  11. package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js.map +2 -2
  12. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject.js +1 -1
  13. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject.js.map +2 -2
  14. package/dist/Runtime/Extensions/Physics3DBehavior/JsExtension.js +1047 -3
  15. package/dist/Runtime/Extensions/Physics3DBehavior/Physics3DRuntimeBehavior.js +1 -1
  16. package/dist/Runtime/Extensions/Physics3DBehavior/Physics3DRuntimeBehavior.js.map +2 -2
  17. package/dist/Runtime/Extensions/Physics3DBehavior/PhysicsCar3DRuntimeBehavior.js +2 -0
  18. package/dist/Runtime/Extensions/Physics3DBehavior/PhysicsCar3DRuntimeBehavior.js.map +7 -0
  19. package/dist/Runtime/Extensions/Physics3DBehavior/PhysicsCharacter3DRuntimeBehavior.js +1 -1
  20. package/dist/Runtime/Extensions/Physics3DBehavior/PhysicsCharacter3DRuntimeBehavior.js.map +2 -2
  21. package/dist/Runtime/Extensions/Physics3DBehavior/jolt-physics.d.ts +94 -9
  22. package/dist/Runtime/Extensions/Physics3DBehavior/jolt-physics.wasm.js +1 -1
  23. package/dist/Runtime/Extensions/Physics3DBehavior/jolt-physics.wasm.js.map +2 -2
  24. package/dist/Runtime/Extensions/Physics3DBehavior/jolt-physics.wasm.wasm +0 -0
  25. package/dist/Runtime/Extensions/TweenBehavior/tweenruntimebehavior.js +1 -1
  26. package/dist/Runtime/Extensions/TweenBehavior/tweenruntimebehavior.js.map +2 -2
  27. package/dist/Runtime/RuntimeInstanceContainer.js +1 -1
  28. package/dist/Runtime/RuntimeInstanceContainer.js.map +2 -2
  29. package/dist/Runtime/debugger-client/hot-reloader.js +1 -1
  30. package/dist/Runtime/debugger-client/hot-reloader.js.map +2 -2
  31. package/dist/Runtime/events-tools/cameratools.js +1 -1
  32. package/dist/Runtime/events-tools/cameratools.js.map +2 -2
  33. package/dist/Runtime/runtimeobject.js +1 -1
  34. package/dist/Runtime/runtimeobject.js.map +2 -2
  35. package/dist/Runtime/runtimescene.js +1 -1
  36. package/dist/Runtime/runtimescene.js.map +2 -2
  37. package/dist/Runtime/spriteruntimeobject.js +1 -1
  38. package/dist/Runtime/spriteruntimeobject.js.map +2 -2
  39. package/dist/lib/libGD.cjs +1 -1
  40. package/dist/lib/libGD.wasm +0 -0
  41. package/dist/loaders.cjs +3 -3
  42. package/gd.d.ts +1 -0
  43. package/package.json +1 -1
@@ -97,6 +97,60 @@ module.exports = {
97
97
  return true;
98
98
  }
99
99
 
100
+ if (propertyName === 'shapeOffsetX') {
101
+ const newValueAsNumber = parseFloat(newValue);
102
+ if (newValueAsNumber !== newValueAsNumber) return false;
103
+ behaviorContent
104
+ .getChild('shapeOffsetX')
105
+ .setDoubleValue(newValueAsNumber);
106
+ return true;
107
+ }
108
+
109
+ if (propertyName === 'shapeOffsetY') {
110
+ const newValueAsNumber = parseFloat(newValue);
111
+ if (newValueAsNumber !== newValueAsNumber) return false;
112
+ behaviorContent
113
+ .getChild('shapeOffsetY')
114
+ .setDoubleValue(newValueAsNumber);
115
+ return true;
116
+ }
117
+
118
+ if (propertyName === 'shapeOffsetZ') {
119
+ const newValueAsNumber = parseFloat(newValue);
120
+ if (newValueAsNumber !== newValueAsNumber) return false;
121
+ behaviorContent
122
+ .getChild('shapeOffsetZ')
123
+ .setDoubleValue(newValueAsNumber);
124
+ return true;
125
+ }
126
+
127
+ if (propertyName === 'massCenterOffsetX') {
128
+ const newValueAsNumber = parseFloat(newValue);
129
+ if (newValueAsNumber !== newValueAsNumber) return false;
130
+ behaviorContent
131
+ .getChild('massCenterOffsetX')
132
+ .setDoubleValue(newValueAsNumber);
133
+ return true;
134
+ }
135
+
136
+ if (propertyName === 'massCenterOffsetY') {
137
+ const newValueAsNumber = parseFloat(newValue);
138
+ if (newValueAsNumber !== newValueAsNumber) return false;
139
+ behaviorContent
140
+ .getChild('massCenterOffsetY')
141
+ .setDoubleValue(newValueAsNumber);
142
+ return true;
143
+ }
144
+
145
+ if (propertyName === 'massCenterOffsetZ') {
146
+ const newValueAsNumber = parseFloat(newValue);
147
+ if (newValueAsNumber !== newValueAsNumber) return false;
148
+ behaviorContent
149
+ .getChild('massCenterOffsetZ')
150
+ .setDoubleValue(newValueAsNumber);
151
+ return true;
152
+ }
153
+
100
154
  if (propertyName === 'density') {
101
155
  behaviorContent
102
156
  .getChild('density')
@@ -104,6 +158,13 @@ module.exports = {
104
158
  return true;
105
159
  }
106
160
 
161
+ if (propertyName === 'massOverride') {
162
+ behaviorContent
163
+ .getChild('massOverride')
164
+ .setDoubleValue(parseFloat(newValue));
165
+ return true;
166
+ }
167
+
107
168
  if (propertyName === 'friction') {
108
169
  const newValueAsNumber = parseFloat(newValue);
109
170
  if (newValueAsNumber !== newValueAsNumber) return false;
@@ -166,7 +227,7 @@ module.exports = {
166
227
 
167
228
  behaviorProperties
168
229
  .getOrCreate('object3D')
169
- .setValue(behaviorContent.getChild('Object3D').getStringValue())
230
+ .setValue(behaviorContent.getChild('object3D').getStringValue())
170
231
  .setType('Behavior')
171
232
  .setLabel('3D capability')
172
233
  .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
@@ -277,6 +338,107 @@ module.exports = {
277
338
  .setLabel('Shape Dimension C')
278
339
  .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
279
340
  .setHidden(true); // Hidden as required to be changed in the full editor.
341
+ if (!behaviorContent.hasChild('shapeOffsetX')) {
342
+ behaviorContent.addChild('shapeOffsetX').setDoubleValue(0);
343
+ }
344
+ behaviorProperties
345
+ .getOrCreate('shapeOffsetX')
346
+ .setValue(
347
+ behaviorContent
348
+ .getChild('shapeOffsetX')
349
+ .getDoubleValue()
350
+ .toString(10)
351
+ )
352
+ .setType('Number')
353
+ .setMeasurementUnit(gd.MeasurementUnit.getPixel())
354
+ .setLabel('Shape offset X')
355
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
356
+ .setAdvanced(true)
357
+ .setHidden(true); // Hidden as required to be changed in the full editor.
358
+ if (!behaviorContent.hasChild('shapeOffsetY')) {
359
+ behaviorContent.addChild('shapeOffsetY').setDoubleValue(0);
360
+ }
361
+ behaviorProperties
362
+ .getOrCreate('shapeOffsetY')
363
+ .setValue(
364
+ behaviorContent
365
+ .getChild('shapeOffsetY')
366
+ .getDoubleValue()
367
+ .toString(10)
368
+ )
369
+ .setType('Number')
370
+ .setMeasurementUnit(gd.MeasurementUnit.getPixel())
371
+ .setLabel('Shape offset Y')
372
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
373
+ .setHidden(true); // Hidden as required to be changed in the full editor.
374
+ if (!behaviorContent.hasChild('shapeOffsetZ')) {
375
+ behaviorContent.addChild('shapeOffsetZ').setDoubleValue(0);
376
+ }
377
+ behaviorProperties
378
+ .getOrCreate('shapeOffsetZ')
379
+ .setValue(
380
+ behaviorContent
381
+ .getChild('shapeOffsetZ')
382
+ .getDoubleValue()
383
+ .toString(10)
384
+ )
385
+ .setType('Number')
386
+ .setMeasurementUnit(gd.MeasurementUnit.getPixel())
387
+ .setLabel('Shape offset Z')
388
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
389
+ .setAdvanced(true)
390
+ .setHidden(true); // Hidden as required to be changed in the full editor.
391
+ if (!behaviorContent.hasChild('massCenterOffsetX')) {
392
+ behaviorContent.addChild('massCenterOffsetX').setDoubleValue(0);
393
+ }
394
+ behaviorProperties
395
+ .getOrCreate('massCenterOffsetX')
396
+ .setValue(
397
+ behaviorContent
398
+ .getChild('massCenterOffsetX')
399
+ .getDoubleValue()
400
+ .toString(10)
401
+ )
402
+ .setType('Number')
403
+ .setMeasurementUnit(gd.MeasurementUnit.getPixel())
404
+ .setLabel('Center of mass offset X')
405
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
406
+ .setAdvanced(true)
407
+ .setHidden(true); // Hidden as required to be changed in the full editor.
408
+ if (!behaviorContent.hasChild('massCenterOffsetY')) {
409
+ behaviorContent.addChild('massCenterOffsetY').setDoubleValue(0);
410
+ }
411
+ behaviorProperties
412
+ .getOrCreate('massCenterOffsetY')
413
+ .setValue(
414
+ behaviorContent
415
+ .getChild('massCenterOffsetY')
416
+ .getDoubleValue()
417
+ .toString(10)
418
+ )
419
+ .setType('Number')
420
+ .setMeasurementUnit(gd.MeasurementUnit.getPixel())
421
+ .setLabel('Center of mass offset Y')
422
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
423
+ .setAdvanced(true)
424
+ .setHidden(true); // Hidden as required to be changed in the full editor.
425
+ if (!behaviorContent.hasChild('massCenterOffsetZ')) {
426
+ behaviorContent.addChild('massCenterOffsetZ').setDoubleValue(0);
427
+ }
428
+ behaviorProperties
429
+ .getOrCreate('massCenterOffsetZ')
430
+ .setValue(
431
+ behaviorContent
432
+ .getChild('massCenterOffsetZ')
433
+ .getDoubleValue()
434
+ .toString(10)
435
+ )
436
+ .setType('Number')
437
+ .setMeasurementUnit(gd.MeasurementUnit.getPixel())
438
+ .setLabel('Center of mass offset Z')
439
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
440
+ .setAdvanced(true)
441
+ .setHidden(true); // Hidden as required to be changed in the full editor.
280
442
  behaviorProperties
281
443
  .getOrCreate('density')
282
444
  .setValue(
@@ -289,6 +451,21 @@ module.exports = {
289
451
  'Define the weight of the object, according to its size. The bigger the density, the heavier the object.'
290
452
  )
291
453
  );
454
+ if (!behaviorContent.hasChild('massOverride')) {
455
+ behaviorContent.addChild('massOverride').setDoubleValue(0);
456
+ }
457
+ behaviorProperties
458
+ .getOrCreate('massOverride')
459
+ .setLabel(_('Mass override'))
460
+ .setGroup('')
461
+ .setType('Number')
462
+ .setValue(
463
+ behaviorContent
464
+ .getChild('massOverride')
465
+ .getDoubleValue()
466
+ .toString(10)
467
+ )
468
+ .setDescription(_('Leave at 0 to use the density.'));
292
469
  behaviorProperties
293
470
  .getOrCreate('friction')
294
471
  .setValue(
@@ -387,6 +564,13 @@ module.exports = {
387
564
  behaviorContent.addChild('shapeDimensionA').setDoubleValue(0);
388
565
  behaviorContent.addChild('shapeDimensionB').setDoubleValue(0);
389
566
  behaviorContent.addChild('shapeDimensionC').setDoubleValue(0);
567
+ behaviorContent.addChild('shapeOffsetX').setDoubleValue(0);
568
+ behaviorContent.addChild('shapeOffsetY').setDoubleValue(0);
569
+ behaviorContent.addChild('shapeOffsetZ').setDoubleValue(0);
570
+ behaviorContent.addChild('massCenterOffsetX').setDoubleValue(0);
571
+ behaviorContent.addChild('massCenterOffsetY').setDoubleValue(0);
572
+ behaviorContent.addChild('massCenterOffsetZ').setDoubleValue(0);
573
+ behaviorContent.addChild('massOverride').setDoubleValue(0);
390
574
  behaviorContent.addChild('density').setDoubleValue(1.0);
391
575
  behaviorContent.addChild('friction').setDoubleValue(0.3);
392
576
  behaviorContent.addChild('restitution').setDoubleValue(0.1);
@@ -2454,6 +2638,866 @@ module.exports = {
2454
2638
  .setGetter('getMaxFallingSpeed');
2455
2639
  }
2456
2640
 
2641
+ {
2642
+ const behavior = new gd.BehaviorJsImplementation();
2643
+ behavior.updateProperty = function (
2644
+ behaviorContent,
2645
+ propertyName,
2646
+ newValue
2647
+ ) {
2648
+ if (propertyName === 'physics3D') {
2649
+ behaviorContent.getChild('physics3D').setStringValue(newValue);
2650
+ return true;
2651
+ }
2652
+
2653
+ if (propertyName === 'steerAngleMax') {
2654
+ const newValueAsNumber = parseFloat(newValue);
2655
+ if (newValueAsNumber !== newValueAsNumber) return false;
2656
+ behaviorContent
2657
+ .getChild('steerAngleMax')
2658
+ .setDoubleValue(newValueAsNumber);
2659
+ return true;
2660
+ }
2661
+
2662
+ if (propertyName === 'beginningSteerSpeed') {
2663
+ const newValueAsNumber = parseFloat(newValue);
2664
+ if (newValueAsNumber !== newValueAsNumber) return false;
2665
+ behaviorContent
2666
+ .getChild('beginningSteerSpeed')
2667
+ .setDoubleValue(newValueAsNumber);
2668
+ return true;
2669
+ }
2670
+
2671
+ if (propertyName === 'endSteerSpeed') {
2672
+ const newValueAsNumber = parseFloat(newValue);
2673
+ if (newValueAsNumber !== newValueAsNumber) return false;
2674
+ behaviorContent
2675
+ .getChild('endSteerSpeed')
2676
+ .setDoubleValue(newValueAsNumber);
2677
+ return true;
2678
+ }
2679
+
2680
+ if (propertyName === 'engineTorqueMax') {
2681
+ const newValueAsNumber = parseFloat(newValue);
2682
+ if (newValueAsNumber !== newValueAsNumber) return false;
2683
+ behaviorContent
2684
+ .getChild('engineTorqueMax')
2685
+ .setDoubleValue(newValueAsNumber);
2686
+ return true;
2687
+ }
2688
+
2689
+ if (propertyName === 'engineSpeedMax') {
2690
+ const newValueAsNumber = parseFloat(newValue);
2691
+ if (newValueAsNumber !== newValueAsNumber) return false;
2692
+ behaviorContent
2693
+ .getChild('engineSpeedMax')
2694
+ .setDoubleValue(newValueAsNumber);
2695
+ return true;
2696
+ }
2697
+
2698
+ if (propertyName === 'engineInertia') {
2699
+ const newValueAsNumber = parseFloat(newValue);
2700
+ if (newValueAsNumber !== newValueAsNumber) return false;
2701
+ behaviorContent
2702
+ .getChild('engineInertia')
2703
+ .setDoubleValue(newValueAsNumber);
2704
+ return true;
2705
+ }
2706
+
2707
+ if (propertyName === 'reverseGearRatio1') {
2708
+ const newValueAsNumber = parseFloat(newValue);
2709
+ if (newValueAsNumber !== newValueAsNumber) return false;
2710
+ behaviorContent
2711
+ .getChild('reverseGearRatio1')
2712
+ .setDoubleValue(newValueAsNumber);
2713
+ return true;
2714
+ }
2715
+
2716
+ if (propertyName === 'gearRatio1') {
2717
+ const newValueAsNumber = parseFloat(newValue);
2718
+ if (newValueAsNumber !== newValueAsNumber) return false;
2719
+ behaviorContent
2720
+ .getChild('gearRatio1')
2721
+ .setDoubleValue(newValueAsNumber);
2722
+ return true;
2723
+ }
2724
+
2725
+ if (propertyName === 'gearRatio2') {
2726
+ const newValueAsNumber = parseFloat(newValue);
2727
+ if (newValueAsNumber !== newValueAsNumber) return false;
2728
+ behaviorContent
2729
+ .getChild('gearRatio2')
2730
+ .setDoubleValue(newValueAsNumber);
2731
+ return true;
2732
+ }
2733
+
2734
+ if (propertyName === 'gearRatio2') {
2735
+ const newValueAsNumber = parseFloat(newValue);
2736
+ if (newValueAsNumber !== newValueAsNumber) return false;
2737
+ behaviorContent
2738
+ .getChild('gearRatio2')
2739
+ .setDoubleValue(newValueAsNumber);
2740
+ return true;
2741
+ }
2742
+
2743
+ if (propertyName === 'gearRatio3') {
2744
+ const newValueAsNumber = parseFloat(newValue);
2745
+ if (newValueAsNumber !== newValueAsNumber) return false;
2746
+ behaviorContent
2747
+ .getChild('gearRatio3')
2748
+ .setDoubleValue(newValueAsNumber);
2749
+ return true;
2750
+ }
2751
+
2752
+ if (propertyName === 'gearRatio4') {
2753
+ const newValueAsNumber = parseFloat(newValue);
2754
+ if (newValueAsNumber !== newValueAsNumber) return false;
2755
+ behaviorContent
2756
+ .getChild('gearRatio4')
2757
+ .setDoubleValue(newValueAsNumber);
2758
+ return true;
2759
+ }
2760
+
2761
+ if (propertyName === 'gearRatio5') {
2762
+ const newValueAsNumber = parseFloat(newValue);
2763
+ if (newValueAsNumber !== newValueAsNumber) return false;
2764
+ behaviorContent
2765
+ .getChild('gearRatio5')
2766
+ .setDoubleValue(newValueAsNumber);
2767
+ return true;
2768
+ }
2769
+
2770
+ if (propertyName === 'gearRatio6') {
2771
+ const newValueAsNumber = parseFloat(newValue);
2772
+ if (newValueAsNumber !== newValueAsNumber) return false;
2773
+ behaviorContent
2774
+ .getChild('gearRatio6')
2775
+ .setDoubleValue(newValueAsNumber);
2776
+ return true;
2777
+ }
2778
+
2779
+ if (propertyName === 'wheelRadius') {
2780
+ const newValueAsNumber = parseFloat(newValue);
2781
+ if (newValueAsNumber !== newValueAsNumber) return false;
2782
+ behaviorContent
2783
+ .getChild('wheelRadius')
2784
+ .setDoubleValue(newValueAsNumber);
2785
+ return true;
2786
+ }
2787
+
2788
+ if (propertyName === 'wheelWidth') {
2789
+ const newValueAsNumber = parseFloat(newValue);
2790
+ if (newValueAsNumber !== newValueAsNumber) return false;
2791
+ behaviorContent
2792
+ .getChild('wheelWidth')
2793
+ .setDoubleValue(newValueAsNumber);
2794
+ return true;
2795
+ }
2796
+
2797
+ if (propertyName === 'backWheelOffsetX') {
2798
+ const newValueAsNumber = parseFloat(newValue);
2799
+ if (newValueAsNumber !== newValueAsNumber) return false;
2800
+ behaviorContent
2801
+ .getChild('backWheelOffsetX')
2802
+ .setDoubleValue(newValueAsNumber);
2803
+ return true;
2804
+ }
2805
+
2806
+ if (propertyName === 'frontWheelOffsetX') {
2807
+ const newValueAsNumber = parseFloat(newValue);
2808
+ if (newValueAsNumber !== newValueAsNumber) return false;
2809
+ behaviorContent
2810
+ .getChild('frontWheelOffsetX')
2811
+ .setDoubleValue(newValueAsNumber);
2812
+ return true;
2813
+ }
2814
+
2815
+ if (propertyName === 'wheelOffsetY') {
2816
+ const newValueAsNumber = parseFloat(newValue);
2817
+ if (newValueAsNumber !== newValueAsNumber) return false;
2818
+ behaviorContent
2819
+ .getChild('wheelOffsetY')
2820
+ .setDoubleValue(newValueAsNumber);
2821
+ return true;
2822
+ }
2823
+
2824
+ if (propertyName === 'wheelOffsetZ') {
2825
+ const newValueAsNumber = parseFloat(newValue);
2826
+ if (newValueAsNumber !== newValueAsNumber) return false;
2827
+ behaviorContent
2828
+ .getChild('wheelOffsetZ')
2829
+ .setDoubleValue(newValueAsNumber);
2830
+ return true;
2831
+ }
2832
+
2833
+ if (propertyName === 'brakeTorqueMax') {
2834
+ const newValueAsNumber = parseFloat(newValue);
2835
+ if (newValueAsNumber !== newValueAsNumber) return false;
2836
+ behaviorContent
2837
+ .getChild('brakeTorqueMax')
2838
+ .setDoubleValue(newValueAsNumber);
2839
+ return true;
2840
+ }
2841
+
2842
+ if (propertyName === 'handBrakeTorqueMax') {
2843
+ const newValueAsNumber = parseFloat(newValue);
2844
+ if (newValueAsNumber !== newValueAsNumber) return false;
2845
+ behaviorContent
2846
+ .getChild('handBrakeTorqueMax')
2847
+ .setDoubleValue(newValueAsNumber);
2848
+ return true;
2849
+ }
2850
+
2851
+ if (propertyName === 'hasBackWheelDrive') {
2852
+ behaviorContent
2853
+ .getChild('hasBackWheelDrive')
2854
+ .setBoolValue(newValue === '1');
2855
+ return true;
2856
+ }
2857
+
2858
+ if (propertyName === 'hasFrontWheelDrive') {
2859
+ behaviorContent
2860
+ .getChild('hasFrontWheelDrive')
2861
+ .setBoolValue(newValue === '1');
2862
+ return true;
2863
+ }
2864
+
2865
+ if (propertyName === 'pitchRollAngleMax') {
2866
+ const newValueAsNumber = parseFloat(newValue);
2867
+ if (newValueAsNumber !== newValueAsNumber) return false;
2868
+ behaviorContent
2869
+ .getChild('pitchRollAngleMax')
2870
+ .setDoubleValue(newValueAsNumber);
2871
+ return true;
2872
+ }
2873
+
2874
+ return false;
2875
+ };
2876
+ behavior.getProperties = function (behaviorContent) {
2877
+ const behaviorProperties = new gd.MapStringPropertyDescriptor();
2878
+
2879
+ behaviorProperties
2880
+ .getOrCreate('physics3D')
2881
+ .setValue(behaviorContent.getChild('physics3D').getStringValue())
2882
+ .setType('Behavior')
2883
+ .setLabel('3D physics')
2884
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
2885
+ .addExtraInfo('Physics3D::Physics3DBehavior');
2886
+
2887
+ behaviorProperties
2888
+ .getOrCreate('steerAngleMax')
2889
+ .setLabel(_('Max steer angle'))
2890
+ .setGroup(_('Steering'))
2891
+ .setType('Number')
2892
+ .setMeasurementUnit(gd.MeasurementUnit.getDegreeAngle())
2893
+ .setValue(
2894
+ behaviorContent
2895
+ .getChild('steerAngleMax')
2896
+ .getDoubleValue()
2897
+ .toString(10)
2898
+ )
2899
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
2900
+
2901
+ behaviorProperties
2902
+ .getOrCreate('beginningSteerSpeed')
2903
+ .setLabel(_('Beginning steer speed'))
2904
+ .setGroup(_('Steering'))
2905
+ .setType('Number')
2906
+ .setMeasurementUnit(gd.MeasurementUnit.getAngularSpeed())
2907
+ .setValue(
2908
+ behaviorContent
2909
+ .getChild('beginningSteerSpeed')
2910
+ .getDoubleValue()
2911
+ .toString(10)
2912
+ )
2913
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
2914
+
2915
+ behaviorProperties
2916
+ .getOrCreate('endSteerSpeed')
2917
+ .setLabel(_('End steer speed'))
2918
+ .setGroup(_('Steering'))
2919
+ .setType('Number')
2920
+ .setMeasurementUnit(gd.MeasurementUnit.getAngularSpeed())
2921
+ .setValue(
2922
+ behaviorContent
2923
+ .getChild('endSteerSpeed')
2924
+ .getDoubleValue()
2925
+ .toString(10)
2926
+ )
2927
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
2928
+
2929
+ behaviorProperties
2930
+ .getOrCreate('engineTorqueMax')
2931
+ .setLabel(_('Max engine torque'))
2932
+ .setGroup(_('Speed'))
2933
+ .setType('Number')
2934
+ .setDescription(
2935
+ _('Allow cars to climb steep slopes and push heavy obstacles.')
2936
+ )
2937
+ .setValue(
2938
+ behaviorContent
2939
+ .getChild('engineTorqueMax')
2940
+ .getDoubleValue()
2941
+ .toString(10)
2942
+ );
2943
+
2944
+ behaviorProperties
2945
+ .getOrCreate('engineSpeedMax')
2946
+ .setLabel(_('Max engine speed'))
2947
+ .setGroup(_('Speed'))
2948
+ .setType('Number')
2949
+ .setValue(
2950
+ behaviorContent
2951
+ .getChild('engineSpeedMax')
2952
+ .getDoubleValue()
2953
+ .toString(10)
2954
+ );
2955
+
2956
+ behaviorProperties
2957
+ .getOrCreate('engineInertia')
2958
+ .setLabel(_('Engine inertia'))
2959
+ .setGroup(_('Speed'))
2960
+ .setType('Number')
2961
+ .setDescription(_('Slow down car acceleration.'))
2962
+ .setValue(
2963
+ behaviorContent
2964
+ .getChild('engineInertia')
2965
+ .getDoubleValue()
2966
+ .toString(10)
2967
+ );
2968
+
2969
+ behaviorProperties
2970
+ .getOrCreate('reverseGearRatio1')
2971
+ .setLabel(_('Reverse gear ratio'))
2972
+ .setGroup(_('Speed'))
2973
+ .setType('Number')
2974
+ .setValue(
2975
+ behaviorContent
2976
+ .getChild('reverseGearRatio1')
2977
+ .getDoubleValue()
2978
+ .toString(10)
2979
+ )
2980
+ .setAdvanced(true)
2981
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
2982
+
2983
+ behaviorProperties
2984
+ .getOrCreate('gearRatio1')
2985
+ .setLabel(_('1st gear ratio'))
2986
+ .setGroup(_('Speed'))
2987
+ .setType('Number')
2988
+ .setValue(
2989
+ behaviorContent.getChild('gearRatio1').getDoubleValue().toString(10)
2990
+ )
2991
+ .setAdvanced(true)
2992
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
2993
+
2994
+ behaviorProperties
2995
+ .getOrCreate('gearRatio2')
2996
+ .setLabel(_('2nd gear ratio'))
2997
+ .setGroup(_('Speed'))
2998
+ .setType('Number')
2999
+ .setValue(
3000
+ behaviorContent.getChild('gearRatio2').getDoubleValue().toString(10)
3001
+ )
3002
+ .setAdvanced(true)
3003
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3004
+
3005
+ behaviorProperties
3006
+ .getOrCreate('gearRatio3')
3007
+ .setLabel(_('3rd gear ratio'))
3008
+ .setGroup(_('Speed'))
3009
+ .setType('Number')
3010
+ .setValue(
3011
+ behaviorContent.getChild('gearRatio3').getDoubleValue().toString(10)
3012
+ )
3013
+ .setAdvanced(true)
3014
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3015
+
3016
+ behaviorProperties
3017
+ .getOrCreate('gearRatio4')
3018
+ .setLabel(_('4th gear ratio'))
3019
+ .setGroup(_('Speed'))
3020
+ .setType('Number')
3021
+ .setValue(
3022
+ behaviorContent.getChild('gearRatio4').getDoubleValue().toString(10)
3023
+ )
3024
+ .setAdvanced(true)
3025
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3026
+
3027
+ behaviorProperties
3028
+ .getOrCreate('gearRatio5')
3029
+ .setLabel(_('5th gear ratio'))
3030
+ .setGroup(_('Speed'))
3031
+ .setType('Number')
3032
+ .setValue(
3033
+ behaviorContent.getChild('gearRatio5').getDoubleValue().toString(10)
3034
+ )
3035
+ .setAdvanced(true)
3036
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3037
+
3038
+ behaviorProperties
3039
+ .getOrCreate('gearRatio6')
3040
+ .setLabel(_('6th gear ratio'))
3041
+ .setGroup(_('Speed'))
3042
+ .setType('Number')
3043
+ .setValue(
3044
+ behaviorContent.getChild('gearRatio6').getDoubleValue().toString(10)
3045
+ )
3046
+ .setAdvanced(true)
3047
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3048
+
3049
+ behaviorProperties
3050
+ .getOrCreate('wheelRadius')
3051
+ .setLabel(_('Wheel radius'))
3052
+ .setGroup(_('Wheels'))
3053
+ .setType('Number')
3054
+ .setMeasurementUnit(gd.MeasurementUnit.getPixel())
3055
+ .setValue(
3056
+ behaviorContent
3057
+ .getChild('wheelRadius')
3058
+ .getDoubleValue()
3059
+ .toString(10)
3060
+ )
3061
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3062
+
3063
+ behaviorProperties
3064
+ .getOrCreate('wheelWidth')
3065
+ .setLabel(_('Wheel width'))
3066
+ .setGroup(_('Wheels'))
3067
+ .setType('Number')
3068
+ .setMeasurementUnit(gd.MeasurementUnit.getPixel())
3069
+ .setValue(
3070
+ behaviorContent.getChild('wheelWidth').getDoubleValue().toString(10)
3071
+ )
3072
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3073
+
3074
+ behaviorProperties
3075
+ .getOrCreate('backWheelOffsetX')
3076
+ .setLabel(_('Back wheel offset X'))
3077
+ .setGroup(_('Wheels'))
3078
+ .setType('Number')
3079
+ .setMeasurementUnit(gd.MeasurementUnit.getPixel())
3080
+ .setDescription(_('Positive values move wheels outside.'))
3081
+ .setValue(
3082
+ behaviorContent
3083
+ .getChild('backWheelOffsetX')
3084
+ .getDoubleValue()
3085
+ .toString(10)
3086
+ )
3087
+ .setAdvanced(true)
3088
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3089
+
3090
+ behaviorProperties
3091
+ .getOrCreate('frontWheelOffsetX')
3092
+ .setLabel(_('Front wheel offset X'))
3093
+ .setGroup(_('Wheels'))
3094
+ .setType('Number')
3095
+ .setMeasurementUnit(gd.MeasurementUnit.getPixel())
3096
+ .setDescription(_('Positive values move wheels outside.'))
3097
+ .setValue(
3098
+ behaviorContent
3099
+ .getChild('frontWheelOffsetX')
3100
+ .getDoubleValue()
3101
+ .toString(10)
3102
+ )
3103
+ .setAdvanced(true)
3104
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3105
+
3106
+ behaviorProperties
3107
+ .getOrCreate('wheelOffsetY')
3108
+ .setLabel(_('Wheel offset Y'))
3109
+ .setGroup(_('Wheels'))
3110
+ .setType('Number')
3111
+ .setMeasurementUnit(gd.MeasurementUnit.getPixel())
3112
+ .setDescription(_('Positive values move wheels outside.'))
3113
+ .setValue(
3114
+ behaviorContent
3115
+ .getChild('wheelOffsetY')
3116
+ .getDoubleValue()
3117
+ .toString(10)
3118
+ )
3119
+ .setAdvanced(true)
3120
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3121
+
3122
+ behaviorProperties
3123
+ .getOrCreate('wheelOffsetZ')
3124
+ .setLabel(_('Wheel offset Z'))
3125
+ .setGroup(_('Wheels'))
3126
+ .setType('Number')
3127
+ .setMeasurementUnit(gd.MeasurementUnit.getPixel())
3128
+ .setDescription(_('Positive values move wheels outside.'))
3129
+ .setValue(
3130
+ behaviorContent
3131
+ .getChild('wheelOffsetZ')
3132
+ .getDoubleValue()
3133
+ .toString(10)
3134
+ )
3135
+ .setAdvanced(true)
3136
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3137
+
3138
+ behaviorProperties
3139
+ .getOrCreate('brakeTorqueMax')
3140
+ .setLabel(_('Brake max torque'))
3141
+ .setGroup(_('Brakes'))
3142
+ .setType('Number')
3143
+ .setValue(
3144
+ behaviorContent
3145
+ .getChild('brakeTorqueMax')
3146
+ .getDoubleValue()
3147
+ .toString(10)
3148
+ )
3149
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3150
+
3151
+ behaviorProperties
3152
+ .getOrCreate('handBrakeTorqueMax')
3153
+ .setLabel(_('Hand brake max torque'))
3154
+ .setGroup(_('Brakes'))
3155
+ .setType('Number')
3156
+ .setValue(
3157
+ behaviorContent
3158
+ .getChild('handBrakeTorqueMax')
3159
+ .getDoubleValue()
3160
+ .toString(10)
3161
+ )
3162
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3163
+
3164
+ behaviorProperties
3165
+ .getOrCreate('hasBackWheelDrive')
3166
+ .setValue(
3167
+ behaviorContent.getChild('hasBackWheelDrive').getBoolValue()
3168
+ ? 'true'
3169
+ : 'false'
3170
+ )
3171
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
3172
+ .setType('Boolean')
3173
+ .setLabel(_('Back wheel drive'))
3174
+ .setGroup(_('Wheels'))
3175
+ .setAdvanced(true)
3176
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3177
+
3178
+ behaviorProperties
3179
+ .getOrCreate('hasFrontWheelDrive')
3180
+ .setValue(
3181
+ behaviorContent.getChild('hasFrontWheelDrive').getBoolValue()
3182
+ ? 'true'
3183
+ : 'false'
3184
+ )
3185
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
3186
+ .setType('Boolean')
3187
+ .setLabel(_('Front wheel drive'))
3188
+ .setGroup(_('Wheels'))
3189
+ .setAdvanced(true)
3190
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3191
+
3192
+ behaviorProperties
3193
+ .getOrCreate('pitchRollAngleMax')
3194
+ .setLabel(_('Pitch and roll max angle'))
3195
+ .setGroup('')
3196
+ .setType('Number')
3197
+ .setMeasurementUnit(gd.MeasurementUnit.getDegreeAngle())
3198
+ .setValue(
3199
+ behaviorContent
3200
+ .getChild('pitchRollAngleMax')
3201
+ .getDoubleValue()
3202
+ .toString(10)
3203
+ )
3204
+ .setAdvanced(true)
3205
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
3206
+
3207
+ return behaviorProperties;
3208
+ };
3209
+
3210
+ behavior.initializeContent = function (behaviorContent) {
3211
+ behaviorContent.addChild('physics3D').setStringValue('');
3212
+ behaviorContent.addChild('steerAngleMax').setDoubleValue(70);
3213
+ behaviorContent.addChild('beginningSteerSpeed').setDoubleValue(140);
3214
+ behaviorContent.addChild('endSteerSpeed').setDoubleValue(10);
3215
+ behaviorContent.addChild('engineTorqueMax').setDoubleValue(4500);
3216
+ behaviorContent.addChild('engineSpeedMax').setDoubleValue(6000);
3217
+ behaviorContent.addChild('engineInertia').setDoubleValue(0.5);
3218
+ behaviorContent.addChild('reverseGearRatio1').setDoubleValue(-2.9);
3219
+ behaviorContent.addChild('gearRatio1').setDoubleValue(2.66);
3220
+ behaviorContent.addChild('gearRatio2').setDoubleValue(1.78);
3221
+ behaviorContent.addChild('gearRatio3').setDoubleValue(1.3);
3222
+ behaviorContent.addChild('gearRatio4').setDoubleValue(1);
3223
+ behaviorContent.addChild('gearRatio5').setDoubleValue(0.74);
3224
+ behaviorContent.addChild('gearRatio6').setDoubleValue(0);
3225
+ behaviorContent.addChild('backWheelOffsetX').setDoubleValue(0);
3226
+ behaviorContent.addChild('frontWheelOffsetX').setDoubleValue(0);
3227
+ behaviorContent.addChild('wheelOffsetY').setDoubleValue(0);
3228
+ behaviorContent.addChild('wheelOffsetZ').setDoubleValue(0);
3229
+ behaviorContent.addChild('wheelRadius').setDoubleValue(10);
3230
+ behaviorContent.addChild('wheelWidth').setDoubleValue(5);
3231
+ behaviorContent.addChild('brakeTorqueMax').setDoubleValue(1500);
3232
+ behaviorContent.addChild('handBrakeTorqueMax').setDoubleValue(4000);
3233
+ behaviorContent.addChild('hasBackWheelDrive').setBoolValue(false);
3234
+ behaviorContent.addChild('hasFrontWheelDrive').setBoolValue(true);
3235
+ behaviorContent.addChild('pitchRollAngleMax').setDoubleValue(90);
3236
+ };
3237
+ const aut = extension
3238
+ .addBehavior(
3239
+ 'PhysicsCar3D',
3240
+ _('3D physics car'),
3241
+ 'PhysicsCar3D',
3242
+ _('Simulate a realistic car using the 3D physics engine.'),
3243
+ '',
3244
+ 'JsPlatform/Extensions/physics_car3d.svg',
3245
+ 'PhysicsCar3D',
3246
+ //@ts-ignore The class hierarchy is incorrect leading to a type error, but this is valid.
3247
+ behavior,
3248
+ new gd.BehaviorsSharedData()
3249
+ )
3250
+ .addIncludeFile(
3251
+ 'Extensions/Physics3DBehavior/PhysicsCar3DRuntimeBehavior.js'
3252
+ );
3253
+
3254
+ aut
3255
+ .addScopedAction(
3256
+ 'SimulateForwardKey',
3257
+ _('Simulate move forward key press'),
3258
+ _('Simulate a press of the move forward key.'),
3259
+ _('Simulate pressing Forward key for _PARAM0_'),
3260
+ _('Car controls'),
3261
+ 'JsPlatform/Extensions/physics_car3d.svg',
3262
+ 'JsPlatform/Extensions/physics_car3d.svg'
3263
+ )
3264
+ .addParameter('object', _('Object'), '', false)
3265
+ .addParameter('behavior', _('Behavior'), 'PhysicsCar3D')
3266
+ .setFunctionName('simulateForwardKey');
3267
+
3268
+ aut
3269
+ .addScopedAction(
3270
+ 'SimulateBackwardKey',
3271
+ _('Simulate move backward key press'),
3272
+ _('Simulate a press of the move backward key.'),
3273
+ _('Simulate pressing Backward key for _PARAM0_'),
3274
+ _('Car controls'),
3275
+ 'JsPlatform/Extensions/physics_car3d.svg',
3276
+ 'JsPlatform/Extensions/physics_car3d.svg'
3277
+ )
3278
+ .addParameter('object', _('Object'), '', false)
3279
+ .addParameter('behavior', _('Behavior'), 'PhysicsCar3D')
3280
+ .setFunctionName('simulateBackwardKey');
3281
+
3282
+ aut
3283
+ .addScopedAction(
3284
+ 'SimulateRightKey',
3285
+ _('Simulate move right key press'),
3286
+ _('Simulate a press of the move right key.'),
3287
+ _('Simulate pressing Right key for _PARAM0_'),
3288
+ _('Car controls'),
3289
+ 'JsPlatform/Extensions/physics_car3d.svg',
3290
+ 'JsPlatform/Extensions/physics_car3d.svg'
3291
+ )
3292
+ .addParameter('object', _('Object'), '', false)
3293
+ .addParameter('behavior', _('Behavior'), 'PhysicsCar3D')
3294
+ .setFunctionName('simulateRightKey');
3295
+
3296
+ aut
3297
+ .addScopedAction(
3298
+ 'SimulateLeftKey',
3299
+ _('Simulate move left key press'),
3300
+ _('Simulate a press of the move left key.'),
3301
+ _('Simulate pressing Left key for _PARAM0_'),
3302
+ _('Car controls'),
3303
+ 'JsPlatform/Extensions/physics_car3d.svg',
3304
+ 'JsPlatform/Extensions/physics_car3d.svg'
3305
+ )
3306
+ .addParameter('object', _('Object'), '', false)
3307
+ .addParameter('behavior', _('Behavior'), 'PhysicsCar3D')
3308
+ .setFunctionName('simulateLeftKey');
3309
+
3310
+ aut
3311
+ .addScopedAction(
3312
+ 'SimulateHandBrakeKey',
3313
+ _('Simulate hand brake key press'),
3314
+ _('Simulate a press of the hand brake key.'),
3315
+ _('Simulate pressing hand brake key for _PARAM0_'),
3316
+ _('Car controls'),
3317
+ 'JsPlatform/Extensions/physics_car3d.svg',
3318
+ 'JsPlatform/Extensions/physics_car3d.svg'
3319
+ )
3320
+ .addParameter('object', _('Object'), '', false)
3321
+ .addParameter('behavior', _('Behavior'), 'PhysicsCar3D')
3322
+ .setFunctionName('simulateHandBrakeKey');
3323
+
3324
+ aut
3325
+ .addScopedAction(
3326
+ 'SimulateAcceleratorStick',
3327
+ _('Simulate accelerator stick control'),
3328
+ _('Simulate an accelerator stick control.'),
3329
+ _(
3330
+ 'Simulate an accelerator stick control for _PARAM0_ with a _PARAM2_ force'
3331
+ ),
3332
+ _('Car controls'),
3333
+ 'JsPlatform/Extensions/physics_car3d.svg',
3334
+ 'JsPlatform/Extensions/physics_car3d.svg'
3335
+ )
3336
+ .addParameter('object', _('Object'), '', false)
3337
+ .addParameter('behavior', _('Behavior'), 'PhysicsCar3D')
3338
+ .addParameter('expression', _('Stick force (between -1 and 1)'))
3339
+ .markAsAdvanced()
3340
+ .setFunctionName('simulateAcceleratorStick');
3341
+
3342
+ aut
3343
+ .addScopedAction(
3344
+ 'SimulateSteeringStick',
3345
+ _('Simulate steering stick control'),
3346
+ _('Simulate a steering stick control.'),
3347
+ _(
3348
+ 'Simulate a steering stick control for _PARAM0_ with a _PARAM2_ force'
3349
+ ),
3350
+ _('Car controls'),
3351
+ 'JsPlatform/Extensions/physics_car3d.svg',
3352
+ 'JsPlatform/Extensions/physics_car3d.svg'
3353
+ )
3354
+ .addParameter('object', _('Object'), '', false)
3355
+ .addParameter('behavior', _('Behavior'), 'PhysicsCar3D')
3356
+ .addParameter('expression', _('Stick force (between -1 and 1)'))
3357
+ .markAsAdvanced()
3358
+ .setFunctionName('simulateSteeringStick');
3359
+
3360
+ aut
3361
+ .addExpressionAndCondition(
3362
+ 'number',
3363
+ 'SteerAngle',
3364
+ _('Steer angle'),
3365
+ _(
3366
+ 'the current steer angle (in degree). The value is negative when cars turn left'
3367
+ ),
3368
+ _('the steer angle'),
3369
+ _('Car state'),
3370
+ 'JsPlatform/Extensions/physics_car3d.svg'
3371
+ )
3372
+ .addParameter('object', _('Object'), '', false)
3373
+ .addParameter('behavior', _('Behavior'), 'PhysicsCar3D')
3374
+ .useStandardParameters(
3375
+ 'number',
3376
+ gd.ParameterOptions.makeNewOptions().setDescription(
3377
+ _('Steer angle (in degree)')
3378
+ )
3379
+ )
3380
+ .setFunctionName('getSteerAngle');
3381
+
3382
+ aut
3383
+ .addExpressionAndCondition(
3384
+ 'number',
3385
+ 'EngineSpeed',
3386
+ _('Engine speed'),
3387
+ _('the current engine speed (RPM)'),
3388
+ _('the engine speed'),
3389
+ _('Car state'),
3390
+ 'JsPlatform/Extensions/physics_car3d.svg'
3391
+ )
3392
+ .addParameter('object', _('Object'), '', false)
3393
+ .addParameter('behavior', _('Behavior'), 'PhysicsCar3D')
3394
+ .useStandardParameters(
3395
+ 'number',
3396
+ gd.ParameterOptions.makeNewOptions().setDescription(
3397
+ _('Engine speed (RPM)')
3398
+ )
3399
+ )
3400
+ .setFunctionName('getEngineSpeed');
3401
+
3402
+ aut
3403
+ .addExpressionAndCondition(
3404
+ 'number',
3405
+ 'CurrentGear',
3406
+ _('Current gear'),
3407
+ _('the current gear (-1 = reverse, 0 = neutral, 1 = 1st gear)'),
3408
+ _('the current gear'),
3409
+ _('Car state'),
3410
+ 'JsPlatform/Extensions/physics_car3d.svg'
3411
+ )
3412
+ .addParameter('object', _('Object'), '', false)
3413
+ .addParameter('behavior', _('Behavior'), 'PhysicsCar3D')
3414
+ .useStandardParameters(
3415
+ 'number',
3416
+ gd.ParameterOptions.makeNewOptions().setDescription(_('Current gear'))
3417
+ )
3418
+ .setFunctionName('getCurrentGear');
3419
+
3420
+ aut
3421
+ .addScopedCondition(
3422
+ 'IsOnFloor',
3423
+ _('Is on floor'),
3424
+ _('Check if any wheel is in contact with the ground.'),
3425
+ _('_PARAM0_ is on floor'),
3426
+ _('Car state'),
3427
+ 'JsPlatform/Extensions/physics_car3d.svg',
3428
+ 'JsPlatform/Extensions/physics_car3d.svg'
3429
+ )
3430
+ .addParameter('object', _('Object'), '', false)
3431
+ .addParameter('behavior', _('Behavior'), 'PhysicsCar3D')
3432
+ .markAsSimple()
3433
+ .setFunctionName('isOnFloor');
3434
+
3435
+ aut
3436
+ .addExpressionAndConditionAndAction(
3437
+ 'number',
3438
+ 'EngineTorqueMax',
3439
+ _('Engine max torque'),
3440
+ _(
3441
+ 'the engine max torque (N·m). It allows cars to climb steep slopes and push heavy obstacles'
3442
+ ),
3443
+ _('the engine max torque'),
3444
+ _('Car configuration'),
3445
+ 'JsPlatform/Extensions/physics_car3d.svg'
3446
+ )
3447
+ .addParameter('object', _('Object'), '', false)
3448
+ .addParameter('behavior', _('Behavior'), 'PhysicsCar3D')
3449
+ .useStandardParameters(
3450
+ 'number',
3451
+ gd.ParameterOptions.makeNewOptions().setDescription(
3452
+ _('Engine max torque (N·m)')
3453
+ )
3454
+ )
3455
+ .setFunctionName('setEngineTorqueMax')
3456
+ .setGetter('getEngineTorqueMax');
3457
+
3458
+ aut
3459
+ .addExpressionAndConditionAndAction(
3460
+ 'number',
3461
+ 'EngineSpeedMax',
3462
+ _('Engine max speed'),
3463
+ _('the engine max speed (RPM)'),
3464
+ _('the engine max speed'),
3465
+ _('Car configuration'),
3466
+ 'JsPlatform/Extensions/physics_car3d.svg'
3467
+ )
3468
+ .addParameter('object', _('Object'), '', false)
3469
+ .addParameter('behavior', _('Behavior'), 'PhysicsCar3D')
3470
+ .useStandardParameters(
3471
+ 'number',
3472
+ gd.ParameterOptions.makeNewOptions().setDescription(
3473
+ _('Engine max speed (RPM)')
3474
+ )
3475
+ )
3476
+ .setFunctionName('setEngineSpeedMax')
3477
+ .setGetter('getEngineSpeedMax');
3478
+
3479
+ aut
3480
+ .addExpressionAndConditionAndAction(
3481
+ 'number',
3482
+ 'EngineInertia',
3483
+ _('Engine inertia'),
3484
+ _('the engine inertia (kg·m²). It slows down car acceleration'),
3485
+ _('the engine inertia'),
3486
+ _('Car configuration'),
3487
+ 'JsPlatform/Extensions/physics_car3d.svg'
3488
+ )
3489
+ .addParameter('object', _('Object'), '', false)
3490
+ .addParameter('behavior', _('Behavior'), 'PhysicsCar3D')
3491
+ .useStandardParameters(
3492
+ 'number',
3493
+ gd.ParameterOptions.makeNewOptions().setDescription(
3494
+ _('Engine inertia (kg·m²)')
3495
+ )
3496
+ )
3497
+ .setFunctionName('setEngineInertia')
3498
+ .setGetter('getEngineInertia');
3499
+ }
3500
+
2457
3501
  extension
2458
3502
  .addCondition(
2459
3503
  'IsObjectOnGivenFloor',
@@ -2461,8 +3505,8 @@ module.exports = {
2461
3505
  _('Check if a 3D physics character is on a given platform.'),
2462
3506
  _('_PARAM0_ is on platform _PARAM2_'),
2463
3507
  _('Collision'),
2464
- 'JsPlatform/Extensions/physics_character3d.svg',
2465
- 'JsPlatform/Extensions/physics_character3d.svg'
3508
+ 'JsPlatform/Extensions/physics_car3d.svg',
3509
+ 'JsPlatform/Extensions/physics_car3d.svg'
2466
3510
  )
2467
3511
  .addParameter('objectList', _('Object'), '', false)
2468
3512
  .addParameter('behavior', _('Behavior'), 'PhysicsCharacter3D')