var gdjs;(function(r){let x;(function(p){let C;(function(g){g.pickOnly=function(s,t){for(const e in s.items)if(s.items.hasOwnProperty(e)){const n=s.items[e];n.indexOf(t)===-1?n.length=0:(n.length=0,n.push(t))}},g.twoListsTest=function(s,t,e,n,o){let u=!1;const i=r.staticArray(r.evtTools.object.twoListsTest);t.values(i);const f=r.staticArray2(r.evtTools.object.twoListsTest);e.values(f);for(let a=0,b=i.length;a<b;++a){let c=i[a];for(let l=0,O=c.length;l<O;++l)c[l].pick=!1}for(let a=0,b=f.length;a<b;++a){let c=f[a];for(let l=0,O=c.length;l<O;++l)c[l].pick=!1}for(let a=0,b=i.length;a<b;++a){const c=i[a];for(let l=0,O=c.length;l<O;++l){let k=!1;for(let d=0,L=f.length;d<L;++d){const T=f[d];for(let h=0,R=T.length;h<R;++h)c[l].pick&&T[h].pick||c[l].id!==T[h].id&&s(c[l],T[h],o)&&(n||(u=!0,c[l].pick=!0,T[h].pick=!0),k=!0)}!k&&n&&(u=!0,c[l].pick=!0)}}for(let a=0,b=i.length;a<b;++a){let c=i[a],l=0;for(let O=0,k=c.length;O<k;++O){let d=c[O];c[O].pick&&(c[l]=d,l++)}c.length=l}if(!n)for(let a=0,b=f.length;a<b;++a){let c=f[a],l=0;for(let O=0,k=c.length;O<k;++O){let d=c[O];c[O].pick&&(c[l]=d,l++)}c.length=l}return u},g.pickObjectsIf=function(s,t,e,n){let o=!1;const u=r.staticArray(r.evtTools.object.pickObjectsIf);t.values(u);for(let i=0,f=u.length;i<f;++i){const a=u[i];for(let b=0,c=a.length;b<c;++b){const l=a[b];e^s(l,n)?(o=!0,l.pick=!0):l.pick=!1}}for(let i=0,f=u.length;i<f;++i)r.evtTools.object.filterPickedObjectsList(u[i]);return o},g.filterPickedObjectsList=function(s){let t=0;for(let e=0,n=s.length;e<n;++e){const o=s[e];o.pick&&(s[t]=o,t++)}s.length=t},g.hitBoxesCollisionTest=function(s,t,e,n,o){return r.evtTools.object.twoListsTest(r.RuntimeObject.collisionTest,s,t,e,o)},g._distanceBetweenObjects=function(s,t,e){return s.getSqDistanceToObject(t)<=e},g.distanceTest=function(s,t,e,n){return r.evtTools.object.twoListsTest(r.evtTools.object._distanceBetweenObjects,s,t,n,e*e)},g._movesToward=function(s,t,e){if(s.hasNoForces())return!1;let n=Math.atan2(t.getDrawableY()+t.getCenterY()-(s.getDrawableY()+s.getCenterY()),t.getDrawableX()+t.getCenterX()-(s.getDrawableX()+s.getCenterX()));return n*=180/3.14159,Math.abs(r.evtTools.common.angleDifference(s.getAverageForce().getAngle(),n))<=e/2},g.movesTowardTest=function(s,t,e,n){return r.evtTools.object.twoListsTest(r.evtTools.object._movesToward,s,t,n,e)},g._turnedToward=function(s,t,e){let n=Math.atan2(t.getDrawableY()+t.getCenterY()-(s.getDrawableY()+s.getCenterY()),t.getDrawableX()+t.getCenterX()-(s.getDrawableX()+s.getCenterX()));return n*=180/3.14159,Math.abs(r.evtTools.common.angleDifference(s.getAngle(),n))<=e/2},g.turnedTowardTest=function(s,t,e,n){return r.evtTools.object.twoListsTest(r.evtTools.object._turnedToward,s,t,n,e)},g.pickAllObjects=function(s,t){for(const e in t.items)if(t.items.hasOwnProperty(e)){const n=s.getObjects(e),o=t.items[e];o.length=0,o.push.apply(o,n)}return!0},g.pickRandomObject=function(s,t){let e=0;for(let i in t.items)t.items.hasOwnProperty(i)&&(e+=t.items[i].length);if(e===0)return!1;let n=Math.floor(Math.random()*e);n>=e&&(n=e-1);let o=0,u=null;for(let i in t.items)if(t.items.hasOwnProperty(i)){let f=t.items[i];if(n-o<f.length){u=f[n-o];break}o+=f.length}return r.evtTools.object.pickOnly(t,u),!0},g.pickNearestObject=function(s,t,e,n){let o=null,u=0,i=!0;const f=r.staticArray(r.evtTools.object.pickNearestObject);s.values(f);for(let a=0,b=f.length;a<b;++a){const c=f[a];for(let l=0;l<c.length;++l){const O=c[l],k=O.getSqDistanceToPosition(t,e);(i||k<u^n)&&(u=k,o=O),i=!1}}return o?(r.evtTools.object.pickOnly(s,o),!0):!1},g.raycastObject=function(s,t,e,n,o,u,i,f){return r.evtTools.object.raycastObjectToPosition(s,t,e,t+o*Math.cos(n*Math.PI/180),e+o*Math.sin(n*Math.PI/180),u,i,f)},g.raycastObjectToPosition=function(s,t,e,n,o,u,i,f){let a=null,b=f?0:(n-t)*(n-t)+(o-e)*(o-e),c=0,l=0;const O=r.staticArray(r.evtTools.object.raycastObjectToPosition);s.values(O);for(let k=0;k<O.length;k++){const d=O[k];for(let L=0;L<d.length;L++){const T=d[L],h=T.raycastTest(t,e,n,o,!f);h.collision&&(!f&&h.closeSqDist<=b?(b=h.closeSqDist,a=T,c=h.closeX,l=h.closeY):f&&h.farSqDist>=b&&(b=h.farSqDist,a=T,c=h.farX,l=h.farY))}}return a?(r.evtTools.object.pickOnly(s,a),u.setNumber(c),i.setNumber(l),!0):!1},g.doCreateObjectOnScene=function(s,t,e,n,o,u){const i=s.createObject(t),f=s.getLayer(u);return i!==null&&(i.setPosition(n,o),i.setLayer(u),i.setZOrder(f.getDefaultZOrder()),e.containsKey(t)&&e.get(t).push(i)),i},g.createObjectOnScene=function(s,t,e,n,o){return r.evtTools.object.doCreateObjectOnScene(s,t.firstKey(),t,e,n,o)},g.createObjectFromGroupOnScene=function(s,t,e,n,o,u){r.evtTools.object.doCreateObjectOnScene(s,e,t,n,o,u)},g.getPickedInstancesCount=s=>{let t=0;const e=r.staticArray(r.evtTools.object.getPickedInstancesCount);s.values(e);for(let n=0,o=e.length;n<o;++n)t+=e[n].length;return t},g.getSceneInstancesCount=(s,t)=>{let e=0;const n=r.staticArray(r.evtTools.object.getSceneInstancesCount);t.keys(n);const o=new Set(n);for(const u of o)e+=s.getInstancesCountOnScene(u);return e},g.pickedObjectsCount=g.getPickedInstancesCount})(C=p.object||(p.object={}))})(x=r.evtTools||(r.evtTools={}));class w{constructor(){this.objectsLists=new Map;this.callbacks=new Map;this.parent=null}static from(p){const j=new w;return j.parent=p,j}getOrCreateList(p){return this.objectsLists.has(p)||this.objectsLists.set(p,[]),this.objectsLists.get(p)}getObjects(p){return!this.objectsLists.has(p)&&this.parent?this.parent.getObjects(p):this.objectsLists.get(p)||[]}addObject(p,j){const m=this.getOrCreateList(p);if(m.includes(j))return;m.push(j);const v=()=>this.removeObject(p,j);this.callbacks.set(j,v),j.registerDestroyCallback(v)}removeObject(p,j){const m=this.getOrCreateList(p),v=m.indexOf(j);v!==-1&&(m.splice(v,1),j.unregisterDestroyCallback(this.callbacks.get(j)),this.callbacks.delete(j))}}r.LongLivedObjectsList=w})(gdjs||(gdjs={}));
//# sourceMappingURL=objecttools.js.map
