gdcore-tools 2.0.0-gd-v5.5.237-autobuild → 2.0.0-gd-v5.5.238-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.
@@ -1125,7 +1125,7 @@ module.exports = {
1125
1125
  topFaceResourceName: '',
1126
1126
  bottomFaceResourceName: '',
1127
1127
  frontFaceVisible: true,
1128
- backFaceVisible: false,
1128
+ backFaceVisible: true,
1129
1129
  leftFaceVisible: true,
1130
1130
  rightFaceVisible: true,
1131
1131
  topFaceVisible: true,
@@ -508,7 +508,7 @@ module.exports = {
508
508
  associatedObjectConfiguration,
509
509
  pixiContainer,
510
510
  pixiResourcesLoader,
511
- propertyOverridings
511
+ getPropertyOverridings
512
512
  ) {
513
513
  super(
514
514
  project,
@@ -516,7 +516,7 @@ module.exports = {
516
516
  associatedObjectConfiguration,
517
517
  pixiContainer,
518
518
  pixiResourcesLoader,
519
- propertyOverridings
519
+ getPropertyOverridings
520
520
  );
521
521
 
522
522
  const bbTextStyles = {
@@ -555,9 +555,11 @@ module.exports = {
555
555
  gd.ObjectJsImplementation
556
556
  );
557
557
 
558
- const rawText = this._propertyOverridings.has('Text')
559
- ? this._propertyOverridings.get('Text')
560
- : object.content.text;
558
+ const propertyOverridings = this.getPropertyOverridings();
559
+ const rawText =
560
+ propertyOverridings && propertyOverridings.has('Text')
561
+ ? propertyOverridings.get('Text')
562
+ : object.content.text;
561
563
  if (rawText !== this._pixiObject.text) {
562
564
  this._pixiObject.text = rawText;
563
565
  }
@@ -631,7 +631,7 @@ module.exports = {
631
631
  associatedObjectConfiguration,
632
632
  pixiContainer,
633
633
  pixiResourcesLoader,
634
- propertyOverridings
634
+ getPropertyOverridings
635
635
  ) {
636
636
  super(
637
637
  project,
@@ -639,7 +639,7 @@ module.exports = {
639
639
  associatedObjectConfiguration,
640
640
  pixiContainer,
641
641
  pixiResourcesLoader,
642
- propertyOverridings
642
+ getPropertyOverridings
643
643
  );
644
644
 
645
645
  // We'll track changes of the font to trigger the loading of the new font.
@@ -665,9 +665,11 @@ module.exports = {
665
665
 
666
666
  // Update the rendered text properties (note: Pixi is only
667
667
  // applying changes if there were changed).
668
- this._pixiObject.text = this._propertyOverridings.has('Text')
669
- ? this._propertyOverridings.get('Text')
670
- : object.content.text;
668
+ const propertyOverridings = this.getPropertyOverridings();
669
+ this._pixiObject.text =
670
+ propertyOverridings && propertyOverridings.has('Text')
671
+ ? propertyOverridings.get('Text')
672
+ : object.content.text;
671
673
 
672
674
  const align = object.content.align;
673
675
  this._pixiObject.align = align;
@@ -27,7 +27,7 @@ class RenderedInstance {
27
27
  associatedObjectConfiguration: gdObjectConfiguration,
28
28
  pixiContainer: PIXI.Container,
29
29
  pixiResourcesLoader: Class<PixiResourcesLoader>,
30
- propertyOverridings: Map<string, string> = new Map<string, string>()
30
+ getPropertyOverridings: (() => Map<string, string>) | null = null
31
31
  );
32
32
 
33
33
  /**
@@ -80,6 +80,8 @@ class RenderedInstance {
80
80
  getDefaultHeight(): number;
81
81
 
82
82
  getDefaultDepth(): number;
83
+
84
+ getPropertyOverridings(): Map<string, string> | null;
83
85
  }
84
86
 
85
87
  /**
@@ -107,7 +109,8 @@ class Rendered3DInstance {
107
109
  associatedObjectConfiguration: gdObjectConfiguration,
108
110
  pixiContainer: PIXI.Container,
109
111
  threeGroup: THREE.Group,
110
- pixiResourcesLoader: Class<PixiResourcesLoader>
112
+ pixiResourcesLoader: Class<PixiResourcesLoader>,
113
+ getPropertyOverridings: (() => Map<string, string>) | null = null
111
114
  );
112
115
 
113
116
  /**
@@ -174,6 +177,8 @@ class Rendered3DInstance {
174
177
  * Return the depth of the instance when the instance doesn't have a custom size.
175
178
  */
176
179
  getDefaultDepth(): number;
180
+
181
+ getPropertyOverridings(): Map<string, string> | null;
177
182
  }
178
183
 
179
184
  declare type ObjectsRenderingService = {
@@ -1,2 +1,2 @@
1
- var gdjs;(function(r){class c extends r.RuntimeBehavior{constructor(e,t,f){super(e,t,f);this._angle=0;this._xVelocity=0;this._yVelocity=0;this._angularSpeed=0;this._leftKey=!1;this._rightKey=!1;this._upKey=!1;this._downKey=!1;this._leftKeyPressedDuration=0;this._rightKeyPressedDuration=0;this._upKeyPressedDuration=0;this._downKeyPressedDuration=0;this._wasStickUsed=!1;this._stickAngle=0;this._stickForce=0;this._dontClearInputsBetweenFrames=!1;this._ignoreDefaultControlsAsSyncedByNetwork=!1;this._wasLeftKeyPressed=!1;this._wasRightKeyPressed=!1;this._wasUpKeyPressed=!1;this._wasDownKeyPressed=!1;this._temporaryPointForTransformations=[0,0];this._topDownMovementHooks=[];this._allowDiagonals=t.allowDiagonals,this._acceleration=t.acceleration,this._deceleration=t.deceleration,this._maxSpeed=t.maxSpeed,this._angularMaxSpeed=t.angularMaxSpeed,this._rotateObject=t.rotateObject,this._angleOffset=t.angleOffset,this._ignoreDefaultControls=t.ignoreDefaultControls,this.setViewpoint(t.viewpoint,t.customIsometryAngle),this._movementAngleOffset=t.movementAngleOffset||0,this._useLegacyTurnBack=t.useLegacyTurnBack===void 0?!0:t.useLegacyTurnBack}getNetworkSyncData(){return this._dontClearInputsBetweenFrames=!1,this._ignoreDefaultControlsAsSyncedByNetwork=!1,{...super.getNetworkSyncData(),props:{a:this._angle,xv:this._xVelocity,yv:this._yVelocity,as:this._angularSpeed,lk:this._wasLeftKeyPressed,rk:this._wasRightKeyPressed,uk:this._wasUpKeyPressed,dk:this._wasDownKeyPressed,wsu:this._wasStickUsed,sa:this._stickAngle,sf:this._stickForce}}}updateFromNetworkSyncData(e){super.updateFromNetworkSyncData(e);const t=e.props;t.a!==void 0&&(this._angle=t.a),t.xv!==void 0&&(this._xVelocity=t.xv),t.yv!==void 0&&(this._yVelocity=t.yv),t.as!==void 0&&(this._angularSpeed=t.as),t.lk!==void 0&&(this._leftKey=t.lk),t.rk!==void 0&&(this._rightKey=t.rk),t.uk!==void 0&&(this._upKey=t.uk),t.dk!==void 0&&(this._downKey=t.dk),t.wsu!==void 0&&(this._wasStickUsed=t.wsu),t.sa!==void 0&&(this._stickAngle=t.sa),t.sf!==void 0&&(this._stickForce=t.sf),this._dontClearInputsBetweenFrames=!0,this._ignoreDefaultControlsAsSyncedByNetwork=!0}updateFromBehaviorData(e,t){return e.allowDiagonals!==t.allowDiagonals&&(this._allowDiagonals=t.allowDiagonals),e.acceleration!==t.acceleration&&(this._acceleration=t.acceleration),e.deceleration!==t.deceleration&&(this._deceleration=t.deceleration),e.maxSpeed!==t.maxSpeed&&(this._maxSpeed=t.maxSpeed),e.angularMaxSpeed!==t.angularMaxSpeed&&(this._angularMaxSpeed=t.angularMaxSpeed),e.rotateObject!==t.rotateObject&&(this._rotateObject=t.rotateObject),e.angleOffset!==t.angleOffset&&(this._angleOffset=t.angleOffset),e.ignoreDefaultControls!==t.ignoreDefaultControls&&(this._ignoreDefaultControls=t.ignoreDefaultControls),(e.platformType!==t.platformType||e.customIsometryAngle!==t.customIsometryAngle)&&this.setViewpoint(t.platformType,t.customIsometryAngle),e.movementAngleOffset!==t.movementAngleOffset&&(this._movementAngleOffset=t.movementAngleOffset),!0}setViewpoint(e,t){e==="PixelIsometry"?this._basisTransformation=new r.TopDownMovementRuntimeBehavior.IsometryTransformation(Math.atan(.5)):e==="TrueIsometry"?this._basisTransformation=new r.TopDownMovementRuntimeBehavior.IsometryTransformation(Math.PI/6):e==="CustomIsometry"?this._basisTransformation=new r.TopDownMovementRuntimeBehavior.IsometryTransformation(t*Math.PI/180):this._basisTransformation=null}setAcceleration(e){this._acceleration=e}getAcceleration(){return this._acceleration}setDeceleration(e){this._deceleration=e}getDeceleration(){return this._deceleration}setMaxSpeed(e){this._maxSpeed=e}getMaxSpeed(){return this._maxSpeed}setAngularMaxSpeed(e){this._angularMaxSpeed=e}getAngularMaxSpeed(){return this._angularMaxSpeed}setAngleOffset(e){this._angleOffset=e}getAngleOffset(){return this._angleOffset}allowDiagonals(e){this._allowDiagonals=e}diagonalsAllowed(){return this._allowDiagonals}setRotateObject(e){this._rotateObject=e}isObjectRotated(){return this._rotateObject}isMoving(){return this._xVelocity!==0||this._yVelocity!==0}getSpeed(){return Math.hypot(this._xVelocity,this._yVelocity)}getXVelocity(){return this._xVelocity}setXVelocity(e){this._xVelocity=e}getYVelocity(){return this._yVelocity}setYVelocity(e){this._yVelocity=e}getAngle(){return this._angle}isMovementAngleAround(e,t){return Math.abs(r.evtTools.common.angleDifference(this._angle,e))<=t}setMovementAngleOffset(e){this._movementAngleOffset=e}getMovementAngleOffset(){return this._movementAngleOffset}doStepPreEvents(e){const t=37,f=38,h=39,i=40;this._leftKey||(this._leftKey=!this.shouldIgnoreDefaultControls()&&e.getGame().getInputManager().isKeyPressed(t)),this._rightKey||(this._rightKey=!this.shouldIgnoreDefaultControls()&&e.getGame().getInputManager().isKeyPressed(h)),this._downKey||(this._downKey=!this.shouldIgnoreDefaultControls()&&e.getGame().getInputManager().isKeyPressed(i)),this._upKey||(this._upKey=!this.shouldIgnoreDefaultControls()&&e.getGame().getInputManager().isKeyPressed(f));const o=this.owner.getElapsedTime();this._leftKey?this._leftKeyPressedDuration+=o:this._leftKeyPressedDuration=0,this._rightKey?this._rightKeyPressedDuration+=o:this._rightKeyPressedDuration=0,this._downKey?this._downKeyPressedDuration+=o:this._downKeyPressedDuration=0,this._upKey?this._upKeyPressedDuration+=o:this._upKeyPressedDuration=0;let s=-1;this._allowDiagonals?this._upKey&&!this._downKey?this._leftKey&&!this._rightKey?s=5:!this._leftKey&&this._rightKey?s=7:s=6:!this._upKey&&this._downKey?this._leftKey&&!this._rightKey?s=3:!this._leftKey&&this._rightKey?s=1:s=2:this._leftKey&&!this._rightKey?s=4:!this._leftKey&&this._rightKey&&(s=0):(this._upKey&&!this._downKey?s=6:!this._upKey&&this._downKey&&(s=2),this._leftKey&&!this._rightKey&&(this._upKey===this._downKey||this._upKey&&this._leftKeyPressedDuration<this._upKeyPressedDuration||this._downKey&&this._leftKeyPressedDuration<this._downKeyPressedDuration)?s=4:this._rightKey&&!this._leftKey&&(this._upKey===this._downKey||this._upKey&&this._rightKeyPressedDuration<this._upKeyPressedDuration||this._downKey&&this._rightKeyPressedDuration<this._downKeyPressedDuration)&&(s=0));const a=r.TopDownMovementRuntimeBehavior._topDownMovementHookContext;for(const n of this._topDownMovementHooks)a._setDirection(s),s=n.overrideDirection(a);a._setDirection(s);for(const n of this._topDownMovementHooks)n.beforeSpeedUpdate(a);const l=this.owner,p=this.owner.getElapsedTime()/1e3,x=this._xVelocity,P=this._yVelocity;this._wasStickUsed=!1;let _=0,y=0,g=!1,m=0;if(s!==-1?(g=!0,_=(s+this._movementAngleOffset/45)*Math.PI/4,y=s*45+this._movementAngleOffset,m=this._maxSpeed):this._stickForce!==0?(g=!0,this._allowDiagonals||(this._stickAngle=90*Math.floor((this._stickAngle+45)/90)),y=this._stickAngle+this._movementAngleOffset,_=y*Math.PI/180,m=this._maxSpeed*this._stickForce,this._wasStickUsed=!0):(this._yVelocity!==0||this._xVelocity!==0)&&(g=!0,_=Math.atan2(this._yVelocity,this._xVelocity),y=_*180/Math.PI),g){let n=Math.cos(_),u=Math.sin(_);(n===-1||n===1)&&(u=0),(u===-1||u===1)&&(n=0);const D=this._useLegacyTurnBack?c.getLegacyAcceleratedSpeed:c.getAcceleratedSpeed;let M=Math.hypot(this._xVelocity,this._yVelocity);const v=this._xVelocity*n+this._yVelocity*u;v<0&&(M=v);const k=D(M,m,this._maxSpeed,this._acceleration,this._deceleration,p);this._xVelocity=k*n,this._yVelocity=k*u}const d=this._xVelocity*this._xVelocity+this._yVelocity*this._yVelocity;if(d>this._maxSpeed*this._maxSpeed){const n=this._maxSpeed/Math.sqrt(d);this._xVelocity*=n,this._yVelocity*=n}this._angularSpeed=this._angularMaxSpeed;for(const n of this._topDownMovementHooks)n.beforePositionUpdate(a);const K=(x+this._xVelocity)/2*p,w=(P+this._yVelocity)/2*p;if(this._basisTransformation===null)l.setX(l.getX()+K),l.setY(l.getY()+w);else{const n=this._temporaryPointForTransformations;n[0]=K,n[1]=w,this._basisTransformation.toScreen(n,n),l.setX(l.getX()+n[0]),l.setY(l.getY()+n[1])}(this._xVelocity!==0||this._yVelocity!==0)&&(this._angle=y,this._rotateObject&&l.rotateTowardAngle(y+this._angleOffset,this._angularSpeed)),this._wasLeftKeyPressed=this._leftKey,this._wasRightKeyPressed=this._rightKey,this._wasUpKeyPressed=this._upKey,this._wasDownKeyPressed=this._downKey,this._dontClearInputsBetweenFrames||(this._leftKey=!1,this._rightKey=!1,this._upKey=!1,this._downKey=!1,this._stickForce=0)}static getAcceleratedSpeed(e,t,f,h,i,o){let s=e;const a=Math.max(h,i);return t<0?e<=t?s=Math.min(t,e+a*o):e<=0?s-=Math.max(-f,h*o):s=Math.max(t,e-a*o):t>0?e>=t?s=Math.max(t,e-a*o):e>=0?s=Math.min(f,e+h*o):s=Math.min(t,e+a*o):(e<0&&(s=Math.min(e+i*o,0)),e>0&&(s=Math.max(e-i*o,0))),s}static getLegacyAcceleratedSpeed(e,t,f,h,i,o){let s=e;return t<0?e<=t?s=Math.min(t,e+i*o):e<=0?s-=Math.max(-f,h*o):s=Math.max(t,e-i*o):t>0?e>=t?s=Math.max(t,e-i*o):e>=0?s=Math.min(f,e+h*o):s=Math.min(t,e+i*o):(e<0&&(s=Math.min(e+i*o,0)),e>0&&(s=Math.max(e-i*o,0))),s}simulateControl(e){e==="Left"?this._leftKey=!0:e==="Right"?this._rightKey=!0:e==="Up"?this._upKey=!0:e==="Down"&&(this._downKey=!0)}ignoreDefaultControls(e){this._ignoreDefaultControls=e}shouldIgnoreDefaultControls(){return this._ignoreDefaultControls||this._ignoreDefaultControlsAsSyncedByNetwork}simulateLeftKey(){this._leftKey=!0}simulateRightKey(){this._rightKey=!0}simulateUpKey(){this._upKey=!0}simulateDownKey(){this._downKey=!0}simulateStick(e,t){this._stickAngle=e%360,this._stickForce=Math.max(0,Math.min(1,t))}isUsingControl(e){return e==="Left"?this._leftKeyPressedDuration>0:e==="Right"?this._rightKeyPressedDuration>0:e==="Up"?this._upKeyPressedDuration>0:e==="Down"?this._downKeyPressedDuration>0:e==="Stick"?this._wasStickUsed:!1}getLastStickInputAngle(){return this._stickAngle}registerHook(e){this._topDownMovementHooks.push(e)}}r.TopDownMovementRuntimeBehavior=c,function(f){class T{constructor(){this.direction=-1}getDirection(){return this.direction}_setDirection(i){this.direction=i}}f.TopDownMovementHookContext=T,f._topDownMovementHookContext=new r.TopDownMovementRuntimeBehavior.TopDownMovementHookContext;class t{constructor(i){if(i<=0||i>=Math.PI/4)throw new RangeError("An isometry angle must be in ]0; pi/4] but was: "+i);const o=Math.asin(Math.tan(i)),s=Math.sin(o),a=Math.cos(Math.PI/4),l=a;this._screen=[[a,-l],[s*l,s*a]]}toScreen(i,o){const s=this._screen[0][0]*i[0]+this._screen[0][1]*i[1],a=this._screen[1][0]*i[0]+this._screen[1][1]*i[1];o[0]=s,o[1]=a}}f.IsometryTransformation=t}(c=r.TopDownMovementRuntimeBehavior||(r.TopDownMovementRuntimeBehavior={})),r.registerBehavior("TopDownMovementBehavior::TopDownMovementBehavior",r.TopDownMovementRuntimeBehavior)})(gdjs||(gdjs={}));
1
+ var gdjs;(function(l){class u extends l.RuntimeBehavior{constructor(e,t,f){super(e,t,f);this._angle=0;this._xVelocity=0;this._yVelocity=0;this._angularSpeed=0;this._leftKey=!1;this._rightKey=!1;this._upKey=!1;this._downKey=!1;this._leftKeyPressedDuration=0;this._rightKeyPressedDuration=0;this._upKeyPressedDuration=0;this._downKeyPressedDuration=0;this._wasStickUsed=!1;this._stickAngle=0;this._stickForce=0;this._dontClearInputsBetweenFrames=!1;this._ignoreDefaultControlsAsSyncedByNetwork=!1;this._wasLeftKeyPressed=!1;this._wasRightKeyPressed=!1;this._wasUpKeyPressed=!1;this._wasDownKeyPressed=!1;this._temporaryPointForTransformations=[0,0];this._topDownMovementHooks=[];this._allowDiagonals=t.allowDiagonals,this._acceleration=t.acceleration,this._deceleration=t.deceleration,this._maxSpeed=t.maxSpeed,this._angularMaxSpeed=t.angularMaxSpeed,this._rotateObject=t.rotateObject,this._angleOffset=t.angleOffset,this._ignoreDefaultControls=t.ignoreDefaultControls,this.setViewpoint(t.viewpoint,t.customIsometryAngle),this._movementAngleOffset=t.movementAngleOffset||0,this._useLegacyTurnBack=t.useLegacyTurnBack===void 0?!0:t.useLegacyTurnBack}getNetworkSyncData(){return this._dontClearInputsBetweenFrames=!1,this._ignoreDefaultControlsAsSyncedByNetwork=!1,{...super.getNetworkSyncData(),props:{a:this._angle,xv:this._xVelocity,yv:this._yVelocity,as:this._angularSpeed,lk:this._wasLeftKeyPressed,rk:this._wasRightKeyPressed,uk:this._wasUpKeyPressed,dk:this._wasDownKeyPressed,wsu:this._wasStickUsed,sa:this._stickAngle,sf:this._stickForce}}}updateFromNetworkSyncData(e){super.updateFromNetworkSyncData(e);const t=e.props;t.a!==void 0&&(this._angle=t.a),t.xv!==void 0&&(this._xVelocity=t.xv),t.yv!==void 0&&(this._yVelocity=t.yv),t.as!==void 0&&(this._angularSpeed=t.as),t.lk!==void 0&&(this._leftKey=t.lk),t.rk!==void 0&&(this._rightKey=t.rk),t.uk!==void 0&&(this._upKey=t.uk),t.dk!==void 0&&(this._downKey=t.dk),t.wsu!==void 0&&(this._wasStickUsed=t.wsu),t.sa!==void 0&&(this._stickAngle=t.sa),t.sf!==void 0&&(this._stickForce=t.sf),this._dontClearInputsBetweenFrames=!0,this._ignoreDefaultControlsAsSyncedByNetwork=!0}updateFromBehaviorData(e,t){return e.allowDiagonals!==t.allowDiagonals&&(this._allowDiagonals=t.allowDiagonals),e.acceleration!==t.acceleration&&(this._acceleration=t.acceleration),e.deceleration!==t.deceleration&&(this._deceleration=t.deceleration),e.maxSpeed!==t.maxSpeed&&(this._maxSpeed=t.maxSpeed),e.angularMaxSpeed!==t.angularMaxSpeed&&(this._angularMaxSpeed=t.angularMaxSpeed),e.rotateObject!==t.rotateObject&&(this._rotateObject=t.rotateObject),e.angleOffset!==t.angleOffset&&(this._angleOffset=t.angleOffset),e.ignoreDefaultControls!==t.ignoreDefaultControls&&(this._ignoreDefaultControls=t.ignoreDefaultControls),(e.platformType!==t.platformType||e.customIsometryAngle!==t.customIsometryAngle)&&this.setViewpoint(t.platformType,t.customIsometryAngle),e.movementAngleOffset!==t.movementAngleOffset&&(this._movementAngleOffset=t.movementAngleOffset),!0}setViewpoint(e,t){e==="PixelIsometry"?this._basisTransformation=new l.TopDownMovementRuntimeBehavior.IsometryTransformation(Math.atan(.5)):e==="TrueIsometry"?this._basisTransformation=new l.TopDownMovementRuntimeBehavior.IsometryTransformation(Math.PI/6):e==="CustomIsometry"?this._basisTransformation=new l.TopDownMovementRuntimeBehavior.IsometryTransformation(t*Math.PI/180):this._basisTransformation=null}setAcceleration(e){this._acceleration=e}getAcceleration(){return this._acceleration}setDeceleration(e){this._deceleration=e}getDeceleration(){return this._deceleration}setMaxSpeed(e){this._maxSpeed=e}getMaxSpeed(){return this._maxSpeed}setAngularMaxSpeed(e){this._angularMaxSpeed=e}getAngularMaxSpeed(){return this._angularMaxSpeed}setAngleOffset(e){this._angleOffset=e}getAngleOffset(){return this._angleOffset}allowDiagonals(e){this._allowDiagonals=e}diagonalsAllowed(){return this._allowDiagonals}setRotateObject(e){this._rotateObject=e}isObjectRotated(){return this._rotateObject}isMoving(){return this._xVelocity!==0||this._yVelocity!==0}getSpeed(){return Math.hypot(this._xVelocity,this._yVelocity)}getXVelocity(){return this._xVelocity}setXVelocity(e){this._xVelocity=e}getYVelocity(){return this._yVelocity}setYVelocity(e){this._yVelocity=e}getAngle(){return this._angle}isMovementAngleAround(e,t){return Math.abs(l.evtTools.common.angleDifference(this._angle,e))<=t}setMovementAngleOffset(e){this._movementAngleOffset=e}getMovementAngleOffset(){return this._movementAngleOffset}doStepPreEvents(e){const t=37,f=38,h=39,a=40;this._leftKey||(this._leftKey=!this.shouldIgnoreDefaultControls()&&e.getGame().getInputManager().isKeyPressed(t)),this._rightKey||(this._rightKey=!this.shouldIgnoreDefaultControls()&&e.getGame().getInputManager().isKeyPressed(h)),this._downKey||(this._downKey=!this.shouldIgnoreDefaultControls()&&e.getGame().getInputManager().isKeyPressed(a)),this._upKey||(this._upKey=!this.shouldIgnoreDefaultControls()&&e.getGame().getInputManager().isKeyPressed(f));const n=this.owner.getElapsedTime();this._leftKey?this._leftKeyPressedDuration+=n:this._leftKeyPressedDuration=0,this._rightKey?this._rightKeyPressedDuration+=n:this._rightKeyPressedDuration=0,this._downKey?this._downKeyPressedDuration+=n:this._downKeyPressedDuration=0,this._upKey?this._upKeyPressedDuration+=n:this._upKeyPressedDuration=0;let s=-1;this._allowDiagonals?this._upKey&&!this._downKey?this._leftKey&&!this._rightKey?s=5:!this._leftKey&&this._rightKey?s=7:s=6:!this._upKey&&this._downKey?this._leftKey&&!this._rightKey?s=3:!this._leftKey&&this._rightKey?s=1:s=2:this._leftKey&&!this._rightKey?s=4:!this._leftKey&&this._rightKey&&(s=0):(this._upKey&&!this._downKey?s=6:!this._upKey&&this._downKey&&(s=2),this._leftKey&&!this._rightKey&&(this._upKey===this._downKey||this._upKey&&this._leftKeyPressedDuration<this._upKeyPressedDuration||this._downKey&&this._leftKeyPressedDuration<this._downKeyPressedDuration)?s=4:this._rightKey&&!this._leftKey&&(this._upKey===this._downKey||this._upKey&&this._rightKeyPressedDuration<this._upKeyPressedDuration||this._downKey&&this._rightKeyPressedDuration<this._downKeyPressedDuration)&&(s=0));const o=l.TopDownMovementRuntimeBehavior._topDownMovementHookContext;for(const i of this._topDownMovementHooks)o._setDirection(s),s=i.overrideDirection(o);o._setDirection(s);for(const i of this._topDownMovementHooks)i.beforeSpeedUpdate(o);const r=this.owner,g=this.owner.getElapsedTime()/1e3,x=this._xVelocity,D=this._yVelocity;this._wasStickUsed=!1;let _=0,y=0,d=!1,p=0;if(s!==-1?(d=!0,_=(s+this._movementAngleOffset/45)*Math.PI/4,y=s*45+this._movementAngleOffset,p=this._maxSpeed):this._stickForce!==0?(d=!0,this._allowDiagonals||(this._stickAngle=90*Math.floor((this._stickAngle+45)/90)),y=this._stickAngle+this._movementAngleOffset,_=y*Math.PI/180,p=this._maxSpeed*this._stickForce,this._wasStickUsed=!0):(this._yVelocity!==0||this._xVelocity!==0)&&(d=!0,_=Math.atan2(this._yVelocity,this._xVelocity),y=_*180/Math.PI),d){let i=Math.cos(_),c=Math.sin(_);(i===-1||i===1)&&(c=0),(c===-1||c===1)&&(i=0);let v=Math.hypot(this._xVelocity,this._yVelocity);const M=this._xVelocity*i+this._yVelocity*c;M<0&&(v=M);const k=u.getAcceleratedSpeed(v,p,this._maxSpeed,this._acceleration,this._deceleration,g,this._useLegacyTurnBack);this._xVelocity=k*i,this._yVelocity=k*c}const m=this._xVelocity*this._xVelocity+this._yVelocity*this._yVelocity;if(m>this._maxSpeed*this._maxSpeed){const i=this._maxSpeed/Math.sqrt(m);this._xVelocity*=i,this._yVelocity*=i}this._angularSpeed=this._angularMaxSpeed;for(const i of this._topDownMovementHooks)i.beforePositionUpdate(o);const K=(x+this._xVelocity)/2*g,w=(D+this._yVelocity)/2*g;if(this._basisTransformation===null)r.setX(r.getX()+K),r.setY(r.getY()+w);else{const i=this._temporaryPointForTransformations;i[0]=K,i[1]=w,this._basisTransformation.toScreen(i,i),r.setX(r.getX()+i[0]),r.setY(r.getY()+i[1])}(this._xVelocity!==0||this._yVelocity!==0)&&(this._angle=y,this._rotateObject&&r.rotateTowardAngle(y+this._angleOffset,this._angularSpeed)),this._wasLeftKeyPressed=this._leftKey,this._wasRightKeyPressed=this._rightKey,this._wasUpKeyPressed=this._upKey,this._wasDownKeyPressed=this._downKey,this._dontClearInputsBetweenFrames||(this._leftKey=!1,this._rightKey=!1,this._upKey=!1,this._downKey=!1,this._stickForce=0)}static getAcceleratedSpeed(e,t,f,h,a,n,s=!1){let o=e;const r=s?h:Math.max(h,a);return t<0?e<=t?o=Math.min(t,e+r*n):e<=0?o-=Math.max(-f,h*n):o=Math.max(t,e-r*n):t>0?e>=t?o=Math.max(t,e-r*n):e>=0?o=Math.min(f,e+h*n):o=Math.min(t,e+r*n):(e<0&&(o=Math.min(e+a*n,0)),e>0&&(o=Math.max(e-a*n,0))),o}simulateControl(e){e==="Left"?this._leftKey=!0:e==="Right"?this._rightKey=!0:e==="Up"?this._upKey=!0:e==="Down"&&(this._downKey=!0)}ignoreDefaultControls(e){this._ignoreDefaultControls=e}shouldIgnoreDefaultControls(){return this._ignoreDefaultControls||this._ignoreDefaultControlsAsSyncedByNetwork}simulateLeftKey(){this._leftKey=!0}simulateRightKey(){this._rightKey=!0}simulateUpKey(){this._upKey=!0}simulateDownKey(){this._downKey=!0}simulateStick(e,t){this._stickAngle=e%360,this._stickForce=Math.max(0,Math.min(1,t))}isUsingControl(e){return e==="Left"?this._leftKeyPressedDuration>0:e==="Right"?this._rightKeyPressedDuration>0:e==="Up"?this._upKeyPressedDuration>0:e==="Down"?this._downKeyPressedDuration>0:e==="Stick"?this._wasStickUsed:!1}getLastStickInputAngle(){return this._stickAngle}registerHook(e){this._topDownMovementHooks.push(e)}}l.TopDownMovementRuntimeBehavior=u,function(f){class P{constructor(){this.direction=-1}getDirection(){return this.direction}_setDirection(a){this.direction=a}}f.TopDownMovementHookContext=P,f._topDownMovementHookContext=new l.TopDownMovementRuntimeBehavior.TopDownMovementHookContext;class t{constructor(a){if(a<=0||a>=Math.PI/4)throw new RangeError("An isometry angle must be in ]0; pi/4] but was: "+a);const n=Math.asin(Math.tan(a)),s=Math.sin(n),o=Math.cos(Math.PI/4),r=o;this._screen=[[o,-r],[s*r,s*o]]}toScreen(a,n){const s=this._screen[0][0]*a[0]+this._screen[0][1]*a[1],o=this._screen[1][0]*a[0]+this._screen[1][1]*a[1];n[0]=s,n[1]=o}}f.IsometryTransformation=t}(u=l.TopDownMovementRuntimeBehavior||(l.TopDownMovementRuntimeBehavior={})),l.registerBehavior("TopDownMovementBehavior::TopDownMovementBehavior",l.TopDownMovementRuntimeBehavior)})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=topdownmovementruntimebehavior.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../GDevelop/Extensions/TopDownMovementBehavior/topdownmovementruntimebehavior.ts"],
4
- "sourcesContent": ["/*\nGDevelop - Top-down movement Behavior Extension\nCopyright (c) 2010-2016 Florian Rival (Florian.Rival@gmail.com)\n */\n\nnamespace gdjs {\n interface TopDownMovementNetworkSyncDataType {\n a: float;\n xv: float;\n yv: float;\n as: float;\n lk: boolean;\n rk: boolean;\n uk: boolean;\n dk: boolean;\n wsu: boolean;\n sa: float;\n sf: float;\n }\n\n export interface TopDownMovementNetworkSyncData\n extends BehaviorNetworkSyncData {\n props: TopDownMovementNetworkSyncDataType;\n }\n /**\n * Allows an object to move in 4 or 8 directions, with customizable speed, accelerations\n * and rotation.\n */\n export class TopDownMovementRuntimeBehavior extends gdjs.RuntimeBehavior {\n //Behavior configuration:\n private _allowDiagonals: boolean;\n private _acceleration: float;\n private _deceleration: float;\n private _maxSpeed: float;\n private _angularMaxSpeed: float;\n private _rotateObject: boolean;\n private _angleOffset: float;\n private _ignoreDefaultControls: boolean;\n private _movementAngleOffset: float;\n private _useLegacyTurnBack: boolean;\n\n /** The latest angle of movement, in degrees. */\n private _angle: float = 0;\n\n //Attributes used when moving\n private _xVelocity: float = 0;\n private _yVelocity: float = 0;\n private _angularSpeed: float = 0;\n\n // Inputs\n private _leftKey: boolean = false;\n private _rightKey: boolean = false;\n private _upKey: boolean = false;\n private _downKey: boolean = false;\n private _leftKeyPressedDuration: float = 0;\n private _rightKeyPressedDuration: float = 0;\n private _upKeyPressedDuration: float = 0;\n private _downKeyPressedDuration: float = 0;\n private _wasStickUsed: boolean = false;\n private _stickAngle: float = 0;\n private _stickForce: float = 0;\n\n // This is useful when the object is synchronized by an external source\n // like in a multiplayer game, and we want to be able to predict the\n // movement of the object, even if the inputs are not updated every frame.\n _dontClearInputsBetweenFrames: boolean = false;\n // This is useful when the object is synchronized over the network,\n // object is controlled by the network and we want to ensure the current player\n // cannot control it.\n _ignoreDefaultControlsAsSyncedByNetwork: boolean = false;\n\n // This is useful for extensions that need to know\n // which keys were pressed and doesn't know the mapping\n // done by the scene events.\n private _wasLeftKeyPressed: boolean = false;\n private _wasRightKeyPressed: boolean = false;\n private _wasUpKeyPressed: boolean = false;\n private _wasDownKeyPressed: boolean = false;\n\n // @ts-ignore The setter \"setViewpoint\" is not detected as an affectation.\n private _basisTransformation: gdjs.TopDownMovementRuntimeBehavior.BasisTransformation | null;\n private _temporaryPointForTransformations: FloatPoint = [0, 0];\n\n private _topDownMovementHooks: Array<gdjs.TopDownMovementRuntimeBehavior.TopDownMovementHook> =\n [];\n\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n behaviorData,\n owner: gdjs.RuntimeObject\n ) {\n super(instanceContainer, behaviorData, owner);\n this._allowDiagonals = behaviorData.allowDiagonals;\n this._acceleration = behaviorData.acceleration;\n this._deceleration = behaviorData.deceleration;\n this._maxSpeed = behaviorData.maxSpeed;\n this._angularMaxSpeed = behaviorData.angularMaxSpeed;\n this._rotateObject = behaviorData.rotateObject;\n this._angleOffset = behaviorData.angleOffset;\n this._ignoreDefaultControls = behaviorData.ignoreDefaultControls;\n this.setViewpoint(\n behaviorData.viewpoint,\n behaviorData.customIsometryAngle\n );\n this._movementAngleOffset = behaviorData.movementAngleOffset || 0;\n this._useLegacyTurnBack =\n behaviorData.useLegacyTurnBack === undefined\n ? true\n : behaviorData.useLegacyTurnBack;\n }\n\n getNetworkSyncData(): TopDownMovementNetworkSyncData {\n // This method is called, so we are synchronizing this object.\n // Let's clear the inputs between frames as we control it.\n this._dontClearInputsBetweenFrames = false;\n this._ignoreDefaultControlsAsSyncedByNetwork = false;\n\n return {\n ...super.getNetworkSyncData(),\n props: {\n a: this._angle,\n xv: this._xVelocity,\n yv: this._yVelocity,\n as: this._angularSpeed,\n lk: this._wasLeftKeyPressed,\n rk: this._wasRightKeyPressed,\n uk: this._wasUpKeyPressed,\n dk: this._wasDownKeyPressed,\n wsu: this._wasStickUsed,\n sa: this._stickAngle,\n sf: this._stickForce,\n },\n };\n }\n\n updateFromNetworkSyncData(\n networkSyncData: TopDownMovementNetworkSyncData\n ): void {\n super.updateFromNetworkSyncData(networkSyncData);\n\n const behaviorSpecificProps = networkSyncData.props;\n if (behaviorSpecificProps.a !== undefined) {\n this._angle = behaviorSpecificProps.a;\n }\n if (behaviorSpecificProps.xv !== undefined) {\n this._xVelocity = behaviorSpecificProps.xv;\n }\n if (behaviorSpecificProps.yv !== undefined) {\n this._yVelocity = behaviorSpecificProps.yv;\n }\n if (behaviorSpecificProps.as !== undefined) {\n this._angularSpeed = behaviorSpecificProps.as;\n }\n if (behaviorSpecificProps.lk !== undefined) {\n this._leftKey = behaviorSpecificProps.lk;\n }\n if (behaviorSpecificProps.rk !== undefined) {\n this._rightKey = behaviorSpecificProps.rk;\n }\n if (behaviorSpecificProps.uk !== undefined) {\n this._upKey = behaviorSpecificProps.uk;\n }\n if (behaviorSpecificProps.dk !== undefined) {\n this._downKey = behaviorSpecificProps.dk;\n }\n if (behaviorSpecificProps.wsu !== undefined) {\n this._wasStickUsed = behaviorSpecificProps.wsu;\n }\n if (behaviorSpecificProps.sa !== undefined) {\n this._stickAngle = behaviorSpecificProps.sa;\n }\n if (behaviorSpecificProps.sf !== undefined) {\n this._stickForce = behaviorSpecificProps.sf;\n }\n\n // When the object is synchronized from the network, the inputs must not be cleared.\n this._dontClearInputsBetweenFrames = true;\n // And we are not using the default controls.\n this._ignoreDefaultControlsAsSyncedByNetwork = true;\n }\n\n updateFromBehaviorData(oldBehaviorData, newBehaviorData): boolean {\n if (oldBehaviorData.allowDiagonals !== newBehaviorData.allowDiagonals) {\n this._allowDiagonals = newBehaviorData.allowDiagonals;\n }\n if (oldBehaviorData.acceleration !== newBehaviorData.acceleration) {\n this._acceleration = newBehaviorData.acceleration;\n }\n if (oldBehaviorData.deceleration !== newBehaviorData.deceleration) {\n this._deceleration = newBehaviorData.deceleration;\n }\n if (oldBehaviorData.maxSpeed !== newBehaviorData.maxSpeed) {\n this._maxSpeed = newBehaviorData.maxSpeed;\n }\n if (oldBehaviorData.angularMaxSpeed !== newBehaviorData.angularMaxSpeed) {\n this._angularMaxSpeed = newBehaviorData.angularMaxSpeed;\n }\n if (oldBehaviorData.rotateObject !== newBehaviorData.rotateObject) {\n this._rotateObject = newBehaviorData.rotateObject;\n }\n if (oldBehaviorData.angleOffset !== newBehaviorData.angleOffset) {\n this._angleOffset = newBehaviorData.angleOffset;\n }\n if (\n oldBehaviorData.ignoreDefaultControls !==\n newBehaviorData.ignoreDefaultControls\n ) {\n this._ignoreDefaultControls = newBehaviorData.ignoreDefaultControls;\n }\n if (\n oldBehaviorData.platformType !== newBehaviorData.platformType ||\n oldBehaviorData.customIsometryAngle !==\n newBehaviorData.customIsometryAngle\n ) {\n this.setViewpoint(\n newBehaviorData.platformType,\n newBehaviorData.customIsometryAngle\n );\n }\n if (\n oldBehaviorData.movementAngleOffset !==\n newBehaviorData.movementAngleOffset\n ) {\n this._movementAngleOffset = newBehaviorData.movementAngleOffset;\n }\n return true;\n }\n\n setViewpoint(viewpoint: string, customIsometryAngle: float): void {\n if (viewpoint === 'PixelIsometry') {\n this._basisTransformation =\n new gdjs.TopDownMovementRuntimeBehavior.IsometryTransformation(\n Math.atan(0.5)\n );\n } else if (viewpoint === 'TrueIsometry') {\n this._basisTransformation =\n new gdjs.TopDownMovementRuntimeBehavior.IsometryTransformation(\n Math.PI / 6\n );\n } else if (viewpoint === 'CustomIsometry') {\n this._basisTransformation =\n new gdjs.TopDownMovementRuntimeBehavior.IsometryTransformation(\n (customIsometryAngle * Math.PI) / 180\n );\n } else {\n this._basisTransformation = null;\n }\n }\n\n setAcceleration(acceleration: float): void {\n this._acceleration = acceleration;\n }\n\n getAcceleration() {\n return this._acceleration;\n }\n\n setDeceleration(deceleration: float): void {\n this._deceleration = deceleration;\n }\n\n getDeceleration() {\n return this._deceleration;\n }\n\n setMaxSpeed(maxSpeed: float): void {\n this._maxSpeed = maxSpeed;\n }\n\n getMaxSpeed() {\n return this._maxSpeed;\n }\n\n setAngularMaxSpeed(angularMaxSpeed: float): void {\n this._angularMaxSpeed = angularMaxSpeed;\n }\n\n getAngularMaxSpeed() {\n return this._angularMaxSpeed;\n }\n\n setAngleOffset(angleOffset: float): void {\n this._angleOffset = angleOffset;\n }\n\n getAngleOffset() {\n return this._angleOffset;\n }\n\n allowDiagonals(allow: boolean) {\n this._allowDiagonals = allow;\n }\n\n diagonalsAllowed() {\n return this._allowDiagonals;\n }\n\n setRotateObject(allow: boolean): void {\n this._rotateObject = allow;\n }\n\n isObjectRotated(): boolean {\n return this._rotateObject;\n }\n\n isMoving(): boolean {\n return this._xVelocity !== 0 || this._yVelocity !== 0;\n }\n\n getSpeed(): float {\n return Math.hypot(this._xVelocity, this._yVelocity);\n }\n\n getXVelocity(): float {\n return this._xVelocity;\n }\n\n setXVelocity(velocityX: float): void {\n this._xVelocity = velocityX;\n }\n\n getYVelocity(): float {\n return this._yVelocity;\n }\n\n setYVelocity(velocityY: float): void {\n this._yVelocity = velocityY;\n }\n\n getAngle(): float {\n return this._angle;\n }\n\n isMovementAngleAround(degreeAngle: float, tolerance: float) {\n return (\n Math.abs(\n gdjs.evtTools.common.angleDifference(this._angle, degreeAngle)\n ) <= tolerance\n );\n }\n\n setMovementAngleOffset(movementAngleOffset: float): void {\n this._movementAngleOffset = movementAngleOffset;\n }\n\n getMovementAngleOffset() {\n return this._movementAngleOffset;\n }\n\n doStepPreEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {\n const LEFTKEY = 37;\n const UPKEY = 38;\n const RIGHTKEY = 39;\n const DOWNKEY = 40;\n\n //Get the player input:\n this._leftKey ||\n (this._leftKey =\n !this.shouldIgnoreDefaultControls() &&\n instanceContainer.getGame().getInputManager().isKeyPressed(LEFTKEY));\n this._rightKey ||\n (this._rightKey =\n !this.shouldIgnoreDefaultControls() &&\n instanceContainer.getGame().getInputManager().isKeyPressed(RIGHTKEY));\n this._downKey ||\n (this._downKey =\n !this.shouldIgnoreDefaultControls() &&\n instanceContainer.getGame().getInputManager().isKeyPressed(DOWNKEY));\n this._upKey ||\n (this._upKey =\n !this.shouldIgnoreDefaultControls() &&\n instanceContainer.getGame().getInputManager().isKeyPressed(UPKEY));\n\n const elapsedTime = this.owner.getElapsedTime();\n\n if (!this._leftKey) {\n this._leftKeyPressedDuration = 0;\n } else {\n this._leftKeyPressedDuration += elapsedTime;\n }\n if (!this._rightKey) {\n this._rightKeyPressedDuration = 0;\n } else {\n this._rightKeyPressedDuration += elapsedTime;\n }\n if (!this._downKey) {\n this._downKeyPressedDuration = 0;\n } else {\n this._downKeyPressedDuration += elapsedTime;\n }\n if (!this._upKey) {\n this._upKeyPressedDuration = 0;\n } else {\n this._upKeyPressedDuration += elapsedTime;\n }\n\n let direction = -1;\n if (!this._allowDiagonals) {\n if (this._upKey && !this._downKey) {\n direction = 6;\n } else if (!this._upKey && this._downKey) {\n direction = 2;\n }\n // when 2 keys are pressed for diagonals the most recently pressed win\n if (\n this._leftKey &&\n !this._rightKey &&\n (this._upKey === this._downKey ||\n (this._upKey &&\n this._leftKeyPressedDuration < this._upKeyPressedDuration) ||\n (this._downKey &&\n this._leftKeyPressedDuration < this._downKeyPressedDuration))\n ) {\n direction = 4;\n } else if (\n this._rightKey &&\n !this._leftKey &&\n (this._upKey === this._downKey ||\n (this._upKey &&\n this._rightKeyPressedDuration < this._upKeyPressedDuration) ||\n (this._downKey &&\n this._rightKeyPressedDuration < this._downKeyPressedDuration))\n ) {\n direction = 0;\n }\n } else {\n if (this._upKey && !this._downKey) {\n if (this._leftKey && !this._rightKey) {\n direction = 5;\n } else if (!this._leftKey && this._rightKey) {\n direction = 7;\n } else {\n direction = 6;\n }\n } else if (!this._upKey && this._downKey) {\n if (this._leftKey && !this._rightKey) {\n direction = 3;\n } else if (!this._leftKey && this._rightKey) {\n direction = 1;\n } else {\n direction = 2;\n }\n } else {\n if (this._leftKey && !this._rightKey) {\n direction = 4;\n } else if (!this._leftKey && this._rightKey) {\n direction = 0;\n }\n }\n }\n\n const hookContext =\n gdjs.TopDownMovementRuntimeBehavior._topDownMovementHookContext;\n for (const topDownMovementHook of this._topDownMovementHooks) {\n hookContext._setDirection(direction);\n direction = topDownMovementHook.overrideDirection(hookContext);\n }\n hookContext._setDirection(direction);\n for (const topDownMovementHook of this._topDownMovementHooks) {\n topDownMovementHook.beforeSpeedUpdate(hookContext);\n }\n\n const object = this.owner;\n const timeDelta = this.owner.getElapsedTime() / 1000;\n const previousVelocityX = this._xVelocity;\n const previousVelocityY = this._yVelocity;\n this._wasStickUsed = false;\n\n // These 4 values are not actually used.\n // JavaScript doesn't allow to declare\n // variables without assigning them a value.\n let directionInRad = 0;\n let directionInDeg = 0;\n\n let isMoving = false;\n let targetedSpeed = 0;\n // Update the speed of the object:\n if (direction !== -1) {\n isMoving = true;\n directionInRad =\n ((direction + this._movementAngleOffset / 45) * Math.PI) / 4.0;\n directionInDeg = direction * 45 + this._movementAngleOffset;\n targetedSpeed = this._maxSpeed;\n } else if (this._stickForce !== 0) {\n isMoving = true;\n if (!this._allowDiagonals) {\n this._stickAngle = 90 * Math.floor((this._stickAngle + 45) / 90);\n }\n directionInDeg = this._stickAngle + this._movementAngleOffset;\n directionInRad = (directionInDeg * Math.PI) / 180;\n targetedSpeed = this._maxSpeed * this._stickForce;\n\n this._wasStickUsed = true;\n } else if (this._yVelocity !== 0 || this._xVelocity !== 0) {\n isMoving = true;\n directionInRad = Math.atan2(this._yVelocity, this._xVelocity);\n directionInDeg = (directionInRad * 180.0) / Math.PI;\n }\n if (isMoving) {\n // This makes the trigo resilient to rounding errors on directionInRad.\n let cos = Math.cos(directionInRad);\n let sin = Math.sin(directionInRad);\n if (cos === -1 || cos === 1) {\n sin = 0;\n }\n if (sin === -1 || sin === 1) {\n cos = 0;\n }\n\n const getAcceleratedSpeed = this._useLegacyTurnBack\n ? TopDownMovementRuntimeBehavior.getLegacyAcceleratedSpeed\n : TopDownMovementRuntimeBehavior.getAcceleratedSpeed;\n\n let currentSpeed = Math.hypot(this._xVelocity, this._yVelocity);\n const dotProduct = this._xVelocity * cos + this._yVelocity * sin;\n if (dotProduct < 0) {\n // The object is turning back.\n // Keep the negative velocity projected on the new direction.\n currentSpeed = dotProduct;\n }\n const speed = getAcceleratedSpeed(\n currentSpeed,\n targetedSpeed,\n this._maxSpeed,\n this._acceleration,\n this._deceleration,\n timeDelta\n );\n this._xVelocity = speed * cos;\n this._yVelocity = speed * sin;\n }\n\n const squaredSpeed =\n this._xVelocity * this._xVelocity + this._yVelocity * this._yVelocity;\n if (squaredSpeed > this._maxSpeed * this._maxSpeed) {\n const ratio = this._maxSpeed / Math.sqrt(squaredSpeed);\n this._xVelocity *= ratio;\n this._yVelocity *= ratio;\n }\n\n // No acceleration for angular speed for now.\n this._angularSpeed = this._angularMaxSpeed;\n\n for (const topDownMovementHook of this._topDownMovementHooks) {\n topDownMovementHook.beforePositionUpdate(hookContext);\n }\n\n // Position object.\n // This is a Verlet integration considering the acceleration as constant.\n // If you expand deltaX or deltaY, it gives, thanks to the usage of both\n // the old and the new velocity:\n // \"velocity * timeDelta + acceleration * timeDelta^2 / 2\".\n //\n // The acceleration is not actually always constant, particularly with a gamepad,\n // but the error is multiplied by timDelta^3. So, it shouldn't matter much.\n const deltaX = ((previousVelocityX + this._xVelocity) / 2) * timeDelta;\n const deltaY = ((previousVelocityY + this._yVelocity) / 2) * timeDelta;\n if (this._basisTransformation === null) {\n // Top-down viewpoint\n object.setX(object.getX() + deltaX);\n object.setY(object.getY() + deltaY);\n } else {\n // Isometry viewpoint\n const point = this._temporaryPointForTransformations;\n point[0] = deltaX;\n point[1] = deltaY;\n this._basisTransformation.toScreen(point, point);\n object.setX(object.getX() + point[0]);\n object.setY(object.getY() + point[1]);\n }\n\n // Also update angle if needed.\n if (this._xVelocity !== 0 || this._yVelocity !== 0) {\n this._angle = directionInDeg;\n if (this._rotateObject) {\n object.rotateTowardAngle(\n directionInDeg + this._angleOffset,\n this._angularSpeed\n );\n }\n }\n\n this._wasLeftKeyPressed = this._leftKey;\n this._wasRightKeyPressed = this._rightKey;\n this._wasUpKeyPressed = this._upKey;\n this._wasDownKeyPressed = this._downKey;\n if (!this._dontClearInputsBetweenFrames) {\n this._leftKey = false;\n this._rightKey = false;\n this._upKey = false;\n this._downKey = false;\n this._stickForce = 0;\n }\n }\n\n private static getAcceleratedSpeed(\n currentSpeed: float,\n targetedSpeed: float,\n speedMax: float,\n acceleration: float,\n deceleration: float,\n timeDelta: float\n ): float {\n let newSpeed = currentSpeed;\n const turningBackAcceleration = Math.max(acceleration, deceleration);\n if (targetedSpeed < 0) {\n if (currentSpeed <= targetedSpeed) {\n // Reduce the speed to match the stick force.\n newSpeed = Math.min(\n targetedSpeed,\n currentSpeed + turningBackAcceleration * timeDelta\n );\n } else if (currentSpeed <= 0) {\n // Accelerate\n newSpeed -= Math.max(-speedMax, acceleration * timeDelta);\n } else {\n // Turn back at least as fast as it would stop.\n newSpeed = Math.max(\n targetedSpeed,\n currentSpeed - turningBackAcceleration * timeDelta\n );\n }\n } else if (targetedSpeed > 0) {\n if (currentSpeed >= targetedSpeed) {\n // Reduce the speed to match the stick force.\n newSpeed = Math.max(\n targetedSpeed,\n currentSpeed - turningBackAcceleration * timeDelta\n );\n } else if (currentSpeed >= 0) {\n // Accelerate\n newSpeed = Math.min(\n speedMax,\n currentSpeed + acceleration * timeDelta\n );\n } else {\n // Turn back at least as fast as it would stop.\n newSpeed = Math.min(\n targetedSpeed,\n currentSpeed + turningBackAcceleration * timeDelta\n );\n }\n } else {\n // Decelerate and stop.\n if (currentSpeed < 0) {\n newSpeed = Math.min(currentSpeed + deceleration * timeDelta, 0);\n }\n if (currentSpeed > 0) {\n newSpeed = Math.max(currentSpeed - deceleration * timeDelta, 0);\n }\n }\n return newSpeed;\n }\n\n private static getLegacyAcceleratedSpeed(\n currentSpeed: float,\n targetedSpeed: float,\n speedMax: float,\n acceleration: float,\n deceleration: float,\n timeDelta: float\n ): float {\n let newSpeed = currentSpeed;\n if (targetedSpeed < 0) {\n if (currentSpeed <= targetedSpeed) {\n // Reduce the speed to match the stick force.\n newSpeed = Math.min(\n targetedSpeed,\n currentSpeed + deceleration * timeDelta\n );\n } else if (currentSpeed <= 0) {\n // Accelerate\n newSpeed -= Math.max(-speedMax, acceleration * timeDelta);\n } else {\n newSpeed = Math.max(\n targetedSpeed,\n currentSpeed - deceleration * timeDelta\n );\n }\n } else if (targetedSpeed > 0) {\n if (currentSpeed >= targetedSpeed) {\n // Reduce the speed to match the stick force.\n newSpeed = Math.max(\n targetedSpeed,\n currentSpeed - deceleration * timeDelta\n );\n } else if (currentSpeed >= 0) {\n // Accelerate\n newSpeed = Math.min(\n speedMax,\n currentSpeed + acceleration * timeDelta\n );\n } else {\n newSpeed = Math.min(\n targetedSpeed,\n currentSpeed + deceleration * timeDelta\n );\n }\n } else {\n // Decelerate and stop.\n if (currentSpeed < 0) {\n newSpeed = Math.min(currentSpeed + deceleration * timeDelta, 0);\n }\n if (currentSpeed > 0) {\n newSpeed = Math.max(currentSpeed - deceleration * timeDelta, 0);\n }\n }\n return newSpeed;\n }\n\n simulateControl(input: string) {\n if (input === 'Left') {\n this._leftKey = true;\n } else if (input === 'Right') {\n this._rightKey = true;\n } else if (input === 'Up') {\n this._upKey = true;\n } else if (input === 'Down') {\n this._downKey = true;\n }\n }\n\n ignoreDefaultControls(ignore: boolean) {\n this._ignoreDefaultControls = ignore;\n }\n\n shouldIgnoreDefaultControls() {\n return (\n this._ignoreDefaultControls ||\n this._ignoreDefaultControlsAsSyncedByNetwork\n );\n }\n\n simulateLeftKey() {\n this._leftKey = true;\n }\n\n simulateRightKey() {\n this._rightKey = true;\n }\n\n simulateUpKey() {\n this._upKey = true;\n }\n\n simulateDownKey() {\n this._downKey = true;\n }\n\n simulateStick(stickAngle: float, stickForce: float) {\n this._stickAngle = stickAngle % 360;\n this._stickForce = Math.max(0, Math.min(1, stickForce));\n }\n\n /**.\n * @param input The control to be tested [Left,Right,Up,Down,Stick].\n * @returns true if the key was used since the last `doStepPreEvents` call.\n */\n isUsingControl(input: string): boolean {\n if (input === 'Left') {\n return this._leftKeyPressedDuration > 0;\n }\n if (input === 'Right') {\n return this._rightKeyPressedDuration > 0;\n }\n if (input === 'Up') {\n return this._upKeyPressedDuration > 0;\n }\n if (input === 'Down') {\n return this._downKeyPressedDuration > 0;\n }\n if (input === 'Stick') {\n return this._wasStickUsed;\n }\n return false;\n }\n\n getLastStickInputAngle() {\n return this._stickAngle;\n }\n\n /**\n * A hook must typically be registered by a behavior that requires this one\n * in its onCreate function.\n * The hook must stay forever to avoid side effects like a hooks order\n * change. To handle deactivated behavior, the hook can check that its\n * behavior is activated before doing anything.\n */\n registerHook(\n hook: gdjs.TopDownMovementRuntimeBehavior.TopDownMovementHook\n ) {\n this._topDownMovementHooks.push(hook);\n }\n }\n\n export namespace TopDownMovementRuntimeBehavior {\n export class TopDownMovementHookContext {\n private direction: integer = -1;\n\n /**\n * @returns The movement direction from 0 for left to 7 for up-left and\n * -1 for no direction.\n */\n getDirection(): integer {\n return this.direction;\n }\n\n /**\n * This method won't change the direction used by the top-down movement\n * behavior.\n */\n _setDirection(direction: integer): void {\n this.direction = direction;\n }\n }\n\n // This should be a static attribute but it's not possible because of\n // declaration order.\n export const _topDownMovementHookContext =\n new gdjs.TopDownMovementRuntimeBehavior.TopDownMovementHookContext();\n\n /**\n * Allow extensions relying on the top-down movement to customize its\n * behavior a bit.\n */\n export interface TopDownMovementHook {\n /**\n * Return the direction to use instead of the direction given in\n * parameter.\n */\n overrideDirection(hookContext: TopDownMovementHookContext): integer;\n /**\n * Called before the acceleration and new direction is applied to the\n * velocity.\n */\n beforeSpeedUpdate(hookContext: TopDownMovementHookContext): void;\n /**\n * Called before the velocity is applied to the object position and\n * angle.\n */\n beforePositionUpdate(hookContext: TopDownMovementHookContext): void;\n }\n\n export interface BasisTransformation {\n toScreen(worldPoint: FloatPoint, screenPoint: FloatPoint): void;\n }\n\n export class IsometryTransformation\n implements gdjs.TopDownMovementRuntimeBehavior.BasisTransformation\n {\n private _screen: float[][];\n\n /**\n * @param angle between the x axis and the projected isometric x axis.\n * @throws if the angle is not in ]0; pi/4[. Note that 0 is a front viewpoint and pi/4 a top-down viewpoint.\n */\n constructor(angle: float) {\n if (angle <= 0 || angle >= Math.PI / 4)\n throw new RangeError(\n 'An isometry angle must be in ]0; pi/4] but was: ' + angle\n );\n\n const alpha = Math.asin(Math.tan(angle));\n const sinA = Math.sin(alpha);\n const cosB = Math.cos(Math.PI / 4);\n const sinB = cosB;\n // https://en.wikipedia.org/wiki/Isometric_projection\n //\n // / 1 0 0 \\ / cosB 0 -sinB \\ / 1 0 0 \\\n // | 0 cosA sinA | | 0 1 0 | | 0 0 -1 |\n // \\ 0 -sinA cosA / \\ sinB 0 cosB / \\ 0 1 0 /\n this._screen = [\n [cosB, -sinB],\n [sinA * sinB, sinA * cosB],\n ];\n }\n\n toScreen(worldPoint: FloatPoint, screenPoint: FloatPoint): void {\n const x =\n this._screen[0][0] * worldPoint[0] +\n this._screen[0][1] * worldPoint[1];\n const y =\n this._screen[1][0] * worldPoint[0] +\n this._screen[1][1] * worldPoint[1];\n screenPoint[0] = x;\n screenPoint[1] = y;\n }\n }\n }\n\n gdjs.registerBehavior(\n 'TopDownMovementBehavior::TopDownMovementBehavior',\n gdjs.TopDownMovementRuntimeBehavior\n );\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\nGDevelop - Top-down movement Behavior Extension\nCopyright (c) 2010-2016 Florian Rival (Florian.Rival@gmail.com)\n */\n\nnamespace gdjs {\n interface TopDownMovementNetworkSyncDataType {\n a: float;\n xv: float;\n yv: float;\n as: float;\n lk: boolean;\n rk: boolean;\n uk: boolean;\n dk: boolean;\n wsu: boolean;\n sa: float;\n sf: float;\n }\n\n export interface TopDownMovementNetworkSyncData\n extends BehaviorNetworkSyncData {\n props: TopDownMovementNetworkSyncDataType;\n }\n /**\n * Allows an object to move in 4 or 8 directions, with customizable speed, accelerations\n * and rotation.\n */\n export class TopDownMovementRuntimeBehavior extends gdjs.RuntimeBehavior {\n //Behavior configuration:\n private _allowDiagonals: boolean;\n private _acceleration: float;\n private _deceleration: float;\n private _maxSpeed: float;\n private _angularMaxSpeed: float;\n private _rotateObject: boolean;\n private _angleOffset: float;\n private _ignoreDefaultControls: boolean;\n private _movementAngleOffset: float;\n private _useLegacyTurnBack: boolean;\n\n /** The latest angle of movement, in degrees. */\n private _angle: float = 0;\n\n //Attributes used when moving\n private _xVelocity: float = 0;\n private _yVelocity: float = 0;\n private _angularSpeed: float = 0;\n\n // Inputs\n private _leftKey: boolean = false;\n private _rightKey: boolean = false;\n private _upKey: boolean = false;\n private _downKey: boolean = false;\n private _leftKeyPressedDuration: float = 0;\n private _rightKeyPressedDuration: float = 0;\n private _upKeyPressedDuration: float = 0;\n private _downKeyPressedDuration: float = 0;\n private _wasStickUsed: boolean = false;\n private _stickAngle: float = 0;\n private _stickForce: float = 0;\n\n // This is useful when the object is synchronized by an external source\n // like in a multiplayer game, and we want to be able to predict the\n // movement of the object, even if the inputs are not updated every frame.\n _dontClearInputsBetweenFrames: boolean = false;\n // This is useful when the object is synchronized over the network,\n // object is controlled by the network and we want to ensure the current player\n // cannot control it.\n _ignoreDefaultControlsAsSyncedByNetwork: boolean = false;\n\n // This is useful for extensions that need to know\n // which keys were pressed and doesn't know the mapping\n // done by the scene events.\n private _wasLeftKeyPressed: boolean = false;\n private _wasRightKeyPressed: boolean = false;\n private _wasUpKeyPressed: boolean = false;\n private _wasDownKeyPressed: boolean = false;\n\n // @ts-ignore The setter \"setViewpoint\" is not detected as an affectation.\n private _basisTransformation: gdjs.TopDownMovementRuntimeBehavior.BasisTransformation | null;\n private _temporaryPointForTransformations: FloatPoint = [0, 0];\n\n private _topDownMovementHooks: Array<gdjs.TopDownMovementRuntimeBehavior.TopDownMovementHook> =\n [];\n\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n behaviorData,\n owner: gdjs.RuntimeObject\n ) {\n super(instanceContainer, behaviorData, owner);\n this._allowDiagonals = behaviorData.allowDiagonals;\n this._acceleration = behaviorData.acceleration;\n this._deceleration = behaviorData.deceleration;\n this._maxSpeed = behaviorData.maxSpeed;\n this._angularMaxSpeed = behaviorData.angularMaxSpeed;\n this._rotateObject = behaviorData.rotateObject;\n this._angleOffset = behaviorData.angleOffset;\n this._ignoreDefaultControls = behaviorData.ignoreDefaultControls;\n this.setViewpoint(\n behaviorData.viewpoint,\n behaviorData.customIsometryAngle\n );\n this._movementAngleOffset = behaviorData.movementAngleOffset || 0;\n this._useLegacyTurnBack =\n behaviorData.useLegacyTurnBack === undefined\n ? true\n : behaviorData.useLegacyTurnBack;\n }\n\n getNetworkSyncData(): TopDownMovementNetworkSyncData {\n // This method is called, so we are synchronizing this object.\n // Let's clear the inputs between frames as we control it.\n this._dontClearInputsBetweenFrames = false;\n this._ignoreDefaultControlsAsSyncedByNetwork = false;\n\n return {\n ...super.getNetworkSyncData(),\n props: {\n a: this._angle,\n xv: this._xVelocity,\n yv: this._yVelocity,\n as: this._angularSpeed,\n lk: this._wasLeftKeyPressed,\n rk: this._wasRightKeyPressed,\n uk: this._wasUpKeyPressed,\n dk: this._wasDownKeyPressed,\n wsu: this._wasStickUsed,\n sa: this._stickAngle,\n sf: this._stickForce,\n },\n };\n }\n\n updateFromNetworkSyncData(\n networkSyncData: TopDownMovementNetworkSyncData\n ): void {\n super.updateFromNetworkSyncData(networkSyncData);\n\n const behaviorSpecificProps = networkSyncData.props;\n if (behaviorSpecificProps.a !== undefined) {\n this._angle = behaviorSpecificProps.a;\n }\n if (behaviorSpecificProps.xv !== undefined) {\n this._xVelocity = behaviorSpecificProps.xv;\n }\n if (behaviorSpecificProps.yv !== undefined) {\n this._yVelocity = behaviorSpecificProps.yv;\n }\n if (behaviorSpecificProps.as !== undefined) {\n this._angularSpeed = behaviorSpecificProps.as;\n }\n if (behaviorSpecificProps.lk !== undefined) {\n this._leftKey = behaviorSpecificProps.lk;\n }\n if (behaviorSpecificProps.rk !== undefined) {\n this._rightKey = behaviorSpecificProps.rk;\n }\n if (behaviorSpecificProps.uk !== undefined) {\n this._upKey = behaviorSpecificProps.uk;\n }\n if (behaviorSpecificProps.dk !== undefined) {\n this._downKey = behaviorSpecificProps.dk;\n }\n if (behaviorSpecificProps.wsu !== undefined) {\n this._wasStickUsed = behaviorSpecificProps.wsu;\n }\n if (behaviorSpecificProps.sa !== undefined) {\n this._stickAngle = behaviorSpecificProps.sa;\n }\n if (behaviorSpecificProps.sf !== undefined) {\n this._stickForce = behaviorSpecificProps.sf;\n }\n\n // When the object is synchronized from the network, the inputs must not be cleared.\n this._dontClearInputsBetweenFrames = true;\n // And we are not using the default controls.\n this._ignoreDefaultControlsAsSyncedByNetwork = true;\n }\n\n updateFromBehaviorData(oldBehaviorData, newBehaviorData): boolean {\n if (oldBehaviorData.allowDiagonals !== newBehaviorData.allowDiagonals) {\n this._allowDiagonals = newBehaviorData.allowDiagonals;\n }\n if (oldBehaviorData.acceleration !== newBehaviorData.acceleration) {\n this._acceleration = newBehaviorData.acceleration;\n }\n if (oldBehaviorData.deceleration !== newBehaviorData.deceleration) {\n this._deceleration = newBehaviorData.deceleration;\n }\n if (oldBehaviorData.maxSpeed !== newBehaviorData.maxSpeed) {\n this._maxSpeed = newBehaviorData.maxSpeed;\n }\n if (oldBehaviorData.angularMaxSpeed !== newBehaviorData.angularMaxSpeed) {\n this._angularMaxSpeed = newBehaviorData.angularMaxSpeed;\n }\n if (oldBehaviorData.rotateObject !== newBehaviorData.rotateObject) {\n this._rotateObject = newBehaviorData.rotateObject;\n }\n if (oldBehaviorData.angleOffset !== newBehaviorData.angleOffset) {\n this._angleOffset = newBehaviorData.angleOffset;\n }\n if (\n oldBehaviorData.ignoreDefaultControls !==\n newBehaviorData.ignoreDefaultControls\n ) {\n this._ignoreDefaultControls = newBehaviorData.ignoreDefaultControls;\n }\n if (\n oldBehaviorData.platformType !== newBehaviorData.platformType ||\n oldBehaviorData.customIsometryAngle !==\n newBehaviorData.customIsometryAngle\n ) {\n this.setViewpoint(\n newBehaviorData.platformType,\n newBehaviorData.customIsometryAngle\n );\n }\n if (\n oldBehaviorData.movementAngleOffset !==\n newBehaviorData.movementAngleOffset\n ) {\n this._movementAngleOffset = newBehaviorData.movementAngleOffset;\n }\n return true;\n }\n\n setViewpoint(viewpoint: string, customIsometryAngle: float): void {\n if (viewpoint === 'PixelIsometry') {\n this._basisTransformation =\n new gdjs.TopDownMovementRuntimeBehavior.IsometryTransformation(\n Math.atan(0.5)\n );\n } else if (viewpoint === 'TrueIsometry') {\n this._basisTransformation =\n new gdjs.TopDownMovementRuntimeBehavior.IsometryTransformation(\n Math.PI / 6\n );\n } else if (viewpoint === 'CustomIsometry') {\n this._basisTransformation =\n new gdjs.TopDownMovementRuntimeBehavior.IsometryTransformation(\n (customIsometryAngle * Math.PI) / 180\n );\n } else {\n this._basisTransformation = null;\n }\n }\n\n setAcceleration(acceleration: float): void {\n this._acceleration = acceleration;\n }\n\n getAcceleration() {\n return this._acceleration;\n }\n\n setDeceleration(deceleration: float): void {\n this._deceleration = deceleration;\n }\n\n getDeceleration() {\n return this._deceleration;\n }\n\n setMaxSpeed(maxSpeed: float): void {\n this._maxSpeed = maxSpeed;\n }\n\n getMaxSpeed() {\n return this._maxSpeed;\n }\n\n setAngularMaxSpeed(angularMaxSpeed: float): void {\n this._angularMaxSpeed = angularMaxSpeed;\n }\n\n getAngularMaxSpeed() {\n return this._angularMaxSpeed;\n }\n\n setAngleOffset(angleOffset: float): void {\n this._angleOffset = angleOffset;\n }\n\n getAngleOffset() {\n return this._angleOffset;\n }\n\n allowDiagonals(allow: boolean) {\n this._allowDiagonals = allow;\n }\n\n diagonalsAllowed() {\n return this._allowDiagonals;\n }\n\n setRotateObject(allow: boolean): void {\n this._rotateObject = allow;\n }\n\n isObjectRotated(): boolean {\n return this._rotateObject;\n }\n\n isMoving(): boolean {\n return this._xVelocity !== 0 || this._yVelocity !== 0;\n }\n\n getSpeed(): float {\n return Math.hypot(this._xVelocity, this._yVelocity);\n }\n\n getXVelocity(): float {\n return this._xVelocity;\n }\n\n setXVelocity(velocityX: float): void {\n this._xVelocity = velocityX;\n }\n\n getYVelocity(): float {\n return this._yVelocity;\n }\n\n setYVelocity(velocityY: float): void {\n this._yVelocity = velocityY;\n }\n\n getAngle(): float {\n return this._angle;\n }\n\n isMovementAngleAround(degreeAngle: float, tolerance: float) {\n return (\n Math.abs(\n gdjs.evtTools.common.angleDifference(this._angle, degreeAngle)\n ) <= tolerance\n );\n }\n\n setMovementAngleOffset(movementAngleOffset: float): void {\n this._movementAngleOffset = movementAngleOffset;\n }\n\n getMovementAngleOffset() {\n return this._movementAngleOffset;\n }\n\n doStepPreEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {\n const LEFTKEY = 37;\n const UPKEY = 38;\n const RIGHTKEY = 39;\n const DOWNKEY = 40;\n\n //Get the player input:\n this._leftKey ||\n (this._leftKey =\n !this.shouldIgnoreDefaultControls() &&\n instanceContainer.getGame().getInputManager().isKeyPressed(LEFTKEY));\n this._rightKey ||\n (this._rightKey =\n !this.shouldIgnoreDefaultControls() &&\n instanceContainer.getGame().getInputManager().isKeyPressed(RIGHTKEY));\n this._downKey ||\n (this._downKey =\n !this.shouldIgnoreDefaultControls() &&\n instanceContainer.getGame().getInputManager().isKeyPressed(DOWNKEY));\n this._upKey ||\n (this._upKey =\n !this.shouldIgnoreDefaultControls() &&\n instanceContainer.getGame().getInputManager().isKeyPressed(UPKEY));\n\n const elapsedTime = this.owner.getElapsedTime();\n\n if (!this._leftKey) {\n this._leftKeyPressedDuration = 0;\n } else {\n this._leftKeyPressedDuration += elapsedTime;\n }\n if (!this._rightKey) {\n this._rightKeyPressedDuration = 0;\n } else {\n this._rightKeyPressedDuration += elapsedTime;\n }\n if (!this._downKey) {\n this._downKeyPressedDuration = 0;\n } else {\n this._downKeyPressedDuration += elapsedTime;\n }\n if (!this._upKey) {\n this._upKeyPressedDuration = 0;\n } else {\n this._upKeyPressedDuration += elapsedTime;\n }\n\n let direction = -1;\n if (!this._allowDiagonals) {\n if (this._upKey && !this._downKey) {\n direction = 6;\n } else if (!this._upKey && this._downKey) {\n direction = 2;\n }\n // when 2 keys are pressed for diagonals the most recently pressed win\n if (\n this._leftKey &&\n !this._rightKey &&\n (this._upKey === this._downKey ||\n (this._upKey &&\n this._leftKeyPressedDuration < this._upKeyPressedDuration) ||\n (this._downKey &&\n this._leftKeyPressedDuration < this._downKeyPressedDuration))\n ) {\n direction = 4;\n } else if (\n this._rightKey &&\n !this._leftKey &&\n (this._upKey === this._downKey ||\n (this._upKey &&\n this._rightKeyPressedDuration < this._upKeyPressedDuration) ||\n (this._downKey &&\n this._rightKeyPressedDuration < this._downKeyPressedDuration))\n ) {\n direction = 0;\n }\n } else {\n if (this._upKey && !this._downKey) {\n if (this._leftKey && !this._rightKey) {\n direction = 5;\n } else if (!this._leftKey && this._rightKey) {\n direction = 7;\n } else {\n direction = 6;\n }\n } else if (!this._upKey && this._downKey) {\n if (this._leftKey && !this._rightKey) {\n direction = 3;\n } else if (!this._leftKey && this._rightKey) {\n direction = 1;\n } else {\n direction = 2;\n }\n } else {\n if (this._leftKey && !this._rightKey) {\n direction = 4;\n } else if (!this._leftKey && this._rightKey) {\n direction = 0;\n }\n }\n }\n\n const hookContext =\n gdjs.TopDownMovementRuntimeBehavior._topDownMovementHookContext;\n for (const topDownMovementHook of this._topDownMovementHooks) {\n hookContext._setDirection(direction);\n direction = topDownMovementHook.overrideDirection(hookContext);\n }\n hookContext._setDirection(direction);\n for (const topDownMovementHook of this._topDownMovementHooks) {\n topDownMovementHook.beforeSpeedUpdate(hookContext);\n }\n\n const object = this.owner;\n const timeDelta = this.owner.getElapsedTime() / 1000;\n const previousVelocityX = this._xVelocity;\n const previousVelocityY = this._yVelocity;\n this._wasStickUsed = false;\n\n // These 4 values are not actually used.\n // JavaScript doesn't allow to declare\n // variables without assigning them a value.\n let directionInRad = 0;\n let directionInDeg = 0;\n\n let isMoving = false;\n let targetedSpeed = 0;\n // Update the speed of the object:\n if (direction !== -1) {\n isMoving = true;\n directionInRad =\n ((direction + this._movementAngleOffset / 45) * Math.PI) / 4.0;\n directionInDeg = direction * 45 + this._movementAngleOffset;\n targetedSpeed = this._maxSpeed;\n } else if (this._stickForce !== 0) {\n isMoving = true;\n if (!this._allowDiagonals) {\n this._stickAngle = 90 * Math.floor((this._stickAngle + 45) / 90);\n }\n directionInDeg = this._stickAngle + this._movementAngleOffset;\n directionInRad = (directionInDeg * Math.PI) / 180;\n targetedSpeed = this._maxSpeed * this._stickForce;\n\n this._wasStickUsed = true;\n } else if (this._yVelocity !== 0 || this._xVelocity !== 0) {\n isMoving = true;\n directionInRad = Math.atan2(this._yVelocity, this._xVelocity);\n directionInDeg = (directionInRad * 180.0) / Math.PI;\n }\n if (isMoving) {\n // This makes the trigo resilient to rounding errors on directionInRad.\n let cos = Math.cos(directionInRad);\n let sin = Math.sin(directionInRad);\n if (cos === -1 || cos === 1) {\n sin = 0;\n }\n if (sin === -1 || sin === 1) {\n cos = 0;\n }\n\n let currentSpeed = Math.hypot(this._xVelocity, this._yVelocity);\n const dotProduct = this._xVelocity * cos + this._yVelocity * sin;\n if (dotProduct < 0) {\n // The object is turning back.\n // Keep the negative velocity projected on the new direction.\n currentSpeed = dotProduct;\n }\n const speed = TopDownMovementRuntimeBehavior.getAcceleratedSpeed(\n currentSpeed,\n targetedSpeed,\n this._maxSpeed,\n this._acceleration,\n this._deceleration,\n timeDelta,\n this._useLegacyTurnBack\n );\n this._xVelocity = speed * cos;\n this._yVelocity = speed * sin;\n }\n\n const squaredSpeed =\n this._xVelocity * this._xVelocity + this._yVelocity * this._yVelocity;\n if (squaredSpeed > this._maxSpeed * this._maxSpeed) {\n const ratio = this._maxSpeed / Math.sqrt(squaredSpeed);\n this._xVelocity *= ratio;\n this._yVelocity *= ratio;\n }\n\n // No acceleration for angular speed for now.\n this._angularSpeed = this._angularMaxSpeed;\n\n for (const topDownMovementHook of this._topDownMovementHooks) {\n topDownMovementHook.beforePositionUpdate(hookContext);\n }\n\n // Position object.\n // This is a Verlet integration considering the acceleration as constant.\n // If you expand deltaX or deltaY, it gives, thanks to the usage of both\n // the old and the new velocity:\n // \"velocity * timeDelta + acceleration * timeDelta^2 / 2\".\n //\n // The acceleration is not actually always constant, particularly with a gamepad,\n // but the error is multiplied by timDelta^3. So, it shouldn't matter much.\n const deltaX = ((previousVelocityX + this._xVelocity) / 2) * timeDelta;\n const deltaY = ((previousVelocityY + this._yVelocity) / 2) * timeDelta;\n if (this._basisTransformation === null) {\n // Top-down viewpoint\n object.setX(object.getX() + deltaX);\n object.setY(object.getY() + deltaY);\n } else {\n // Isometry viewpoint\n const point = this._temporaryPointForTransformations;\n point[0] = deltaX;\n point[1] = deltaY;\n this._basisTransformation.toScreen(point, point);\n object.setX(object.getX() + point[0]);\n object.setY(object.getY() + point[1]);\n }\n\n // Also update angle if needed.\n if (this._xVelocity !== 0 || this._yVelocity !== 0) {\n this._angle = directionInDeg;\n if (this._rotateObject) {\n object.rotateTowardAngle(\n directionInDeg + this._angleOffset,\n this._angularSpeed\n );\n }\n }\n\n this._wasLeftKeyPressed = this._leftKey;\n this._wasRightKeyPressed = this._rightKey;\n this._wasUpKeyPressed = this._upKey;\n this._wasDownKeyPressed = this._downKey;\n if (!this._dontClearInputsBetweenFrames) {\n this._leftKey = false;\n this._rightKey = false;\n this._upKey = false;\n this._downKey = false;\n this._stickForce = 0;\n }\n }\n\n private static getAcceleratedSpeed(\n currentSpeed: float,\n targetedSpeed: float,\n speedMax: float,\n acceleration: float,\n deceleration: float,\n timeDelta: float,\n useLegacyTurnBack: boolean = false\n ): float {\n let newSpeed = currentSpeed;\n const turningBackAcceleration = useLegacyTurnBack\n ? acceleration\n : Math.max(acceleration, deceleration);\n if (targetedSpeed < 0) {\n if (currentSpeed <= targetedSpeed) {\n // Reduce the speed to match the stick force.\n newSpeed = Math.min(\n targetedSpeed,\n currentSpeed + turningBackAcceleration * timeDelta\n );\n } else if (currentSpeed <= 0) {\n // Accelerate\n newSpeed -= Math.max(-speedMax, acceleration * timeDelta);\n } else {\n // Turn back at least as fast as it would stop.\n newSpeed = Math.max(\n targetedSpeed,\n currentSpeed - turningBackAcceleration * timeDelta\n );\n }\n } else if (targetedSpeed > 0) {\n if (currentSpeed >= targetedSpeed) {\n // Reduce the speed to match the stick force.\n newSpeed = Math.max(\n targetedSpeed,\n currentSpeed - turningBackAcceleration * timeDelta\n );\n } else if (currentSpeed >= 0) {\n // Accelerate\n newSpeed = Math.min(\n speedMax,\n currentSpeed + acceleration * timeDelta\n );\n } else {\n // Turn back at least as fast as it would stop.\n newSpeed = Math.min(\n targetedSpeed,\n currentSpeed + turningBackAcceleration * timeDelta\n );\n }\n } else {\n // Decelerate and stop.\n if (currentSpeed < 0) {\n newSpeed = Math.min(currentSpeed + deceleration * timeDelta, 0);\n }\n if (currentSpeed > 0) {\n newSpeed = Math.max(currentSpeed - deceleration * timeDelta, 0);\n }\n }\n return newSpeed;\n }\n\n simulateControl(input: string) {\n if (input === 'Left') {\n this._leftKey = true;\n } else if (input === 'Right') {\n this._rightKey = true;\n } else if (input === 'Up') {\n this._upKey = true;\n } else if (input === 'Down') {\n this._downKey = true;\n }\n }\n\n ignoreDefaultControls(ignore: boolean) {\n this._ignoreDefaultControls = ignore;\n }\n\n shouldIgnoreDefaultControls() {\n return (\n this._ignoreDefaultControls ||\n this._ignoreDefaultControlsAsSyncedByNetwork\n );\n }\n\n simulateLeftKey() {\n this._leftKey = true;\n }\n\n simulateRightKey() {\n this._rightKey = true;\n }\n\n simulateUpKey() {\n this._upKey = true;\n }\n\n simulateDownKey() {\n this._downKey = true;\n }\n\n simulateStick(stickAngle: float, stickForce: float) {\n this._stickAngle = stickAngle % 360;\n this._stickForce = Math.max(0, Math.min(1, stickForce));\n }\n\n /**.\n * @param input The control to be tested [Left,Right,Up,Down,Stick].\n * @returns true if the key was used since the last `doStepPreEvents` call.\n */\n isUsingControl(input: string): boolean {\n if (input === 'Left') {\n return this._leftKeyPressedDuration > 0;\n }\n if (input === 'Right') {\n return this._rightKeyPressedDuration > 0;\n }\n if (input === 'Up') {\n return this._upKeyPressedDuration > 0;\n }\n if (input === 'Down') {\n return this._downKeyPressedDuration > 0;\n }\n if (input === 'Stick') {\n return this._wasStickUsed;\n }\n return false;\n }\n\n getLastStickInputAngle() {\n return this._stickAngle;\n }\n\n /**\n * A hook must typically be registered by a behavior that requires this one\n * in its onCreate function.\n * The hook must stay forever to avoid side effects like a hooks order\n * change. To handle deactivated behavior, the hook can check that its\n * behavior is activated before doing anything.\n */\n registerHook(\n hook: gdjs.TopDownMovementRuntimeBehavior.TopDownMovementHook\n ) {\n this._topDownMovementHooks.push(hook);\n }\n }\n\n export namespace TopDownMovementRuntimeBehavior {\n export class TopDownMovementHookContext {\n private direction: integer = -1;\n\n /**\n * @returns The movement direction from 0 for left to 7 for up-left and\n * -1 for no direction.\n */\n getDirection(): integer {\n return this.direction;\n }\n\n /**\n * This method won't change the direction used by the top-down movement\n * behavior.\n */\n _setDirection(direction: integer): void {\n this.direction = direction;\n }\n }\n\n // This should be a static attribute but it's not possible because of\n // declaration order.\n export const _topDownMovementHookContext =\n new gdjs.TopDownMovementRuntimeBehavior.TopDownMovementHookContext();\n\n /**\n * Allow extensions relying on the top-down movement to customize its\n * behavior a bit.\n */\n export interface TopDownMovementHook {\n /**\n * Return the direction to use instead of the direction given in\n * parameter.\n */\n overrideDirection(hookContext: TopDownMovementHookContext): integer;\n /**\n * Called before the acceleration and new direction is applied to the\n * velocity.\n */\n beforeSpeedUpdate(hookContext: TopDownMovementHookContext): void;\n /**\n * Called before the velocity is applied to the object position and\n * angle.\n */\n beforePositionUpdate(hookContext: TopDownMovementHookContext): void;\n }\n\n export interface BasisTransformation {\n toScreen(worldPoint: FloatPoint, screenPoint: FloatPoint): void;\n }\n\n export class IsometryTransformation\n implements gdjs.TopDownMovementRuntimeBehavior.BasisTransformation\n {\n private _screen: float[][];\n\n /**\n * @param angle between the x axis and the projected isometric x axis.\n * @throws if the angle is not in ]0; pi/4[. Note that 0 is a front viewpoint and pi/4 a top-down viewpoint.\n */\n constructor(angle: float) {\n if (angle <= 0 || angle >= Math.PI / 4)\n throw new RangeError(\n 'An isometry angle must be in ]0; pi/4] but was: ' + angle\n );\n\n const alpha = Math.asin(Math.tan(angle));\n const sinA = Math.sin(alpha);\n const cosB = Math.cos(Math.PI / 4);\n const sinB = cosB;\n // https://en.wikipedia.org/wiki/Isometric_projection\n //\n // / 1 0 0 \\ / cosB 0 -sinB \\ / 1 0 0 \\\n // | 0 cosA sinA | | 0 1 0 | | 0 0 -1 |\n // \\ 0 -sinA cosA / \\ sinB 0 cosB / \\ 0 1 0 /\n this._screen = [\n [cosB, -sinB],\n [sinA * sinB, sinA * cosB],\n ];\n }\n\n toScreen(worldPoint: FloatPoint, screenPoint: FloatPoint): void {\n const x =\n this._screen[0][0] * worldPoint[0] +\n this._screen[0][1] * worldPoint[1];\n const y =\n this._screen[1][0] * worldPoint[0] +\n this._screen[1][1] * worldPoint[1];\n screenPoint[0] = x;\n screenPoint[1] = y;\n }\n }\n }\n\n gdjs.registerBehavior(\n 'TopDownMovementBehavior::TopDownMovementBehavior',\n gdjs.TopDownMovementRuntimeBehavior\n );\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gdcore-tools",
3
- "version": "2.0.0-gd-v5.5.237-autobuild",
3
+ "version": "2.0.0-gd-v5.5.238-autobuild",
4
4
  "description": "A package of GDevelop's Core library with additional helper tools.",
5
5
  "types": "./types/index.d.ts",
6
6
  "exports": {