gdcore-tools 2.0.0-gd-v5.5.228-autobuild → 2.0.0-gd-v5.5.230-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 (31) 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/AnchorBehavior/anchorruntimebehavior.js +1 -1
  6. package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js.map +2 -2
  7. package/dist/Runtime/Extensions/BBText/JsExtension.js +102 -40
  8. package/dist/Runtime/Extensions/BBText/bbtextruntimeobject-pixi-renderer.js +1 -1
  9. package/dist/Runtime/Extensions/BBText/bbtextruntimeobject-pixi-renderer.js.map +2 -2
  10. package/dist/Runtime/Extensions/BBText/bbtextruntimeobject.js +1 -1
  11. package/dist/Runtime/Extensions/BBText/bbtextruntimeobject.js.map +2 -2
  12. package/dist/Runtime/Extensions/BitmapText/JsExtension.js +81 -40
  13. package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject-pixi-renderer.js +1 -1
  14. package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject-pixi-renderer.js.map +2 -2
  15. package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js +1 -1
  16. package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js.map +2 -2
  17. package/dist/Runtime/Extensions/JsExtensionTypes.d.ts +3 -1
  18. package/dist/Runtime/Extensions/Physics3DBehavior/JsExtension.js +17 -17
  19. package/dist/Runtime/Extensions/Physics3DBehavior/Physics3DRuntimeBehavior.js +1 -1
  20. package/dist/Runtime/Extensions/Physics3DBehavior/Physics3DRuntimeBehavior.js.map +2 -2
  21. package/dist/Runtime/Extensions/Physics3DBehavior/PhysicsCharacter3DRuntimeBehavior.js +1 -1
  22. package/dist/Runtime/Extensions/Physics3DBehavior/PhysicsCharacter3DRuntimeBehavior.js.map +2 -2
  23. package/dist/Runtime/Extensions/Spine/CMakeLists.txt +12 -9
  24. package/dist/Runtime/Extensions/TextObject/textruntimeobject-pixi-renderer.js +1 -1
  25. package/dist/Runtime/Extensions/TextObject/textruntimeobject-pixi-renderer.js.map +2 -2
  26. package/dist/Runtime/Extensions/TileMap/JsExtension.js +4 -2
  27. package/dist/Runtime/types/project-data.d.ts +14 -1
  28. package/dist/lib/libGD.cjs +1 -1
  29. package/dist/lib/libGD.wasm +0 -0
  30. package/gd.d.ts +49 -0
  31. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- var gdjs;(function(s){const o=new s.Logger("CustomRuntimeObject");class h extends s.RuntimeObject{constructor(t,e){super(t,e);this._isUntransformedHitBoxesDirty=!0;this._untransformedHitBoxes=[];this._unrotatedAABB={min:[0,0],max:[0,0]};this._innerArea=null;this._isInnerAreaFollowingParentSize=!1;this._scaleX=1;this._scaleY=1;this._flippedX=!1;this._flippedY=!1;this.opacity=255;this._customCenter=null;this._localTransformation=new s.AffineTransformation;this._localInverseTransformation=new s.AffineTransformation;this._isLocalTransformationDirty=!0;this._type=e.type,this._instanceContainer=new s.CustomRuntimeObjectInstanceContainer(t,this),this._renderer=this._createRender(),this._initializeFromObjectData(e)}_initializeFromObjectData(t){const e=this._runtimeScene.getGame().getEventsBasedObjectData(t.type);if(!e){o.error(`A CustomRuntimeObject was initialized (or re-initialized) from object data referring to an non existing events based object data with type "${t.type}".`);return}this._isInnerAreaFollowingParentSize=e.isInnerAreaFollowingParentSize,e.instances.length>0&&(this._innerArea||(this._innerArea={min:[0,0,0],max:[0,0,0]}),this._innerArea.min[0]=e.areaMinX,this._innerArea.min[1]=e.areaMinY,this._innerArea.min[2]=e.areaMinZ,this._innerArea.max[0]=e.areaMaxX,this._innerArea.max[1]=e.areaMaxY,this._innerArea.max[2]=e.areaMaxZ),this._instanceContainer.loadFrom(t,e)}reinitialize(t){super.reinitialize(t),this._initializeFromObjectData(t),this._reinitializeRenderer(),this.onCreated()}updateFromObjectData(t,e){const i=this.getAnimator();return i&&i.updateFromObjectData(t.animatable||[],e.animatable||[]),!0}extraInitializationFromInitialInstance(t){const e=this.getAnimator();if(t.numberProperties)for(let i=0,n=t.numberProperties.length;i<n;++i){const r=t.numberProperties[i];e&&r.name==="animation"&&e.setAnimationIndex(r.value)}t.customSize&&(this.setWidth(t.width),this.setHeight(t.height)),t.opacity!==void 0&&this.setOpacity(t.opacity),t.flippedX&&this.flipX(t.flippedX),t.flippedY&&this.flipY(t.flippedY)}onDeletedFromScene(t){this.onDestroy(t),super.onDeletedFromScene(t),this._instanceContainer.onDestroyFromScene(t)}update(t){this._instanceContainer._updateObjectsPreEvents(),this.doStepPreEvents(this._instanceContainer);const e=this.getRuntimeScene().getProfiler();e&&e.begin(this.type),this.doStepPostEvents(this._instanceContainer),e&&e.end(this.type),this._instanceContainer._updateObjectsPostEvents()}onHotReloading(t){}doStepPreEvents(t){}doStepPostEvents(t){}onDestroy(t){}updatePreRender(t){this._instanceContainer._updateObjectsPreRender(),this.getRenderer().ensureUpToDate()}getRenderer(){return this._renderer}getChildrenContainer(){return this._instanceContainer}onChildrenLocationChanged(){this._isUntransformedHitBoxesDirty=!0,this.invalidateHitboxes(),this.getRenderer().update()}updateHitBoxes(){this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes();const t=this.getLocalTransformation();for(let e=0;e<this._untransformedHitBoxes.length;++e){e>=this.hitBoxes.length&&this.hitBoxes.push(new s.Polygon);for(let i=0;i<this._untransformedHitBoxes[e].vertices.length;++i)i>=this.hitBoxes[e].vertices.length&&this.hitBoxes[e].vertices.push([0,0]),t.transform(this._untransformedHitBoxes[e].vertices[i],this.hitBoxes[e].vertices[i]);this.hitBoxes[e].vertices.length=this._untransformedHitBoxes[e].vertices.length}}_updateUntransformedHitBoxes(){this._isUntransformedHitBoxesDirty=!1,this._untransformedHitBoxes.length=0;let t=Number.MAX_VALUE,e=Number.MAX_VALUE,i=-Number.MAX_VALUE,n=-Number.MAX_VALUE;for(const r of this._instanceContainer.getAdhocListOfAllInstances()){if(!r.isIncludedInParentCollisionMask())continue;Array.prototype.push.apply(this._untransformedHitBoxes,r.getHitBoxes());const a=r.getAABB();t=Math.min(t,a.min[0]),e=Math.min(e,a.min[1]),i=Math.max(i,a.max[0]),n=Math.max(n,a.max[1])}for(t===Number.MAX_VALUE&&(t=0,e=0,i=1,n=1),this._unrotatedAABB.min[0]=t,this._unrotatedAABB.min[1]=e,this._unrotatedAABB.max[0]=i,this._unrotatedAABB.max[1]=n;this.hitBoxes.length<this._untransformedHitBoxes.length;)this.hitBoxes.push(new s.Polygon);this.hitBoxes.length=this._untransformedHitBoxes.length}applyObjectTransformation(t,e,i){const n=i;n[0]=t,n[1]=e,this.getLocalTransformation().transform(n,i)}getLocalTransformation(){return this._isLocalTransformationDirty&&this._updateLocalTransformation(),this._localTransformation}getLocalInverseTransformation(){return this._isLocalTransformationDirty&&this._updateLocalTransformation(),this._localInverseTransformation}_updateLocalTransformation(){const t=Math.abs(this._scaleX),e=Math.abs(this._scaleY),i=this.getUnscaledCenterX()*t,n=this.getUnscaledCenterY()*e,r=this.angle*Math.PI/180;this._localTransformation.setToTranslation(this.x,this.y),this._localTransformation.rotateAround(r,i,n),this._flippedX&&this._localTransformation.flipX(i),this._flippedY&&this._localTransformation.flipY(n),this._localTransformation.scale(t,e),this._localInverseTransformation.copyFrom(this._localTransformation),this._localInverseTransformation.invert(),this._isLocalTransformationDirty=!1}applyObjectInverseTransformation(t,e,i){const n=i;n[0]=t,n[1]=e,this.getLocalInverseTransformation().transform(n,i)}getDrawableX(){let t=0;this._innerArea?t=this._innerArea.min[0]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),t=this._unrotatedAABB.min[0]);const e=this.getScaleX();return this._flippedX?this.x+(-t-this.getUnscaledWidth()+2*this.getUnscaledCenterX())*e:this.x+t*e}getDrawableY(){let t=0;this._innerArea?t=this._innerArea.min[1]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),t=this._unrotatedAABB.min[1]);const e=this.getScaleY();return this._flippedY?this.y+(-t-this.getUnscaledHeight()+2*this.getUnscaledCenterY())*e:this.y+t*e}getInnerAreaMinX(){return this._innerArea?this._innerArea.min[0]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),this._unrotatedAABB.min[0])}getInnerAreaMinY(){return this._innerArea?this._innerArea.min[1]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),this._unrotatedAABB.min[1])}getInnerAreaMaxX(){return this._innerArea?this._innerArea.max[0]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),this._unrotatedAABB.max[0])}getInnerAreaMaxY(){return this._innerArea?this._innerArea.max[1]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),this._unrotatedAABB.max[1])}getUnscaledWidth(){return this._innerArea?this._innerArea.max[0]-this._innerArea.min[0]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),this._unrotatedAABB.max[0]-this._unrotatedAABB.min[0])}getUnscaledHeight(){return this._innerArea?this._innerArea.max[1]-this._innerArea.min[1]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),this._unrotatedAABB.max[1]-this._unrotatedAABB.min[1])}getUnscaledCenterX(){return this._customCenter?this._customCenter[0]:this._innerArea?(this._innerArea.min[0]+this._innerArea.max[0])/2:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),(this._unrotatedAABB.min[0]+this._unrotatedAABB.max[0])/2)}getUnscaledCenterY(){return this._customCenter?this._customCenter[1]:this._innerArea?(this._innerArea.min[1]+this._innerArea.max[1])/2:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),(this._unrotatedAABB.min[1]+this._unrotatedAABB.max[1])/2)}setRotationCenter(t,e){this._customCenter||(this._customCenter=[0,0]),this._customCenter[0]=t,this._customCenter[1]=e,this._isLocalTransformationDirty=!0,this.invalidateHitboxes()}hasCustomRotationCenter(){return!!this._customCenter}getCenterX(){return(this.getUnscaledCenterX()-this._unrotatedAABB.min[0])*this.getScaleX()}getCenterY(){return(this.getUnscaledCenterY()-this._unrotatedAABB.min[1])*this.getScaleY()}getWidth(){return this.getUnscaledWidth()*this.getScaleX()}getHeight(){return this.getUnscaledHeight()*this.getScaleY()}setWidth(t){const e=this.getUnscaledWidth();if(e===0)return;const i=t/e;this._innerArea&&this._isInnerAreaFollowingParentSize?(this._innerArea.min[0]*=i,this._innerArea.max[0]*=i):this.setScaleX(i)}setHeight(t){const e=this.getUnscaledHeight();if(e===0)return;const i=t/e;this._innerArea&&this._isInnerAreaFollowingParentSize?(this._innerArea.min[1]*=i,this._innerArea.max[1]*=i):this.setScaleY(i)}setSize(t,e){this.setWidth(t),this.setHeight(e)}setX(t){t!==this.x&&(this.x=t,this._isLocalTransformationDirty=!0,this.invalidateHitboxes(),this.getRenderer().updateX())}setY(t){t!==this.y&&(this.y=t,this._isLocalTransformationDirty=!0,this.invalidateHitboxes(),this.getRenderer().updateY())}setAngle(t){this.angle!==t&&(this.angle=t,this._isLocalTransformationDirty=!0,this.invalidateHitboxes(),this.getRenderer().updateAngle())}setScale(t){this._innerArea&&this._isInnerAreaFollowingParentSize||(t<0&&(t=0),!(t===Math.abs(this._scaleX)&&t===Math.abs(this._scaleY))&&(this._scaleX=t*(this._flippedX?-1:1),this._scaleY=t*(this._flippedY?-1:1),this._isLocalTransformationDirty=!0,this.invalidateHitboxes(),this.getRenderer().update()))}setScaleX(t){this._innerArea&&this._isInnerAreaFollowingParentSize||(t<0&&(t=0),t!==Math.abs(this._scaleX)&&(this._scaleX=t*(this._flippedX?-1:1),this._isLocalTransformationDirty=!0,this.invalidateHitboxes(),this.getRenderer().update()))}setScaleY(t){this._innerArea&&this._isInnerAreaFollowingParentSize||(t<0&&(t=0),t!==Math.abs(this._scaleY)&&(this._scaleY=t*(this._flippedY?-1:1),this.invalidateHitboxes(),this.getRenderer().update()))}getScaleMean(){return(Math.abs(this._scaleX)+Math.abs(this._scaleY))/2}getScale(){const t=Math.abs(this._scaleX),e=Math.abs(this._scaleY);return t===e?t:Math.sqrt(t*e)}getScaleY(){return Math.abs(this._scaleY)}getScaleX(){return Math.abs(this._scaleX)}setOpacity(t){t<0&&(t=0),t>255&&(t=255),this.opacity=t,this.getRenderer().updateOpacity()}getOpacity(){return this.opacity}hide(t){t===void 0&&(t=!0),this.hidden=t,this.getRenderer().updateVisibility()}flipX(t){t!==this._flippedX&&(this._scaleX*=-1,this._flippedX=t,this.invalidateHitboxes(),this.getRenderer().update())}flipY(t){t!==this._flippedY&&(this._scaleY*=-1,this._flippedY=t,this.invalidateHitboxes(),this.getRenderer().update())}isFlippedX(){return this._flippedX}isFlippedY(){return this._flippedY}getAnimator(){return null}}s.CustomRuntimeObject=h,h.supportsReinitialization=!1})(gdjs||(gdjs={}));
1
+ var gdjs;(function(s){const o=new s.Logger("CustomRuntimeObject");class h extends s.RuntimeObject{constructor(t,e){super(t,e);this._isUntransformedHitBoxesDirty=!0;this._untransformedHitBoxes=[];this._unrotatedAABB={min:[0,0],max:[0,0]};this._innerArea=null;this._isInnerAreaFollowingParentSize=!1;this._scaleX=1;this._scaleY=1;this._flippedX=!1;this._flippedY=!1;this.opacity=255;this._customCenter=null;this._localTransformation=new s.AffineTransformation;this._localInverseTransformation=new s.AffineTransformation;this._isLocalTransformationDirty=!0;this._type=e.type,this._instanceContainer=new s.CustomRuntimeObjectInstanceContainer(t,this),this._renderer=this._createRender(),this._initializeFromObjectData(e)}_initializeFromObjectData(t){const e=this._runtimeScene.getGame().getEventsBasedObjectData(t.type);if(!e){o.error(`A CustomRuntimeObject was initialized (or re-initialized) from object data referring to an non existing events based object data with type "${t.type}".`);return}e.defaultVariant||(e.defaultVariant={...e,name:""});let i=e.defaultVariant;if(t.variant)for(let n=0;n<e.variants.length;n++){const r=e.variants[n];if(r.name===t.variant){i=r;break}}this._isInnerAreaFollowingParentSize=e.isInnerAreaFollowingParentSize,i.instances.length>0&&(this._innerArea||(this._innerArea={min:[0,0,0],max:[0,0,0]}),this._innerArea.min[0]=i.areaMinX,this._innerArea.min[1]=i.areaMinY,this._innerArea.min[2]=i.areaMinZ,this._innerArea.max[0]=i.areaMaxX,this._innerArea.max[1]=i.areaMaxY,this._innerArea.max[2]=i.areaMaxZ),this._instanceContainer.loadFrom(t,i)}reinitialize(t){super.reinitialize(t),this._initializeFromObjectData(t),this._reinitializeRenderer(),this.onCreated()}updateFromObjectData(t,e){const i=this.getAnimator();return i&&i.updateFromObjectData(t.animatable||[],e.animatable||[]),!0}extraInitializationFromInitialInstance(t){const e=this.getAnimator();if(t.numberProperties)for(let i=0,n=t.numberProperties.length;i<n;++i){const r=t.numberProperties[i];e&&r.name==="animation"&&e.setAnimationIndex(r.value)}t.customSize&&(this.setWidth(t.width),this.setHeight(t.height)),t.opacity!==void 0&&this.setOpacity(t.opacity),t.flippedX&&this.flipX(t.flippedX),t.flippedY&&this.flipY(t.flippedY)}onDeletedFromScene(t){this.onDestroy(t),super.onDeletedFromScene(t),this._instanceContainer.onDestroyFromScene(t)}update(t){this._instanceContainer._updateObjectsPreEvents(),this.doStepPreEvents(this._instanceContainer);const e=this.getRuntimeScene().getProfiler();e&&e.begin(this.type),this.doStepPostEvents(this._instanceContainer),e&&e.end(this.type),this._instanceContainer._updateObjectsPostEvents()}onHotReloading(t){}doStepPreEvents(t){}doStepPostEvents(t){}onDestroy(t){}updatePreRender(t){this._instanceContainer._updateObjectsPreRender(),this.getRenderer().ensureUpToDate()}getRenderer(){return this._renderer}getChildrenContainer(){return this._instanceContainer}onChildrenLocationChanged(){this._isUntransformedHitBoxesDirty=!0,this.invalidateHitboxes(),this.getRenderer().update()}updateHitBoxes(){this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes();const t=this.getLocalTransformation();for(let e=0;e<this._untransformedHitBoxes.length;++e){e>=this.hitBoxes.length&&this.hitBoxes.push(new s.Polygon);for(let i=0;i<this._untransformedHitBoxes[e].vertices.length;++i)i>=this.hitBoxes[e].vertices.length&&this.hitBoxes[e].vertices.push([0,0]),t.transform(this._untransformedHitBoxes[e].vertices[i],this.hitBoxes[e].vertices[i]);this.hitBoxes[e].vertices.length=this._untransformedHitBoxes[e].vertices.length}}_updateUntransformedHitBoxes(){this._isUntransformedHitBoxesDirty=!1,this._untransformedHitBoxes.length=0;let t=Number.MAX_VALUE,e=Number.MAX_VALUE,i=-Number.MAX_VALUE,n=-Number.MAX_VALUE;for(const r of this._instanceContainer.getAdhocListOfAllInstances()){if(!r.isIncludedInParentCollisionMask())continue;Array.prototype.push.apply(this._untransformedHitBoxes,r.getHitBoxes());const a=r.getAABB();t=Math.min(t,a.min[0]),e=Math.min(e,a.min[1]),i=Math.max(i,a.max[0]),n=Math.max(n,a.max[1])}for(t===Number.MAX_VALUE&&(t=0,e=0,i=1,n=1),this._unrotatedAABB.min[0]=t,this._unrotatedAABB.min[1]=e,this._unrotatedAABB.max[0]=i,this._unrotatedAABB.max[1]=n;this.hitBoxes.length<this._untransformedHitBoxes.length;)this.hitBoxes.push(new s.Polygon);this.hitBoxes.length=this._untransformedHitBoxes.length}applyObjectTransformation(t,e,i){const n=i;n[0]=t,n[1]=e,this.getLocalTransformation().transform(n,i)}getLocalTransformation(){return this._isLocalTransformationDirty&&this._updateLocalTransformation(),this._localTransformation}getLocalInverseTransformation(){return this._isLocalTransformationDirty&&this._updateLocalTransformation(),this._localInverseTransformation}_updateLocalTransformation(){const t=Math.abs(this._scaleX),e=Math.abs(this._scaleY),i=this.getUnscaledCenterX()*t,n=this.getUnscaledCenterY()*e,r=this.angle*Math.PI/180;this._localTransformation.setToTranslation(this.x,this.y),this._localTransformation.rotateAround(r,i,n),this._flippedX&&this._localTransformation.flipX(i),this._flippedY&&this._localTransformation.flipY(n),this._localTransformation.scale(t,e),this._localInverseTransformation.copyFrom(this._localTransformation),this._localInverseTransformation.invert(),this._isLocalTransformationDirty=!1}applyObjectInverseTransformation(t,e,i){const n=i;n[0]=t,n[1]=e,this.getLocalInverseTransformation().transform(n,i)}getDrawableX(){let t=0;this._innerArea?t=this._innerArea.min[0]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),t=this._unrotatedAABB.min[0]);const e=this.getScaleX();return this._flippedX?this.x+(-t-this.getUnscaledWidth()+2*this.getUnscaledCenterX())*e:this.x+t*e}getDrawableY(){let t=0;this._innerArea?t=this._innerArea.min[1]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),t=this._unrotatedAABB.min[1]);const e=this.getScaleY();return this._flippedY?this.y+(-t-this.getUnscaledHeight()+2*this.getUnscaledCenterY())*e:this.y+t*e}getInnerAreaMinX(){return this._innerArea?this._innerArea.min[0]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),this._unrotatedAABB.min[0])}getInnerAreaMinY(){return this._innerArea?this._innerArea.min[1]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),this._unrotatedAABB.min[1])}getInnerAreaMaxX(){return this._innerArea?this._innerArea.max[0]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),this._unrotatedAABB.max[0])}getInnerAreaMaxY(){return this._innerArea?this._innerArea.max[1]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),this._unrotatedAABB.max[1])}getUnscaledWidth(){return this._innerArea?this._innerArea.max[0]-this._innerArea.min[0]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),this._unrotatedAABB.max[0]-this._unrotatedAABB.min[0])}getUnscaledHeight(){return this._innerArea?this._innerArea.max[1]-this._innerArea.min[1]:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),this._unrotatedAABB.max[1]-this._unrotatedAABB.min[1])}getUnscaledCenterX(){return this._customCenter?this._customCenter[0]:this._innerArea?(this._innerArea.min[0]+this._innerArea.max[0])/2:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),(this._unrotatedAABB.min[0]+this._unrotatedAABB.max[0])/2)}getUnscaledCenterY(){return this._customCenter?this._customCenter[1]:this._innerArea?(this._innerArea.min[1]+this._innerArea.max[1])/2:(this._isUntransformedHitBoxesDirty&&this._updateUntransformedHitBoxes(),(this._unrotatedAABB.min[1]+this._unrotatedAABB.max[1])/2)}setRotationCenter(t,e){this._customCenter||(this._customCenter=[0,0]),this._customCenter[0]=t,this._customCenter[1]=e,this._isLocalTransformationDirty=!0,this.invalidateHitboxes()}hasCustomRotationCenter(){return!!this._customCenter}getCenterX(){return(this.getUnscaledCenterX()-this._unrotatedAABB.min[0])*this.getScaleX()}getCenterY(){return(this.getUnscaledCenterY()-this._unrotatedAABB.min[1])*this.getScaleY()}getWidth(){return this.getUnscaledWidth()*this.getScaleX()}getHeight(){return this.getUnscaledHeight()*this.getScaleY()}setWidth(t){const e=this.getUnscaledWidth();if(e===0)return;const i=t/e;this._innerArea&&this._isInnerAreaFollowingParentSize?(this._innerArea.min[0]*=i,this._innerArea.max[0]*=i):this.setScaleX(i)}setHeight(t){const e=this.getUnscaledHeight();if(e===0)return;const i=t/e;this._innerArea&&this._isInnerAreaFollowingParentSize?(this._innerArea.min[1]*=i,this._innerArea.max[1]*=i):this.setScaleY(i)}setSize(t,e){this.setWidth(t),this.setHeight(e)}setX(t){t!==this.x&&(this.x=t,this._isLocalTransformationDirty=!0,this.invalidateHitboxes(),this.getRenderer().updateX())}setY(t){t!==this.y&&(this.y=t,this._isLocalTransformationDirty=!0,this.invalidateHitboxes(),this.getRenderer().updateY())}setAngle(t){this.angle!==t&&(this.angle=t,this._isLocalTransformationDirty=!0,this.invalidateHitboxes(),this.getRenderer().updateAngle())}setScale(t){this._innerArea&&this._isInnerAreaFollowingParentSize||(t<0&&(t=0),!(t===Math.abs(this._scaleX)&&t===Math.abs(this._scaleY))&&(this._scaleX=t*(this._flippedX?-1:1),this._scaleY=t*(this._flippedY?-1:1),this._isLocalTransformationDirty=!0,this.invalidateHitboxes(),this.getRenderer().update()))}setScaleX(t){this._innerArea&&this._isInnerAreaFollowingParentSize||(t<0&&(t=0),t!==Math.abs(this._scaleX)&&(this._scaleX=t*(this._flippedX?-1:1),this._isLocalTransformationDirty=!0,this.invalidateHitboxes(),this.getRenderer().update()))}setScaleY(t){this._innerArea&&this._isInnerAreaFollowingParentSize||(t<0&&(t=0),t!==Math.abs(this._scaleY)&&(this._scaleY=t*(this._flippedY?-1:1),this.invalidateHitboxes(),this.getRenderer().update()))}getScaleMean(){return(Math.abs(this._scaleX)+Math.abs(this._scaleY))/2}getScale(){const t=Math.abs(this._scaleX),e=Math.abs(this._scaleY);return t===e?t:Math.sqrt(t*e)}getScaleY(){return Math.abs(this._scaleY)}getScaleX(){return Math.abs(this._scaleX)}setOpacity(t){t<0&&(t=0),t>255&&(t=255),this.opacity=t,this.getRenderer().updateOpacity()}getOpacity(){return this.opacity}hide(t){t===void 0&&(t=!0),this.hidden=t,this.getRenderer().updateVisibility()}flipX(t){t!==this._flippedX&&(this._scaleX*=-1,this._flippedX=t,this.invalidateHitboxes(),this.getRenderer().update())}flipY(t){t!==this._flippedY&&(this._scaleY*=-1,this._flippedY=t,this.invalidateHitboxes(),this.getRenderer().update())}isFlippedX(){return this._flippedX}isFlippedY(){return this._flippedY}getAnimator(){return null}}s.CustomRuntimeObject=h,h.supportsReinitialization=!1})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=CustomRuntimeObject.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../GDevelop/GDJS/Runtime/CustomRuntimeObject.ts"],
4
- "sourcesContent": ["/*\n * GDevelop JS Platform\n * Copyright 2013-2022 Florian Rival (Florian.Rival@gmail.com). All rights reserved.\n * This project is released under the MIT License.\n */\nnamespace gdjs {\n const logger = new gdjs.Logger('CustomRuntimeObject');\n\n export type ObjectConfiguration = {\n content: any;\n };\n\n export type CustomObjectConfiguration = ObjectConfiguration & {\n animatable?: SpriteAnimationData[];\n childrenContent: { [objectName: string]: ObjectConfiguration & any };\n };\n\n /**\n * An object that contains other object.\n *\n * This is the base class for objects generated from EventsBasedObject.\n *\n * @see gdjs.CustomRuntimeObjectInstanceContainer\n */\n export abstract class CustomRuntimeObject\n extends gdjs.RuntimeObject\n implements\n gdjs.Resizable,\n gdjs.Scalable,\n gdjs.Flippable,\n gdjs.OpacityHandler\n {\n _renderer:\n | gdjs.CustomRuntimeObject2DRenderer\n | gdjs.CustomRuntimeObject3DRenderer;\n /** It contains the children of this object. */\n _instanceContainer: gdjs.CustomRuntimeObjectInstanceContainer;\n _isUntransformedHitBoxesDirty: boolean = true;\n /** It contains shallow copies of the children hitboxes */\n private _untransformedHitBoxes: gdjs.Polygon[] = [];\n /** The dimension of this object is calculated from its children AABBs. */\n private _unrotatedAABB: AABB = { min: [0, 0], max: [0, 0] };\n /**\n * The bounds of the object content before any transformation.\n * @see gdjs.CustomRuntimeObjectInstanceContainer._initialInnerArea\n **/\n protected _innerArea: {\n min: [float, float, float];\n max: [float, float, float];\n } | null = null;\n /**\n * When the parent dimensions change:\n * - if `false`, the object is stretch proportionally while children local\n * positions stay the same ({@link gdjs.CustomRuntimeObject._innerArea} don't change).\n * - if `true`, the children local positions need to be adapted by events\n * to follow their parent size.\n */\n protected _isInnerAreaFollowingParentSize = false;\n private _scaleX: float = 1;\n private _scaleY: float = 1;\n private _flippedX: boolean = false;\n private _flippedY: boolean = false;\n private opacity: float = 255;\n private _customCenter: FloatPoint | null = null;\n private _localTransformation: gdjs.AffineTransformation =\n new gdjs.AffineTransformation();\n private _localInverseTransformation: gdjs.AffineTransformation =\n new gdjs.AffineTransformation();\n private _isLocalTransformationDirty: boolean = true;\n _type: string;\n\n /**\n * @param parent The container the object belongs to\n * @param objectData The object data used to initialize the object\n */\n constructor(\n parent: gdjs.RuntimeInstanceContainer,\n objectData: ObjectData & CustomObjectConfiguration\n ) {\n super(parent, objectData);\n this._type = objectData.type;\n this._instanceContainer = new gdjs.CustomRuntimeObjectInstanceContainer(\n parent,\n this\n );\n this._renderer = this._createRender();\n\n this._initializeFromObjectData(objectData);\n\n // The generated code calls onCreated at the constructor end\n // and onCreated calls its super implementation at its end.\n }\n\n private _initializeFromObjectData(\n objectData: ObjectData & CustomObjectConfiguration\n ) {\n const eventsBasedObjectData = this._runtimeScene\n .getGame()\n .getEventsBasedObjectData(objectData.type);\n if (!eventsBasedObjectData) {\n logger.error(\n `A CustomRuntimeObject was initialized (or re-initialized) from object data referring to an non existing events based object data with type \"${objectData.type}\".`\n );\n return;\n }\n this._isInnerAreaFollowingParentSize =\n eventsBasedObjectData.isInnerAreaFollowingParentSize;\n if (eventsBasedObjectData.instances.length > 0) {\n if (!this._innerArea) {\n this._innerArea = {\n min: [0, 0, 0],\n max: [0, 0, 0],\n };\n }\n this._innerArea.min[0] = eventsBasedObjectData.areaMinX;\n this._innerArea.min[1] = eventsBasedObjectData.areaMinY;\n this._innerArea.min[2] = eventsBasedObjectData.areaMinZ;\n this._innerArea.max[0] = eventsBasedObjectData.areaMaxX;\n this._innerArea.max[1] = eventsBasedObjectData.areaMaxY;\n this._innerArea.max[2] = eventsBasedObjectData.areaMaxZ;\n }\n this._instanceContainer.loadFrom(objectData, eventsBasedObjectData);\n }\n\n protected abstract _createRender():\n | gdjs.CustomRuntimeObject2DRenderer\n | gdjs.CustomRuntimeObject3DRenderer;\n protected abstract _reinitializeRenderer(): void;\n\n override reinitialize(objectData: ObjectData & CustomObjectConfiguration) {\n super.reinitialize(objectData);\n\n this._initializeFromObjectData(objectData);\n this._reinitializeRenderer();\n\n // The generated code calls the onCreated super implementation at the end.\n this.onCreated();\n }\n\n override updateFromObjectData(\n oldObjectData: ObjectData & CustomObjectConfiguration,\n newObjectData: ObjectData & CustomObjectConfiguration\n ): boolean {\n const animator = this.getAnimator();\n if (animator) {\n animator.updateFromObjectData(\n oldObjectData.animatable || [],\n newObjectData.animatable || []\n );\n }\n return true;\n }\n\n override extraInitializationFromInitialInstance(\n initialInstanceData: InstanceData\n ) {\n const animator = this.getAnimator();\n if (initialInstanceData.numberProperties) {\n for (\n let i = 0, len = initialInstanceData.numberProperties.length;\n i < len;\n ++i\n ) {\n const extraData = initialInstanceData.numberProperties[i];\n if (animator && extraData.name === 'animation') {\n animator.setAnimationIndex(extraData.value);\n }\n }\n }\n if (initialInstanceData.customSize) {\n this.setWidth(initialInstanceData.width);\n this.setHeight(initialInstanceData.height);\n }\n if (initialInstanceData.opacity !== undefined) {\n this.setOpacity(initialInstanceData.opacity);\n }\n if (initialInstanceData.flippedX) {\n this.flipX(initialInstanceData.flippedX);\n }\n if (initialInstanceData.flippedY) {\n this.flipY(initialInstanceData.flippedY);\n }\n }\n\n override onDeletedFromScene(parent: gdjs.RuntimeInstanceContainer): void {\n // Let subclasses do something before the object is destroyed.\n this.onDestroy(parent);\n // Let behaviors do something before the object is destroyed.\n super.onDeletedFromScene(parent);\n // Destroy the children.\n this._instanceContainer.onDestroyFromScene(parent);\n }\n\n override update(parent: gdjs.RuntimeInstanceContainer): void {\n this._instanceContainer._updateObjectsPreEvents();\n\n this.doStepPreEvents(this._instanceContainer);\n\n const profiler = this.getRuntimeScene().getProfiler();\n if (profiler) {\n profiler.begin(this.type);\n }\n // This is a bit like the \"scene\" events for custom objects.\n this.doStepPostEvents(this._instanceContainer);\n if (profiler) {\n profiler.end(this.type);\n }\n\n this._instanceContainer._updateObjectsPostEvents();\n }\n\n /**\n * This method is called when the preview is being hot-reloaded.\n */\n onHotReloading(parent: gdjs.RuntimeInstanceContainer) {}\n\n // This is only to handle trigger once.\n doStepPreEvents(parent: gdjs.RuntimeInstanceContainer) {}\n\n /**\n * This method is called each tick after events are done.\n * @param parent The instanceContainer owning the object\n */\n doStepPostEvents(parent: gdjs.RuntimeInstanceContainer) {}\n\n /**\n * This method is called when the object is being removed from its parent\n * container and is about to be destroyed/reused later.\n */\n onDestroy(parent: gdjs.RuntimeInstanceContainer) {}\n\n override updatePreRender(parent: gdjs.RuntimeInstanceContainer): void {\n this._instanceContainer._updateObjectsPreRender();\n this.getRenderer().ensureUpToDate();\n }\n\n getRenderer():\n | gdjs.CustomRuntimeObject2DRenderer\n | gdjs.CustomRuntimeObject3DRenderer {\n return this._renderer;\n }\n\n getChildrenContainer(): gdjs.RuntimeInstanceContainer {\n return this._instanceContainer;\n }\n\n onChildrenLocationChanged() {\n this._isUntransformedHitBoxesDirty = true;\n this.invalidateHitboxes();\n this.getRenderer().update();\n }\n\n override updateHitBoxes(): void {\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n\n // Update the current hitboxes with the frame custom hit boxes\n // and apply transformations.\n const localTransformation = this.getLocalTransformation();\n for (let i = 0; i < this._untransformedHitBoxes.length; ++i) {\n if (i >= this.hitBoxes.length) {\n this.hitBoxes.push(new gdjs.Polygon());\n }\n for (\n let j = 0;\n j < this._untransformedHitBoxes[i].vertices.length;\n ++j\n ) {\n if (j >= this.hitBoxes[i].vertices.length) {\n this.hitBoxes[i].vertices.push([0, 0]);\n }\n localTransformation.transform(\n this._untransformedHitBoxes[i].vertices[j],\n this.hitBoxes[i].vertices[j]\n );\n }\n this.hitBoxes[i].vertices.length =\n this._untransformedHitBoxes[i].vertices.length;\n }\n }\n\n /**\n * Merge the hitboxes of the children.\n */\n _updateUntransformedHitBoxes() {\n this._isUntransformedHitBoxesDirty = false;\n\n this._untransformedHitBoxes.length = 0;\n let minX = Number.MAX_VALUE;\n let minY = Number.MAX_VALUE;\n let maxX = -Number.MAX_VALUE;\n let maxY = -Number.MAX_VALUE;\n for (const childInstance of this._instanceContainer.getAdhocListOfAllInstances()) {\n if (!childInstance.isIncludedInParentCollisionMask()) {\n continue;\n }\n Array.prototype.push.apply(\n this._untransformedHitBoxes,\n childInstance.getHitBoxes()\n );\n const childAABB = childInstance.getAABB();\n minX = Math.min(minX, childAABB.min[0]);\n minY = Math.min(minY, childAABB.min[1]);\n maxX = Math.max(maxX, childAABB.max[0]);\n maxY = Math.max(maxY, childAABB.max[1]);\n }\n if (minX === Number.MAX_VALUE) {\n // The unscaled size can't be 0 because setWidth and setHeight wouldn't\n // have any effect.\n minX = 0;\n minY = 0;\n maxX = 1;\n maxY = 1;\n }\n this._unrotatedAABB.min[0] = minX;\n this._unrotatedAABB.min[1] = minY;\n this._unrotatedAABB.max[0] = maxX;\n this._unrotatedAABB.max[1] = maxY;\n\n while (this.hitBoxes.length < this._untransformedHitBoxes.length) {\n this.hitBoxes.push(new gdjs.Polygon());\n }\n this.hitBoxes.length = this._untransformedHitBoxes.length;\n }\n\n // Position:\n /**\n * Return an array containing the coordinates of the point passed as parameter\n * in parent coordinate coordinates (as opposed to the object local coordinates).\n *\n * All transformations (flipping, scale, rotation) are supported.\n *\n * @param x The X position of the point, in object coordinates.\n * @param y The Y position of the point, in object coordinates.\n * @param destination Array that will be updated with the result\n * (x and y position of the point in parent coordinates).\n */\n applyObjectTransformation(x: float, y: float, destination: FloatPoint) {\n const source = destination;\n source[0] = x;\n source[1] = y;\n this.getLocalTransformation().transform(source, destination);\n }\n\n /**\n * Return the affine transformation that represents\n * flipping, scale, rotation and translation of the object.\n * @returns the affine transformation.\n */\n getLocalTransformation(): gdjs.AffineTransformation {\n if (this._isLocalTransformationDirty) {\n this._updateLocalTransformation();\n }\n return this._localTransformation;\n }\n\n getLocalInverseTransformation(): gdjs.AffineTransformation {\n if (this._isLocalTransformationDirty) {\n this._updateLocalTransformation();\n }\n return this._localInverseTransformation;\n }\n\n _updateLocalTransformation() {\n const absScaleX = Math.abs(this._scaleX);\n const absScaleY = Math.abs(this._scaleY);\n const centerX = this.getUnscaledCenterX() * absScaleX;\n const centerY = this.getUnscaledCenterY() * absScaleY;\n const angleInRadians = (this.angle * Math.PI) / 180;\n\n this._localTransformation.setToTranslation(this.x, this.y);\n this._localTransformation.rotateAround(angleInRadians, centerX, centerY);\n if (this._flippedX) {\n this._localTransformation.flipX(centerX);\n }\n if (this._flippedY) {\n this._localTransformation.flipY(centerY);\n }\n this._localTransformation.scale(absScaleX, absScaleY);\n\n this._localInverseTransformation.copyFrom(this._localTransformation);\n this._localInverseTransformation.invert();\n this._isLocalTransformationDirty = false;\n }\n\n /**\n * Return an array containing the coordinates of the point passed as parameter\n * in object local coordinates (as opposed to the parent coordinate coordinates).\n *\n * All transformations (flipping, scale, rotation) are supported.\n *\n * @param x The X position of the point, in parent coordinates.\n * @param y The Y position of the point, in parent coordinates.\n * @param destination Array that will be updated with the result\n * (x and y position of the point in object coordinates).\n */\n applyObjectInverseTransformation(\n x: float,\n y: float,\n destination: FloatPoint\n ) {\n const source = destination;\n source[0] = x;\n source[1] = y;\n this.getLocalInverseTransformation().transform(source, destination);\n }\n\n override getDrawableX(): float {\n let minX = 0;\n if (this._innerArea) {\n minX = this._innerArea.min[0];\n } else {\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n minX = this._unrotatedAABB.min[0];\n }\n const absScaleX = this.getScaleX();\n if (!this._flippedX) {\n return this.x + minX * absScaleX;\n } else {\n return (\n this.x +\n (-minX - this.getUnscaledWidth() + 2 * this.getUnscaledCenterX()) *\n absScaleX\n );\n }\n }\n\n override getDrawableY(): float {\n let minY = 0;\n if (this._innerArea) {\n minY = this._innerArea.min[1];\n } else {\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n minY = this._unrotatedAABB.min[1];\n }\n const absScaleY = this.getScaleY();\n if (!this._flippedY) {\n return this.y + minY * absScaleY;\n } else {\n return (\n this.y +\n (-minY - this.getUnscaledHeight() + 2 * this.getUnscaledCenterY()) *\n absScaleY\n );\n }\n }\n\n /**\n * @return the internal left bound of the object according to its children.\n */\n getInnerAreaMinX(): number {\n if (this._innerArea) {\n return this._innerArea.min[0];\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return this._unrotatedAABB.min[0];\n }\n\n /**\n * @return the internal top bound of the object according to its children.\n */\n getInnerAreaMinY(): number {\n if (this._innerArea) {\n return this._innerArea.min[1];\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return this._unrotatedAABB.min[1];\n }\n\n /**\n * @return the internal right bound of the object according to its children.\n */\n getInnerAreaMaxX(): number {\n if (this._innerArea) {\n return this._innerArea.max[0];\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return this._unrotatedAABB.max[0];\n }\n\n /**\n * @return the internal bottom bound of the object according to its children.\n */\n getInnerAreaMaxY(): number {\n if (this._innerArea) {\n return this._innerArea.max[1];\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return this._unrotatedAABB.max[1];\n }\n\n /**\n * @return the internal width of the object according to its children.\n */\n getUnscaledWidth(): float {\n if (this._innerArea) {\n return this._innerArea.max[0] - this._innerArea.min[0];\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return this._unrotatedAABB.max[0] - this._unrotatedAABB.min[0];\n }\n\n /**\n * @return the internal height of the object according to its children.\n */\n getUnscaledHeight(): float {\n if (this._innerArea) {\n return this._innerArea.max[1] - this._innerArea.min[1];\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return this._unrotatedAABB.max[1] - this._unrotatedAABB.min[1];\n }\n\n /**\n * @returns the center X from the local origin (0;0).\n */\n getUnscaledCenterX(): float {\n if (this._customCenter) {\n return this._customCenter[0];\n }\n if (this._innerArea) {\n return (this._innerArea.min[0] + this._innerArea.max[0]) / 2;\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return (this._unrotatedAABB.min[0] + this._unrotatedAABB.max[0]) / 2;\n }\n\n /**\n * @returns the center Y from the local origin (0;0).\n */\n getUnscaledCenterY(): float {\n if (this._customCenter) {\n return this._customCenter[1];\n }\n if (this._innerArea) {\n return (this._innerArea.min[1] + this._innerArea.max[1]) / 2;\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return (this._unrotatedAABB.min[1] + this._unrotatedAABB.max[1]) / 2;\n }\n\n /**\n * The center of rotation is defined relatively to the origin (the object\n * position).\n * This avoids the center to move when children push the bounds.\n *\n * When no custom center is defined, it will move\n * to stay at the center of the children bounds.\n *\n * @param x coordinate of the custom center\n * @param y coordinate of the custom center\n */\n setRotationCenter(x: float, y: float) {\n if (!this._customCenter) {\n this._customCenter = [0, 0];\n }\n this._customCenter[0] = x;\n this._customCenter[1] = y;\n\n this._isLocalTransformationDirty = true;\n this.invalidateHitboxes();\n }\n\n hasCustomRotationCenter(): boolean {\n return !!this._customCenter;\n }\n\n override getCenterX(): float {\n return (\n (this.getUnscaledCenterX() - this._unrotatedAABB.min[0]) *\n this.getScaleX()\n );\n }\n\n override getCenterY(): float {\n return (\n (this.getUnscaledCenterY() - this._unrotatedAABB.min[1]) *\n this.getScaleY()\n );\n }\n\n override getWidth(): float {\n return this.getUnscaledWidth() * this.getScaleX();\n }\n\n override getHeight(): float {\n return this.getUnscaledHeight() * this.getScaleY();\n }\n\n override setWidth(newWidth: float): void {\n const unscaledWidth = this.getUnscaledWidth();\n if (unscaledWidth === 0) {\n return;\n }\n const scaleX = newWidth / unscaledWidth;\n if (this._innerArea && this._isInnerAreaFollowingParentSize) {\n this._innerArea.min[0] *= scaleX;\n this._innerArea.max[0] *= scaleX;\n } else {\n this.setScaleX(scaleX);\n }\n }\n\n override setHeight(newHeight: float): void {\n const unscaledHeight = this.getUnscaledHeight();\n if (unscaledHeight === 0) {\n return;\n }\n const scaleY = newHeight / unscaledHeight;\n if (this._innerArea && this._isInnerAreaFollowingParentSize) {\n this._innerArea.min[1] *= scaleY;\n this._innerArea.max[1] *= scaleY;\n } else {\n this.setScaleY(scaleY);\n }\n }\n\n /**\n * Change the size of the object.\n *\n * @param newWidth The new width of the object, in pixels.\n * @param newHeight The new height of the object, in pixels.\n */\n setSize(newWidth: float, newHeight: float): void {\n this.setWidth(newWidth);\n this.setHeight(newHeight);\n }\n\n override setX(x: float): void {\n if (x === this.x) {\n return;\n }\n this.x = x;\n this._isLocalTransformationDirty = true;\n this.invalidateHitboxes();\n this.getRenderer().updateX();\n }\n\n override setY(y: float): void {\n if (y === this.y) {\n return;\n }\n this.y = y;\n this._isLocalTransformationDirty = true;\n this.invalidateHitboxes();\n this.getRenderer().updateY();\n }\n\n override setAngle(angle: float): void {\n if (this.angle === angle) {\n return;\n }\n this.angle = angle;\n this._isLocalTransformationDirty = true;\n this.invalidateHitboxes();\n this.getRenderer().updateAngle();\n }\n\n /**\n * Change the scale on X and Y axis of the object.\n *\n * @param newScale The new scale (must be greater than 0).\n */\n setScale(newScale: float): void {\n if (this._innerArea && this._isInnerAreaFollowingParentSize) {\n // The scale is always 1;\n return;\n }\n if (newScale < 0) {\n newScale = 0;\n }\n if (\n newScale === Math.abs(this._scaleX) &&\n newScale === Math.abs(this._scaleY)\n ) {\n return;\n }\n this._scaleX = newScale * (this._flippedX ? -1 : 1);\n this._scaleY = newScale * (this._flippedY ? -1 : 1);\n this._isLocalTransformationDirty = true;\n this.invalidateHitboxes();\n this.getRenderer().update();\n }\n\n /**\n * Change the scale on X axis of the object (changing its width).\n *\n * @param newScale The new scale (must be greater than 0).\n */\n setScaleX(newScale: float): void {\n if (this._innerArea && this._isInnerAreaFollowingParentSize) {\n // The scale is always 1;\n return;\n }\n if (newScale < 0) {\n newScale = 0;\n }\n if (newScale === Math.abs(this._scaleX)) {\n return;\n }\n this._scaleX = newScale * (this._flippedX ? -1 : 1);\n this._isLocalTransformationDirty = true;\n this.invalidateHitboxes();\n this.getRenderer().update();\n }\n\n /**\n * Change the scale on Y axis of the object (changing its height).\n *\n * @param newScale The new scale (must be greater than 0).\n */\n setScaleY(newScale: float): void {\n if (this._innerArea && this._isInnerAreaFollowingParentSize) {\n // The scale is always 1;\n return;\n }\n if (newScale < 0) {\n newScale = 0;\n }\n if (newScale === Math.abs(this._scaleY)) {\n return;\n }\n this._scaleY = newScale * (this._flippedY ? -1 : 1);\n this.invalidateHitboxes();\n this.getRenderer().update();\n }\n\n /**\n * Get the scale of the object (or the arithmetic mean of the X and Y scale in case they are different).\n *\n * @return the scale of the object (or the arithmetic mean of the X and Y scale in case they are different).\n * @deprecated Use `getScale` instead.\n */\n getScaleMean(): float {\n return (Math.abs(this._scaleX) + Math.abs(this._scaleY)) / 2.0;\n }\n\n /**\n * Get the scale of the object (or the geometric mean of the X and Y scale in case they are different).\n *\n * @return the scale of the object (or the geometric mean of the X and Y scale in case they are different).\n */\n getScale(): float {\n const scaleX = Math.abs(this._scaleX);\n const scaleY = Math.abs(this._scaleY);\n return scaleX === scaleY ? scaleX : Math.sqrt(scaleX * scaleY);\n }\n\n /**\n * Get the scale of the object on Y axis.\n *\n * @return the scale of the object on Y axis\n */\n getScaleY(): float {\n return Math.abs(this._scaleY);\n }\n\n /**\n * Get the scale of the object on X axis.\n *\n * @return the scale of the object on X axis\n */\n getScaleX(): float {\n return Math.abs(this._scaleX);\n }\n\n // Visibility and display :\n\n setOpacity(opacity: float): void {\n if (opacity < 0) {\n opacity = 0;\n }\n if (opacity > 255) {\n opacity = 255;\n }\n this.opacity = opacity;\n this.getRenderer().updateOpacity();\n }\n\n getOpacity(): number {\n return this.opacity;\n }\n\n override hide(enable: boolean): void {\n if (enable === undefined) {\n enable = true;\n }\n this.hidden = enable;\n this.getRenderer().updateVisibility();\n }\n\n flipX(enable: boolean) {\n if (enable !== this._flippedX) {\n this._scaleX *= -1;\n this._flippedX = enable;\n this.invalidateHitboxes();\n this.getRenderer().update();\n }\n }\n\n flipY(enable: boolean) {\n if (enable !== this._flippedY) {\n this._scaleY *= -1;\n this._flippedY = enable;\n this.invalidateHitboxes();\n this.getRenderer().update();\n }\n }\n\n isFlippedX(): boolean {\n return this._flippedX;\n }\n\n isFlippedY(): boolean {\n return this._flippedY;\n }\n\n /**\n * Return the sprite animator.\n *\n * It returns `null` when custom objects don't have the Animatable capability.\n */\n getAnimator(): gdjs.SpriteAnimator<any> | null {\n return null;\n }\n }\n\n // Others initialization and internal state management :\n // TODO EBO Activate and test instance recycling.\n CustomRuntimeObject.supportsReinitialization = false;\n}\n"],
5
- "mappings": "AAKA,GAAU,MAAV,UAAU,EAAV,CACE,KAAM,GAAS,GAAI,GAAK,OAAO,uBAkBxB,eACG,GAAK,aAMf,CA4CE,YACE,EACA,EACA,CACA,MAAM,EAAQ,GA1ChB,mCAAyC,GAEjC,4BAAyC,GAEzC,oBAAuB,CAAE,IAAK,CAAC,EAAG,GAAI,IAAK,CAAC,EAAG,IAK7C,gBAGC,KAQD,qCAAkC,GACpC,aAAiB,EACjB,aAAiB,EACjB,eAAqB,GACrB,eAAqB,GACrB,aAAiB,IACjB,mBAAmC,KACnC,0BACN,GAAI,GAAK,qBACH,iCACN,GAAI,GAAK,qBACH,iCAAuC,GAY7C,KAAK,MAAQ,EAAW,KACxB,KAAK,mBAAqB,GAAI,GAAK,qCACjC,EACA,MAEF,KAAK,UAAY,KAAK,gBAEtB,KAAK,0BAA0B,GAMzB,0BACN,EACA,CACA,KAAM,GAAwB,KAAK,cAChC,UACA,yBAAyB,EAAW,MACvC,GAAI,CAAC,EAAuB,CAC1B,EAAO,MACL,+IAA+I,EAAW,UAE5J,OAEF,KAAK,gCACH,EAAsB,+BACpB,EAAsB,UAAU,OAAS,GACtC,MAAK,YACR,MAAK,WAAa,CAChB,IAAK,CAAC,EAAG,EAAG,GACZ,IAAK,CAAC,EAAG,EAAG,KAGhB,KAAK,WAAW,IAAI,GAAK,EAAsB,SAC/C,KAAK,WAAW,IAAI,GAAK,EAAsB,SAC/C,KAAK,WAAW,IAAI,GAAK,EAAsB,SAC/C,KAAK,WAAW,IAAI,GAAK,EAAsB,SAC/C,KAAK,WAAW,IAAI,GAAK,EAAsB,SAC/C,KAAK,WAAW,IAAI,GAAK,EAAsB,UAEjD,KAAK,mBAAmB,SAAS,EAAY,GAQtC,aAAa,EAAoD,CACxE,MAAM,aAAa,GAEnB,KAAK,0BAA0B,GAC/B,KAAK,wBAGL,KAAK,YAGE,qBACP,EACA,EACS,CACT,KAAM,GAAW,KAAK,cACtB,MAAI,IACF,EAAS,qBACP,EAAc,YAAc,GAC5B,EAAc,YAAc,IAGzB,GAGA,uCACP,EACA,CACA,KAAM,GAAW,KAAK,cACtB,GAAI,EAAoB,iBACtB,OACM,GAAI,EAAG,EAAM,EAAoB,iBAAiB,OACtD,EAAI,EACJ,EAAE,EACF,CACA,KAAM,GAAY,EAAoB,iBAAiB,GACvD,AAAI,GAAY,EAAU,OAAS,aACjC,EAAS,kBAAkB,EAAU,OAI3C,AAAI,EAAoB,YACtB,MAAK,SAAS,EAAoB,OAClC,KAAK,UAAU,EAAoB,SAEjC,EAAoB,UAAY,QAClC,KAAK,WAAW,EAAoB,SAElC,EAAoB,UACtB,KAAK,MAAM,EAAoB,UAE7B,EAAoB,UACtB,KAAK,MAAM,EAAoB,UAI1B,mBAAmB,EAA6C,CAEvE,KAAK,UAAU,GAEf,MAAM,mBAAmB,GAEzB,KAAK,mBAAmB,mBAAmB,GAGpC,OAAO,EAA6C,CAC3D,KAAK,mBAAmB,0BAExB,KAAK,gBAAgB,KAAK,oBAE1B,KAAM,GAAW,KAAK,kBAAkB,cACxC,AAAI,GACF,EAAS,MAAM,KAAK,MAGtB,KAAK,iBAAiB,KAAK,oBACvB,GACF,EAAS,IAAI,KAAK,MAGpB,KAAK,mBAAmB,2BAM1B,eAAe,EAAuC,EAGtD,gBAAgB,EAAuC,EAMvD,iBAAiB,EAAuC,EAMxD,UAAU,EAAuC,EAExC,gBAAgB,EAA6C,CACpE,KAAK,mBAAmB,0BACxB,KAAK,cAAc,iBAGrB,aAEuC,CACrC,MAAO,MAAK,UAGd,sBAAsD,CACpD,MAAO,MAAK,mBAGd,2BAA4B,CAC1B,KAAK,8BAAgC,GACrC,KAAK,qBACL,KAAK,cAAc,SAGZ,gBAAuB,CAC9B,AAAI,KAAK,+BACP,KAAK,+BAKP,KAAM,GAAsB,KAAK,yBACjC,OAAS,GAAI,EAAG,EAAI,KAAK,uBAAuB,OAAQ,EAAE,EAAG,CAC3D,AAAI,GAAK,KAAK,SAAS,QACrB,KAAK,SAAS,KAAK,GAAI,GAAK,SAE9B,OACM,GAAI,EACR,EAAI,KAAK,uBAAuB,GAAG,SAAS,OAC5C,EAAE,EAEF,AAAI,GAAK,KAAK,SAAS,GAAG,SAAS,QACjC,KAAK,SAAS,GAAG,SAAS,KAAK,CAAC,EAAG,IAErC,EAAoB,UAClB,KAAK,uBAAuB,GAAG,SAAS,GACxC,KAAK,SAAS,GAAG,SAAS,IAG9B,KAAK,SAAS,GAAG,SAAS,OACxB,KAAK,uBAAuB,GAAG,SAAS,QAO9C,8BAA+B,CAC7B,KAAK,8BAAgC,GAErC,KAAK,uBAAuB,OAAS,EACrC,GAAI,GAAO,OAAO,UACd,EAAO,OAAO,UACd,EAAO,CAAC,OAAO,UACf,EAAO,CAAC,OAAO,UACnB,SAAW,KAAiB,MAAK,mBAAmB,6BAA8B,CAChF,GAAI,CAAC,EAAc,kCACjB,SAEF,MAAM,UAAU,KAAK,MACnB,KAAK,uBACL,EAAc,eAEhB,KAAM,GAAY,EAAc,UAChC,EAAO,KAAK,IAAI,EAAM,EAAU,IAAI,IACpC,EAAO,KAAK,IAAI,EAAM,EAAU,IAAI,IACpC,EAAO,KAAK,IAAI,EAAM,EAAU,IAAI,IACpC,EAAO,KAAK,IAAI,EAAM,EAAU,IAAI,IAetC,IAbI,IAAS,OAAO,WAGlB,GAAO,EACP,EAAO,EACP,EAAO,EACP,EAAO,GAET,KAAK,eAAe,IAAI,GAAK,EAC7B,KAAK,eAAe,IAAI,GAAK,EAC7B,KAAK,eAAe,IAAI,GAAK,EAC7B,KAAK,eAAe,IAAI,GAAK,EAEtB,KAAK,SAAS,OAAS,KAAK,uBAAuB,QACxD,KAAK,SAAS,KAAK,GAAI,GAAK,SAE9B,KAAK,SAAS,OAAS,KAAK,uBAAuB,OAerD,0BAA0B,EAAU,EAAU,EAAyB,CACrE,KAAM,GAAS,EACf,EAAO,GAAK,EACZ,EAAO,GAAK,EACZ,KAAK,yBAAyB,UAAU,EAAQ,GAQlD,wBAAoD,CAClD,MAAI,MAAK,6BACP,KAAK,6BAEA,KAAK,qBAGd,+BAA2D,CACzD,MAAI,MAAK,6BACP,KAAK,6BAEA,KAAK,4BAGd,4BAA6B,CAC3B,KAAM,GAAY,KAAK,IAAI,KAAK,SAC1B,EAAY,KAAK,IAAI,KAAK,SAC1B,EAAU,KAAK,qBAAuB,EACtC,EAAU,KAAK,qBAAuB,EACtC,EAAkB,KAAK,MAAQ,KAAK,GAAM,IAEhD,KAAK,qBAAqB,iBAAiB,KAAK,EAAG,KAAK,GACxD,KAAK,qBAAqB,aAAa,EAAgB,EAAS,GAC5D,KAAK,WACP,KAAK,qBAAqB,MAAM,GAE9B,KAAK,WACP,KAAK,qBAAqB,MAAM,GAElC,KAAK,qBAAqB,MAAM,EAAW,GAE3C,KAAK,4BAA4B,SAAS,KAAK,sBAC/C,KAAK,4BAA4B,SACjC,KAAK,4BAA8B,GAcrC,iCACE,EACA,EACA,EACA,CACA,KAAM,GAAS,EACf,EAAO,GAAK,EACZ,EAAO,GAAK,EACZ,KAAK,gCAAgC,UAAU,EAAQ,GAGhD,cAAsB,CAC7B,GAAI,GAAO,EACX,AAAI,KAAK,WACP,EAAO,KAAK,WAAW,IAAI,GAEvB,MAAK,+BACP,KAAK,+BAEP,EAAO,KAAK,eAAe,IAAI,IAEjC,KAAM,GAAY,KAAK,YACvB,MAAK,MAAK,UAIN,KAAK,EACJ,EAAC,EAAO,KAAK,mBAAqB,EAAI,KAAK,sBAC1C,EALG,KAAK,EAAI,EAAO,EAUlB,cAAsB,CAC7B,GAAI,GAAO,EACX,AAAI,KAAK,WACP,EAAO,KAAK,WAAW,IAAI,GAEvB,MAAK,+BACP,KAAK,+BAEP,EAAO,KAAK,eAAe,IAAI,IAEjC,KAAM,GAAY,KAAK,YACvB,MAAK,MAAK,UAIN,KAAK,EACJ,EAAC,EAAO,KAAK,oBAAsB,EAAI,KAAK,sBAC3C,EALG,KAAK,EAAI,EAAO,EAa3B,kBAA2B,CACzB,MAAI,MAAK,WACA,KAAK,WAAW,IAAI,GAEzB,MAAK,+BACP,KAAK,+BAEA,KAAK,eAAe,IAAI,IAMjC,kBAA2B,CACzB,MAAI,MAAK,WACA,KAAK,WAAW,IAAI,GAEzB,MAAK,+BACP,KAAK,+BAEA,KAAK,eAAe,IAAI,IAMjC,kBAA2B,CACzB,MAAI,MAAK,WACA,KAAK,WAAW,IAAI,GAEzB,MAAK,+BACP,KAAK,+BAEA,KAAK,eAAe,IAAI,IAMjC,kBAA2B,CACzB,MAAI,MAAK,WACA,KAAK,WAAW,IAAI,GAEzB,MAAK,+BACP,KAAK,+BAEA,KAAK,eAAe,IAAI,IAMjC,kBAA0B,CACxB,MAAI,MAAK,WACA,KAAK,WAAW,IAAI,GAAK,KAAK,WAAW,IAAI,GAElD,MAAK,+BACP,KAAK,+BAEA,KAAK,eAAe,IAAI,GAAK,KAAK,eAAe,IAAI,IAM9D,mBAA2B,CACzB,MAAI,MAAK,WACA,KAAK,WAAW,IAAI,GAAK,KAAK,WAAW,IAAI,GAElD,MAAK,+BACP,KAAK,+BAEA,KAAK,eAAe,IAAI,GAAK,KAAK,eAAe,IAAI,IAM9D,oBAA4B,CAC1B,MAAI,MAAK,cACA,KAAK,cAAc,GAExB,KAAK,WACC,MAAK,WAAW,IAAI,GAAK,KAAK,WAAW,IAAI,IAAM,EAEzD,MAAK,+BACP,KAAK,+BAEC,MAAK,eAAe,IAAI,GAAK,KAAK,eAAe,IAAI,IAAM,GAMrE,oBAA4B,CAC1B,MAAI,MAAK,cACA,KAAK,cAAc,GAExB,KAAK,WACC,MAAK,WAAW,IAAI,GAAK,KAAK,WAAW,IAAI,IAAM,EAEzD,MAAK,+BACP,KAAK,+BAEC,MAAK,eAAe,IAAI,GAAK,KAAK,eAAe,IAAI,IAAM,GAcrE,kBAAkB,EAAU,EAAU,CACpC,AAAK,KAAK,eACR,MAAK,cAAgB,CAAC,EAAG,IAE3B,KAAK,cAAc,GAAK,EACxB,KAAK,cAAc,GAAK,EAExB,KAAK,4BAA8B,GACnC,KAAK,qBAGP,yBAAmC,CACjC,MAAO,CAAC,CAAC,KAAK,cAGP,YAAoB,CAC3B,MACG,MAAK,qBAAuB,KAAK,eAAe,IAAI,IACrD,KAAK,YAIA,YAAoB,CAC3B,MACG,MAAK,qBAAuB,KAAK,eAAe,IAAI,IACrD,KAAK,YAIA,UAAkB,CACzB,MAAO,MAAK,mBAAqB,KAAK,YAG/B,WAAmB,CAC1B,MAAO,MAAK,oBAAsB,KAAK,YAGhC,SAAS,EAAuB,CACvC,KAAM,GAAgB,KAAK,mBAC3B,GAAI,IAAkB,EACpB,OAEF,KAAM,GAAS,EAAW,EAC1B,AAAI,KAAK,YAAc,KAAK,gCAC1B,MAAK,WAAW,IAAI,IAAM,EAC1B,KAAK,WAAW,IAAI,IAAM,GAE1B,KAAK,UAAU,GAIV,UAAU,EAAwB,CACzC,KAAM,GAAiB,KAAK,oBAC5B,GAAI,IAAmB,EACrB,OAEF,KAAM,GAAS,EAAY,EAC3B,AAAI,KAAK,YAAc,KAAK,gCAC1B,MAAK,WAAW,IAAI,IAAM,EAC1B,KAAK,WAAW,IAAI,IAAM,GAE1B,KAAK,UAAU,GAUnB,QAAQ,EAAiB,EAAwB,CAC/C,KAAK,SAAS,GACd,KAAK,UAAU,GAGR,KAAK,EAAgB,CAC5B,AAAI,IAAM,KAAK,GAGf,MAAK,EAAI,EACT,KAAK,4BAA8B,GACnC,KAAK,qBACL,KAAK,cAAc,WAGZ,KAAK,EAAgB,CAC5B,AAAI,IAAM,KAAK,GAGf,MAAK,EAAI,EACT,KAAK,4BAA8B,GACnC,KAAK,qBACL,KAAK,cAAc,WAGZ,SAAS,EAAoB,CACpC,AAAI,KAAK,QAAU,GAGnB,MAAK,MAAQ,EACb,KAAK,4BAA8B,GACnC,KAAK,qBACL,KAAK,cAAc,eAQrB,SAAS,EAAuB,CAC9B,AAAI,KAAK,YAAc,KAAK,iCAIxB,GAAW,GACb,GAAW,GAGX,MAAa,KAAK,IAAI,KAAK,UAC3B,IAAa,KAAK,IAAI,KAAK,WAI7B,MAAK,QAAU,EAAY,MAAK,UAAY,GAAK,GACjD,KAAK,QAAU,EAAY,MAAK,UAAY,GAAK,GACjD,KAAK,4BAA8B,GACnC,KAAK,qBACL,KAAK,cAAc,WAQrB,UAAU,EAAuB,CAC/B,AAAI,KAAK,YAAc,KAAK,iCAIxB,GAAW,GACb,GAAW,GAET,IAAa,KAAK,IAAI,KAAK,UAG/B,MAAK,QAAU,EAAY,MAAK,UAAY,GAAK,GACjD,KAAK,4BAA8B,GACnC,KAAK,qBACL,KAAK,cAAc,WAQrB,UAAU,EAAuB,CAC/B,AAAI,KAAK,YAAc,KAAK,iCAIxB,GAAW,GACb,GAAW,GAET,IAAa,KAAK,IAAI,KAAK,UAG/B,MAAK,QAAU,EAAY,MAAK,UAAY,GAAK,GACjD,KAAK,qBACL,KAAK,cAAc,WASrB,cAAsB,CACpB,MAAQ,MAAK,IAAI,KAAK,SAAW,KAAK,IAAI,KAAK,UAAY,EAQ7D,UAAkB,CAChB,KAAM,GAAS,KAAK,IAAI,KAAK,SACvB,EAAS,KAAK,IAAI,KAAK,SAC7B,MAAO,KAAW,EAAS,EAAS,KAAK,KAAK,EAAS,GAQzD,WAAmB,CACjB,MAAO,MAAK,IAAI,KAAK,SAQvB,WAAmB,CACjB,MAAO,MAAK,IAAI,KAAK,SAKvB,WAAW,EAAsB,CAC/B,AAAI,EAAU,GACZ,GAAU,GAER,EAAU,KACZ,GAAU,KAEZ,KAAK,QAAU,EACf,KAAK,cAAc,gBAGrB,YAAqB,CACnB,MAAO,MAAK,QAGL,KAAK,EAAuB,CACnC,AAAI,IAAW,QACb,GAAS,IAEX,KAAK,OAAS,EACd,KAAK,cAAc,mBAGrB,MAAM,EAAiB,CACrB,AAAI,IAAW,KAAK,WAClB,MAAK,SAAW,GAChB,KAAK,UAAY,EACjB,KAAK,qBACL,KAAK,cAAc,UAIvB,MAAM,EAAiB,CACrB,AAAI,IAAW,KAAK,WAClB,MAAK,SAAW,GAChB,KAAK,UAAY,EACjB,KAAK,qBACL,KAAK,cAAc,UAIvB,YAAsB,CACpB,MAAO,MAAK,UAGd,YAAsB,CACpB,MAAO,MAAK,UAQd,aAA+C,CAC7C,MAAO,OApzBJ,EAAe,sBA0zBtB,EAAoB,yBAA2B,KA70BvC",
4
+ "sourcesContent": ["/*\n * GDevelop JS Platform\n * Copyright 2013-2022 Florian Rival (Florian.Rival@gmail.com). All rights reserved.\n * This project is released under the MIT License.\n */\nnamespace gdjs {\n const logger = new gdjs.Logger('CustomRuntimeObject');\n\n export type ObjectConfiguration = {\n content: any;\n };\n\n export type CustomObjectConfiguration = ObjectConfiguration & {\n animatable?: SpriteAnimationData[];\n variant: string;\n childrenContent: { [objectName: string]: ObjectConfiguration & any };\n };\n\n /**\n * An object that contains other object.\n *\n * This is the base class for objects generated from EventsBasedObject.\n *\n * @see gdjs.CustomRuntimeObjectInstanceContainer\n */\n export abstract class CustomRuntimeObject\n extends gdjs.RuntimeObject\n implements\n gdjs.Resizable,\n gdjs.Scalable,\n gdjs.Flippable,\n gdjs.OpacityHandler\n {\n _renderer:\n | gdjs.CustomRuntimeObject2DRenderer\n | gdjs.CustomRuntimeObject3DRenderer;\n /** It contains the children of this object. */\n _instanceContainer: gdjs.CustomRuntimeObjectInstanceContainer;\n _isUntransformedHitBoxesDirty: boolean = true;\n /** It contains shallow copies of the children hitboxes */\n private _untransformedHitBoxes: gdjs.Polygon[] = [];\n /** The dimension of this object is calculated from its children AABBs. */\n private _unrotatedAABB: AABB = { min: [0, 0], max: [0, 0] };\n /**\n * The bounds of the object content before any transformation.\n * @see gdjs.CustomRuntimeObjectInstanceContainer._initialInnerArea\n **/\n protected _innerArea: {\n min: [float, float, float];\n max: [float, float, float];\n } | null = null;\n /**\n * When the parent dimensions change:\n * - if `false`, the object is stretch proportionally while children local\n * positions stay the same ({@link gdjs.CustomRuntimeObject._innerArea} don't change).\n * - if `true`, the children local positions need to be adapted by events\n * to follow their parent size.\n */\n protected _isInnerAreaFollowingParentSize = false;\n private _scaleX: float = 1;\n private _scaleY: float = 1;\n private _flippedX: boolean = false;\n private _flippedY: boolean = false;\n private opacity: float = 255;\n private _customCenter: FloatPoint | null = null;\n private _localTransformation: gdjs.AffineTransformation =\n new gdjs.AffineTransformation();\n private _localInverseTransformation: gdjs.AffineTransformation =\n new gdjs.AffineTransformation();\n private _isLocalTransformationDirty: boolean = true;\n _type: string;\n\n /**\n * @param parent The container the object belongs to\n * @param objectData The object data used to initialize the object\n */\n constructor(\n parent: gdjs.RuntimeInstanceContainer,\n objectData: ObjectData & CustomObjectConfiguration\n ) {\n super(parent, objectData);\n this._type = objectData.type;\n this._instanceContainer = new gdjs.CustomRuntimeObjectInstanceContainer(\n parent,\n this\n );\n this._renderer = this._createRender();\n\n this._initializeFromObjectData(objectData);\n\n // The generated code calls onCreated at the constructor end\n // and onCreated calls its super implementation at its end.\n }\n\n private _initializeFromObjectData(\n customObjectData: ObjectData & CustomObjectConfiguration\n ) {\n const eventsBasedObjectData = this._runtimeScene\n .getGame()\n .getEventsBasedObjectData(customObjectData.type);\n if (!eventsBasedObjectData) {\n logger.error(\n `A CustomRuntimeObject was initialized (or re-initialized) from object data referring to an non existing events based object data with type \"${customObjectData.type}\".`\n );\n return;\n }\n\n if (!eventsBasedObjectData.defaultVariant) {\n eventsBasedObjectData.defaultVariant = {\n ...eventsBasedObjectData,\n name: '',\n };\n }\n let usedVariantData: EventsBasedObjectVariantData =\n eventsBasedObjectData.defaultVariant;\n if (customObjectData.variant) {\n for (\n let variantIndex = 0;\n variantIndex < eventsBasedObjectData.variants.length;\n variantIndex++\n ) {\n const variantData = eventsBasedObjectData.variants[variantIndex];\n if (variantData.name === customObjectData.variant) {\n usedVariantData = variantData;\n break;\n }\n }\n }\n\n this._isInnerAreaFollowingParentSize =\n eventsBasedObjectData.isInnerAreaFollowingParentSize;\n if (usedVariantData.instances.length > 0) {\n if (!this._innerArea) {\n this._innerArea = {\n min: [0, 0, 0],\n max: [0, 0, 0],\n };\n }\n this._innerArea.min[0] = usedVariantData.areaMinX;\n this._innerArea.min[1] = usedVariantData.areaMinY;\n this._innerArea.min[2] = usedVariantData.areaMinZ;\n this._innerArea.max[0] = usedVariantData.areaMaxX;\n this._innerArea.max[1] = usedVariantData.areaMaxY;\n this._innerArea.max[2] = usedVariantData.areaMaxZ;\n }\n this._instanceContainer.loadFrom(customObjectData, usedVariantData);\n }\n\n protected abstract _createRender():\n | gdjs.CustomRuntimeObject2DRenderer\n | gdjs.CustomRuntimeObject3DRenderer;\n protected abstract _reinitializeRenderer(): void;\n\n override reinitialize(objectData: ObjectData & CustomObjectConfiguration) {\n super.reinitialize(objectData);\n\n this._initializeFromObjectData(objectData);\n this._reinitializeRenderer();\n\n // The generated code calls the onCreated super implementation at the end.\n this.onCreated();\n }\n\n override updateFromObjectData(\n oldObjectData: ObjectData & CustomObjectConfiguration,\n newObjectData: ObjectData & CustomObjectConfiguration\n ): boolean {\n const animator = this.getAnimator();\n if (animator) {\n animator.updateFromObjectData(\n oldObjectData.animatable || [],\n newObjectData.animatable || []\n );\n }\n return true;\n }\n\n override extraInitializationFromInitialInstance(\n initialInstanceData: InstanceData\n ) {\n const animator = this.getAnimator();\n if (initialInstanceData.numberProperties) {\n for (\n let i = 0, len = initialInstanceData.numberProperties.length;\n i < len;\n ++i\n ) {\n const extraData = initialInstanceData.numberProperties[i];\n if (animator && extraData.name === 'animation') {\n animator.setAnimationIndex(extraData.value);\n }\n }\n }\n if (initialInstanceData.customSize) {\n this.setWidth(initialInstanceData.width);\n this.setHeight(initialInstanceData.height);\n }\n if (initialInstanceData.opacity !== undefined) {\n this.setOpacity(initialInstanceData.opacity);\n }\n if (initialInstanceData.flippedX) {\n this.flipX(initialInstanceData.flippedX);\n }\n if (initialInstanceData.flippedY) {\n this.flipY(initialInstanceData.flippedY);\n }\n }\n\n override onDeletedFromScene(parent: gdjs.RuntimeInstanceContainer): void {\n // Let subclasses do something before the object is destroyed.\n this.onDestroy(parent);\n // Let behaviors do something before the object is destroyed.\n super.onDeletedFromScene(parent);\n // Destroy the children.\n this._instanceContainer.onDestroyFromScene(parent);\n }\n\n override update(parent: gdjs.RuntimeInstanceContainer): void {\n this._instanceContainer._updateObjectsPreEvents();\n\n this.doStepPreEvents(this._instanceContainer);\n\n const profiler = this.getRuntimeScene().getProfiler();\n if (profiler) {\n profiler.begin(this.type);\n }\n // This is a bit like the \"scene\" events for custom objects.\n this.doStepPostEvents(this._instanceContainer);\n if (profiler) {\n profiler.end(this.type);\n }\n\n this._instanceContainer._updateObjectsPostEvents();\n }\n\n /**\n * This method is called when the preview is being hot-reloaded.\n */\n onHotReloading(parent: gdjs.RuntimeInstanceContainer) {}\n\n // This is only to handle trigger once.\n doStepPreEvents(parent: gdjs.RuntimeInstanceContainer) {}\n\n /**\n * This method is called each tick after events are done.\n * @param parent The instanceContainer owning the object\n */\n doStepPostEvents(parent: gdjs.RuntimeInstanceContainer) {}\n\n /**\n * This method is called when the object is being removed from its parent\n * container and is about to be destroyed/reused later.\n */\n onDestroy(parent: gdjs.RuntimeInstanceContainer) {}\n\n override updatePreRender(parent: gdjs.RuntimeInstanceContainer): void {\n this._instanceContainer._updateObjectsPreRender();\n this.getRenderer().ensureUpToDate();\n }\n\n getRenderer():\n | gdjs.CustomRuntimeObject2DRenderer\n | gdjs.CustomRuntimeObject3DRenderer {\n return this._renderer;\n }\n\n getChildrenContainer(): gdjs.RuntimeInstanceContainer {\n return this._instanceContainer;\n }\n\n onChildrenLocationChanged() {\n this._isUntransformedHitBoxesDirty = true;\n this.invalidateHitboxes();\n this.getRenderer().update();\n }\n\n override updateHitBoxes(): void {\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n\n // Update the current hitboxes with the frame custom hit boxes\n // and apply transformations.\n const localTransformation = this.getLocalTransformation();\n for (let i = 0; i < this._untransformedHitBoxes.length; ++i) {\n if (i >= this.hitBoxes.length) {\n this.hitBoxes.push(new gdjs.Polygon());\n }\n for (\n let j = 0;\n j < this._untransformedHitBoxes[i].vertices.length;\n ++j\n ) {\n if (j >= this.hitBoxes[i].vertices.length) {\n this.hitBoxes[i].vertices.push([0, 0]);\n }\n localTransformation.transform(\n this._untransformedHitBoxes[i].vertices[j],\n this.hitBoxes[i].vertices[j]\n );\n }\n this.hitBoxes[i].vertices.length =\n this._untransformedHitBoxes[i].vertices.length;\n }\n }\n\n /**\n * Merge the hitboxes of the children.\n */\n _updateUntransformedHitBoxes() {\n this._isUntransformedHitBoxesDirty = false;\n\n this._untransformedHitBoxes.length = 0;\n let minX = Number.MAX_VALUE;\n let minY = Number.MAX_VALUE;\n let maxX = -Number.MAX_VALUE;\n let maxY = -Number.MAX_VALUE;\n for (const childInstance of this._instanceContainer.getAdhocListOfAllInstances()) {\n if (!childInstance.isIncludedInParentCollisionMask()) {\n continue;\n }\n Array.prototype.push.apply(\n this._untransformedHitBoxes,\n childInstance.getHitBoxes()\n );\n const childAABB = childInstance.getAABB();\n minX = Math.min(minX, childAABB.min[0]);\n minY = Math.min(minY, childAABB.min[1]);\n maxX = Math.max(maxX, childAABB.max[0]);\n maxY = Math.max(maxY, childAABB.max[1]);\n }\n if (minX === Number.MAX_VALUE) {\n // The unscaled size can't be 0 because setWidth and setHeight wouldn't\n // have any effect.\n minX = 0;\n minY = 0;\n maxX = 1;\n maxY = 1;\n }\n this._unrotatedAABB.min[0] = minX;\n this._unrotatedAABB.min[1] = minY;\n this._unrotatedAABB.max[0] = maxX;\n this._unrotatedAABB.max[1] = maxY;\n\n while (this.hitBoxes.length < this._untransformedHitBoxes.length) {\n this.hitBoxes.push(new gdjs.Polygon());\n }\n this.hitBoxes.length = this._untransformedHitBoxes.length;\n }\n\n // Position:\n /**\n * Return an array containing the coordinates of the point passed as parameter\n * in parent coordinate coordinates (as opposed to the object local coordinates).\n *\n * All transformations (flipping, scale, rotation) are supported.\n *\n * @param x The X position of the point, in object coordinates.\n * @param y The Y position of the point, in object coordinates.\n * @param destination Array that will be updated with the result\n * (x and y position of the point in parent coordinates).\n */\n applyObjectTransformation(x: float, y: float, destination: FloatPoint) {\n const source = destination;\n source[0] = x;\n source[1] = y;\n this.getLocalTransformation().transform(source, destination);\n }\n\n /**\n * Return the affine transformation that represents\n * flipping, scale, rotation and translation of the object.\n * @returns the affine transformation.\n */\n getLocalTransformation(): gdjs.AffineTransformation {\n if (this._isLocalTransformationDirty) {\n this._updateLocalTransformation();\n }\n return this._localTransformation;\n }\n\n getLocalInverseTransformation(): gdjs.AffineTransformation {\n if (this._isLocalTransformationDirty) {\n this._updateLocalTransformation();\n }\n return this._localInverseTransformation;\n }\n\n _updateLocalTransformation() {\n const absScaleX = Math.abs(this._scaleX);\n const absScaleY = Math.abs(this._scaleY);\n const centerX = this.getUnscaledCenterX() * absScaleX;\n const centerY = this.getUnscaledCenterY() * absScaleY;\n const angleInRadians = (this.angle * Math.PI) / 180;\n\n this._localTransformation.setToTranslation(this.x, this.y);\n this._localTransformation.rotateAround(angleInRadians, centerX, centerY);\n if (this._flippedX) {\n this._localTransformation.flipX(centerX);\n }\n if (this._flippedY) {\n this._localTransformation.flipY(centerY);\n }\n this._localTransformation.scale(absScaleX, absScaleY);\n\n this._localInverseTransformation.copyFrom(this._localTransformation);\n this._localInverseTransformation.invert();\n this._isLocalTransformationDirty = false;\n }\n\n /**\n * Return an array containing the coordinates of the point passed as parameter\n * in object local coordinates (as opposed to the parent coordinate coordinates).\n *\n * All transformations (flipping, scale, rotation) are supported.\n *\n * @param x The X position of the point, in parent coordinates.\n * @param y The Y position of the point, in parent coordinates.\n * @param destination Array that will be updated with the result\n * (x and y position of the point in object coordinates).\n */\n applyObjectInverseTransformation(\n x: float,\n y: float,\n destination: FloatPoint\n ) {\n const source = destination;\n source[0] = x;\n source[1] = y;\n this.getLocalInverseTransformation().transform(source, destination);\n }\n\n override getDrawableX(): float {\n let minX = 0;\n if (this._innerArea) {\n minX = this._innerArea.min[0];\n } else {\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n minX = this._unrotatedAABB.min[0];\n }\n const absScaleX = this.getScaleX();\n if (!this._flippedX) {\n return this.x + minX * absScaleX;\n } else {\n return (\n this.x +\n (-minX - this.getUnscaledWidth() + 2 * this.getUnscaledCenterX()) *\n absScaleX\n );\n }\n }\n\n override getDrawableY(): float {\n let minY = 0;\n if (this._innerArea) {\n minY = this._innerArea.min[1];\n } else {\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n minY = this._unrotatedAABB.min[1];\n }\n const absScaleY = this.getScaleY();\n if (!this._flippedY) {\n return this.y + minY * absScaleY;\n } else {\n return (\n this.y +\n (-minY - this.getUnscaledHeight() + 2 * this.getUnscaledCenterY()) *\n absScaleY\n );\n }\n }\n\n /**\n * @return the internal left bound of the object according to its children.\n */\n getInnerAreaMinX(): number {\n if (this._innerArea) {\n return this._innerArea.min[0];\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return this._unrotatedAABB.min[0];\n }\n\n /**\n * @return the internal top bound of the object according to its children.\n */\n getInnerAreaMinY(): number {\n if (this._innerArea) {\n return this._innerArea.min[1];\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return this._unrotatedAABB.min[1];\n }\n\n /**\n * @return the internal right bound of the object according to its children.\n */\n getInnerAreaMaxX(): number {\n if (this._innerArea) {\n return this._innerArea.max[0];\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return this._unrotatedAABB.max[0];\n }\n\n /**\n * @return the internal bottom bound of the object according to its children.\n */\n getInnerAreaMaxY(): number {\n if (this._innerArea) {\n return this._innerArea.max[1];\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return this._unrotatedAABB.max[1];\n }\n\n /**\n * @return the internal width of the object according to its children.\n */\n getUnscaledWidth(): float {\n if (this._innerArea) {\n return this._innerArea.max[0] - this._innerArea.min[0];\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return this._unrotatedAABB.max[0] - this._unrotatedAABB.min[0];\n }\n\n /**\n * @return the internal height of the object according to its children.\n */\n getUnscaledHeight(): float {\n if (this._innerArea) {\n return this._innerArea.max[1] - this._innerArea.min[1];\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return this._unrotatedAABB.max[1] - this._unrotatedAABB.min[1];\n }\n\n /**\n * @returns the center X from the local origin (0;0).\n */\n getUnscaledCenterX(): float {\n if (this._customCenter) {\n return this._customCenter[0];\n }\n if (this._innerArea) {\n return (this._innerArea.min[0] + this._innerArea.max[0]) / 2;\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return (this._unrotatedAABB.min[0] + this._unrotatedAABB.max[0]) / 2;\n }\n\n /**\n * @returns the center Y from the local origin (0;0).\n */\n getUnscaledCenterY(): float {\n if (this._customCenter) {\n return this._customCenter[1];\n }\n if (this._innerArea) {\n return (this._innerArea.min[1] + this._innerArea.max[1]) / 2;\n }\n if (this._isUntransformedHitBoxesDirty) {\n this._updateUntransformedHitBoxes();\n }\n return (this._unrotatedAABB.min[1] + this._unrotatedAABB.max[1]) / 2;\n }\n\n /**\n * The center of rotation is defined relatively to the origin (the object\n * position).\n * This avoids the center to move when children push the bounds.\n *\n * When no custom center is defined, it will move\n * to stay at the center of the children bounds.\n *\n * @param x coordinate of the custom center\n * @param y coordinate of the custom center\n */\n setRotationCenter(x: float, y: float) {\n if (!this._customCenter) {\n this._customCenter = [0, 0];\n }\n this._customCenter[0] = x;\n this._customCenter[1] = y;\n\n this._isLocalTransformationDirty = true;\n this.invalidateHitboxes();\n }\n\n hasCustomRotationCenter(): boolean {\n return !!this._customCenter;\n }\n\n override getCenterX(): float {\n return (\n (this.getUnscaledCenterX() - this._unrotatedAABB.min[0]) *\n this.getScaleX()\n );\n }\n\n override getCenterY(): float {\n return (\n (this.getUnscaledCenterY() - this._unrotatedAABB.min[1]) *\n this.getScaleY()\n );\n }\n\n override getWidth(): float {\n return this.getUnscaledWidth() * this.getScaleX();\n }\n\n override getHeight(): float {\n return this.getUnscaledHeight() * this.getScaleY();\n }\n\n override setWidth(newWidth: float): void {\n const unscaledWidth = this.getUnscaledWidth();\n if (unscaledWidth === 0) {\n return;\n }\n const scaleX = newWidth / unscaledWidth;\n if (this._innerArea && this._isInnerAreaFollowingParentSize) {\n this._innerArea.min[0] *= scaleX;\n this._innerArea.max[0] *= scaleX;\n } else {\n this.setScaleX(scaleX);\n }\n }\n\n override setHeight(newHeight: float): void {\n const unscaledHeight = this.getUnscaledHeight();\n if (unscaledHeight === 0) {\n return;\n }\n const scaleY = newHeight / unscaledHeight;\n if (this._innerArea && this._isInnerAreaFollowingParentSize) {\n this._innerArea.min[1] *= scaleY;\n this._innerArea.max[1] *= scaleY;\n } else {\n this.setScaleY(scaleY);\n }\n }\n\n /**\n * Change the size of the object.\n *\n * @param newWidth The new width of the object, in pixels.\n * @param newHeight The new height of the object, in pixels.\n */\n setSize(newWidth: float, newHeight: float): void {\n this.setWidth(newWidth);\n this.setHeight(newHeight);\n }\n\n override setX(x: float): void {\n if (x === this.x) {\n return;\n }\n this.x = x;\n this._isLocalTransformationDirty = true;\n this.invalidateHitboxes();\n this.getRenderer().updateX();\n }\n\n override setY(y: float): void {\n if (y === this.y) {\n return;\n }\n this.y = y;\n this._isLocalTransformationDirty = true;\n this.invalidateHitboxes();\n this.getRenderer().updateY();\n }\n\n override setAngle(angle: float): void {\n if (this.angle === angle) {\n return;\n }\n this.angle = angle;\n this._isLocalTransformationDirty = true;\n this.invalidateHitboxes();\n this.getRenderer().updateAngle();\n }\n\n /**\n * Change the scale on X and Y axis of the object.\n *\n * @param newScale The new scale (must be greater than 0).\n */\n setScale(newScale: float): void {\n if (this._innerArea && this._isInnerAreaFollowingParentSize) {\n // The scale is always 1;\n return;\n }\n if (newScale < 0) {\n newScale = 0;\n }\n if (\n newScale === Math.abs(this._scaleX) &&\n newScale === Math.abs(this._scaleY)\n ) {\n return;\n }\n this._scaleX = newScale * (this._flippedX ? -1 : 1);\n this._scaleY = newScale * (this._flippedY ? -1 : 1);\n this._isLocalTransformationDirty = true;\n this.invalidateHitboxes();\n this.getRenderer().update();\n }\n\n /**\n * Change the scale on X axis of the object (changing its width).\n *\n * @param newScale The new scale (must be greater than 0).\n */\n setScaleX(newScale: float): void {\n if (this._innerArea && this._isInnerAreaFollowingParentSize) {\n // The scale is always 1;\n return;\n }\n if (newScale < 0) {\n newScale = 0;\n }\n if (newScale === Math.abs(this._scaleX)) {\n return;\n }\n this._scaleX = newScale * (this._flippedX ? -1 : 1);\n this._isLocalTransformationDirty = true;\n this.invalidateHitboxes();\n this.getRenderer().update();\n }\n\n /**\n * Change the scale on Y axis of the object (changing its height).\n *\n * @param newScale The new scale (must be greater than 0).\n */\n setScaleY(newScale: float): void {\n if (this._innerArea && this._isInnerAreaFollowingParentSize) {\n // The scale is always 1;\n return;\n }\n if (newScale < 0) {\n newScale = 0;\n }\n if (newScale === Math.abs(this._scaleY)) {\n return;\n }\n this._scaleY = newScale * (this._flippedY ? -1 : 1);\n this.invalidateHitboxes();\n this.getRenderer().update();\n }\n\n /**\n * Get the scale of the object (or the arithmetic mean of the X and Y scale in case they are different).\n *\n * @return the scale of the object (or the arithmetic mean of the X and Y scale in case they are different).\n * @deprecated Use `getScale` instead.\n */\n getScaleMean(): float {\n return (Math.abs(this._scaleX) + Math.abs(this._scaleY)) / 2.0;\n }\n\n /**\n * Get the scale of the object (or the geometric mean of the X and Y scale in case they are different).\n *\n * @return the scale of the object (or the geometric mean of the X and Y scale in case they are different).\n */\n getScale(): float {\n const scaleX = Math.abs(this._scaleX);\n const scaleY = Math.abs(this._scaleY);\n return scaleX === scaleY ? scaleX : Math.sqrt(scaleX * scaleY);\n }\n\n /**\n * Get the scale of the object on Y axis.\n *\n * @return the scale of the object on Y axis\n */\n getScaleY(): float {\n return Math.abs(this._scaleY);\n }\n\n /**\n * Get the scale of the object on X axis.\n *\n * @return the scale of the object on X axis\n */\n getScaleX(): float {\n return Math.abs(this._scaleX);\n }\n\n // Visibility and display :\n\n setOpacity(opacity: float): void {\n if (opacity < 0) {\n opacity = 0;\n }\n if (opacity > 255) {\n opacity = 255;\n }\n this.opacity = opacity;\n this.getRenderer().updateOpacity();\n }\n\n getOpacity(): number {\n return this.opacity;\n }\n\n override hide(enable: boolean): void {\n if (enable === undefined) {\n enable = true;\n }\n this.hidden = enable;\n this.getRenderer().updateVisibility();\n }\n\n flipX(enable: boolean) {\n if (enable !== this._flippedX) {\n this._scaleX *= -1;\n this._flippedX = enable;\n this.invalidateHitboxes();\n this.getRenderer().update();\n }\n }\n\n flipY(enable: boolean) {\n if (enable !== this._flippedY) {\n this._scaleY *= -1;\n this._flippedY = enable;\n this.invalidateHitboxes();\n this.getRenderer().update();\n }\n }\n\n isFlippedX(): boolean {\n return this._flippedX;\n }\n\n isFlippedY(): boolean {\n return this._flippedY;\n }\n\n /**\n * Return the sprite animator.\n *\n * It returns `null` when custom objects don't have the Animatable capability.\n */\n getAnimator(): gdjs.SpriteAnimator<any> | null {\n return null;\n }\n }\n\n // Others initialization and internal state management :\n // TODO EBO Activate and test instance recycling.\n CustomRuntimeObject.supportsReinitialization = false;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- var gdjs;(function(s){class l extends s.RuntimeInstanceContainer{constructor(t,n){super();this._isLoaded=!1;this._initialInnerArea=null;this._parent=t,this._customObject=n,this._runtimeScene=t.getScene(),this._debuggerRenderer=new s.DebuggerRenderer(this)}addLayer(t){const n=new s.RuntimeCustomObjectLayer(t,this);this._layers.put(t.name,n),this._orderedLayers.push(n)}createObject(t){const n=super.createObject(t);return this._customObject.onChildrenLocationChanged(),n}loadFrom(t,n){this._isLoaded&&this.onDestroyFromScene(this._parent),this._setOriginalInnerArea(n);for(let r=0,e=n.objects.length;r<e;++r){const i=n.objects[r];t.childrenContent?this.registerObject({...i,...t.childrenContent[i.name]}):this.registerObject(i)}if(n.layers.length>0)for(let r=0,e=n.layers.length;r<e;++r)this.addLayer(n.layers[r]);else this.addLayer({name:"",visibility:!0,cameras:[{defaultSize:!0,defaultViewport:!0,height:0,viewportBottom:0,viewportLeft:0,viewportRight:0,viewportTop:0,width:0}],effects:[],ambientLightColorR:0,ambientLightColorG:0,ambientLightColorB:0,isLightingLayer:!1,followBaseLayerCamera:!1});this.createObjectsFrom(n.instances,0,0,0,!0),this._setLayerDefaultZOrders(),this._isLoaded=!0}_setOriginalInnerArea(t){t.instances.length>0&&(t._initialInnerArea||(t._initialInnerArea={min:[t.areaMinX,t.areaMinY,t.areaMinZ],max:[t.areaMaxX,t.areaMaxY,t.areaMaxZ]}),this._initialInnerArea=t._initialInnerArea)}onDestroyFromScene(t){if(!this._isLoaded)return;const n=this.getAdhocListOfAllInstances();for(let r=0,e=n.length;r<e;++r){const i=n[r];i.onDeletedFromScene(this),i.onDestroyed()}this._destroy(),this._isLoaded=!1}_destroy(){super._destroy(),this._onceTriggers=null}_updateObjectsPreRender(){const t=this.getAdhocListOfAllInstances();for(let n=0,r=t.length;n<r;++n){const e=t[n],i=e.getRendererObject();i&&(i.visible=!e.isHidden(),i.visible&&this.getGame().getEffectsManager().updatePreRender(e.getRendererEffects(),e)),this._debugDrawEnabled&&this._debuggerRenderer.renderDebugDraw(t,this._debugDrawShowHiddenInstances,this._debugDrawShowPointsNames,this._debugDrawShowCustomPoints),e.updatePreRender(this)}}_updateObjectsPreEvents(){const t=this.getAdhocListOfAllInstances();for(let n=0,r=t.length;n<r;++n){const e=t[n],i=e.getElapsedTime();if(e.hasNoForces())e.update(this);else{const a=e.getAverageForce(),o=i/1e3;e.setX(e.getX()+a.getX()*o),e.setY(e.getY()+a.getY()*o),e.update(this),e.updateForces(o)}e.updateTimers(i),e.stepBehaviorsPreEvents(this)}this._cacheOrClearRemovedInstances()}getRenderer(){return this._customObject.getRenderer()}getDebuggerRenderer(){return this._debuggerRenderer}getGame(){return this._runtimeScene.getGame()}getScene(){return this._runtimeScene}getOwner(){return this._customObject}getAsyncTasksManager(){return this._runtimeScene.getAsyncTasksManager()}getUnrotatedViewportMinX(){return this._customObject.getInnerAreaMinX()}getUnrotatedViewportMinY(){return this._customObject.getInnerAreaMinY()}getUnrotatedViewportMaxX(){return this._customObject.getInnerAreaMaxX()}getUnrotatedViewportMaxY(){return this._customObject.getInnerAreaMaxY()}getInitialUnrotatedViewportMinX(){return this._initialInnerArea?this._initialInnerArea.min[0]:0}getInitialUnrotatedViewportMinY(){return this._initialInnerArea?this._initialInnerArea.min[1]:0}getInitialUnrotatedViewportMaxX(){return this._initialInnerArea?this._initialInnerArea.max[0]:0}getInitialUnrotatedViewportMaxY(){return this._initialInnerArea?this._initialInnerArea.max[1]:0}getViewportWidth(){return this._customObject.getUnscaledWidth()}getViewportHeight(){return this._customObject.getUnscaledHeight()}getViewportOriginX(){return this._customObject.getUnscaledCenterX()}getViewportOriginY(){return this._customObject.getUnscaledCenterY()}onChildrenLocationChanged(){this._customObject.onChildrenLocationChanged()}convertCoords(t,n,r){let e=r||[0,0];return e=this._parent.getLayer(this._customObject.getLayer()).convertCoords(t,n,0,e),this._customObject.applyObjectInverseTransformation(e[0],e[1],e),e}convertInverseCoords(t,n,r){const e=r||[0,0];return this._customObject.applyObjectTransformation(t,n,e),this._parent.convertInverseCoords(e[0],e[1],e)}getElapsedTime(){return this._parent.getElapsedTime()}}s.CustomRuntimeObjectInstanceContainer=l})(gdjs||(gdjs={}));
1
+ var gdjs;(function(s){class l extends s.RuntimeInstanceContainer{constructor(t,n){super();this._isLoaded=!1;this._initialInnerArea=null;this._parent=t,this._customObject=n,this._runtimeScene=t.getScene(),this._debuggerRenderer=new s.DebuggerRenderer(this)}addLayer(t){const n=new s.RuntimeCustomObjectLayer(t,this);this._layers.put(t.name,n),this._orderedLayers.push(n)}createObject(t){const n=super.createObject(t);return this._customObject.onChildrenLocationChanged(),n}loadFrom(t,n){this._isLoaded&&this.onDestroyFromScene(this._parent),this._setOriginalInnerArea(n);for(let r=0,e=n.objects.length;r<e;++r){const i=n.objects[r];t.childrenContent&&!n.name?this.registerObject({...i,...t.childrenContent[i.name]}):this.registerObject(i)}if(n.layers.length>0)for(let r=0,e=n.layers.length;r<e;++r)this.addLayer(n.layers[r]);else this.addLayer({name:"",visibility:!0,cameras:[{defaultSize:!0,defaultViewport:!0,height:0,viewportBottom:0,viewportLeft:0,viewportRight:0,viewportTop:0,width:0}],effects:[],ambientLightColorR:0,ambientLightColorG:0,ambientLightColorB:0,isLightingLayer:!1,followBaseLayerCamera:!1});this.createObjectsFrom(n.instances,0,0,0,!0),this._setLayerDefaultZOrders(),this._isLoaded=!0}_setOriginalInnerArea(t){t.instances.length>0&&(t._initialInnerArea||(t._initialInnerArea={min:[t.areaMinX,t.areaMinY,t.areaMinZ],max:[t.areaMaxX,t.areaMaxY,t.areaMaxZ]}),this._initialInnerArea=t._initialInnerArea)}onDestroyFromScene(t){if(!this._isLoaded)return;const n=this.getAdhocListOfAllInstances();for(let r=0,e=n.length;r<e;++r){const i=n[r];i.onDeletedFromScene(this),i.onDestroyed()}this._destroy(),this._isLoaded=!1}_destroy(){super._destroy(),this._onceTriggers=null}_updateObjectsPreRender(){const t=this.getAdhocListOfAllInstances();for(let n=0,r=t.length;n<r;++n){const e=t[n],i=e.getRendererObject();i&&(i.visible=!e.isHidden(),i.visible&&this.getGame().getEffectsManager().updatePreRender(e.getRendererEffects(),e)),this._debugDrawEnabled&&this._debuggerRenderer.renderDebugDraw(t,this._debugDrawShowHiddenInstances,this._debugDrawShowPointsNames,this._debugDrawShowCustomPoints),e.updatePreRender(this)}}_updateObjectsPreEvents(){const t=this.getAdhocListOfAllInstances();for(let n=0,r=t.length;n<r;++n){const e=t[n],i=e.getElapsedTime();if(e.hasNoForces())e.update(this);else{const a=e.getAverageForce(),o=i/1e3;e.setX(e.getX()+a.getX()*o),e.setY(e.getY()+a.getY()*o),e.update(this),e.updateForces(o)}e.updateTimers(i),e.stepBehaviorsPreEvents(this)}this._cacheOrClearRemovedInstances()}getRenderer(){return this._customObject.getRenderer()}getDebuggerRenderer(){return this._debuggerRenderer}getGame(){return this._runtimeScene.getGame()}getScene(){return this._runtimeScene}getOwner(){return this._customObject}getAsyncTasksManager(){return this._runtimeScene.getAsyncTasksManager()}getUnrotatedViewportMinX(){return this._customObject.getInnerAreaMinX()}getUnrotatedViewportMinY(){return this._customObject.getInnerAreaMinY()}getUnrotatedViewportMaxX(){return this._customObject.getInnerAreaMaxX()}getUnrotatedViewportMaxY(){return this._customObject.getInnerAreaMaxY()}getInitialUnrotatedViewportMinX(){return this._initialInnerArea?this._initialInnerArea.min[0]:0}getInitialUnrotatedViewportMinY(){return this._initialInnerArea?this._initialInnerArea.min[1]:0}getInitialUnrotatedViewportMaxX(){return this._initialInnerArea?this._initialInnerArea.max[0]:0}getInitialUnrotatedViewportMaxY(){return this._initialInnerArea?this._initialInnerArea.max[1]:0}getViewportWidth(){return this._customObject.getUnscaledWidth()}getViewportHeight(){return this._customObject.getUnscaledHeight()}getViewportOriginX(){return this._customObject.getUnscaledCenterX()}getViewportOriginY(){return this._customObject.getUnscaledCenterY()}onChildrenLocationChanged(){this._customObject.onChildrenLocationChanged()}convertCoords(t,n,r){let e=r||[0,0];return e=this._parent.getLayer(this._customObject.getLayer()).convertCoords(t,n,0,e),this._customObject.applyObjectInverseTransformation(e[0],e[1],e),e}convertInverseCoords(t,n,r){const e=r||[0,0];return this._customObject.applyObjectTransformation(t,n,e),this._parent.convertInverseCoords(e[0],e[1],e)}getElapsedTime(){return this._parent.getElapsedTime()}}s.CustomRuntimeObjectInstanceContainer=l})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=CustomRuntimeObjectInstanceContainer.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../GDevelop/GDJS/Runtime/CustomRuntimeObjectInstanceContainer.ts"],
4
- "sourcesContent": ["/*\n * GDevelop JS Platform\n * Copyright 2013-2022 Florian Rival (Florian.Rival@gmail.com). All rights reserved.\n * This project is released under the MIT License.\n */\nnamespace gdjs {\n /**\n * The instance container of a custom object, containing instances of objects rendered on screen.\n *\n * @see gdjs.CustomRuntimeObject\n */\n export class CustomRuntimeObjectInstanceContainer extends gdjs.RuntimeInstanceContainer {\n _debuggerRenderer: gdjs.DebuggerRenderer;\n _runtimeScene: gdjs.RuntimeScene;\n /** The parent container that contains the object associated with this container. */\n _parent: gdjs.RuntimeInstanceContainer;\n /** The object that is built with the instances of this container. */\n _customObject: gdjs.CustomRuntimeObject;\n _isLoaded: boolean = false;\n /**\n * The default size defined by users in the custom object initial instances editor.\n *\n * Don't modify it as it would affect every instance.\n *\n * @see gdjs.CustomRuntimeObject._innerArea\n **/\n private _initialInnerArea: {\n min: [float, float, float];\n max: [float, float, float];\n } | null = null;\n\n /**\n * @param parent the parent container that contains the object associated\n * with this container.\n * @param customObject the object that is built with the instances of this\n * container.\n */\n constructor(\n parent: gdjs.RuntimeInstanceContainer,\n customObject: gdjs.CustomRuntimeObject\n ) {\n super();\n this._parent = parent;\n this._customObject = customObject;\n this._runtimeScene = parent.getScene();\n this._debuggerRenderer = new gdjs.DebuggerRenderer(this);\n }\n\n addLayer(layerData: LayerData) {\n const layer = new gdjs.RuntimeCustomObjectLayer(layerData, this);\n this._layers.put(layerData.name, layer);\n this._orderedLayers.push(layer);\n }\n\n createObject(objectName: string): gdjs.RuntimeObject | null {\n const result = super.createObject(objectName);\n this._customObject.onChildrenLocationChanged();\n return result;\n }\n\n /**\n * Load the container from the given initial configuration.\n * @param customObjectData An object containing the container data.\n * @see gdjs.RuntimeGame#getSceneAndExtensionsData\n */\n loadFrom(\n customObjectData: ObjectData & CustomObjectConfiguration,\n eventsBasedObjectData: EventsBasedObjectData\n ) {\n if (this._isLoaded) {\n this.onDestroyFromScene(this._parent);\n }\n\n this._setOriginalInnerArea(eventsBasedObjectData);\n\n // Registering objects\n for (\n let i = 0, len = eventsBasedObjectData.objects.length;\n i < len;\n ++i\n ) {\n const childObjectData = eventsBasedObjectData.objects[i];\n if (customObjectData.childrenContent) {\n this.registerObject({\n ...childObjectData,\n // The custom object overrides its events-based object configuration.\n ...customObjectData.childrenContent[childObjectData.name],\n });\n } else {\n // The custom object follows its events-based object configuration.\n this.registerObject(childObjectData);\n }\n }\n\n if (eventsBasedObjectData.layers.length > 0) {\n // Load layers\n for (\n let i = 0, len = eventsBasedObjectData.layers.length;\n i < len;\n ++i\n ) {\n this.addLayer(eventsBasedObjectData.layers[i]);\n }\n } else {\n // Add a default layer\n this.addLayer({\n name: '',\n visibility: true,\n cameras: [\n {\n defaultSize: true,\n defaultViewport: true,\n height: 0,\n viewportBottom: 0,\n viewportLeft: 0,\n viewportRight: 0,\n viewportTop: 0,\n width: 0,\n },\n ],\n effects: [],\n ambientLightColorR: 0,\n ambientLightColorG: 0,\n ambientLightColorB: 0,\n isLightingLayer: false,\n followBaseLayerCamera: false,\n });\n }\n\n this.createObjectsFrom(\n eventsBasedObjectData.instances,\n 0,\n 0,\n 0,\n // TODO EBO: handle hot-reloading for custom objects (including nested custom objects)\n true\n );\n\n // Set up the default z order (for objects created from events)\n this._setLayerDefaultZOrders();\n\n this._isLoaded = true;\n }\n\n /**\n * Initialize `_initialInnerArea` if it doesn't exist.\n * `_initialInnerArea` is shared by every instance to save memory.\n */\n private _setOriginalInnerArea(\n eventsBasedObjectData: EventsBasedObjectData\n ) {\n if (eventsBasedObjectData.instances.length > 0) {\n if (!eventsBasedObjectData._initialInnerArea) {\n eventsBasedObjectData._initialInnerArea = {\n min: [\n eventsBasedObjectData.areaMinX,\n eventsBasedObjectData.areaMinY,\n eventsBasedObjectData.areaMinZ,\n ],\n max: [\n eventsBasedObjectData.areaMaxX,\n eventsBasedObjectData.areaMaxY,\n eventsBasedObjectData.areaMaxZ,\n ],\n };\n }\n this._initialInnerArea = eventsBasedObjectData._initialInnerArea;\n }\n }\n\n /**\n * Called when the associated object is destroyed (because it is removed\n * from its parent container or the scene is being unloaded).\n *\n * @param instanceContainer The container owning the object.\n */\n onDestroyFromScene(instanceContainer: gdjs.RuntimeInstanceContainer): void {\n if (!this._isLoaded) {\n return;\n }\n\n // Notify the objects they are being destroyed\n const allInstancesList = this.getAdhocListOfAllInstances();\n for (let i = 0, len = allInstancesList.length; i < len; ++i) {\n const object = allInstancesList[i];\n object.onDeletedFromScene(this);\n // The object can free all its resource directly...\n object.onDestroyed();\n }\n // ...as its container cache `_instancesRemoved` is also destroy.\n this._destroy();\n\n this._isLoaded = false;\n }\n\n _destroy() {\n // It should not be necessary to reset these variables, but this help\n // ensuring that all memory related to the container is released immediately.\n super._destroy();\n // @ts-ignore We are deleting the object\n this._onceTriggers = null;\n }\n\n /**\n * Called to update visibility of the renderers of objects\n * rendered on the scene (\"culling\"), update effects (of visible objects)\n * and give a last chance for objects to update before rendering.\n *\n * Visibility is set to false if object is hidden, or if\n * object is too far from the camera of its layer (\"culling\").\n */\n _updateObjectsPreRender() {\n const allInstancesList = this.getAdhocListOfAllInstances();\n // TODO (3D) culling - add support for 3D object culling?\n for (let i = 0, len = allInstancesList.length; i < len; ++i) {\n const object = allInstancesList[i];\n const rendererObject = object.getRendererObject();\n if (rendererObject) {\n rendererObject.visible = !object.isHidden();\n\n // Update effects, only for visible objects.\n if (rendererObject.visible) {\n this.getGame()\n .getEffectsManager()\n .updatePreRender(object.getRendererEffects(), object);\n }\n }\n\n // Set to true to enable debug rendering (look for the implementation in the renderer\n // to see what is rendered).\n if (this._debugDrawEnabled) {\n this._debuggerRenderer.renderDebugDraw(\n allInstancesList,\n this._debugDrawShowHiddenInstances,\n this._debugDrawShowPointsNames,\n this._debugDrawShowCustomPoints\n );\n }\n\n // Perform pre-render update.\n object.updatePreRender(this);\n }\n return;\n }\n\n /**\n * Update the objects before launching the events.\n */\n _updateObjectsPreEvents() {\n const allInstancesList = this.getAdhocListOfAllInstances();\n for (let i = 0, len = allInstancesList.length; i < len; ++i) {\n const obj = allInstancesList[i];\n const elapsedTime = obj.getElapsedTime();\n if (!obj.hasNoForces()) {\n const averageForce = obj.getAverageForce();\n const elapsedTimeInSeconds = elapsedTime / 1000;\n obj.setX(obj.getX() + averageForce.getX() * elapsedTimeInSeconds);\n obj.setY(obj.getY() + averageForce.getY() * elapsedTimeInSeconds);\n obj.update(this);\n obj.updateForces(elapsedTimeInSeconds);\n } else {\n obj.update(this);\n }\n obj.updateTimers(elapsedTime);\n obj.stepBehaviorsPreEvents(this);\n }\n\n // Some behaviors may have request objects to be deleted.\n this._cacheOrClearRemovedInstances();\n }\n\n /**\n * Get the renderer associated to the RuntimeScene.\n */\n getRenderer():\n | gdjs.CustomRuntimeObject2DRenderer\n | gdjs.CustomRuntimeObject3DRenderer {\n return this._customObject.getRenderer();\n }\n\n getDebuggerRenderer() {\n return this._debuggerRenderer;\n }\n\n getGame() {\n return this._runtimeScene.getGame();\n }\n\n getScene() {\n return this._runtimeScene;\n }\n\n getOwner(): gdjs.CustomRuntimeObject {\n return this._customObject;\n }\n\n getAsyncTasksManager(): AsyncTasksManager {\n return this._runtimeScene.getAsyncTasksManager();\n }\n\n getUnrotatedViewportMinX(): float {\n return this._customObject.getInnerAreaMinX();\n }\n\n getUnrotatedViewportMinY(): float {\n return this._customObject.getInnerAreaMinY();\n }\n\n getUnrotatedViewportMaxX(): float {\n return this._customObject.getInnerAreaMaxX();\n }\n\n getUnrotatedViewportMaxY(): float {\n return this._customObject.getInnerAreaMaxY();\n }\n\n getInitialUnrotatedViewportMinX(): float {\n return this._initialInnerArea ? this._initialInnerArea.min[0] : 0;\n }\n\n getInitialUnrotatedViewportMinY(): float {\n return this._initialInnerArea ? this._initialInnerArea.min[1] : 0;\n }\n\n getInitialUnrotatedViewportMaxX(): float {\n return this._initialInnerArea ? this._initialInnerArea.max[0] : 0;\n }\n\n getInitialUnrotatedViewportMaxY(): float {\n return this._initialInnerArea ? this._initialInnerArea.max[1] : 0;\n }\n\n getViewportWidth(): float {\n return this._customObject.getUnscaledWidth();\n }\n\n getViewportHeight(): float {\n return this._customObject.getUnscaledHeight();\n }\n\n getViewportOriginX(): float {\n return this._customObject.getUnscaledCenterX();\n }\n\n getViewportOriginY(): float {\n return this._customObject.getUnscaledCenterY();\n }\n\n onChildrenLocationChanged(): void {\n this._customObject.onChildrenLocationChanged();\n }\n\n convertCoords(x: float, y: float, result: FloatPoint): FloatPoint {\n // The result parameter used to be optional.\n let position = result || [0, 0];\n position = this._parent\n .getLayer(this._customObject.getLayer())\n .convertCoords(x, y, 0, position);\n this._customObject.applyObjectInverseTransformation(\n position[0],\n position[1],\n position\n );\n return position;\n }\n\n convertInverseCoords(\n sceneX: float,\n sceneY: float,\n result: FloatPoint\n ): FloatPoint {\n const position = result || [0, 0];\n this._customObject.applyObjectTransformation(sceneX, sceneY, position);\n return this._parent.convertInverseCoords(\n position[0],\n position[1],\n position\n );\n }\n\n /**\n * Return the time elapsed since the last frame,\n * in milliseconds, for objects on the layer.\n */\n getElapsedTime(): float {\n return this._parent.getElapsedTime();\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\n * GDevelop JS Platform\n * Copyright 2013-2022 Florian Rival (Florian.Rival@gmail.com). All rights reserved.\n * This project is released under the MIT License.\n */\nnamespace gdjs {\n /**\n * The instance container of a custom object, containing instances of objects rendered on screen.\n *\n * @see gdjs.CustomRuntimeObject\n */\n export class CustomRuntimeObjectInstanceContainer extends gdjs.RuntimeInstanceContainer {\n _debuggerRenderer: gdjs.DebuggerRenderer;\n _runtimeScene: gdjs.RuntimeScene;\n /** The parent container that contains the object associated with this container. */\n _parent: gdjs.RuntimeInstanceContainer;\n /** The object that is built with the instances of this container. */\n _customObject: gdjs.CustomRuntimeObject;\n _isLoaded: boolean = false;\n /**\n * The default size defined by users in the custom object initial instances editor.\n *\n * Don't modify it as it would affect every instance.\n *\n * @see gdjs.CustomRuntimeObject._innerArea\n **/\n private _initialInnerArea: {\n min: [float, float, float];\n max: [float, float, float];\n } | null = null;\n\n /**\n * @param parent the parent container that contains the object associated\n * with this container.\n * @param customObject the object that is built with the instances of this\n * container.\n */\n constructor(\n parent: gdjs.RuntimeInstanceContainer,\n customObject: gdjs.CustomRuntimeObject\n ) {\n super();\n this._parent = parent;\n this._customObject = customObject;\n this._runtimeScene = parent.getScene();\n this._debuggerRenderer = new gdjs.DebuggerRenderer(this);\n }\n\n addLayer(layerData: LayerData) {\n const layer = new gdjs.RuntimeCustomObjectLayer(layerData, this);\n this._layers.put(layerData.name, layer);\n this._orderedLayers.push(layer);\n }\n\n createObject(objectName: string): gdjs.RuntimeObject | null {\n const result = super.createObject(objectName);\n this._customObject.onChildrenLocationChanged();\n return result;\n }\n\n /**\n * Load the container from the given initial configuration.\n * @param customObjectData An object containing the container data.\n * @see gdjs.RuntimeGame#getSceneAndExtensionsData\n */\n loadFrom(\n customObjectData: ObjectData & CustomObjectConfiguration,\n eventsBasedObjectVariantData: EventsBasedObjectVariantData\n ) {\n if (this._isLoaded) {\n this.onDestroyFromScene(this._parent);\n }\n\n this._setOriginalInnerArea(eventsBasedObjectVariantData);\n\n // Registering objects\n for (\n let i = 0, len = eventsBasedObjectVariantData.objects.length;\n i < len;\n ++i\n ) {\n const childObjectData = eventsBasedObjectVariantData.objects[i];\n // The children configuration override only applies to the default variant.\n if (\n customObjectData.childrenContent &&\n !eventsBasedObjectVariantData.name\n ) {\n this.registerObject({\n ...childObjectData,\n // The custom object overrides its events-based object configuration.\n ...customObjectData.childrenContent[childObjectData.name],\n });\n } else {\n // The custom object follows its events-based object configuration.\n this.registerObject(childObjectData);\n }\n }\n\n if (eventsBasedObjectVariantData.layers.length > 0) {\n // Load layers\n for (\n let i = 0, len = eventsBasedObjectVariantData.layers.length;\n i < len;\n ++i\n ) {\n this.addLayer(eventsBasedObjectVariantData.layers[i]);\n }\n } else {\n // Add a default layer\n this.addLayer({\n name: '',\n visibility: true,\n cameras: [\n {\n defaultSize: true,\n defaultViewport: true,\n height: 0,\n viewportBottom: 0,\n viewportLeft: 0,\n viewportRight: 0,\n viewportTop: 0,\n width: 0,\n },\n ],\n effects: [],\n ambientLightColorR: 0,\n ambientLightColorG: 0,\n ambientLightColorB: 0,\n isLightingLayer: false,\n followBaseLayerCamera: false,\n });\n }\n\n this.createObjectsFrom(\n eventsBasedObjectVariantData.instances,\n 0,\n 0,\n 0,\n // TODO EBO: handle hot-reloading for custom objects (including nested custom objects)\n true\n );\n\n // Set up the default z order (for objects created from events)\n this._setLayerDefaultZOrders();\n\n this._isLoaded = true;\n }\n\n /**\n * Initialize `_initialInnerArea` if it doesn't exist.\n * `_initialInnerArea` is shared by every instance to save memory.\n */\n private _setOriginalInnerArea(\n eventsBasedObjectData: EventsBasedObjectVariantData\n ) {\n if (eventsBasedObjectData.instances.length > 0) {\n if (!eventsBasedObjectData._initialInnerArea) {\n eventsBasedObjectData._initialInnerArea = {\n min: [\n eventsBasedObjectData.areaMinX,\n eventsBasedObjectData.areaMinY,\n eventsBasedObjectData.areaMinZ,\n ],\n max: [\n eventsBasedObjectData.areaMaxX,\n eventsBasedObjectData.areaMaxY,\n eventsBasedObjectData.areaMaxZ,\n ],\n };\n }\n this._initialInnerArea = eventsBasedObjectData._initialInnerArea;\n }\n }\n\n /**\n * Called when the associated object is destroyed (because it is removed\n * from its parent container or the scene is being unloaded).\n *\n * @param instanceContainer The container owning the object.\n */\n onDestroyFromScene(instanceContainer: gdjs.RuntimeInstanceContainer): void {\n if (!this._isLoaded) {\n return;\n }\n\n // Notify the objects they are being destroyed\n const allInstancesList = this.getAdhocListOfAllInstances();\n for (let i = 0, len = allInstancesList.length; i < len; ++i) {\n const object = allInstancesList[i];\n object.onDeletedFromScene(this);\n // The object can free all its resource directly...\n object.onDestroyed();\n }\n // ...as its container cache `_instancesRemoved` is also destroy.\n this._destroy();\n\n this._isLoaded = false;\n }\n\n _destroy() {\n // It should not be necessary to reset these variables, but this help\n // ensuring that all memory related to the container is released immediately.\n super._destroy();\n // @ts-ignore We are deleting the object\n this._onceTriggers = null;\n }\n\n /**\n * Called to update visibility of the renderers of objects\n * rendered on the scene (\"culling\"), update effects (of visible objects)\n * and give a last chance for objects to update before rendering.\n *\n * Visibility is set to false if object is hidden, or if\n * object is too far from the camera of its layer (\"culling\").\n */\n _updateObjectsPreRender() {\n const allInstancesList = this.getAdhocListOfAllInstances();\n // TODO (3D) culling - add support for 3D object culling?\n for (let i = 0, len = allInstancesList.length; i < len; ++i) {\n const object = allInstancesList[i];\n const rendererObject = object.getRendererObject();\n if (rendererObject) {\n rendererObject.visible = !object.isHidden();\n\n // Update effects, only for visible objects.\n if (rendererObject.visible) {\n this.getGame()\n .getEffectsManager()\n .updatePreRender(object.getRendererEffects(), object);\n }\n }\n\n // Set to true to enable debug rendering (look for the implementation in the renderer\n // to see what is rendered).\n if (this._debugDrawEnabled) {\n this._debuggerRenderer.renderDebugDraw(\n allInstancesList,\n this._debugDrawShowHiddenInstances,\n this._debugDrawShowPointsNames,\n this._debugDrawShowCustomPoints\n );\n }\n\n // Perform pre-render update.\n object.updatePreRender(this);\n }\n return;\n }\n\n /**\n * Update the objects before launching the events.\n */\n _updateObjectsPreEvents() {\n const allInstancesList = this.getAdhocListOfAllInstances();\n for (let i = 0, len = allInstancesList.length; i < len; ++i) {\n const obj = allInstancesList[i];\n const elapsedTime = obj.getElapsedTime();\n if (!obj.hasNoForces()) {\n const averageForce = obj.getAverageForce();\n const elapsedTimeInSeconds = elapsedTime / 1000;\n obj.setX(obj.getX() + averageForce.getX() * elapsedTimeInSeconds);\n obj.setY(obj.getY() + averageForce.getY() * elapsedTimeInSeconds);\n obj.update(this);\n obj.updateForces(elapsedTimeInSeconds);\n } else {\n obj.update(this);\n }\n obj.updateTimers(elapsedTime);\n obj.stepBehaviorsPreEvents(this);\n }\n\n // Some behaviors may have request objects to be deleted.\n this._cacheOrClearRemovedInstances();\n }\n\n /**\n * Get the renderer associated to the RuntimeScene.\n */\n getRenderer():\n | gdjs.CustomRuntimeObject2DRenderer\n | gdjs.CustomRuntimeObject3DRenderer {\n return this._customObject.getRenderer();\n }\n\n getDebuggerRenderer() {\n return this._debuggerRenderer;\n }\n\n getGame() {\n return this._runtimeScene.getGame();\n }\n\n getScene() {\n return this._runtimeScene;\n }\n\n getOwner(): gdjs.CustomRuntimeObject {\n return this._customObject;\n }\n\n getAsyncTasksManager(): AsyncTasksManager {\n return this._runtimeScene.getAsyncTasksManager();\n }\n\n getUnrotatedViewportMinX(): float {\n return this._customObject.getInnerAreaMinX();\n }\n\n getUnrotatedViewportMinY(): float {\n return this._customObject.getInnerAreaMinY();\n }\n\n getUnrotatedViewportMaxX(): float {\n return this._customObject.getInnerAreaMaxX();\n }\n\n getUnrotatedViewportMaxY(): float {\n return this._customObject.getInnerAreaMaxY();\n }\n\n getInitialUnrotatedViewportMinX(): float {\n return this._initialInnerArea ? this._initialInnerArea.min[0] : 0;\n }\n\n getInitialUnrotatedViewportMinY(): float {\n return this._initialInnerArea ? this._initialInnerArea.min[1] : 0;\n }\n\n getInitialUnrotatedViewportMaxX(): float {\n return this._initialInnerArea ? this._initialInnerArea.max[0] : 0;\n }\n\n getInitialUnrotatedViewportMaxY(): float {\n return this._initialInnerArea ? this._initialInnerArea.max[1] : 0;\n }\n\n getViewportWidth(): float {\n return this._customObject.getUnscaledWidth();\n }\n\n getViewportHeight(): float {\n return this._customObject.getUnscaledHeight();\n }\n\n getViewportOriginX(): float {\n return this._customObject.getUnscaledCenterX();\n }\n\n getViewportOriginY(): float {\n return this._customObject.getUnscaledCenterY();\n }\n\n onChildrenLocationChanged(): void {\n this._customObject.onChildrenLocationChanged();\n }\n\n convertCoords(x: float, y: float, result: FloatPoint): FloatPoint {\n // The result parameter used to be optional.\n let position = result || [0, 0];\n position = this._parent\n .getLayer(this._customObject.getLayer())\n .convertCoords(x, y, 0, position);\n this._customObject.applyObjectInverseTransformation(\n position[0],\n position[1],\n position\n );\n return position;\n }\n\n convertInverseCoords(\n sceneX: float,\n sceneY: float,\n result: FloatPoint\n ): FloatPoint {\n const position = result || [0, 0];\n this._customObject.applyObjectTransformation(sceneX, sceneY, position);\n return this._parent.convertInverseCoords(\n position[0],\n position[1],\n position\n );\n }\n\n /**\n * Return the time elapsed since the last frame,\n * in milliseconds, for objects on the layer.\n */\n getElapsedTime(): float {\n return this._parent.getElapsedTime();\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- var gdjs;(function(a){let i;(function(t){t[t.None=0]="None",t[t.WindowLeft=1]="WindowLeft",t[t.WindowRight=2]="WindowRight",t[t.Proportional=3]="Proportional",t[t.WindowCenter=4]="WindowCenter"})(i||(i={}));let n;(function(t){t[t.None=0]="None",t[t.WindowTop=1]="WindowTop",t[t.WindowBottom=2]="WindowBottom",t[t.Proportional=3]="Proportional",t[t.WindowCenter=4]="WindowCenter"})(n||(n={}));class D extends a.RuntimeBehavior{constructor(e,o,r){super(e,o,r);this._useLegacyBottomAndRightAnchors=!1;this._hasJustBeenCreated=!0;this._leftEdgeDistance=0;this._rightEdgeDistance=0;this._topEdgeDistance=0;this._bottomEdgeDistance=0;this._oldDrawableX=0;this._oldDrawableY=0;this._oldWidth=0;this._oldHeight=0;this._parentOldMinX=0;this._parentOldMinY=0;this._parentOldMaxX=0;this._parentOldMaxY=0;this._relativeToOriginalWindowSize=!!o.relativeToOriginalWindowSize,this._leftEdgeAnchor=o.leftEdgeAnchor,this._rightEdgeAnchor=o.rightEdgeAnchor,this._topEdgeAnchor=o.topEdgeAnchor,this._bottomEdgeAnchor=o.bottomEdgeAnchor,this._useLegacyBottomAndRightAnchors=o.useLegacyBottomAndRightAnchors===void 0?!0:o.useLegacyBottomAndRightAnchors}updateFromBehaviorData(e,o){return e.leftEdgeAnchor!==o.leftEdgeAnchor&&(this._leftEdgeAnchor=o.leftEdgeAnchor),e.rightEdgeAnchor!==o.rightEdgeAnchor&&(this._rightEdgeAnchor=o.rightEdgeAnchor),e.topEdgeAnchor!==o.topEdgeAnchor&&(this._topEdgeAnchor=o.topEdgeAnchor),e.bottomEdgeAnchor!==o.bottomEdgeAnchor&&(this._bottomEdgeAnchor=o.bottomEdgeAnchor),e.useLegacyTrajectory!==o.useLegacyTrajectory&&(this._useLegacyBottomAndRightAnchors=o.useLegacyBottomAndRightAnchors),e.relativeToOriginalWindowSize===o.relativeToOriginalWindowSize}doStepPreEvents(e){(this._oldDrawableX!==this.owner.getDrawableX()||this._oldDrawableY!==this.owner.getDrawableY()||this._oldWidth!==this.owner.getWidth()||this._oldHeight!==this.owner.getHeight())&&this._updateAnchorDistances(e),(this._parentOldMinX!==e.getUnrotatedViewportMinX()||this._parentOldMinY!==e.getUnrotatedViewportMinY()||this._parentOldMaxX!==e.getUnrotatedViewportMaxX()||this._parentOldMaxY!==e.getUnrotatedViewportMaxY())&&this._followAnchor(e)}_updateAnchorDistances(e){const o=a.staticArray(a.AnchorRuntimeBehavior.prototype.doStepPreEvents),r=e.getLayer(this.owner.getLayer());let s=this._parentOldMinX,t=this._parentOldMinY,d=this._parentOldMaxX,l=this._parentOldMaxY;this._hasJustBeenCreated&&(this._relativeToOriginalWindowSize?(s=e.getInitialUnrotatedViewportMinX(),t=e.getInitialUnrotatedViewportMinY(),d=e.getInitialUnrotatedViewportMaxX(),l=e.getInitialUnrotatedViewportMaxY()):(s=e.getUnrotatedViewportMinX(),t=e.getUnrotatedViewportMinY(),d=e.getUnrotatedViewportMaxX(),l=e.getUnrotatedViewportMaxY()));const w=(d+s)/2,p=(l+t)/2,f=d-s,E=l-t,h=this._relativeToOriginalWindowSize?[this.owner.getDrawableX(),this.owner.getDrawableY()]:this._convertInverseCoords(e,r,this.owner.getDrawableX(),this.owner.getDrawableY(),o);this._leftEdgeAnchor===1?this._leftEdgeDistance=h[0]-s:this._leftEdgeAnchor===2?this._leftEdgeDistance=h[0]-d:this._leftEdgeAnchor===3?this._leftEdgeDistance=(h[0]-s)/f:this._leftEdgeAnchor===4&&(this._leftEdgeDistance=h[0]-w),this._topEdgeAnchor===1?this._topEdgeDistance=h[1]-t:this._topEdgeAnchor===2?this._topEdgeDistance=h[1]-l:this._topEdgeAnchor===3?this._topEdgeDistance=(h[1]-t)/E:this._topEdgeAnchor===4&&(this._topEdgeDistance=h[1]-p);const g=this._relativeToOriginalWindowSize?[this.owner.getDrawableX()+this.owner.getWidth(),this.owner.getDrawableY()+this.owner.getHeight()]:this._convertInverseCoords(e,r,this.owner.getDrawableX()+this.owner.getWidth(),this.owner.getDrawableY()+this.owner.getHeight(),o);this._rightEdgeAnchor===1?this._rightEdgeDistance=g[0]-s:this._rightEdgeAnchor===2?this._rightEdgeDistance=g[0]-d:this._rightEdgeAnchor===3?this._rightEdgeDistance=(g[0]-s)/f:this._rightEdgeAnchor===4&&(this._rightEdgeDistance=g[0]-w),this._bottomEdgeAnchor===1?this._bottomEdgeDistance=g[1]-t:this._bottomEdgeAnchor===2?this._bottomEdgeDistance=g[1]-l:this._bottomEdgeAnchor===3?this._bottomEdgeDistance=(g[1]-t)/E:this._bottomEdgeAnchor===4&&(this._bottomEdgeDistance=g[1]-p),this._hasJustBeenCreated=!1}_followAnchor(e){const o=a.staticArray(a.AnchorRuntimeBehavior.prototype.doStepPreEvents),r=e.getLayer(this.owner.getLayer());let s=e.getUnrotatedViewportMinX(),t=e.getUnrotatedViewportMinY(),d=e.getUnrotatedViewportMaxX(),l=e.getUnrotatedViewportMaxY();const w=(d+s)/2,p=(l+t)/2,f=d-s,E=l-t;let h=0,g=0,A=0,m=0;this._leftEdgeAnchor===1?h=s+this._leftEdgeDistance:this._leftEdgeAnchor===2?h=d+this._leftEdgeDistance:this._leftEdgeAnchor===3?h=s+this._leftEdgeDistance*f:this._leftEdgeAnchor===4&&(h=w+this._leftEdgeDistance),this._topEdgeAnchor===1?g=t+this._topEdgeDistance:this._topEdgeAnchor===2?g=l+this._topEdgeDistance:this._topEdgeAnchor===3?g=t+this._topEdgeDistance*E:this._topEdgeAnchor===4&&(g=p+this._topEdgeDistance),this._rightEdgeAnchor===1?A=s+this._rightEdgeDistance:this._rightEdgeAnchor===2?A=d+this._rightEdgeDistance:this._rightEdgeAnchor===3?A=s+this._rightEdgeDistance*f:this._rightEdgeAnchor===4&&(A=w+this._rightEdgeDistance),this._bottomEdgeAnchor===1?m=t+this._bottomEdgeDistance:this._bottomEdgeAnchor===2?m=l+this._bottomEdgeDistance:this._bottomEdgeAnchor===3?m=t+this._bottomEdgeDistance*E:this._bottomEdgeAnchor===4&&(m=p+this._bottomEdgeDistance);const Y=this._convertCoords(e,r,h,g,o);let _=Y[0],c=Y[1];const M=this._convertCoords(e,r,A,m,o),W=M[0],X=M[1];if(this._useLegacyBottomAndRightAnchors)this._rightEdgeAnchor!==0&&this.owner.setWidth(W-_),this._bottomEdgeAnchor!==0&&this.owner.setHeight(X-c),this._leftEdgeAnchor!==0&&this.owner.setX(_+this.owner.getX()-this.owner.getDrawableX()),this._topEdgeAnchor!==0&&this.owner.setY(c+this.owner.getY()-this.owner.getDrawableY());else{if(this._rightEdgeAnchor!==0&&this._leftEdgeAnchor!==0){const b=W-_;this.owner.setX(this.owner.getX()===this.owner.getDrawableX()?_:_+(this.owner.getX()-this.owner.getDrawableX())*b/this.owner.getWidth()),this.owner.setWidth(b)}else this._leftEdgeAnchor!==0&&this.owner.setX(_+this.owner.getX()-this.owner.getDrawableX()),this._rightEdgeAnchor!==0&&this.owner.setX(W+this.owner.getX()-this.owner.getDrawableX()-this.owner.getWidth());if(this._bottomEdgeAnchor!==0&&this._topEdgeAnchor!==0){const b=X-c;this.owner.setY(this.owner.getY()===this.owner.getDrawableY()?c:c+(this.owner.getY()-this.owner.getDrawableY())*b/this.owner.getHeight()),this.owner.setHeight(b)}else this._topEdgeAnchor!==0&&this.owner.setY(c+this.owner.getY()-this.owner.getDrawableY()),this._bottomEdgeAnchor!==0&&this.owner.setY(X+this.owner.getY()-this.owner.getDrawableY()-this.owner.getHeight())}this._oldDrawableX=this.owner.getDrawableX(),this._oldDrawableY=this.owner.getDrawableY(),this._oldWidth=this.owner.getWidth(),this._oldHeight=this.owner.getHeight(),this._parentOldMinX=e.getUnrotatedViewportMinX(),this._parentOldMinY=e.getUnrotatedViewportMinY(),this._parentOldMaxX=e.getUnrotatedViewportMaxX(),this._parentOldMaxY=e.getUnrotatedViewportMaxY()}doStepPostEvents(e){}_convertCoords(e,o,r,s,t){return e!==e.getScene()?(t[0]=r,t[1]=s,t):o.convertCoords(r,s,0,t)}_convertInverseCoords(e,o,r,s,t){return e!==e.getScene()?(t[0]=r,t[1]=s,t):o.convertInverseCoords(r,s,0,t)}}a.AnchorRuntimeBehavior=D,a.registerBehavior("AnchorBehavior::AnchorBehavior",a.AnchorRuntimeBehavior)})(gdjs||(gdjs={}));
1
+ var gdjs;(function(a){let o;(function(e){e[e.None=0]="None",e[e.WindowLeft=1]="WindowLeft",e[e.WindowRight=2]="WindowRight",e[e.Proportional=3]="Proportional",e[e.WindowCenter=4]="WindowCenter"})(o||(o={}));let n;(function(e){e[e.None=0]="None",e[e.WindowTop=1]="WindowTop",e[e.WindowBottom=2]="WindowBottom",e[e.Proportional=3]="Proportional",e[e.WindowCenter=4]="WindowCenter"})(n||(n={}));class W extends a.RuntimeBehavior{constructor(t,i,s){super(t,i,s);this._useLegacyBottomAndRightAnchors=!1;this._hasJustBeenCreated=!0;this._leftEdgeDistance=0;this._rightEdgeDistance=0;this._topEdgeDistance=0;this._bottomEdgeDistance=0;this._oldDrawableX=0;this._oldDrawableY=0;this._oldWidth=0;this._oldHeight=0;this._parentOldMinX=0;this._parentOldMinY=0;this._parentOldMaxX=0;this._parentOldMaxY=0;this._relativeToOriginalWindowSize=!!i.relativeToOriginalWindowSize,this._leftEdgeAnchor=i.leftEdgeAnchor,this._rightEdgeAnchor=i.rightEdgeAnchor,this._topEdgeAnchor=i.topEdgeAnchor,this._bottomEdgeAnchor=i.bottomEdgeAnchor,this._useLegacyBottomAndRightAnchors=i.useLegacyBottomAndRightAnchors===void 0?!0:i.useLegacyBottomAndRightAnchors}updateFromBehaviorData(t,i){return t.leftEdgeAnchor!==i.leftEdgeAnchor&&(this._leftEdgeAnchor=i.leftEdgeAnchor),t.rightEdgeAnchor!==i.rightEdgeAnchor&&(this._rightEdgeAnchor=i.rightEdgeAnchor),t.topEdgeAnchor!==i.topEdgeAnchor&&(this._topEdgeAnchor=i.topEdgeAnchor),t.bottomEdgeAnchor!==i.bottomEdgeAnchor&&(this._bottomEdgeAnchor=i.bottomEdgeAnchor),t.useLegacyTrajectory!==i.useLegacyTrajectory&&(this._useLegacyBottomAndRightAnchors=i.useLegacyBottomAndRightAnchors),t.relativeToOriginalWindowSize===i.relativeToOriginalWindowSize}onActivate(){this._hasJustBeenCreated=!0}doStepPreEvents(t){this._hasJustBeenCreated&&(this._initializeAnchorDistances(t),this._hasJustBeenCreated=!1,this._oldDrawableX=this.owner.getDrawableX(),this._oldDrawableY=this.owner.getDrawableY(),this._oldWidth=this.owner.getWidth(),this._oldHeight=this.owner.getHeight()),this._updateAnchorDistances(t),this._followAnchor(t),this._oldDrawableX=this.owner.getDrawableX(),this._oldDrawableY=this.owner.getDrawableY(),this._oldWidth=this.owner.getWidth(),this._oldHeight=this.owner.getHeight()}_initializeAnchorDistances(t){const i=a.staticArray(a.AnchorRuntimeBehavior.prototype.doStepPreEvents),s=t.getLayer(this.owner.getLayer());this._relativeToOriginalWindowSize?(this._parentOldMinX=t.getInitialUnrotatedViewportMinX(),this._parentOldMinY=t.getInitialUnrotatedViewportMinY(),this._parentOldMaxX=t.getInitialUnrotatedViewportMaxX(),this._parentOldMaxY=t.getInitialUnrotatedViewportMaxY()):(this._parentOldMinX=t.getUnrotatedViewportMinX(),this._parentOldMinY=t.getUnrotatedViewportMinY(),this._parentOldMaxX=t.getUnrotatedViewportMaxX(),this._parentOldMaxY=t.getUnrotatedViewportMaxY());const r=this._parentOldMinX,e=this._parentOldMinY,g=this._parentOldMaxX,l=this._parentOldMaxY,w=(g+r)/2,p=(l+e)/2,E=g-r,f=l-e,h=this._convertInverseCoords(t,s,this.owner.getDrawableX(),this.owner.getDrawableY(),i);this._leftEdgeAnchor===1?this._leftEdgeDistance=h[0]-r:this._leftEdgeAnchor===2?this._leftEdgeDistance=h[0]-g:this._leftEdgeAnchor===3?this._leftEdgeDistance=(h[0]-r)/E:this._leftEdgeAnchor===4&&(this._leftEdgeDistance=h[0]-w),this._topEdgeAnchor===1?this._topEdgeDistance=h[1]-e:this._topEdgeAnchor===2?this._topEdgeDistance=h[1]-l:this._topEdgeAnchor===3?this._topEdgeDistance=(h[1]-e)/f:this._topEdgeAnchor===4&&(this._topEdgeDistance=h[1]-p);const d=this._convertInverseCoords(t,s,this.owner.getDrawableX()+this.owner.getWidth(),this.owner.getDrawableY()+this.owner.getHeight(),i);this._rightEdgeAnchor===1?this._rightEdgeDistance=d[0]-r:this._rightEdgeAnchor===2?this._rightEdgeDistance=d[0]-g:this._rightEdgeAnchor===3?this._rightEdgeDistance=(d[0]-r)/E:this._rightEdgeAnchor===4&&(this._rightEdgeDistance=d[0]-w),this._bottomEdgeAnchor===1?this._bottomEdgeDistance=d[1]-e:this._bottomEdgeAnchor===2?this._bottomEdgeDistance=d[1]-l:this._bottomEdgeAnchor===3?this._bottomEdgeDistance=(d[1]-e)/f:this._bottomEdgeAnchor===4&&(this._bottomEdgeDistance=d[1]-p)}_updateAnchorDistances(t){if(this._oldDrawableX!==this.owner.getDrawableX()||this._oldWidth!==this.owner.getWidth()){const i=this._parentOldMaxX-this._parentOldMinX,s=this.owner.getDrawableX()-this._oldDrawableX;this._leftEdgeAnchor===3?this._leftEdgeDistance+=s/i:this._leftEdgeDistance+=s;const r=s+this.owner.getWidth()-this._oldWidth;this._rightEdgeAnchor===3?this._rightEdgeDistance+=r/i:this._rightEdgeDistance+=r}if(this._oldDrawableY!==this.owner.getDrawableY()||this._oldHeight!==this.owner.getHeight()){const i=this._parentOldMaxY-this._parentOldMinY,s=this.owner.getDrawableY()-this._oldDrawableY;this._topEdgeAnchor===3?this._topEdgeDistance+=s/i:this._topEdgeDistance+=s;const r=s+this.owner.getHeight()-this._oldHeight;this._bottomEdgeAnchor===3?this._bottomEdgeDistance+=r/i:this._bottomEdgeDistance+=r}}_followAnchor(t){let i=t.getUnrotatedViewportMinX(),s=t.getUnrotatedViewportMinY(),r=t.getUnrotatedViewportMaxX(),e=t.getUnrotatedViewportMaxY();if(this._parentOldMinX===i&&this._parentOldMinY===s&&this._parentOldMaxX===r&&this._parentOldMaxY===e)return;const g=a.staticArray(a.AnchorRuntimeBehavior.prototype.doStepPreEvents),l=t.getLayer(this.owner.getLayer()),w=(r+i)/2,p=(e+s)/2,E=r-i,f=e-s;let h=0,d=0,A=0,m=0;this._leftEdgeAnchor===1?h=i+this._leftEdgeDistance:this._leftEdgeAnchor===2?h=r+this._leftEdgeDistance:this._leftEdgeAnchor===3?h=i+this._leftEdgeDistance*E:this._leftEdgeAnchor===4&&(h=w+this._leftEdgeDistance),this._topEdgeAnchor===1?d=s+this._topEdgeDistance:this._topEdgeAnchor===2?d=e+this._topEdgeDistance:this._topEdgeAnchor===3?d=s+this._topEdgeDistance*f:this._topEdgeAnchor===4&&(d=p+this._topEdgeDistance),this._rightEdgeAnchor===1?A=i+this._rightEdgeDistance:this._rightEdgeAnchor===2?A=r+this._rightEdgeDistance:this._rightEdgeAnchor===3?A=i+this._rightEdgeDistance*E:this._rightEdgeAnchor===4&&(A=w+this._rightEdgeDistance),this._bottomEdgeAnchor===1?m=s+this._bottomEdgeDistance:this._bottomEdgeAnchor===2?m=e+this._bottomEdgeDistance:this._bottomEdgeAnchor===3?m=s+this._bottomEdgeDistance*f:this._bottomEdgeAnchor===4&&(m=p+this._bottomEdgeDistance);const X=this._convertCoords(t,l,h,d,g);let _=X[0],c=X[1];const Y=this._convertCoords(t,l,A,m,g),D=Y[0],M=Y[1];if(this._useLegacyBottomAndRightAnchors)this._rightEdgeAnchor!==0&&this.owner.setWidth(D-_),this._bottomEdgeAnchor!==0&&this.owner.setHeight(M-c),this._leftEdgeAnchor!==0&&this.owner.setX(_+this.owner.getX()-this.owner.getDrawableX()),this._topEdgeAnchor!==0&&this.owner.setY(c+this.owner.getY()-this.owner.getDrawableY());else{if(this._rightEdgeAnchor!==0&&this._leftEdgeAnchor!==0){const b=D-_;this.owner.setX(this.owner.getX()===this.owner.getDrawableX()?_:_+(this.owner.getX()-this.owner.getDrawableX())*b/this.owner.getWidth()),this.owner.setWidth(b)}else this._leftEdgeAnchor!==0&&this.owner.setX(_+this.owner.getX()-this.owner.getDrawableX()),this._rightEdgeAnchor!==0&&this.owner.setX(D+this.owner.getX()-this.owner.getDrawableX()-this.owner.getWidth());if(this._bottomEdgeAnchor!==0&&this._topEdgeAnchor!==0){const b=M-c;this.owner.setY(this.owner.getY()===this.owner.getDrawableY()?c:c+(this.owner.getY()-this.owner.getDrawableY())*b/this.owner.getHeight()),this.owner.setHeight(b)}else this._topEdgeAnchor!==0&&this.owner.setY(c+this.owner.getY()-this.owner.getDrawableY()),this._bottomEdgeAnchor!==0&&this.owner.setY(M+this.owner.getY()-this.owner.getDrawableY()-this.owner.getHeight())}this._parentOldMinX=t.getUnrotatedViewportMinX(),this._parentOldMinY=t.getUnrotatedViewportMinY(),this._parentOldMaxX=t.getUnrotatedViewportMaxX(),this._parentOldMaxY=t.getUnrotatedViewportMaxY()}doStepPostEvents(t){}_convertCoords(t,i,s,r,e){return t!==t.getScene()?(e[0]=s,e[1]=r,e):i.convertCoords(s,r,0,e)}_convertInverseCoords(t,i,s,r,e){return t!==t.getScene()?(e[0]=s,e[1]=r,e):i.convertInverseCoords(s,r,0,e)}}a.AnchorRuntimeBehavior=W,a.registerBehavior("AnchorBehavior::AnchorBehavior",a.AnchorRuntimeBehavior)})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=anchorruntimebehavior.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../GDevelop/Extensions/AnchorBehavior/anchorruntimebehavior.ts"],
4
- "sourcesContent": ["/*\nGDevelop - Anchor Behavior Extension\nCopyright (c) 2013-2016 Florian Rival (Florian.Rival@gmail.com)\n */\n\nnamespace gdjs {\n const enum HorizontalAnchor {\n None = 0,\n WindowLeft,\n WindowRight,\n Proportional,\n WindowCenter,\n }\n const enum VerticalAnchor {\n None = 0,\n WindowTop,\n WindowBottom,\n Proportional,\n WindowCenter,\n }\n\n export class AnchorRuntimeBehavior extends gdjs.RuntimeBehavior {\n // Configuration\n\n _relativeToOriginalWindowSize: boolean;\n _leftEdgeAnchor: HorizontalAnchor;\n _rightEdgeAnchor: HorizontalAnchor;\n _topEdgeAnchor: VerticalAnchor;\n _bottomEdgeAnchor: VerticalAnchor;\n _useLegacyBottomAndRightAnchors: boolean = false;\n\n // State\n\n _hasJustBeenCreated: boolean = true;\n _leftEdgeDistance: float = 0;\n _rightEdgeDistance: float = 0;\n _topEdgeDistance: float = 0;\n _bottomEdgeDistance: float = 0;\n\n _oldDrawableX: float = 0;\n _oldDrawableY: float = 0;\n _oldWidth: float = 0;\n _oldHeight: float = 0;\n\n _parentOldMinX: float = 0;\n _parentOldMinY: float = 0;\n _parentOldMaxX: float = 0;\n _parentOldMaxY: float = 0;\n\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n behaviorData,\n owner: gdjs.RuntimeObject\n ) {\n super(instanceContainer, behaviorData, owner);\n this._relativeToOriginalWindowSize =\n !!behaviorData.relativeToOriginalWindowSize;\n this._leftEdgeAnchor = behaviorData.leftEdgeAnchor;\n this._rightEdgeAnchor = behaviorData.rightEdgeAnchor;\n this._topEdgeAnchor = behaviorData.topEdgeAnchor;\n this._bottomEdgeAnchor = behaviorData.bottomEdgeAnchor;\n this._useLegacyBottomAndRightAnchors =\n behaviorData.useLegacyBottomAndRightAnchors === undefined\n ? true\n : behaviorData.useLegacyBottomAndRightAnchors;\n }\n\n updateFromBehaviorData(oldBehaviorData, newBehaviorData): boolean {\n if (oldBehaviorData.leftEdgeAnchor !== newBehaviorData.leftEdgeAnchor) {\n this._leftEdgeAnchor = newBehaviorData.leftEdgeAnchor;\n }\n if (oldBehaviorData.rightEdgeAnchor !== newBehaviorData.rightEdgeAnchor) {\n this._rightEdgeAnchor = newBehaviorData.rightEdgeAnchor;\n }\n if (oldBehaviorData.topEdgeAnchor !== newBehaviorData.topEdgeAnchor) {\n this._topEdgeAnchor = newBehaviorData.topEdgeAnchor;\n }\n if (\n oldBehaviorData.bottomEdgeAnchor !== newBehaviorData.bottomEdgeAnchor\n ) {\n this._bottomEdgeAnchor = newBehaviorData.bottomEdgeAnchor;\n }\n if (\n oldBehaviorData.useLegacyTrajectory !==\n newBehaviorData.useLegacyTrajectory\n ) {\n this._useLegacyBottomAndRightAnchors =\n newBehaviorData.useLegacyBottomAndRightAnchors;\n }\n if (\n oldBehaviorData.relativeToOriginalWindowSize !==\n newBehaviorData.relativeToOriginalWindowSize\n ) {\n return false;\n }\n return true;\n }\n\n doStepPreEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {\n const objectHasMoved =\n this._oldDrawableX !== this.owner.getDrawableX() ||\n this._oldDrawableY !== this.owner.getDrawableY() ||\n this._oldWidth !== this.owner.getWidth() ||\n this._oldHeight !== this.owner.getHeight();\n if (objectHasMoved) {\n this._updateAnchorDistances(instanceContainer);\n }\n const parentHasResized =\n this._parentOldMinX !== instanceContainer.getUnrotatedViewportMinX() ||\n this._parentOldMinY !== instanceContainer.getUnrotatedViewportMinY() ||\n this._parentOldMaxX !== instanceContainer.getUnrotatedViewportMaxX() ||\n this._parentOldMaxY !== instanceContainer.getUnrotatedViewportMaxY();\n if (parentHasResized) {\n this._followAnchor(instanceContainer);\n }\n }\n\n private _updateAnchorDistances(\n instanceContainer: gdjs.RuntimeInstanceContainer\n ) {\n const workingPoint: FloatPoint = gdjs.staticArray(\n gdjs.AnchorRuntimeBehavior.prototype.doStepPreEvents\n ) as FloatPoint;\n const layer = instanceContainer.getLayer(this.owner.getLayer());\n\n let parentMinX = this._parentOldMinX;\n let parentMinY = this._parentOldMinY;\n let parentMaxX = this._parentOldMaxX;\n let parentMaxY = this._parentOldMaxY;\n if (this._hasJustBeenCreated) {\n if (this._relativeToOriginalWindowSize) {\n parentMinX = instanceContainer.getInitialUnrotatedViewportMinX();\n parentMinY = instanceContainer.getInitialUnrotatedViewportMinY();\n parentMaxX = instanceContainer.getInitialUnrotatedViewportMaxX();\n parentMaxY = instanceContainer.getInitialUnrotatedViewportMaxY();\n } else {\n parentMinX = instanceContainer.getUnrotatedViewportMinX();\n parentMinY = instanceContainer.getUnrotatedViewportMinY();\n parentMaxX = instanceContainer.getUnrotatedViewportMaxX();\n parentMaxY = instanceContainer.getUnrotatedViewportMaxY();\n }\n }\n const parentCenterX = (parentMaxX + parentMinX) / 2;\n const parentCenterY = (parentMaxY + parentMinY) / 2;\n const parentWidth = parentMaxX - parentMinX;\n const parentHeight = parentMaxY - parentMinY;\n\n //Calculate the distances from the window's bounds.\n const topLeftPixel = this._relativeToOriginalWindowSize\n ? [this.owner.getDrawableX(), this.owner.getDrawableY()]\n : this._convertInverseCoords(\n instanceContainer,\n layer,\n this.owner.getDrawableX(),\n this.owner.getDrawableY(),\n workingPoint\n );\n\n // Left edge\n if (this._leftEdgeAnchor === HorizontalAnchor.WindowLeft) {\n this._leftEdgeDistance = topLeftPixel[0] - parentMinX;\n } else if (this._leftEdgeAnchor === HorizontalAnchor.WindowRight) {\n this._leftEdgeDistance = topLeftPixel[0] - parentMaxX;\n } else if (this._leftEdgeAnchor === HorizontalAnchor.Proportional) {\n this._leftEdgeDistance = (topLeftPixel[0] - parentMinX) / parentWidth;\n } else if (this._leftEdgeAnchor === HorizontalAnchor.WindowCenter) {\n this._leftEdgeDistance = topLeftPixel[0] - parentCenterX;\n }\n\n // Top edge\n if (this._topEdgeAnchor === VerticalAnchor.WindowTop) {\n this._topEdgeDistance = topLeftPixel[1] - parentMinY;\n } else if (this._topEdgeAnchor === VerticalAnchor.WindowBottom) {\n this._topEdgeDistance = topLeftPixel[1] - parentMaxY;\n } else if (this._topEdgeAnchor === VerticalAnchor.Proportional) {\n this._topEdgeDistance = (topLeftPixel[1] - parentMinY) / parentHeight;\n } else if (this._topEdgeAnchor === VerticalAnchor.WindowCenter) {\n this._topEdgeDistance = topLeftPixel[1] - parentCenterY;\n }\n\n // It's fine to reuse workingPoint as topLeftPixel is no longer used.\n const bottomRightPixel = this._relativeToOriginalWindowSize\n ? [\n this.owner.getDrawableX() + this.owner.getWidth(),\n this.owner.getDrawableY() + this.owner.getHeight(),\n ]\n : this._convertInverseCoords(\n instanceContainer,\n layer,\n this.owner.getDrawableX() + this.owner.getWidth(),\n this.owner.getDrawableY() + this.owner.getHeight(),\n workingPoint\n );\n\n // Right edge\n if (this._rightEdgeAnchor === HorizontalAnchor.WindowLeft) {\n this._rightEdgeDistance = bottomRightPixel[0] - parentMinX;\n } else if (this._rightEdgeAnchor === HorizontalAnchor.WindowRight) {\n this._rightEdgeDistance = bottomRightPixel[0] - parentMaxX;\n } else if (this._rightEdgeAnchor === HorizontalAnchor.Proportional) {\n this._rightEdgeDistance =\n (bottomRightPixel[0] - parentMinX) / parentWidth;\n } else if (this._rightEdgeAnchor === HorizontalAnchor.WindowCenter) {\n this._rightEdgeDistance = bottomRightPixel[0] - parentCenterX;\n }\n\n // Bottom edge\n if (this._bottomEdgeAnchor === VerticalAnchor.WindowTop) {\n this._bottomEdgeDistance = bottomRightPixel[1] - parentMinY;\n } else if (this._bottomEdgeAnchor === VerticalAnchor.WindowBottom) {\n this._bottomEdgeDistance = bottomRightPixel[1] - parentMaxY;\n } else if (this._bottomEdgeAnchor === VerticalAnchor.Proportional) {\n this._bottomEdgeDistance =\n (bottomRightPixel[1] - parentMinY) / parentHeight;\n } else if (this._bottomEdgeAnchor === VerticalAnchor.WindowCenter) {\n this._bottomEdgeDistance = bottomRightPixel[1] - parentCenterY;\n }\n\n this._hasJustBeenCreated = false;\n }\n\n private _followAnchor(instanceContainer: gdjs.RuntimeInstanceContainer) {\n const workingPoint: FloatPoint = gdjs.staticArray(\n gdjs.AnchorRuntimeBehavior.prototype.doStepPreEvents\n ) as FloatPoint;\n const layer = instanceContainer.getLayer(this.owner.getLayer());\n\n let parentMinX = instanceContainer.getUnrotatedViewportMinX();\n let parentMinY = instanceContainer.getUnrotatedViewportMinY();\n let parentMaxX = instanceContainer.getUnrotatedViewportMaxX();\n let parentMaxY = instanceContainer.getUnrotatedViewportMaxY();\n const parentCenterX = (parentMaxX + parentMinX) / 2;\n const parentCenterY = (parentMaxY + parentMinY) / 2;\n const parentWidth = parentMaxX - parentMinX;\n const parentHeight = parentMaxY - parentMinY;\n\n //Move and resize the object if needed\n let leftPixel = 0;\n let topPixel = 0;\n let rightPixel = 0;\n let bottomPixel = 0;\n\n // Left edge\n if (this._leftEdgeAnchor === HorizontalAnchor.WindowLeft) {\n leftPixel = parentMinX + this._leftEdgeDistance;\n } else if (this._leftEdgeAnchor === HorizontalAnchor.WindowRight) {\n leftPixel = parentMaxX + this._leftEdgeDistance;\n } else if (this._leftEdgeAnchor === HorizontalAnchor.Proportional) {\n leftPixel = parentMinX + this._leftEdgeDistance * parentWidth;\n } else if (this._leftEdgeAnchor === HorizontalAnchor.WindowCenter) {\n leftPixel = parentCenterX + this._leftEdgeDistance;\n }\n\n // Top edge\n if (this._topEdgeAnchor === VerticalAnchor.WindowTop) {\n topPixel = parentMinY + this._topEdgeDistance;\n } else if (this._topEdgeAnchor === VerticalAnchor.WindowBottom) {\n topPixel = parentMaxY + this._topEdgeDistance;\n } else if (this._topEdgeAnchor === VerticalAnchor.Proportional) {\n topPixel = parentMinY + this._topEdgeDistance * parentHeight;\n } else if (this._topEdgeAnchor === VerticalAnchor.WindowCenter) {\n topPixel = parentCenterY + this._topEdgeDistance;\n }\n\n // Right edge\n if (this._rightEdgeAnchor === HorizontalAnchor.WindowLeft) {\n rightPixel = parentMinX + this._rightEdgeDistance;\n } else if (this._rightEdgeAnchor === HorizontalAnchor.WindowRight) {\n rightPixel = parentMaxX + this._rightEdgeDistance;\n } else if (this._rightEdgeAnchor === HorizontalAnchor.Proportional) {\n rightPixel = parentMinX + this._rightEdgeDistance * parentWidth;\n } else if (this._rightEdgeAnchor === HorizontalAnchor.WindowCenter) {\n rightPixel = parentCenterX + this._rightEdgeDistance;\n }\n\n // Bottom edge\n if (this._bottomEdgeAnchor === VerticalAnchor.WindowTop) {\n bottomPixel = parentMinY + this._bottomEdgeDistance;\n } else if (this._bottomEdgeAnchor === VerticalAnchor.WindowBottom) {\n bottomPixel = parentMaxY + this._bottomEdgeDistance;\n } else if (this._bottomEdgeAnchor === VerticalAnchor.Proportional) {\n bottomPixel = parentMinY + this._bottomEdgeDistance * parentHeight;\n } else if (this._bottomEdgeAnchor === VerticalAnchor.WindowCenter) {\n bottomPixel = parentCenterY + this._bottomEdgeDistance;\n }\n\n // It's fine to reuse workingPoint as topLeftPixel is no longer used.\n const topLeftCoord = this._convertCoords(\n instanceContainer,\n layer,\n leftPixel,\n topPixel,\n workingPoint\n );\n let left = topLeftCoord[0];\n let top = topLeftCoord[1];\n\n const bottomRightCoord = this._convertCoords(\n instanceContainer,\n layer,\n rightPixel,\n bottomPixel,\n workingPoint\n );\n const right = bottomRightCoord[0];\n const bottom = bottomRightCoord[1];\n\n // Compatibility with GD <= 5.0.133\n if (this._useLegacyBottomAndRightAnchors) {\n //Move and resize the object according to the anchors\n if (this._rightEdgeAnchor !== HorizontalAnchor.None) {\n this.owner.setWidth(right - left);\n }\n if (this._bottomEdgeAnchor !== VerticalAnchor.None) {\n this.owner.setHeight(bottom - top);\n }\n if (this._leftEdgeAnchor !== HorizontalAnchor.None) {\n this.owner.setX(left + this.owner.getX() - this.owner.getDrawableX());\n }\n if (this._topEdgeAnchor !== VerticalAnchor.None) {\n this.owner.setY(top + this.owner.getY() - this.owner.getDrawableY());\n }\n }\n // End of compatibility code\n else {\n // Resize if right and left anchors are set\n if (\n this._rightEdgeAnchor !== HorizontalAnchor.None &&\n this._leftEdgeAnchor !== HorizontalAnchor.None\n ) {\n const width = right - left;\n this.owner.setX(\n this.owner.getX() === this.owner.getDrawableX()\n ? left\n : // It uses the position of the origin relatively to the object\n // size to apply it with the new size.\n // This is the same as doing:\n // lerp(left, right, (this.owner.getX() - this.owner.getDrawableX() / this.owner.getWidth())\n // But, the division is done at the end to avoid rounding errors.\n left +\n ((this.owner.getX() - this.owner.getDrawableX()) * width) /\n this.owner.getWidth()\n );\n this.owner.setWidth(width);\n } else {\n if (this._leftEdgeAnchor !== HorizontalAnchor.None) {\n this.owner.setX(\n left + this.owner.getX() - this.owner.getDrawableX()\n );\n }\n if (this._rightEdgeAnchor !== HorizontalAnchor.None) {\n this.owner.setX(\n right +\n this.owner.getX() -\n this.owner.getDrawableX() -\n this.owner.getWidth()\n );\n }\n }\n\n // Resize if top and bottom anchors are set\n if (\n this._bottomEdgeAnchor !== VerticalAnchor.None &&\n this._topEdgeAnchor !== VerticalAnchor.None\n ) {\n const height = bottom - top;\n this.owner.setY(\n this.owner.getY() === this.owner.getDrawableY()\n ? top\n : top +\n ((this.owner.getY() - this.owner.getDrawableY()) * height) /\n this.owner.getHeight()\n );\n this.owner.setHeight(height);\n } else {\n if (this._topEdgeAnchor !== VerticalAnchor.None) {\n this.owner.setY(\n top + this.owner.getY() - this.owner.getDrawableY()\n );\n }\n if (this._bottomEdgeAnchor !== VerticalAnchor.None) {\n this.owner.setY(\n bottom +\n this.owner.getY() -\n this.owner.getDrawableY() -\n this.owner.getHeight()\n );\n }\n }\n }\n this._oldDrawableX = this.owner.getDrawableX();\n this._oldDrawableY = this.owner.getDrawableY();\n this._oldWidth = this.owner.getWidth();\n this._oldHeight = this.owner.getHeight();\n\n this._parentOldMinX = instanceContainer.getUnrotatedViewportMinX();\n this._parentOldMinY = instanceContainer.getUnrotatedViewportMinY();\n this._parentOldMaxX = instanceContainer.getUnrotatedViewportMaxX();\n this._parentOldMaxY = instanceContainer.getUnrotatedViewportMaxY();\n }\n\n doStepPostEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {}\n\n private _convertCoords(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n layer: gdjs.RuntimeLayer,\n x: float,\n y: float,\n result: FloatPoint\n ) {\n const isParentACustomObject =\n instanceContainer !== instanceContainer.getScene();\n if (isParentACustomObject) {\n result[0] = x;\n result[1] = y;\n return result;\n }\n return layer.convertCoords(x, y, 0, result);\n }\n\n private _convertInverseCoords(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n layer: gdjs.RuntimeLayer,\n x: float,\n y: float,\n result: FloatPoint\n ) {\n const isParentACustomObject =\n instanceContainer !== instanceContainer.getScene();\n if (isParentACustomObject) {\n result[0] = x;\n result[1] = y;\n return result;\n }\n return layer.convertInverseCoords(x, y, 0, result);\n }\n }\n gdjs.registerBehavior(\n 'AnchorBehavior::AnchorBehavior',\n gdjs.AnchorRuntimeBehavior\n );\n}\n"],
5
- "mappings": "AAKA,GAAU,MAAV,UAAU,EAAV,CACE,GAAW,GAAX,UAAW,EAAX,CACE,SAAO,GAAP,OACA,+BACA,iCACA,mCACA,qCALS,WAOX,GAAW,GAAX,UAAW,EAAX,CACE,SAAO,GAAP,OACA,6BACA,mCACA,mCACA,qCALS,WAQJ,eAAoC,GAAK,eAAgB,CA4B9D,YACE,EACA,EACA,EACA,CACA,MAAM,EAAmB,EAAc,GAzBzC,qCAA2C,GAI3C,yBAA+B,GAC/B,uBAA2B,EAC3B,wBAA4B,EAC5B,sBAA0B,EAC1B,yBAA6B,EAE7B,mBAAuB,EACvB,mBAAuB,EACvB,eAAmB,EACnB,gBAAoB,EAEpB,oBAAwB,EACxB,oBAAwB,EACxB,oBAAwB,EACxB,oBAAwB,EAQtB,KAAK,8BACH,CAAC,CAAC,EAAa,6BACjB,KAAK,gBAAkB,EAAa,eACpC,KAAK,iBAAmB,EAAa,gBACrC,KAAK,eAAiB,EAAa,cACnC,KAAK,kBAAoB,EAAa,iBACtC,KAAK,gCACH,EAAa,iCAAmC,OAC5C,GACA,EAAa,+BAGrB,uBAAuB,EAAiB,EAA0B,CAsBhE,MArBI,GAAgB,iBAAmB,EAAgB,gBACrD,MAAK,gBAAkB,EAAgB,gBAErC,EAAgB,kBAAoB,EAAgB,iBACtD,MAAK,iBAAmB,EAAgB,iBAEtC,EAAgB,gBAAkB,EAAgB,eACpD,MAAK,eAAiB,EAAgB,eAGtC,EAAgB,mBAAqB,EAAgB,kBAErD,MAAK,kBAAoB,EAAgB,kBAGzC,EAAgB,sBAChB,EAAgB,qBAEhB,MAAK,gCACH,EAAgB,gCAGlB,EAAgB,+BAChB,EAAgB,6BAOpB,gBAAgB,EAAkD,CAMhE,AAAI,AAJF,MAAK,gBAAkB,KAAK,MAAM,gBAClC,KAAK,gBAAkB,KAAK,MAAM,gBAClC,KAAK,YAAc,KAAK,MAAM,YAC9B,KAAK,aAAe,KAAK,MAAM,cAE/B,KAAK,uBAAuB,GAO1B,AAJF,MAAK,iBAAmB,EAAkB,4BAC1C,KAAK,iBAAmB,EAAkB,4BAC1C,KAAK,iBAAmB,EAAkB,4BAC1C,KAAK,iBAAmB,EAAkB,6BAE1C,KAAK,cAAc,GAIf,uBACN,EACA,CACA,KAAM,GAA2B,EAAK,YACpC,EAAK,sBAAsB,UAAU,iBAEjC,EAAQ,EAAkB,SAAS,KAAK,MAAM,YAEpD,GAAI,GAAa,KAAK,eAClB,EAAa,KAAK,eAClB,EAAa,KAAK,eAClB,EAAa,KAAK,eACtB,AAAI,KAAK,qBACP,CAAI,KAAK,8BACP,GAAa,EAAkB,kCAC/B,EAAa,EAAkB,kCAC/B,EAAa,EAAkB,kCAC/B,EAAa,EAAkB,mCAE/B,GAAa,EAAkB,2BAC/B,EAAa,EAAkB,2BAC/B,EAAa,EAAkB,2BAC/B,EAAa,EAAkB,6BAGnC,KAAM,GAAiB,GAAa,GAAc,EAC5C,EAAiB,GAAa,GAAc,EAC5C,EAAc,EAAa,EAC3B,EAAe,EAAa,EAG5B,EAAe,KAAK,8BACtB,CAAC,KAAK,MAAM,eAAgB,KAAK,MAAM,gBACvC,KAAK,sBACH,EACA,EACA,KAAK,MAAM,eACX,KAAK,MAAM,eACX,GAIN,AAAI,KAAK,kBAAoB,EAC3B,KAAK,kBAAoB,EAAa,GAAK,EACtC,AAAI,KAAK,kBAAoB,EAClC,KAAK,kBAAoB,EAAa,GAAK,EACtC,AAAI,KAAK,kBAAoB,EAClC,KAAK,kBAAqB,GAAa,GAAK,GAAc,EACjD,KAAK,kBAAoB,GAClC,MAAK,kBAAoB,EAAa,GAAK,GAI7C,AAAI,KAAK,iBAAmB,EAC1B,KAAK,iBAAmB,EAAa,GAAK,EACrC,AAAI,KAAK,iBAAmB,EACjC,KAAK,iBAAmB,EAAa,GAAK,EACrC,AAAI,KAAK,iBAAmB,EACjC,KAAK,iBAAoB,GAAa,GAAK,GAAc,EAChD,KAAK,iBAAmB,GACjC,MAAK,iBAAmB,EAAa,GAAK,GAI5C,KAAM,GAAmB,KAAK,8BAC1B,CACE,KAAK,MAAM,eAAiB,KAAK,MAAM,WACvC,KAAK,MAAM,eAAiB,KAAK,MAAM,aAEzC,KAAK,sBACH,EACA,EACA,KAAK,MAAM,eAAiB,KAAK,MAAM,WACvC,KAAK,MAAM,eAAiB,KAAK,MAAM,YACvC,GAIN,AAAI,KAAK,mBAAqB,EAC5B,KAAK,mBAAqB,EAAiB,GAAK,EAC3C,AAAI,KAAK,mBAAqB,EACnC,KAAK,mBAAqB,EAAiB,GAAK,EAC3C,AAAI,KAAK,mBAAqB,EACnC,KAAK,mBACF,GAAiB,GAAK,GAAc,EAC9B,KAAK,mBAAqB,GACnC,MAAK,mBAAqB,EAAiB,GAAK,GAIlD,AAAI,KAAK,oBAAsB,EAC7B,KAAK,oBAAsB,EAAiB,GAAK,EAC5C,AAAI,KAAK,oBAAsB,EACpC,KAAK,oBAAsB,EAAiB,GAAK,EAC5C,AAAI,KAAK,oBAAsB,EACpC,KAAK,oBACF,GAAiB,GAAK,GAAc,EAC9B,KAAK,oBAAsB,GACpC,MAAK,oBAAsB,EAAiB,GAAK,GAGnD,KAAK,oBAAsB,GAGrB,cAAc,EAAkD,CACtE,KAAM,GAA2B,EAAK,YACpC,EAAK,sBAAsB,UAAU,iBAEjC,EAAQ,EAAkB,SAAS,KAAK,MAAM,YAEpD,GAAI,GAAa,EAAkB,2BAC/B,EAAa,EAAkB,2BAC/B,EAAa,EAAkB,2BAC/B,EAAa,EAAkB,2BACnC,KAAM,GAAiB,GAAa,GAAc,EAC5C,EAAiB,GAAa,GAAc,EAC5C,EAAc,EAAa,EAC3B,EAAe,EAAa,EAGlC,GAAI,GAAY,EACZ,EAAW,EACX,EAAa,EACb,EAAc,EAGlB,AAAI,KAAK,kBAAoB,EAC3B,EAAY,EAAa,KAAK,kBACzB,AAAI,KAAK,kBAAoB,EAClC,EAAY,EAAa,KAAK,kBACzB,AAAI,KAAK,kBAAoB,EAClC,EAAY,EAAa,KAAK,kBAAoB,EACzC,KAAK,kBAAoB,GAClC,GAAY,EAAgB,KAAK,mBAInC,AAAI,KAAK,iBAAmB,EAC1B,EAAW,EAAa,KAAK,iBACxB,AAAI,KAAK,iBAAmB,EACjC,EAAW,EAAa,KAAK,iBACxB,AAAI,KAAK,iBAAmB,EACjC,EAAW,EAAa,KAAK,iBAAmB,EACvC,KAAK,iBAAmB,GACjC,GAAW,EAAgB,KAAK,kBAIlC,AAAI,KAAK,mBAAqB,EAC5B,EAAa,EAAa,KAAK,mBAC1B,AAAI,KAAK,mBAAqB,EACnC,EAAa,EAAa,KAAK,mBAC1B,AAAI,KAAK,mBAAqB,EACnC,EAAa,EAAa,KAAK,mBAAqB,EAC3C,KAAK,mBAAqB,GACnC,GAAa,EAAgB,KAAK,oBAIpC,AAAI,KAAK,oBAAsB,EAC7B,EAAc,EAAa,KAAK,oBAC3B,AAAI,KAAK,oBAAsB,EACpC,EAAc,EAAa,KAAK,oBAC3B,AAAI,KAAK,oBAAsB,EACpC,EAAc,EAAa,KAAK,oBAAsB,EAC7C,KAAK,oBAAsB,GACpC,GAAc,EAAgB,KAAK,qBAIrC,KAAM,GAAe,KAAK,eACxB,EACA,EACA,EACA,EACA,GAEF,GAAI,GAAO,EAAa,GACpB,EAAM,EAAa,GAEvB,KAAM,GAAmB,KAAK,eAC5B,EACA,EACA,EACA,EACA,GAEI,EAAQ,EAAiB,GACzB,EAAS,EAAiB,GAGhC,GAAI,KAAK,gCAEP,AAAI,KAAK,mBAAqB,GAC5B,KAAK,MAAM,SAAS,EAAQ,GAE1B,KAAK,oBAAsB,GAC7B,KAAK,MAAM,UAAU,EAAS,GAE5B,KAAK,kBAAoB,GAC3B,KAAK,MAAM,KAAK,EAAO,KAAK,MAAM,OAAS,KAAK,MAAM,gBAEpD,KAAK,iBAAmB,GAC1B,KAAK,MAAM,KAAK,EAAM,KAAK,MAAM,OAAS,KAAK,MAAM,oBAIpD,CAEH,GACE,KAAK,mBAAqB,GAC1B,KAAK,kBAAoB,EACzB,CACA,KAAM,GAAQ,EAAQ,EACtB,KAAK,MAAM,KACT,KAAK,MAAM,SAAW,KAAK,MAAM,eAC7B,EAMA,EACI,MAAK,MAAM,OAAS,KAAK,MAAM,gBAAkB,EACjD,KAAK,MAAM,YAErB,KAAK,MAAM,SAAS,OAEpB,AAAI,MAAK,kBAAoB,GAC3B,KAAK,MAAM,KACT,EAAO,KAAK,MAAM,OAAS,KAAK,MAAM,gBAGtC,KAAK,mBAAqB,GAC5B,KAAK,MAAM,KACT,EACE,KAAK,MAAM,OACX,KAAK,MAAM,eACX,KAAK,MAAM,YAMnB,GACE,KAAK,oBAAsB,GAC3B,KAAK,iBAAmB,EACxB,CACA,KAAM,GAAS,EAAS,EACxB,KAAK,MAAM,KACT,KAAK,MAAM,SAAW,KAAK,MAAM,eAC7B,EACA,EACI,MAAK,MAAM,OAAS,KAAK,MAAM,gBAAkB,EACjD,KAAK,MAAM,aAErB,KAAK,MAAM,UAAU,OAErB,AAAI,MAAK,iBAAmB,GAC1B,KAAK,MAAM,KACT,EAAM,KAAK,MAAM,OAAS,KAAK,MAAM,gBAGrC,KAAK,oBAAsB,GAC7B,KAAK,MAAM,KACT,EACE,KAAK,MAAM,OACX,KAAK,MAAM,eACX,KAAK,MAAM,aAKrB,KAAK,cAAgB,KAAK,MAAM,eAChC,KAAK,cAAgB,KAAK,MAAM,eAChC,KAAK,UAAY,KAAK,MAAM,WAC5B,KAAK,WAAa,KAAK,MAAM,YAE7B,KAAK,eAAiB,EAAkB,2BACxC,KAAK,eAAiB,EAAkB,2BACxC,KAAK,eAAiB,EAAkB,2BACxC,KAAK,eAAiB,EAAkB,2BAG1C,iBAAiB,EAAkD,EAE3D,eACN,EACA,EACA,EACA,EACA,EACA,CAGA,MADE,KAAsB,EAAkB,WAExC,GAAO,GAAK,EACZ,EAAO,GAAK,EACL,GAEF,EAAM,cAAc,EAAG,EAAG,EAAG,GAG9B,sBACN,EACA,EACA,EACA,EACA,EACA,CAGA,MADE,KAAsB,EAAkB,WAExC,GAAO,GAAK,EACZ,EAAO,GAAK,EACL,GAEF,EAAM,qBAAqB,EAAG,EAAG,EAAG,IA7ZxC,EAAM,wBAgab,EAAK,iBACH,iCACA,EAAK,yBAlbC",
4
+ "sourcesContent": ["/*\nGDevelop - Anchor Behavior Extension\nCopyright (c) 2013-2016 Florian Rival (Florian.Rival@gmail.com)\n */\n\nnamespace gdjs {\n const enum HorizontalAnchor {\n None = 0,\n WindowLeft,\n WindowRight,\n Proportional,\n WindowCenter,\n }\n const enum VerticalAnchor {\n None = 0,\n WindowTop,\n WindowBottom,\n Proportional,\n WindowCenter,\n }\n\n export class AnchorRuntimeBehavior extends gdjs.RuntimeBehavior {\n // Configuration\n\n _relativeToOriginalWindowSize: boolean;\n _leftEdgeAnchor: HorizontalAnchor;\n _rightEdgeAnchor: HorizontalAnchor;\n _topEdgeAnchor: VerticalAnchor;\n _bottomEdgeAnchor: VerticalAnchor;\n _useLegacyBottomAndRightAnchors: boolean = false;\n\n // State\n\n _hasJustBeenCreated: boolean = true;\n _leftEdgeDistance: float = 0;\n _rightEdgeDistance: float = 0;\n _topEdgeDistance: float = 0;\n _bottomEdgeDistance: float = 0;\n\n _oldDrawableX: float = 0;\n _oldDrawableY: float = 0;\n _oldWidth: float = 0;\n _oldHeight: float = 0;\n\n _parentOldMinX: float = 0;\n _parentOldMinY: float = 0;\n _parentOldMaxX: float = 0;\n _parentOldMaxY: float = 0;\n\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n behaviorData,\n owner: gdjs.RuntimeObject\n ) {\n super(instanceContainer, behaviorData, owner);\n this._relativeToOriginalWindowSize =\n !!behaviorData.relativeToOriginalWindowSize;\n this._leftEdgeAnchor = behaviorData.leftEdgeAnchor;\n this._rightEdgeAnchor = behaviorData.rightEdgeAnchor;\n this._topEdgeAnchor = behaviorData.topEdgeAnchor;\n this._bottomEdgeAnchor = behaviorData.bottomEdgeAnchor;\n this._useLegacyBottomAndRightAnchors =\n behaviorData.useLegacyBottomAndRightAnchors === undefined\n ? true\n : behaviorData.useLegacyBottomAndRightAnchors;\n }\n\n override updateFromBehaviorData(oldBehaviorData, newBehaviorData): boolean {\n if (oldBehaviorData.leftEdgeAnchor !== newBehaviorData.leftEdgeAnchor) {\n this._leftEdgeAnchor = newBehaviorData.leftEdgeAnchor;\n }\n if (oldBehaviorData.rightEdgeAnchor !== newBehaviorData.rightEdgeAnchor) {\n this._rightEdgeAnchor = newBehaviorData.rightEdgeAnchor;\n }\n if (oldBehaviorData.topEdgeAnchor !== newBehaviorData.topEdgeAnchor) {\n this._topEdgeAnchor = newBehaviorData.topEdgeAnchor;\n }\n if (\n oldBehaviorData.bottomEdgeAnchor !== newBehaviorData.bottomEdgeAnchor\n ) {\n this._bottomEdgeAnchor = newBehaviorData.bottomEdgeAnchor;\n }\n if (\n oldBehaviorData.useLegacyTrajectory !==\n newBehaviorData.useLegacyTrajectory\n ) {\n this._useLegacyBottomAndRightAnchors =\n newBehaviorData.useLegacyBottomAndRightAnchors;\n }\n if (\n oldBehaviorData.relativeToOriginalWindowSize !==\n newBehaviorData.relativeToOriginalWindowSize\n ) {\n return false;\n }\n return true;\n }\n\n override onActivate(): void {\n // This only has a side effect if the camera moved while the behavior was\n // deactivated.\n // The new position on the viewport is where the object should stay.\n this._hasJustBeenCreated = true;\n }\n\n override doStepPreEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {\n if (this._hasJustBeenCreated) {\n this._initializeAnchorDistances(instanceContainer);\n this._hasJustBeenCreated = false;\n\n this._oldDrawableX = this.owner.getDrawableX();\n this._oldDrawableY = this.owner.getDrawableY();\n this._oldWidth = this.owner.getWidth();\n this._oldHeight = this.owner.getHeight();\n }\n this._updateAnchorDistances(instanceContainer);\n this._followAnchor(instanceContainer);\n\n this._oldDrawableX = this.owner.getDrawableX();\n this._oldDrawableY = this.owner.getDrawableY();\n this._oldWidth = this.owner.getWidth();\n this._oldHeight = this.owner.getHeight();\n }\n\n /**\n * Evaluate the anchor distance according to the object position on the\n * screen.\n *\n * The camera is taken into account.\n */\n private _initializeAnchorDistances(\n instanceContainer: gdjs.RuntimeInstanceContainer\n ) {\n const workingPoint: FloatPoint = gdjs.staticArray(\n gdjs.AnchorRuntimeBehavior.prototype.doStepPreEvents\n ) as FloatPoint;\n const layer = instanceContainer.getLayer(this.owner.getLayer());\n\n if (this._relativeToOriginalWindowSize) {\n this._parentOldMinX =\n instanceContainer.getInitialUnrotatedViewportMinX();\n this._parentOldMinY =\n instanceContainer.getInitialUnrotatedViewportMinY();\n this._parentOldMaxX =\n instanceContainer.getInitialUnrotatedViewportMaxX();\n this._parentOldMaxY =\n instanceContainer.getInitialUnrotatedViewportMaxY();\n } else {\n this._parentOldMinX = instanceContainer.getUnrotatedViewportMinX();\n this._parentOldMinY = instanceContainer.getUnrotatedViewportMinY();\n this._parentOldMaxX = instanceContainer.getUnrotatedViewportMaxX();\n this._parentOldMaxY = instanceContainer.getUnrotatedViewportMaxY();\n }\n const parentMinX = this._parentOldMinX;\n const parentMinY = this._parentOldMinY;\n const parentMaxX = this._parentOldMaxX;\n const parentMaxY = this._parentOldMaxY;\n\n const parentCenterX = (parentMaxX + parentMinX) / 2;\n const parentCenterY = (parentMaxY + parentMinY) / 2;\n const parentWidth = parentMaxX - parentMinX;\n const parentHeight = parentMaxY - parentMinY;\n\n // Calculate the distances from the window's bounds.\n const topLeftPixel = this._convertInverseCoords(\n instanceContainer,\n layer,\n this.owner.getDrawableX(),\n this.owner.getDrawableY(),\n workingPoint\n );\n\n // Left edge\n if (this._leftEdgeAnchor === HorizontalAnchor.WindowLeft) {\n this._leftEdgeDistance = topLeftPixel[0] - parentMinX;\n } else if (this._leftEdgeAnchor === HorizontalAnchor.WindowRight) {\n this._leftEdgeDistance = topLeftPixel[0] - parentMaxX;\n } else if (this._leftEdgeAnchor === HorizontalAnchor.Proportional) {\n this._leftEdgeDistance = (topLeftPixel[0] - parentMinX) / parentWidth;\n } else if (this._leftEdgeAnchor === HorizontalAnchor.WindowCenter) {\n this._leftEdgeDistance = topLeftPixel[0] - parentCenterX;\n }\n\n // Top edge\n if (this._topEdgeAnchor === VerticalAnchor.WindowTop) {\n this._topEdgeDistance = topLeftPixel[1] - parentMinY;\n } else if (this._topEdgeAnchor === VerticalAnchor.WindowBottom) {\n this._topEdgeDistance = topLeftPixel[1] - parentMaxY;\n } else if (this._topEdgeAnchor === VerticalAnchor.Proportional) {\n this._topEdgeDistance = (topLeftPixel[1] - parentMinY) / parentHeight;\n } else if (this._topEdgeAnchor === VerticalAnchor.WindowCenter) {\n this._topEdgeDistance = topLeftPixel[1] - parentCenterY;\n }\n\n // It's fine to reuse workingPoint as topLeftPixel is no longer used.\n const bottomRightPixel = this._convertInverseCoords(\n instanceContainer,\n layer,\n this.owner.getDrawableX() + this.owner.getWidth(),\n this.owner.getDrawableY() + this.owner.getHeight(),\n workingPoint\n );\n\n // Right edge\n if (this._rightEdgeAnchor === HorizontalAnchor.WindowLeft) {\n this._rightEdgeDistance = bottomRightPixel[0] - parentMinX;\n } else if (this._rightEdgeAnchor === HorizontalAnchor.WindowRight) {\n this._rightEdgeDistance = bottomRightPixel[0] - parentMaxX;\n } else if (this._rightEdgeAnchor === HorizontalAnchor.Proportional) {\n this._rightEdgeDistance =\n (bottomRightPixel[0] - parentMinX) / parentWidth;\n } else if (this._rightEdgeAnchor === HorizontalAnchor.WindowCenter) {\n this._rightEdgeDistance = bottomRightPixel[0] - parentCenterX;\n }\n\n // Bottom edge\n if (this._bottomEdgeAnchor === VerticalAnchor.WindowTop) {\n this._bottomEdgeDistance = bottomRightPixel[1] - parentMinY;\n } else if (this._bottomEdgeAnchor === VerticalAnchor.WindowBottom) {\n this._bottomEdgeDistance = bottomRightPixel[1] - parentMaxY;\n } else if (this._bottomEdgeAnchor === VerticalAnchor.Proportional) {\n this._bottomEdgeDistance =\n (bottomRightPixel[1] - parentMinY) / parentHeight;\n } else if (this._bottomEdgeAnchor === VerticalAnchor.WindowCenter) {\n this._bottomEdgeDistance = bottomRightPixel[1] - parentCenterY;\n }\n }\n\n /**\n * Update the anchor distances according to the object position change in\n * the scene.\n *\n * The camera is not taken into account. Indeed, a camera scrolling should\n * not shift the anchored object on screen.\n */\n private _updateAnchorDistances(\n instanceContainer: gdjs.RuntimeInstanceContainer\n ) {\n if (\n this._oldDrawableX !== this.owner.getDrawableX() ||\n this._oldWidth !== this.owner.getWidth()\n ) {\n const parentOldWidth = this._parentOldMaxX - this._parentOldMinX;\n\n // Left edge\n const deltaMinX = this.owner.getDrawableX() - this._oldDrawableX;\n if (this._leftEdgeAnchor === HorizontalAnchor.Proportional) {\n this._leftEdgeDistance += deltaMinX / parentOldWidth;\n } else {\n this._leftEdgeDistance += deltaMinX;\n }\n\n // Right edge\n const deltaMaxX = deltaMinX + this.owner.getWidth() - this._oldWidth;\n if (this._rightEdgeAnchor === HorizontalAnchor.Proportional) {\n this._rightEdgeDistance += deltaMaxX / parentOldWidth;\n } else {\n this._rightEdgeDistance += deltaMaxX;\n }\n }\n if (\n this._oldDrawableY !== this.owner.getDrawableY() ||\n this._oldHeight !== this.owner.getHeight()\n ) {\n const parentOldHeight = this._parentOldMaxY - this._parentOldMinY;\n\n // Top edge\n const deltaMinY = this.owner.getDrawableY() - this._oldDrawableY;\n if (this._topEdgeAnchor === VerticalAnchor.Proportional) {\n this._topEdgeDistance += deltaMinY / parentOldHeight;\n } else {\n this._topEdgeDistance += deltaMinY;\n }\n\n // Bottom edge\n const deltaMaxY = deltaMinY + this.owner.getHeight() - this._oldHeight;\n if (this._bottomEdgeAnchor === VerticalAnchor.Proportional) {\n this._bottomEdgeDistance += deltaMaxY / parentOldHeight;\n } else {\n this._bottomEdgeDistance += deltaMaxY;\n }\n }\n }\n\n /**\n * Update the object position to keep the object on screen according to the\n * anchor distances.\n *\n * The camera is taken into account.\n */\n private _followAnchor(instanceContainer: gdjs.RuntimeInstanceContainer) {\n let parentMinX = instanceContainer.getUnrotatedViewportMinX();\n let parentMinY = instanceContainer.getUnrotatedViewportMinY();\n let parentMaxX = instanceContainer.getUnrotatedViewportMaxX();\n let parentMaxY = instanceContainer.getUnrotatedViewportMaxY();\n\n if (\n this._parentOldMinX === parentMinX &&\n this._parentOldMinY === parentMinY &&\n this._parentOldMaxX === parentMaxX &&\n this._parentOldMaxY === parentMaxY\n ) {\n return;\n }\n\n const workingPoint: FloatPoint = gdjs.staticArray(\n gdjs.AnchorRuntimeBehavior.prototype.doStepPreEvents\n ) as FloatPoint;\n const layer = instanceContainer.getLayer(this.owner.getLayer());\n\n const parentCenterX = (parentMaxX + parentMinX) / 2;\n const parentCenterY = (parentMaxY + parentMinY) / 2;\n const parentWidth = parentMaxX - parentMinX;\n const parentHeight = parentMaxY - parentMinY;\n\n //Move and resize the object if needed\n let leftPixel = 0;\n let topPixel = 0;\n let rightPixel = 0;\n let bottomPixel = 0;\n\n // Left edge\n if (this._leftEdgeAnchor === HorizontalAnchor.WindowLeft) {\n leftPixel = parentMinX + this._leftEdgeDistance;\n } else if (this._leftEdgeAnchor === HorizontalAnchor.WindowRight) {\n leftPixel = parentMaxX + this._leftEdgeDistance;\n } else if (this._leftEdgeAnchor === HorizontalAnchor.Proportional) {\n leftPixel = parentMinX + this._leftEdgeDistance * parentWidth;\n } else if (this._leftEdgeAnchor === HorizontalAnchor.WindowCenter) {\n leftPixel = parentCenterX + this._leftEdgeDistance;\n }\n\n // Top edge\n if (this._topEdgeAnchor === VerticalAnchor.WindowTop) {\n topPixel = parentMinY + this._topEdgeDistance;\n } else if (this._topEdgeAnchor === VerticalAnchor.WindowBottom) {\n topPixel = parentMaxY + this._topEdgeDistance;\n } else if (this._topEdgeAnchor === VerticalAnchor.Proportional) {\n topPixel = parentMinY + this._topEdgeDistance * parentHeight;\n } else if (this._topEdgeAnchor === VerticalAnchor.WindowCenter) {\n topPixel = parentCenterY + this._topEdgeDistance;\n }\n\n // Right edge\n if (this._rightEdgeAnchor === HorizontalAnchor.WindowLeft) {\n rightPixel = parentMinX + this._rightEdgeDistance;\n } else if (this._rightEdgeAnchor === HorizontalAnchor.WindowRight) {\n rightPixel = parentMaxX + this._rightEdgeDistance;\n } else if (this._rightEdgeAnchor === HorizontalAnchor.Proportional) {\n rightPixel = parentMinX + this._rightEdgeDistance * parentWidth;\n } else if (this._rightEdgeAnchor === HorizontalAnchor.WindowCenter) {\n rightPixel = parentCenterX + this._rightEdgeDistance;\n }\n\n // Bottom edge\n if (this._bottomEdgeAnchor === VerticalAnchor.WindowTop) {\n bottomPixel = parentMinY + this._bottomEdgeDistance;\n } else if (this._bottomEdgeAnchor === VerticalAnchor.WindowBottom) {\n bottomPixel = parentMaxY + this._bottomEdgeDistance;\n } else if (this._bottomEdgeAnchor === VerticalAnchor.Proportional) {\n bottomPixel = parentMinY + this._bottomEdgeDistance * parentHeight;\n } else if (this._bottomEdgeAnchor === VerticalAnchor.WindowCenter) {\n bottomPixel = parentCenterY + this._bottomEdgeDistance;\n }\n\n // It's fine to reuse workingPoint as topLeftPixel is no longer used.\n const topLeftCoord = this._convertCoords(\n instanceContainer,\n layer,\n leftPixel,\n topPixel,\n workingPoint\n );\n let left = topLeftCoord[0];\n let top = topLeftCoord[1];\n\n const bottomRightCoord = this._convertCoords(\n instanceContainer,\n layer,\n rightPixel,\n bottomPixel,\n workingPoint\n );\n const right = bottomRightCoord[0];\n const bottom = bottomRightCoord[1];\n\n // Compatibility with GD <= 5.0.133\n if (this._useLegacyBottomAndRightAnchors) {\n //Move and resize the object according to the anchors\n if (this._rightEdgeAnchor !== HorizontalAnchor.None) {\n this.owner.setWidth(right - left);\n }\n if (this._bottomEdgeAnchor !== VerticalAnchor.None) {\n this.owner.setHeight(bottom - top);\n }\n if (this._leftEdgeAnchor !== HorizontalAnchor.None) {\n this.owner.setX(left + this.owner.getX() - this.owner.getDrawableX());\n }\n if (this._topEdgeAnchor !== VerticalAnchor.None) {\n this.owner.setY(top + this.owner.getY() - this.owner.getDrawableY());\n }\n }\n // End of compatibility code\n else {\n // Resize if right and left anchors are set\n if (\n this._rightEdgeAnchor !== HorizontalAnchor.None &&\n this._leftEdgeAnchor !== HorizontalAnchor.None\n ) {\n const width = right - left;\n this.owner.setX(\n this.owner.getX() === this.owner.getDrawableX()\n ? left\n : // It uses the position of the origin relatively to the object\n // size to apply it with the new size.\n // This is the same as doing:\n // lerp(left, right, (this.owner.getX() - this.owner.getDrawableX() / this.owner.getWidth())\n // But, the division is done at the end to avoid rounding errors.\n left +\n ((this.owner.getX() - this.owner.getDrawableX()) * width) /\n this.owner.getWidth()\n );\n this.owner.setWidth(width);\n } else {\n if (this._leftEdgeAnchor !== HorizontalAnchor.None) {\n this.owner.setX(\n left + this.owner.getX() - this.owner.getDrawableX()\n );\n }\n if (this._rightEdgeAnchor !== HorizontalAnchor.None) {\n this.owner.setX(\n right +\n this.owner.getX() -\n this.owner.getDrawableX() -\n this.owner.getWidth()\n );\n }\n }\n\n // Resize if top and bottom anchors are set\n if (\n this._bottomEdgeAnchor !== VerticalAnchor.None &&\n this._topEdgeAnchor !== VerticalAnchor.None\n ) {\n const height = bottom - top;\n this.owner.setY(\n this.owner.getY() === this.owner.getDrawableY()\n ? top\n : top +\n ((this.owner.getY() - this.owner.getDrawableY()) * height) /\n this.owner.getHeight()\n );\n this.owner.setHeight(height);\n } else {\n if (this._topEdgeAnchor !== VerticalAnchor.None) {\n this.owner.setY(\n top + this.owner.getY() - this.owner.getDrawableY()\n );\n }\n if (this._bottomEdgeAnchor !== VerticalAnchor.None) {\n this.owner.setY(\n bottom +\n this.owner.getY() -\n this.owner.getDrawableY() -\n this.owner.getHeight()\n );\n }\n }\n }\n this._parentOldMinX = instanceContainer.getUnrotatedViewportMinX();\n this._parentOldMinY = instanceContainer.getUnrotatedViewportMinY();\n this._parentOldMaxX = instanceContainer.getUnrotatedViewportMaxX();\n this._parentOldMaxY = instanceContainer.getUnrotatedViewportMaxY();\n }\n\n doStepPostEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {}\n\n private _convertCoords(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n layer: gdjs.RuntimeLayer,\n x: float,\n y: float,\n result: FloatPoint\n ) {\n const isParentACustomObject =\n instanceContainer !== instanceContainer.getScene();\n if (isParentACustomObject) {\n result[0] = x;\n result[1] = y;\n return result;\n }\n return layer.convertCoords(x, y, 0, result);\n }\n\n private _convertInverseCoords(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n layer: gdjs.RuntimeLayer,\n x: float,\n y: float,\n result: FloatPoint\n ) {\n const isParentACustomObject =\n instanceContainer !== instanceContainer.getScene();\n if (isParentACustomObject) {\n result[0] = x;\n result[1] = y;\n return result;\n }\n return layer.convertInverseCoords(x, y, 0, result);\n }\n }\n gdjs.registerBehavior(\n 'AnchorBehavior::AnchorBehavior',\n gdjs.AnchorRuntimeBehavior\n );\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }