From 342efc623c5200d0408f03744c5d93f58b3fdab7 Mon Sep 17 00:00:00 2001 From: genxium Date: Tue, 17 Jan 2023 23:29:05 +0800 Subject: [PATCH] Made frontend landscape. --- ConcerningEdgeCases.md | 3 + frontend/assets/plugin_scripts/jsexport.js | 6748 ++++++++++++++++- .../resources/animation/KnifeGirl/Atk2.anim | 32 +- .../resources/animation/Monk/Monk.plist | 424 +- .../resources/animation/Monk/Monk.plist.meta | 754 +- .../assets/resources/animation/Monk/Monk.png | Bin 265584 -> 266699 bytes .../prefabs/ControlledCharacter.prefab | 2 +- .../prefabs/CountdownToBeginGame.prefab | 192 +- .../resources/prefabs/FindingPlayer.prefab | 882 +-- .../assets/resources/prefabs/GameRule.prefab | 14 +- .../resources/prefabs/ResultPanel.prefab | 924 +-- .../textures/MiniGame_Background.png | Bin 123738 -> 0 bytes .../textures/MiniGame_Background.png.meta | 34 - .../textures/MiniGame_Blackboard.png | Bin 97638 -> 0 bytes .../textures/MiniGame_Blackboard.png.meta | 34 - frontend/assets/scenes/default_map.fire | 119 +- frontend/assets/scenes/login.fire | 1022 ++- frontend/assets/scenes/offline_map.fire | 127 +- frontend/assets/scripts/Login.js | 2 + frontend/assets/scripts/Map.js | 5 +- frontend/assets/scripts/OfflineMap.js | 6 +- frontend/assets/scripts/TouchEventsManager.js | 8 +- jsexport/battle/characterConfig.go | 4 +- 23 files changed, 8547 insertions(+), 2789 deletions(-) delete mode 100644 frontend/assets/resources/textures/MiniGame_Background.png delete mode 100644 frontend/assets/resources/textures/MiniGame_Background.png.meta delete mode 100644 frontend/assets/resources/textures/MiniGame_Blackboard.png delete mode 100644 frontend/assets/resources/textures/MiniGame_Blackboard.png.meta diff --git a/ConcerningEdgeCases.md b/ConcerningEdgeCases.md index 0c01e20..fa7b402 100644 --- a/ConcerningEdgeCases.md +++ b/ConcerningEdgeCases.md @@ -67,3 +67,6 @@ To summarize, if UDP is used we need ## Additional hassles to care about using UDP When using UDP, it's also necessary to verify authorization of each incoming packet, e.g. by simple time limited symmetric key, due to being connectionless. + +## Why not hybrid? +Instead of replacing all use of TCP by UDP, it's more reasonable to keep using TCP for login and the "all-confirmed downsync inputFrames" from server to players (and possibly "upsync inputFrames" from player to server, but tradeoff on that remains to be discussed), while using UDP for broadcasting inputFrames of each individual player asap (either using p2p or not) just for **better prediction performance**! diff --git a/frontend/assets/plugin_scripts/jsexport.js b/frontend/assets/plugin_scripts/jsexport.js index c3f7410..0bf0256 100644 --- a/frontend/assets/plugin_scripts/jsexport.js +++ b/frontend/assets/plugin_scripts/jsexport.js @@ -2,15 +2,6747 @@ (function() { var $goVersion = "go1.18.6"; -Error.stackTraceLimit=1/0;var $global,$module,$NaN=NaN;if("undefined"!=typeof window?$global=window:"undefined"!=typeof self?$global=self:"undefined"!=typeof global?($global=global).require=require:$global=this,void 0===$global||void 0===$global.Array)throw new Error("no global object found");if("undefined"!=typeof module&&($module=module),!$global.fs&&$global.require)try{var fs=$global.require("fs");"object"==typeof fs&&null!==fs&&0!==Object.keys(fs).length&&($global.fs=fs)}catch(e){}if(!$global.fs){var outputBuf="",decoder=new TextDecoder("utf-8");$global.fs={constants:{O_WRONLY:-1,O_RDWR:-1,O_CREAT:-1,O_TRUNC:-1,O_APPEND:-1,O_EXCL:-1},writeSync:function(e,n){var r=(outputBuf+=decoder.decode(n)).lastIndexOf("\n");return-1!=r&&(console.log(outputBuf.substr(0,r)),outputBuf=outputBuf.substr(r+1)),n.length},write:function(e,n,r,t,i,a){0===r&&t===n.length&&null===i?a(null,this.writeSync(e,n)):a(enosys())}}}var $throwRuntimeError,$linknames={},$packages={},$idCounter=0,$keys=function(e){return e?Object.keys(e):[]},$flushConsole=function(){},$throwNilPointerError=function(){$throwRuntimeError("invalid memory address or nil pointer dereference")},$call=function(e,n,r){return e.apply(n,r)},$makeFunc=function(e){return function(){return $externalize(e(this,new($sliceType($jsObjectPtr))($global.Array.prototype.slice.call(arguments,[]))),$emptyInterface)}},$unused=function(e){},$print=console.log;if(void 0!==$global.process&&$global.require)try{var util=$global.require("util");$print=function(){$global.process.stderr.write(util.format.apply(this,arguments))}}catch(e){}var $println=console.log,$initAllLinknames=function(){for(var e=$keys($packages),n=0;ne.$capacity||t>e.$capacity)&&$throwRuntimeError("slice bounds out of range"),e===e.constructor.nil)return e;var i=new e.constructor(e.$array);return i.$offset=e.$offset+n,i.$length=r-n,i.$capacity=t-n,i},$substring=function(e,n,r){return(n<0||re.length)&&$throwRuntimeError("slice bounds out of range"),e.substring(n,r)},$sliceToNativeArray=function(e){return e.$array.constructor!==Array?e.$array.subarray(e.$offset,e.$offset+e.$length):e.$array.slice(e.$offset,e.$offset+e.$length)},$sliceToGoArray=function(e,n){var r=n.elem;return void 0!==r&&e.$length1114111||55296<=e&&e<=57343)&&(e=65533),e<=127?String.fromCharCode(e):e<=2047?String.fromCharCode(192|e>>6,128|63&e):e<=65535?String.fromCharCode(224|e>>12,128|e>>6&63,128|63&e):String.fromCharCode(240|e>>18,128|e>>12&63,128|e>>6&63,128|63&e)},$stringToBytes=function(e){for(var n=new Uint8Array(e.length),r=0;rt){for(var o=i-1;o>=0;o--)a.copy(e[r+o],n[t+o]);return}for(o=0;ot)for(o=i-1;o>=0;o--)e[r+o]=n[t+o];else for(o=0;oc)if(a=0,c=Math.max(o,e.$capacity<1024?2*e.$capacity:Math.floor(5*e.$capacity/4)),e.$array.constructor===Array){(i=e.$array.slice(e.$offset,e.$offset+e.$length)).length=c;for(var $=e.constructor.elem.zero,u=e.$length;u>>16&65535)*t+r*(n>>>16&65535)<<16>>>0)>>0},$floatKey=function(e){return e!=e?"NaN$"+ ++$idCounter:String(e)},$flatten64=function(e){return 4294967296*e.$high+e.$low},$shiftLeft64=function(e,n){return 0===n?e:n<32?new e.constructor(e.$high<>>32-n,e.$low<>>0):n<64?new e.constructor(e.$low<>n,(e.$low>>>n|e.$high<<32-n)>>>0):n<64?new e.constructor(e.$high>>31,e.$high>>n-32>>>0):e.$high<0?new e.constructor(-1,4294967295):new e.constructor(0,0)},$shiftRightUint64=function(e,n){return 0===n?e:n<32?new e.constructor(e.$high>>>n,(e.$low>>>n|e.$high<<32-n)>>>0):n<64?new e.constructor(0,e.$high>>>n-32):new e.constructor(0,0)},$mul64=function(e,n){var r=e.$high>>>16,t=65535&e.$high,i=e.$low>>>16,a=65535&e.$low,o=n.$high>>>16,c=65535&n.$high,$=n.$low>>>16,u=65535&n.$low,l=0,s=0,f=0,d=0;f+=(d+=a*u)>>>16,s+=(f+=i*u)>>>16,f&=65535,s+=(f+=a*$)>>>16,l+=(s+=t*u)>>>16,s&=65535,l+=(s+=i*$)>>>16,s&=65535,l+=(s+=a*c)>>>16,l+=r*u+t*$+i*c+a*o;var p=((l&=65535)<<16|(s&=65535))>>>0,h=((f&=65535)<<16|(d&=65535))>>>0;return new e.constructor(p,h)},$div64=function(e,n,r){0===n.$high&&0===n.$low&&$throwRuntimeError("integer divide by zero");var t=1,i=1,a=e.$high,o=e.$low;a<0&&(t=-1,i=-1,a=-a,0!==o&&(a--,o=4294967296-o));var c=n.$high,$=n.$low;n.$high<0&&(t*=-1,c=-c,0!==$&&(c--,$=4294967296-$));for(var u=0,l=0,s=0;c<2147483648&&(a>c||a===c&&o>$);)c=(c<<1|$>>>31)>>>0,$=$<<1>>>0,s++;for(var f=0;f<=s;f++)u=u<<1|l>>>31,l=l<<1>>>0,(a>c||a===c&&o>=$)&&(a-=c,(o-=$)<0&&(a--,o+=4294967296),4294967296===++l&&(u++,l=0)),$=($>>>1|c<<31)>>>0,c>>>=1;return r?new e.constructor(a*i,o*i):new e.constructor(u*t,l*t)},$divComplex=function(e,n){var r=e.$real===1/0||e.$real===-1/0||e.$imag===1/0||e.$imag===-1/0,t=n.$real===1/0||n.$real===-1/0||n.$imag===1/0||n.$imag===-1/0,i=!r&&(e.$real!=e.$real||e.$imag!=e.$imag),a=!t&&(n.$real!=n.$real||n.$imag!=n.$imag);if(i||a)return new e.constructor(NaN,NaN);if(r&&!t)return new e.constructor(1/0,1/0);if(!r&&t)return new e.constructor(0,0);if(0===n.$real&&0===n.$imag)return 0===e.$real&&0===e.$imag?new e.constructor(NaN,NaN):new e.constructor(1/0,1/0);if(Math.abs(n.$real)<=Math.abs(n.$imag)){var o=n.$real/n.$imag,c=n.$real*o+n.$imag;return new e.constructor((e.$real*o+e.$imag)/c,(e.$imag*o-e.$real)/c)}o=n.$imag/n.$real,c=n.$imag*o+n.$real;return new e.constructor((e.$imag*o+e.$real)/c,(e.$imag-e.$real*o)/c)},$kindBool=1,$kindInt=2,$kindInt8=3,$kindInt16=4,$kindInt32=5,$kindInt64=6,$kindUint=7,$kindUint8=8,$kindUint16=9,$kindUint32=10,$kindUint64=11,$kindUintptr=12,$kindFloat32=13,$kindFloat64=14,$kindComplex64=15,$kindComplex128=16,$kindArray=17,$kindChan=18,$kindFunc=19,$kindInterface=20,$kindMap=21,$kindPtr=22,$kindSlice=23,$kindString=24,$kindStruct=25,$kindUnsafePointer=26,$methodSynthesizers=[],$addMethodSynthesizer=function(e){null!==$methodSynthesizers?$methodSynthesizers.push(e):e()},$synthesizeMethods=function(){$methodSynthesizers.forEach(function(e){e()}),$methodSynthesizers=null},$ifaceKeyFor=function(e){if(e===$ifaceNil)return"nil";var n=e.constructor;return n.string+"$"+n.keyFor(e.$val)},$identity=function(e){return e},$typeIDCounter=0,$idKey=function(e){return void 0===e.$id&&($idCounter++,e.$id=$idCounter),String(e.$id)},$arrayPtrCtor=function(){return function(e){this.$get=function(){return e},this.$set=function(e){typ.copy(this,e)},this.$val=e}},$newType=function(e,n,r,t,i,a,o){var c;switch(n){case $kindBool:case $kindInt:case $kindInt8:case $kindInt16:case $kindInt32:case $kindUint:case $kindUint8:case $kindUint16:case $kindUint32:case $kindUintptr:case $kindUnsafePointer:(c=function(e){this.$val=e}).wrapped=!0,c.keyFor=$identity;break;case $kindString:(c=function(e){this.$val=e}).wrapped=!0,c.keyFor=function(e){return"$"+e};break;case $kindFloat32:case $kindFloat64:(c=function(e){this.$val=e}).wrapped=!0,c.keyFor=function(e){return $floatKey(e)};break;case $kindInt64:(c=function(e,n){this.$high=e+Math.floor(Math.ceil(n)/4294967296)>>0,this.$low=n>>>0,this.$val=this}).keyFor=function(e){return e.$high+"$"+e.$low};break;case $kindUint64:(c=function(e,n){this.$high=e+Math.floor(Math.ceil(n)/4294967296)>>>0,this.$low=n>>>0,this.$val=this}).keyFor=function(e){return e.$high+"$"+e.$low};break;case $kindComplex64:(c=function(e,n){this.$real=$fround(e),this.$imag=$fround(n),this.$val=this}).keyFor=function(e){return e.$real+"$"+e.$imag};break;case $kindComplex128:(c=function(e,n){this.$real=e,this.$imag=n,this.$val=this}).keyFor=function(e){return e.$real+"$"+e.$imag};break;case $kindArray:(c=function(e){this.$val=e}).wrapped=!0,c.ptr=$newType(4,$kindPtr,"*"+r,!1,"",!1,$arrayPtrCtor()),c.init=function(e,n){c.elem=e,c.len=n,c.comparable=e.comparable,c.keyFor=function(n){return Array.prototype.join.call($mapArray(n,function(n){return String(e.keyFor(n)).replace(/\\/g,"\\\\").replace(/\$/g,"\\$")}),"$")},c.copy=function(n,r){$copyArray(n,r,0,0,r.length,e)},c.ptr.init(c),Object.defineProperty(c.ptr.nil,"nilCheck",{get:$throwNilPointerError})};break;case $kindChan:(c=function(e){this.$val=e}).wrapped=!0,c.keyFor=$idKey,c.init=function(e,n,r){c.elem=e,c.sendOnly=n,c.recvOnly=r};break;case $kindFunc:(c=function(e){this.$val=e}).wrapped=!0,c.init=function(e,n,r){c.params=e,c.results=n,c.variadic=r,c.comparable=!1};break;case $kindInterface:(c={implementedBy:{},missingMethodFor:{}}).keyFor=$ifaceKeyFor,c.init=function(e){c.methods=e,e.forEach(function(e){$ifaceNil[e.prop]=$throwNilPointerError})};break;case $kindMap:(c=function(e){this.$val=e}).wrapped=!0,c.init=function(e,n){c.key=e,c.elem=n,c.comparable=!1};break;case $kindPtr:(c=o||function(e,n,r){this.$get=e,this.$set=n,this.$target=r,this.$val=this}).keyFor=$idKey,c.init=function(e){c.elem=e,c.wrapped=e.kind===$kindArray,c.nil=new c($throwNilPointerError,$throwNilPointerError)};break;case $kindSlice:(c=function(e){e.constructor!==c.nativeArray&&(e=new c.nativeArray(e)),this.$array=e,this.$offset=0,this.$length=e.length,this.$capacity=e.length,this.$val=this}).init=function(e){c.elem=e,c.comparable=!1,c.nativeArray=$nativeArray(e.kind),c.nil=new c([])};break;case $kindStruct:(c=function(e){this.$val=e}).wrapped=!0,c.ptr=$newType(4,$kindPtr,"*"+r,!1,i,a,o),c.ptr.elem=c,c.ptr.prototype.$get=function(){return this},c.ptr.prototype.$set=function(e){c.copy(this,e)},c.init=function(e,n){c.pkgPath=e,c.fields=n,n.forEach(function(e){e.typ.comparable||(c.comparable=!1)}),c.keyFor=function(e){var r=e.$val;return $mapArray(n,function(e){return String(e.typ.keyFor(r[e.prop])).replace(/\\/g,"\\\\").replace(/\$/g,"\\$")}).join("$")},c.copy=function(e,r){for(var t=0;t0;){var a=[],o=[];t.forEach(function(e){if(!i[e.typ.string])switch(i[e.typ.string]=!0,e.typ.named&&(o=o.concat(e.typ.methods),e.indirect&&(o=o.concat($ptrType(e.typ).methods))),e.typ.kind){case $kindStruct:e.typ.fields.forEach(function(n){if(n.embedded){var r=n.typ,t=r.kind===$kindPtr;a.push({typ:t?r.elem:r,indirect:e.indirect||t})}});break;case $kindInterface:o=o.concat(e.typ.methods)}}),o.forEach(function(e){void 0===n[e.name]&&(n[e.name]=e)}),t=a}return e.methodSetCache=[],Object.keys(n).sort().forEach(function(r){e.methodSetCache.push(n[r])}),e.methodSetCache},$Bool=$newType(1,$kindBool,"bool",!0,"",!1,null),$Int=$newType(4,$kindInt,"int",!0,"",!1,null),$Int8=$newType(1,$kindInt8,"int8",!0,"",!1,null),$Int16=$newType(2,$kindInt16,"int16",!0,"",!1,null),$Int32=$newType(4,$kindInt32,"int32",!0,"",!1,null),$Int64=$newType(8,$kindInt64,"int64",!0,"",!1,null),$Uint=$newType(4,$kindUint,"uint",!0,"",!1,null),$Uint8=$newType(1,$kindUint8,"uint8",!0,"",!1,null),$Uint16=$newType(2,$kindUint16,"uint16",!0,"",!1,null),$Uint32=$newType(4,$kindUint32,"uint32",!0,"",!1,null),$Uint64=$newType(8,$kindUint64,"uint64",!0,"",!1,null),$Uintptr=$newType(4,$kindUintptr,"uintptr",!0,"",!1,null),$Float32=$newType(4,$kindFloat32,"float32",!0,"",!1,null),$Float64=$newType(8,$kindFloat64,"float64",!0,"",!1,null),$Complex64=$newType(8,$kindComplex64,"complex64",!0,"",!1,null),$Complex128=$newType(16,$kindComplex128,"complex128",!0,"",!1,null),$String=$newType(8,$kindString,"string",!0,"",!1,null),$UnsafePointer=$newType(4,$kindUnsafePointer,"unsafe.Pointer",!0,"unsafe",!1,null),$nativeArray=function(e){switch(e){case $kindInt:return Int32Array;case $kindInt8:return Int8Array;case $kindInt16:return Int16Array;case $kindInt32:return Int32Array;case $kindUint:return Uint32Array;case $kindUint8:return Uint8Array;case $kindUint16:return Uint16Array;case $kindUint32:case $kindUintptr:return Uint32Array;case $kindFloat32:return Float32Array;case $kindFloat64:return Float64Array;default:return Array}},$toNativeArray=function(e,n){var r=$nativeArray(e);return r===Array?n:new r(n)},$arrayTypes={},$arrayType=function(e,n){var r=e.id+"$"+n,t=$arrayTypes[r];return void 0===t&&(t=$newType(12,$kindArray,"["+n+"]"+e.string,!1,"",!1,null),$arrayTypes[r]=t,t.init(e,n)),t},$chanType=function(e,n,r){var t=(r?"<-":"")+"chan"+(n?"<- ":" ");n||r||"<"!=e.string[0]?t+=e.string:t+="("+e.string+")";var i=n?"SendChan":r?"RecvChan":"Chan",a=e[i];return void 0===a&&(a=$newType(4,$kindChan,t,!1,"",!1,null),e[i]=a,a.init(e,n,r)),a},$Chan=function(e,n){(n<0||n>2147483647)&&$throwRuntimeError("makechan: size out of range"),this.$elem=e,this.$capacity=n,this.$buffer=[],this.$sendQueue=[],this.$recvQueue=[],this.$closed=!1},$chanNil=new $Chan(null,0);$chanNil.$sendQueue=$chanNil.$recvQueue={length:0,push:function(){},shift:function(){},indexOf:function(){return-1}};var $funcTypes={},$funcType=function(e,n,r){var t=$mapArray(e,function(e){return e.id}).join(",")+"$"+$mapArray(n,function(e){return e.id}).join(",")+"$"+r,i=$funcTypes[t];if(void 0===i){var a=$mapArray(e,function(e){return e.string});r&&(a[a.length-1]="..."+a[a.length-1].substr(2));var o="func("+a.join(", ")+")";1===n.length?o+=" "+n[0].string:n.length>1&&(o+=" ("+$mapArray(n,function(e){return e.string}).join(", ")+")"),i=$newType(4,$kindFunc,o,!1,"",!1,null),$funcTypes[t]=i,i.init(e,n,r)}return i},$interfaceTypes={},$interfaceType=function(e){var n=$mapArray(e,function(e){return e.pkg+","+e.name+","+e.typ.id}).join("$"),r=$interfaceTypes[n];if(void 0===r){var t="interface {}";0!==e.length&&(t="interface { "+$mapArray(e,function(e){return(""!==e.pkg?e.pkg+".":"")+e.name+e.typ.string.substr(4)}).join("; ")+" }"),r=$newType(8,$kindInterface,t,!1,"",!1,null),$interfaceTypes[n]=r,r.init(e)}return r},$emptyInterface=$interfaceType([]),$ifaceNil={},$error=$newType(8,$kindInterface,"error",!0,"",!1,null);$error.init([{prop:"Error",name:"Error",pkg:"",typ:$funcType([],[$String],!1)}]);var $panicValue,$jsObjectPtr,$jsErrorPtr,$mapTypes={},$mapType=function(e,n){var r=e.id+"$"+n.id,t=$mapTypes[r];return void 0===t&&(t=$newType(4,$kindMap,"map["+e.string+"]"+n.string,!1,"",!1,null),$mapTypes[r]=t,t.init(e,n)),t},$makeMap=function(e,n){for(var r={},t=0;t2147483647)&&$throwRuntimeError("makeslice: len out of range"),(r<0||r2147483647)&&$throwRuntimeError("makeslice: cap out of range");var t=new e.nativeArray(r);if(e.nativeArray===Array)for(var i=0;i4||t<0)break}}finally{0==$scheduled.length&&clearTimeout(e)}},$schedule=function(e){e.asleep&&(e.asleep=!1,$awakeGoroutines++),$scheduled.push(e),$curGoroutine===$noGoroutine&&$runScheduled()},$setTimeout=function(e,n){return $awakeGoroutines++,setTimeout(function(){$awakeGoroutines--,e()},n)},$block=function(){$curGoroutine===$noGoroutine&&$throwRuntimeError("cannot block in JavaScript callback, fix by wrapping code in goroutine"),$curGoroutine.asleep=!0},$restore=function(e,n){return void 0!==e&&void 0!==e.$blk?e:n},$send=function(e,n){e.$closed&&$throwRuntimeError("send on closed channel");var r=e.$recvQueue.shift();if(void 0===r){if(!(e.$buffer.length65535){var l=Math.floor((u-65536)/1024)+55296,s=(u-65536)%1024+56320;$+=String.fromCharCode(l,s)}else $+=String.fromCharCode(u)}return $;case $kindStruct:var f=$packages.time;if(void 0!==f&&e.constructor===f.Time.ptr){var d=$div64(e.UnixNano(),new $Int64(0,1e6));return new Date($flatten64(d))}var p={},h=function(e,n){if(n===$jsObjectPtr)return e;switch(n.kind){case $kindPtr:return e===n.nil?p:h(e.$get(),n.elem);case $kindStruct:var r=n.fields[0];return h(e[r.prop],r.typ);case $kindInterface:return h(e.$val,e.constructor);default:return p}},k=h(e,n);if(k!==p)return k;if(void 0!==r)return r(e);k={};for(a=0;a>24;case $kindInt16:return parseInt(e)<<16>>16;case $kindInt32:return parseInt(e)>>0;case $kindUint:return parseInt(e);case $kindUint8:return parseInt(e)<<24>>>24;case $kindUint16:return parseInt(e)<<16>>>16;case $kindUint32:case $kindUintptr:return parseInt(e)>>>0;case $kindInt64:case $kindUint64:return new n(0,e);case $kindFloat32:case $kindFloat64:return parseFloat(e);case $kindArray:return e.length!==n.len&&$throwRuntimeError("got array with wrong size from JavaScript native"),$mapArray(e,function(e){return $internalize(e,n.elem,i)});case $kindFunc:return function(){for(var t=[],a=0;a=128)return!1;return!0}; +Error.stackTraceLimit = Infinity; -$packages["github.com/gopherjs/gopherjs/js"]=(function(){var $pkg={},$init,A,B,J,K,M,O,P,Q,R,S,T,G,H,L;A=$pkg.Object=$newType(0,$kindStruct,"js.Object",true,"github.com/gopherjs/gopherjs/js",true,function(object_){this.$val=this;if(arguments.length===0){this.object=null;return;}this.object=object_;});B=$pkg.Error=$newType(0,$kindStruct,"js.Error",true,"github.com/gopherjs/gopherjs/js",true,function(Object_){this.$val=this;if(arguments.length===0){this.Object=null;return;}this.Object=Object_;});J=$pkg.M=$newType(4,$kindMap,"js.M",true,"github.com/gopherjs/gopherjs/js",true,null);K=$pkg.S=$newType(12,$kindSlice,"js.S",true,"github.com/gopherjs/gopherjs/js",true,null);M=$sliceType($emptyInterface);O=$ptrType(A);P=$sliceType(O);Q=$funcType([P],[O],true);R=$funcType([],[O],false);S=$funcType([O],[],false);T=$ptrType(B);A.ptr.prototype.Get=function(a){var a,b;b=this;return b.object[$externalize(a,$String)];};A.prototype.Get=function(a){return this.$val.Get(a);};A.ptr.prototype.Set=function(a,b){var a,b,c;c=this;c.object[$externalize(a,$String)]=$externalize(b,$emptyInterface);};A.prototype.Set=function(a,b){return this.$val.Set(a,b);};A.ptr.prototype.Delete=function(a){var a,b;b=this;delete b.object[$externalize(a,$String)];};A.prototype.Delete=function(a){return this.$val.Delete(a);};A.ptr.prototype.Length=function(){var a;a=this;return $parseInt(a.object.length);};A.prototype.Length=function(){return this.$val.Length();};A.ptr.prototype.Index=function(a){var a,b;b=this;return b.object[a];};A.prototype.Index=function(a){return this.$val.Index(a);};A.ptr.prototype.SetIndex=function(a,b){var a,b,c;c=this;c.object[a]=$externalize(b,$emptyInterface);};A.prototype.SetIndex=function(a,b){return this.$val.SetIndex(a,b);};A.ptr.prototype.Call=function(a,b){var a,b,c,d;c=this;return(d=c.object,d[$externalize(a,$String)].apply(d,$externalize(b,M)));};A.prototype.Call=function(a,b){return this.$val.Call(a,b);};A.ptr.prototype.Invoke=function(a){var a,b;b=this;return b.object.apply(undefined,$externalize(a,M));};A.prototype.Invoke=function(a){return this.$val.Invoke(a);};A.ptr.prototype.New=function(a){var a,b;b=this;return new($global.Function.prototype.bind.apply(b.object,[undefined].concat($externalize(a,M))));};A.prototype.New=function(a){return this.$val.New(a);};A.ptr.prototype.Bool=function(){var a;a=this;return!!(a.object);};A.prototype.Bool=function(){return this.$val.Bool();};A.ptr.prototype.String=function(){var a;a=this;return $internalize(a.object,$String);};A.prototype.String=function(){return this.$val.String();};A.ptr.prototype.Int=function(){var a;a=this;return $parseInt(a.object)>>0;};A.prototype.Int=function(){return this.$val.Int();};A.ptr.prototype.Int64=function(){var a;a=this;return $internalize(a.object,$Int64);};A.prototype.Int64=function(){return this.$val.Int64();};A.ptr.prototype.Uint64=function(){var a;a=this;return $internalize(a.object,$Uint64);};A.prototype.Uint64=function(){return this.$val.Uint64();};A.ptr.prototype.Float=function(){var a;a=this;return $parseFloat(a.object);};A.prototype.Float=function(){return this.$val.Float();};A.ptr.prototype.Interface=function(){var a;a=this;return $internalize(a.object,$emptyInterface);};A.prototype.Interface=function(){return this.$val.Interface();};A.ptr.prototype.Unsafe=function(){var a;a=this;return a.object;};A.prototype.Unsafe=function(){return this.$val.Unsafe();};B.ptr.prototype.Error=function(){var a;a=this;return"JavaScript error: "+$internalize(a.Object.message,$String);};B.prototype.Error=function(){return this.$val.Error();};B.ptr.prototype.Stack=function(){var a;a=this;return $internalize(a.Object.stack,$String);};B.prototype.Stack=function(){return this.$val.Stack();};G=function(a){var a,b,c,d,e,f;b=a;c=new($global.Object)();c.__internal_object__=b;d=b.constructor.methods;e=0;while(true){if(!(e<$parseInt(d.length))){break;}f=[f];f[0]=d[e];if(!($internalize(f[0].pkg,$String)==="")){e=e+(1)>>0;continue;}c[$externalize($internalize(f[0].name,$String),$String)]=$externalize((function(f){return function(g){var g;return $externalizeFunction(b[$externalize($internalize(f[0].prop,$String),$String)],f[0].typ,$externalize(true,$Bool)).apply(b,$externalize(g,P));};})(f),Q);e=e+(1)>>0;}return c;};$pkg.MakeWrapper=G;H=function(a){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,$s,$r,$c}=$restore(this,{a});$s=$s||0;s:while(true){switch($s){case 0:b=[b];c=[c];b[0]=a;d=b[0].constructor;c[0]=new($global.Object)();e=(function(b,c){return function(e,f){var e,f;$global.Object.defineProperty(c[0],$externalize(e,$String),$externalize(f,J));};})(b,c);$r=e("__internal_object__",$makeMap($String.keyFor,[{k:"value",v:new $jsObjectPtr(b[0])}]));$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}f=$internalize(d.string,$String);g=$internalize(d.pkg,$String);h="";if(f.charCodeAt(0)===42){h="*";}i=0;while(true){if(!(i>0));break;}i=i+(1)>>0;}j=g+"."+h+f;$r=e("$type",$makeMap($String.keyFor,[{k:"value",v:new $String(j)}]));$s=2;case 2:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}k=null;l=new($global.Array)();m=d.methods;if(!(m===undefined)){l=l.concat(m);}n=d.elem;if(!(n===undefined)){k=n.fields;l=l.concat(n.methods);}else{k=d.fields;}o=0;case 3:if(!(o<$parseInt(l.length))){$s=4;continue;}p=[p];p[0]=l[o];if(!($internalize(p[0].pkg,$String)==="")){o=o+(1)>>0;$s=3;continue;}$r=e($internalize(p[0].prop,$String),$makeMap($String.keyFor,[{k:"value",v:new Q((function(b,c,p){return function(q){var q;return $externalizeFunction(b[0][$externalize($internalize(p[0].prop,$String),$String)],p[0].typ,$externalize(true,$Bool),H).apply(b[0],$externalize(q,P));};})(b,c,p))}]));$s=5;case 5:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}o=o+(1)>>0;$s=3;continue;case 4:if(!(k===undefined)){$s=6;continue;}$s=7;continue;case 6:q=0;case 8:if(!(q<$parseInt(k.length))){$s=9;continue;}r=[r];r[0]=k[q];if(!!!(r[0].exported)){q=q+(1)>>0;$s=8;continue;}$r=e($internalize(r[0].prop,$String),$makeMap($String.keyFor,[{k:"get",v:new R((function(b,c,r){return function(){var s;s=$copyIfRequired(b[0].$val[$externalize($internalize(r[0].prop,$String),$String)],r[0].typ);return $externalize(s,r[0].typ,H);};})(b,c,r))},{k:"set",v:new S((function(b,c,r){return function(s){var s,t;t=$internalize(s,r[0].typ,H);b[0].$val[$externalize($internalize(r[0].prop,$String),$String)]=t;};})(b,c,r))}]));$s=10;case 10:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}q=q+(1)>>0;$s=8;continue;case 9:case 7:$s=-1;return c[0];}return;}var $f={$blk:H,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,$s};return $f;};$pkg.MakeFullWrapper=H;L=function(){var a;a=new B.ptr(null);$unused(a);};O.methods=[{prop:"Get",name:"Get",pkg:"",typ:$funcType([$String],[O],false)},{prop:"Set",name:"Set",pkg:"",typ:$funcType([$String,$emptyInterface],[],false)},{prop:"Delete",name:"Delete",pkg:"",typ:$funcType([$String],[],false)},{prop:"Length",name:"Length",pkg:"",typ:$funcType([],[$Int],false)},{prop:"Index",name:"Index",pkg:"",typ:$funcType([$Int],[O],false)},{prop:"SetIndex",name:"SetIndex",pkg:"",typ:$funcType([$Int,$emptyInterface],[],false)},{prop:"Call",name:"Call",pkg:"",typ:$funcType([$String,M],[O],true)},{prop:"Invoke",name:"Invoke",pkg:"",typ:$funcType([M],[O],true)},{prop:"New",name:"New",pkg:"",typ:$funcType([M],[O],true)},{prop:"Bool",name:"Bool",pkg:"",typ:$funcType([],[$Bool],false)},{prop:"String",name:"String",pkg:"",typ:$funcType([],[$String],false)},{prop:"Int",name:"Int",pkg:"",typ:$funcType([],[$Int],false)},{prop:"Int64",name:"Int64",pkg:"",typ:$funcType([],[$Int64],false)},{prop:"Uint64",name:"Uint64",pkg:"",typ:$funcType([],[$Uint64],false)},{prop:"Float",name:"Float",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Interface",name:"Interface",pkg:"",typ:$funcType([],[$emptyInterface],false)},{prop:"Unsafe",name:"Unsafe",pkg:"",typ:$funcType([],[$Uintptr],false)}];T.methods=[{prop:"Error",name:"Error",pkg:"",typ:$funcType([],[$String],false)},{prop:"Stack",name:"Stack",pkg:"",typ:$funcType([],[$String],false)}];A.init("github.com/gopherjs/gopherjs/js",[{prop:"object",name:"object",embedded:false,exported:false,typ:O,tag:""}]);B.init("",[{prop:"Object",name:"Object",embedded:true,exported:true,typ:O,tag:""}]);J.init($String,$emptyInterface);K.init($emptyInterface);$init=function(){$pkg.$init=function(){};var $f,$c=false,$s=0,$r;if(this!==undefined&&this.$blk!==undefined){$f=this;$c=true;$s=$f.$s;$r=$f.$r;}s:while(true){switch($s){case 0:L();}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); -$packages["runtime"]=(function(){var $pkg={},$init,A,C,D,AT,AZ,BD,AM,E,AU;A=$packages["github.com/gopherjs/gopherjs/js"];C=$pkg._type=$newType(0,$kindStruct,"runtime._type",true,"runtime",false,function(str_){this.$val=this;if(arguments.length===0){this.str="";return;}this.str=str_;});D=$pkg.TypeAssertionError=$newType(0,$kindStruct,"runtime.TypeAssertionError",true,"runtime",true,function(_interface_,concrete_,asserted_,missingMethod_){this.$val=this;if(arguments.length===0){this._interface=AZ.nil;this.concrete=AZ.nil;this.asserted=AZ.nil;this.missingMethod="";return;}this._interface=_interface_;this.concrete=concrete_;this.asserted=asserted_;this.missingMethod=missingMethod_;});AT=$pkg.errorString=$newType(8,$kindString,"runtime.errorString",true,"runtime",false,null);AZ=$ptrType(C);BD=$ptrType(D);C.ptr.prototype.string=function(){var a;a=this;return a.str;};C.prototype.string=function(){return this.$val.string();};C.ptr.prototype.pkgpath=function(){var a;a=this;return"";};C.prototype.pkgpath=function(){return this.$val.pkgpath();};D.ptr.prototype.RuntimeError=function(){};D.prototype.RuntimeError=function(){return this.$val.RuntimeError();};D.ptr.prototype.Error=function(){var a,b,c,d,e;a=this;b="interface";if(!(a._interface===AZ.nil)){b=a._interface.string();}c=a.asserted.string();if(a.concrete===AZ.nil){return"interface conversion: "+b+" is nil, not "+c;}d=a.concrete.string();if(a.missingMethod===""){e="interface conversion: "+b+" is "+d+", not "+c;if(d===c){if(!(a.concrete.pkgpath()===a.asserted.pkgpath())){e=e+(" (types from different packages)");}else{e=e+(" (types from different scopes)");}}return e;}return"interface conversion: "+d+" is not "+c+": missing method "+a.missingMethod;};D.prototype.Error=function(){return this.$val.Error();};E=function(){var a,b;a=$packages[$externalize("github.com/gopherjs/gopherjs/js",$String)];$jsObjectPtr=a.Object.ptr;$jsErrorPtr=a.Error.ptr;$throwRuntimeError=AU;AM=$internalize($goVersion,$String);b=$ifaceNil;b=new D.ptr(AZ.nil,AZ.nil,AZ.nil,"");$unused(b);};AT.prototype.RuntimeError=function(){var a;a=this.$val;};$ptrType(AT).prototype.RuntimeError=function(){return new AT(this.$get()).RuntimeError();};AT.prototype.Error=function(){var a;a=this.$val;return"runtime error: "+(a);};$ptrType(AT).prototype.Error=function(){return new AT(this.$get()).Error();};AU=function(a){var a;$panic(new AT((a)));};AZ.methods=[{prop:"string",name:"string",pkg:"runtime",typ:$funcType([],[$String],false)},{prop:"pkgpath",name:"pkgpath",pkg:"runtime",typ:$funcType([],[$String],false)}];BD.methods=[{prop:"RuntimeError",name:"RuntimeError",pkg:"",typ:$funcType([],[],false)},{prop:"Error",name:"Error",pkg:"",typ:$funcType([],[$String],false)}];AT.methods=[{prop:"RuntimeError",name:"RuntimeError",pkg:"",typ:$funcType([],[],false)},{prop:"Error",name:"Error",pkg:"",typ:$funcType([],[$String],false)}];C.init("runtime",[{prop:"str",name:"str",embedded:false,exported:false,typ:$String,tag:""}]);D.init("runtime",[{prop:"_interface",name:"_interface",embedded:false,exported:false,typ:AZ,tag:""},{prop:"concrete",name:"concrete",embedded:false,exported:false,typ:AZ,tag:""},{prop:"asserted",name:"asserted",embedded:false,exported:false,typ:AZ,tag:""},{prop:"missingMethod",name:"missingMethod",embedded:false,exported:false,typ:$String,tag:""}]);$init=function(){$pkg.$init=function(){};var $f,$c=false,$s=0,$r;if(this!==undefined&&this.$blk!==undefined){$f=this;$c=true;$s=$f.$s;$r=$f.$r;}s:while(true){switch($s){case 0:$r=A.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}AM="";E();}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); -$packages["math/bits"]=(function(){var $pkg={},$init;$init=function(){$pkg.$init=function(){};var $f,$c=false,$s=0,$r;if(this!==undefined&&this.$blk!==undefined){$f=this;$c=true;$s=$f.$s;$r=$f.$r;}s:while(true){switch($s){case 0:}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); -$packages["math"]=(function(){var $pkg={},$init,B,A,IT,IU,IV,IW,FL,FM,FN,FO,FP,HH,EI,EX,EY,FK,GA,GH,GK,GL,GM,GS,GT,GW,GX,GZ,HA,HD,HI,HL,HM;B=$packages["github.com/gopherjs/gopherjs/js"];A=$packages["math/bits"];IT=$arrayType($Uint32,2);IU=$arrayType($Float32,2);IV=$arrayType($Float64,1);IW=$structType("math",[{prop:"uint32array",name:"uint32array",embedded:false,exported:false,typ:IT,tag:""},{prop:"float32array",name:"float32array",embedded:false,exported:false,typ:IU,tag:""},{prop:"float64array",name:"float64array",embedded:false,exported:false,typ:IV,tag:""}]);EI=function(av){var av,aw,ax,ay,az,ba,bb;aw=HL(av);ax=((($shiftRightUint64(aw,52).$low>>>0))&2047)>>>0;if(ax<1023){aw=(ay=new $Uint64(2147483648,0),new $Uint64(aw.$high&ay.$high,(aw.$low&ay.$low)>>>0));if(ax===1022){aw=(az=new $Uint64(1072693248,0),new $Uint64(aw.$high|az.$high,(aw.$low|az.$low)>>>0));}}else if(ax<1075){ax=ax-(1023)>>>0;aw=(ba=$shiftRightUint64(new $Uint64(524288,0),ax),new $Uint64(aw.$high+ba.$high,aw.$low+ba.$low));aw=(bb=$shiftRightUint64(new $Uint64(1048575,4294967295),ax),new $Uint64(aw.$high&~bb.$high,(aw.$low&~bb.$low)>>>0));}return HM(aw);};$pkg.Round=EI;EX=function(av,aw){var av,aw;if(GL(av,1)||GL(aw,1)){return GK(1);}else if(GM(av)||GM(aw)){return GW();}else if((av===0)&&(av===aw)){if(GZ(av)){return aw;}return av;}if(av>aw){return av;}return aw;};EY=function(av,aw){var av,aw;if(GL(av,-1)||GL(aw,-1)){return GK(-1);}else if(GM(av)||GM(aw)){return GW();}else if((av===0)&&(av===aw)){if(GZ(av)){return av;}return aw;}if(av>>0)));};$pkg.Abs=FK;GA=function(av){var av;return $parseFloat(FL.cos(av));};$pkg.Cos=GA;GH=function(av){var av;return $parseFloat(FL.floor(av));};$pkg.Floor=GH;GK=function(av){var av;if(av>=0){return FN;}else{return FO;}};$pkg.Inf=GK;GL=function(av,aw){var av,aw;if(av===FN){return aw>=0;}if(av===FO){return aw<=0;}return false;};$pkg.IsInf=GL;GM=function(av){var av,aw;aw=false;aw=!((av===av));return aw;};$pkg.IsNaN=GM;GS=function(av,aw){var av,aw;return EX(av,aw);};$pkg.Max=GS;GT=function(av,aw){var av,aw;return EY(av,aw);};$pkg.Min=GT;GW=function(){return FP;};$pkg.NaN=GW;GX=function(av,aw){var av,aw;if((av===1)||((av===-1)&&((aw===FN)||(aw===FO)))){return 1;}return $parseFloat(FL.pow(av,aw));};$pkg.Pow=GX;GZ=function(av){var av;return av<0||(1/av===FO);};$pkg.Signbit=GZ;HA=function(av){var av;return $parseFloat(FL.sin(av));};$pkg.Sin=HA;HD=function(av){var av;return $parseFloat(FL.sqrt(av));};$pkg.Sqrt=HD;HI=function(){var av;av=new($global.ArrayBuffer)(8);HH.uint32array=new($global.Uint32Array)(av);HH.float32array=new($global.Float32Array)(av);HH.float64array=new($global.Float64Array)(av);};HL=function(av){var av,aw,ax;HH.float64array[0]=av;return(aw=$shiftLeft64((new $Uint64(0,HH.uint32array[1])),32),ax=(new $Uint64(0,HH.uint32array[0])),new $Uint64(aw.$high+ax.$high,aw.$low+ax.$low));};$pkg.Float64bits=HL;HM=function(av){var av;HH.uint32array[0]=((av.$low>>>0));HH.uint32array[1]=(($shiftRightUint64(av,32).$low>>>0));return HH.float64array[0];};$pkg.Float64frombits=HM;$init=function(){$pkg.$init=function(){};var $f,$c=false,$s=0,$r;if(this!==undefined&&this.$blk!==undefined){$f=this;$c=true;$s=$f.$s;$r=$f.$r;}s:while(true){switch($s){case 0:$r=B.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=A.$init();$s=2;case 2:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}HH=new IW.ptr(IT.zero(),IU.zero(),IV.zero());FL=$global.Math;FM=0;FN=1/FM;FO=-1/FM;FP=$parseFloat($NaN);HI();}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); -$packages["resolv"]=(function(){var $pkg={},$init,A,B,C,N,P,Q,S,U,X,Z,AA,AE,AG,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,K,O,R,T,V,W,Y,AB,AC,AD,AF,AH;A=$packages["math"];B=$pkg.Vector=$newType(12,$kindSlice,"resolv.Vector",true,"resolv",true,null);C=$pkg.Axis=$newType(4,$kindInt,"resolv.Axis",true,"resolv",true,null);N=$pkg.Space=$newType(0,$kindStruct,"resolv.Space",true,"resolv",true,function(Cells_,CellWidth_,CellHeight_){this.$val=this;if(arguments.length===0){this.Cells=AL.nil;this.CellWidth=0;this.CellHeight=0;return;}this.Cells=Cells_;this.CellWidth=CellWidth_;this.CellHeight=CellHeight_;});P=$pkg.Shape=$newType(8,$kindInterface,"resolv.Shape",true,"resolv",true,null);Q=$pkg.Line=$newType(0,$kindStruct,"resolv.Line",true,"resolv",true,function(Start_,End_){this.$val=this;if(arguments.length===0){this.Start=B.nil;this.End=B.nil;return;}this.Start=Start_;this.End=End_;});S=$pkg.ConvexPolygon=$newType(0,$kindStruct,"resolv.ConvexPolygon",true,"resolv",true,function(Points_,X_,Y_,Closed_){this.$val=this;if(arguments.length===0){this.Points=AP.nil;this.X=0;this.Y=0;this.Closed=false;return;}this.Points=Points_;this.X=X_;this.Y=Y_;this.Closed=Closed_;});U=$pkg.ContactSet=$newType(0,$kindStruct,"resolv.ContactSet",true,"resolv",true,function(Points_,MTV_,Center_){this.$val=this;if(arguments.length===0){this.Points=AP.nil;this.MTV=B.nil;this.Center=B.nil;return;}this.Points=Points_;this.MTV=MTV_;this.Center=Center_;});X=$pkg.Circle=$newType(0,$kindStruct,"resolv.Circle",true,"resolv",true,function(X_,Y_,Radius_){this.$val=this;if(arguments.length===0){this.X=0;this.Y=0;this.Radius=0;return;}this.X=X_;this.Y=Y_;this.Radius=Radius_;});Z=$pkg.Projection=$newType(0,$kindStruct,"resolv.Projection",true,"resolv",true,function(Min_,Max_){this.$val=this;if(arguments.length===0){this.Min=0;this.Max=0;return;}this.Min=Min_;this.Max=Max_;});AA=$pkg.Object=$newType(0,$kindStruct,"resolv.Object",true,"resolv",true,function(Shape_,Space_,X_,Y_,W_,H_,TouchingCells_,Data_,ignoreList_,tags_){this.$val=this;if(arguments.length===0){this.Shape=$ifaceNil;this.Space=AM.nil;this.X=0;this.Y=0;this.W=0;this.H=0;this.TouchingCells=AK.nil;this.Data=$ifaceNil;this.ignoreList=false;this.tags=AV.nil;return;}this.Shape=Shape_;this.Space=Space_;this.X=X_;this.Y=Y_;this.W=W_;this.H=H_;this.TouchingCells=TouchingCells_;this.Data=Data_;this.ignoreList=ignoreList_;this.tags=tags_;});AE=$pkg.Collision=$newType(0,$kindStruct,"resolv.Collision",true,"resolv",true,function(checkingObject_,dx_,dy_,Objects_,Cells_){this.$val=this;if(arguments.length===0){this.checkingObject=AN.nil;this.dx=0;this.dy=0;this.Objects=AO.nil;this.Cells=AK.nil;return;}this.checkingObject=checkingObject_;this.dx=dx_;this.dy=dy_;this.Objects=Objects_;this.Cells=Cells_;});AG=$pkg.Cell=$newType(0,$kindStruct,"resolv.Cell",true,"resolv",true,function(X_,Y_,Objects_){this.$val=this;if(arguments.length===0){this.X=0;this.Y=0;this.Objects=AO.nil;return;}this.X=X_;this.Y=Y_;this.Objects=Objects_;});AI=$sliceType($Float64);AJ=$ptrType(AG);AK=$sliceType(AJ);AL=$sliceType(AK);AM=$ptrType(N);AN=$ptrType(AA);AO=$sliceType(AN);AP=$sliceType(B);AQ=$ptrType(Q);AR=$sliceType(AQ);AS=$ptrType(X);AT=$ptrType(S);AU=$ptrType(U);AV=$sliceType($String);AW=$ptrType(AE);AX=$sliceType(C);AY=$mapType(AN,$Bool);B.prototype.Clone=function(){var a,b;a=this;b=$makeSlice(B,a.$length);$copySlice(b,a);return b;};$ptrType(B).prototype.Clone=function(){return this.$get().Clone();};B.prototype.Add=function(a){var a,b,c,d,e,f;b=this;c=b.$length;d=a;e=0;while(true){if(!(e=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]).$length>c){AC($convertSliceType(b,AI),1,$convertSliceType(b,AI),$convertSliceType($subslice(((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]),0,c),AI));}else{AC($convertSliceType(b,AI),1,$convertSliceType(b,AI),$convertSliceType(((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]),AI));}e++;}return b;};$ptrType(B).prototype.Add=function(a){return this.$get().Add(a);};B.prototype.Sub=function(a){var a,b,c,d,e,f;b=this;c=b.$length;d=a;e=0;while(true){if(!(e=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]).$length>c){AC($convertSliceType(b,AI),-1,$convertSliceType($subslice(((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]),0,c),AI),$convertSliceType(b,AI));}else{AC($convertSliceType(b,AI),-1,$convertSliceType(((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]),AI),$convertSliceType(b,AI));}e++;}return b;};$ptrType(B).prototype.Sub=function(a){return this.$get().Sub(a);};B.prototype.Scale=function(a){var a,b;b=this;AD($convertSliceType(b,AI),a,$convertSliceType(b,AI));return b;};$ptrType(B).prototype.Scale=function(a){return this.$get().Scale(a);};B.prototype.Equal=function(a){var a,b,c,d,e;b=this;if(!((b.$length===a.$length))){return false;}c=b;d=0;while(true){if(!(d=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+e])-((e<0||e>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+e]))>1e-08){return false;}d++;}return true;};$ptrType(B).prototype.Equal=function(a){return this.$get().Equal(a);};B.prototype.Magnitude=function(){var a;a=this;return A.Sqrt(a.Magnitude2());};$ptrType(B).prototype.Magnitude=function(){return this.$get().Magnitude();};B.prototype.Magnitude2=function(){var a,b,c,d,e;a=this;b=0;c=a;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b=b+(e*e);d++;}return b;};$ptrType(B).prototype.Magnitude2=function(){return this.$get().Magnitude2();};B.prototype.Unit=function(){var a,b,c,d,e;a=this;b=a.Magnitude();if(b<1e-08){return a;}c=a;d=0;while(true){if(!(d=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+e]=((e<0||e>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+e])/b);d++;}return a;};$ptrType(B).prototype.Unit=function(){return this.$get().Unit();};K=function(a,b){var a,b,c,d,e,f,g,h,i,j,k;c=0;d=a.$length;e=b.$length;f=c;g=d;h=e;if(g>h){b=$appendSlice(b,$convertSliceType($makeSlice(B,(g-h>>0)),AI));}if(g>0)),AI));}i=a;j=0;while(true){if(!(j=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+k])*((k<0||k>=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+k]));j++;}return f;};$pkg.Dot=K;B.prototype.Dot=function(a){var a,b;b=this;return K(b,a);};$ptrType(B).prototype.Dot=function(a){return this.$get().Dot(a);};B.prototype.Cross=function(a){var a,b;b=this;if(!((b.$length===3))||!((a.$length===3))){return B.nil;}return new B([(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])*(2>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+2])-(2>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+2])*(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]),(2>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+2])*(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0])-(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])*(2>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+2]),(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])*(2>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+2])-(2>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+2])*(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0])]);};$ptrType(B).prototype.Cross=function(a){return this.$get().Cross(a);};B.prototype.Rotate=function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;c=this;d=2;e=c.$length;f=d;g=e;if(g===0){return c;}if(b.$length>0){f=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]);}if((g===1)&&!((f===2))){c=$append(c,0,0);}if((g<2&&(f===2))||((g===2)&&!((f===2)))){c=$append(c,0);}h=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]);i=(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]);j=h;k=i;l=A.Cos(a);m=A.Sin(a);n=l;o=m;p=f;if(p===(0)){q=(2>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+2]);(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=k*n-q*o);(2>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+2]=k*o+q*n);}else if(p===(1)){r=(2>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+2]);(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=j*n+r*o);(2>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+2]=-j*o+r*n);}else if(p===(2)){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=j*n-k*o);(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=j*o+k*n);}if(g>3){return $subslice(c,0,3);}return c;};$ptrType(B).prototype.Rotate=function(a,b){return this.$get().Rotate(a,b);};B.prototype.X=function(){var a;a=this;if(a.$length<1){return 0;}return(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0]);};$ptrType(B).prototype.X=function(){return this.$get().X();};B.prototype.Y=function(){var a;a=this;if(a.$length<2){return 0;}return(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]);};$ptrType(B).prototype.Y=function(){return this.$get().Y();};B.prototype.Z=function(){var a;a=this;if(a.$length<3){return 0;}return(2>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+2]);};$ptrType(B).prototype.Z=function(){return this.$get().Z();};O=function(a,b,c,d){var a,b,c,d,e,f,g;e=new N.ptr(AL.nil,c,d);e.Resize((f=a/c,(f===f&&f!==1/0&&f!==-1/0)?f>>0:$throwRuntimeError("integer divide by zero")),(g=b/d,(g===g&&g!==1/0&&g!==-1/0)?g>>0:$throwRuntimeError("integer divide by zero")));return e;};$pkg.NewSpace=O;N.ptr.prototype.Add=function(a){var{a,b,c,d,e,$s,$r,$c}=$restore(this,{a});$s=$s||0;s:while(true){switch($s){case 0:b=this;if(b===AM.nil){$panic(new $String("ERROR: space is nil"));}c=a;d=0;case 1:if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);e.Space=b;$r=e.Update();$s=3;case 3:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}d++;$s=1;continue;case 2:$s=-1;return;}return;}var $f={$blk:N.ptr.prototype.Add,$c:true,$r,a,b,c,d,e,$s};return $f;};N.prototype.Add=function(a){return this.$val.Add(a);};N.ptr.prototype.Remove=function(a){var a,b,c,d,e,f,g,h;b=this;if(b===AM.nil){$panic(new $String("ERROR: space is nil"));}c=a;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);f=e.TouchingCells;g=0;while(true){if(!(g=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+g]);h.unregister(e);g++;}e.TouchingCells=new AK([]);e.Space=AM.nil;d++;}};N.prototype.Remove=function(a){return this.$val.Remove(a);};N.ptr.prototype.Objects=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;a=this;b=$makeMap(AN.keyFor,[]);c=new AO([]);d=a.Cells;e=0;while(true){if(!(e=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+f]));i=0;while(true){if(!(i=m.$length)?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+f])),((j<0||j>=l.$length)?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+j])).Objects;n=0;while(true){if(!(n=k.$length)?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+n]);p=(q=b[AN.keyFor(o)],q!==undefined?[q.v,true]:[false,false]);r=p[1];if(!r){c=$append(c,o);s=o;(b||$throwRuntimeError("assignment to entry in nil map"))[AN.keyFor(s)]={k:s,v:true};}n++;}i++;}e++;}return c;};N.prototype.Objects=function(){return this.$val.Objects();};N.ptr.prototype.Resize=function(a,b){var a,b,c,d,e,f,g;c=this;c.Cells=new AL([]);d=0;while(true){if(!(d=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+d]=$append((f=c.Cells,((d<0||d>=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+d])),AH(e,d))));e=e+(1)>>0;}d=d+(1)>>0;}};N.prototype.Resize=function(a,b){return this.$val.Resize(a,b);};N.ptr.prototype.Cell=function(a,b){var a,b,c,d,e,f;c=this;if(b>=0&&b=0&&a<(d=c.Cells,((b<0||b>=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+b])).$length){return(e=(f=c.Cells,((b<0||b>=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+b])),((a<0||a>=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+a]));}return AJ.nil;};N.prototype.Cell=function(a,b){return this.$val.Cell(a,b);};N.ptr.prototype.CheckCells=function(a,b,c,d,e){var a,b,c,d,e,f,g,h,i,j,k,l,m;f=this;g=a;while(true){if(!(g<(a+c>>0))){break;}h=b;while(true){if(!(h<(b+d>>0))){break;}i=f.Cell(g,h);if(!(i===AJ.nil)){if(e.$length>0){if(i.ContainsTags(e)){j=i.Objects;k=0;while(true){if(!(k=j.$length)?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+k]);if(l.HasTags(e)){return l;}k++;}}}else if(i.Occupied()){return(m=i.Objects,(0>=m.$length?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+0]));}}h=h+(1)>>0;}g=g+(1)>>0;}return AN.nil;};N.prototype.CheckCells=function(a,b,c,d,e){return this.$val.CheckCells(a,b,c,d,e);};N.ptr.prototype.CheckCellsWorld=function(a,b,c,d,e){var a,b,c,d,e,f,g,h,i,j,k,l;f=this;g=f.WorldToSpace(a,b);h=g[0];i=g[1];j=f.WorldToSpace(c,d);k=j[0];l=j[1];return f.CheckCells(h,i,k,l,e);};N.prototype.CheckCellsWorld=function(a,b,c,d,e){return this.$val.CheckCellsWorld(a,b,c,d,e);};N.ptr.prototype.UnregisterAllObjects=function(){var a,b,c,d,e,f,g;a=this;b=0;while(true){if(!(b=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+b])).$length)){break;}g=(e=(f=a.Cells,((b<0||b>=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+b])),((c<0||c>=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+c]));a.Remove(g.Objects);c=c+(1)>>0;}b=b+(1)>>0;}};N.prototype.UnregisterAllObjects=function(){return this.$val.UnregisterAllObjects();};N.ptr.prototype.WorldToSpace=function(a,b){var a,b,c,d,e;c=this;d=((A.Floor(a/(c.CellWidth))>>0));e=((A.Floor(b/(c.CellHeight))>>0));return[d,e];};N.prototype.WorldToSpace=function(a,b){return this.$val.WorldToSpace(a,b);};N.ptr.prototype.SpaceToWorld=function(a,b){var a,b,c,d,e;c=this;d=(($imul(a,c.CellWidth)));e=(($imul(b,c.CellHeight)));return[d,e];};N.prototype.SpaceToWorld=function(a,b){return this.$val.SpaceToWorld(a,b);};N.ptr.prototype.Height=function(){var a;a=this;return a.Cells.$length;};N.prototype.Height=function(){return this.$val.Height();};N.ptr.prototype.Width=function(){var a,b;a=this;if(a.Cells.$length>0){return(b=a.Cells,(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])).$length;}return 0;};N.prototype.Width=function(){return this.$val.Width();};N.ptr.prototype.CellsInLine=function(a,b,c,d){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;e=this;f=new AK([]);g=e.Cell(a,b);h=e.Cell(c,d);if(!(g===AJ.nil)&&!(h===AJ.nil)){i=new B([((c-a>>0)),((d-b>>0))]).Unit();(0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0]=(0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0])*(((j=e.CellWidth/2,(j===j&&j!==1/0&&j!==-1/0)?j>>0:$throwRuntimeError("integer divide by zero")))));(1>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+1]=(1>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+1])*(((k=e.CellHeight/2,(k===k&&k!==1/0&&k!==-1/0)?k>>0:$throwRuntimeError("integer divide by zero")))));l=e.SpaceToWorld(a,b);m=l[0];n=l[1];q=new B([m+((o=e.CellWidth/2,(o===o&&o!==1/0&&o!==-1/0)?o>>0:$throwRuntimeError("integer divide by zero"))),n+((p=e.CellHeight/2,(p===p&&p!==1/0&&p!==-1/0)?p>>0:$throwRuntimeError("integer divide by zero")))]);r=false;while(true){if(!(!(g===AJ.nil))){break;}if(g===h){f=$append(f,g);break;}f=$append(f,g);if(r){(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1]=(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1])+((1>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+1])));}else{(0>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+0]=(0>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+0])+((0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0])));}s=e.WorldToSpace((0>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+0]),(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1]));t=s[0];u=s[1];v=e.Cell(t,u);if(!(v===g)){g=v;}r=!r;}}return f;};N.prototype.CellsInLine=function(a,b,c,d){return this.$val.CellsInLine(a,b,c,d);};R=function(a,b,c,d){var a,b,c,d;return new Q.ptr(new B([a,b]),new B([c,d]));};$pkg.NewLine=R;Q.ptr.prototype.Project=function(a){var a,b;b=this;return b.Vector().Scale(a.Dot(b.Start.Sub(new AP([b.End]))));};Q.prototype.Project=function(a){return this.$val.Project(a);};Q.ptr.prototype.Normal=function(){var a,b;a=this;b=a.Vector();return new B([(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1]),-(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])]).Unit();};Q.prototype.Normal=function(){return this.$val.Normal();};Q.ptr.prototype.Vector=function(){var a;a=this;return a.End.Clone().Sub(new AP([a.Start])).Unit();};Q.prototype.Vector=function(){return this.$val.Vector();};Q.ptr.prototype.IntersectionPointsLine=function(a){var a,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;b=this;k=((c=b.End,(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]))-(d=b.Start,(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0])))*((e=a.End,(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]))-(f=a.Start,(1>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+1])))-((g=a.End,(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]))-(h=a.Start,(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0])))*((i=b.End,(1>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+1]))-(j=b.Start,(1>=j.$length?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+1])));if(!((k===0))){t=((((l=b.Start,(1>=l.$length?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+1]))-(m=a.Start,(1>=m.$length?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+1])))*((n=a.End,(0>=n.$length?($throwRuntimeError("index out of range"),undefined):n.$array[n.$offset+0]))-(o=a.Start,(0>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+0]))))-(((p=b.Start,(0>=p.$length?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+0]))-(q=a.Start,(0>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+0])))*((r=a.End,(1>=r.$length?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+1]))-(s=a.Start,(1>=s.$length?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+1]))))+1)/k;ac=((((u=b.Start,(1>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+1]))-(v=a.Start,(1>=v.$length?($throwRuntimeError("index out of range"),undefined):v.$array[v.$offset+1])))*((w=b.End,(0>=w.$length?($throwRuntimeError("index out of range"),undefined):w.$array[w.$offset+0]))-(x=b.Start,(0>=x.$length?($throwRuntimeError("index out of range"),undefined):x.$array[x.$offset+0]))))-(((y=b.Start,(0>=y.$length?($throwRuntimeError("index out of range"),undefined):y.$array[y.$offset+0]))-(z=a.Start,(0>=z.$length?($throwRuntimeError("index out of range"),undefined):z.$array[z.$offset+0])))*((aa=b.End,(1>=aa.$length?($throwRuntimeError("index out of range"),undefined):aa.$array[aa.$offset+1]))-(ab=b.Start,(1>=ab.$length?($throwRuntimeError("index out of range"),undefined):ab.$array[ab.$offset+1]))))+1)/k;if((0=ad.$length?($throwRuntimeError("index out of range"),undefined):ad.$array[ad.$offset+0]))-(ae=b.Start,(0>=ae.$length?($throwRuntimeError("index out of range"),undefined):ae.$array[ae.$offset+0]));ai=(ag=b.End,(1>=ag.$length?($throwRuntimeError("index out of range"),undefined):ag.$array[ag.$offset+1]))-(ah=b.Start,(1>=ah.$length?($throwRuntimeError("index out of range"),undefined):ah.$array[ah.$offset+1]));return new B([(aj=b.Start,(0>=aj.$length?($throwRuntimeError("index out of range"),undefined):aj.$array[aj.$offset+0]))+(t*af),(ak=b.Start,(1>=ak.$length?($throwRuntimeError("index out of range"),undefined):ak.$array[ak.$offset+1]))+(t*ai)]);}}return B.nil;};Q.prototype.IntersectionPointsLine=function(a){return this.$val.IntersectionPointsLine(a);};Q.ptr.prototype.IntersectionPointsCircle=function(a){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;b=this;c=new AP([]);d=new B([a.X,a.Y]);e=b.Start.Sub(new AP([d]));f=b.End.Sub(new AP([d]));g=f.Sub(new AP([e]));h=(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0])*(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0])+(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])*(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1]);i=2*(((0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0])*(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]))+((1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])*(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])));j=((0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])*(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]))+((1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])*(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]))-(a.Radius*a.Radius);k=i*i-(4*h*j);if(k<0){}else if(k===0){l=-i/(2*h);if(l>=0&&l<=1){c=$append(c,new B([(m=b.Start,(0>=m.$length?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+0]))+l*(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]),(n=b.Start,(1>=n.$length?($throwRuntimeError("index out of range"),undefined):n.$array[n.$offset+1]))+l*(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])]));}}else{o=(-i+A.Sqrt(k))/(2*h);if(o>=0&&o<=1){c=$append(c,new B([(p=b.Start,(0>=p.$length?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+0]))+o*(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]),(q=b.Start,(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1]))+o*(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])]));}o=(-i-A.Sqrt(k))/(2*h);if(o>=0&&o<=1){c=$append(c,new B([(r=b.Start,(0>=r.$length?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+0]))+o*(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]),(s=b.Start,(1>=s.$length?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+1]))+o*(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])]));}}return c;};Q.prototype.IntersectionPointsCircle=function(a){return this.$val.IntersectionPointsCircle(a);};T=function(a){var a,b;b=new S.ptr(new AP([]),0,0,true);b.AddPoints(a);return b;};$pkg.NewConvexPolygon=T;S.ptr.prototype.Clone=function(){var a,b,c,d,e,f;a=this;b=new AP([]);c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b=$append(b,e.Clone());d++;}f=T(AI.nil);f.X=a.X;f.Y=a.Y;f.AddPointsVec(b);f.Closed=a.Closed;return f;};S.prototype.Clone=function(){return this.$val.Clone();};S.ptr.prototype.AddPointsVec=function(a){var a,b;b=this;b.Points=$appendSlice(b.Points,a);};S.prototype.AddPointsVec=function(a){return this.$val.AddPointsVec(a);};S.ptr.prototype.AddPoints=function(a){var a,b,c,d;b=this;c=0;while(true){if(!(c=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+c]),(d=c+1>>0,((d<0||d>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+d]))]));c=c+(2)>>0;}};S.prototype.AddPoints=function(a){return this.$val.AddPoints(a);};S.ptr.prototype.Lines=function(){var a,b,c,d,e,f,g,h,i,j;a=this;b=new AR([]);c=a.Transformed();d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);f=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]);g=e;h=f;if(d<(c.$length-1>>0)){h=(i=d+1>>0,((i<0||i>=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+i]));}else if(!a.Closed){break;}j=R((0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]),(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1]),(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0]),(1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1]));b=$append(b,j);d=d+(1)>>0;}return b;};S.prototype.Lines=function(){return this.$val.Lines();};S.ptr.prototype.Transformed=function(){var a,b,c,d,e;a=this;b=new AP([]);c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b=$append(b,new B([(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])+a.X,(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])+a.Y]));d++;}return b;};S.prototype.Transformed=function(){return this.$val.Transformed();};S.ptr.prototype.Bounds=function(){var a,b,c,d,e,f,g,h;a=this;b=a.Transformed();e=new B([(c=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]),(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])),(d=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]),(1>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+1]))]);f=e.Clone();g=0;while(true){if(!(g=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+g]);if((0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0])<(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])){(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]=(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0]));}else if((0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0])>(0>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+0])){(0>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+0]=(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0]));}if((1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1])<(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])){(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]=(1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1]));}else if((1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1])>(1>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+1])){(1>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+1]=(1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1]));}g=g+(1)>>0;}return[e,f];};S.prototype.Bounds=function(){return this.$val.Bounds();};S.ptr.prototype.Position=function(){var a;a=this;return[a.X,a.Y];};S.prototype.Position=function(){return this.$val.Position();};S.ptr.prototype.SetPosition=function(a,b){var a,b,c;c=this;c.X=a;c.Y=b;};S.prototype.SetPosition=function(a,b){return this.$val.SetPosition(a,b);};S.ptr.prototype.SetPositionVec=function(a){var a,b;b=this;b.X=a.X();b.Y=a.Y();};S.prototype.SetPositionVec=function(a){return this.$val.SetPositionVec(a);};S.ptr.prototype.Move=function(a,b){var a,b,c;c=this;c.X=c.X+(a);c.Y=c.Y+(b);};S.prototype.Move=function(a,b){return this.$val.Move(a,b);};S.ptr.prototype.MoveVec=function(a){var a,b;b=this;b.X=b.X+(a.X());b.Y=b.Y+(a.Y());};S.prototype.MoveVec=function(a){return this.$val.MoveVec(a);};S.ptr.prototype.Center=function(){var a,b,c,d,e;a=this;b=new B([0,0]);c=a.Transformed();d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b.Add(new AP([e]));d++;}(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])/((a.Transformed().$length)));(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1]=(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])/((a.Transformed().$length)));return b;};S.prototype.Center=function(){return this.$val.Center();};S.ptr.prototype.Project=function(a){var a,b,c,d,e,f,g,h,i,j,k;b=this;a=a.Unit();c=b.Transformed();f=a.Dot(new B([(d=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]),(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0])),(e=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]),(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]))]));g=f;h=1;while(true){if(!(h=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+h]),(0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0])),(j=((h<0||h>=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+h]),(1>=j.$length?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+1]))]));if(kg){g=k;}h=h+(1)>>0;}return new Z.ptr(f,g);};S.prototype.Project=function(a){return this.$val.Project(a);};S.ptr.prototype.SATAxes=function(){var a,b,c,d,e;a=this;b=new AP([]);c=a.Lines();d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b=$append(b,e.Normal());d++;}return b;};S.prototype.SATAxes=function(){return this.$val.SATAxes();};S.ptr.prototype.PointInside=function(a){var a,b,c,d,e,f,g;b=this;c=R((0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0]),(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]),(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0])+9.99999999999e+11,(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]));d=0;e=b.Lines();f=0;while(true){if(!(f=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+f]);if(!(g.IntersectionPointsLine(c)===B.nil)){d=d+(1)>>0;}f++;}return d===1;};S.prototype.PointInside=function(a){return this.$val.PointInside(a);};V=function(){return new U.ptr(new AP([]),new B([0,0]),new B([0,0]));};$pkg.NewContactSet=V;U.ptr.prototype.LeftmostPoint=function(){var a,b,c,d,e;a=this;b=B.nil;c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(b===B.nil||(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])<(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])){b=e;}d++;}return b;};U.prototype.LeftmostPoint=function(){return this.$val.LeftmostPoint();};U.ptr.prototype.RightmostPoint=function(){var a,b,c,d,e;a=this;b=B.nil;c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(b===B.nil||(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])>(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])){b=e;}d++;}return b;};U.prototype.RightmostPoint=function(){return this.$val.RightmostPoint();};U.ptr.prototype.TopmostPoint=function(){var a,b,c,d,e;a=this;b=B.nil;c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(b===B.nil||(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])<(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])){b=e;}d++;}return b;};U.prototype.TopmostPoint=function(){return this.$val.TopmostPoint();};U.ptr.prototype.BottommostPoint=function(){var a,b,c,d,e;a=this;b=B.nil;c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(b===B.nil||(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])>(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])){b=e;}d++;}return b;};U.prototype.BottommostPoint=function(){return this.$val.BottommostPoint();};S.ptr.prototype.Intersection=function(a,b,c){var a,aa,ab,ac,ad,ae,af,ag,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;d=this;e=V();f=d.X;g=d.Y;d.X=d.X+(a);d.Y=d.Y+(b);h=$assertType(c,AS,true);i=h[0];j=h[1];if(j){k=d.Lines();l=0;while(true){if(!(l=k.$length)?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+l]);e.Points=$appendSlice(e.Points,m.IntersectionPointsCircle(i));l++;}}else{n=$assertType(c,AT,true);o=n[0];p=n[1];if(p){q=d.Lines();r=0;while(true){if(!(r=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+r]);t=o.Lines();u=0;while(true){if(!(u=t.$length)?($throwRuntimeError("index out of range"),undefined):t.$array[t.$offset+u]);w=s.IntersectionPointsLine(v);if(!(w===B.nil)){e.Points=$append(e.Points,w);}u++;}r++;}}}if(e.Points.$length>0){x=e.Points;y=0;while(true){if(!(y=x.$length)?($throwRuntimeError("index out of range"),undefined):x.$array[x.$offset+y]);e.Center=e.Center.Add(new AP([z]));y++;}(ab=e.Center,(0>=ab.$length?($throwRuntimeError("index out of range"),undefined):ab.$array[ab.$offset+0]=(aa=e.Center,(0>=aa.$length?($throwRuntimeError("index out of range"),undefined):aa.$array[aa.$offset+0]))/((e.Points.$length))));(ad=e.Center,(1>=ad.$length?($throwRuntimeError("index out of range"),undefined):ad.$array[ad.$offset+1]=(ac=e.Center,(1>=ac.$length?($throwRuntimeError("index out of range"),undefined):ac.$array[ac.$offset+1]))/((e.Points.$length))));ae=d.calculateMTV(e,c);if(!(ae===B.nil)){e.MTV=ae;}}else{e=AU.nil;}if(!(e===AU.nil)&&(!((a===0))||!((b===0)))){af=new B([a,b]).Magnitude();ag=e.MTV.Magnitude();e.MTV=e.MTV.Unit().Scale(ag-af);}d.X=f;d.Y=g;return e;};S.prototype.Intersection=function(a,b,c){return this.$val.Intersection(a,b,c);};S.ptr.prototype.calculateMTV=function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o;c=this;d=new B([0,0]);e=new B([1.7976931348623157e+308,0]);f=b;if($assertType(f,AT,true)[1]){g=f.$val;h=c.SATAxes();i=0;while(true){if(!(i=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]);if(!$clone(c.Project(j),Z).Overlapping($clone(g.Project(j),Z))){return B.nil;}k=$clone(c.Project(j),Z).Overlap($clone(g.Project(j),Z));if(e.Magnitude()>k){e=j.Scale(k);}i++;}l=g.SATAxes();m=0;while(true){if(!(m=l.$length)?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+m]);if(!$clone(c.Project(n),Z).Overlapping($clone(g.Project(n),Z))){return B.nil;}o=$clone(c.Project(n),Z).Overlap($clone(g.Project(n),Z));if(e.Magnitude()>o){e=n.Scale(o);}m++;}}(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0]=(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]));(1>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+1]=(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]));return d;};S.prototype.calculateMTV=function(a,b){return this.$val.calculateMTV(a,b);};S.ptr.prototype.ContainedBy=function(a){var a,b,c,d,e,f,g,h,i,j;b=this;c=a;if($assertType(c,AT,true)[1]){d=c.$val;e=b.SATAxes();f=0;while(true){if(!(f=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+f]);if(!$clone(b.Project(g),Z).IsInside($clone(d.Project(g),Z))){return false;}f++;}h=d.SATAxes();i=0;while(true){if(!(i=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]);if(!$clone(b.Project(j),Z).IsInside($clone(d.Project(j),Z))){return false;}i++;}}return true;};S.prototype.ContainedBy=function(a){return this.$val.ContainedBy(a);};S.ptr.prototype.FlipH=function(){var a,b,c,d;a=this;b=a.Points;c=0;while(true){if(!(c=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+c]);(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0]=-(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0]));c++;}a.ReverseVertexOrder();};S.prototype.FlipH=function(){return this.$val.FlipH();};S.ptr.prototype.FlipV=function(){var a,b,c,d;a=this;b=a.Points;c=0;while(true){if(!(c=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+c]);(1>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+1]=-(1>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+1]));c++;}a.ReverseVertexOrder();};S.prototype.FlipV=function(){return this.$val.FlipV();};S.ptr.prototype.ReverseVertexOrder=function(){var a,b,c,d,e;a=this;c=new AP([(b=a.Points,(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]))]);d=a.Points.$length-1>>0;while(true){if(!(d>=1)){break;}c=$append(c,(e=a.Points,((d<0||d>=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+d])));d=d-(1)>>0;}a.Points=c;};S.prototype.ReverseVertexOrder=function(){return this.$val.ReverseVertexOrder();};W=function(a,b,c,d){var a,b,c,d;return T(new AI([a,b,a+c,b,a+c,b+d,a,b+d]));};$pkg.NewRectangle=W;Y=function(a,b,c){var a,b,c,d;d=new X.ptr(a,b,c);return d;};$pkg.NewCircle=Y;X.ptr.prototype.Clone=function(){var a;a=this;return Y(a.X,a.Y,a.Radius);};X.prototype.Clone=function(){return this.$val.Clone();};X.ptr.prototype.Bounds=function(){var a;a=this;return[new B([a.X-a.Radius,a.Y-a.Radius]),new B([a.X+a.Radius,a.Y+a.Radius])];};X.prototype.Bounds=function(){return this.$val.Bounds();};X.ptr.prototype.Intersection=function(a,b,c){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=this;e=AU.nil;f=d.X;g=d.Y;d.X=d.X+(a);d.Y=d.Y+(b);h=c;if($assertType(h,AT,true)[1]){i=h.$val;e=i.Intersection(-a,-b,d);if(!(e===AU.nil)){e.MTV=e.MTV.Scale(-1);}}else if($assertType(h,AS,true)[1]){j=h.$val;e=V();e.Points=d.IntersectionPointsCircle(j);if(e.Points.$length===0){return AU.nil;}e.MTV=new B([d.X-j.X,d.Y-j.Y]);k=e.MTV.Magnitude();e.MTV=e.MTV.Unit().Scale(d.Radius+j.Radius-k);l=e.Points;m=0;while(true){if(!(m=l.$length)?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+m]);e.Center=e.Center.Add(new AP([n]));m++;}(p=e.Center,(0>=p.$length?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+0]=(o=e.Center,(0>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+0]))/((e.Points.$length))));(r=e.Center,(1>=r.$length?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+1]=(q=e.Center,(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1]))/((e.Points.$length))));}d.X=f;d.Y=g;return e;};X.prototype.Intersection=function(a,b,c){return this.$val.Intersection(a,b,c);};X.ptr.prototype.Move=function(a,b){var a,b,c;c=this;c.X=c.X+(a);c.Y=c.Y+(b);};X.prototype.Move=function(a,b){return this.$val.Move(a,b);};X.ptr.prototype.MoveVec=function(a){var a,b;b=this;b.X=b.X+(a.X());b.Y=b.Y+(a.Y());};X.prototype.MoveVec=function(a){return this.$val.MoveVec(a);};X.ptr.prototype.SetPosition=function(a,b){var a,b,c;c=this;c.X=a;c.Y=b;};X.prototype.SetPosition=function(a,b){return this.$val.SetPosition(a,b);};X.ptr.prototype.SetPositionVec=function(a){var a,b;b=this;b.X=a.X();b.Y=a.Y();};X.prototype.SetPositionVec=function(a){return this.$val.SetPositionVec(a);};X.ptr.prototype.Position=function(){var a;a=this;return[a.X,a.Y];};X.prototype.Position=function(){return this.$val.Position();};X.ptr.prototype.PointInside=function(a){var a,b;b=this;return a.Sub(new AP([new B([b.X,b.Y])])).Magnitude()<=b.Radius;};X.prototype.PointInside=function(a){return this.$val.PointInside(a);};X.ptr.prototype.IntersectionPointsCircle=function(a){var a,b,c,d,e,f,g;b=this;c=A.Sqrt(A.Pow(a.X-b.X,2)+A.Pow(a.Y-b.Y,2));if(c>b.Radius+a.Radius||c0;};Z.prototype.Overlapping=function(a){return this.$val.Overlapping(a);};Z.ptr.prototype.Overlap=function(a){var a,b;b=this;return A.Min(b.Max,a.Max)-A.Max(b.Min,a.Min);};Z.prototype.Overlap=function(a){return this.$val.Overlap(a);};Z.ptr.prototype.IsInside=function(a){var a,b;b=this;return b.Min>=a.Min&&b.Max<=a.Max;};Z.prototype.IsInside=function(a){return this.$val.IsInside(a);};AB=function(a,b,c,d,e){var a,b,c,d,e,f;f=new AA.ptr($ifaceNil,AM.nil,a,b,c,d,AK.nil,$ifaceNil,$makeMap(AN.keyFor,[]),new AV([]));if(e.$length>0){f.AddTags(e);}return f;};$pkg.NewObject=AB;AA.ptr.prototype.Clone=function(){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{});$s=$s||0;s:while(true){switch($s){case 0:a=this;b=AB(a.X,a.Y,a.W,a.H,a.Tags());b.Data=a.Data;if(!($interfaceIsEqual(a.Shape,$ifaceNil))){$s=1;continue;}$s=2;continue;case 1:c=a.Shape.Clone();$s=3;case 3:if($c){$c=false;c=c.$blk();}if(c&&c.$blk!==undefined){break s;}$r=b.SetShape(c);$s=4;case 4:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}case 2:d=a.ignoreList;e=0;f=$keys(d);while(true){if(!(e>0;}h=h+(1)>>0;}}if(!($interfaceIsEqual(a.Shape,$ifaceNil))){$s=1;continue;}$s=2;continue;case 1:$r=a.Shape.SetPosition(a.X,a.Y);$s=3;case 3:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}case 2:$s=-1;return;}return;}var $f={$blk:AA.ptr.prototype.Update,$c:true,$r,a,b,c,d,e,f,g,h,i,j,$s};return $f;};AA.prototype.Update=function(){return this.$val.Update();};AA.ptr.prototype.AddTags=function(a){var a,b;b=this;b.tags=$appendSlice(b.tags,a);};AA.prototype.AddTags=function(a){return this.$val.AddTags(a);};AA.ptr.prototype.RemoveTags=function(a){var a,b,c,d,e,f,g,h,i;b=this;c=a;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);f=b.tags;g=0;while(true){if(!(g=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+g]);if(i===e){b.tags=$appendSlice($subslice(b.tags,0,h),$subslice(b.tags,(h+1>>0)));break;}g++;}d++;}};AA.prototype.RemoveTags=function(a){return this.$val.RemoveTags(a);};AA.ptr.prototype.HasTags=function(a){var a,b,c,d,e,f,g,h;b=this;c=a;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);f=b.tags;g=0;while(true){if(!(g=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+g]);if(h===e){return true;}g++;}d++;}return false;};AA.prototype.HasTags=function(a){return this.$val.HasTags(a);};AA.ptr.prototype.Tags=function(){var a;a=this;return $appendSlice(new AV([]),a.tags);};AA.prototype.Tags=function(){return this.$val.Tags();};AA.ptr.prototype.SetShape=function(a){var{a,b,$s,$r,$c}=$restore(this,{a});$s=$s||0;s:while(true){switch($s){case 0:b=this;if(!($interfaceIsEqual(b.Shape,a))){$s=1;continue;}$s=2;continue;case 1:b.Shape=a;$r=b.Update();$s=3;case 3:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}case 2:$s=-1;return;}return;}var $f={$blk:AA.ptr.prototype.SetShape,$c:true,$r,a,b,$s};return $f;};AA.prototype.SetShape=function(a){return this.$val.SetShape(a);};AA.ptr.prototype.BoundsToSpace=function(a,b){var a,b,c,d,e,f,g,h,i;c=this;d=c.Space.WorldToSpace(c.X+a,c.Y+b);e=d[0];f=d[1];g=c.Space.WorldToSpace(c.X+c.W+a-1,c.Y+c.H+b-1);h=g[0];i=g[1];return[e,f,h,i];};AA.prototype.BoundsToSpace=function(a,b){return this.$val.BoundsToSpace(a,b);};AA.ptr.prototype.SharesCells=function(a){var a,b,c,d,e;b=this;c=b.TouchingCells;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e.Contains(a)){return true;}d++;}return false;};AA.prototype.SharesCells=function(a){return this.$val.SharesCells(a);};AA.ptr.prototype.SharesCellsTags=function(a){var a,b,c,d,e;b=this;c=b.TouchingCells;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e.ContainsTags(a)){return true;}d++;}return false;};AA.prototype.SharesCellsTags=function(a){return this.$val.SharesCellsTags(a);};AA.ptr.prototype.Center=function(){var a;a=this;return[a.X+(a.W/2),a.Y+(a.H/2)];};AA.prototype.Center=function(){return this.$val.Center();};AA.ptr.prototype.SetCenter=function(a,b){var a,b,c;c=this;c.X=a-(c.W/2);c.Y=b-(c.H/2);};AA.prototype.SetCenter=function(a,b){return this.$val.SetCenter(a,b);};AA.ptr.prototype.CellPosition=function(){var a,b;a=this;b=a.Center();return a.Space.WorldToSpace(b[0],b[1]);};AA.prototype.CellPosition=function(){return this.$val.CellPosition();};AA.ptr.prototype.SetRight=function(a){var a,b;b=this;b.X=a-b.W;};AA.prototype.SetRight=function(a){return this.$val.SetRight(a);};AA.ptr.prototype.SetBottom=function(a){var a,b;b=this;b.Y=a-b.H;};AA.prototype.SetBottom=function(a){return this.$val.SetBottom(a);};AA.ptr.prototype.Bottom=function(){var a;a=this;return a.Y+a.H;};AA.prototype.Bottom=function(){return this.$val.Bottom();};AA.ptr.prototype.Right=function(){var a;a=this;return a.X+a.W;};AA.prototype.Right=function(){return this.$val.Right();};AA.ptr.prototype.SetBounds=function(a,b){var a,b,c;c=this;c.X=(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0]);c.Y=(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]);c.W=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])-c.X;c.H=(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])-c.Y;};AA.prototype.SetBounds=function(a,b){return this.$val.SetBounds(a,b);};AA.ptr.prototype.Check=function(a,b,c){var a,aa,ab,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;d=this;if(d.Space===AM.nil){return AW.nil;}e=AF();e.checkingObject=d;if(a<0){a=A.Min(a,-1);}else if(a>0){a=A.Max(a,1);}if(b<0){b=A.Min(b,-1);}else if(b>0){b=A.Max(b,1);}e.dx=a;e.dy=b;f=d.BoundsToSpace(a,b);g=f[0];h=f[1];i=f[2];j=f[3];k=$makeMap(AN.keyFor,[]);l=$makeMap(AJ.keyFor,[]);m=h;while(true){if(!(m<=j)){break;}n=g;while(true){if(!(n<=i)){break;}o=d.Space.Cell(n,m);if(!(o===AJ.nil)){p=o.Objects;q=0;while(true){if(!(q=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+q]);t=(s=d.ignoreList[AN.keyFor(r)],s!==undefined?s.v:false);if(r===d||t){q++;continue;}u=(v=k[AN.keyFor(r)],v!==undefined?[v.v,true]:[false,false]);w=u[1];if(((c.$length===0)||r.HasTags(c))&&!w){e.Objects=$append(e.Objects,r);x=r;(k||$throwRuntimeError("assignment to entry in nil map"))[AN.keyFor(x)]={k:x,v:true};y=(z=l[AJ.keyFor(o)],z!==undefined?[z.v,true]:[false,false]);aa=y[1];if(!aa){e.Cells=$append(e.Cells,o);ab=o;(l||$throwRuntimeError("assignment to entry in nil map"))[AJ.keyFor(ab)]={k:ab,v:true};}q++;continue;}q++;}}n=n+(1)>>0;}m=m+(1)>>0;}if(e.Objects.$length===0){return AW.nil;}return e;};AA.prototype.Check=function(a,b,c){return this.$val.Check(a,b,c);};AA.ptr.prototype.Overlaps=function(a){var a,b;b=this;return a.X<=b.X+b.W&&a.X+a.W>=b.X&&a.Y<=b.Y+b.H&&a.Y+a.H>=b.Y;};AA.prototype.Overlaps=function(a){return this.$val.Overlaps(a);};AA.ptr.prototype.AddToIgnoreList=function(a){var a,b,c;b=this;c=a;(b.ignoreList||$throwRuntimeError("assignment to entry in nil map"))[AN.keyFor(c)]={k:c,v:true};};AA.prototype.AddToIgnoreList=function(a){return this.$val.AddToIgnoreList(a);};AA.ptr.prototype.RemoveFromIgnoreList=function(a){var a,b;b=this;delete b.ignoreList[AN.keyFor(a)];};AA.prototype.RemoveFromIgnoreList=function(a){return this.$val.RemoveFromIgnoreList(a);};AC=function(a,b,c,d){var a,b,c,d,e,f,g,h,i;e=d.$length;f=c;g=0;while(true){if(!(g=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+g]);if(h===e){return;}((h<0||h>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+h]=b*i+((h<0||h>=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+h]));g++;}};AD=function(a,b,c){var a,b,c,d,e,f;d=c;e=0;while(true){if(!(e=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]=((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f])*(b));e++;}};AF=function(){return new AE.ptr(AN.nil,0,0,new AO([]),AK.nil);};$pkg.NewCollision=AF;AE.ptr.prototype.HasTags=function(a){var a,b,c,d,e;b=this;c=b.Objects;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e===b.checkingObject){d++;continue;}if(e.HasTags(a)){return true;}d++;}return false;};AE.prototype.HasTags=function(a){return this.$val.HasTags(a);};AE.ptr.prototype.ObjectsByTags=function(a){var a,b,c,d,e,f;b=this;c=new AO([]);d=b.Objects;e=0;while(true){if(!(e=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+e]);if(f===b.checkingObject){e++;continue;}if(f.HasTags(a)){c=$append(c,f);}e++;}return c;};AE.prototype.ObjectsByTags=function(a){return this.$val.ObjectsByTags(a);};AE.ptr.prototype.ContactWithObject=function(a){var a,b,c;b=this;c=new B([0,0]);if(b.dx<0){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=a.X+a.W-b.checkingObject.X);}else if(b.dx>0){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=a.X-b.checkingObject.W-b.checkingObject.X);}if(b.dy<0){(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=a.Y+a.H-b.checkingObject.Y);}else if(b.dy>0){(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=a.Y-b.checkingObject.H-b.checkingObject.Y);}return c;};AE.prototype.ContactWithObject=function(a){return this.$val.ContactWithObject(a);};AE.ptr.prototype.ContactWithCell=function(a){var a,b,c,d,e;b=this;c=new B([0,0]);d=(($imul(a.X,b.checkingObject.Space.CellWidth)));e=(($imul(a.Y,b.checkingObject.Space.CellHeight)));if(b.dx<0){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=d+(b.checkingObject.Space.CellWidth)-b.checkingObject.X);}else if(b.dx>0){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=d-b.checkingObject.W-b.checkingObject.X);}if(b.dy<0){(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=e+(b.checkingObject.Space.CellHeight)-b.checkingObject.Y);}else if(b.dy>0){(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=e-b.checkingObject.H-b.checkingObject.Y);}return c;};AE.prototype.ContactWithCell=function(a){return this.$val.ContactWithCell(a);};AE.ptr.prototype.SlideAgainstCell=function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;c=this;d=c.checkingObject.Space;f=(e=c.Cells,(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]));g=d.SpaceToWorld(f.X,f.Y);h=g[0];i=g[1];j=(d.CellWidth)/2;k=(d.CellHeight)/2;h=h+(j);i=i+(k);l=c.checkingObject.Center();m=l[0];n=l[1];o=m-h;p=n-i;q=d.Cell(f.X-1>>0,f.Y);r=d.Cell(f.X+1>>0,f.Y);s=d.Cell(f.X,f.Y-1>>0);t=d.Cell(f.X,f.Y+1>>0);u=new B([0,0]);if(!((c.dy===0))){if(o>0&&(r===AJ.nil||!r.ContainsTags(b))){(0>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+0]=h+j-c.checkingObject.X);}else if(o<0&&(q===AJ.nil||!q.ContainsTags(b))){(0>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+0]=h-j-(c.checkingObject.X+c.checkingObject.W));}else{return B.nil;}}if(!((c.dx===0))){if(p>0&&(t===AJ.nil||!t.ContainsTags(b))){(1>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+1]=i+k-c.checkingObject.Y);}else if(p<0&&(s===AJ.nil||!s.ContainsTags(b))){(1>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+1]=i-k-(c.checkingObject.Y+c.checkingObject.H));}else{return B.nil;}}return u;};AE.prototype.SlideAgainstCell=function(a,b){return this.$val.SlideAgainstCell(a,b);};AH=function(a,b){var a,b;return new AG.ptr(a,b,new AO([]));};AG.ptr.prototype.register=function(a){var a,b;b=this;if(!b.Contains(a)){b.Objects=$append(b.Objects,a);}};AG.prototype.register=function(a){return this.$val.register(a);};AG.ptr.prototype.unregister=function(a){var a,b,c,d,e,f,g,h,i;b=this;c=b.Objects;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(f===a){(i=b.Objects,((e<0||e>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+e]=(g=b.Objects,h=b.Objects.$length-1>>0,((h<0||h>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+h]))));b.Objects=$subslice(b.Objects,0,(b.Objects.$length-1>>0));break;}d++;}};AG.prototype.unregister=function(a){return this.$val.unregister(a);};AG.ptr.prototype.Contains=function(a){var a,b,c,d,e;b=this;c=b.Objects;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e===a){return true;}d++;}return false;};AG.prototype.Contains=function(a){return this.$val.Contains(a);};AG.ptr.prototype.ContainsTags=function(a){var a,b,c,d,e;b=this;c=b.Objects;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e.HasTags(a)){return true;}d++;}return false;};AG.prototype.ContainsTags=function(a){return this.$val.ContainsTags(a);};AG.ptr.prototype.Occupied=function(){var a;a=this;return a.Objects.$length>0;};AG.prototype.Occupied=function(){return this.$val.Occupied();};B.methods=[{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[B],false)},{prop:"Add",name:"Add",pkg:"",typ:$funcType([AP],[B],true)},{prop:"Sub",name:"Sub",pkg:"",typ:$funcType([AP],[B],true)},{prop:"Scale",name:"Scale",pkg:"",typ:$funcType([$Float64],[B],false)},{prop:"Equal",name:"Equal",pkg:"",typ:$funcType([B],[$Bool],false)},{prop:"Magnitude",name:"Magnitude",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Magnitude2",name:"Magnitude2",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Unit",name:"Unit",pkg:"",typ:$funcType([],[B],false)},{prop:"Dot",name:"Dot",pkg:"",typ:$funcType([B],[$Float64],false)},{prop:"Cross",name:"Cross",pkg:"",typ:$funcType([B],[B],false)},{prop:"Rotate",name:"Rotate",pkg:"",typ:$funcType([$Float64,AX],[B],true)},{prop:"X",name:"X",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Y",name:"Y",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Z",name:"Z",pkg:"",typ:$funcType([],[$Float64],false)}];AM.methods=[{prop:"Add",name:"Add",pkg:"",typ:$funcType([AO],[],true)},{prop:"Remove",name:"Remove",pkg:"",typ:$funcType([AO],[],true)},{prop:"Objects",name:"Objects",pkg:"",typ:$funcType([],[AO],false)},{prop:"Resize",name:"Resize",pkg:"",typ:$funcType([$Int,$Int],[],false)},{prop:"Cell",name:"Cell",pkg:"",typ:$funcType([$Int,$Int],[AJ],false)},{prop:"CheckCells",name:"CheckCells",pkg:"",typ:$funcType([$Int,$Int,$Int,$Int,AV],[AN],true)},{prop:"CheckCellsWorld",name:"CheckCellsWorld",pkg:"",typ:$funcType([$Float64,$Float64,$Float64,$Float64,AV],[AN],true)},{prop:"UnregisterAllObjects",name:"UnregisterAllObjects",pkg:"",typ:$funcType([],[],false)},{prop:"WorldToSpace",name:"WorldToSpace",pkg:"",typ:$funcType([$Float64,$Float64],[$Int,$Int],false)},{prop:"SpaceToWorld",name:"SpaceToWorld",pkg:"",typ:$funcType([$Int,$Int],[$Float64,$Float64],false)},{prop:"Height",name:"Height",pkg:"",typ:$funcType([],[$Int],false)},{prop:"Width",name:"Width",pkg:"",typ:$funcType([],[$Int],false)},{prop:"CellsInLine",name:"CellsInLine",pkg:"",typ:$funcType([$Int,$Int,$Int,$Int],[AK],false)}];AQ.methods=[{prop:"Project",name:"Project",pkg:"",typ:$funcType([B],[B],false)},{prop:"Normal",name:"Normal",pkg:"",typ:$funcType([],[B],false)},{prop:"Vector",name:"Vector",pkg:"",typ:$funcType([],[B],false)},{prop:"IntersectionPointsLine",name:"IntersectionPointsLine",pkg:"",typ:$funcType([AQ],[B],false)},{prop:"IntersectionPointsCircle",name:"IntersectionPointsCircle",pkg:"",typ:$funcType([AS],[AP],false)}];AT.methods=[{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[P],false)},{prop:"AddPointsVec",name:"AddPointsVec",pkg:"",typ:$funcType([AP],[],true)},{prop:"AddPoints",name:"AddPoints",pkg:"",typ:$funcType([AI],[],true)},{prop:"Lines",name:"Lines",pkg:"",typ:$funcType([],[AR],false)},{prop:"Transformed",name:"Transformed",pkg:"",typ:$funcType([],[AP],false)},{prop:"Bounds",name:"Bounds",pkg:"",typ:$funcType([],[B,B],false)},{prop:"Position",name:"Position",pkg:"",typ:$funcType([],[$Float64,$Float64],false)},{prop:"SetPosition",name:"SetPosition",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"SetPositionVec",name:"SetPositionVec",pkg:"",typ:$funcType([B],[],false)},{prop:"Move",name:"Move",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"MoveVec",name:"MoveVec",pkg:"",typ:$funcType([B],[],false)},{prop:"Center",name:"Center",pkg:"",typ:$funcType([],[B],false)},{prop:"Project",name:"Project",pkg:"",typ:$funcType([B],[Z],false)},{prop:"SATAxes",name:"SATAxes",pkg:"",typ:$funcType([],[AP],false)},{prop:"PointInside",name:"PointInside",pkg:"",typ:$funcType([B],[$Bool],false)},{prop:"Intersection",name:"Intersection",pkg:"",typ:$funcType([$Float64,$Float64,P],[AU],false)},{prop:"calculateMTV",name:"calculateMTV",pkg:"resolv",typ:$funcType([AU,P],[B],false)},{prop:"ContainedBy",name:"ContainedBy",pkg:"",typ:$funcType([P],[$Bool],false)},{prop:"FlipH",name:"FlipH",pkg:"",typ:$funcType([],[],false)},{prop:"FlipV",name:"FlipV",pkg:"",typ:$funcType([],[],false)},{prop:"ReverseVertexOrder",name:"ReverseVertexOrder",pkg:"",typ:$funcType([],[],false)}];AU.methods=[{prop:"LeftmostPoint",name:"LeftmostPoint",pkg:"",typ:$funcType([],[B],false)},{prop:"RightmostPoint",name:"RightmostPoint",pkg:"",typ:$funcType([],[B],false)},{prop:"TopmostPoint",name:"TopmostPoint",pkg:"",typ:$funcType([],[B],false)},{prop:"BottommostPoint",name:"BottommostPoint",pkg:"",typ:$funcType([],[B],false)}];AS.methods=[{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[P],false)},{prop:"Bounds",name:"Bounds",pkg:"",typ:$funcType([],[B,B],false)},{prop:"Intersection",name:"Intersection",pkg:"",typ:$funcType([$Float64,$Float64,P],[AU],false)},{prop:"Move",name:"Move",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"MoveVec",name:"MoveVec",pkg:"",typ:$funcType([B],[],false)},{prop:"SetPosition",name:"SetPosition",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"SetPositionVec",name:"SetPositionVec",pkg:"",typ:$funcType([B],[],false)},{prop:"Position",name:"Position",pkg:"",typ:$funcType([],[$Float64,$Float64],false)},{prop:"PointInside",name:"PointInside",pkg:"",typ:$funcType([B],[$Bool],false)},{prop:"IntersectionPointsCircle",name:"IntersectionPointsCircle",pkg:"",typ:$funcType([AS],[AP],false)}];Z.methods=[{prop:"Overlapping",name:"Overlapping",pkg:"",typ:$funcType([Z],[$Bool],false)},{prop:"Overlap",name:"Overlap",pkg:"",typ:$funcType([Z],[$Float64],false)},{prop:"IsInside",name:"IsInside",pkg:"",typ:$funcType([Z],[$Bool],false)}];AN.methods=[{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[AN],false)},{prop:"Update",name:"Update",pkg:"",typ:$funcType([],[],false)},{prop:"AddTags",name:"AddTags",pkg:"",typ:$funcType([AV],[],true)},{prop:"RemoveTags",name:"RemoveTags",pkg:"",typ:$funcType([AV],[],true)},{prop:"HasTags",name:"HasTags",pkg:"",typ:$funcType([AV],[$Bool],true)},{prop:"Tags",name:"Tags",pkg:"",typ:$funcType([],[AV],false)},{prop:"SetShape",name:"SetShape",pkg:"",typ:$funcType([P],[],false)},{prop:"BoundsToSpace",name:"BoundsToSpace",pkg:"",typ:$funcType([$Float64,$Float64],[$Int,$Int,$Int,$Int],false)},{prop:"SharesCells",name:"SharesCells",pkg:"",typ:$funcType([AN],[$Bool],false)},{prop:"SharesCellsTags",name:"SharesCellsTags",pkg:"",typ:$funcType([AV],[$Bool],true)},{prop:"Center",name:"Center",pkg:"",typ:$funcType([],[$Float64,$Float64],false)},{prop:"SetCenter",name:"SetCenter",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"CellPosition",name:"CellPosition",pkg:"",typ:$funcType([],[$Int,$Int],false)},{prop:"SetRight",name:"SetRight",pkg:"",typ:$funcType([$Float64],[],false)},{prop:"SetBottom",name:"SetBottom",pkg:"",typ:$funcType([$Float64],[],false)},{prop:"Bottom",name:"Bottom",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Right",name:"Right",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"SetBounds",name:"SetBounds",pkg:"",typ:$funcType([B,B],[],false)},{prop:"Check",name:"Check",pkg:"",typ:$funcType([$Float64,$Float64,AV],[AW],true)},{prop:"Overlaps",name:"Overlaps",pkg:"",typ:$funcType([AN],[$Bool],false)},{prop:"AddToIgnoreList",name:"AddToIgnoreList",pkg:"",typ:$funcType([AN],[],false)},{prop:"RemoveFromIgnoreList",name:"RemoveFromIgnoreList",pkg:"",typ:$funcType([AN],[],false)}];AW.methods=[{prop:"HasTags",name:"HasTags",pkg:"",typ:$funcType([AV],[$Bool],true)},{prop:"ObjectsByTags",name:"ObjectsByTags",pkg:"",typ:$funcType([AV],[AO],true)},{prop:"ContactWithObject",name:"ContactWithObject",pkg:"",typ:$funcType([AN],[B],false)},{prop:"ContactWithCell",name:"ContactWithCell",pkg:"",typ:$funcType([AJ],[B],false)},{prop:"SlideAgainstCell",name:"SlideAgainstCell",pkg:"",typ:$funcType([AJ,AV],[B],true)}];AJ.methods=[{prop:"register",name:"register",pkg:"resolv",typ:$funcType([AN],[],false)},{prop:"unregister",name:"unregister",pkg:"resolv",typ:$funcType([AN],[],false)},{prop:"Contains",name:"Contains",pkg:"",typ:$funcType([AN],[$Bool],false)},{prop:"ContainsTags",name:"ContainsTags",pkg:"",typ:$funcType([AV],[$Bool],true)},{prop:"Occupied",name:"Occupied",pkg:"",typ:$funcType([],[$Bool],false)}];B.init($Float64);N.init("",[{prop:"Cells",name:"Cells",embedded:false,exported:true,typ:AL,tag:""},{prop:"CellWidth",name:"CellWidth",embedded:false,exported:true,typ:$Int,tag:""},{prop:"CellHeight",name:"CellHeight",embedded:false,exported:true,typ:$Int,tag:""}]);P.init([{prop:"Bounds",name:"Bounds",pkg:"",typ:$funcType([],[B,B],false)},{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[P],false)},{prop:"Intersection",name:"Intersection",pkg:"",typ:$funcType([$Float64,$Float64,P],[AU],false)},{prop:"Position",name:"Position",pkg:"",typ:$funcType([],[$Float64,$Float64],false)},{prop:"SetPosition",name:"SetPosition",pkg:"",typ:$funcType([$Float64,$Float64],[],false)}]);Q.init("",[{prop:"Start",name:"Start",embedded:false,exported:true,typ:B,tag:""},{prop:"End",name:"End",embedded:false,exported:true,typ:B,tag:""}]);S.init("",[{prop:"Points",name:"Points",embedded:false,exported:true,typ:AP,tag:""},{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Closed",name:"Closed",embedded:false,exported:true,typ:$Bool,tag:""}]);U.init("",[{prop:"Points",name:"Points",embedded:false,exported:true,typ:AP,tag:""},{prop:"MTV",name:"MTV",embedded:false,exported:true,typ:B,tag:""},{prop:"Center",name:"Center",embedded:false,exported:true,typ:B,tag:""}]);X.init("",[{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Radius",name:"Radius",embedded:false,exported:true,typ:$Float64,tag:""}]);Z.init("",[{prop:"Min",name:"Min",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Max",name:"Max",embedded:false,exported:true,typ:$Float64,tag:""}]);AA.init("resolv",[{prop:"Shape",name:"Shape",embedded:false,exported:true,typ:P,tag:""},{prop:"Space",name:"Space",embedded:false,exported:true,typ:AM,tag:""},{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"W",name:"W",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"H",name:"H",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"TouchingCells",name:"TouchingCells",embedded:false,exported:true,typ:AK,tag:""},{prop:"Data",name:"Data",embedded:false,exported:true,typ:$emptyInterface,tag:""},{prop:"ignoreList",name:"ignoreList",embedded:false,exported:false,typ:AY,tag:""},{prop:"tags",name:"tags",embedded:false,exported:false,typ:AV,tag:""}]);AE.init("resolv",[{prop:"checkingObject",name:"checkingObject",embedded:false,exported:false,typ:AN,tag:""},{prop:"dx",name:"dx",embedded:false,exported:false,typ:$Float64,tag:""},{prop:"dy",name:"dy",embedded:false,exported:false,typ:$Float64,tag:""},{prop:"Objects",name:"Objects",embedded:false,exported:true,typ:AO,tag:""},{prop:"Cells",name:"Cells",embedded:false,exported:true,typ:AK,tag:""}]);AG.init("",[{prop:"X",name:"X",embedded:false,exported:true,typ:$Int,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Int,tag:""},{prop:"Objects",name:"Objects",embedded:false,exported:true,typ:AO,tag:""}]);$init=function(){$pkg.$init=function(){};var $f,$c=false,$s=0,$r;if(this!==undefined&&this.$blk!==undefined){$f=this;$c=true;$s=$f.$s;$r=$f.$r;}s:while(true){switch($s){case 0:$r=A.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); -$packages["jsexport/battle"]=(function(){var $pkg={},$init,A,B,C,D,E,F,H,I,J,K,L,M,N,O,P,Q,S,T,AH,BE,BF,BG,BH,BI,BJ,BK,BL,BM,BN,BO,BP,BQ,BR,BS,BT,BU,BV,BW,BX,BY,BZ,CA,CB,CC,CD,CE,CF,CG,CH,U,V,W,X,Y,R,Z,AB,AC,AD,AE,AF,AG,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AV,AW,AX,AY,AZ,BA,BB,BC,BD;A=$packages["math"];B=$packages["resolv"];C=$pkg.Vec2D=$newType(0,$kindStruct,"battle.Vec2D",true,"jsexport/battle",true,function(X_,Y_){this.$val=this;if(arguments.length===0){this.X=0;this.Y=0;return;}this.X=X_;this.Y=Y_;});D=$pkg.Polygon2D=$newType(0,$kindStruct,"battle.Polygon2D",true,"jsexport/battle",true,function(Anchor_,Points_){this.$val=this;if(arguments.length===0){this.Anchor=CD.nil;this.Points=CE.nil;return;}this.Anchor=Anchor_;this.Points=Points_;});E=$pkg.PlayerDownsync=$newType(0,$kindStruct,"battle.PlayerDownsync",true,"jsexport/battle",true,function(Id_,VirtualGridX_,VirtualGridY_,DirX_,DirY_,VelX_,VelY_,Speed_,BattleState_,JoinIndex_,ColliderRadius_,Removed_,Score_,LastMoveGmtMillis_,FramesToRecover_,FramesInChState_,Hp_,MaxHp_,CharacterState_,InAir_,OnWall_,OnWallNormX_,OnWallNormY_,ActiveSkillId_,ActiveSkillHit_,FramesInvinsible_,BulletTeamId_,ChCollisionTeamId_){this.$val=this;if(arguments.length===0){this.Id=0;this.VirtualGridX=0;this.VirtualGridY=0;this.DirX=0;this.DirY=0;this.VelX=0;this.VelY=0;this.Speed=0;this.BattleState=0;this.JoinIndex=0;this.ColliderRadius=0;this.Removed=false;this.Score=0;this.LastMoveGmtMillis=0;this.FramesToRecover=0;this.FramesInChState=0;this.Hp=0;this.MaxHp=0;this.CharacterState=0;this.InAir=false;this.OnWall=false;this.OnWallNormX=0;this.OnWallNormY=0;this.ActiveSkillId=0;this.ActiveSkillHit=0;this.FramesInvinsible=0;this.BulletTeamId=0;this.ChCollisionTeamId=0;return;}this.Id=Id_;this.VirtualGridX=VirtualGridX_;this.VirtualGridY=VirtualGridY_;this.DirX=DirX_;this.DirY=DirY_;this.VelX=VelX_;this.VelY=VelY_;this.Speed=Speed_;this.BattleState=BattleState_;this.JoinIndex=JoinIndex_;this.ColliderRadius=ColliderRadius_;this.Removed=Removed_;this.Score=Score_;this.LastMoveGmtMillis=LastMoveGmtMillis_;this.FramesToRecover=FramesToRecover_;this.FramesInChState=FramesInChState_;this.Hp=Hp_;this.MaxHp=MaxHp_;this.CharacterState=CharacterState_;this.InAir=InAir_;this.OnWall=OnWall_;this.OnWallNormX=OnWallNormX_;this.OnWallNormY=OnWallNormY_;this.ActiveSkillId=ActiveSkillId_;this.ActiveSkillHit=ActiveSkillHit_;this.FramesInvinsible=FramesInvinsible_;this.BulletTeamId=BulletTeamId_;this.ChCollisionTeamId=ChCollisionTeamId_;});F=$pkg.InputFrameDecoded=$newType(0,$kindStruct,"battle.InputFrameDecoded",true,"jsexport/battle",true,function(Dx_,Dy_,BtnALevel_,BtnBLevel_){this.$val=this;if(arguments.length===0){this.Dx=0;this.Dy=0;this.BtnALevel=0;this.BtnBLevel=0;return;}this.Dx=Dx_;this.Dy=Dy_;this.BtnALevel=BtnALevel_;this.BtnBLevel=BtnBLevel_;});H=$pkg.Barrier=$newType(0,$kindStruct,"battle.Barrier",true,"jsexport/battle",true,function(Boundary_){this.$val=this;if(arguments.length===0){this.Boundary=CF.nil;return;}this.Boundary=Boundary_;});I=$pkg.BulletConfig=$newType(0,$kindStruct,"battle.BulletConfig",true,"jsexport/battle",true,function(StartupFrames_,CancellableStFrame_,CancellableEdFrame_,ActiveFrames_,HitStunFrames_,BlockStunFrames_,PushbackVelX_,PushbackVelY_,Damage_,SelfLockVelX_,SelfLockVelY_,HitboxOffsetX_,HitboxOffsetY_,HitboxSizeX_,HitboxSizeY_,BlowUp_,ExplosionFrames_,SpeciesId_,CancelTransit_){this.$val=this;if(arguments.length===0){this.StartupFrames=0;this.CancellableStFrame=0;this.CancellableEdFrame=0;this.ActiveFrames=0;this.HitStunFrames=0;this.BlockStunFrames=0;this.PushbackVelX=0;this.PushbackVelY=0;this.Damage=0;this.SelfLockVelX=0;this.SelfLockVelY=0;this.HitboxOffsetX=0;this.HitboxOffsetY=0;this.HitboxSizeX=0;this.HitboxSizeY=0;this.BlowUp=false;this.ExplosionFrames=0;this.SpeciesId=0;this.CancelTransit=false;return;}this.StartupFrames=StartupFrames_;this.CancellableStFrame=CancellableStFrame_;this.CancellableEdFrame=CancellableEdFrame_;this.ActiveFrames=ActiveFrames_;this.HitStunFrames=HitStunFrames_;this.BlockStunFrames=BlockStunFrames_;this.PushbackVelX=PushbackVelX_;this.PushbackVelY=PushbackVelY_;this.Damage=Damage_;this.SelfLockVelX=SelfLockVelX_;this.SelfLockVelY=SelfLockVelY_;this.HitboxOffsetX=HitboxOffsetX_;this.HitboxOffsetY=HitboxOffsetY_;this.HitboxSizeX=HitboxSizeX_;this.HitboxSizeY=HitboxSizeY_;this.BlowUp=BlowUp_;this.ExplosionFrames=ExplosionFrames_;this.SpeciesId=SpeciesId_;this.CancelTransit=CancelTransit_;});J=$pkg.BulletBattleAttr=$newType(0,$kindStruct,"battle.BulletBattleAttr",true,"jsexport/battle",true,function(BulletLocalId_,OriginatedRenderFrameId_,OffenderJoinIndex_,TeamId_){this.$val=this;if(arguments.length===0){this.BulletLocalId=0;this.OriginatedRenderFrameId=0;this.OffenderJoinIndex=0;this.TeamId=0;return;}this.BulletLocalId=BulletLocalId_;this.OriginatedRenderFrameId=OriginatedRenderFrameId_;this.OffenderJoinIndex=OffenderJoinIndex_;this.TeamId=TeamId_;});K=$pkg.MeleeBullet=$newType(0,$kindStruct,"battle.MeleeBullet",true,"jsexport/battle",true,function(BlState_,FramesInBlState_,BattleAttr_,Bullet_){this.$val=this;if(arguments.length===0){this.BlState=0;this.FramesInBlState=0;this.BattleAttr=BH.nil;this.Bullet=BI.nil;return;}this.BlState=BlState_;this.FramesInBlState=FramesInBlState_;this.BattleAttr=BattleAttr_;this.Bullet=Bullet_;});L=$pkg.FireballBullet=$newType(0,$kindStruct,"battle.FireballBullet",true,"jsexport/battle",true,function(VirtualGridX_,VirtualGridY_,DirX_,DirY_,VelX_,VelY_,Speed_,BlState_,FramesInBlState_,BattleAttr_,Bullet_){this.$val=this;if(arguments.length===0){this.VirtualGridX=0;this.VirtualGridY=0;this.DirX=0;this.DirY=0;this.VelX=0;this.VelY=0;this.Speed=0;this.BlState=0;this.FramesInBlState=0;this.BattleAttr=BH.nil;this.Bullet=BI.nil;return;}this.VirtualGridX=VirtualGridX_;this.VirtualGridY=VirtualGridY_;this.DirX=DirX_;this.DirY=DirY_;this.VelX=VelX_;this.VelY=VelY_;this.Speed=Speed_;this.BlState=BlState_;this.FramesInBlState=FramesInBlState_;this.BattleAttr=BattleAttr_;this.Bullet=Bullet_;});M=$pkg.Skill=$newType(0,$kindStruct,"battle.Skill",true,"jsexport/battle",true,function(BattleLocalId_,RecoveryFrames_,RecoveryFramesOnBlock_,RecoveryFramesOnHit_,ReleaseTriggerType_,BoundChState_,Hits_){this.$val=this;if(arguments.length===0){this.BattleLocalId=0;this.RecoveryFrames=0;this.RecoveryFramesOnBlock=0;this.RecoveryFramesOnHit=0;this.ReleaseTriggerType=0;this.BoundChState=0;this.Hits=BG.nil;return;}this.BattleLocalId=BattleLocalId_;this.RecoveryFrames=RecoveryFrames_;this.RecoveryFramesOnBlock=RecoveryFramesOnBlock_;this.RecoveryFramesOnHit=RecoveryFramesOnHit_;this.ReleaseTriggerType=ReleaseTriggerType_;this.BoundChState=BoundChState_;this.Hits=Hits_;});N=$pkg.RoomDownsyncFrame=$newType(0,$kindStruct,"battle.RoomDownsyncFrame",true,"jsexport/battle",true,function(Id_,PlayersArr_,CountdownNanos_,MeleeBullets_,FireballBullets_,BackendUnconfirmedMask_,ShouldForceResync_,BulletLocalIdCounter_){this.$val=this;if(arguments.length===0){this.Id=0;this.PlayersArr=BV.nil;this.CountdownNanos=new $Int64(0,0);this.MeleeBullets=BW.nil;this.FireballBullets=BX.nil;this.BackendUnconfirmedMask=new $Uint64(0,0);this.ShouldForceResync=false;this.BulletLocalIdCounter=0;return;}this.Id=Id_;this.PlayersArr=PlayersArr_;this.CountdownNanos=CountdownNanos_;this.MeleeBullets=MeleeBullets_;this.FireballBullets=FireballBullets_;this.BackendUnconfirmedMask=BackendUnconfirmedMask_;this.ShouldForceResync=ShouldForceResync_;this.BulletLocalIdCounter=BulletLocalIdCounter_;});O=$pkg.InputFrameDownsync=$newType(0,$kindStruct,"battle.InputFrameDownsync",true,"jsexport/battle",true,function(InputFrameId_,InputList_,ConfirmedList_){this.$val=this;if(arguments.length===0){this.InputFrameId=0;this.InputList=BU.nil;this.ConfirmedList=new $Uint64(0,0);return;}this.InputFrameId=InputFrameId_;this.InputList=InputList_;this.ConfirmedList=ConfirmedList_;});P=$pkg.NpcPatrolCue=$newType(0,$kindStruct,"battle.NpcPatrolCue",true,"jsexport/battle",true,function(FlAct_,FrAct_,X_,Y_){this.$val=this;if(arguments.length===0){this.FlAct=new $Uint64(0,0);this.FrAct=new $Uint64(0,0);this.X=0;this.Y=0;return;}this.FlAct=FlAct_;this.FrAct=FrAct_;this.X=X_;this.Y=Y_;});Q=$pkg.RingBuffer=$newType(0,$kindStruct,"battle.RingBuffer",true,"jsexport/battle",true,function(Ed_,St_,EdFrameId_,StFrameId_,N_,Cnt_,Eles_){this.$val=this;if(arguments.length===0){this.Ed=0;this.St=0;this.EdFrameId=0;this.StFrameId=0;this.N=0;this.Cnt=0;this.Eles=BG.nil;return;}this.Ed=Ed_;this.St=St_;this.EdFrameId=EdFrameId_;this.StFrameId=StFrameId_;this.N=N_;this.Cnt=Cnt_;this.Eles=Eles_;});S=$pkg.SkillMapperType=$newType(4,$kindFunc,"battle.SkillMapperType",true,"jsexport/battle",true,null);T=$pkg.CharacterConfig=$newType(0,$kindStruct,"battle.CharacterConfig",true,"jsexport/battle",true,function(SpeciesId_,SpeciesName_,InAirIdleFrameIdxTurningPoint_,InAirIdleFrameIdxTurnedCycle_,LayDownFrames_,LayDownFramesToRecover_,GetUpInvinsibleFrames_,GetUpFramesToRecover_,Speed_,JumpingInitVelY_,DashingEnabled_,OnWallEnabled_,WallJumpingFramesToRecover_,WallJumpingInitVelX_,WallJumpingInitVelY_,WallSlidingVelY_,SkillMapper_){this.$val=this;if(arguments.length===0){this.SpeciesId=0;this.SpeciesName="";this.InAirIdleFrameIdxTurningPoint=0;this.InAirIdleFrameIdxTurnedCycle=0;this.LayDownFrames=0;this.LayDownFramesToRecover=0;this.GetUpInvinsibleFrames=0;this.GetUpFramesToRecover=0;this.Speed=0;this.JumpingInitVelY=0;this.DashingEnabled=false;this.OnWallEnabled=false;this.WallJumpingFramesToRecover=0;this.WallJumpingInitVelX=0;this.WallJumpingInitVelY=0;this.WallSlidingVelY=0;this.SkillMapper=$throwNilPointerError;return;}this.SpeciesId=SpeciesId_;this.SpeciesName=SpeciesName_;this.InAirIdleFrameIdxTurningPoint=InAirIdleFrameIdxTurningPoint_;this.InAirIdleFrameIdxTurnedCycle=InAirIdleFrameIdxTurnedCycle_;this.LayDownFrames=LayDownFrames_;this.LayDownFramesToRecover=LayDownFramesToRecover_;this.GetUpInvinsibleFrames=GetUpInvinsibleFrames_;this.GetUpFramesToRecover=GetUpFramesToRecover_;this.Speed=Speed_;this.JumpingInitVelY=JumpingInitVelY_;this.DashingEnabled=DashingEnabled_;this.OnWallEnabled=OnWallEnabled_;this.WallJumpingFramesToRecover=WallJumpingFramesToRecover_;this.WallJumpingInitVelX=WallJumpingInitVelX_;this.WallJumpingInitVelY=WallJumpingInitVelY_;this.WallSlidingVelY=WallSlidingVelY_;this.SkillMapper=SkillMapper_;});AH=$pkg.SatResult=$newType(0,$kindStruct,"battle.SatResult",true,"jsexport/battle",true,function(Overlap_,OverlapX_,OverlapY_,AContainedInB_,BContainedInA_,Axis_){this.$val=this;if(arguments.length===0){this.Overlap=0;this.OverlapX=0;this.OverlapY=0;this.AContainedInB=false;this.BContainedInA=false;this.Axis=B.Vector.nil;return;}this.Overlap=Overlap_;this.OverlapX=OverlapX_;this.OverlapY=OverlapY_;this.AContainedInB=AContainedInB_;this.BContainedInA=BContainedInA_;this.Axis=Axis_;});BE=$sliceType($Int32);BF=$sliceType(BE);BG=$sliceType($emptyInterface);BH=$ptrType(J);BI=$ptrType(I);BJ=$ptrType(M);BK=$ptrType(K);BL=$ptrType(AH);BM=$sliceType(C);BN=$sliceType($String);BO=$ptrType(B.Collision);BP=$ptrType(BM);BQ=$ptrType(E);BR=$ptrType(L);BS=$ptrType(B.ConvexPolygon);BT=$ptrType(O);BU=$sliceType($Uint64);BV=$sliceType(BQ);BW=$sliceType(BK);BX=$sliceType(BR);BY=$sliceType(BP);BZ=$sliceType($Bool);CA=$ptrType(B.Object);CB=$sliceType(CA);CC=$sliceType($Float64);CD=$ptrType(C);CE=$sliceType(CD);CF=$ptrType(D);CG=$mapType($Int,$Int);CH=$ptrType(Q);R=function(a){var a;return new Q.ptr(0,0,0,0,a,0,$makeSlice(BG,a));};$pkg.NewRingBuffer=R;Q.ptr.prototype.Put=function(a){var a,b,c,d;b=this;while(true){if(!(0=b.N)){break;}b.Pop();}(c=b.Eles,d=b.Ed,((d<0||d>=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]=a));b.EdFrameId=b.EdFrameId+(1)>>0;b.Cnt=b.Cnt+(1)>>0;b.Ed=b.Ed+(1)>>0;if(b.Ed>=b.N){b.Ed=b.Ed-(b.N)>>0;}};Q.prototype.Put=function(a){return this.$val.Put(a);};Q.ptr.prototype.Pop=function(){var a,b,c,d;a=this;if(0===a.Cnt){return $ifaceNil;}d=(b=a.Eles,c=a.St,((c<0||c>=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+c]));a.StFrameId=a.StFrameId+(1)>>0;a.Cnt=a.Cnt-(1)>>0;a.St=a.St+(1)>>0;if(a.St>=a.N){a.St=a.St-(a.N)>>0;}return d;};Q.prototype.Pop=function(){return this.$val.Pop();};Q.ptr.prototype.GetArrIdxByOffset=function(a){var a,b,c;b=this;if((0===b.Cnt)||0>a){return-1;}c=b.St+a>>0;if(b.St=b.N){c=c-(b.N)>>0;}if(c>=b.St||c=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+c]));};Q.prototype.GetByOffset=function(a){return this.$val.GetByOffset(a);};Q.ptr.prototype.GetByFrameId=function(a){var a,b;b=this;if(a>=b.EdFrameId||a>0);};Q.prototype.GetByFrameId=function(a){return this.$val.GetByFrameId(a);};Q.ptr.prototype.SetByFrameId=function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n;c=this;d=c.StFrameId;e=c.EdFrameId;f=d;g=e;if(bb){h=c.GetArrIdxByOffset(b-c.StFrameId>>0);if(!((-1===h))){(i=c.Eles,((h<0||h>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+h]=a));return[0,f,g];}}j=0;if(g>0))>>2>>0);};$pkg.ConvertToDelayedInputFrameId=AC;AD=function(a){var a;return(a>>2>>0);};$pkg.ConvertToNoDelayInputFrameId=AD;AE=function(a){var a;return(((a<<2>>0))+4>>0);};$pkg.ConvertToFirstUsedRenderFrameId=AE;AF=function(a){var a;return(((((a<<2>>0))+4>>0)+4>>0)-1>>0);};$pkg.ConvertToLastUsedRenderFrameId=AF;AG=function(a){var a,b,c,d,e,f,g,h;b=new $Uint64(a.$high&0,(a.$low&15)>>>0);d=(((c=$shiftRightUint64(a,4),new $Uint64(c.$high&0,(c.$low&1)>>>0)).$low>>0));f=(((e=$shiftRightUint64(a,5),new $Uint64(e.$high&0,(e.$low&1)>>>0)).$low>>0));return new F.ptr((g=(($flatten64(b)<0||$flatten64(b)>=$pkg.DIRECTION_DECODER.$length)?($throwRuntimeError("index out of range"),undefined):$pkg.DIRECTION_DECODER.$array[$pkg.DIRECTION_DECODER.$offset+$flatten64(b)]),(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0])),(h=(($flatten64(b)<0||$flatten64(b)>=$pkg.DIRECTION_DECODER.$length)?($throwRuntimeError("index out of range"),undefined):$pkg.DIRECTION_DECODER.$array[$pkg.DIRECTION_DECODER.$offset+$flatten64(b)]),(1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1])),d,f);};AI=function(a,b,c,d){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,$s,$deferred,$r,$c}=$restore(this,{a,b,c,d});$s=$s||0;var $err=null;try{s:while(true){switch($s){case 0:$deferred=[];$curGoroutine.deferStack.push($deferred);c=[c];e=[e];f=[f];g=c[0].Position();e[0]=g[0];f[0]=g[1];$deferred.push([(function(c,e,f){return function(){c[0].SetPosition(e[0],f[0]);};})(c,e,f),[]]);c[0].SetPosition(e[0]+a,f[0]+b);h=new AH.ptr(0,0,0,true,true,new B.Vector([0,0]));i=AJ(c[0],d,h);if(i){$s=1;continue;}$s=2;continue;case 1:j=h.Overlap*h.OverlapX;k=h.Overlap*h.OverlapY;l=j;m=k;n=[true,l,m,h];$s=4;case 4:return n;case 2:o=[false,0,0,h];$s=5;case 5:return o;case 3:$s=-1;return[false,0,0,BL.nil];}return;}}catch(err){$err=err;$s=-1;return[false,0,0,BL.nil];}finally{$callDeferred($deferred,$err);if($curGoroutine.asleep){var $f={$blk:AI,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,$s,$deferred};return $f;}}};AJ=function(a,b,c){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;d=a.Points.$length;e=b.Points.$length;f=d;g=e;if((1===f)&&(1===g)){if(!(BL.nil===c)){c.Overlap=0;}return((h=(i=a.Points,(0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0])),(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0]))===(j=(k=b.Points,(0>=k.$length?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+0])),(0>=j.$length?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+0])))&&((l=(m=a.Points,(0>=m.$length?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+0])),(1>=l.$length?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+1]))===(n=(o=b.Points,(0>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+0])),(1>=n.$length?($throwRuntimeError("index out of range"),undefined):n.$array[n.$offset+1])));}if(1=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+q]);if(AO(a,b,r.Unit(),c)){return false;}q++;}}if(1=s.$length)?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+t]);if(AO(a,b,u.Unit(),c)){return false;}t++;}}return true;};AK=function(a,b){var a,b;if(2===a.BlState){return false;}return((a.BattleAttr.OriginatedRenderFrameId+a.Bullet.StartupFrames>>0)<=b.Id)&&(((a.BattleAttr.OriginatedRenderFrameId+a.Bullet.StartupFrames>>0)+a.Bullet.ActiveFrames>>0)>b.Id);};$pkg.IsMeleeBulletActive=AK;AL=function(a,b){var a,b;if(2===a.BlState){return a.FramesInBlState>0)+a.Bullet.ActiveFrames>>0)>b.Id;};$pkg.IsMeleeBulletAlive=AL;AM=function(a,b){var a,b;if(2===a.BlState){return false;}return((a.BattleAttr.OriginatedRenderFrameId+a.Bullet.StartupFrames>>0)>0)+a.Bullet.ActiveFrames>>0)>b.Id);};$pkg.IsFireballBulletActive=AM;AN=function(a,b){var a,b;if(2===a.BlState){return a.FramesInBlState>0)+a.Bullet.ActiveFrames>>0)>b.Id;};$pkg.IsFireballBulletAlive=AN;AO=function(a,b,c,d){var a,aa,ab,ac,ad,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;e=1.7e+308;f=-1.7e+308;g=1.7e+308;h=-1.7e+308;i=e;j=f;k=g;l=h;m=a.Points;n=0;while(true){if(!(n=m.$length)?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+n]);p=((0>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+0])+a.X)*(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])+((1>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+1])+a.Y)*(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]);if(i>p){i=p;}if(j=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+r]);t=((0>=s.$length?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+0])+b.X)*(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])+((1>=s.$length?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+1])+b.Y)*(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]);if(k>t){k=t;}if(ll||jl){u=i-l;d.AContainedInB=false;}else{x=j-k;y=l-i;if(x=ab.$length?($throwRuntimeError("index out of range"),undefined):ab.$array[ab.$offset+0])))&&(0===(ac=d.Axis,(1>=ac.$length?($throwRuntimeError("index out of range"),undefined):ac.$array[ac.$offset+1]))))||z>aa){ad=1;if(u<0){ad=-1;}d.Overlap=aa;d.OverlapX=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])*ad;d.OverlapY=(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1])*ad;}d.Axis=c;}return false;};AP=function(a,b){var a,b,c,d;c=((A.Round(a*100)>>0));d=((A.Round(b*100)>>0));return[c,d];};$pkg.WorldToVirtualGridPos=AP;AQ=function(a,b){var a,b,c,d;c=(a)*0.01;d=(b)*0.01;return[c,d];};$pkg.VirtualGridToWorldPos=AQ;AR=function(a,b,c,d,e,f,g,h,i,j){var a,b,c,d,e,f,g,h,i,j;return[a-c-g+i,b-d-f+j];};$pkg.WorldToPolygonColliderBLPos=AR;AS=function(a,b,c,d,e,f,g,h,i,j){var a,b,c,d,e,f,g,h,i,j;return[a+c+g-i,b+d+f-j];};$pkg.PolygonColliderBLToWorldPos=AS;AT=function(a,b,c,d,e,f,g,h,i,j){var a,b,c,d,e,f,g,h,i,j,k,l,m;k=AS(a,b,c,d,e,f,g,h,i,j);l=k[0];m=k[1];return AP(l,m);};$pkg.PolygonColliderBLToVirtualGridPos=AT;AV=function(a,b,c,d,e,f,g){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g});$s=$s||0;s:while(true){switch($s){case 0:h=[h];h[0]=$makeSlice(BM,0,10);i=0;if((16===b.CharacterState)&&(0===c.VelX)&&(b.DirX===c.DirX)){j=1;if(0>c.DirX){j=-j;}i=j*(b.Speed)*0.01;}k=d.Check(i,0,new BN([]));if(BO.nil===k){$s=-1;return(h.$ptr||(h.$ptr=new BP(function(){return this.$target[0];},function($v){this.$target[0]=$v;},h)));}l=k.Objects;m=0;case 1:if(!(m=l.$length)?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+m]);o=false;p=n.Data;if($assertType(p,BQ,true)[1]||$assertType(p,BK,true)[1]||$assertType(p,BR,true)[1]){}else{o=true;}if(!o){m++;$s=1;continue;}q=$assertType(n.Shape,BS);s=AI(0,0,e,q);$s=3;case 3:if($c){$c=false;s=s.$blk();}if(s&&s.$blk!==undefined){break s;}r=s;t=r[0];u=r[1];v=r[2];w=r[3];if(!t){m++;$s=1;continue;}x=(w.Overlap-f)*w.OverlapX;y=(w.Overlap-f)*w.OverlapY;u=x;v=y;h[0]=$append(h[0],new C.ptr(w.OverlapX,w.OverlapY));g.X=g.X+(u);g.Y=g.Y+(v);m++;$s=1;continue;case 2:$s=-1;return(h.$ptr||(h.$ptr=new BP(function(){return this.$target[0];},function($v){this.$target[0]=$v;},h)));}return;}var $f={$blk:AV,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,$s};return $f;};AW=function(a,b,c,d){var a,aa,ab,ac,ad,ae,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;e=AC(c.Id);f=AC(c.Id-1>>0);if(0>=e){return[-2,false,0,0];}g=(h=W[$Int32.keyFor(a.CharacterState)],h!==undefined?[h.v,true]:[false,false]);i=g[1];if(i){return[-2,false,0,0];}j=$assertType(d.GetByFrameId(e),BT).InputList;k=BU.nil;if(0>0,((n<0||n>=j.$length)?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+n])));p=0;q=0;r=p;s=q;t=0;u=0;v=t;w=u;if(!(BU.nil===k)){y=AG((x=m-1>>0,((x<0||x>=k.$length)?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+x])));v=y.BtnALevel;w=y.BtnBLevel;}if(0===a.FramesToRecover){z=o.Dx;aa=o.Dy;r=z;s=aa;if(o.BtnBLevel>w){ab=(ac=V[$Int32.keyFor(a.CharacterState)],ac!==undefined?[ac.v,true]:[false,false]);ad=ab[1];if(!ad){l=true;}else if(16===a.CharacterState){l=true;}}}ae=-1;if(0v){if(0>s){ae=3;}else if(0=j.$length)?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+k]);((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]=new E.ptr(m.Id,m.VirtualGridX,m.VirtualGridY,m.DirX,m.DirY,m.VelX,m.VelY,m.Speed,m.BattleState,m.JoinIndex,m.ColliderRadius,m.Removed,m.Score,0,m.FramesToRecover-1>>0,m.FramesInChState+1>>0,m.Hp,m.MaxHp,m.CharacterState,true,false,m.OnWallNormX,m.OnWallNormY,m.ActiveSkillId,m.ActiveSkillHit,m.FramesInvinsible-1>>0,0,0));if(((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesToRecover<0){((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesToRecover=0;}if(((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesInvinsible<0){((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesInvinsible=0;}k++;}n=$makeSlice(BW,0,b.MeleeBullets.$length);o=$makeSlice(BX,0,b.FireballBullets.$length);p=$makeSlice(BM,h);q=$makeSlice(BY,h);r=$makeSlice(BZ,h);s=b.BulletLocalIdCounter;t=b.PlayersArr;u=0;case 1:if(!(u=t.$length)?($throwRuntimeError("index out of range"),undefined):t.$array[t.$offset+u]);z=((x<0||x>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+x]);aa=((x<0||x>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+x]);ab=AW(y,aa,b,a);ac=ab[0];ad=ab[1];ae=ab[2];af=ab[3];((x<0||x>=r.$length)?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+x]=ad);ag=y.JoinIndex;ah=z.SkillMapper(ac,y);$s=3;case 3:if($c){$c=false;ah=ah.$blk();}if(ah&&ah.$blk!==undefined){break s;}ai=ah;aj=(ak=U[$Int.keyFor(ai)],ak!==undefined?[ak.v,true]:[BJ.nil,false]);al=aj[0];am=aj[1];if(am){aa.ActiveSkillId=((ai>>0));aa.ActiveSkillHit=0;aa.FramesToRecover=al.RecoveryFrames;an=1;if(0>aa.DirX){an=-an;}ao=false;ap=(aq=al.Hits,ar=aa.ActiveSkillHit,((ar<0||ar>=aq.$length)?($throwRuntimeError("index out of range"),undefined):aq.$array[aq.$offset+ar]));if($assertType(ap,BK,true)[1]){as=ap.$val;v[0]=$clone(as,K);v[0].BattleAttr=new J.ptr(s,b.Id,ag,y.BulletTeamId);s=s+(1)>>0;v[0].BlState=0;n=$append(n,v[0]);if(!((-1===as.Bullet.SelfLockVelX))){ao=true;aa.VelX=$imul(an,as.Bullet.SelfLockVelX);}if(!((-1===as.Bullet.SelfLockVelY))){ao=true;aa.VelY=as.Bullet.SelfLockVelY;}}else if($assertType(ap,BR,true)[1]){at=ap.$val;w[0]=$clone(at,L);w[0].BattleAttr=new J.ptr(s,b.Id,ag,y.BulletTeamId);s=s+(1)>>0;au=y.VirtualGridX+($imul(an,w[0].Bullet.HitboxOffsetX))>>0;av=y.VirtualGridY+w[0].Bullet.HitboxOffsetY>>0;w[0].VirtualGridX=au;w[0].VirtualGridY=av;w[0].DirX=an;w[0].DirY=0;w[0].VelX=$imul(w[0].Speed,an);w[0].VelY=0;w[0].BlState=0;o=$append(o,w[0]);if(!((-1===at.Bullet.SelfLockVelX))){ao=true;aa.VelX=$imul(an,at.Bullet.SelfLockVelX);}if(!((-1===at.Bullet.SelfLockVelY))){ao=true;aa.VelY=at.Bullet.SelfLockVelY;}}if(false===ao&&false===y.InAir){aa.VelX=0;}aa.CharacterState=al.BoundChState;u++;$s=1;continue;}if(0===y.FramesToRecover){if(!((0===ae))){aw=1;if(0>ae){aw=-aw;}aa.DirX=ae;aa.DirY=af;aa.VelX=$imul(aw,y.Speed);if(Z(aa.VelX)=ay.$length)?($throwRuntimeError("index out of range"),undefined):ay.$array[ay.$offset+az]);bc=bb.JoinIndex;bd=0;be=0;(bf=bc-1>>0,((bf<0||bf>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+bf])).X=bd;(bg=bc-1>>0,((bg<0||bg>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+bg])).Y=be;bh=((ba<0||ba>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+ba]);bi=((ba<0||ba>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+ba]);bj=bb.VirtualGridX+bb.VelX>>0;bk=bb.VirtualGridY+bb.VelY>>0;bl=bj;bm=bk;if(((ba<0||ba>=r.$length)?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+ba])){if(16===bb.CharacterState){if(0<($imul(bb.VelX,bb.OnWallNormX))){bl=bl-(bb.VelX)>>0;}bn=-1;if(0>bb.OnWallNormX){bn=-bn;}bl=bl+(($imul(bn,bi.WallJumpingInitVelX)))>>0;bm=bm+(bi.WallJumpingInitVelY)>>0;bh.VelX=(($imul(bn,bi.WallJumpingInitVelX)));bh.VelY=(bi.WallJumpingInitVelY);bh.FramesToRecover=bi.WallJumpingFramesToRecover;}else{bh.VelY=(bi.JumpingInitVelY);bm=bm+(bi.JumpingInitVelY)>>0;}}bo=AQ(bl,bm);bp=bo[0];bq=bo[1];br=$imul(bb.ColliderRadius,2);bs=$imul(bb.ColliderRadius,4);bt=br;bu=bs;bv=bb.CharacterState;if(bv===(9)){bw=$imul(bb.ColliderRadius,4);bx=$imul(bb.ColliderRadius,2);bt=bw;bu=bx;}else if((bv===(8))||(bv===(4))||(bv===(5))||(bv===(16))){by=$imul(bb.ColliderRadius,2);bz=$imul(bb.ColliderRadius,2);bt=by;bu=bz;}ca=AQ(bt,bu);cb=ca[0];cc=ca[1];cd=AY(bp,bq,cb,cc,0.1,0.1,0.1,0.1,e,f,bb,"Player");$s=6;case 6:if($c){$c=false;cd=cd.$blk();}if(cd&&cd.$blk!==undefined){break s;}ce=cd;((ba<0||ba>=ax.$length)?($throwRuntimeError("index out of range"),undefined):ax.$array[ax.$offset+ba]=ce);$r=c.Add(new CB([ce]));$s=7;case 7:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}if(bb.InAir){if((16===bb.CharacterState)&&!((ba<0||ba>=r.$length)?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+ba])){bh.VelX=bh.VelX+(0)>>0;bh.VelY=bi.WallSlidingVelY;}else{bh.VelX=bh.VelX+(0)>>0;bh.VelY=bh.VelY+(-50)>>0;}}az++;$s=4;continue;case 5:cf=$makeSlice(CB,0,b.MeleeBullets.$length);cg=b.MeleeBullets;ch=0;case 8:if(!(ch=cg.$length)?($throwRuntimeError("index out of range"),undefined):cg.$array[cg.$offset+ch]);cj=new K.ptr(ci.BlState,ci.FramesInBlState+1>>0,ci.BattleAttr,ci.Bullet);if(AL(cj,b)){$s=10;continue;}$s=11;continue;case 10:if(AK(cj,b)){$s=12;continue;}$s=13;continue;case 12:cm=(ck=b.PlayersArr,cl=cj.BattleAttr.OffenderJoinIndex-1>>0,((cl<0||cl>=ck.$length)?($throwRuntimeError("index out of range"),undefined):ck.$array[ck.$offset+cl]));cn=1;if(0>cm.DirX){cn=-cn;}co=AQ(cm.VirtualGridX+($imul(cn,cj.Bullet.HitboxOffsetX))>>0,cm.VirtualGridY);cp=co[0];cq=co[1];cr=AQ(cj.Bullet.HitboxSizeX,cj.Bullet.HitboxSizeY);cs=cr[0];ct=cr[1];cu=AY(cp,cq,cs,ct,0.1,0.1,0.1,0.1,e,f,cj,"MeleeBullet");$s=14;case 14:if($c){$c=false;cu=cu.$blk();}if(cu&&cu.$blk!==undefined){break s;}cv=cu;$r=c.Add(new CB([cv]));$s=15;case 15:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}cf=$append(cf,cv);cj.BlState=1;if(!((cj.BlState===ci.BlState))){cj.FramesInBlState=0;}case 13:n=$append(n,cj);case 11:ch++;$s=8;continue;case 9:cw=b.FireballBullets;cx=0;case 16:if(!(cx=cw.$length)?($throwRuntimeError("index out of range"),undefined):cw.$array[cw.$offset+cx]);cz=new L.ptr(cy.VirtualGridX,cy.VirtualGridY,cy.DirX,cy.DirY,cy.VelX,cy.VelY,cy.Speed,cy.BlState,cy.FramesInBlState+1>>0,cy.BattleAttr,cy.Bullet);if(AN(cz,b)){$s=18;continue;}$s=19;continue;case 18:if(AM(cz,b)){$s=20;continue;}$s=21;continue;case 20:da=AQ(cz.VirtualGridX,cz.VirtualGridY);db=da[0];dc=da[1];dd=AQ(cz.Bullet.HitboxSizeX,cz.Bullet.HitboxSizeY);de=dd[0];df=dd[1];dg=AY(db,dc,de,df,0.1,0.1,0.1,0.1,e,f,cz,"FireballBullet");$s=23;case 23:if($c){$c=false;dg=dg.$blk();}if(dg&&dg.$blk!==undefined){break s;}dh=dg;$r=c.Add(new CB([dh]));$s=24;case 24:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}cf=$append(cf,dh);cz.BlState=1;if(!((cz.BlState===cy.BlState))){cz.FramesInBlState=0;}di=cz.VirtualGridX+cz.VelX>>0;dj=cz.VirtualGridY+cz.VelY>>0;cz.VirtualGridX=di;cz.VirtualGridY=dj;$s=22;continue;case 21:case 22:o=$append(o,cz);case 19:cx++;$s=16;continue;case 17:dk=b.PlayersArr;dl=0;case 25:if(!(dl=dk.$length)?($throwRuntimeError("index out of range"),undefined):dk.$array[dk.$offset+dl]);dp=dn.JoinIndex;dq=((dm<0||dm>=ax.$length)?($throwRuntimeError("index out of range"),undefined):ax.$array[ax.$offset+dm]);dr=$assertType(dq.Shape,BS);ds=((dm<0||dm>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+dm]);du=AV(dp,dn,ds,dq,dr,0.1,(dt=dp-1>>0,((dt<0||dt>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+dt])));$s=27;case 27:if($c){$c=false;du=du.$blk();}if(du&&du.$blk!==undefined){break s;}(dv=dp-1>>0,((dv<0||dv>=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+dv]=du));dw=((dm<0||dm>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+dm]);dx=false;dy=dq.Check(0,0,new BN([]));if(!(BO.nil===dy)){$s=28;continue;}$s=29;continue;case 28:dz=dy.Objects;ea=0;case 30:if(!(ea=dz.$length)?($throwRuntimeError("index out of range"),undefined):dz.$array[dz.$offset+ea]);ec=false;ed=false;ee=false;ef=ec;eg=ed;eh=ee;ei=eb.Data;if($assertType(ei,BQ,true)[1]){eg=true;}else if($assertType(ei,BK,true)[1]||$assertType(ei,BR,true)[1]){eh=true;}else{ef=true;}if(eh){ea++;$s=30;continue;}ej=$assertType(eb.Shape,BS);el=AI(0,0,dr,ej);$s=32;case 32:if($c){$c=false;el=el.$blk();}if(el&&el.$blk!==undefined){break s;}ek=el;em=ek[0];en=ek[1];eo=ek[2];ep=ek[3];if(!em){ea++;$s=30;continue;}eq=ep.OverlapX*0+ep.OverlapY*-1;if(eg){er=(ep.Overlap-0.2)*ep.OverlapX;es=(ep.Overlap-0.2)*ep.OverlapY;en=er;eo=es;}et=(eu=dp-1>>0,((eu<0||eu>=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+eu])).$get();ev=0;while(true){if(!(ev=et.$length)?($throwRuntimeError("index out of range"),undefined):et.$array[et.$offset+ev]),C);ex=en*ew.X+eo*ew.Y;if(ef||(eg&&0>ex)){en=en-(ex*ew.X);eo=eo-(ex*ew.Y);}ev++;}ey=dp-1>>0;((ey<0||ey>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ey]).X=((ey<0||ey>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ey]).X+(en);ez=dp-1>>0;((ez<0||ez>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ez]).Y=((ez<0||ez>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ez]).Y+(eo);if(0.5=dn.VelY;if(fa){ds.VelY=0;ds.VelX=0;if(8===ds.CharacterState){ds.CharacterState=9;ds.FramesToRecover=dw.LayDownFramesToRecover;}else{fb=dn.CharacterState;if((fb===(8))||(fb===(4))||(fb===(5))||(fb===(16))){fc=0;fd=dn.ColliderRadius;fe=fc;ff=fd;fg=AQ(fe,ff);fh=fg[1];fi=dp-1>>0;((fi<0||fi>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+fi]).Y=((fi<0||fi>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+fi]).Y-(fh);}ds.CharacterState=0;ds.FramesToRecover=0;}}else{fj=(fk=Y[$Int32.keyFor(ds.CharacterState)],fk!==undefined?[fk.v,true]:[false,false]);fl=fj[1];if(fl){if(9===ds.CharacterState){if(0===ds.FramesToRecover){ds.CharacterState=10;ds.FramesToRecover=dw.GetUpFramesToRecover;}}else if(10===ds.CharacterState){if(0===ds.FramesToRecover){ds.CharacterState=0;ds.FramesInvinsible=dw.GetUpInvinsibleFrames;}}}}}if(dw.OnWallEnabled){if(ds.InAir){fm=(fn=W[$Int32.keyFor(dn.CharacterState)],fn!==undefined?[fn.v,true]:[false,false]);fo=fm[1];if(!fo){fp=(fq=dp-1>>0,((fq<0||fq>=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+fq])).$get();fr=0;while(true){if(!(fr=fp.$length)?($throwRuntimeError("index out of range"),undefined):fp.$array[fp.$offset+fr]),C);ft=fs.X*1+fs.Y*0;fu=fs.X*-1+fs.Y*0;if(0.9>0));fw=((fs.Y>>0));ds.OnWallNormX=fv;ds.OnWallNormY=fw;break;}if(0.9>0));fy=((fs.Y>>0));ds.OnWallNormX=fx;ds.OnWallNormY=fy;break;}fr++;}if(!dn.OnWall&&ds.OnWall){ds.VelY=0;}}}if(!ds.OnWall){fz=0;ga=0;ds.OnWallNormX=fz;ds.OnWallNormY=ga;}}dl++;$s=25;continue;case 26:gb=cf;gc=0;case 33:if(!(gc=gb.$length)?($throwRuntimeError("index out of range"),undefined):gb.$array[gb.$offset+gc]);ge=gd.Check(0,0,new BN([]));gd.Space.Remove(new CB([gd]));gf=false;if(!(BO.nil===ge)){$s=35;continue;}$s=36;continue;case 35:gg=gd.Data;if($assertType(gg,BK,true)[1]){$s=37;continue;}if($assertType(gg,BR,true)[1]){$s=38;continue;}$s=39;continue;case 37:gh=gg.$val;gj=$assertType(gd.Shape,BS);gm=(gk=b.PlayersArr,gl=gh.BattleAttr.OffenderJoinIndex-1>>0,((gl<0||gl>=gk.$length)?($throwRuntimeError("index out of range"),undefined):gk.$array[gk.$offset+gl]));gn=ge.Objects;go=0;case 40:if(!(go=gn.$length)?($throwRuntimeError("index out of range"),undefined):gn.$array[gn.$offset+go]);gq=$assertType(gp.Shape,BS);gr=gp.Data;if($assertType(gr,BQ,true)[1]){$s=42;continue;}$s=43;continue;case 42:gs=gr.$val;if(gh.BattleAttr.OffenderJoinIndex===gs.JoinIndex){go++;$s=40;continue;}gu=AI(0,0,gj,gq);$s=44;case 44:if($c){$c=false;gu=gu.$blk();}if(gu&&gu.$blk!==undefined){break s;}gt=gu;gv=gt[0];if(!gv){go++;$s=40;continue;}gf=true;gw=(gx=X[$Int32.keyFor(gs.CharacterState)],gx!==undefined?[gx.v,true]:[false,false]);gy=gw[1];if(gy){go++;$s=40;continue;}if(0gm.DirX){gz=-gz;}ha=$imul(gz,gh.Bullet.PushbackVelX);hb=gh.Bullet.PushbackVelY;hc=ha;hd=hb;hf=(he=gs.JoinIndex-1>>0,((he<0||he>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+he]));hf.VelX=hc;hf.VelY=hd;if(gh.Bullet.BlowUp){hf.CharacterState=8;}else{hf.CharacterState=3;}hh=(hg=gs.JoinIndex-1>>0,((hg<0||hg>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+hg])).FramesToRecover;if(gh.Bullet.HitStunFrames>hh){hf.FramesToRecover=gh.Bullet.HitStunFrames;}case 43:go++;$s=40;continue;case 41:$s=39;continue;case 38:gi=gg.$val;hi=$assertType(gd.Shape,BS);hl=(hj=b.PlayersArr,hk=gi.BattleAttr.OffenderJoinIndex-1>>0,((hk<0||hk>=hj.$length)?($throwRuntimeError("index out of range"),undefined):hj.$array[hj.$offset+hk]));hm=ge.Objects;hn=0;case 45:if(!(hn=hm.$length)?($throwRuntimeError("index out of range"),undefined):hm.$array[hm.$offset+hn]);hp=$assertType(ho.Shape,BS);hq=ho.Data;if($assertType(hq,BQ,true)[1]){$s=47;continue;}$s=48;continue;case 47:hr=hq.$val;if(gi.BattleAttr.OffenderJoinIndex===hr.JoinIndex){hn++;$s=45;continue;}hu=AI(0,0,hi,hp);$s=50;case 50:if($c){$c=false;hu=hu.$blk();}if(hu&&hu.$blk!==undefined){break s;}ht=hu;hv=ht[0];if(!hv){hn++;$s=45;continue;}gf=true;hw=(hx=X[$Int32.keyFor(hr.CharacterState)],hx!==undefined?[hx.v,true]:[false,false]);hy=hw[1];if(hy){hn++;$s=45;continue;}if(0hl.DirX){hz=-hz;}ia=$imul(hz,gi.Bullet.PushbackVelX);ib=gi.Bullet.PushbackVelY;ic=ia;id=ib;ig=(ie=hr.JoinIndex-1>>0,((ie<0||ie>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+ie]));ig.VelX=ic;ig.VelY=id;if(gi.Bullet.BlowUp){ig.CharacterState=8;}else{ig.CharacterState=3;}ii=(ih=hr.JoinIndex-1>>0,((ih<0||ih>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+ih])).FramesToRecover;if(gi.Bullet.HitStunFrames>ii){ig.FramesToRecover=gi.Bullet.HitStunFrames;}$s=49;continue;case 48:hs=hq;gf=true;case 49:hn++;$s=45;continue;case 46:case 39:case 36:if(gf){ij=gd.Data;if($assertType(ij,BK,true)[1]){ik=ij.$val;ik.BlState=2;ik.FramesInBlState=0;}else if($assertType(ij,BR,true)[1]){il=ij.$val;il.BlState=2;il.FramesInBlState=0;}}gc++;$s=33;continue;case 34:im=b.PlayersArr;io=0;while(true){if(!(io=im.$length)?($throwRuntimeError("index out of range"),undefined):im.$array[im.$offset+io]);ir=iq.JoinIndex;is=((ip<0||ip>=ax.$length)?($throwRuntimeError("index out of range"),undefined):ax.$array[ax.$offset+ip]);it=((ip<0||ip>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+ip]);iu=AT(is.X-(iv=ir-1>>0,((iv<0||iv>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+iv])).X,is.Y-(iw=ir-1>>0,((iw<0||iw>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+iw])).Y,is.W*0.5,is.H*0.5,0,0,0,0,e,f);it.VirtualGridX=iu[0];it.VirtualGridY=iu[1];if(it.InAir){ix=it.CharacterState;iy=ix;if((iy===(0))||(iy===(1))){if(it.OnWall){it.CharacterState=16;}else if(((ip<0||ip>=r.$length)?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+ip])||(5===iq.CharacterState)){it.CharacterState=5;}else{it.CharacterState=4;}}else if(iy===(2)){it.CharacterState=6;}else if(iy===(3)){it.CharacterState=7;}}if(!((it.CharacterState===iq.CharacterState))){it.FramesInChState=0;}iz=(ja=Y[$Int32.keyFor(it.CharacterState)],ja!==undefined?[ja.v,true]:[false,false]);jb=iz[1];if(jb){it.ActiveSkillId=-1;it.ActiveSkillHit=-1;}io++;}jc=ax;jd=0;while(true){if(!(jd=jc.$length)?($throwRuntimeError("index out of range"),undefined):jc.$array[jc.$offset+jd]);je.Space.Remove(new CB([je]));jd++;}$s=-1;return new N.ptr(b.Id+1>>0,i,new $Int64(0,0),n,o,new $Uint64(0,0),false,s);}return;}var $f={$blk:AX,$c:true,$r,a,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,b,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,c,ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl,cm,cn,co,cp,cq,cr,cs,ct,cu,cv,cw,cx,cy,cz,d,da,db,dc,dd,de,df,dg,dh,di,dj,dk,dl,dm,dn,dp,dq,dr,ds,dt,du,dv,dw,dx,dy,dz,e,ea,eb,ec,ed,ee,ef,eg,eh,ei,ej,ek,el,em,en,eo,ep,eq,er,es,et,eu,ev,ew,ex,ey,ez,f,fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,ft,fu,fv,fw,fx,fy,fz,g,ga,gb,gc,gd,ge,gf,gg,gh,gi,gj,gk,gl,gm,gn,go,gp,gq,gr,gs,gt,gu,gv,gw,gx,gy,gz,h,ha,hb,hc,hd,he,hf,hg,hh,hi,hj,hk,hl,hm,hn,ho,hp,hq,hr,hs,ht,hu,hv,hw,hx,hy,hz,i,ia,ib,ic,id,ie,ig,ih,ii,ij,ik,il,im,io,ip,iq,ir,is,it,iu,iv,iw,ix,iy,iz,j,ja,jb,jc,jd,je,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,$s};return $f;};$pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame=AX;AY=function(a,b,c,d,e,f,g,h,i,j,k,l){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g,h,i,j,k,l});$s=$s||0;s:while(true){switch($s){case 0:m=AR(a,b,c*0.5,d*0.5,e,f,g,h,i,j);n=m[0];o=m[1];p=AZ(n,o,g+c+h,f+d+e,k,l);$s=1;case 1:if($c){$c=false;p=p.$blk();}if(p&&p.$blk!==undefined){break s;}q=p;$s=2;case 2:return q;}return;}var $f={$blk:AY,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,$s};return $f;};$pkg.GenerateRectCollider=AY;AZ=function(a,b,c,d,e,f){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{a,b,c,d,e,f});$s=$s||0;s:while(true){switch($s){case 0:g=B.NewObject(a,b,c,d,new BN([f]));h=B.NewRectangle(0,0,c,d);$r=g.SetShape(h);$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}g.Data=e;$s=-1;return g;}return;}var $f={$blk:AZ,$c:true,$r,a,b,c,d,e,f,g,h,$s};return $f;};BA=function(a,b,c,d,e){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,$s,$r,$c}=$restore(this,{a,b,c,d,e});$s=$s||0;s:while(true){switch($s){case 0:f=BB(a);g=0;h=0;i=g;j=h;k=B.NewConvexPolygon(CC.nil);l=f.Points;m=0;while(true){if(!(m=l.$length)?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+m]);p=f.Points;q=0;while(true){if(!(q=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+q]);if(n===r){q++;continue;}if(A.Abs(s.X-o.X)>i){i=A.Abs(s.X-o.X);}if(A.Abs(s.Y-o.Y)>j){j=A.Abs(s.Y-o.Y);}q++;}m++;}t=0;while(true){if(!(t=u.$length)?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+t]));k.AddPoints(new CC([v.X,v.Y]));t=t+(1)>>0;}w=B.NewObject(f.Anchor.X+b,f.Anchor.Y+c,i,j,new BN([e]));$r=w.SetShape(k);$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}w.Data=d;$s=-1;return w;}return;}var $f={$blk:BA,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,$s};return $f;};$pkg.GenerateConvexPolygonCollider=BA;BB=function(a){var a,b,c,d,e,f,g,h,i,j,k;b=new C.ptr(1.7e+308,1.7e+308);c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e.X=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+h]);(k=f.Points,((i<0||i>=k.$length)?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+i]=new C.ptr(j.X-b.X,j.Y-b.Y)));h++;}return f;};$pkg.AlignPolygon2DToBoundingBox=BB;BC=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x;return new K.ptr(u,v,new J.ptr(a,b,c,t),new I.ptr(d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,w,x,false));};$pkg.NewMeleeBullet=BC;BD=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ab,ac,ad,ae){var a,aa,ab,ac,ad,ae,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;return new L.ptr(u,v,w,x,y,z,aa,0,0,new J.ptr(a,b,c,t),new I.ptr(d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,ad,ae,false));};$pkg.NewFireballBullet=BD;CH.methods=[{prop:"Put",name:"Put",pkg:"",typ:$funcType([$emptyInterface],[],false)},{prop:"Pop",name:"Pop",pkg:"",typ:$funcType([],[$emptyInterface],false)},{prop:"GetArrIdxByOffset",name:"GetArrIdxByOffset",pkg:"",typ:$funcType([$Int32],[$Int32],false)},{prop:"GetByOffset",name:"GetByOffset",pkg:"",typ:$funcType([$Int32],[$emptyInterface],false)},{prop:"GetByFrameId",name:"GetByFrameId",pkg:"",typ:$funcType([$Int32],[$emptyInterface],false)},{prop:"SetByFrameId",name:"SetByFrameId",pkg:"",typ:$funcType([$emptyInterface,$Int32],[$Int32,$Int32,$Int32],false)}];C.init("",[{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""}]);D.init("",[{prop:"Anchor",name:"Anchor",embedded:false,exported:true,typ:CD,tag:""},{prop:"Points",name:"Points",embedded:false,exported:true,typ:CE,tag:""}]);E.init("",[{prop:"Id",name:"Id",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"VirtualGridX",name:"VirtualGridX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"VirtualGridY",name:"VirtualGridY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"DirX",name:"DirX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"DirY",name:"DirY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"VelX",name:"VelX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"VelY",name:"VelY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Speed",name:"Speed",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BattleState",name:"BattleState",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"JoinIndex",name:"JoinIndex",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"ColliderRadius",name:"ColliderRadius",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Removed",name:"Removed",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"Score",name:"Score",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"LastMoveGmtMillis",name:"LastMoveGmtMillis",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"FramesToRecover",name:"FramesToRecover",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"FramesInChState",name:"FramesInChState",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Hp",name:"Hp",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"MaxHp",name:"MaxHp",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"CharacterState",name:"CharacterState",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"InAir",name:"InAir",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"OnWall",name:"OnWall",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"OnWallNormX",name:"OnWallNormX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"OnWallNormY",name:"OnWallNormY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"ActiveSkillId",name:"ActiveSkillId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"ActiveSkillHit",name:"ActiveSkillHit",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"FramesInvinsible",name:"FramesInvinsible",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BulletTeamId",name:"BulletTeamId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"ChCollisionTeamId",name:"ChCollisionTeamId",embedded:false,exported:true,typ:$Int32,tag:""}]);F.init("",[{prop:"Dx",name:"Dx",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Dy",name:"Dy",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BtnALevel",name:"BtnALevel",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BtnBLevel",name:"BtnBLevel",embedded:false,exported:true,typ:$Int32,tag:""}]);H.init("",[{prop:"Boundary",name:"Boundary",embedded:false,exported:true,typ:CF,tag:""}]);I.init("",[{prop:"StartupFrames",name:"StartupFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"CancellableStFrame",name:"CancellableStFrame",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"CancellableEdFrame",name:"CancellableEdFrame",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"ActiveFrames",name:"ActiveFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"HitStunFrames",name:"HitStunFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BlockStunFrames",name:"BlockStunFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"PushbackVelX",name:"PushbackVelX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"PushbackVelY",name:"PushbackVelY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Damage",name:"Damage",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"SelfLockVelX",name:"SelfLockVelX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"SelfLockVelY",name:"SelfLockVelY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"HitboxOffsetX",name:"HitboxOffsetX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"HitboxOffsetY",name:"HitboxOffsetY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"HitboxSizeX",name:"HitboxSizeX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"HitboxSizeY",name:"HitboxSizeY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BlowUp",name:"BlowUp",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"ExplosionFrames",name:"ExplosionFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"SpeciesId",name:"SpeciesId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"CancelTransit",name:"CancelTransit",embedded:false,exported:true,typ:CG,tag:""}]);J.init("",[{prop:"BulletLocalId",name:"BulletLocalId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"OriginatedRenderFrameId",name:"OriginatedRenderFrameId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"OffenderJoinIndex",name:"OffenderJoinIndex",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"TeamId",name:"TeamId",embedded:false,exported:true,typ:$Int32,tag:""}]);K.init("",[{prop:"BlState",name:"BlState",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"FramesInBlState",name:"FramesInBlState",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BattleAttr",name:"BattleAttr",embedded:false,exported:true,typ:BH,tag:""},{prop:"Bullet",name:"Bullet",embedded:false,exported:true,typ:BI,tag:""}]);L.init("",[{prop:"VirtualGridX",name:"VirtualGridX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"VirtualGridY",name:"VirtualGridY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"DirX",name:"DirX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"DirY",name:"DirY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"VelX",name:"VelX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"VelY",name:"VelY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Speed",name:"Speed",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BlState",name:"BlState",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"FramesInBlState",name:"FramesInBlState",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BattleAttr",name:"BattleAttr",embedded:false,exported:true,typ:BH,tag:""},{prop:"Bullet",name:"Bullet",embedded:false,exported:true,typ:BI,tag:""}]);M.init("",[{prop:"BattleLocalId",name:"BattleLocalId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"RecoveryFrames",name:"RecoveryFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"RecoveryFramesOnBlock",name:"RecoveryFramesOnBlock",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"RecoveryFramesOnHit",name:"RecoveryFramesOnHit",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"ReleaseTriggerType",name:"ReleaseTriggerType",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BoundChState",name:"BoundChState",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Hits",name:"Hits",embedded:false,exported:true,typ:BG,tag:""}]);N.init("",[{prop:"Id",name:"Id",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"PlayersArr",name:"PlayersArr",embedded:false,exported:true,typ:BV,tag:""},{prop:"CountdownNanos",name:"CountdownNanos",embedded:false,exported:true,typ:$Int64,tag:""},{prop:"MeleeBullets",name:"MeleeBullets",embedded:false,exported:true,typ:BW,tag:""},{prop:"FireballBullets",name:"FireballBullets",embedded:false,exported:true,typ:BX,tag:""},{prop:"BackendUnconfirmedMask",name:"BackendUnconfirmedMask",embedded:false,exported:true,typ:$Uint64,tag:""},{prop:"ShouldForceResync",name:"ShouldForceResync",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"BulletLocalIdCounter",name:"BulletLocalIdCounter",embedded:false,exported:true,typ:$Int32,tag:""}]);O.init("",[{prop:"InputFrameId",name:"InputFrameId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"InputList",name:"InputList",embedded:false,exported:true,typ:BU,tag:""},{prop:"ConfirmedList",name:"ConfirmedList",embedded:false,exported:true,typ:$Uint64,tag:""}]);P.init("",[{prop:"FlAct",name:"FlAct",embedded:false,exported:true,typ:$Uint64,tag:""},{prop:"FrAct",name:"FrAct",embedded:false,exported:true,typ:$Uint64,tag:""},{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""}]);Q.init("",[{prop:"Ed",name:"Ed",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"St",name:"St",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"EdFrameId",name:"EdFrameId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"StFrameId",name:"StFrameId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"N",name:"N",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Cnt",name:"Cnt",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Eles",name:"Eles",embedded:false,exported:true,typ:BG,tag:""}]);S.init([$Int,BQ],[$Int],false);T.init("",[{prop:"SpeciesId",name:"SpeciesId",embedded:false,exported:true,typ:$Int,tag:""},{prop:"SpeciesName",name:"SpeciesName",embedded:false,exported:true,typ:$String,tag:""},{prop:"InAirIdleFrameIdxTurningPoint",name:"InAirIdleFrameIdxTurningPoint",embedded:false,exported:true,typ:$Int,tag:""},{prop:"InAirIdleFrameIdxTurnedCycle",name:"InAirIdleFrameIdxTurnedCycle",embedded:false,exported:true,typ:$Int,tag:""},{prop:"LayDownFrames",name:"LayDownFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"LayDownFramesToRecover",name:"LayDownFramesToRecover",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"GetUpInvinsibleFrames",name:"GetUpInvinsibleFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"GetUpFramesToRecover",name:"GetUpFramesToRecover",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Speed",name:"Speed",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"JumpingInitVelY",name:"JumpingInitVelY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"DashingEnabled",name:"DashingEnabled",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"OnWallEnabled",name:"OnWallEnabled",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"WallJumpingFramesToRecover",name:"WallJumpingFramesToRecover",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"WallJumpingInitVelX",name:"WallJumpingInitVelX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"WallJumpingInitVelY",name:"WallJumpingInitVelY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"WallSlidingVelY",name:"WallSlidingVelY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"SkillMapper",name:"SkillMapper",embedded:false,exported:true,typ:S,tag:""}]);AH.init("",[{prop:"Overlap",name:"Overlap",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"OverlapX",name:"OverlapX",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"OverlapY",name:"OverlapY",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"AContainedInB",name:"AContainedInB",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"BContainedInA",name:"BContainedInA",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"Axis",name:"Axis",embedded:false,exported:true,typ:B.Vector,tag:""}]);$init=function(){$pkg.$init=function(){};var $f,$c=false,$s=0,$r;if(this!==undefined&&this.$blk!==undefined){$f=this;$c=true;$s=$f.$s;$r=$f.$r;}s:while(true){switch($s){case 0:$r=A.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=B.$init();$s=2;case 2:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$pkg.DIRECTION_DECODER=new BF([new BE([0,0]),new BE([0,2]),new BE([0,-2]),new BE([2,0]),new BE([-2,0]),new BE([1,1]),new BE([-1,-1]),new BE([1,-1]),new BE([-1,1])]);U=$makeMap($Int.keyFor,[{k:1,v:new M.ptr(0,30,30,30,1,2,new BG([new K.ptr(0,0,BH.nil,new I.ptr(7,13,30,22,13,9,50,0,5,5,-1,1200,0,2400,3200,false,9,1,$makeMap($Int.keyFor,[{k:1,v:2}])))]))},{k:2,v:new M.ptr(0,36,36,36,1,11,new BG([new K.ptr(0,0,BH.nil,new I.ptr(18,22,36,18,18,9,50,0,5,10,-1,1800,0,2400,3200,false,9,1,$makeMap($Int.keyFor,[{k:1,v:3}])))]))},{k:3,v:new M.ptr(0,50,50,50,1,12,new BG([new K.ptr(0,0,BH.nil,new I.ptr(8,0,0,30,999999999,9,200,700,10,50,500,1600,800,3200,3200,true,9,1,false))]))},{k:4,v:new M.ptr(0,30,30,30,1,2,new BG([new K.ptr(0,0,BH.nil,new I.ptr(7,8,30,22,13,9,50,0,5,5,-1,1200,0,2400,3200,false,15,2,$makeMap($Int.keyFor,[{k:1,v:5}])))]))},{k:5,v:new M.ptr(0,36,36,36,1,11,new BG([new K.ptr(0,0,BH.nil,new I.ptr(18,19,36,18,18,9,50,0,5,10,-1,1800,0,2400,3200,false,15,2,$makeMap($Int.keyFor,[{k:1,v:6}])))]))},{k:6,v:new M.ptr(0,45,45,45,1,12,new BG([new K.ptr(0,0,BH.nil,new I.ptr(8,0,0,28,999999999,9,200,300,10,-1,-1,2400,0,3200,3200,true,15,2,false))]))},{k:7,v:new M.ptr(0,30,30,30,1,2,new BG([new K.ptr(0,0,BH.nil,new I.ptr(7,13,30,22,13,9,50,0,5,-1,-1,1200,0,2400,3200,false,9,1,$makeMap($Int.keyFor,[{k:1,v:8}])))]))},{k:8,v:new M.ptr(0,36,36,36,1,11,new BG([new K.ptr(0,0,BH.nil,new I.ptr(18,22,36,18,18,9,50,0,5,10,-1,1800,0,2400,3200,false,9,1,$makeMap($Int.keyFor,[{k:1,v:9}])))]))},{k:9,v:new M.ptr(0,40,40,40,1,12,new BG([new K.ptr(0,0,BH.nil,new I.ptr(7,0,0,30,999999999,9,200,400,10,100,-1,1000,0,3200,3200,true,9,1,false))]))},{k:10,v:new M.ptr(0,40,40,40,1,13,new BG([new L.ptr(0,0,0,0,0,0,500,0,0,BH.nil,new I.ptr(12,0,0,999999999,15,9,200,0,20,-1,-1,2400,500,4800,3200,false,15,1,false))]))},{k:11,v:new M.ptr(0,60,60,60,1,14,new BG([new K.ptr(0,0,BH.nil,new I.ptr(3,0,0,25,999999999,9,200,700,30,100,800,800,0,4000,6400,true,15,3,false))]))},{k:255,v:new M.ptr(0,30,30,30,1,6,new BG([new K.ptr(0,0,BH.nil,new I.ptr(3,0,0,20,18,9,50,0,5,-1,-1,1200,0,3200,2400,false,9,1,false))]))},{k:256,v:new M.ptr(0,20,20,20,1,6,new BG([new K.ptr(0,0,BH.nil,new I.ptr(3,0,0,10,15,9,50,0,5,-1,-1,1200,0,3200,2400,false,15,2,false))]))},{k:257,v:new M.ptr(0,30,30,30,1,6,new BG([new K.ptr(0,0,BH.nil,new I.ptr(3,0,0,20,18,9,50,0,5,-1,-1,1200,0,3200,2400,false,9,1,false))]))}]);$pkg.Characters=$makeMap($Int.keyFor,[{k:0,v:new T.ptr(0,"MonkGirl",11,1,16,16,10,27,300,800,false,false,0,0,0,0,(function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n;if(1===a){if(0===b.FramesToRecover){if(b.InAir){return 255;}else{return 1;}}else{c=(d=U[$Int.keyFor(((b.ActiveSkillId>>0)))],d!==undefined?[d.v,true]:[BJ.nil,false]);e=c[0];f=c[1];if(f){g=(h=e.Hits,i=b.ActiveSkillHit,((i<0||i>=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]));if($assertType(g,BK,true)[1]){j=g.$val;if(j.Bullet.CancellableStFrame<=b.FramesInChState&&b.FramesInChState>0)))],d!==undefined?[d.v,true]:[BJ.nil,false]);e=c[0];f=c[1];if(f){g=(h=e.Hits,i=b.ActiveSkillHit,((i<0||i>=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]));if($assertType(g,BK,true)[1]){j=g.$val;if(j.Bullet.CancellableStFrame<=b.FramesInChState&&b.FramesInChState>0)))],d!==undefined?[d.v,true]:[BJ.nil,false]);e=c[0];f=c[1];if(f){g=(h=e.Hits,i=b.ActiveSkillHit,((i<0||i>=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]));if($assertType(g,BK,true)[1]){j=g.$val;if(j.Bullet.CancellableStFrame<=b.FramesInChState&&b.FramesInChState=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+e]);g=A.MakeFullWrapper(f);$s=3;case 3:if($c){$c=false;g=g.$blk();}if(g&&g.$blk!==undefined){break s;}c=$append(c,g);e++;$s=1;continue;case 2:$s=-1;return c;}return;}var $f={$blk:O,$c:true,$r,a,b,c,d,e,f,g,$s};return $f;};$pkg.GetCollisionSpaceObjsJs=O;P=function(a,b,c,d,e,f,g,h){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g,h});$s=$s||0;s:while(true){switch($s){case 0:i=0.1;j=0.1;k=0.1;l=0.1;m=i;n=j;o=k;p=l;q=B.GenerateRectCollider(a,b,c,d,m,n,o,p,e,f,g,h);$s=1;case 1:if($c){$c=false;q=q.$blk();}if(q&&q.$blk!==undefined){break s;}r=A.MakeFullWrapper(q);$s=2;case 2:if($c){$c=false;r=r.$blk();}if(r&&r.$blk!==undefined){break s;}s=r;$s=3;case 3:return s;}return;}var $f={$blk:P,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,$s};return $f;};$pkg.GenerateRectColliderJs=P;Q=function(a,b,c,d,e){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{a,b,c,d,e});$s=$s||0;s:while(true){switch($s){case 0:f=B.GenerateConvexPolygonCollider(a,b,c,d,e);$s=1;case 1:if($c){$c=false;f=f.$blk();}if(f&&f.$blk!==undefined){break s;}g=A.MakeFullWrapper(f);$s=2;case 2:if($c){$c=false;g=g.$blk();}if(g&&g.$blk!==undefined){break s;}h=g;$s=3;case 3:return h;}return;}var $f={$blk:Q,$c:true,$r,a,b,c,d,e,f,g,h,$s};return $f;};$pkg.GenerateConvexPolygonColliderJs=Q;R=function(a){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{a});$s=$s||0;s:while(true){switch($s){case 0:b=$makeSlice(AF,a.$length,a.$length);c=a;d=0;case 1:if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);h=A.MakeFullWrapper((g=B.Characters[$Int.keyFor(f)],g!==undefined?g.v:AG.nil));$s=3;case 3:if($c){$c=false;h=h.$blk();}if(h&&h.$blk!==undefined){break s;}((e<0||e>=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+e]=h);d++;$s=1;continue;case 2:$s=-1;return b;}return;}var $f={$blk:R,$c:true,$r,a,b,c,d,e,f,g,h,$s};return $f;};$pkg.GetCharacterConfigsOrderedByJoinIndex=R;S=function(a,b,c,d,e,f,g){var{a,b,c,d,e,f,g,h,i,j,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g});$s=$s||0;s:while(true){switch($s){case 0:h=B.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(a,b,c,d,e,f,g);$s=1;case 1:if($c){$c=false;h=h.$blk();}if(h&&h.$blk!==undefined){break s;}i=A.MakeFullWrapper(h);$s=2;case 2:if($c){$c=false;i=i.$blk();}if(i&&i.$blk!==undefined){break s;}j=i;$s=3;case 3:return j;}return;}var $f={$blk:S,$c:true,$r,a,b,c,d,e,f,g,h,i,j,$s};return $f;};$pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs=S;T=function(){$global.gopkgs=$externalize($makeMap($String.keyFor,[{k:"NewVec2DJs",v:new AH(G)},{k:"NewPolygon2DJs",v:new AI(H)},{k:"NewBarrierJs",v:new AJ(I)},{k:"NewPlayerDownsyncJs",v:new AK(J)},{k:"NewMeleeBulletJs",v:new AL(K)},{k:"NewFireballBulletJs",v:new AM(L)},{k:"NewNpcPatrolCue",v:new AN(M)},{k:"NewRoomDownsyncFrameJs",v:new AO(N)},{k:"NewCollisionSpaceJs",v:new AP(F)},{k:"NewInputFrameDownsync",v:new AQ(D)},{k:"NewRingBufferJs",v:new AR(E)},{k:"GenerateRectColliderJs",v:new AS(P)},{k:"GenerateConvexPolygonColliderJs",v:new AT(Q)},{k:"GetCollisionSpaceObjsJs",v:new AV(O)},{k:"WorldToPolygonColliderBLPos",v:new AW(B.WorldToPolygonColliderBLPos)},{k:"PolygonColliderBLToWorldPos",v:new AW(B.PolygonColliderBLToWorldPos)},{k:"WorldToVirtualGridPos",v:new AX(B.WorldToVirtualGridPos)},{k:"VirtualGridToWorldPos",v:new AY(B.VirtualGridToWorldPos)},{k:"GetCharacterConfigsOrderedByJoinIndex",v:new BA(R)},{k:"ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs",v:new BG(S)},{k:"ConvertToDelayedInputFrameId",v:new BH(B.ConvertToDelayedInputFrameId)},{k:"ConvertToNoDelayInputFrameId",v:new BH(B.ConvertToNoDelayInputFrameId)},{k:"ConvertToFirstUsedRenderFrameId",v:new BH(B.ConvertToFirstUsedRenderFrameId)},{k:"ConvertToLastUsedRenderFrameId",v:new BH(B.ConvertToLastUsedRenderFrameId)},{k:"ShouldGenerateInputFrameUpsync",v:new BI(B.ShouldGenerateInputFrameUpsync)},{k:"IsMeleeBulletActive",v:new BJ(B.IsMeleeBulletActive)},{k:"IsMeleeBulletAlive",v:new BJ(B.IsMeleeBulletAlive)},{k:"IsFireballBulletActive",v:new BK(B.IsFireballBulletActive)},{k:"IsFireballBulletAlive",v:new BK(B.IsFireballBulletAlive)}]),BL);};$init=function(){$pkg.$init=function(){};var $f,$c=false,$s=0,$r;if(this!==undefined&&this.$blk!==undefined){$f=this;$c=true;$s=$f.$s;$r=$f.$r;}s:while(true){switch($s){case 0:$r=A.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=B.$init();$s=2;case 2:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=C.$init();$s=3;case 3:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}if($pkg===$mainPkg){T();$mainFinished=true;}}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); +var $NaN = NaN; +var $global, $module; +if (typeof window !== "undefined") { /* web page */ + $global = window; +} else if (typeof self !== "undefined") { /* web worker */ + $global = self; +} else if (typeof global !== "undefined") { /* Node.js */ + $global = global; + $global.require = require; +} else { /* others (e.g. Nashorn) */ + $global = this; +} + +if ($global === undefined || $global.Array === undefined) { + throw new Error("no global object found"); +} +if (typeof module !== "undefined") { + $module = module; +} + +if (!$global.fs && $global.require) { + try { + var fs = $global.require('fs'); + if (typeof fs === "object" && fs !== null && Object.keys(fs).length !== 0) { + $global.fs = fs; + } + } catch(e) { /* Ignore if the module couldn't be loaded. */ } +} + +if (!$global.fs) { + var outputBuf = ""; + var decoder = new TextDecoder("utf-8"); + $global.fs = { + constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused + writeSync: function writeSync(fd, buf) { + outputBuf += decoder.decode(buf); + var nl = outputBuf.lastIndexOf("\n"); + if (nl != -1) { + console.log(outputBuf.substr(0, nl)); + outputBuf = outputBuf.substr(nl + 1); + } + return buf.length; + }, + write: function write(fd, buf, offset, length, position, callback) { + if (offset !== 0 || length !== buf.length || position !== null) { + callback(enosys()); + return; + } + var n = this.writeSync(fd, buf); + callback(null, n); + } + }; +} + +var $linknames = {} // Collection of functions referenced by a go:linkname directive. +var $packages = {}, $idCounter = 0; +var $keys = function(m) { return m ? Object.keys(m) : []; }; +var $flushConsole = function() {}; +var $throwRuntimeError; /* set by package "runtime" */ +var $throwNilPointerError = function() { $throwRuntimeError("invalid memory address or nil pointer dereference"); }; +var $call = function(fn, rcvr, args) { return fn.apply(rcvr, args); }; +var $makeFunc = function(fn) { return function() { return $externalize(fn(this, new ($sliceType($jsObjectPtr))($global.Array.prototype.slice.call(arguments, []))), $emptyInterface); }; }; +var $unused = function(v) {}; +var $print = console.log; +// Under Node we can emulate print() more closely by avoiding a newline. +if (($global.process !== undefined) && $global.require) { + try { + var util = $global.require('util'); + $print = function() { $global.process.stderr.write(util.format.apply(this, arguments)); }; + } catch (e) { + // Failed to require util module, keep using console.log(). + } +} +var $println = console.log + +var $initAllLinknames = function() { + var names = $keys($packages); + for (var i = 0; i < names.length; i++) { + var f = $packages[names[i]]["$initLinknames"]; + if (typeof f == 'function') { + f(); + } + } +} + +var $mapArray = function(array, f) { + var newArray = new array.constructor(array.length); + for (var i = 0; i < array.length; i++) { + newArray[i] = f(array[i]); + } + return newArray; +}; + +// Returns a method bound to the receiver instance, safe to invoke as a +// standalone function. Bound function is cached for later reuse. +var $methodVal = function(recv, name) { + var vals = recv.$methodVals || {}; + recv.$methodVals = vals; /* noop for primitives */ + var f = vals[name]; + if (f !== undefined) { + return f; + } + var method = recv[name]; + f = method.bind(recv); + vals[name] = f; + return f; +}; + +var $methodExpr = function(typ, name) { + var method = typ.prototype[name]; + if (method.$expr === undefined) { + method.$expr = function() { + $stackDepthOffset--; + try { + if (typ.wrapped) { + arguments[0] = new typ(arguments[0]); + } + return Function.call.apply(method, arguments); + } finally { + $stackDepthOffset++; + } + }; + } + return method.$expr; +}; + +var $ifaceMethodExprs = {}; +var $ifaceMethodExpr = function(name) { + var expr = $ifaceMethodExprs["$" + name]; + if (expr === undefined) { + expr = $ifaceMethodExprs["$" + name] = function() { + $stackDepthOffset--; + try { + return Function.call.apply(arguments[0][name], arguments); + } finally { + $stackDepthOffset++; + } + }; + } + return expr; +}; + +var $subslice = function(slice, low, high, max) { + if (high === undefined) { + high = slice.$length; + } + if (max === undefined) { + max = slice.$capacity; + } + if (low < 0 || high < low || max < high || high > slice.$capacity || max > slice.$capacity) { + $throwRuntimeError("slice bounds out of range"); + } + if (slice === slice.constructor.nil) { + return slice; + } + var s = new slice.constructor(slice.$array); + s.$offset = slice.$offset + low; + s.$length = high - low; + s.$capacity = max - low; + return s; +}; + +var $substring = function(str, low, high) { + if (low < 0 || high < low || high > str.length) { + $throwRuntimeError("slice bounds out of range"); + } + return str.substring(low, high); +}; + +// Convert Go slice to an equivalent JS array type. +var $sliceToNativeArray = function(slice) { + if (slice.$array.constructor !== Array) { + return slice.$array.subarray(slice.$offset, slice.$offset + slice.$length); + } + return slice.$array.slice(slice.$offset, slice.$offset + slice.$length); +}; + +// Convert Go slice to a pointer to an underlying Go array. +// +// Note that an array pointer can be represented by an "unwrapped" native array +// type, and it will be wrapped back into its Go type when necessary. +var $sliceToGoArray = function(slice, arrayPtrType) { + var arrayType = arrayPtrType.elem; + if (arrayType !== undefined && slice.$length < arrayType.len) { + $throwRuntimeError("cannot convert slice with length " + slice.$length + " to pointer to array with length " + arrayType.len); + } + if (slice == slice.constructor.nil) { + return arrayPtrType.nil; // Nil slice converts to nil array pointer. + } + if (slice.$array.constructor !== Array) { + return slice.$array.subarray(slice.$offset, slice.$offset + arrayType.len); + } + if (slice.$offset == 0 && slice.$length == slice.$capacity && slice.$length == arrayType.len) { + return slice.$array; + } + if (arrayType.len == 0) { + return new arrayType([]); + } + + // Array.slice (unlike TypedArray.subarray) returns a copy of an array range, + // which is not sharing memory with the original one, which violates the spec + // for slice to array conversion. This is incompatible with the Go spec, in + // particular that the assignments to the array elements would be visible in + // the slice. Prefer to fail explicitly instead of creating subtle bugs. + $throwRuntimeError("gopherjs: non-numeric slice to underlying array conversion is not supported for subslices"); +}; + +// Convert between compatible slice types (e.g. native and names). +var $convertSliceType = function(slice, desiredType) { + if (slice == slice.constructor.nil) { + return desiredType.nil; // Preserve nil value. + } + + return $subslice(new desiredType(slice.$array), slice.$offset, slice.$offset + slice.$length); +} + +var $decodeRune = function(str, pos) { + var c0 = str.charCodeAt(pos); + + if (c0 < 0x80) { + return [c0, 1]; + } + + if (c0 !== c0 || c0 < 0xC0) { + return [0xFFFD, 1]; + } + + var c1 = str.charCodeAt(pos + 1); + if (c1 !== c1 || c1 < 0x80 || 0xC0 <= c1) { + return [0xFFFD, 1]; + } + + if (c0 < 0xE0) { + var r = (c0 & 0x1F) << 6 | (c1 & 0x3F); + if (r <= 0x7F) { + return [0xFFFD, 1]; + } + return [r, 2]; + } + + var c2 = str.charCodeAt(pos + 2); + if (c2 !== c2 || c2 < 0x80 || 0xC0 <= c2) { + return [0xFFFD, 1]; + } + + if (c0 < 0xF0) { + var r = (c0 & 0x0F) << 12 | (c1 & 0x3F) << 6 | (c2 & 0x3F); + if (r <= 0x7FF) { + return [0xFFFD, 1]; + } + if (0xD800 <= r && r <= 0xDFFF) { + return [0xFFFD, 1]; + } + return [r, 3]; + } + + var c3 = str.charCodeAt(pos + 3); + if (c3 !== c3 || c3 < 0x80 || 0xC0 <= c3) { + return [0xFFFD, 1]; + } + + if (c0 < 0xF8) { + var r = (c0 & 0x07) << 18 | (c1 & 0x3F) << 12 | (c2 & 0x3F) << 6 | (c3 & 0x3F); + if (r <= 0xFFFF || 0x10FFFF < r) { + return [0xFFFD, 1]; + } + return [r, 4]; + } + + return [0xFFFD, 1]; +}; + +var $encodeRune = function(r) { + if (r < 0 || r > 0x10FFFF || (0xD800 <= r && r <= 0xDFFF)) { + r = 0xFFFD; + } + if (r <= 0x7F) { + return String.fromCharCode(r); + } + if (r <= 0x7FF) { + return String.fromCharCode(0xC0 | r >> 6, 0x80 | (r & 0x3F)); + } + if (r <= 0xFFFF) { + return String.fromCharCode(0xE0 | r >> 12, 0x80 | (r >> 6 & 0x3F), 0x80 | (r & 0x3F)); + } + return String.fromCharCode(0xF0 | r >> 18, 0x80 | (r >> 12 & 0x3F), 0x80 | (r >> 6 & 0x3F), 0x80 | (r & 0x3F)); +}; + +var $stringToBytes = function(str) { + var array = new Uint8Array(str.length); + for (var i = 0; i < str.length; i++) { + array[i] = str.charCodeAt(i); + } + return array; +}; + +var $bytesToString = function(slice) { + if (slice.$length === 0) { + return ""; + } + var str = ""; + for (var i = 0; i < slice.$length; i += 10000) { + str += String.fromCharCode.apply(undefined, slice.$array.subarray(slice.$offset + i, slice.$offset + Math.min(slice.$length, i + 10000))); + } + return str; +}; + +var $stringToRunes = function(str) { + var array = new Int32Array(str.length); + var rune, j = 0; + for (var i = 0; i < str.length; i += rune[1], j++) { + rune = $decodeRune(str, i); + array[j] = rune[0]; + } + return array.subarray(0, j); +}; + +var $runesToString = function(slice) { + if (slice.$length === 0) { + return ""; + } + var str = ""; + for (var i = 0; i < slice.$length; i++) { + str += $encodeRune(slice.$array[slice.$offset + i]); + } + return str; +}; + +var $copyString = function(dst, src) { + var n = Math.min(src.length, dst.$length); + for (var i = 0; i < n; i++) { + dst.$array[dst.$offset + i] = src.charCodeAt(i); + } + return n; +}; + +var $copySlice = function(dst, src) { + var n = Math.min(src.$length, dst.$length); + $copyArray(dst.$array, src.$array, dst.$offset, src.$offset, n, dst.constructor.elem); + return n; +}; + +var $copyArray = function(dst, src, dstOffset, srcOffset, n, elem) { + if (n === 0 || (dst === src && dstOffset === srcOffset)) { + return; + } + + if (src.subarray) { + dst.set(src.subarray(srcOffset, srcOffset + n), dstOffset); + return; + } + + switch (elem.kind) { + case $kindArray: + case $kindStruct: + if (dst === src && dstOffset > srcOffset) { + for (var i = n - 1; i >= 0; i--) { + elem.copy(dst[dstOffset + i], src[srcOffset + i]); + } + return; + } + for (var i = 0; i < n; i++) { + elem.copy(dst[dstOffset + i], src[srcOffset + i]); + } + return; + } + + if (dst === src && dstOffset > srcOffset) { + for (var i = n - 1; i >= 0; i--) { + dst[dstOffset + i] = src[srcOffset + i]; + } + return; + } + for (var i = 0; i < n; i++) { + dst[dstOffset + i] = src[srcOffset + i]; + } +}; + +var $clone = function(src, type) { + var clone = type.zero(); + type.copy(clone, src); + return clone; +}; + +var $pointerOfStructConversion = function(obj, type) { + if(obj.$proxies === undefined) { + obj.$proxies = {}; + obj.$proxies[obj.constructor.string] = obj; + } + var proxy = obj.$proxies[type.string]; + if (proxy === undefined) { + var properties = {}; + for (var i = 0; i < type.elem.fields.length; i++) { + (function(fieldProp) { + properties[fieldProp] = { + get: function() { return obj[fieldProp]; }, + set: function(value) { obj[fieldProp] = value; } + }; + })(type.elem.fields[i].prop); + } + proxy = Object.create(type.prototype, properties); + proxy.$val = proxy; + obj.$proxies[type.string] = proxy; + proxy.$proxies = obj.$proxies; + } + return proxy; +}; + +var $append = function(slice) { + return $internalAppend(slice, arguments, 1, arguments.length - 1); +}; + +var $appendSlice = function(slice, toAppend) { + if (toAppend.constructor === String) { + var bytes = $stringToBytes(toAppend); + return $internalAppend(slice, bytes, 0, bytes.length); + } + return $internalAppend(slice, toAppend.$array, toAppend.$offset, toAppend.$length); +}; + +var $internalAppend = function(slice, array, offset, length) { + if (length === 0) { + return slice; + } + + var newArray = slice.$array; + var newOffset = slice.$offset; + var newLength = slice.$length + length; + var newCapacity = slice.$capacity; + + if (newLength > newCapacity) { + newOffset = 0; + newCapacity = Math.max(newLength, slice.$capacity < 1024 ? slice.$capacity * 2 : Math.floor(slice.$capacity * 5 / 4)); + + if (slice.$array.constructor === Array) { + newArray = slice.$array.slice(slice.$offset, slice.$offset + slice.$length); + newArray.length = newCapacity; + var zero = slice.constructor.elem.zero; + for (var i = slice.$length; i < newCapacity; i++) { + newArray[i] = zero(); + } + } else { + newArray = new slice.$array.constructor(newCapacity); + newArray.set(slice.$array.subarray(slice.$offset, slice.$offset + slice.$length)); + } + } + + $copyArray(newArray, array, newOffset + slice.$length, offset, length, slice.constructor.elem); + + var newSlice = new slice.constructor(newArray); + newSlice.$offset = newOffset; + newSlice.$length = newLength; + newSlice.$capacity = newCapacity; + return newSlice; +}; + +var $equal = function(a, b, type) { + if (type === $jsObjectPtr) { + return a === b; + } + switch (type.kind) { + case $kindComplex64: + case $kindComplex128: + return a.$real === b.$real && a.$imag === b.$imag; + case $kindInt64: + case $kindUint64: + return a.$high === b.$high && a.$low === b.$low; + case $kindArray: + if (a.length !== b.length) { + return false; + } + for (var i = 0; i < a.length; i++) { + if (!$equal(a[i], b[i], type.elem)) { + return false; + } + } + return true; + case $kindStruct: + for (var i = 0; i < type.fields.length; i++) { + var f = type.fields[i]; + if (!$equal(a[f.prop], b[f.prop], f.typ)) { + return false; + } + } + return true; + case $kindInterface: + return $interfaceIsEqual(a, b); + default: + return a === b; + } +}; + +var $interfaceIsEqual = function(a, b) { + if (a === $ifaceNil || b === $ifaceNil) { + return a === b; + } + if (a.constructor !== b.constructor) { + return false; + } + if (a.constructor === $jsObjectPtr) { + return a.object === b.object; + } + if (!a.constructor.comparable) { + $throwRuntimeError("comparing uncomparable type " + a.constructor.string); + } + return $equal(a.$val, b.$val, a.constructor); +}; + +var $min = Math.min; +var $mod = function(x, y) { return x % y; }; +var $parseInt = parseInt; +var $parseFloat = function(f) { + if (f !== undefined && f !== null && f.constructor === Number) { + return f; + } + return parseFloat(f); +}; + +var $froundBuf = new Float32Array(1); +var $fround = Math.fround || function(f) { + $froundBuf[0] = f; + return $froundBuf[0]; +}; + +var $imul = Math.imul || function(a, b) { + var ah = (a >>> 16) & 0xffff; + var al = a & 0xffff; + var bh = (b >>> 16) & 0xffff; + var bl = b & 0xffff; + return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0) >> 0); +}; + +var $floatKey = function(f) { + if (f !== f) { + $idCounter++; + return "NaN$" + $idCounter; + } + return String(f); +}; + +var $flatten64 = function(x) { + return x.$high * 4294967296 + x.$low; +}; + +var $shiftLeft64 = function(x, y) { + if (y === 0) { + return x; + } + if (y < 32) { + return new x.constructor(x.$high << y | x.$low >>> (32 - y), (x.$low << y) >>> 0); + } + if (y < 64) { + return new x.constructor(x.$low << (y - 32), 0); + } + return new x.constructor(0, 0); +}; + +var $shiftRightInt64 = function(x, y) { + if (y === 0) { + return x; + } + if (y < 32) { + return new x.constructor(x.$high >> y, (x.$low >>> y | x.$high << (32 - y)) >>> 0); + } + if (y < 64) { + return new x.constructor(x.$high >> 31, (x.$high >> (y - 32)) >>> 0); + } + if (x.$high < 0) { + return new x.constructor(-1, 4294967295); + } + return new x.constructor(0, 0); +}; + +var $shiftRightUint64 = function(x, y) { + if (y === 0) { + return x; + } + if (y < 32) { + return new x.constructor(x.$high >>> y, (x.$low >>> y | x.$high << (32 - y)) >>> 0); + } + if (y < 64) { + return new x.constructor(0, x.$high >>> (y - 32)); + } + return new x.constructor(0, 0); +}; + +var $mul64 = function(x, y) { + var x48 = x.$high >>> 16; + var x32 = x.$high & 0xFFFF; + var x16 = x.$low >>> 16; + var x00 = x.$low & 0xFFFF; + + var y48 = y.$high >>> 16; + var y32 = y.$high & 0xFFFF; + var y16 = y.$low >>> 16; + var y00 = y.$low & 0xFFFF; + + var z48 = 0, z32 = 0, z16 = 0, z00 = 0; + z00 += x00 * y00; + z16 += z00 >>> 16; + z00 &= 0xFFFF; + z16 += x16 * y00; + z32 += z16 >>> 16; + z16 &= 0xFFFF; + z16 += x00 * y16; + z32 += z16 >>> 16; + z16 &= 0xFFFF; + z32 += x32 * y00; + z48 += z32 >>> 16; + z32 &= 0xFFFF; + z32 += x16 * y16; + z48 += z32 >>> 16; + z32 &= 0xFFFF; + z32 += x00 * y32; + z48 += z32 >>> 16; + z32 &= 0xFFFF; + z48 += x48 * y00 + x32 * y16 + x16 * y32 + x00 * y48; + z48 &= 0xFFFF; + + var hi = ((z48 << 16) | z32) >>> 0; + var lo = ((z16 << 16) | z00) >>> 0; + + var r = new x.constructor(hi, lo); + return r; +}; + +var $div64 = function(x, y, returnRemainder) { + if (y.$high === 0 && y.$low === 0) { + $throwRuntimeError("integer divide by zero"); + } + + var s = 1; + var rs = 1; + + var xHigh = x.$high; + var xLow = x.$low; + if (xHigh < 0) { + s = -1; + rs = -1; + xHigh = -xHigh; + if (xLow !== 0) { + xHigh--; + xLow = 4294967296 - xLow; + } + } + + var yHigh = y.$high; + var yLow = y.$low; + if (y.$high < 0) { + s *= -1; + yHigh = -yHigh; + if (yLow !== 0) { + yHigh--; + yLow = 4294967296 - yLow; + } + } + + var high = 0, low = 0, n = 0; + while (yHigh < 2147483648 && ((xHigh > yHigh) || (xHigh === yHigh && xLow > yLow))) { + yHigh = (yHigh << 1 | yLow >>> 31) >>> 0; + yLow = (yLow << 1) >>> 0; + n++; + } + for (var i = 0; i <= n; i++) { + high = high << 1 | low >>> 31; + low = (low << 1) >>> 0; + if ((xHigh > yHigh) || (xHigh === yHigh && xLow >= yLow)) { + xHigh = xHigh - yHigh; + xLow = xLow - yLow; + if (xLow < 0) { + xHigh--; + xLow += 4294967296; + } + low++; + if (low === 4294967296) { + high++; + low = 0; + } + } + yLow = (yLow >>> 1 | yHigh << (32 - 1)) >>> 0; + yHigh = yHigh >>> 1; + } + + if (returnRemainder) { + return new x.constructor(xHigh * rs, xLow * rs); + } + return new x.constructor(high * s, low * s); +}; + +var $divComplex = function(n, d) { + var ninf = n.$real === Infinity || n.$real === -Infinity || n.$imag === Infinity || n.$imag === -Infinity; + var dinf = d.$real === Infinity || d.$real === -Infinity || d.$imag === Infinity || d.$imag === -Infinity; + var nnan = !ninf && (n.$real !== n.$real || n.$imag !== n.$imag); + var dnan = !dinf && (d.$real !== d.$real || d.$imag !== d.$imag); + if(nnan || dnan) { + return new n.constructor(NaN, NaN); + } + if (ninf && !dinf) { + return new n.constructor(Infinity, Infinity); + } + if (!ninf && dinf) { + return new n.constructor(0, 0); + } + if (d.$real === 0 && d.$imag === 0) { + if (n.$real === 0 && n.$imag === 0) { + return new n.constructor(NaN, NaN); + } + return new n.constructor(Infinity, Infinity); + } + var a = Math.abs(d.$real); + var b = Math.abs(d.$imag); + if (a <= b) { + var ratio = d.$real / d.$imag; + var denom = d.$real * ratio + d.$imag; + return new n.constructor((n.$real * ratio + n.$imag) / denom, (n.$imag * ratio - n.$real) / denom); + } + var ratio = d.$imag / d.$real; + var denom = d.$imag * ratio + d.$real; + return new n.constructor((n.$imag * ratio + n.$real) / denom, (n.$imag - n.$real * ratio) / denom); +}; + +var $kindBool = 1; +var $kindInt = 2; +var $kindInt8 = 3; +var $kindInt16 = 4; +var $kindInt32 = 5; +var $kindInt64 = 6; +var $kindUint = 7; +var $kindUint8 = 8; +var $kindUint16 = 9; +var $kindUint32 = 10; +var $kindUint64 = 11; +var $kindUintptr = 12; +var $kindFloat32 = 13; +var $kindFloat64 = 14; +var $kindComplex64 = 15; +var $kindComplex128 = 16; +var $kindArray = 17; +var $kindChan = 18; +var $kindFunc = 19; +var $kindInterface = 20; +var $kindMap = 21; +var $kindPtr = 22; +var $kindSlice = 23; +var $kindString = 24; +var $kindStruct = 25; +var $kindUnsafePointer = 26; + +var $methodSynthesizers = []; +var $addMethodSynthesizer = function(f) { + if ($methodSynthesizers === null) { + f(); + return; + } + $methodSynthesizers.push(f); +}; +var $synthesizeMethods = function() { + $methodSynthesizers.forEach(function(f) { f(); }); + $methodSynthesizers = null; +}; + +var $ifaceKeyFor = function(x) { + if (x === $ifaceNil) { + return 'nil'; + } + var c = x.constructor; + return c.string + '$' + c.keyFor(x.$val); +}; + +var $identity = function(x) { return x; }; + +var $typeIDCounter = 0; + +var $idKey = function(x) { + if (x.$id === undefined) { + $idCounter++; + x.$id = $idCounter; + } + return String(x.$id); +}; + +// Creates constructor functions for array pointer types. Returns a new function +// instace each time to make sure each type is independent of the other. +var $arrayPtrCtor = function() { + return function(array) { + this.$get = function() { return array; }; + this.$set = function(v) { typ.copy(this, v); }; + this.$val = array; + } +} + +var $newType = function(size, kind, string, named, pkg, exported, constructor) { + var typ; + switch(kind) { + case $kindBool: + case $kindInt: + case $kindInt8: + case $kindInt16: + case $kindInt32: + case $kindUint: + case $kindUint8: + case $kindUint16: + case $kindUint32: + case $kindUintptr: + case $kindUnsafePointer: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.keyFor = $identity; + break; + + case $kindString: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.keyFor = function(x) { return "$" + x; }; + break; + + case $kindFloat32: + case $kindFloat64: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.keyFor = function(x) { return $floatKey(x); }; + break; + + case $kindInt64: + typ = function(high, low) { + this.$high = (high + Math.floor(Math.ceil(low) / 4294967296)) >> 0; + this.$low = low >>> 0; + this.$val = this; + }; + typ.keyFor = function(x) { return x.$high + "$" + x.$low; }; + break; + + case $kindUint64: + typ = function(high, low) { + this.$high = (high + Math.floor(Math.ceil(low) / 4294967296)) >>> 0; + this.$low = low >>> 0; + this.$val = this; + }; + typ.keyFor = function(x) { return x.$high + "$" + x.$low; }; + break; + + case $kindComplex64: + typ = function(real, imag) { + this.$real = $fround(real); + this.$imag = $fround(imag); + this.$val = this; + }; + typ.keyFor = function(x) { return x.$real + "$" + x.$imag; }; + break; + + case $kindComplex128: + typ = function(real, imag) { + this.$real = real; + this.$imag = imag; + this.$val = this; + }; + typ.keyFor = function(x) { return x.$real + "$" + x.$imag; }; + break; + + case $kindArray: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.ptr = $newType(4, $kindPtr, "*" + string, false, "", false, $arrayPtrCtor()); + typ.init = function(elem, len) { + typ.elem = elem; + typ.len = len; + typ.comparable = elem.comparable; + typ.keyFor = function(x) { + return Array.prototype.join.call($mapArray(x, function(e) { + return String(elem.keyFor(e)).replace(/\\/g, "\\\\").replace(/\$/g, "\\$"); + }), "$"); + }; + typ.copy = function(dst, src) { + $copyArray(dst, src, 0, 0, src.length, elem); + }; + typ.ptr.init(typ); + Object.defineProperty(typ.ptr.nil, "nilCheck", { get: $throwNilPointerError }); + }; + break; + + case $kindChan: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.keyFor = $idKey; + typ.init = function(elem, sendOnly, recvOnly) { + typ.elem = elem; + typ.sendOnly = sendOnly; + typ.recvOnly = recvOnly; + }; + break; + + case $kindFunc: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.init = function(params, results, variadic) { + typ.params = params; + typ.results = results; + typ.variadic = variadic; + typ.comparable = false; + }; + break; + + case $kindInterface: + typ = { implementedBy: {}, missingMethodFor: {} }; + typ.keyFor = $ifaceKeyFor; + typ.init = function(methods) { + typ.methods = methods; + methods.forEach(function(m) { + $ifaceNil[m.prop] = $throwNilPointerError; + }); + }; + break; + + case $kindMap: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.init = function(key, elem) { + typ.key = key; + typ.elem = elem; + typ.comparable = false; + }; + break; + + case $kindPtr: + typ = constructor || function(getter, setter, target) { + this.$get = getter; + this.$set = setter; + this.$target = target; + this.$val = this; + }; + typ.keyFor = $idKey; + typ.init = function(elem) { + typ.elem = elem; + typ.wrapped = (elem.kind === $kindArray); + typ.nil = new typ($throwNilPointerError, $throwNilPointerError); + }; + break; + + case $kindSlice: + typ = function(array) { + if (array.constructor !== typ.nativeArray) { + array = new typ.nativeArray(array); + } + this.$array = array; + this.$offset = 0; + this.$length = array.length; + this.$capacity = array.length; + this.$val = this; + }; + typ.init = function(elem) { + typ.elem = elem; + typ.comparable = false; + typ.nativeArray = $nativeArray(elem.kind); + typ.nil = new typ([]); + }; + break; + + case $kindStruct: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.ptr = $newType(4, $kindPtr, "*" + string, false, pkg, exported, constructor); + typ.ptr.elem = typ; + typ.ptr.prototype.$get = function() { return this; }; + typ.ptr.prototype.$set = function(v) { typ.copy(this, v); }; + typ.init = function(pkgPath, fields) { + typ.pkgPath = pkgPath; + typ.fields = fields; + fields.forEach(function(f) { + if (!f.typ.comparable) { + typ.comparable = false; + } + }); + typ.keyFor = function(x) { + var val = x.$val; + return $mapArray(fields, function(f) { + return String(f.typ.keyFor(val[f.prop])).replace(/\\/g, "\\\\").replace(/\$/g, "\\$"); + }).join("$"); + }; + typ.copy = function(dst, src) { + for (var i = 0; i < fields.length; i++) { + var f = fields[i]; + switch (f.typ.kind) { + case $kindArray: + case $kindStruct: + f.typ.copy(dst[f.prop], src[f.prop]); + continue; + default: + dst[f.prop] = src[f.prop]; + continue; + } + } + }; + /* nil value */ + var properties = {}; + fields.forEach(function(f) { + properties[f.prop] = { get: $throwNilPointerError, set: $throwNilPointerError }; + }); + typ.ptr.nil = Object.create(constructor.prototype, properties); + typ.ptr.nil.$val = typ.ptr.nil; + /* methods for embedded fields */ + $addMethodSynthesizer(function() { + var synthesizeMethod = function(target, m, f) { + if (target.prototype[m.prop] !== undefined) { return; } + target.prototype[m.prop] = function() { + var v = this.$val[f.prop]; + if (f.typ === $jsObjectPtr) { + v = new $jsObjectPtr(v); + } + if (v.$val === undefined) { + v = new f.typ(v); + } + return v[m.prop].apply(v, arguments); + }; + }; + fields.forEach(function(f) { + if (f.embedded) { + $methodSet(f.typ).forEach(function(m) { + synthesizeMethod(typ, m, f); + synthesizeMethod(typ.ptr, m, f); + }); + $methodSet($ptrType(f.typ)).forEach(function(m) { + synthesizeMethod(typ.ptr, m, f); + }); + } + }); + }); + }; + break; + + default: + $panic(new $String("invalid kind: " + kind)); + } + + switch (kind) { + case $kindBool: + case $kindMap: + typ.zero = function() { return false; }; + break; + + case $kindInt: + case $kindInt8: + case $kindInt16: + case $kindInt32: + case $kindUint: + case $kindUint8 : + case $kindUint16: + case $kindUint32: + case $kindUintptr: + case $kindUnsafePointer: + case $kindFloat32: + case $kindFloat64: + typ.zero = function() { return 0; }; + break; + + case $kindString: + typ.zero = function() { return ""; }; + break; + + case $kindInt64: + case $kindUint64: + case $kindComplex64: + case $kindComplex128: + var zero = new typ(0, 0); + typ.zero = function() { return zero; }; + break; + + case $kindPtr: + case $kindSlice: + typ.zero = function() { return typ.nil; }; + break; + + case $kindChan: + typ.zero = function() { return $chanNil; }; + break; + + case $kindFunc: + typ.zero = function() { return $throwNilPointerError; }; + break; + + case $kindInterface: + typ.zero = function() { return $ifaceNil; }; + break; + + case $kindArray: + typ.zero = function() { + var arrayClass = $nativeArray(typ.elem.kind); + if (arrayClass !== Array) { + return new arrayClass(typ.len); + } + var array = new Array(typ.len); + for (var i = 0; i < typ.len; i++) { + array[i] = typ.elem.zero(); + } + return array; + }; + break; + + case $kindStruct: + typ.zero = function() { return new typ.ptr(); }; + break; + + default: + $panic(new $String("invalid kind: " + kind)); + } + + typ.id = $typeIDCounter; + $typeIDCounter++; + typ.size = size; + typ.kind = kind; + typ.string = string; + typ.named = named; + typ.pkg = pkg; + typ.exported = exported; + typ.methods = []; + typ.methodSetCache = null; + typ.comparable = true; + return typ; +}; + +var $methodSet = function(typ) { + if (typ.methodSetCache !== null) { + return typ.methodSetCache; + } + var base = {}; + + var isPtr = (typ.kind === $kindPtr); + if (isPtr && typ.elem.kind === $kindInterface) { + typ.methodSetCache = []; + return []; + } + + var current = [{typ: isPtr ? typ.elem : typ, indirect: isPtr}]; + + var seen = {}; + + while (current.length > 0) { + var next = []; + var mset = []; + + current.forEach(function(e) { + if (seen[e.typ.string]) { + return; + } + seen[e.typ.string] = true; + + if (e.typ.named) { + mset = mset.concat(e.typ.methods); + if (e.indirect) { + mset = mset.concat($ptrType(e.typ).methods); + } + } + + switch (e.typ.kind) { + case $kindStruct: + e.typ.fields.forEach(function(f) { + if (f.embedded) { + var fTyp = f.typ; + var fIsPtr = (fTyp.kind === $kindPtr); + next.push({typ: fIsPtr ? fTyp.elem : fTyp, indirect: e.indirect || fIsPtr}); + } + }); + break; + + case $kindInterface: + mset = mset.concat(e.typ.methods); + break; + } + }); + + mset.forEach(function(m) { + if (base[m.name] === undefined) { + base[m.name] = m; + } + }); + + current = next; + } + + typ.methodSetCache = []; + Object.keys(base).sort().forEach(function(name) { + typ.methodSetCache.push(base[name]); + }); + return typ.methodSetCache; +}; + +var $Bool = $newType( 1, $kindBool, "bool", true, "", false, null); +var $Int = $newType( 4, $kindInt, "int", true, "", false, null); +var $Int8 = $newType( 1, $kindInt8, "int8", true, "", false, null); +var $Int16 = $newType( 2, $kindInt16, "int16", true, "", false, null); +var $Int32 = $newType( 4, $kindInt32, "int32", true, "", false, null); +var $Int64 = $newType( 8, $kindInt64, "int64", true, "", false, null); +var $Uint = $newType( 4, $kindUint, "uint", true, "", false, null); +var $Uint8 = $newType( 1, $kindUint8, "uint8", true, "", false, null); +var $Uint16 = $newType( 2, $kindUint16, "uint16", true, "", false, null); +var $Uint32 = $newType( 4, $kindUint32, "uint32", true, "", false, null); +var $Uint64 = $newType( 8, $kindUint64, "uint64", true, "", false, null); +var $Uintptr = $newType( 4, $kindUintptr, "uintptr", true, "", false, null); +var $Float32 = $newType( 4, $kindFloat32, "float32", true, "", false, null); +var $Float64 = $newType( 8, $kindFloat64, "float64", true, "", false, null); +var $Complex64 = $newType( 8, $kindComplex64, "complex64", true, "", false, null); +var $Complex128 = $newType(16, $kindComplex128, "complex128", true, "", false, null); +var $String = $newType( 8, $kindString, "string", true, "", false, null); +var $UnsafePointer = $newType( 4, $kindUnsafePointer, "unsafe.Pointer", true, "unsafe", false, null); + +var $nativeArray = function(elemKind) { + switch (elemKind) { + case $kindInt: + return Int32Array; + case $kindInt8: + return Int8Array; + case $kindInt16: + return Int16Array; + case $kindInt32: + return Int32Array; + case $kindUint: + return Uint32Array; + case $kindUint8: + return Uint8Array; + case $kindUint16: + return Uint16Array; + case $kindUint32: + return Uint32Array; + case $kindUintptr: + return Uint32Array; + case $kindFloat32: + return Float32Array; + case $kindFloat64: + return Float64Array; + default: + return Array; + } +}; +var $toNativeArray = function(elemKind, array) { + var nativeArray = $nativeArray(elemKind); + if (nativeArray === Array) { + return array; + } + return new nativeArray(array); +}; +var $arrayTypes = {}; +var $arrayType = function(elem, len) { + var typeKey = elem.id + "$" + len; + var typ = $arrayTypes[typeKey]; + if (typ === undefined) { + typ = $newType(12, $kindArray, "[" + len + "]" + elem.string, false, "", false, null); + $arrayTypes[typeKey] = typ; + typ.init(elem, len); + } + return typ; +}; + +var $chanType = function(elem, sendOnly, recvOnly) { + var string = (recvOnly ? "<-" : "") + "chan" + (sendOnly ? "<- " : " "); + if (!sendOnly && !recvOnly && (elem.string[0] == "<")) { + string += "(" + elem.string + ")"; + } else { + string += elem.string; + } + var field = sendOnly ? "SendChan" : (recvOnly ? "RecvChan" : "Chan"); + var typ = elem[field]; + if (typ === undefined) { + typ = $newType(4, $kindChan, string, false, "", false, null); + elem[field] = typ; + typ.init(elem, sendOnly, recvOnly); + } + return typ; +}; +var $Chan = function(elem, capacity) { + if (capacity < 0 || capacity > 2147483647) { + $throwRuntimeError("makechan: size out of range"); + } + this.$elem = elem; + this.$capacity = capacity; + this.$buffer = []; + this.$sendQueue = []; + this.$recvQueue = []; + this.$closed = false; +}; +var $chanNil = new $Chan(null, 0); +$chanNil.$sendQueue = $chanNil.$recvQueue = { length: 0, push: function() {}, shift: function() { return undefined; }, indexOf: function() { return -1; } }; + +var $funcTypes = {}; +var $funcType = function(params, results, variadic) { + var typeKey = $mapArray(params, function(p) { return p.id; }).join(",") + "$" + $mapArray(results, function(r) { return r.id; }).join(",") + "$" + variadic; + var typ = $funcTypes[typeKey]; + if (typ === undefined) { + var paramTypes = $mapArray(params, function(p) { return p.string; }); + if (variadic) { + paramTypes[paramTypes.length - 1] = "..." + paramTypes[paramTypes.length - 1].substr(2); + } + var string = "func(" + paramTypes.join(", ") + ")"; + if (results.length === 1) { + string += " " + results[0].string; + } else if (results.length > 1) { + string += " (" + $mapArray(results, function(r) { return r.string; }).join(", ") + ")"; + } + typ = $newType(4, $kindFunc, string, false, "", false, null); + $funcTypes[typeKey] = typ; + typ.init(params, results, variadic); + } + return typ; +}; + +var $interfaceTypes = {}; +var $interfaceType = function(methods) { + var typeKey = $mapArray(methods, function(m) { return m.pkg + "," + m.name + "," + m.typ.id; }).join("$"); + var typ = $interfaceTypes[typeKey]; + if (typ === undefined) { + var string = "interface {}"; + if (methods.length !== 0) { + string = "interface { " + $mapArray(methods, function(m) { + return (m.pkg !== "" ? m.pkg + "." : "") + m.name + m.typ.string.substr(4); + }).join("; ") + " }"; + } + typ = $newType(8, $kindInterface, string, false, "", false, null); + $interfaceTypes[typeKey] = typ; + typ.init(methods); + } + return typ; +}; +var $emptyInterface = $interfaceType([]); +var $ifaceNil = {}; +var $error = $newType(8, $kindInterface, "error", true, "", false, null); +$error.init([{prop: "Error", name: "Error", pkg: "", typ: $funcType([], [$String], false)}]); + +var $mapTypes = {}; +var $mapType = function(key, elem) { + var typeKey = key.id + "$" + elem.id; + var typ = $mapTypes[typeKey]; + if (typ === undefined) { + typ = $newType(4, $kindMap, "map[" + key.string + "]" + elem.string, false, "", false, null); + $mapTypes[typeKey] = typ; + typ.init(key, elem); + } + return typ; +}; +var $makeMap = function(keyForFunc, entries) { + var m = {}; + for (var i = 0; i < entries.length; i++) { + var e = entries[i]; + m[keyForFunc(e.k)] = e; + } + return m; +}; + +var $ptrType = function(elem) { + var typ = elem.ptr; + if (typ === undefined) { + typ = $newType(4, $kindPtr, "*" + elem.string, false, "", elem.exported, null); + elem.ptr = typ; + typ.init(elem); + } + return typ; +}; + +var $newDataPointer = function(data, constructor) { + if (constructor.elem.kind === $kindStruct) { + return data; + } + return new constructor(function() { return data; }, function(v) { data = v; }); +}; + +var $indexPtr = function(array, index, constructor) { + if (array.buffer) { + // Pointers to the same underlying ArrayBuffer share cache. + var cache = array.buffer.$ptr = array.buffer.$ptr || {}; + // Pointers of different primitive types are non-comparable and stored in different caches. + var typeCache = cache[array.name] = cache[array.name] || {}; + var cacheIdx = array.BYTES_PER_ELEMENT * index + array.byteOffset; + return typeCache[cacheIdx] || (typeCache[cacheIdx] = new constructor(function() { return array[index]; }, function(v) { array[index] = v; })); + } else { + array.$ptr = array.$ptr || {}; + return array.$ptr[index] || (array.$ptr[index] = new constructor(function() { return array[index]; }, function(v) { array[index] = v; })); + } +}; + +var $sliceType = function(elem) { + var typ = elem.slice; + if (typ === undefined) { + typ = $newType(12, $kindSlice, "[]" + elem.string, false, "", false, null); + elem.slice = typ; + typ.init(elem); + } + return typ; +}; +var $makeSlice = function(typ, length, capacity) { + capacity = capacity || length; + if (length < 0 || length > 2147483647) { + $throwRuntimeError("makeslice: len out of range"); + } + if (capacity < 0 || capacity < length || capacity > 2147483647) { + $throwRuntimeError("makeslice: cap out of range"); + } + var array = new typ.nativeArray(capacity); + if (typ.nativeArray === Array) { + for (var i = 0; i < capacity; i++) { + array[i] = typ.elem.zero(); + } + } + var slice = new typ(array); + slice.$length = length; + return slice; +}; + +var $structTypes = {}; +var $structType = function(pkgPath, fields) { + var typeKey = $mapArray(fields, function(f) { return f.name + "," + f.typ.id + "," + f.tag; }).join("$"); + var typ = $structTypes[typeKey]; + if (typ === undefined) { + var string = "struct { " + $mapArray(fields, function(f) { + var str = f.typ.string + (f.tag !== "" ? (" \"" + f.tag.replace(/\\/g, "\\\\").replace(/"/g, "\\\"") + "\"") : ""); + if (f.embedded) { + return str; + } + return f.name + " " + str; + }).join("; ") + " }"; + if (fields.length === 0) { + string = "struct {}"; + } + typ = $newType(0, $kindStruct, string, false, "", false, function() { + this.$val = this; + for (var i = 0; i < fields.length; i++) { + var f = fields[i]; + if (f.name == '_') { + continue; + } + var arg = arguments[i]; + this[f.prop] = arg !== undefined ? arg : f.typ.zero(); + } + }); + $structTypes[typeKey] = typ; + typ.init(pkgPath, fields); + } + return typ; +}; + +var $assertType = function(value, type, returnTuple) { + var isInterface = (type.kind === $kindInterface), ok, missingMethod = ""; + if (value === $ifaceNil) { + ok = false; + } else if (!isInterface) { + ok = value.constructor === type; + } else { + var valueTypeString = value.constructor.string; + ok = type.implementedBy[valueTypeString]; + if (ok === undefined) { + ok = true; + var valueMethodSet = $methodSet(value.constructor); + var interfaceMethods = type.methods; + for (var i = 0; i < interfaceMethods.length; i++) { + var tm = interfaceMethods[i]; + var found = false; + for (var j = 0; j < valueMethodSet.length; j++) { + var vm = valueMethodSet[j]; + if (vm.name === tm.name && vm.pkg === tm.pkg && vm.typ === tm.typ) { + found = true; + break; + } + } + if (!found) { + ok = false; + type.missingMethodFor[valueTypeString] = tm.name; + break; + } + } + type.implementedBy[valueTypeString] = ok; + } + if (!ok) { + missingMethod = type.missingMethodFor[valueTypeString]; + } + } + + if (!ok) { + if (returnTuple) { + return [type.zero(), false]; + } + $panic(new $packages["runtime"].TypeAssertionError.ptr( + $packages["runtime"]._type.ptr.nil, + (value === $ifaceNil ? $packages["runtime"]._type.ptr.nil : new $packages["runtime"]._type.ptr(value.constructor.string)), + new $packages["runtime"]._type.ptr(type.string), + missingMethod)); + } + + if (!isInterface) { + value = value.$val; + } + if (type === $jsObjectPtr) { + value = value.object; + } + return returnTuple ? [value, true] : value; +}; + +var $stackDepthOffset = 0; +var $getStackDepth = function() { + var err = new Error(); + if (err.stack === undefined) { + return undefined; + } + return $stackDepthOffset + err.stack.split("\n").length; +}; + +var $panicStackDepth = null, $panicValue; +var $callDeferred = function(deferred, jsErr, fromPanic) { + if (!fromPanic && deferred !== null && $curGoroutine.deferStack.indexOf(deferred) == -1) { + throw jsErr; + } + if (jsErr !== null) { + var newErr = null; + try { + $panic(new $jsErrorPtr(jsErr)); + } catch (err) { + newErr = err; + } + $callDeferred(deferred, newErr); + return; + } + if ($curGoroutine.asleep) { + return; + } + + $stackDepthOffset--; + var outerPanicStackDepth = $panicStackDepth; + var outerPanicValue = $panicValue; + + var localPanicValue = $curGoroutine.panicStack.pop(); + if (localPanicValue !== undefined) { + $panicStackDepth = $getStackDepth(); + $panicValue = localPanicValue; + } + + try { + while (true) { + if (deferred === null) { + deferred = $curGoroutine.deferStack[$curGoroutine.deferStack.length - 1]; + if (deferred === undefined) { + /* The panic reached the top of the stack. Clear it and throw it as a JavaScript error. */ + $panicStackDepth = null; + if (localPanicValue.Object instanceof Error) { + throw localPanicValue.Object; + } + var msg; + if (localPanicValue.constructor === $String) { + msg = localPanicValue.$val; + } else if (localPanicValue.Error !== undefined) { + msg = localPanicValue.Error(); + } else if (localPanicValue.String !== undefined) { + msg = localPanicValue.String(); + } else { + msg = localPanicValue; + } + throw new Error(msg); + } + } + var call = deferred.pop(); + if (call === undefined) { + $curGoroutine.deferStack.pop(); + if (localPanicValue !== undefined) { + deferred = null; + continue; + } + return; + } + var r = call[0].apply(call[2], call[1]); + if (r && r.$blk !== undefined) { + deferred.push([r.$blk, [], r]); + if (fromPanic) { + throw null; + } + return; + } + + if (localPanicValue !== undefined && $panicStackDepth === null) { + /* error was recovered */ + if (fromPanic) { + throw null; + } + return; + } + } + } catch(e) { + // Deferred function threw a JavaScript exception or tries to unwind stack + // to the point where a panic was handled. + if (fromPanic) { + // Re-throw the exception to reach deferral execution call at the end + // of the function. + throw e; + } + // We are at the end of the function, handle the error or re-throw to + // continue unwinding if necessary, or simply stop unwinding if we got far + // enough. + $callDeferred(deferred, e, fromPanic); + } finally { + if (localPanicValue !== undefined) { + if ($panicStackDepth !== null) { + $curGoroutine.panicStack.push(localPanicValue); + } + $panicStackDepth = outerPanicStackDepth; + $panicValue = outerPanicValue; + } + $stackDepthOffset++; + } +}; + +var $panic = function(value) { + $curGoroutine.panicStack.push(value); + $callDeferred(null, null, true); +}; +var $recover = function() { + if ($panicStackDepth === null || ($panicStackDepth !== undefined && $panicStackDepth !== $getStackDepth() - 2)) { + return $ifaceNil; + } + $panicStackDepth = null; + return $panicValue; +}; +var $throw = function(err) { throw err; }; + +var $noGoroutine = { asleep: false, exit: false, deferStack: [], panicStack: [] }; +var $curGoroutine = $noGoroutine, $totalGoroutines = 0, $awakeGoroutines = 0, $checkForDeadlock = true, $exportedFunctions = 0; +var $mainFinished = false; +var $go = function(fun, args) { + $totalGoroutines++; + $awakeGoroutines++; + var $goroutine = function() { + try { + $curGoroutine = $goroutine; + var r = fun.apply(undefined, args); + if (r && r.$blk !== undefined) { + fun = function() { return r.$blk(); }; + args = []; + return; + } + $goroutine.exit = true; + } catch (err) { + if (!$goroutine.exit) { + throw err; + } + } finally { + $curGoroutine = $noGoroutine; + if ($goroutine.exit) { /* also set by runtime.Goexit() */ + $totalGoroutines--; + $goroutine.asleep = true; + } + if ($goroutine.asleep) { + $awakeGoroutines--; + if (!$mainFinished && $awakeGoroutines === 0 && $checkForDeadlock && $exportedFunctions === 0) { + console.error("fatal error: all goroutines are asleep - deadlock!"); + if ($global.process !== undefined) { + $global.process.exit(2); + } + } + } + } + }; + $goroutine.asleep = false; + $goroutine.exit = false; + $goroutine.deferStack = []; + $goroutine.panicStack = []; + $schedule($goroutine); +}; + +var $scheduled = []; +var $runScheduled = function() { + // For nested setTimeout calls browsers enforce 4ms minimum delay. We minimize + // the effect of this penalty by queueing the timer preemptively before we run + // the goroutines, and later cancelling it if it turns out unneeded. See: + // https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#nested_timeouts + var nextRun = setTimeout($runScheduled); + try { + var start = Date.now(); + var r; + while ((r = $scheduled.shift()) !== undefined) { + r(); + // We need to interrupt this loop in order to allow the event loop to + // process timers, IO, etc. However, invoking scheduling through + // setTimeout is ~1000 times more expensive, so we amortize this cost by + // looping until the 4ms minimal delay has elapsed (assuming there are + // scheduled goroutines to run), and then yield to the event loop. + var elapsed = Date.now() - start; + if (elapsed > 4 || elapsed < 0) { break; } + } + } finally { + if ($scheduled.length == 0) { + // Cancel scheduling pass if there's nothing to run. + clearTimeout(nextRun); + } + } +}; + +var $schedule = function(goroutine) { + if (goroutine.asleep) { + goroutine.asleep = false; + $awakeGoroutines++; + } + $scheduled.push(goroutine); + if ($curGoroutine === $noGoroutine) { + $runScheduled(); + } +}; + +var $setTimeout = function(f, t) { + $awakeGoroutines++; + return setTimeout(function() { + $awakeGoroutines--; + f(); + }, t); +}; + +var $block = function() { + if ($curGoroutine === $noGoroutine) { + $throwRuntimeError("cannot block in JavaScript callback, fix by wrapping code in goroutine"); + } + $curGoroutine.asleep = true; +}; + +var $restore = function(context, params) { + if (context !== undefined && context.$blk !== undefined) { + return context; + } + return params; +} + +var $send = function(chan, value) { + if (chan.$closed) { + $throwRuntimeError("send on closed channel"); + } + var queuedRecv = chan.$recvQueue.shift(); + if (queuedRecv !== undefined) { + queuedRecv([value, true]); + return; + } + if (chan.$buffer.length < chan.$capacity) { + chan.$buffer.push(value); + return; + } + + var thisGoroutine = $curGoroutine; + var closedDuringSend; + chan.$sendQueue.push(function(closed) { + closedDuringSend = closed; + $schedule(thisGoroutine); + return value; + }); + $block(); + return { + $blk: function() { + if (closedDuringSend) { + $throwRuntimeError("send on closed channel"); + } + } + }; +}; +var $recv = function(chan) { + var queuedSend = chan.$sendQueue.shift(); + if (queuedSend !== undefined) { + chan.$buffer.push(queuedSend(false)); + } + var bufferedValue = chan.$buffer.shift(); + if (bufferedValue !== undefined) { + return [bufferedValue, true]; + } + if (chan.$closed) { + return [chan.$elem.zero(), false]; + } + + var thisGoroutine = $curGoroutine; + var f = { $blk: function() { return this.value; } }; + var queueEntry = function(v) { + f.value = v; + $schedule(thisGoroutine); + }; + chan.$recvQueue.push(queueEntry); + $block(); + return f; +}; +var $close = function(chan) { + if (chan.$closed) { + $throwRuntimeError("close of closed channel"); + } + chan.$closed = true; + while (true) { + var queuedSend = chan.$sendQueue.shift(); + if (queuedSend === undefined) { + break; + } + queuedSend(true); /* will panic */ + } + while (true) { + var queuedRecv = chan.$recvQueue.shift(); + if (queuedRecv === undefined) { + break; + } + queuedRecv([chan.$elem.zero(), false]); + } +}; +var $select = function(comms) { + var ready = []; + var selection = -1; + for (var i = 0; i < comms.length; i++) { + var comm = comms[i]; + var chan = comm[0]; + switch (comm.length) { + case 0: /* default */ + selection = i; + break; + case 1: /* recv */ + if (chan.$sendQueue.length !== 0 || chan.$buffer.length !== 0 || chan.$closed) { + ready.push(i); + } + break; + case 2: /* send */ + if (chan.$closed) { + $throwRuntimeError("send on closed channel"); + } + if (chan.$recvQueue.length !== 0 || chan.$buffer.length < chan.$capacity) { + ready.push(i); + } + break; + } + } + + if (ready.length !== 0) { + selection = ready[Math.floor(Math.random() * ready.length)]; + } + if (selection !== -1) { + var comm = comms[selection]; + switch (comm.length) { + case 0: /* default */ + return [selection]; + case 1: /* recv */ + return [selection, $recv(comm[0])]; + case 2: /* send */ + $send(comm[0], comm[1]); + return [selection]; + } + } + + var entries = []; + var thisGoroutine = $curGoroutine; + var f = { $blk: function() { return this.selection; } }; + var removeFromQueues = function() { + for (var i = 0; i < entries.length; i++) { + var entry = entries[i]; + var queue = entry[0]; + var index = queue.indexOf(entry[1]); + if (index !== -1) { + queue.splice(index, 1); + } + } + }; + for (var i = 0; i < comms.length; i++) { + (function(i) { + var comm = comms[i]; + switch (comm.length) { + case 1: /* recv */ + var queueEntry = function(value) { + f.selection = [i, value]; + removeFromQueues(); + $schedule(thisGoroutine); + }; + entries.push([comm[0].$recvQueue, queueEntry]); + comm[0].$recvQueue.push(queueEntry); + break; + case 2: /* send */ + var queueEntry = function() { + if (comm[0].$closed) { + $throwRuntimeError("send on closed channel"); + } + f.selection = [i]; + removeFromQueues(); + $schedule(thisGoroutine); + return comm[1]; + }; + entries.push([comm[0].$sendQueue, queueEntry]); + comm[0].$sendQueue.push(queueEntry); + break; + } + })(i); + } + $block(); + return f; +}; + +var $jsObjectPtr, $jsErrorPtr; + +var $needsExternalization = function(t) { + switch (t.kind) { + case $kindBool: + case $kindInt: + case $kindInt8: + case $kindInt16: + case $kindInt32: + case $kindUint: + case $kindUint8: + case $kindUint16: + case $kindUint32: + case $kindUintptr: + case $kindFloat32: + case $kindFloat64: + return false; + default: + return t !== $jsObjectPtr; + } +}; + +var $externalize = function(v, t, makeWrapper) { + if (t === $jsObjectPtr) { + return v; + } + switch (t.kind) { + case $kindBool: + case $kindInt: + case $kindInt8: + case $kindInt16: + case $kindInt32: + case $kindUint: + case $kindUint8: + case $kindUint16: + case $kindUint32: + case $kindUintptr: + case $kindFloat32: + case $kindFloat64: + return v; + case $kindInt64: + case $kindUint64: + return $flatten64(v); + case $kindArray: + if ($needsExternalization(t.elem)) { + return $mapArray(v, function(e) { return $externalize(e, t.elem, makeWrapper); }); + } + return v; + case $kindFunc: + return $externalizeFunction(v, t, false, makeWrapper); + case $kindInterface: + if (v === $ifaceNil) { + return null; + } + if (v.constructor === $jsObjectPtr) { + return v.$val.object; + } + return $externalize(v.$val, v.constructor, makeWrapper); + case $kindMap: + var m = {}; + var keys = $keys(v); + for (var i = 0; i < keys.length; i++) { + var entry = v[keys[i]]; + m[$externalize(entry.k, t.key, makeWrapper)] = $externalize(entry.v, t.elem, makeWrapper); + } + return m; + case $kindPtr: + if (v === t.nil) { + return null; + } + return $externalize(v.$get(), t.elem, makeWrapper); + case $kindSlice: + if ($needsExternalization(t.elem)) { + return $mapArray($sliceToNativeArray(v), function(e) { return $externalize(e, t.elem, makeWrapper); }); + } + return $sliceToNativeArray(v); + case $kindString: + if ($isASCII(v)) { + return v; + } + var s = "", r; + for (var i = 0; i < v.length; i += r[1]) { + r = $decodeRune(v, i); + var c = r[0]; + if (c > 0xFFFF) { + var h = Math.floor((c - 0x10000) / 0x400) + 0xD800; + var l = (c - 0x10000) % 0x400 + 0xDC00; + s += String.fromCharCode(h, l); + continue; + } + s += String.fromCharCode(c); + } + return s; + case $kindStruct: + var timePkg = $packages["time"]; + if (timePkg !== undefined && v.constructor === timePkg.Time.ptr) { + var milli = $div64(v.UnixNano(), new $Int64(0, 1000000)); + return new Date($flatten64(milli)); + } + + var noJsObject = {}; + var searchJsObject = function(v, t) { + if (t === $jsObjectPtr) { + return v; + } + switch (t.kind) { + case $kindPtr: + if (v === t.nil) { + return noJsObject; + } + return searchJsObject(v.$get(), t.elem); + case $kindStruct: + var f = t.fields[0]; + return searchJsObject(v[f.prop], f.typ); + case $kindInterface: + return searchJsObject(v.$val, v.constructor); + default: + return noJsObject; + } + }; + var o = searchJsObject(v, t); + if (o !== noJsObject) { + return o; + } + + if (makeWrapper !== undefined) { + return makeWrapper(v); + } + + o = {}; + for (var i = 0; i < t.fields.length; i++) { + var f = t.fields[i]; + if (!f.exported) { + continue; + } + o[f.name] = $externalize(v[f.prop], f.typ, makeWrapper); + } + return o; + } + $throwRuntimeError("cannot externalize " + t.string); +}; + +var $externalizeFunction = function(v, t, passThis, makeWrapper) { + if (v === $throwNilPointerError) { + return null; + } + if (v.$externalizeWrapper === undefined) { + $checkForDeadlock = false; + v.$externalizeWrapper = function() { + var args = []; + for (var i = 0; i < t.params.length; i++) { + if (t.variadic && i === t.params.length - 1) { + var vt = t.params[i].elem, varargs = []; + for (var j = i; j < arguments.length; j++) { + varargs.push($internalize(arguments[j], vt, makeWrapper)); + } + args.push(new (t.params[i])(varargs)); + break; + } + args.push($internalize(arguments[i], t.params[i], makeWrapper)); + } + var result = v.apply(passThis ? this : undefined, args); + switch (t.results.length) { + case 0: + return; + case 1: + return $externalize($copyIfRequired(result, t.results[0]), t.results[0], makeWrapper); + default: + for (var i = 0; i < t.results.length; i++) { + result[i] = $externalize($copyIfRequired(result[i], t.results[i]), t.results[i], makeWrapper); + } + return result; + } + }; + } + return v.$externalizeWrapper; +}; + +var $internalize = function(v, t, recv, seen, makeWrapper) { + if (t === $jsObjectPtr) { + return v; + } + if (t === $jsObjectPtr.elem) { + $throwRuntimeError("cannot internalize js.Object, use *js.Object instead"); + } + if (v && v.__internal_object__ !== undefined) { + return $assertType(v.__internal_object__, t, false); + } + var timePkg = $packages["time"]; + if (timePkg !== undefined && t === timePkg.Time) { + if (!(v !== null && v !== undefined && v.constructor === Date)) { + $throwRuntimeError("cannot internalize time.Time from " + typeof v + ", must be Date"); + } + return timePkg.Unix(new $Int64(0, 0), new $Int64(0, v.getTime() * 1000000)); + } + + // Cache for values we've already internalized in order to deal with circular + // references. + if (seen === undefined) { seen = new Map(); } + if (!seen.has(t)) { seen.set(t, new Map()); } + if (seen.get(t).has(v)) { return seen.get(t).get(v); } + + switch (t.kind) { + case $kindBool: + return !!v; + case $kindInt: + return parseInt(v); + case $kindInt8: + return parseInt(v) << 24 >> 24; + case $kindInt16: + return parseInt(v) << 16 >> 16; + case $kindInt32: + return parseInt(v) >> 0; + case $kindUint: + return parseInt(v); + case $kindUint8: + return parseInt(v) << 24 >>> 24; + case $kindUint16: + return parseInt(v) << 16 >>> 16; + case $kindUint32: + case $kindUintptr: + return parseInt(v) >>> 0; + case $kindInt64: + case $kindUint64: + return new t(0, v); + case $kindFloat32: + case $kindFloat64: + return parseFloat(v); + case $kindArray: + if (v.length !== t.len) { + $throwRuntimeError("got array with wrong size from JavaScript native"); + } + return $mapArray(v, function(e) { return $internalize(e, t.elem, makeWrapper); }); + case $kindFunc: + return function() { + var args = []; + for (var i = 0; i < t.params.length; i++) { + if (t.variadic && i === t.params.length - 1) { + var vt = t.params[i].elem, varargs = arguments[i]; + for (var j = 0; j < varargs.$length; j++) { + args.push($externalize(varargs.$array[varargs.$offset + j], vt, makeWrapper)); + } + break; + } + args.push($externalize(arguments[i], t.params[i], makeWrapper)); + } + var result = v.apply(recv, args); + switch (t.results.length) { + case 0: + return; + case 1: + return $internalize(result, t.results[0], makeWrapper); + default: + for (var i = 0; i < t.results.length; i++) { + result[i] = $internalize(result[i], t.results[i], makeWrapper); + } + return result; + } + }; + case $kindInterface: + if (t.methods.length !== 0) { + $throwRuntimeError("cannot internalize " + t.string); + } + if (v === null) { + return $ifaceNil; + } + if (v === undefined) { + return new $jsObjectPtr(undefined); + } + switch (v.constructor) { + case Int8Array: + return new ($sliceType($Int8))(v); + case Int16Array: + return new ($sliceType($Int16))(v); + case Int32Array: + return new ($sliceType($Int))(v); + case Uint8Array: + return new ($sliceType($Uint8))(v); + case Uint16Array: + return new ($sliceType($Uint16))(v); + case Uint32Array: + return new ($sliceType($Uint))(v); + case Float32Array: + return new ($sliceType($Float32))(v); + case Float64Array: + return new ($sliceType($Float64))(v); + case Array: + return $internalize(v, $sliceType($emptyInterface), makeWrapper); + case Boolean: + return new $Bool(!!v); + case Date: + if (timePkg === undefined) { + /* time package is not present, internalize as &js.Object{Date} so it can be externalized into original Date. */ + return new $jsObjectPtr(v); + } + return new timePkg.Time($internalize(v, timePkg.Time, makeWrapper)); + case (function () { }).constructor: // is usually Function, but in Chrome extensions it is something else + var funcType = $funcType([$sliceType($emptyInterface)], [$jsObjectPtr], true); + return new funcType($internalize(v, funcType, makeWrapper)); + case Number: + return new $Float64(parseFloat(v)); + case String: + return new $String($internalize(v, $String, makeWrapper)); + default: + if ($global.Node && v instanceof $global.Node) { + return new $jsObjectPtr(v); + } + var mapType = $mapType($String, $emptyInterface); + return new mapType($internalize(v, mapType, recv, seen, makeWrapper)); + } + case $kindMap: + var m = {}; + seen.get(t).set(v, m); + var keys = $keys(v); + for (var i = 0; i < keys.length; i++) { + var k = $internalize(keys[i], t.key, recv, seen, makeWrapper); + m[t.key.keyFor(k)] = { k: k, v: $internalize(v[keys[i]], t.elem, recv, seen, makeWrapper) }; + } + return m; + case $kindPtr: + if (t.elem.kind === $kindStruct) { + return $internalize(v, t.elem, makeWrapper); + } + case $kindSlice: + return new t($mapArray(v, function(e) { return $internalize(e, t.elem, makeWrapper); })); + case $kindString: + v = String(v); + if ($isASCII(v)) { + return v; + } + var s = ""; + var i = 0; + while (i < v.length) { + var h = v.charCodeAt(i); + if (0xD800 <= h && h <= 0xDBFF) { + var l = v.charCodeAt(i + 1); + var c = (h - 0xD800) * 0x400 + l - 0xDC00 + 0x10000; + s += $encodeRune(c); + i += 2; + continue; + } + s += $encodeRune(h); + i++; + } + return s; + case $kindStruct: + var noJsObject = {}; + var searchJsObject = function(t) { + if (t === $jsObjectPtr) { + return v; + } + if (t === $jsObjectPtr.elem) { + $throwRuntimeError("cannot internalize js.Object, use *js.Object instead"); + } + switch (t.kind) { + case $kindPtr: + return searchJsObject(t.elem); + case $kindStruct: + var f = t.fields[0]; + var o = searchJsObject(f.typ); + if (o !== noJsObject) { + var n = new t.ptr(); + n[f.prop] = o; + return n; + } + return noJsObject; + default: + return noJsObject; + } + }; + var o = searchJsObject(t); + if (o !== noJsObject) { + return o; + } + } + $throwRuntimeError("cannot internalize " + t.string); +}; + +var $copyIfRequired = function(v, typ) { + // interface values + if (v && v.constructor && v.constructor.copy) { + return new v.constructor($clone(v.$val, v.constructor)) + } + // array and struct values + if (typ.copy) { + var clone = typ.zero(); + typ.copy(clone, v); + return clone; + } + return v; +} + +/* $isASCII reports whether string s contains only ASCII characters. */ +var $isASCII = function(s) { + for (var i = 0; i < s.length; i++) { + if (s.charCodeAt(i) >= 128) { + return false; + } + } + return true; +}; + +$packages["github.com/gopherjs/gopherjs/js"] = (function() { + var $pkg = {}, $init, Object, Error, M, sliceType, ptrType, sliceType$2, funcType, funcType$1, funcType$2, ptrType$1, MakeWrapper, MakeFullWrapper, init; + Object = $pkg.Object = $newType(0, $kindStruct, "js.Object", true, "github.com/gopherjs/gopherjs/js", true, function(object_) { + this.$val = this; + if (arguments.length === 0) { + this.object = null; + return; + } + this.object = object_; + }); + Error = $pkg.Error = $newType(0, $kindStruct, "js.Error", true, "github.com/gopherjs/gopherjs/js", true, function(Object_) { + this.$val = this; + if (arguments.length === 0) { + this.Object = null; + return; + } + this.Object = Object_; + }); + M = $pkg.M = $newType(4, $kindMap, "js.M", true, "github.com/gopherjs/gopherjs/js", true, null); + sliceType = $sliceType($emptyInterface); + ptrType = $ptrType(Object); + sliceType$2 = $sliceType(ptrType); + funcType = $funcType([sliceType$2], [ptrType], true); + funcType$1 = $funcType([], [ptrType], false); + funcType$2 = $funcType([ptrType], [], false); + ptrType$1 = $ptrType(Error); + Object.ptr.prototype.Get = function(key) { + var key, o; + o = this; + return o.object[$externalize(key, $String)]; + }; + Object.prototype.Get = function(key) { return this.$val.Get(key); }; + Object.ptr.prototype.Set = function(key, value) { + var key, o, value; + o = this; + o.object[$externalize(key, $String)] = $externalize(value, $emptyInterface); + }; + Object.prototype.Set = function(key, value) { return this.$val.Set(key, value); }; + Object.ptr.prototype.Delete = function(key) { + var key, o; + o = this; + delete o.object[$externalize(key, $String)]; + }; + Object.prototype.Delete = function(key) { return this.$val.Delete(key); }; + Object.ptr.prototype.Length = function() { + var o; + o = this; + return $parseInt(o.object.length); + }; + Object.prototype.Length = function() { return this.$val.Length(); }; + Object.ptr.prototype.Index = function(i) { + var i, o; + o = this; + return o.object[i]; + }; + Object.prototype.Index = function(i) { return this.$val.Index(i); }; + Object.ptr.prototype.SetIndex = function(i, value) { + var i, o, value; + o = this; + o.object[i] = $externalize(value, $emptyInterface); + }; + Object.prototype.SetIndex = function(i, value) { return this.$val.SetIndex(i, value); }; + Object.ptr.prototype.Call = function(name, args) { + var args, name, o, obj; + o = this; + return (obj = o.object, obj[$externalize(name, $String)].apply(obj, $externalize(args, sliceType))); + }; + Object.prototype.Call = function(name, args) { return this.$val.Call(name, args); }; + Object.ptr.prototype.Invoke = function(args) { + var args, o; + o = this; + return o.object.apply(undefined, $externalize(args, sliceType)); + }; + Object.prototype.Invoke = function(args) { return this.$val.Invoke(args); }; + Object.ptr.prototype.New = function(args) { + var args, o; + o = this; + return new ($global.Function.prototype.bind.apply(o.object, [undefined].concat($externalize(args, sliceType)))); + }; + Object.prototype.New = function(args) { return this.$val.New(args); }; + Object.ptr.prototype.Bool = function() { + var o; + o = this; + return !!(o.object); + }; + Object.prototype.Bool = function() { return this.$val.Bool(); }; + Object.ptr.prototype.String = function() { + var o; + o = this; + return $internalize(o.object, $String); + }; + Object.prototype.String = function() { return this.$val.String(); }; + Object.ptr.prototype.Int = function() { + var o; + o = this; + return $parseInt(o.object) >> 0; + }; + Object.prototype.Int = function() { return this.$val.Int(); }; + Object.ptr.prototype.Int64 = function() { + var o; + o = this; + return $internalize(o.object, $Int64); + }; + Object.prototype.Int64 = function() { return this.$val.Int64(); }; + Object.ptr.prototype.Uint64 = function() { + var o; + o = this; + return $internalize(o.object, $Uint64); + }; + Object.prototype.Uint64 = function() { return this.$val.Uint64(); }; + Object.ptr.prototype.Float = function() { + var o; + o = this; + return $parseFloat(o.object); + }; + Object.prototype.Float = function() { return this.$val.Float(); }; + Object.ptr.prototype.Interface = function() { + var o; + o = this; + return $internalize(o.object, $emptyInterface); + }; + Object.prototype.Interface = function() { return this.$val.Interface(); }; + Object.ptr.prototype.Unsafe = function() { + var o; + o = this; + return o.object; + }; + Object.prototype.Unsafe = function() { return this.$val.Unsafe(); }; + Error.ptr.prototype.Error = function() { + var err; + err = this; + return "JavaScript error: " + $internalize(err.Object.message, $String); + }; + Error.prototype.Error = function() { return this.$val.Error(); }; + Error.ptr.prototype.Stack = function() { + var err; + err = this; + return $internalize(err.Object.stack, $String); + }; + Error.prototype.Stack = function() { return this.$val.Stack(); }; + MakeWrapper = function(i) { + var i, i$1, m, methods, o, v; + v = i; + o = new ($global.Object)(); + o.__internal_object__ = v; + methods = v.constructor.methods; + i$1 = 0; + while (true) { + if (!(i$1 < $parseInt(methods.length))) { break; } + m = [m]; + m[0] = methods[i$1]; + if (!($internalize(m[0].pkg, $String) === "")) { + i$1 = i$1 + (1) >> 0; + continue; + } + o[$externalize($internalize(m[0].name, $String), $String)] = $externalize((function(m) { return function(args) { + var args; + return $externalizeFunction(v[$externalize($internalize(m[0].prop, $String), $String)], m[0].typ, $externalize(true, $Bool)).apply(v, $externalize(args, sliceType$2)); + }; })(m), funcType); + i$1 = i$1 + (1) >> 0; + } + return o; + }; + $pkg.MakeWrapper = MakeWrapper; + MakeFullWrapper = function(i) { + var {constructor, defineProperty, e, f, fields, i, i$1, i$2, i$3, internalObj, m, methods, ms, pkg, pkgTyp, ptr, typ, wrapperObj, $s, $r, $c} = $restore(this, {i}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + internalObj = [internalObj]; + wrapperObj = [wrapperObj]; + internalObj[0] = i; + constructor = internalObj[0].constructor; + wrapperObj[0] = new ($global.Object)(); + defineProperty = (function(internalObj, wrapperObj) { return function(key, descriptor) { + var descriptor, key; + $global.Object.defineProperty(wrapperObj[0], $externalize(key, $String), $externalize(descriptor, M)); + }; })(internalObj, wrapperObj); + $r = defineProperty("__internal_object__", $makeMap($String.keyFor, [{ k: "value", v: new $jsObjectPtr(internalObj[0]) }])); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + typ = $internalize(constructor.string, $String); + pkg = $internalize(constructor.pkg, $String); + ptr = ""; + if (typ.charCodeAt(0) === 42) { + ptr = "*"; + } + i$1 = 0; + while (true) { + if (!(i$1 < typ.length)) { break; } + if (typ.charCodeAt(i$1) === 46) { + typ = $substring(typ, (i$1 + 1 >> 0)); + break; + } + i$1 = i$1 + (1) >> 0; + } + pkgTyp = pkg + "." + ptr + typ; + $r = defineProperty("$type", $makeMap($String.keyFor, [{ k: "value", v: new $String(pkgTyp) }])); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + fields = null; + methods = new ($global.Array)(); + ms = constructor.methods; + if (!(ms === undefined)) { + methods = methods.concat(ms); + } + e = constructor.elem; + if (!(e === undefined)) { + fields = e.fields; + methods = methods.concat(e.methods); + } else { + fields = constructor.fields; + } + i$2 = 0; + /* while (true) { */ case 3: + /* if (!(i$2 < $parseInt(methods.length))) { break; } */ if(!(i$2 < $parseInt(methods.length))) { $s = 4; continue; } + m = [m]; + m[0] = methods[i$2]; + if (!($internalize(m[0].pkg, $String) === "")) { + i$2 = i$2 + (1) >> 0; + /* continue; */ $s = 3; continue; + } + $r = defineProperty($internalize(m[0].prop, $String), $makeMap($String.keyFor, [{ k: "value", v: new funcType((function(internalObj, m, wrapperObj) { return function(args) { + var args; + return $externalizeFunction(internalObj[0][$externalize($internalize(m[0].prop, $String), $String)], m[0].typ, $externalize(true, $Bool), MakeFullWrapper).apply(internalObj[0], $externalize(args, sliceType$2)); + }; })(internalObj, m, wrapperObj)) }])); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + i$2 = i$2 + (1) >> 0; + $s = 3; continue; + case 4: + /* */ if (!(fields === undefined)) { $s = 6; continue; } + /* */ $s = 7; continue; + /* if (!(fields === undefined)) { */ case 6: + i$3 = 0; + /* while (true) { */ case 8: + /* if (!(i$3 < $parseInt(fields.length))) { break; } */ if(!(i$3 < $parseInt(fields.length))) { $s = 9; continue; } + f = [f]; + f[0] = fields[i$3]; + if (!!!(f[0].exported)) { + i$3 = i$3 + (1) >> 0; + /* continue; */ $s = 8; continue; + } + $r = defineProperty($internalize(f[0].prop, $String), $makeMap($String.keyFor, [{ k: "get", v: new funcType$1((function(f, internalObj, wrapperObj) { return function() { + var vc; + vc = $copyIfRequired(internalObj[0].$val[$externalize($internalize(f[0].prop, $String), $String)], f[0].typ); + return $externalize(vc, f[0].typ, MakeFullWrapper); + }; })(f, internalObj, wrapperObj)) }, { k: "set", v: new funcType$2((function(f, internalObj, wrapperObj) { return function(jv) { + var gv, jv; + gv = $internalize(jv, f[0].typ, MakeFullWrapper); + internalObj[0].$val[$externalize($internalize(f[0].prop, $String), $String)] = gv; + }; })(f, internalObj, wrapperObj)) }])); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + i$3 = i$3 + (1) >> 0; + $s = 8; continue; + case 9: + /* } */ case 7: + $s = -1; return wrapperObj[0]; + /* */ } return; } var $f = {$blk: MakeFullWrapper, $c: true, $r, constructor, defineProperty, e, f, fields, i, i$1, i$2, i$3, internalObj, m, methods, ms, pkg, pkgTyp, ptr, typ, wrapperObj, $s};return $f; + }; + $pkg.MakeFullWrapper = MakeFullWrapper; + init = function() { + var e; + e = new Error.ptr(null); + $unused(e); + }; + ptrType.methods = [{prop: "Get", name: "Get", pkg: "", typ: $funcType([$String], [ptrType], false)}, {prop: "Set", name: "Set", pkg: "", typ: $funcType([$String, $emptyInterface], [], false)}, {prop: "Delete", name: "Delete", pkg: "", typ: $funcType([$String], [], false)}, {prop: "Length", name: "Length", pkg: "", typ: $funcType([], [$Int], false)}, {prop: "Index", name: "Index", pkg: "", typ: $funcType([$Int], [ptrType], false)}, {prop: "SetIndex", name: "SetIndex", pkg: "", typ: $funcType([$Int, $emptyInterface], [], false)}, {prop: "Call", name: "Call", pkg: "", typ: $funcType([$String, sliceType], [ptrType], true)}, {prop: "Invoke", name: "Invoke", pkg: "", typ: $funcType([sliceType], [ptrType], true)}, {prop: "New", name: "New", pkg: "", typ: $funcType([sliceType], [ptrType], true)}, {prop: "Bool", name: "Bool", pkg: "", typ: $funcType([], [$Bool], false)}, {prop: "String", name: "String", pkg: "", typ: $funcType([], [$String], false)}, {prop: "Int", name: "Int", pkg: "", typ: $funcType([], [$Int], false)}, {prop: "Int64", name: "Int64", pkg: "", typ: $funcType([], [$Int64], false)}, {prop: "Uint64", name: "Uint64", pkg: "", typ: $funcType([], [$Uint64], false)}, {prop: "Float", name: "Float", pkg: "", typ: $funcType([], [$Float64], false)}, {prop: "Interface", name: "Interface", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "Unsafe", name: "Unsafe", pkg: "", typ: $funcType([], [$Uintptr], false)}]; + ptrType$1.methods = [{prop: "Error", name: "Error", pkg: "", typ: $funcType([], [$String], false)}, {prop: "Stack", name: "Stack", pkg: "", typ: $funcType([], [$String], false)}]; + Object.init("github.com/gopherjs/gopherjs/js", [{prop: "object", name: "object", embedded: false, exported: false, typ: ptrType, tag: ""}]); + Error.init("", [{prop: "Object", name: "Object", embedded: true, exported: true, typ: ptrType, tag: ""}]); + M.init($String, $emptyInterface); + $init = function() { + $pkg.$init = function() {}; + /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: + init(); + /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; + }; + $pkg.$init = $init; + return $pkg; +})(); +$packages["runtime"] = (function() { + var $pkg = {}, $init, js, _type, TypeAssertionError, errorString, ptrType$1, ptrType$2, buildVersion, init, throw$1; + js = $packages["github.com/gopherjs/gopherjs/js"]; + _type = $pkg._type = $newType(0, $kindStruct, "runtime._type", true, "runtime", false, function(str_) { + this.$val = this; + if (arguments.length === 0) { + this.str = ""; + return; + } + this.str = str_; + }); + TypeAssertionError = $pkg.TypeAssertionError = $newType(0, $kindStruct, "runtime.TypeAssertionError", true, "runtime", true, function(_interface_, concrete_, asserted_, missingMethod_) { + this.$val = this; + if (arguments.length === 0) { + this._interface = ptrType$1.nil; + this.concrete = ptrType$1.nil; + this.asserted = ptrType$1.nil; + this.missingMethod = ""; + return; + } + this._interface = _interface_; + this.concrete = concrete_; + this.asserted = asserted_; + this.missingMethod = missingMethod_; + }); + errorString = $pkg.errorString = $newType(8, $kindString, "runtime.errorString", true, "runtime", false, null); + ptrType$1 = $ptrType(_type); + ptrType$2 = $ptrType(TypeAssertionError); + _type.ptr.prototype.string = function() { + var t; + t = this; + return t.str; + }; + _type.prototype.string = function() { return this.$val.string(); }; + _type.ptr.prototype.pkgpath = function() { + var t; + t = this; + return ""; + }; + _type.prototype.pkgpath = function() { return this.$val.pkgpath(); }; + TypeAssertionError.ptr.prototype.RuntimeError = function() { + }; + TypeAssertionError.prototype.RuntimeError = function() { return this.$val.RuntimeError(); }; + TypeAssertionError.ptr.prototype.Error = function() { + var as, cs, e, inter, msg; + e = this; + inter = "interface"; + if (!(e._interface === ptrType$1.nil)) { + inter = e._interface.string(); + } + as = e.asserted.string(); + if (e.concrete === ptrType$1.nil) { + return "interface conversion: " + inter + " is nil, not " + as; + } + cs = e.concrete.string(); + if (e.missingMethod === "") { + msg = "interface conversion: " + inter + " is " + cs + ", not " + as; + if (cs === as) { + if (!(e.concrete.pkgpath() === e.asserted.pkgpath())) { + msg = msg + (" (types from different packages)"); + } else { + msg = msg + (" (types from different scopes)"); + } + } + return msg; + } + return "interface conversion: " + cs + " is not " + as + ": missing method " + e.missingMethod; + }; + TypeAssertionError.prototype.Error = function() { return this.$val.Error(); }; + init = function() { + var e, jsPkg; + jsPkg = $packages[$externalize("github.com/gopherjs/gopherjs/js", $String)]; + $jsObjectPtr = jsPkg.Object.ptr; + $jsErrorPtr = jsPkg.Error.ptr; + $throwRuntimeError = throw$1; + buildVersion = $internalize($goVersion, $String); + e = $ifaceNil; + e = new TypeAssertionError.ptr(ptrType$1.nil, ptrType$1.nil, ptrType$1.nil, ""); + $unused(e); + }; + errorString.prototype.RuntimeError = function() { + var e; + e = this.$val; + }; + $ptrType(errorString).prototype.RuntimeError = function() { return new errorString(this.$get()).RuntimeError(); }; + errorString.prototype.Error = function() { + var e; + e = this.$val; + return "runtime error: " + (e); + }; + $ptrType(errorString).prototype.Error = function() { return new errorString(this.$get()).Error(); }; + throw$1 = function(s) { + var s; + $panic(new errorString((s))); + }; + ptrType$1.methods = [{prop: "string", name: "string", pkg: "runtime", typ: $funcType([], [$String], false)}, {prop: "pkgpath", name: "pkgpath", pkg: "runtime", typ: $funcType([], [$String], false)}]; + ptrType$2.methods = [{prop: "RuntimeError", name: "RuntimeError", pkg: "", typ: $funcType([], [], false)}, {prop: "Error", name: "Error", pkg: "", typ: $funcType([], [$String], false)}]; + errorString.methods = [{prop: "RuntimeError", name: "RuntimeError", pkg: "", typ: $funcType([], [], false)}, {prop: "Error", name: "Error", pkg: "", typ: $funcType([], [$String], false)}]; + _type.init("runtime", [{prop: "str", name: "str", embedded: false, exported: false, typ: $String, tag: ""}]); + TypeAssertionError.init("runtime", [{prop: "_interface", name: "_interface", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "concrete", name: "concrete", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "asserted", name: "asserted", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "missingMethod", name: "missingMethod", embedded: false, exported: false, typ: $String, tag: ""}]); + $init = function() { + $pkg.$init = function() {}; + /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: + $r = js.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + buildVersion = ""; + init(); + /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; + }; + $pkg.$init = $init; + return $pkg; +})(); +$packages["math/bits"] = (function() { + var $pkg = {}, $init; + $init = function() { + $pkg.$init = function() {}; + /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: + /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; + }; + $pkg.$init = $init; + return $pkg; +})(); +$packages["math"] = (function() { + var $pkg = {}, $init, js, bits, arrayType, arrayType$1, arrayType$2, structType, math, _zero, posInf, negInf, nan, buf, Round, max, min, Abs, Cos, Floor, Inf, IsInf, IsNaN, Max, Min, NaN, Pow, Signbit, Sin, Sqrt, init, Float64bits, Float64frombits; + js = $packages["github.com/gopherjs/gopherjs/js"]; + bits = $packages["math/bits"]; + arrayType = $arrayType($Uint32, 2); + arrayType$1 = $arrayType($Float32, 2); + arrayType$2 = $arrayType($Float64, 1); + structType = $structType("math", [{prop: "uint32array", name: "uint32array", embedded: false, exported: false, typ: arrayType, tag: ""}, {prop: "float32array", name: "float32array", embedded: false, exported: false, typ: arrayType$1, tag: ""}, {prop: "float64array", name: "float64array", embedded: false, exported: false, typ: arrayType$2, tag: ""}]); + Round = function(x) { + var bits$1, e, x, x$1, x$2, x$3, x$4; + bits$1 = Float64bits(x); + e = ((($shiftRightUint64(bits$1, 52).$low >>> 0)) & 2047) >>> 0; + if (e < 1023) { + bits$1 = (x$1 = new $Uint64(2147483648, 0), new $Uint64(bits$1.$high & x$1.$high, (bits$1.$low & x$1.$low) >>> 0)); + if (e === 1022) { + bits$1 = (x$2 = new $Uint64(1072693248, 0), new $Uint64(bits$1.$high | x$2.$high, (bits$1.$low | x$2.$low) >>> 0)); + } + } else if (e < 1075) { + e = e - (1023) >>> 0; + bits$1 = (x$3 = $shiftRightUint64(new $Uint64(524288, 0), e), new $Uint64(bits$1.$high + x$3.$high, bits$1.$low + x$3.$low)); + bits$1 = (x$4 = $shiftRightUint64(new $Uint64(1048575, 4294967295), e), new $Uint64(bits$1.$high & ~x$4.$high, (bits$1.$low & ~x$4.$low) >>> 0)); + } + return Float64frombits(bits$1); + }; + $pkg.Round = Round; + max = function(x, y) { + var x, y; + if (IsInf(x, 1) || IsInf(y, 1)) { + return Inf(1); + } else if (IsNaN(x) || IsNaN(y)) { + return NaN(); + } else if ((x === 0) && (x === y)) { + if (Signbit(x)) { + return y; + } + return x; + } + if (x > y) { + return x; + } + return y; + }; + min = function(x, y) { + var x, y; + if (IsInf(x, -1) || IsInf(y, -1)) { + return Inf(-1); + } else if (IsNaN(x) || IsNaN(y)) { + return NaN(); + } else if ((x === 0) && (x === y)) { + if (Signbit(x)) { + return x; + } + return y; + } + if (x < y) { + return x; + } + return y; + }; + Abs = function(x) { + var x, x$1; + return Float64frombits((x$1 = Float64bits(x), new $Uint64(x$1.$high & ~2147483648, (x$1.$low & ~0) >>> 0))); + }; + $pkg.Abs = Abs; + Cos = function(x) { + var x; + return $parseFloat(math.cos(x)); + }; + $pkg.Cos = Cos; + Floor = function(x) { + var x; + return $parseFloat(math.floor(x)); + }; + $pkg.Floor = Floor; + Inf = function(sign) { + var sign; + if (sign >= 0) { + return posInf; + } else { + return negInf; + } + }; + $pkg.Inf = Inf; + IsInf = function(f, sign) { + var f, sign; + if (f === posInf) { + return sign >= 0; + } + if (f === negInf) { + return sign <= 0; + } + return false; + }; + $pkg.IsInf = IsInf; + IsNaN = function(f) { + var f, is; + is = false; + is = !((f === f)); + return is; + }; + $pkg.IsNaN = IsNaN; + Max = function(x, y) { + var x, y; + return max(x, y); + }; + $pkg.Max = Max; + Min = function(x, y) { + var x, y; + return min(x, y); + }; + $pkg.Min = Min; + NaN = function() { + return nan; + }; + $pkg.NaN = NaN; + Pow = function(x, y) { + var x, y; + if ((x === 1) || ((x === -1) && ((y === posInf) || (y === negInf)))) { + return 1; + } + return $parseFloat(math.pow(x, y)); + }; + $pkg.Pow = Pow; + Signbit = function(x) { + var x; + return x < 0 || (1 / x === negInf); + }; + $pkg.Signbit = Signbit; + Sin = function(x) { + var x; + return $parseFloat(math.sin(x)); + }; + $pkg.Sin = Sin; + Sqrt = function(x) { + var x; + return $parseFloat(math.sqrt(x)); + }; + $pkg.Sqrt = Sqrt; + init = function() { + var ab; + ab = new ($global.ArrayBuffer)(8); + buf.uint32array = new ($global.Uint32Array)(ab); + buf.float32array = new ($global.Float32Array)(ab); + buf.float64array = new ($global.Float64Array)(ab); + }; + Float64bits = function(f) { + var f, x, x$1; + buf.float64array[0] = f; + return (x = $shiftLeft64((new $Uint64(0, buf.uint32array[1])), 32), x$1 = (new $Uint64(0, buf.uint32array[0])), new $Uint64(x.$high + x$1.$high, x.$low + x$1.$low)); + }; + $pkg.Float64bits = Float64bits; + Float64frombits = function(b) { + var b; + buf.uint32array[0] = ((b.$low >>> 0)); + buf.uint32array[1] = (($shiftRightUint64(b, 32).$low >>> 0)); + return buf.float64array[0]; + }; + $pkg.Float64frombits = Float64frombits; + $init = function() { + $pkg.$init = function() {}; + /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: + $r = js.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + $r = bits.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + buf = new structType.ptr(arrayType.zero(), arrayType$1.zero(), arrayType$2.zero()); + math = $global.Math; + _zero = 0; + posInf = 1 / _zero; + negInf = -1 / _zero; + nan = $parseFloat($NaN); + init(); + /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; + }; + $pkg.$init = $init; + return $pkg; +})(); +$packages["resolv"] = (function() { + var $pkg = {}, $init, math, Vector, Axis, Space, Shape, Line, ConvexPolygon, ContactSet, Circle, Projection, Object, Collision, Cell, sliceType, ptrType, sliceType$1, sliceType$2, ptrType$1, ptrType$2, sliceType$3, sliceType$4, ptrType$3, sliceType$5, ptrType$4, ptrType$5, ptrType$6, sliceType$6, ptrType$7, sliceType$7, mapType, Dot, NewSpace, NewLine, NewConvexPolygon, NewContactSet, NewRectangle, NewCircle, NewObject, axpyUnitaryTo, scalUnitaryTo, NewCollision, newCell; + math = $packages["math"]; + Vector = $pkg.Vector = $newType(12, $kindSlice, "resolv.Vector", true, "resolv", true, null); + Axis = $pkg.Axis = $newType(4, $kindInt, "resolv.Axis", true, "resolv", true, null); + Space = $pkg.Space = $newType(0, $kindStruct, "resolv.Space", true, "resolv", true, function(Cells_, CellWidth_, CellHeight_) { + this.$val = this; + if (arguments.length === 0) { + this.Cells = sliceType$2.nil; + this.CellWidth = 0; + this.CellHeight = 0; + return; + } + this.Cells = Cells_; + this.CellWidth = CellWidth_; + this.CellHeight = CellHeight_; + }); + Shape = $pkg.Shape = $newType(8, $kindInterface, "resolv.Shape", true, "resolv", true, null); + Line = $pkg.Line = $newType(0, $kindStruct, "resolv.Line", true, "resolv", true, function(Start_, End_) { + this.$val = this; + if (arguments.length === 0) { + this.Start = Vector.nil; + this.End = Vector.nil; + return; + } + this.Start = Start_; + this.End = End_; + }); + ConvexPolygon = $pkg.ConvexPolygon = $newType(0, $kindStruct, "resolv.ConvexPolygon", true, "resolv", true, function(Points_, X_, Y_, Closed_) { + this.$val = this; + if (arguments.length === 0) { + this.Points = sliceType$4.nil; + this.X = 0; + this.Y = 0; + this.Closed = false; + return; + } + this.Points = Points_; + this.X = X_; + this.Y = Y_; + this.Closed = Closed_; + }); + ContactSet = $pkg.ContactSet = $newType(0, $kindStruct, "resolv.ContactSet", true, "resolv", true, function(Points_, MTV_, Center_) { + this.$val = this; + if (arguments.length === 0) { + this.Points = sliceType$4.nil; + this.MTV = Vector.nil; + this.Center = Vector.nil; + return; + } + this.Points = Points_; + this.MTV = MTV_; + this.Center = Center_; + }); + Circle = $pkg.Circle = $newType(0, $kindStruct, "resolv.Circle", true, "resolv", true, function(X_, Y_, Radius_) { + this.$val = this; + if (arguments.length === 0) { + this.X = 0; + this.Y = 0; + this.Radius = 0; + return; + } + this.X = X_; + this.Y = Y_; + this.Radius = Radius_; + }); + Projection = $pkg.Projection = $newType(0, $kindStruct, "resolv.Projection", true, "resolv", true, function(Min_, Max_) { + this.$val = this; + if (arguments.length === 0) { + this.Min = 0; + this.Max = 0; + return; + } + this.Min = Min_; + this.Max = Max_; + }); + Object = $pkg.Object = $newType(0, $kindStruct, "resolv.Object", true, "resolv", true, function(Shape_, Space_, X_, Y_, W_, H_, TouchingCells_, Data_, ignoreList_, tags_) { + this.$val = this; + if (arguments.length === 0) { + this.Shape = $ifaceNil; + this.Space = ptrType$1.nil; + this.X = 0; + this.Y = 0; + this.W = 0; + this.H = 0; + this.TouchingCells = sliceType$1.nil; + this.Data = $ifaceNil; + this.ignoreList = false; + this.tags = sliceType$6.nil; + return; + } + this.Shape = Shape_; + this.Space = Space_; + this.X = X_; + this.Y = Y_; + this.W = W_; + this.H = H_; + this.TouchingCells = TouchingCells_; + this.Data = Data_; + this.ignoreList = ignoreList_; + this.tags = tags_; + }); + Collision = $pkg.Collision = $newType(0, $kindStruct, "resolv.Collision", true, "resolv", true, function(checkingObject_, dx_, dy_, Objects_, Cells_) { + this.$val = this; + if (arguments.length === 0) { + this.checkingObject = ptrType$2.nil; + this.dx = 0; + this.dy = 0; + this.Objects = sliceType$3.nil; + this.Cells = sliceType$1.nil; + return; + } + this.checkingObject = checkingObject_; + this.dx = dx_; + this.dy = dy_; + this.Objects = Objects_; + this.Cells = Cells_; + }); + Cell = $pkg.Cell = $newType(0, $kindStruct, "resolv.Cell", true, "resolv", true, function(X_, Y_, Objects_) { + this.$val = this; + if (arguments.length === 0) { + this.X = 0; + this.Y = 0; + this.Objects = sliceType$3.nil; + return; + } + this.X = X_; + this.Y = Y_; + this.Objects = Objects_; + }); + sliceType = $sliceType($Float64); + ptrType = $ptrType(Cell); + sliceType$1 = $sliceType(ptrType); + sliceType$2 = $sliceType(sliceType$1); + ptrType$1 = $ptrType(Space); + ptrType$2 = $ptrType(Object); + sliceType$3 = $sliceType(ptrType$2); + sliceType$4 = $sliceType(Vector); + ptrType$3 = $ptrType(Line); + sliceType$5 = $sliceType(ptrType$3); + ptrType$4 = $ptrType(Circle); + ptrType$5 = $ptrType(ConvexPolygon); + ptrType$6 = $ptrType(ContactSet); + sliceType$6 = $sliceType($String); + ptrType$7 = $ptrType(Collision); + sliceType$7 = $sliceType(Axis); + mapType = $mapType(ptrType$2, $Bool); + Vector.prototype.Clone = function() { + var clone, v; + v = this; + clone = $makeSlice(Vector, v.$length); + $copySlice(clone, v); + return clone; + }; + $ptrType(Vector).prototype.Clone = function() { return this.$get().Clone(); }; + Vector.prototype.Add = function(vs) { + var _i, _ref, dim, i, v, vs; + v = this; + dim = v.$length; + _ref = vs; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + if (((i < 0 || i >= vs.$length) ? ($throwRuntimeError("index out of range"), undefined) : vs.$array[vs.$offset + i]).$length > dim) { + axpyUnitaryTo($convertSliceType(v, sliceType), 1, $convertSliceType(v, sliceType), $convertSliceType($subslice(((i < 0 || i >= vs.$length) ? ($throwRuntimeError("index out of range"), undefined) : vs.$array[vs.$offset + i]), 0, dim), sliceType)); + } else { + axpyUnitaryTo($convertSliceType(v, sliceType), 1, $convertSliceType(v, sliceType), $convertSliceType(((i < 0 || i >= vs.$length) ? ($throwRuntimeError("index out of range"), undefined) : vs.$array[vs.$offset + i]), sliceType)); + } + _i++; + } + return v; + }; + $ptrType(Vector).prototype.Add = function(vs) { return this.$get().Add(vs); }; + Vector.prototype.Sub = function(vs) { + var _i, _ref, dim, i, v, vs; + v = this; + dim = v.$length; + _ref = vs; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + if (((i < 0 || i >= vs.$length) ? ($throwRuntimeError("index out of range"), undefined) : vs.$array[vs.$offset + i]).$length > dim) { + axpyUnitaryTo($convertSliceType(v, sliceType), -1, $convertSliceType($subslice(((i < 0 || i >= vs.$length) ? ($throwRuntimeError("index out of range"), undefined) : vs.$array[vs.$offset + i]), 0, dim), sliceType), $convertSliceType(v, sliceType)); + } else { + axpyUnitaryTo($convertSliceType(v, sliceType), -1, $convertSliceType(((i < 0 || i >= vs.$length) ? ($throwRuntimeError("index out of range"), undefined) : vs.$array[vs.$offset + i]), sliceType), $convertSliceType(v, sliceType)); + } + _i++; + } + return v; + }; + $ptrType(Vector).prototype.Sub = function(vs) { return this.$get().Sub(vs); }; + Vector.prototype.Scale = function(size) { + var size, v; + v = this; + scalUnitaryTo($convertSliceType(v, sliceType), size, $convertSliceType(v, sliceType)); + return v; + }; + $ptrType(Vector).prototype.Scale = function(size) { return this.$get().Scale(size); }; + Vector.prototype.Equal = function(v2) { + var _i, _ref, i, v, v2; + v = this; + if (!((v.$length === v2.$length))) { + return false; + } + _ref = v; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + if (math.Abs(((i < 0 || i >= v.$length) ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + i]) - ((i < 0 || i >= v2.$length) ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + i])) > 1e-08) { + return false; + } + _i++; + } + return true; + }; + $ptrType(Vector).prototype.Equal = function(v2) { return this.$get().Equal(v2); }; + Vector.prototype.Magnitude = function() { + var v; + v = this; + return math.Sqrt(v.Magnitude2()); + }; + $ptrType(Vector).prototype.Magnitude = function() { return this.$get().Magnitude(); }; + Vector.prototype.Magnitude2 = function() { + var _i, _ref, result, scalar, v; + v = this; + result = 0; + _ref = v; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + scalar = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + result = result + (scalar * scalar); + _i++; + } + return result; + }; + $ptrType(Vector).prototype.Magnitude2 = function() { return this.$get().Magnitude2(); }; + Vector.prototype.Unit = function() { + var _i, _ref, i, l, v; + v = this; + l = v.Magnitude(); + if (l < 1e-08) { + return v; + } + _ref = v; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + ((i < 0 || i >= v.$length) ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + i] = ((i < 0 || i >= v.$length) ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + i]) / l); + _i++; + } + return v; + }; + $ptrType(Vector).prototype.Unit = function() { return this.$get().Unit(); }; + Dot = function(v1, v2) { + var _i, _ref, _tmp, _tmp$1, _tmp$2, dim1, dim2, i, result, v1, v2; + _tmp = 0; + _tmp$1 = v1.$length; + _tmp$2 = v2.$length; + result = _tmp; + dim1 = _tmp$1; + dim2 = _tmp$2; + if (dim1 > dim2) { + v2 = $appendSlice(v2, $convertSliceType($makeSlice(Vector, (dim1 - dim2 >> 0)), sliceType)); + } + if (dim1 < dim2) { + v1 = $appendSlice(v1, $convertSliceType($makeSlice(Vector, (dim2 - dim1 >> 0)), sliceType)); + } + _ref = v1; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + result = result + (((i < 0 || i >= v1.$length) ? ($throwRuntimeError("index out of range"), undefined) : v1.$array[v1.$offset + i]) * ((i < 0 || i >= v2.$length) ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + i])); + _i++; + } + return result; + }; + $pkg.Dot = Dot; + Vector.prototype.Dot = function(v2) { + var v, v2; + v = this; + return Dot(v, v2); + }; + $ptrType(Vector).prototype.Dot = function(v2) { return this.$get().Dot(v2); }; + Vector.prototype.Cross = function(v2) { + var v, v2; + v = this; + if (!((v.$length === 3)) || !((v2.$length === 3))) { + return Vector.nil; + } + return new Vector([(1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1]) * (2 >= v2.$length ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + 2]) - (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2]) * (1 >= v2.$length ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + 1]), (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2]) * (0 >= v2.$length ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + 0]) - (0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0]) * (2 >= v2.$length ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + 2]), (0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0]) * (2 >= v2.$length ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + 2]) - (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2]) * (0 >= v2.$length ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + 0])]); + }; + $ptrType(Vector).prototype.Cross = function(v2) { return this.$get().Cross(v2); }; + Vector.prototype.Rotate = function(angle, as) { + var _1, _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, angle, as, axis, cos, dim, sin, v, x, y, z, z$1; + v = this; + _tmp = 2; + _tmp$1 = v.$length; + axis = _tmp; + dim = _tmp$1; + if (dim === 0) { + return v; + } + if (as.$length > 0) { + axis = (0 >= as.$length ? ($throwRuntimeError("index out of range"), undefined) : as.$array[as.$offset + 0]); + } + if ((dim === 1) && !((axis === 2))) { + v = $append(v, 0, 0); + } + if ((dim < 2 && (axis === 2)) || ((dim === 2) && !((axis === 2)))) { + v = $append(v, 0); + } + _tmp$2 = (0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0]); + _tmp$3 = (1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1]); + x = _tmp$2; + y = _tmp$3; + _tmp$4 = math.Cos(angle); + _tmp$5 = math.Sin(angle); + cos = _tmp$4; + sin = _tmp$5; + _1 = axis; + if (_1 === (0)) { + z = (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2]); + (1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1] = y * cos - z * sin); + (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2] = y * sin + z * cos); + } else if (_1 === (1)) { + z$1 = (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2]); + (0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0] = x * cos + z$1 * sin); + (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2] = -x * sin + z$1 * cos); + } else if (_1 === (2)) { + (0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0] = x * cos - y * sin); + (1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1] = x * sin + y * cos); + } + if (dim > 3) { + return $subslice(v, 0, 3); + } + return v; + }; + $ptrType(Vector).prototype.Rotate = function(angle, as) { return this.$get().Rotate(angle, as); }; + Vector.prototype.X = function() { + var v; + v = this; + if (v.$length < 1) { + return 0; + } + return (0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0]); + }; + $ptrType(Vector).prototype.X = function() { return this.$get().X(); }; + Vector.prototype.Y = function() { + var v; + v = this; + if (v.$length < 2) { + return 0; + } + return (1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1]); + }; + $ptrType(Vector).prototype.Y = function() { return this.$get().Y(); }; + Vector.prototype.Z = function() { + var v; + v = this; + if (v.$length < 3) { + return 0; + } + return (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2]); + }; + $ptrType(Vector).prototype.Z = function() { return this.$get().Z(); }; + NewSpace = function(spaceWidth, spaceHeight, cellWidth, cellHeight) { + var _q, _q$1, cellHeight, cellWidth, sp, spaceHeight, spaceWidth; + sp = new Space.ptr(sliceType$2.nil, cellWidth, cellHeight); + sp.Resize((_q = spaceWidth / cellWidth, (_q === _q && _q !== 1/0 && _q !== -1/0) ? _q >> 0 : $throwRuntimeError("integer divide by zero")), (_q$1 = spaceHeight / cellHeight, (_q$1 === _q$1 && _q$1 !== 1/0 && _q$1 !== -1/0) ? _q$1 >> 0 : $throwRuntimeError("integer divide by zero"))); + return sp; + }; + $pkg.NewSpace = NewSpace; + Space.ptr.prototype.Add = function(objects) { + var {_i, _ref, obj, objects, sp, $s, $r, $c} = $restore(this, {objects}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + sp = this; + if (sp === ptrType$1.nil) { + $panic(new $String("ERROR: space is nil")); + } + _ref = objects; + _i = 0; + /* while (true) { */ case 1: + /* if (!(_i < _ref.$length)) { break; } */ if(!(_i < _ref.$length)) { $s = 2; continue; } + obj = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + obj.Space = sp; + $r = obj.Update(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + _i++; + $s = 1; continue; + case 2: + $s = -1; return; + /* */ } return; } var $f = {$blk: Space.ptr.prototype.Add, $c: true, $r, _i, _ref, obj, objects, sp, $s};return $f; + }; + Space.prototype.Add = function(objects) { return this.$val.Add(objects); }; + Space.ptr.prototype.Remove = function(objects) { + var _i, _i$1, _ref, _ref$1, cell, obj, objects, sp; + sp = this; + if (sp === ptrType$1.nil) { + $panic(new $String("ERROR: space is nil")); + } + _ref = objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + obj = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + _ref$1 = obj.TouchingCells; + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + cell = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + cell.unregister(obj); + _i$1++; + } + obj.TouchingCells = new sliceType$1([]); + obj.Space = ptrType$1.nil; + _i++; + } + }; + Space.prototype.Remove = function(objects) { return this.$val.Remove(objects); }; + Space.ptr.prototype.Objects = function() { + var _entry, _i, _i$1, _i$2, _key, _ref, _ref$1, _ref$2, _tuple, added, cx, cy, o, objects, objectsAdded, sp, x, x$1, x$2; + sp = this; + objectsAdded = $makeMap(ptrType$2.keyFor, []); + objects = new sliceType$3([]); + _ref = sp.Cells; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + cy = _i; + _ref$1 = (x = sp.Cells, ((cy < 0 || cy >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + cy])); + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + cx = _i$1; + _ref$2 = (x$1 = (x$2 = sp.Cells, ((cy < 0 || cy >= x$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + cy])), ((cx < 0 || cx >= x$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + cx])).Objects; + _i$2 = 0; + while (true) { + if (!(_i$2 < _ref$2.$length)) { break; } + o = ((_i$2 < 0 || _i$2 >= _ref$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$2.$array[_ref$2.$offset + _i$2]); + _tuple = (_entry = objectsAdded[ptrType$2.keyFor(o)], _entry !== undefined ? [_entry.v, true] : [false, false]); + added = _tuple[1]; + if (!added) { + objects = $append(objects, o); + _key = o; (objectsAdded || $throwRuntimeError("assignment to entry in nil map"))[ptrType$2.keyFor(_key)] = { k: _key, v: true }; + } + _i$2++; + } + _i$1++; + } + _i++; + } + return objects; + }; + Space.prototype.Objects = function() { return this.$val.Objects(); }; + Space.ptr.prototype.Resize = function(width, height) { + var height, sp, width, x, x$1, x$2, y; + sp = this; + sp.Cells = new sliceType$2([]); + y = 0; + while (true) { + if (!(y < height)) { break; } + sp.Cells = $append(sp.Cells, new sliceType$1([])); + x = 0; + while (true) { + if (!(x < width)) { break; } + (x$2 = sp.Cells, ((y < 0 || y >= x$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + y] = $append((x$1 = sp.Cells, ((y < 0 || y >= x$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + y])), newCell(x, y)))); + x = x + (1) >> 0; + } + y = y + (1) >> 0; + } + }; + Space.prototype.Resize = function(width, height) { return this.$val.Resize(width, height); }; + Space.ptr.prototype.Cell = function(x, y) { + var sp, x, x$1, x$2, x$3, y; + sp = this; + if (y >= 0 && y < sp.Cells.$length && x >= 0 && x < (x$1 = sp.Cells, ((y < 0 || y >= x$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + y])).$length) { + return (x$2 = (x$3 = sp.Cells, ((y < 0 || y >= x$3.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + y])), ((x < 0 || x >= x$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + x])); + } + return ptrType.nil; + }; + Space.prototype.Cell = function(x, y) { return this.$val.Cell(x, y); }; + Space.ptr.prototype.CheckCells = function(x, y, w, h, tags) { + var _i, _ref, cell, h, ix, iy, obj, sp, tags, w, x, x$1, y; + sp = this; + ix = x; + while (true) { + if (!(ix < (x + w >> 0))) { break; } + iy = y; + while (true) { + if (!(iy < (y + h >> 0))) { break; } + cell = sp.Cell(ix, iy); + if (!(cell === ptrType.nil)) { + if (tags.$length > 0) { + if (cell.ContainsTags(tags)) { + _ref = cell.Objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + obj = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (obj.HasTags(tags)) { + return obj; + } + _i++; + } + } + } else if (cell.Occupied()) { + return (x$1 = cell.Objects, (0 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 0])); + } + } + iy = iy + (1) >> 0; + } + ix = ix + (1) >> 0; + } + return ptrType$2.nil; + }; + Space.prototype.CheckCells = function(x, y, w, h, tags) { return this.$val.CheckCells(x, y, w, h, tags); }; + Space.ptr.prototype.CheckCellsWorld = function(x, y, w, h, tags) { + var _tuple, _tuple$1, ch, cw, h, sp, sx, sy, tags, w, x, y; + sp = this; + _tuple = sp.WorldToSpace(x, y); + sx = _tuple[0]; + sy = _tuple[1]; + _tuple$1 = sp.WorldToSpace(w, h); + cw = _tuple$1[0]; + ch = _tuple$1[1]; + return sp.CheckCells(sx, sy, cw, ch, tags); + }; + Space.prototype.CheckCellsWorld = function(x, y, w, h, tags) { return this.$val.CheckCellsWorld(x, y, w, h, tags); }; + Space.ptr.prototype.UnregisterAllObjects = function() { + var cell, sp, x, x$1, x$2, x$3, y; + sp = this; + y = 0; + while (true) { + if (!(y < sp.Cells.$length)) { break; } + x = 0; + while (true) { + if (!(x < (x$1 = sp.Cells, ((y < 0 || y >= x$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + y])).$length)) { break; } + cell = (x$2 = (x$3 = sp.Cells, ((y < 0 || y >= x$3.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + y])), ((x < 0 || x >= x$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + x])); + sp.Remove(cell.Objects); + x = x + (1) >> 0; + } + y = y + (1) >> 0; + } + }; + Space.prototype.UnregisterAllObjects = function() { return this.$val.UnregisterAllObjects(); }; + Space.ptr.prototype.WorldToSpace = function(x, y) { + var fx, fy, sp, x, y; + sp = this; + fx = ((math.Floor(x / (sp.CellWidth)) >> 0)); + fy = ((math.Floor(y / (sp.CellHeight)) >> 0)); + return [fx, fy]; + }; + Space.prototype.WorldToSpace = function(x, y) { return this.$val.WorldToSpace(x, y); }; + Space.ptr.prototype.SpaceToWorld = function(x, y) { + var fx, fy, sp, x, y; + sp = this; + fx = (($imul(x, sp.CellWidth))); + fy = (($imul(y, sp.CellHeight))); + return [fx, fy]; + }; + Space.prototype.SpaceToWorld = function(x, y) { return this.$val.SpaceToWorld(x, y); }; + Space.ptr.prototype.Height = function() { + var sp; + sp = this; + return sp.Cells.$length; + }; + Space.prototype.Height = function() { return this.$val.Height(); }; + Space.ptr.prototype.Width = function() { + var sp, x; + sp = this; + if (sp.Cells.$length > 0) { + return (x = sp.Cells, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])).$length; + } + return 0; + }; + Space.prototype.Width = function() { return this.$val.Width(); }; + Space.ptr.prototype.CellsInLine = function(startX, startY, endX, endY) { + var _q, _q$1, _q$2, _q$3, _tuple, _tuple$1, alternate, c, cell, cells, cx, cy, dv, endCell, endX, endY, p, pX, pY, sp, startX, startY; + sp = this; + cells = new sliceType$1([]); + cell = sp.Cell(startX, startY); + endCell = sp.Cell(endX, endY); + if (!(cell === ptrType.nil) && !(endCell === ptrType.nil)) { + dv = new Vector([((endX - startX >> 0)), ((endY - startY >> 0))]).Unit(); + (0 >= dv.$length ? ($throwRuntimeError("index out of range"), undefined) : dv.$array[dv.$offset + 0] = (0 >= dv.$length ? ($throwRuntimeError("index out of range"), undefined) : dv.$array[dv.$offset + 0]) * (((_q = sp.CellWidth / 2, (_q === _q && _q !== 1/0 && _q !== -1/0) ? _q >> 0 : $throwRuntimeError("integer divide by zero"))))); + (1 >= dv.$length ? ($throwRuntimeError("index out of range"), undefined) : dv.$array[dv.$offset + 1] = (1 >= dv.$length ? ($throwRuntimeError("index out of range"), undefined) : dv.$array[dv.$offset + 1]) * (((_q$1 = sp.CellHeight / 2, (_q$1 === _q$1 && _q$1 !== 1/0 && _q$1 !== -1/0) ? _q$1 >> 0 : $throwRuntimeError("integer divide by zero"))))); + _tuple = sp.SpaceToWorld(startX, startY); + pX = _tuple[0]; + pY = _tuple[1]; + p = new Vector([pX + ((_q$2 = sp.CellWidth / 2, (_q$2 === _q$2 && _q$2 !== 1/0 && _q$2 !== -1/0) ? _q$2 >> 0 : $throwRuntimeError("integer divide by zero"))), pY + ((_q$3 = sp.CellHeight / 2, (_q$3 === _q$3 && _q$3 !== 1/0 && _q$3 !== -1/0) ? _q$3 >> 0 : $throwRuntimeError("integer divide by zero")))]); + alternate = false; + while (true) { + if (!(!(cell === ptrType.nil))) { break; } + if (cell === endCell) { + cells = $append(cells, cell); + break; + } + cells = $append(cells, cell); + if (alternate) { + (1 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 1] = (1 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 1]) + ((1 >= dv.$length ? ($throwRuntimeError("index out of range"), undefined) : dv.$array[dv.$offset + 1]))); + } else { + (0 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 0] = (0 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 0]) + ((0 >= dv.$length ? ($throwRuntimeError("index out of range"), undefined) : dv.$array[dv.$offset + 0]))); + } + _tuple$1 = sp.WorldToSpace((0 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 0]), (1 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 1])); + cx = _tuple$1[0]; + cy = _tuple$1[1]; + c = sp.Cell(cx, cy); + if (!(c === cell)) { + cell = c; + } + alternate = !alternate; + } + } + return cells; + }; + Space.prototype.CellsInLine = function(startX, startY, endX, endY) { return this.$val.CellsInLine(startX, startY, endX, endY); }; + NewLine = function(x, y, x2, y2) { + var x, x2, y, y2; + return new Line.ptr(new Vector([x, y]), new Vector([x2, y2])); + }; + $pkg.NewLine = NewLine; + Line.ptr.prototype.Project = function(axis) { + var axis, line; + line = this; + return line.Vector().Scale(axis.Dot(line.Start.Sub(new sliceType$4([line.End])))); + }; + Line.prototype.Project = function(axis) { return this.$val.Project(axis); }; + Line.ptr.prototype.Normal = function() { + var line, v; + line = this; + v = line.Vector(); + return new Vector([(1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1]), -(0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0])]).Unit(); + }; + Line.prototype.Normal = function() { return this.$val.Normal(); }; + Line.ptr.prototype.Vector = function() { + var line; + line = this; + return line.End.Clone().Sub(new sliceType$4([line.Start])).Unit(); + }; + Line.prototype.Vector = function() { return this.$val.Vector(); }; + Line.ptr.prototype.IntersectionPointsLine = function(other) { + var det, dx, dy, gamma, lambda, line, other, x, x$1, x$10, x$11, x$12, x$13, x$14, x$15, x$16, x$17, x$18, x$19, x$2, x$20, x$21, x$22, x$23, x$24, x$25, x$26, x$27, x$28, x$29, x$3, x$4, x$5, x$6, x$7, x$8, x$9; + line = this; + det = ((x = line.End, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])) - (x$1 = line.Start, (0 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 0]))) * ((x$2 = other.End, (1 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 1])) - (x$3 = other.Start, (1 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 1]))) - ((x$4 = other.End, (0 >= x$4.$length ? ($throwRuntimeError("index out of range"), undefined) : x$4.$array[x$4.$offset + 0])) - (x$5 = other.Start, (0 >= x$5.$length ? ($throwRuntimeError("index out of range"), undefined) : x$5.$array[x$5.$offset + 0]))) * ((x$6 = line.End, (1 >= x$6.$length ? ($throwRuntimeError("index out of range"), undefined) : x$6.$array[x$6.$offset + 1])) - (x$7 = line.Start, (1 >= x$7.$length ? ($throwRuntimeError("index out of range"), undefined) : x$7.$array[x$7.$offset + 1]))); + if (!((det === 0))) { + lambda = ((((x$8 = line.Start, (1 >= x$8.$length ? ($throwRuntimeError("index out of range"), undefined) : x$8.$array[x$8.$offset + 1])) - (x$9 = other.Start, (1 >= x$9.$length ? ($throwRuntimeError("index out of range"), undefined) : x$9.$array[x$9.$offset + 1]))) * ((x$10 = other.End, (0 >= x$10.$length ? ($throwRuntimeError("index out of range"), undefined) : x$10.$array[x$10.$offset + 0])) - (x$11 = other.Start, (0 >= x$11.$length ? ($throwRuntimeError("index out of range"), undefined) : x$11.$array[x$11.$offset + 0])))) - (((x$12 = line.Start, (0 >= x$12.$length ? ($throwRuntimeError("index out of range"), undefined) : x$12.$array[x$12.$offset + 0])) - (x$13 = other.Start, (0 >= x$13.$length ? ($throwRuntimeError("index out of range"), undefined) : x$13.$array[x$13.$offset + 0]))) * ((x$14 = other.End, (1 >= x$14.$length ? ($throwRuntimeError("index out of range"), undefined) : x$14.$array[x$14.$offset + 1])) - (x$15 = other.Start, (1 >= x$15.$length ? ($throwRuntimeError("index out of range"), undefined) : x$15.$array[x$15.$offset + 1])))) + 1) / det; + gamma = ((((x$16 = line.Start, (1 >= x$16.$length ? ($throwRuntimeError("index out of range"), undefined) : x$16.$array[x$16.$offset + 1])) - (x$17 = other.Start, (1 >= x$17.$length ? ($throwRuntimeError("index out of range"), undefined) : x$17.$array[x$17.$offset + 1]))) * ((x$18 = line.End, (0 >= x$18.$length ? ($throwRuntimeError("index out of range"), undefined) : x$18.$array[x$18.$offset + 0])) - (x$19 = line.Start, (0 >= x$19.$length ? ($throwRuntimeError("index out of range"), undefined) : x$19.$array[x$19.$offset + 0])))) - (((x$20 = line.Start, (0 >= x$20.$length ? ($throwRuntimeError("index out of range"), undefined) : x$20.$array[x$20.$offset + 0])) - (x$21 = other.Start, (0 >= x$21.$length ? ($throwRuntimeError("index out of range"), undefined) : x$21.$array[x$21.$offset + 0]))) * ((x$22 = line.End, (1 >= x$22.$length ? ($throwRuntimeError("index out of range"), undefined) : x$22.$array[x$22.$offset + 1])) - (x$23 = line.Start, (1 >= x$23.$length ? ($throwRuntimeError("index out of range"), undefined) : x$23.$array[x$23.$offset + 1])))) + 1) / det; + if ((0 < lambda && lambda < 1) && (0 < gamma && gamma < 1)) { + dx = (x$24 = line.End, (0 >= x$24.$length ? ($throwRuntimeError("index out of range"), undefined) : x$24.$array[x$24.$offset + 0])) - (x$25 = line.Start, (0 >= x$25.$length ? ($throwRuntimeError("index out of range"), undefined) : x$25.$array[x$25.$offset + 0])); + dy = (x$26 = line.End, (1 >= x$26.$length ? ($throwRuntimeError("index out of range"), undefined) : x$26.$array[x$26.$offset + 1])) - (x$27 = line.Start, (1 >= x$27.$length ? ($throwRuntimeError("index out of range"), undefined) : x$27.$array[x$27.$offset + 1])); + return new Vector([(x$28 = line.Start, (0 >= x$28.$length ? ($throwRuntimeError("index out of range"), undefined) : x$28.$array[x$28.$offset + 0])) + (lambda * dx), (x$29 = line.Start, (1 >= x$29.$length ? ($throwRuntimeError("index out of range"), undefined) : x$29.$array[x$29.$offset + 1])) + (lambda * dy)]); + } + } + return Vector.nil; + }; + Line.prototype.IntersectionPointsLine = function(other) { return this.$val.IntersectionPointsLine(other); }; + Line.ptr.prototype.IntersectionPointsCircle = function(circle) { + var a, b, c, circle, cp, det, diff, lEnd, lStart, line, points, t, t$1, x, x$1, x$2, x$3, x$4, x$5; + line = this; + points = new sliceType$4([]); + cp = new Vector([circle.X, circle.Y]); + lStart = line.Start.Sub(new sliceType$4([cp])); + lEnd = line.End.Sub(new sliceType$4([cp])); + diff = lEnd.Sub(new sliceType$4([lStart])); + a = (0 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 0]) * (0 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 0]) + (1 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 1]) * (1 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 1]); + b = 2 * (((0 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 0]) * (0 >= lStart.$length ? ($throwRuntimeError("index out of range"), undefined) : lStart.$array[lStart.$offset + 0])) + ((1 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 1]) * (1 >= lStart.$length ? ($throwRuntimeError("index out of range"), undefined) : lStart.$array[lStart.$offset + 1]))); + c = ((0 >= lStart.$length ? ($throwRuntimeError("index out of range"), undefined) : lStart.$array[lStart.$offset + 0]) * (0 >= lStart.$length ? ($throwRuntimeError("index out of range"), undefined) : lStart.$array[lStart.$offset + 0])) + ((1 >= lStart.$length ? ($throwRuntimeError("index out of range"), undefined) : lStart.$array[lStart.$offset + 1]) * (1 >= lStart.$length ? ($throwRuntimeError("index out of range"), undefined) : lStart.$array[lStart.$offset + 1])) - (circle.Radius * circle.Radius); + det = b * b - (4 * a * c); + if (det < 0) { + } else if (det === 0) { + t = -b / (2 * a); + if (t >= 0 && t <= 1) { + points = $append(points, new Vector([(x = line.Start, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])) + t * (0 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 0]), (x$1 = line.Start, (1 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 1])) + t * (1 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 1])])); + } + } else { + t$1 = (-b + math.Sqrt(det)) / (2 * a); + if (t$1 >= 0 && t$1 <= 1) { + points = $append(points, new Vector([(x$2 = line.Start, (0 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 0])) + t$1 * (0 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 0]), (x$3 = line.Start, (1 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 1])) + t$1 * (1 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 1])])); + } + t$1 = (-b - math.Sqrt(det)) / (2 * a); + if (t$1 >= 0 && t$1 <= 1) { + points = $append(points, new Vector([(x$4 = line.Start, (0 >= x$4.$length ? ($throwRuntimeError("index out of range"), undefined) : x$4.$array[x$4.$offset + 0])) + t$1 * (0 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 0]), (x$5 = line.Start, (1 >= x$5.$length ? ($throwRuntimeError("index out of range"), undefined) : x$5.$array[x$5.$offset + 1])) + t$1 * (1 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 1])])); + } + } + return points; + }; + Line.prototype.IntersectionPointsCircle = function(circle) { return this.$val.IntersectionPointsCircle(circle); }; + NewConvexPolygon = function(points) { + var cp, points; + cp = new ConvexPolygon.ptr(new sliceType$4([]), 0, 0, true); + cp.AddPoints(points); + return cp; + }; + $pkg.NewConvexPolygon = NewConvexPolygon; + ConvexPolygon.ptr.prototype.Clone = function() { + var _i, _ref, cp, newPoly, point, points; + cp = this; + points = new sliceType$4([]); + _ref = cp.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + point = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + points = $append(points, point.Clone()); + _i++; + } + newPoly = NewConvexPolygon(sliceType.nil); + newPoly.X = cp.X; + newPoly.Y = cp.Y; + newPoly.AddPointsVec(points); + newPoly.Closed = cp.Closed; + return newPoly; + }; + ConvexPolygon.prototype.Clone = function() { return this.$val.Clone(); }; + ConvexPolygon.ptr.prototype.AddPointsVec = function(points) { + var cp, points; + cp = this; + cp.Points = $appendSlice(cp.Points, points); + }; + ConvexPolygon.prototype.AddPointsVec = function(points) { return this.$val.AddPointsVec(points); }; + ConvexPolygon.ptr.prototype.AddPoints = function(vertexPositions) { + var cp, v, vertexPositions, x; + cp = this; + v = 0; + while (true) { + if (!(v < vertexPositions.$length)) { break; } + cp.Points = $append(cp.Points, new Vector([((v < 0 || v >= vertexPositions.$length) ? ($throwRuntimeError("index out of range"), undefined) : vertexPositions.$array[vertexPositions.$offset + v]), (x = v + 1 >> 0, ((x < 0 || x >= vertexPositions.$length) ? ($throwRuntimeError("index out of range"), undefined) : vertexPositions.$array[vertexPositions.$offset + x]))])); + v = v + (2) >> 0; + } + }; + ConvexPolygon.prototype.AddPoints = function(vertexPositions) { return this.$val.AddPoints(vertexPositions); }; + ConvexPolygon.ptr.prototype.Lines = function() { + var _tmp, _tmp$1, cp, end, i, line, lines, start, vertices, x; + cp = this; + lines = new sliceType$5([]); + vertices = cp.Transformed(); + i = 0; + while (true) { + if (!(i < vertices.$length)) { break; } + _tmp = ((i < 0 || i >= vertices.$length) ? ($throwRuntimeError("index out of range"), undefined) : vertices.$array[vertices.$offset + i]); + _tmp$1 = (0 >= vertices.$length ? ($throwRuntimeError("index out of range"), undefined) : vertices.$array[vertices.$offset + 0]); + start = _tmp; + end = _tmp$1; + if (i < (vertices.$length - 1 >> 0)) { + end = (x = i + 1 >> 0, ((x < 0 || x >= vertices.$length) ? ($throwRuntimeError("index out of range"), undefined) : vertices.$array[vertices.$offset + x])); + } else if (!cp.Closed) { + break; + } + line = NewLine((0 >= start.$length ? ($throwRuntimeError("index out of range"), undefined) : start.$array[start.$offset + 0]), (1 >= start.$length ? ($throwRuntimeError("index out of range"), undefined) : start.$array[start.$offset + 1]), (0 >= end.$length ? ($throwRuntimeError("index out of range"), undefined) : end.$array[end.$offset + 0]), (1 >= end.$length ? ($throwRuntimeError("index out of range"), undefined) : end.$array[end.$offset + 1])); + lines = $append(lines, line); + i = i + (1) >> 0; + } + return lines; + }; + ConvexPolygon.prototype.Lines = function() { return this.$val.Lines(); }; + ConvexPolygon.ptr.prototype.Transformed = function() { + var _i, _ref, cp, point, transformed; + cp = this; + transformed = new sliceType$4([]); + _ref = cp.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + point = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + transformed = $append(transformed, new Vector([(0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0]) + cp.X, (1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1]) + cp.Y])); + _i++; + } + return transformed; + }; + ConvexPolygon.prototype.Transformed = function() { return this.$val.Transformed(); }; + ConvexPolygon.ptr.prototype.Bounds = function() { + var bottomRight, cp, i, point, topLeft, transformed, x, x$1; + cp = this; + transformed = cp.Transformed(); + topLeft = new Vector([(x = (0 >= transformed.$length ? ($throwRuntimeError("index out of range"), undefined) : transformed.$array[transformed.$offset + 0]), (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])), (x$1 = (0 >= transformed.$length ? ($throwRuntimeError("index out of range"), undefined) : transformed.$array[transformed.$offset + 0]), (1 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 1]))]); + bottomRight = topLeft.Clone(); + i = 0; + while (true) { + if (!(i < transformed.$length)) { break; } + point = ((i < 0 || i >= transformed.$length) ? ($throwRuntimeError("index out of range"), undefined) : transformed.$array[transformed.$offset + i]); + if ((0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0]) < (0 >= topLeft.$length ? ($throwRuntimeError("index out of range"), undefined) : topLeft.$array[topLeft.$offset + 0])) { + (0 >= topLeft.$length ? ($throwRuntimeError("index out of range"), undefined) : topLeft.$array[topLeft.$offset + 0] = (0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0])); + } else if ((0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0]) > (0 >= bottomRight.$length ? ($throwRuntimeError("index out of range"), undefined) : bottomRight.$array[bottomRight.$offset + 0])) { + (0 >= bottomRight.$length ? ($throwRuntimeError("index out of range"), undefined) : bottomRight.$array[bottomRight.$offset + 0] = (0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0])); + } + if ((1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1]) < (1 >= topLeft.$length ? ($throwRuntimeError("index out of range"), undefined) : topLeft.$array[topLeft.$offset + 1])) { + (1 >= topLeft.$length ? ($throwRuntimeError("index out of range"), undefined) : topLeft.$array[topLeft.$offset + 1] = (1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1])); + } else if ((1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1]) > (1 >= bottomRight.$length ? ($throwRuntimeError("index out of range"), undefined) : bottomRight.$array[bottomRight.$offset + 1])) { + (1 >= bottomRight.$length ? ($throwRuntimeError("index out of range"), undefined) : bottomRight.$array[bottomRight.$offset + 1] = (1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1])); + } + i = i + (1) >> 0; + } + return [topLeft, bottomRight]; + }; + ConvexPolygon.prototype.Bounds = function() { return this.$val.Bounds(); }; + ConvexPolygon.ptr.prototype.Position = function() { + var cp; + cp = this; + return [cp.X, cp.Y]; + }; + ConvexPolygon.prototype.Position = function() { return this.$val.Position(); }; + ConvexPolygon.ptr.prototype.SetPosition = function(x, y) { + var cp, x, y; + cp = this; + cp.X = x; + cp.Y = y; + }; + ConvexPolygon.prototype.SetPosition = function(x, y) { return this.$val.SetPosition(x, y); }; + ConvexPolygon.ptr.prototype.SetPositionVec = function(vec) { + var cp, vec; + cp = this; + cp.X = vec.X(); + cp.Y = vec.Y(); + }; + ConvexPolygon.prototype.SetPositionVec = function(vec) { return this.$val.SetPositionVec(vec); }; + ConvexPolygon.ptr.prototype.Move = function(x, y) { + var cp, x, y; + cp = this; + cp.X = cp.X + (x); + cp.Y = cp.Y + (y); + }; + ConvexPolygon.prototype.Move = function(x, y) { return this.$val.Move(x, y); }; + ConvexPolygon.ptr.prototype.MoveVec = function(vec) { + var cp, vec; + cp = this; + cp.X = cp.X + (vec.X()); + cp.Y = cp.Y + (vec.Y()); + }; + ConvexPolygon.prototype.MoveVec = function(vec) { return this.$val.MoveVec(vec); }; + ConvexPolygon.ptr.prototype.Center = function() { + var _i, _ref, cp, pos, v; + cp = this; + pos = new Vector([0, 0]); + _ref = cp.Transformed(); + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + v = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + pos.Add(new sliceType$4([v])); + _i++; + } + (0 >= pos.$length ? ($throwRuntimeError("index out of range"), undefined) : pos.$array[pos.$offset + 0] = (0 >= pos.$length ? ($throwRuntimeError("index out of range"), undefined) : pos.$array[pos.$offset + 0]) / ((cp.Transformed().$length))); + (1 >= pos.$length ? ($throwRuntimeError("index out of range"), undefined) : pos.$array[pos.$offset + 1] = (1 >= pos.$length ? ($throwRuntimeError("index out of range"), undefined) : pos.$array[pos.$offset + 1]) / ((cp.Transformed().$length))); + return pos; + }; + ConvexPolygon.prototype.Center = function() { return this.$val.Center(); }; + ConvexPolygon.ptr.prototype.Project = function(axis) { + var axis, cp, i, max, min, p, vertices, x, x$1, x$2, x$3; + cp = this; + axis = axis.Unit(); + vertices = cp.Transformed(); + min = axis.Dot(new Vector([(x = (0 >= vertices.$length ? ($throwRuntimeError("index out of range"), undefined) : vertices.$array[vertices.$offset + 0]), (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])), (x$1 = (0 >= vertices.$length ? ($throwRuntimeError("index out of range"), undefined) : vertices.$array[vertices.$offset + 0]), (1 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 1]))])); + max = min; + i = 1; + while (true) { + if (!(i < vertices.$length)) { break; } + p = axis.Dot(new Vector([(x$2 = ((i < 0 || i >= vertices.$length) ? ($throwRuntimeError("index out of range"), undefined) : vertices.$array[vertices.$offset + i]), (0 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 0])), (x$3 = ((i < 0 || i >= vertices.$length) ? ($throwRuntimeError("index out of range"), undefined) : vertices.$array[vertices.$offset + i]), (1 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 1]))])); + if (p < min) { + min = p; + } else if (p > max) { + max = p; + } + i = i + (1) >> 0; + } + return new Projection.ptr(min, max); + }; + ConvexPolygon.prototype.Project = function(axis) { return this.$val.Project(axis); }; + ConvexPolygon.ptr.prototype.SATAxes = function() { + var _i, _ref, axes, cp, line; + cp = this; + axes = new sliceType$4([]); + _ref = cp.Lines(); + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + line = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + axes = $append(axes, line.Normal()); + _i++; + } + return axes; + }; + ConvexPolygon.prototype.SATAxes = function() { return this.$val.SATAxes(); }; + ConvexPolygon.ptr.prototype.PointInside = function(point) { + var _i, _ref, contactCount, line, point, pointLine, polygon; + polygon = this; + pointLine = NewLine((0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0]), (1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1]), (0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0]) + 9.99999999999e+11, (1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1])); + contactCount = 0; + _ref = polygon.Lines(); + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + line = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (!(line.IntersectionPointsLine(pointLine) === Vector.nil)) { + contactCount = contactCount + (1) >> 0; + } + _i++; + } + return contactCount === 1; + }; + ConvexPolygon.prototype.PointInside = function(point) { return this.$val.PointInside(point); }; + NewContactSet = function() { + return new ContactSet.ptr(new sliceType$4([]), new Vector([0, 0]), new Vector([0, 0])); + }; + $pkg.NewContactSet = NewContactSet; + ContactSet.ptr.prototype.LeftmostPoint = function() { + var _i, _ref, cs, left, point; + cs = this; + left = Vector.nil; + _ref = cs.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + point = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (left === Vector.nil || (0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0]) < (0 >= left.$length ? ($throwRuntimeError("index out of range"), undefined) : left.$array[left.$offset + 0])) { + left = point; + } + _i++; + } + return left; + }; + ContactSet.prototype.LeftmostPoint = function() { return this.$val.LeftmostPoint(); }; + ContactSet.ptr.prototype.RightmostPoint = function() { + var _i, _ref, cs, point, right; + cs = this; + right = Vector.nil; + _ref = cs.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + point = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (right === Vector.nil || (0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0]) > (0 >= right.$length ? ($throwRuntimeError("index out of range"), undefined) : right.$array[right.$offset + 0])) { + right = point; + } + _i++; + } + return right; + }; + ContactSet.prototype.RightmostPoint = function() { return this.$val.RightmostPoint(); }; + ContactSet.ptr.prototype.TopmostPoint = function() { + var _i, _ref, cs, point, top; + cs = this; + top = Vector.nil; + _ref = cs.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + point = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (top === Vector.nil || (1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1]) < (1 >= top.$length ? ($throwRuntimeError("index out of range"), undefined) : top.$array[top.$offset + 1])) { + top = point; + } + _i++; + } + return top; + }; + ContactSet.prototype.TopmostPoint = function() { return this.$val.TopmostPoint(); }; + ContactSet.ptr.prototype.BottommostPoint = function() { + var _i, _ref, bottom, cs, point; + cs = this; + bottom = Vector.nil; + _ref = cs.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + point = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (bottom === Vector.nil || (1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1]) > (1 >= bottom.$length ? ($throwRuntimeError("index out of range"), undefined) : bottom.$array[bottom.$offset + 1])) { + bottom = point; + } + _i++; + } + return bottom; + }; + ContactSet.prototype.BottommostPoint = function() { return this.$val.BottommostPoint(); }; + ConvexPolygon.ptr.prototype.Intersection = function(dx, dy, other) { + var _i, _i$1, _i$2, _i$3, _ref, _ref$1, _ref$2, _ref$3, _tuple, _tuple$1, circle, contactSet, cp, deltaMagnitude, dx, dy, isCircle, isPoly, line, line$1, mtv, ogMagnitude, ogX, ogY, other, otherLine, point, point$1, poly, x, x$1, x$2, x$3; + cp = this; + contactSet = NewContactSet(); + ogX = cp.X; + ogY = cp.Y; + cp.X = cp.X + (dx); + cp.Y = cp.Y + (dy); + _tuple = $assertType(other, ptrType$4, true); + circle = _tuple[0]; + isCircle = _tuple[1]; + if (isCircle) { + _ref = cp.Lines(); + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + line = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + contactSet.Points = $appendSlice(contactSet.Points, line.IntersectionPointsCircle(circle)); + _i++; + } + } else { + _tuple$1 = $assertType(other, ptrType$5, true); + poly = _tuple$1[0]; + isPoly = _tuple$1[1]; + if (isPoly) { + _ref$1 = cp.Lines(); + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + line$1 = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + _ref$2 = poly.Lines(); + _i$2 = 0; + while (true) { + if (!(_i$2 < _ref$2.$length)) { break; } + otherLine = ((_i$2 < 0 || _i$2 >= _ref$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$2.$array[_ref$2.$offset + _i$2]); + point = line$1.IntersectionPointsLine(otherLine); + if (!(point === Vector.nil)) { + contactSet.Points = $append(contactSet.Points, point); + } + _i$2++; + } + _i$1++; + } + } + } + if (contactSet.Points.$length > 0) { + _ref$3 = contactSet.Points; + _i$3 = 0; + while (true) { + if (!(_i$3 < _ref$3.$length)) { break; } + point$1 = ((_i$3 < 0 || _i$3 >= _ref$3.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$3.$array[_ref$3.$offset + _i$3]); + contactSet.Center = contactSet.Center.Add(new sliceType$4([point$1])); + _i$3++; + } + (x$1 = contactSet.Center, (0 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 0] = (x = contactSet.Center, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])) / ((contactSet.Points.$length)))); + (x$3 = contactSet.Center, (1 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 1] = (x$2 = contactSet.Center, (1 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 1])) / ((contactSet.Points.$length)))); + mtv = cp.calculateMTV(contactSet, other); + if (!(mtv === Vector.nil)) { + contactSet.MTV = mtv; + } + } else { + contactSet = ptrType$6.nil; + } + if (!(contactSet === ptrType$6.nil) && (!((dx === 0)) || !((dy === 0)))) { + deltaMagnitude = new Vector([dx, dy]).Magnitude(); + ogMagnitude = contactSet.MTV.Magnitude(); + contactSet.MTV = contactSet.MTV.Unit().Scale(ogMagnitude - deltaMagnitude); + } + cp.X = ogX; + cp.Y = ogY; + return contactSet; + }; + ConvexPolygon.prototype.Intersection = function(dx, dy, other) { return this.$val.Intersection(dx, dy, other); }; + ConvexPolygon.ptr.prototype.calculateMTV = function(contactSet, otherShape) { + var _i, _i$1, _ref, _ref$1, _ref$2, axis, axis$1, contactSet, cp, delta, other, otherShape, overlap, overlap$1, smallest; + cp = this; + delta = new Vector([0, 0]); + smallest = new Vector([1.7976931348623157e+308, 0]); + _ref = otherShape; + if ($assertType(_ref, ptrType$5, true)[1]) { + other = _ref.$val; + _ref$1 = cp.SATAxes(); + _i = 0; + while (true) { + if (!(_i < _ref$1.$length)) { break; } + axis = ((_i < 0 || _i >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i]); + if (!$clone(cp.Project(axis), Projection).Overlapping($clone(other.Project(axis), Projection))) { + return Vector.nil; + } + overlap = $clone(cp.Project(axis), Projection).Overlap($clone(other.Project(axis), Projection)); + if (smallest.Magnitude() > overlap) { + smallest = axis.Scale(overlap); + } + _i++; + } + _ref$2 = other.SATAxes(); + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$2.$length)) { break; } + axis$1 = ((_i$1 < 0 || _i$1 >= _ref$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$2.$array[_ref$2.$offset + _i$1]); + if (!$clone(cp.Project(axis$1), Projection).Overlapping($clone(other.Project(axis$1), Projection))) { + return Vector.nil; + } + overlap$1 = $clone(cp.Project(axis$1), Projection).Overlap($clone(other.Project(axis$1), Projection)); + if (smallest.Magnitude() > overlap$1) { + smallest = axis$1.Scale(overlap$1); + } + _i$1++; + } + } + (0 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 0] = (0 >= smallest.$length ? ($throwRuntimeError("index out of range"), undefined) : smallest.$array[smallest.$offset + 0])); + (1 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 1] = (1 >= smallest.$length ? ($throwRuntimeError("index out of range"), undefined) : smallest.$array[smallest.$offset + 1])); + return delta; + }; + ConvexPolygon.prototype.calculateMTV = function(contactSet, otherShape) { return this.$val.calculateMTV(contactSet, otherShape); }; + ConvexPolygon.ptr.prototype.ContainedBy = function(otherShape) { + var _i, _i$1, _ref, _ref$1, _ref$2, axis, axis$1, cp, other, otherShape; + cp = this; + _ref = otherShape; + if ($assertType(_ref, ptrType$5, true)[1]) { + other = _ref.$val; + _ref$1 = cp.SATAxes(); + _i = 0; + while (true) { + if (!(_i < _ref$1.$length)) { break; } + axis = ((_i < 0 || _i >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i]); + if (!$clone(cp.Project(axis), Projection).IsInside($clone(other.Project(axis), Projection))) { + return false; + } + _i++; + } + _ref$2 = other.SATAxes(); + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$2.$length)) { break; } + axis$1 = ((_i$1 < 0 || _i$1 >= _ref$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$2.$array[_ref$2.$offset + _i$1]); + if (!$clone(cp.Project(axis$1), Projection).IsInside($clone(other.Project(axis$1), Projection))) { + return false; + } + _i$1++; + } + } + return true; + }; + ConvexPolygon.prototype.ContainedBy = function(otherShape) { return this.$val.ContainedBy(otherShape); }; + ConvexPolygon.ptr.prototype.FlipH = function() { + var _i, _ref, cp, v; + cp = this; + _ref = cp.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + v = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + (0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0] = -(0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0])); + _i++; + } + cp.ReverseVertexOrder(); + }; + ConvexPolygon.prototype.FlipH = function() { return this.$val.FlipH(); }; + ConvexPolygon.ptr.prototype.FlipV = function() { + var _i, _ref, cp, v; + cp = this; + _ref = cp.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + v = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + (1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1] = -(1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1])); + _i++; + } + cp.ReverseVertexOrder(); + }; + ConvexPolygon.prototype.FlipV = function() { return this.$val.FlipV(); }; + ConvexPolygon.ptr.prototype.ReverseVertexOrder = function() { + var cp, i, verts, x, x$1; + cp = this; + verts = new sliceType$4([(x = cp.Points, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0]))]); + i = cp.Points.$length - 1 >> 0; + while (true) { + if (!(i >= 1)) { break; } + verts = $append(verts, (x$1 = cp.Points, ((i < 0 || i >= x$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + i]))); + i = i - (1) >> 0; + } + cp.Points = verts; + }; + ConvexPolygon.prototype.ReverseVertexOrder = function() { return this.$val.ReverseVertexOrder(); }; + NewRectangle = function(x, y, w, h) { + var h, w, x, y; + return NewConvexPolygon(new sliceType([x, y, x + w, y, x + w, y + h, x, y + h])); + }; + $pkg.NewRectangle = NewRectangle; + NewCircle = function(x, y, radius) { + var circle, radius, x, y; + circle = new Circle.ptr(x, y, radius); + return circle; + }; + $pkg.NewCircle = NewCircle; + Circle.ptr.prototype.Clone = function() { + var circle; + circle = this; + return NewCircle(circle.X, circle.Y, circle.Radius); + }; + Circle.prototype.Clone = function() { return this.$val.Clone(); }; + Circle.ptr.prototype.Bounds = function() { + var circle; + circle = this; + return [new Vector([circle.X - circle.Radius, circle.Y - circle.Radius]), new Vector([circle.X + circle.Radius, circle.Y + circle.Radius])]; + }; + Circle.prototype.Bounds = function() { return this.$val.Bounds(); }; + Circle.ptr.prototype.Intersection = function(dx, dy, other) { + var _i, _ref, _ref$1, circle, contactSet, dist, dx, dy, other, ox, oy, point, shape, shape$1, x, x$1, x$2, x$3; + circle = this; + contactSet = ptrType$6.nil; + ox = circle.X; + oy = circle.Y; + circle.X = circle.X + (dx); + circle.Y = circle.Y + (dy); + _ref = other; + if ($assertType(_ref, ptrType$5, true)[1]) { + shape = _ref.$val; + contactSet = shape.Intersection(-dx, -dy, circle); + if (!(contactSet === ptrType$6.nil)) { + contactSet.MTV = contactSet.MTV.Scale(-1); + } + } else if ($assertType(_ref, ptrType$4, true)[1]) { + shape$1 = _ref.$val; + contactSet = NewContactSet(); + contactSet.Points = circle.IntersectionPointsCircle(shape$1); + if (contactSet.Points.$length === 0) { + return ptrType$6.nil; + } + contactSet.MTV = new Vector([circle.X - shape$1.X, circle.Y - shape$1.Y]); + dist = contactSet.MTV.Magnitude(); + contactSet.MTV = contactSet.MTV.Unit().Scale(circle.Radius + shape$1.Radius - dist); + _ref$1 = contactSet.Points; + _i = 0; + while (true) { + if (!(_i < _ref$1.$length)) { break; } + point = ((_i < 0 || _i >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i]); + contactSet.Center = contactSet.Center.Add(new sliceType$4([point])); + _i++; + } + (x$1 = contactSet.Center, (0 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 0] = (x = contactSet.Center, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])) / ((contactSet.Points.$length)))); + (x$3 = contactSet.Center, (1 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 1] = (x$2 = contactSet.Center, (1 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 1])) / ((contactSet.Points.$length)))); + } + circle.X = ox; + circle.Y = oy; + return contactSet; + }; + Circle.prototype.Intersection = function(dx, dy, other) { return this.$val.Intersection(dx, dy, other); }; + Circle.ptr.prototype.Move = function(x, y) { + var circle, x, y; + circle = this; + circle.X = circle.X + (x); + circle.Y = circle.Y + (y); + }; + Circle.prototype.Move = function(x, y) { return this.$val.Move(x, y); }; + Circle.ptr.prototype.MoveVec = function(vec) { + var circle, vec; + circle = this; + circle.X = circle.X + (vec.X()); + circle.Y = circle.Y + (vec.Y()); + }; + Circle.prototype.MoveVec = function(vec) { return this.$val.MoveVec(vec); }; + Circle.ptr.prototype.SetPosition = function(x, y) { + var circle, x, y; + circle = this; + circle.X = x; + circle.Y = y; + }; + Circle.prototype.SetPosition = function(x, y) { return this.$val.SetPosition(x, y); }; + Circle.ptr.prototype.SetPositionVec = function(vec) { + var circle, vec; + circle = this; + circle.X = vec.X(); + circle.Y = vec.Y(); + }; + Circle.prototype.SetPositionVec = function(vec) { return this.$val.SetPositionVec(vec); }; + Circle.ptr.prototype.Position = function() { + var circle; + circle = this; + return [circle.X, circle.Y]; + }; + Circle.prototype.Position = function() { return this.$val.Position(); }; + Circle.ptr.prototype.PointInside = function(point) { + var circle, point; + circle = this; + return point.Sub(new sliceType$4([new Vector([circle.X, circle.Y])])).Magnitude() <= circle.Radius; + }; + Circle.prototype.PointInside = function(point) { return this.$val.PointInside(point); }; + Circle.ptr.prototype.IntersectionPointsCircle = function(other) { + var a, circle, d, h, other, x2, y2; + circle = this; + d = math.Sqrt(math.Pow(other.X - circle.X, 2) + math.Pow(other.Y - circle.Y, 2)); + if (d > circle.Radius + other.Radius || d < math.Abs(circle.Radius - other.Radius) || (d === 0) && (circle.Radius === other.Radius)) { + return sliceType$4.nil; + } + a = (math.Pow(circle.Radius, 2) - math.Pow(other.Radius, 2) + math.Pow(d, 2)) / (2 * d); + h = math.Sqrt(math.Pow(circle.Radius, 2) - math.Pow(a, 2)); + x2 = circle.X + a * (other.X - circle.X) / d; + y2 = circle.Y + a * (other.Y - circle.Y) / d; + return new sliceType$4([new Vector([x2 + h * (other.Y - circle.Y) / d, y2 - h * (other.X - circle.X) / d]), new Vector([x2 - h * (other.Y - circle.Y) / d, y2 + h * (other.X - circle.X) / d])]); + }; + Circle.prototype.IntersectionPointsCircle = function(other) { return this.$val.IntersectionPointsCircle(other); }; + Projection.ptr.prototype.Overlapping = function(other) { + var other, projection; + projection = this; + return $clone(projection, Projection).Overlap($clone(other, Projection)) > 0; + }; + Projection.prototype.Overlapping = function(other) { return this.$val.Overlapping(other); }; + Projection.ptr.prototype.Overlap = function(other) { + var other, projection; + projection = this; + return math.Min(projection.Max, other.Max) - math.Max(projection.Min, other.Min); + }; + Projection.prototype.Overlap = function(other) { return this.$val.Overlap(other); }; + Projection.ptr.prototype.IsInside = function(other) { + var other, projection; + projection = this; + return projection.Min >= other.Min && projection.Max <= other.Max; + }; + Projection.prototype.IsInside = function(other) { return this.$val.IsInside(other); }; + NewObject = function(x, y, w, h, tags) { + var h, o, tags, w, x, y; + o = new Object.ptr($ifaceNil, ptrType$1.nil, x, y, w, h, sliceType$1.nil, $ifaceNil, $makeMap(ptrType$2.keyFor, []), new sliceType$6([])); + if (tags.$length > 0) { + o.AddTags(tags); + } + return o; + }; + $pkg.NewObject = NewObject; + Object.ptr.prototype.Clone = function() { + var {_entry, _i, _keys, _r, _ref, k, newObj, obj, $s, $r, $c} = $restore(this, {}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + obj = this; + newObj = NewObject(obj.X, obj.Y, obj.W, obj.H, obj.Tags()); + newObj.Data = obj.Data; + /* */ if (!($interfaceIsEqual(obj.Shape, $ifaceNil))) { $s = 1; continue; } + /* */ $s = 2; continue; + /* if (!($interfaceIsEqual(obj.Shape, $ifaceNil))) { */ case 1: + _r = obj.Shape.Clone(); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $r = newObj.SetShape(_r); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + /* } */ case 2: + _ref = obj.ignoreList; + _i = 0; + _keys = $keys(_ref); + while (true) { + if (!(_i < _keys.length)) { break; } + _entry = _ref[_keys[_i]]; + if (_entry === undefined) { + _i++; + continue; + } + k = _entry.k; + newObj.AddToIgnoreList(k); + _i++; + } + $s = -1; return newObj; + /* */ } return; } var $f = {$blk: Object.ptr.prototype.Clone, $c: true, $r, _entry, _i, _keys, _r, _ref, k, newObj, obj, $s};return $f; + }; + Object.prototype.Clone = function() { return this.$val.Clone(); }; + Object.ptr.prototype.Update = function() { + var {_tuple, c, cx, cy, ex, ey, obj, space, x, y, $s, $r, $c} = $restore(this, {}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + obj = this; + if (!(obj.Space === ptrType$1.nil)) { + space = obj.Space; + obj.Space.Remove(new sliceType$3([obj])); + obj.Space = space; + _tuple = obj.BoundsToSpace(0, 0); + cx = _tuple[0]; + cy = _tuple[1]; + ex = _tuple[2]; + ey = _tuple[3]; + y = cy; + while (true) { + if (!(y <= ey)) { break; } + x = cx; + while (true) { + if (!(x <= ex)) { break; } + c = obj.Space.Cell(x, y); + if (!(c === ptrType.nil)) { + c.register(obj); + obj.TouchingCells = $append(obj.TouchingCells, c); + } + x = x + (1) >> 0; + } + y = y + (1) >> 0; + } + } + /* */ if (!($interfaceIsEqual(obj.Shape, $ifaceNil))) { $s = 1; continue; } + /* */ $s = 2; continue; + /* if (!($interfaceIsEqual(obj.Shape, $ifaceNil))) { */ case 1: + $r = obj.Shape.SetPosition(obj.X, obj.Y); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + /* } */ case 2: + $s = -1; return; + /* */ } return; } var $f = {$blk: Object.ptr.prototype.Update, $c: true, $r, _tuple, c, cx, cy, ex, ey, obj, space, x, y, $s};return $f; + }; + Object.prototype.Update = function() { return this.$val.Update(); }; + Object.ptr.prototype.AddTags = function(tags) { + var obj, tags; + obj = this; + obj.tags = $appendSlice(obj.tags, tags); + }; + Object.prototype.AddTags = function(tags) { return this.$val.AddTags(tags); }; + Object.ptr.prototype.RemoveTags = function(tags) { + var _i, _i$1, _ref, _ref$1, i, obj, t, tag, tags; + obj = this; + _ref = tags; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + tag = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + _ref$1 = obj.tags; + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + i = _i$1; + t = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + if (t === tag) { + obj.tags = $appendSlice($subslice(obj.tags, 0, i), $subslice(obj.tags, (i + 1 >> 0))); + break; + } + _i$1++; + } + _i++; + } + }; + Object.prototype.RemoveTags = function(tags) { return this.$val.RemoveTags(tags); }; + Object.ptr.prototype.HasTags = function(tags) { + var _i, _i$1, _ref, _ref$1, obj, t, tag, tags; + obj = this; + _ref = tags; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + tag = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + _ref$1 = obj.tags; + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + t = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + if (t === tag) { + return true; + } + _i$1++; + } + _i++; + } + return false; + }; + Object.prototype.HasTags = function(tags) { return this.$val.HasTags(tags); }; + Object.ptr.prototype.Tags = function() { + var obj; + obj = this; + return $appendSlice(new sliceType$6([]), obj.tags); + }; + Object.prototype.Tags = function() { return this.$val.Tags(); }; + Object.ptr.prototype.SetShape = function(shape) { + var {obj, shape, $s, $r, $c} = $restore(this, {shape}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + obj = this; + /* */ if (!($interfaceIsEqual(obj.Shape, shape))) { $s = 1; continue; } + /* */ $s = 2; continue; + /* if (!($interfaceIsEqual(obj.Shape, shape))) { */ case 1: + obj.Shape = shape; + $r = obj.Update(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + /* } */ case 2: + $s = -1; return; + /* */ } return; } var $f = {$blk: Object.ptr.prototype.SetShape, $c: true, $r, obj, shape, $s};return $f; + }; + Object.prototype.SetShape = function(shape) { return this.$val.SetShape(shape); }; + Object.ptr.prototype.BoundsToSpace = function(dx, dy) { + var _tuple, _tuple$1, cx, cy, dx, dy, ex, ey, obj; + obj = this; + _tuple = obj.Space.WorldToSpace(obj.X + dx, obj.Y + dy); + cx = _tuple[0]; + cy = _tuple[1]; + _tuple$1 = obj.Space.WorldToSpace(obj.X + obj.W + dx - 1, obj.Y + obj.H + dy - 1); + ex = _tuple$1[0]; + ey = _tuple$1[1]; + return [cx, cy, ex, ey]; + }; + Object.prototype.BoundsToSpace = function(dx, dy) { return this.$val.BoundsToSpace(dx, dy); }; + Object.ptr.prototype.SharesCells = function(other) { + var _i, _ref, cell, obj, other; + obj = this; + _ref = obj.TouchingCells; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + cell = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (cell.Contains(other)) { + return true; + } + _i++; + } + return false; + }; + Object.prototype.SharesCells = function(other) { return this.$val.SharesCells(other); }; + Object.ptr.prototype.SharesCellsTags = function(tags) { + var _i, _ref, cell, obj, tags; + obj = this; + _ref = obj.TouchingCells; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + cell = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (cell.ContainsTags(tags)) { + return true; + } + _i++; + } + return false; + }; + Object.prototype.SharesCellsTags = function(tags) { return this.$val.SharesCellsTags(tags); }; + Object.ptr.prototype.Center = function() { + var obj; + obj = this; + return [obj.X + (obj.W / 2), obj.Y + (obj.H / 2)]; + }; + Object.prototype.Center = function() { return this.$val.Center(); }; + Object.ptr.prototype.SetCenter = function(x, y) { + var obj, x, y; + obj = this; + obj.X = x - (obj.W / 2); + obj.Y = y - (obj.H / 2); + }; + Object.prototype.SetCenter = function(x, y) { return this.$val.SetCenter(x, y); }; + Object.ptr.prototype.CellPosition = function() { + var _tuple, obj; + obj = this; + _tuple = obj.Center(); + return obj.Space.WorldToSpace(_tuple[0], _tuple[1]); + }; + Object.prototype.CellPosition = function() { return this.$val.CellPosition(); }; + Object.ptr.prototype.SetRight = function(x) { + var obj, x; + obj = this; + obj.X = x - obj.W; + }; + Object.prototype.SetRight = function(x) { return this.$val.SetRight(x); }; + Object.ptr.prototype.SetBottom = function(y) { + var obj, y; + obj = this; + obj.Y = y - obj.H; + }; + Object.prototype.SetBottom = function(y) { return this.$val.SetBottom(y); }; + Object.ptr.prototype.Bottom = function() { + var obj; + obj = this; + return obj.Y + obj.H; + }; + Object.prototype.Bottom = function() { return this.$val.Bottom(); }; + Object.ptr.prototype.Right = function() { + var obj; + obj = this; + return obj.X + obj.W; + }; + Object.prototype.Right = function() { return this.$val.Right(); }; + Object.ptr.prototype.SetBounds = function(topLeft, bottomRight) { + var bottomRight, obj, topLeft; + obj = this; + obj.X = (0 >= topLeft.$length ? ($throwRuntimeError("index out of range"), undefined) : topLeft.$array[topLeft.$offset + 0]); + obj.Y = (1 >= topLeft.$length ? ($throwRuntimeError("index out of range"), undefined) : topLeft.$array[topLeft.$offset + 1]); + obj.W = (0 >= bottomRight.$length ? ($throwRuntimeError("index out of range"), undefined) : bottomRight.$array[bottomRight.$offset + 0]) - obj.X; + obj.H = (1 >= bottomRight.$length ? ($throwRuntimeError("index out of range"), undefined) : bottomRight.$array[bottomRight.$offset + 1]) - obj.Y; + }; + Object.prototype.SetBounds = function(topLeft, bottomRight) { return this.$val.SetBounds(topLeft, bottomRight); }; + Object.ptr.prototype.Check = function(dx, dy, tags) { + var _entry, _entry$1, _entry$2, _i, _key, _key$1, _ref, _tuple, _tuple$1, _tuple$2, added, added$1, c, cc, cellsAdded, cx, cy, dx, dy, ex, ey, ignored, o, obj, objectsAdded, tags, x, y; + obj = this; + if (obj.Space === ptrType$1.nil) { + return ptrType$7.nil; + } + cc = NewCollision(); + cc.checkingObject = obj; + if (dx < 0) { + dx = math.Min(dx, -1); + } else if (dx > 0) { + dx = math.Max(dx, 1); + } + if (dy < 0) { + dy = math.Min(dy, -1); + } else if (dy > 0) { + dy = math.Max(dy, 1); + } + cc.dx = dx; + cc.dy = dy; + _tuple = obj.BoundsToSpace(dx, dy); + cx = _tuple[0]; + cy = _tuple[1]; + ex = _tuple[2]; + ey = _tuple[3]; + objectsAdded = $makeMap(ptrType$2.keyFor, []); + cellsAdded = $makeMap(ptrType.keyFor, []); + y = cy; + while (true) { + if (!(y <= ey)) { break; } + x = cx; + while (true) { + if (!(x <= ex)) { break; } + c = obj.Space.Cell(x, y); + if (!(c === ptrType.nil)) { + _ref = c.Objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + o = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + ignored = (_entry = obj.ignoreList[ptrType$2.keyFor(o)], _entry !== undefined ? _entry.v : false); + if (o === obj || ignored) { + _i++; + continue; + } + _tuple$1 = (_entry$1 = objectsAdded[ptrType$2.keyFor(o)], _entry$1 !== undefined ? [_entry$1.v, true] : [false, false]); + added = _tuple$1[1]; + if (((tags.$length === 0) || o.HasTags(tags)) && !added) { + cc.Objects = $append(cc.Objects, o); + _key = o; (objectsAdded || $throwRuntimeError("assignment to entry in nil map"))[ptrType$2.keyFor(_key)] = { k: _key, v: true }; + _tuple$2 = (_entry$2 = cellsAdded[ptrType.keyFor(c)], _entry$2 !== undefined ? [_entry$2.v, true] : [false, false]); + added$1 = _tuple$2[1]; + if (!added$1) { + cc.Cells = $append(cc.Cells, c); + _key$1 = c; (cellsAdded || $throwRuntimeError("assignment to entry in nil map"))[ptrType.keyFor(_key$1)] = { k: _key$1, v: true }; + } + _i++; + continue; + } + _i++; + } + } + x = x + (1) >> 0; + } + y = y + (1) >> 0; + } + if (cc.Objects.$length === 0) { + return ptrType$7.nil; + } + return cc; + }; + Object.prototype.Check = function(dx, dy, tags) { return this.$val.Check(dx, dy, tags); }; + Object.ptr.prototype.Overlaps = function(other) { + var obj, other; + obj = this; + return other.X <= obj.X + obj.W && other.X + other.W >= obj.X && other.Y <= obj.Y + obj.H && other.Y + other.H >= obj.Y; + }; + Object.prototype.Overlaps = function(other) { return this.$val.Overlaps(other); }; + Object.ptr.prototype.AddToIgnoreList = function(ignoreObj) { + var _key, ignoreObj, obj; + obj = this; + _key = ignoreObj; (obj.ignoreList || $throwRuntimeError("assignment to entry in nil map"))[ptrType$2.keyFor(_key)] = { k: _key, v: true }; + }; + Object.prototype.AddToIgnoreList = function(ignoreObj) { return this.$val.AddToIgnoreList(ignoreObj); }; + Object.ptr.prototype.RemoveFromIgnoreList = function(ignoreObj) { + var ignoreObj, obj; + obj = this; + delete obj.ignoreList[ptrType$2.keyFor(ignoreObj)]; + }; + Object.prototype.RemoveFromIgnoreList = function(ignoreObj) { return this.$val.RemoveFromIgnoreList(ignoreObj); }; + axpyUnitaryTo = function(dst, alpha, x, y) { + var _i, _ref, alpha, dim, dst, i, v, x, y; + dim = y.$length; + _ref = x; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + v = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (i === dim) { + return; + } + ((i < 0 || i >= dst.$length) ? ($throwRuntimeError("index out of range"), undefined) : dst.$array[dst.$offset + i] = alpha * v + ((i < 0 || i >= y.$length) ? ($throwRuntimeError("index out of range"), undefined) : y.$array[y.$offset + i])); + _i++; + } + }; + scalUnitaryTo = function(dst, alpha, x) { + var _i, _ref, alpha, dst, i, x; + _ref = x; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + ((i < 0 || i >= dst.$length) ? ($throwRuntimeError("index out of range"), undefined) : dst.$array[dst.$offset + i] = ((i < 0 || i >= dst.$length) ? ($throwRuntimeError("index out of range"), undefined) : dst.$array[dst.$offset + i]) * (alpha)); + _i++; + } + }; + NewCollision = function() { + return new Collision.ptr(ptrType$2.nil, 0, 0, new sliceType$3([]), sliceType$1.nil); + }; + $pkg.NewCollision = NewCollision; + Collision.ptr.prototype.HasTags = function(tags) { + var _i, _ref, cc, o, tags; + cc = this; + _ref = cc.Objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + o = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (o === cc.checkingObject) { + _i++; + continue; + } + if (o.HasTags(tags)) { + return true; + } + _i++; + } + return false; + }; + Collision.prototype.HasTags = function(tags) { return this.$val.HasTags(tags); }; + Collision.ptr.prototype.ObjectsByTags = function(tags) { + var _i, _ref, cc, o, objects, tags; + cc = this; + objects = new sliceType$3([]); + _ref = cc.Objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + o = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (o === cc.checkingObject) { + _i++; + continue; + } + if (o.HasTags(tags)) { + objects = $append(objects, o); + } + _i++; + } + return objects; + }; + Collision.prototype.ObjectsByTags = function(tags) { return this.$val.ObjectsByTags(tags); }; + Collision.ptr.prototype.ContactWithObject = function(object) { + var cc, delta, object; + cc = this; + delta = new Vector([0, 0]); + if (cc.dx < 0) { + (0 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 0] = object.X + object.W - cc.checkingObject.X); + } else if (cc.dx > 0) { + (0 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 0] = object.X - cc.checkingObject.W - cc.checkingObject.X); + } + if (cc.dy < 0) { + (1 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 1] = object.Y + object.H - cc.checkingObject.Y); + } else if (cc.dy > 0) { + (1 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 1] = object.Y - cc.checkingObject.H - cc.checkingObject.Y); + } + return delta; + }; + Collision.prototype.ContactWithObject = function(object) { return this.$val.ContactWithObject(object); }; + Collision.ptr.prototype.ContactWithCell = function(cell) { + var cc, cell, cx, cy, delta; + cc = this; + delta = new Vector([0, 0]); + cx = (($imul(cell.X, cc.checkingObject.Space.CellWidth))); + cy = (($imul(cell.Y, cc.checkingObject.Space.CellHeight))); + if (cc.dx < 0) { + (0 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 0] = cx + (cc.checkingObject.Space.CellWidth) - cc.checkingObject.X); + } else if (cc.dx > 0) { + (0 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 0] = cx - cc.checkingObject.W - cc.checkingObject.X); + } + if (cc.dy < 0) { + (1 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 1] = cy + (cc.checkingObject.Space.CellHeight) - cc.checkingObject.Y); + } else if (cc.dy > 0) { + (1 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 1] = cy - cc.checkingObject.H - cc.checkingObject.Y); + } + return delta; + }; + Collision.prototype.ContactWithCell = function(cell) { return this.$val.ContactWithCell(cell); }; + Collision.ptr.prototype.SlideAgainstCell = function(cell, avoidTags) { + var _tuple, _tuple$1, avoidTags, cc, ccX, ccY, cell, collidingCell, diffX, diffY, down, hX, hY, left, oX, oY, right, slide, sp, up, x; + cc = this; + sp = cc.checkingObject.Space; + collidingCell = (x = cc.Cells, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])); + _tuple = sp.SpaceToWorld(collidingCell.X, collidingCell.Y); + ccX = _tuple[0]; + ccY = _tuple[1]; + hX = (sp.CellWidth) / 2; + hY = (sp.CellHeight) / 2; + ccX = ccX + (hX); + ccY = ccY + (hY); + _tuple$1 = cc.checkingObject.Center(); + oX = _tuple$1[0]; + oY = _tuple$1[1]; + diffX = oX - ccX; + diffY = oY - ccY; + left = sp.Cell(collidingCell.X - 1 >> 0, collidingCell.Y); + right = sp.Cell(collidingCell.X + 1 >> 0, collidingCell.Y); + up = sp.Cell(collidingCell.X, collidingCell.Y - 1 >> 0); + down = sp.Cell(collidingCell.X, collidingCell.Y + 1 >> 0); + slide = new Vector([0, 0]); + if (!((cc.dy === 0))) { + if (diffX > 0 && (right === ptrType.nil || !right.ContainsTags(avoidTags))) { + (0 >= slide.$length ? ($throwRuntimeError("index out of range"), undefined) : slide.$array[slide.$offset + 0] = ccX + hX - cc.checkingObject.X); + } else if (diffX < 0 && (left === ptrType.nil || !left.ContainsTags(avoidTags))) { + (0 >= slide.$length ? ($throwRuntimeError("index out of range"), undefined) : slide.$array[slide.$offset + 0] = ccX - hX - (cc.checkingObject.X + cc.checkingObject.W)); + } else { + return Vector.nil; + } + } + if (!((cc.dx === 0))) { + if (diffY > 0 && (down === ptrType.nil || !down.ContainsTags(avoidTags))) { + (1 >= slide.$length ? ($throwRuntimeError("index out of range"), undefined) : slide.$array[slide.$offset + 1] = ccY + hY - cc.checkingObject.Y); + } else if (diffY < 0 && (up === ptrType.nil || !up.ContainsTags(avoidTags))) { + (1 >= slide.$length ? ($throwRuntimeError("index out of range"), undefined) : slide.$array[slide.$offset + 1] = ccY - hY - (cc.checkingObject.Y + cc.checkingObject.H)); + } else { + return Vector.nil; + } + } + return slide; + }; + Collision.prototype.SlideAgainstCell = function(cell, avoidTags) { return this.$val.SlideAgainstCell(cell, avoidTags); }; + newCell = function(x, y) { + var x, y; + return new Cell.ptr(x, y, new sliceType$3([])); + }; + Cell.ptr.prototype.register = function(obj) { + var cell, obj; + cell = this; + if (!cell.Contains(obj)) { + cell.Objects = $append(cell.Objects, obj); + } + }; + Cell.prototype.register = function(obj) { return this.$val.register(obj); }; + Cell.ptr.prototype.unregister = function(obj) { + var _i, _ref, cell, i, o, obj, x, x$1, x$2; + cell = this; + _ref = cell.Objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + o = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (o === obj) { + (x$2 = cell.Objects, ((i < 0 || i >= x$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + i] = (x = cell.Objects, x$1 = cell.Objects.$length - 1 >> 0, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1])))); + cell.Objects = $subslice(cell.Objects, 0, (cell.Objects.$length - 1 >> 0)); + break; + } + _i++; + } + }; + Cell.prototype.unregister = function(obj) { return this.$val.unregister(obj); }; + Cell.ptr.prototype.Contains = function(obj) { + var _i, _ref, cell, o, obj; + cell = this; + _ref = cell.Objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + o = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (o === obj) { + return true; + } + _i++; + } + return false; + }; + Cell.prototype.Contains = function(obj) { return this.$val.Contains(obj); }; + Cell.ptr.prototype.ContainsTags = function(tags) { + var _i, _ref, cell, o, tags; + cell = this; + _ref = cell.Objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + o = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (o.HasTags(tags)) { + return true; + } + _i++; + } + return false; + }; + Cell.prototype.ContainsTags = function(tags) { return this.$val.ContainsTags(tags); }; + Cell.ptr.prototype.Occupied = function() { + var cell; + cell = this; + return cell.Objects.$length > 0; + }; + Cell.prototype.Occupied = function() { return this.$val.Occupied(); }; + Vector.methods = [{prop: "Clone", name: "Clone", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "Add", name: "Add", pkg: "", typ: $funcType([sliceType$4], [Vector], true)}, {prop: "Sub", name: "Sub", pkg: "", typ: $funcType([sliceType$4], [Vector], true)}, {prop: "Scale", name: "Scale", pkg: "", typ: $funcType([$Float64], [Vector], false)}, {prop: "Equal", name: "Equal", pkg: "", typ: $funcType([Vector], [$Bool], false)}, {prop: "Magnitude", name: "Magnitude", pkg: "", typ: $funcType([], [$Float64], false)}, {prop: "Magnitude2", name: "Magnitude2", pkg: "", typ: $funcType([], [$Float64], false)}, {prop: "Unit", name: "Unit", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "Dot", name: "Dot", pkg: "", typ: $funcType([Vector], [$Float64], false)}, {prop: "Cross", name: "Cross", pkg: "", typ: $funcType([Vector], [Vector], false)}, {prop: "Rotate", name: "Rotate", pkg: "", typ: $funcType([$Float64, sliceType$7], [Vector], true)}, {prop: "X", name: "X", pkg: "", typ: $funcType([], [$Float64], false)}, {prop: "Y", name: "Y", pkg: "", typ: $funcType([], [$Float64], false)}, {prop: "Z", name: "Z", pkg: "", typ: $funcType([], [$Float64], false)}]; + ptrType$1.methods = [{prop: "Add", name: "Add", pkg: "", typ: $funcType([sliceType$3], [], true)}, {prop: "Remove", name: "Remove", pkg: "", typ: $funcType([sliceType$3], [], true)}, {prop: "Objects", name: "Objects", pkg: "", typ: $funcType([], [sliceType$3], false)}, {prop: "Resize", name: "Resize", pkg: "", typ: $funcType([$Int, $Int], [], false)}, {prop: "Cell", name: "Cell", pkg: "", typ: $funcType([$Int, $Int], [ptrType], false)}, {prop: "CheckCells", name: "CheckCells", pkg: "", typ: $funcType([$Int, $Int, $Int, $Int, sliceType$6], [ptrType$2], true)}, {prop: "CheckCellsWorld", name: "CheckCellsWorld", pkg: "", typ: $funcType([$Float64, $Float64, $Float64, $Float64, sliceType$6], [ptrType$2], true)}, {prop: "UnregisterAllObjects", name: "UnregisterAllObjects", pkg: "", typ: $funcType([], [], false)}, {prop: "WorldToSpace", name: "WorldToSpace", pkg: "", typ: $funcType([$Float64, $Float64], [$Int, $Int], false)}, {prop: "SpaceToWorld", name: "SpaceToWorld", pkg: "", typ: $funcType([$Int, $Int], [$Float64, $Float64], false)}, {prop: "Height", name: "Height", pkg: "", typ: $funcType([], [$Int], false)}, {prop: "Width", name: "Width", pkg: "", typ: $funcType([], [$Int], false)}, {prop: "CellsInLine", name: "CellsInLine", pkg: "", typ: $funcType([$Int, $Int, $Int, $Int], [sliceType$1], false)}]; + ptrType$3.methods = [{prop: "Project", name: "Project", pkg: "", typ: $funcType([Vector], [Vector], false)}, {prop: "Normal", name: "Normal", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "Vector", name: "Vector", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "IntersectionPointsLine", name: "IntersectionPointsLine", pkg: "", typ: $funcType([ptrType$3], [Vector], false)}, {prop: "IntersectionPointsCircle", name: "IntersectionPointsCircle", pkg: "", typ: $funcType([ptrType$4], [sliceType$4], false)}]; + ptrType$5.methods = [{prop: "Clone", name: "Clone", pkg: "", typ: $funcType([], [Shape], false)}, {prop: "AddPointsVec", name: "AddPointsVec", pkg: "", typ: $funcType([sliceType$4], [], true)}, {prop: "AddPoints", name: "AddPoints", pkg: "", typ: $funcType([sliceType], [], true)}, {prop: "Lines", name: "Lines", pkg: "", typ: $funcType([], [sliceType$5], false)}, {prop: "Transformed", name: "Transformed", pkg: "", typ: $funcType([], [sliceType$4], false)}, {prop: "Bounds", name: "Bounds", pkg: "", typ: $funcType([], [Vector, Vector], false)}, {prop: "Position", name: "Position", pkg: "", typ: $funcType([], [$Float64, $Float64], false)}, {prop: "SetPosition", name: "SetPosition", pkg: "", typ: $funcType([$Float64, $Float64], [], false)}, {prop: "SetPositionVec", name: "SetPositionVec", pkg: "", typ: $funcType([Vector], [], false)}, {prop: "Move", name: "Move", pkg: "", typ: $funcType([$Float64, $Float64], [], false)}, {prop: "MoveVec", name: "MoveVec", pkg: "", typ: $funcType([Vector], [], false)}, {prop: "Center", name: "Center", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "Project", name: "Project", pkg: "", typ: $funcType([Vector], [Projection], false)}, {prop: "SATAxes", name: "SATAxes", pkg: "", typ: $funcType([], [sliceType$4], false)}, {prop: "PointInside", name: "PointInside", pkg: "", typ: $funcType([Vector], [$Bool], false)}, {prop: "Intersection", name: "Intersection", pkg: "", typ: $funcType([$Float64, $Float64, Shape], [ptrType$6], false)}, {prop: "calculateMTV", name: "calculateMTV", pkg: "resolv", typ: $funcType([ptrType$6, Shape], [Vector], false)}, {prop: "ContainedBy", name: "ContainedBy", pkg: "", typ: $funcType([Shape], [$Bool], false)}, {prop: "FlipH", name: "FlipH", pkg: "", typ: $funcType([], [], false)}, {prop: "FlipV", name: "FlipV", pkg: "", typ: $funcType([], [], false)}, {prop: "ReverseVertexOrder", name: "ReverseVertexOrder", pkg: "", typ: $funcType([], [], false)}]; + ptrType$6.methods = [{prop: "LeftmostPoint", name: "LeftmostPoint", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "RightmostPoint", name: "RightmostPoint", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "TopmostPoint", name: "TopmostPoint", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "BottommostPoint", name: "BottommostPoint", pkg: "", typ: $funcType([], [Vector], false)}]; + ptrType$4.methods = [{prop: "Clone", name: "Clone", pkg: "", typ: $funcType([], [Shape], false)}, {prop: "Bounds", name: "Bounds", pkg: "", typ: $funcType([], [Vector, Vector], false)}, {prop: "Intersection", name: "Intersection", pkg: "", typ: $funcType([$Float64, $Float64, Shape], [ptrType$6], false)}, {prop: "Move", name: "Move", pkg: "", typ: $funcType([$Float64, $Float64], [], false)}, {prop: "MoveVec", name: "MoveVec", pkg: "", typ: $funcType([Vector], [], false)}, {prop: "SetPosition", name: "SetPosition", pkg: "", typ: $funcType([$Float64, $Float64], [], false)}, {prop: "SetPositionVec", name: "SetPositionVec", pkg: "", typ: $funcType([Vector], [], false)}, {prop: "Position", name: "Position", pkg: "", typ: $funcType([], [$Float64, $Float64], false)}, {prop: "PointInside", name: "PointInside", pkg: "", typ: $funcType([Vector], [$Bool], false)}, {prop: "IntersectionPointsCircle", name: "IntersectionPointsCircle", pkg: "", typ: $funcType([ptrType$4], [sliceType$4], false)}]; + Projection.methods = [{prop: "Overlapping", name: "Overlapping", pkg: "", typ: $funcType([Projection], [$Bool], false)}, {prop: "Overlap", name: "Overlap", pkg: "", typ: $funcType([Projection], [$Float64], false)}, {prop: "IsInside", name: "IsInside", pkg: "", typ: $funcType([Projection], [$Bool], false)}]; + ptrType$2.methods = [{prop: "Clone", name: "Clone", pkg: "", typ: $funcType([], [ptrType$2], false)}, {prop: "Update", name: "Update", pkg: "", typ: $funcType([], [], false)}, {prop: "AddTags", name: "AddTags", pkg: "", typ: $funcType([sliceType$6], [], true)}, {prop: "RemoveTags", name: "RemoveTags", pkg: "", typ: $funcType([sliceType$6], [], true)}, {prop: "HasTags", name: "HasTags", pkg: "", typ: $funcType([sliceType$6], [$Bool], true)}, {prop: "Tags", name: "Tags", pkg: "", typ: $funcType([], [sliceType$6], false)}, {prop: "SetShape", name: "SetShape", pkg: "", typ: $funcType([Shape], [], false)}, {prop: "BoundsToSpace", name: "BoundsToSpace", pkg: "", typ: $funcType([$Float64, $Float64], [$Int, $Int, $Int, $Int], false)}, {prop: "SharesCells", name: "SharesCells", pkg: "", typ: $funcType([ptrType$2], [$Bool], false)}, {prop: "SharesCellsTags", name: "SharesCellsTags", pkg: "", typ: $funcType([sliceType$6], [$Bool], true)}, {prop: "Center", name: "Center", pkg: "", typ: $funcType([], [$Float64, $Float64], false)}, {prop: "SetCenter", name: "SetCenter", pkg: "", typ: $funcType([$Float64, $Float64], [], false)}, {prop: "CellPosition", name: "CellPosition", pkg: "", typ: $funcType([], [$Int, $Int], false)}, {prop: "SetRight", name: "SetRight", pkg: "", typ: $funcType([$Float64], [], false)}, {prop: "SetBottom", name: "SetBottom", pkg: "", typ: $funcType([$Float64], [], false)}, {prop: "Bottom", name: "Bottom", pkg: "", typ: $funcType([], [$Float64], false)}, {prop: "Right", name: "Right", pkg: "", typ: $funcType([], [$Float64], false)}, {prop: "SetBounds", name: "SetBounds", pkg: "", typ: $funcType([Vector, Vector], [], false)}, {prop: "Check", name: "Check", pkg: "", typ: $funcType([$Float64, $Float64, sliceType$6], [ptrType$7], true)}, {prop: "Overlaps", name: "Overlaps", pkg: "", typ: $funcType([ptrType$2], [$Bool], false)}, {prop: "AddToIgnoreList", name: "AddToIgnoreList", pkg: "", typ: $funcType([ptrType$2], [], false)}, {prop: "RemoveFromIgnoreList", name: "RemoveFromIgnoreList", pkg: "", typ: $funcType([ptrType$2], [], false)}]; + ptrType$7.methods = [{prop: "HasTags", name: "HasTags", pkg: "", typ: $funcType([sliceType$6], [$Bool], true)}, {prop: "ObjectsByTags", name: "ObjectsByTags", pkg: "", typ: $funcType([sliceType$6], [sliceType$3], true)}, {prop: "ContactWithObject", name: "ContactWithObject", pkg: "", typ: $funcType([ptrType$2], [Vector], false)}, {prop: "ContactWithCell", name: "ContactWithCell", pkg: "", typ: $funcType([ptrType], [Vector], false)}, {prop: "SlideAgainstCell", name: "SlideAgainstCell", pkg: "", typ: $funcType([ptrType, sliceType$6], [Vector], true)}]; + ptrType.methods = [{prop: "register", name: "register", pkg: "resolv", typ: $funcType([ptrType$2], [], false)}, {prop: "unregister", name: "unregister", pkg: "resolv", typ: $funcType([ptrType$2], [], false)}, {prop: "Contains", name: "Contains", pkg: "", typ: $funcType([ptrType$2], [$Bool], false)}, {prop: "ContainsTags", name: "ContainsTags", pkg: "", typ: $funcType([sliceType$6], [$Bool], true)}, {prop: "Occupied", name: "Occupied", pkg: "", typ: $funcType([], [$Bool], false)}]; + Vector.init($Float64); + Space.init("", [{prop: "Cells", name: "Cells", embedded: false, exported: true, typ: sliceType$2, tag: ""}, {prop: "CellWidth", name: "CellWidth", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "CellHeight", name: "CellHeight", embedded: false, exported: true, typ: $Int, tag: ""}]); + Shape.init([{prop: "Bounds", name: "Bounds", pkg: "", typ: $funcType([], [Vector, Vector], false)}, {prop: "Clone", name: "Clone", pkg: "", typ: $funcType([], [Shape], false)}, {prop: "Intersection", name: "Intersection", pkg: "", typ: $funcType([$Float64, $Float64, Shape], [ptrType$6], false)}, {prop: "Position", name: "Position", pkg: "", typ: $funcType([], [$Float64, $Float64], false)}, {prop: "SetPosition", name: "SetPosition", pkg: "", typ: $funcType([$Float64, $Float64], [], false)}]); + Line.init("", [{prop: "Start", name: "Start", embedded: false, exported: true, typ: Vector, tag: ""}, {prop: "End", name: "End", embedded: false, exported: true, typ: Vector, tag: ""}]); + ConvexPolygon.init("", [{prop: "Points", name: "Points", embedded: false, exported: true, typ: sliceType$4, tag: ""}, {prop: "X", name: "X", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Closed", name: "Closed", embedded: false, exported: true, typ: $Bool, tag: ""}]); + ContactSet.init("", [{prop: "Points", name: "Points", embedded: false, exported: true, typ: sliceType$4, tag: ""}, {prop: "MTV", name: "MTV", embedded: false, exported: true, typ: Vector, tag: ""}, {prop: "Center", name: "Center", embedded: false, exported: true, typ: Vector, tag: ""}]); + Circle.init("", [{prop: "X", name: "X", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Radius", name: "Radius", embedded: false, exported: true, typ: $Float64, tag: ""}]); + Projection.init("", [{prop: "Min", name: "Min", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Max", name: "Max", embedded: false, exported: true, typ: $Float64, tag: ""}]); + Object.init("resolv", [{prop: "Shape", name: "Shape", embedded: false, exported: true, typ: Shape, tag: ""}, {prop: "Space", name: "Space", embedded: false, exported: true, typ: ptrType$1, tag: ""}, {prop: "X", name: "X", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "W", name: "W", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "H", name: "H", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "TouchingCells", name: "TouchingCells", embedded: false, exported: true, typ: sliceType$1, tag: ""}, {prop: "Data", name: "Data", embedded: false, exported: true, typ: $emptyInterface, tag: ""}, {prop: "ignoreList", name: "ignoreList", embedded: false, exported: false, typ: mapType, tag: ""}, {prop: "tags", name: "tags", embedded: false, exported: false, typ: sliceType$6, tag: ""}]); + Collision.init("resolv", [{prop: "checkingObject", name: "checkingObject", embedded: false, exported: false, typ: ptrType$2, tag: ""}, {prop: "dx", name: "dx", embedded: false, exported: false, typ: $Float64, tag: ""}, {prop: "dy", name: "dy", embedded: false, exported: false, typ: $Float64, tag: ""}, {prop: "Objects", name: "Objects", embedded: false, exported: true, typ: sliceType$3, tag: ""}, {prop: "Cells", name: "Cells", embedded: false, exported: true, typ: sliceType$1, tag: ""}]); + Cell.init("", [{prop: "X", name: "X", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "Objects", name: "Objects", embedded: false, exported: true, typ: sliceType$3, tag: ""}]); + $init = function() { + $pkg.$init = function() {}; + /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: + $r = math.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; + }; + $pkg.$init = $init; + return $pkg; +})(); +$packages["jsexport/battle"] = (function() { + var $pkg = {}, $init, math, resolv, Vec2D, Polygon2D, PlayerDownsync, InputFrameDecoded, Barrier, BulletConfig, BulletBattleAttr, MeleeBullet, FireballBullet, Skill, RoomDownsyncFrame, InputFrameDownsync, NpcPatrolCue, RingBuffer, SkillMapperType, CharacterConfig, SatResult, sliceType, sliceType$1, sliceType$2, ptrType, ptrType$1, ptrType$2, ptrType$3, ptrType$4, sliceType$3, sliceType$4, ptrType$5, ptrType$6, ptrType$7, ptrType$8, ptrType$9, ptrType$10, sliceType$5, sliceType$6, sliceType$7, sliceType$8, sliceType$9, sliceType$10, ptrType$11, sliceType$11, sliceType$12, ptrType$12, sliceType$13, ptrType$13, mapType, ptrType$14, skills, inAirSet, noOpSet, invinsibleSet, nonAttackingSet, NewRingBuffer, intAbs, ShouldGenerateInputFrameUpsync, ConvertToDelayedInputFrameId, ConvertToNoDelayInputFrameId, ConvertToFirstUsedRenderFrameId, ConvertToLastUsedRenderFrameId, decodeInput, calcPushbacks, isPolygonPairOverlapped, IsMeleeBulletActive, IsMeleeBulletAlive, IsFireballBulletActive, IsFireballBulletAlive, isPolygonPairSeparatedByDir, WorldToVirtualGridPos, VirtualGridToWorldPos, WorldToPolygonColliderBLPos, PolygonColliderBLToWorldPos, PolygonColliderBLToVirtualGridPos, calcHardPushbacksNorms, deriveOpPattern, ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame, GenerateRectCollider, generateRectColliderInCollisionSpace, GenerateConvexPolygonCollider, AlignPolygon2DToBoundingBox, NewMeleeBullet, NewFireballBullet; + math = $packages["math"]; + resolv = $packages["resolv"]; + Vec2D = $pkg.Vec2D = $newType(0, $kindStruct, "battle.Vec2D", true, "jsexport/battle", true, function(X_, Y_) { + this.$val = this; + if (arguments.length === 0) { + this.X = 0; + this.Y = 0; + return; + } + this.X = X_; + this.Y = Y_; + }); + Polygon2D = $pkg.Polygon2D = $newType(0, $kindStruct, "battle.Polygon2D", true, "jsexport/battle", true, function(Anchor_, Points_) { + this.$val = this; + if (arguments.length === 0) { + this.Anchor = ptrType$12.nil; + this.Points = sliceType$13.nil; + return; + } + this.Anchor = Anchor_; + this.Points = Points_; + }); + PlayerDownsync = $pkg.PlayerDownsync = $newType(0, $kindStruct, "battle.PlayerDownsync", true, "jsexport/battle", true, function(Id_, VirtualGridX_, VirtualGridY_, DirX_, DirY_, VelX_, VelY_, Speed_, BattleState_, JoinIndex_, ColliderRadius_, Removed_, Score_, LastMoveGmtMillis_, FramesToRecover_, FramesInChState_, Hp_, MaxHp_, CharacterState_, InAir_, OnWall_, OnWallNormX_, OnWallNormY_, ActiveSkillId_, ActiveSkillHit_, FramesInvinsible_, BulletTeamId_, ChCollisionTeamId_) { + this.$val = this; + if (arguments.length === 0) { + this.Id = 0; + this.VirtualGridX = 0; + this.VirtualGridY = 0; + this.DirX = 0; + this.DirY = 0; + this.VelX = 0; + this.VelY = 0; + this.Speed = 0; + this.BattleState = 0; + this.JoinIndex = 0; + this.ColliderRadius = 0; + this.Removed = false; + this.Score = 0; + this.LastMoveGmtMillis = 0; + this.FramesToRecover = 0; + this.FramesInChState = 0; + this.Hp = 0; + this.MaxHp = 0; + this.CharacterState = 0; + this.InAir = false; + this.OnWall = false; + this.OnWallNormX = 0; + this.OnWallNormY = 0; + this.ActiveSkillId = 0; + this.ActiveSkillHit = 0; + this.FramesInvinsible = 0; + this.BulletTeamId = 0; + this.ChCollisionTeamId = 0; + return; + } + this.Id = Id_; + this.VirtualGridX = VirtualGridX_; + this.VirtualGridY = VirtualGridY_; + this.DirX = DirX_; + this.DirY = DirY_; + this.VelX = VelX_; + this.VelY = VelY_; + this.Speed = Speed_; + this.BattleState = BattleState_; + this.JoinIndex = JoinIndex_; + this.ColliderRadius = ColliderRadius_; + this.Removed = Removed_; + this.Score = Score_; + this.LastMoveGmtMillis = LastMoveGmtMillis_; + this.FramesToRecover = FramesToRecover_; + this.FramesInChState = FramesInChState_; + this.Hp = Hp_; + this.MaxHp = MaxHp_; + this.CharacterState = CharacterState_; + this.InAir = InAir_; + this.OnWall = OnWall_; + this.OnWallNormX = OnWallNormX_; + this.OnWallNormY = OnWallNormY_; + this.ActiveSkillId = ActiveSkillId_; + this.ActiveSkillHit = ActiveSkillHit_; + this.FramesInvinsible = FramesInvinsible_; + this.BulletTeamId = BulletTeamId_; + this.ChCollisionTeamId = ChCollisionTeamId_; + }); + InputFrameDecoded = $pkg.InputFrameDecoded = $newType(0, $kindStruct, "battle.InputFrameDecoded", true, "jsexport/battle", true, function(Dx_, Dy_, BtnALevel_, BtnBLevel_) { + this.$val = this; + if (arguments.length === 0) { + this.Dx = 0; + this.Dy = 0; + this.BtnALevel = 0; + this.BtnBLevel = 0; + return; + } + this.Dx = Dx_; + this.Dy = Dy_; + this.BtnALevel = BtnALevel_; + this.BtnBLevel = BtnBLevel_; + }); + Barrier = $pkg.Barrier = $newType(0, $kindStruct, "battle.Barrier", true, "jsexport/battle", true, function(Boundary_) { + this.$val = this; + if (arguments.length === 0) { + this.Boundary = ptrType$13.nil; + return; + } + this.Boundary = Boundary_; + }); + BulletConfig = $pkg.BulletConfig = $newType(0, $kindStruct, "battle.BulletConfig", true, "jsexport/battle", true, function(StartupFrames_, CancellableStFrame_, CancellableEdFrame_, ActiveFrames_, HitStunFrames_, BlockStunFrames_, PushbackVelX_, PushbackVelY_, Damage_, SelfLockVelX_, SelfLockVelY_, HitboxOffsetX_, HitboxOffsetY_, HitboxSizeX_, HitboxSizeY_, BlowUp_, ExplosionFrames_, SpeciesId_, CancelTransit_) { + this.$val = this; + if (arguments.length === 0) { + this.StartupFrames = 0; + this.CancellableStFrame = 0; + this.CancellableEdFrame = 0; + this.ActiveFrames = 0; + this.HitStunFrames = 0; + this.BlockStunFrames = 0; + this.PushbackVelX = 0; + this.PushbackVelY = 0; + this.Damage = 0; + this.SelfLockVelX = 0; + this.SelfLockVelY = 0; + this.HitboxOffsetX = 0; + this.HitboxOffsetY = 0; + this.HitboxSizeX = 0; + this.HitboxSizeY = 0; + this.BlowUp = false; + this.ExplosionFrames = 0; + this.SpeciesId = 0; + this.CancelTransit = false; + return; + } + this.StartupFrames = StartupFrames_; + this.CancellableStFrame = CancellableStFrame_; + this.CancellableEdFrame = CancellableEdFrame_; + this.ActiveFrames = ActiveFrames_; + this.HitStunFrames = HitStunFrames_; + this.BlockStunFrames = BlockStunFrames_; + this.PushbackVelX = PushbackVelX_; + this.PushbackVelY = PushbackVelY_; + this.Damage = Damage_; + this.SelfLockVelX = SelfLockVelX_; + this.SelfLockVelY = SelfLockVelY_; + this.HitboxOffsetX = HitboxOffsetX_; + this.HitboxOffsetY = HitboxOffsetY_; + this.HitboxSizeX = HitboxSizeX_; + this.HitboxSizeY = HitboxSizeY_; + this.BlowUp = BlowUp_; + this.ExplosionFrames = ExplosionFrames_; + this.SpeciesId = SpeciesId_; + this.CancelTransit = CancelTransit_; + }); + BulletBattleAttr = $pkg.BulletBattleAttr = $newType(0, $kindStruct, "battle.BulletBattleAttr", true, "jsexport/battle", true, function(BulletLocalId_, OriginatedRenderFrameId_, OffenderJoinIndex_, TeamId_) { + this.$val = this; + if (arguments.length === 0) { + this.BulletLocalId = 0; + this.OriginatedRenderFrameId = 0; + this.OffenderJoinIndex = 0; + this.TeamId = 0; + return; + } + this.BulletLocalId = BulletLocalId_; + this.OriginatedRenderFrameId = OriginatedRenderFrameId_; + this.OffenderJoinIndex = OffenderJoinIndex_; + this.TeamId = TeamId_; + }); + MeleeBullet = $pkg.MeleeBullet = $newType(0, $kindStruct, "battle.MeleeBullet", true, "jsexport/battle", true, function(BlState_, FramesInBlState_, BattleAttr_, Bullet_) { + this.$val = this; + if (arguments.length === 0) { + this.BlState = 0; + this.FramesInBlState = 0; + this.BattleAttr = ptrType.nil; + this.Bullet = ptrType$1.nil; + return; + } + this.BlState = BlState_; + this.FramesInBlState = FramesInBlState_; + this.BattleAttr = BattleAttr_; + this.Bullet = Bullet_; + }); + FireballBullet = $pkg.FireballBullet = $newType(0, $kindStruct, "battle.FireballBullet", true, "jsexport/battle", true, function(VirtualGridX_, VirtualGridY_, DirX_, DirY_, VelX_, VelY_, Speed_, BlState_, FramesInBlState_, BattleAttr_, Bullet_) { + this.$val = this; + if (arguments.length === 0) { + this.VirtualGridX = 0; + this.VirtualGridY = 0; + this.DirX = 0; + this.DirY = 0; + this.VelX = 0; + this.VelY = 0; + this.Speed = 0; + this.BlState = 0; + this.FramesInBlState = 0; + this.BattleAttr = ptrType.nil; + this.Bullet = ptrType$1.nil; + return; + } + this.VirtualGridX = VirtualGridX_; + this.VirtualGridY = VirtualGridY_; + this.DirX = DirX_; + this.DirY = DirY_; + this.VelX = VelX_; + this.VelY = VelY_; + this.Speed = Speed_; + this.BlState = BlState_; + this.FramesInBlState = FramesInBlState_; + this.BattleAttr = BattleAttr_; + this.Bullet = Bullet_; + }); + Skill = $pkg.Skill = $newType(0, $kindStruct, "battle.Skill", true, "jsexport/battle", true, function(BattleLocalId_, RecoveryFrames_, RecoveryFramesOnBlock_, RecoveryFramesOnHit_, ReleaseTriggerType_, BoundChState_, Hits_) { + this.$val = this; + if (arguments.length === 0) { + this.BattleLocalId = 0; + this.RecoveryFrames = 0; + this.RecoveryFramesOnBlock = 0; + this.RecoveryFramesOnHit = 0; + this.ReleaseTriggerType = 0; + this.BoundChState = 0; + this.Hits = sliceType$2.nil; + return; + } + this.BattleLocalId = BattleLocalId_; + this.RecoveryFrames = RecoveryFrames_; + this.RecoveryFramesOnBlock = RecoveryFramesOnBlock_; + this.RecoveryFramesOnHit = RecoveryFramesOnHit_; + this.ReleaseTriggerType = ReleaseTriggerType_; + this.BoundChState = BoundChState_; + this.Hits = Hits_; + }); + RoomDownsyncFrame = $pkg.RoomDownsyncFrame = $newType(0, $kindStruct, "battle.RoomDownsyncFrame", true, "jsexport/battle", true, function(Id_, PlayersArr_, CountdownNanos_, MeleeBullets_, FireballBullets_, BackendUnconfirmedMask_, ShouldForceResync_, BulletLocalIdCounter_) { + this.$val = this; + if (arguments.length === 0) { + this.Id = 0; + this.PlayersArr = sliceType$6.nil; + this.CountdownNanos = new $Int64(0, 0); + this.MeleeBullets = sliceType$7.nil; + this.FireballBullets = sliceType$8.nil; + this.BackendUnconfirmedMask = new $Uint64(0, 0); + this.ShouldForceResync = false; + this.BulletLocalIdCounter = 0; + return; + } + this.Id = Id_; + this.PlayersArr = PlayersArr_; + this.CountdownNanos = CountdownNanos_; + this.MeleeBullets = MeleeBullets_; + this.FireballBullets = FireballBullets_; + this.BackendUnconfirmedMask = BackendUnconfirmedMask_; + this.ShouldForceResync = ShouldForceResync_; + this.BulletLocalIdCounter = BulletLocalIdCounter_; + }); + InputFrameDownsync = $pkg.InputFrameDownsync = $newType(0, $kindStruct, "battle.InputFrameDownsync", true, "jsexport/battle", true, function(InputFrameId_, InputList_, ConfirmedList_) { + this.$val = this; + if (arguments.length === 0) { + this.InputFrameId = 0; + this.InputList = sliceType$5.nil; + this.ConfirmedList = new $Uint64(0, 0); + return; + } + this.InputFrameId = InputFrameId_; + this.InputList = InputList_; + this.ConfirmedList = ConfirmedList_; + }); + NpcPatrolCue = $pkg.NpcPatrolCue = $newType(0, $kindStruct, "battle.NpcPatrolCue", true, "jsexport/battle", true, function(FlAct_, FrAct_, X_, Y_) { + this.$val = this; + if (arguments.length === 0) { + this.FlAct = new $Uint64(0, 0); + this.FrAct = new $Uint64(0, 0); + this.X = 0; + this.Y = 0; + return; + } + this.FlAct = FlAct_; + this.FrAct = FrAct_; + this.X = X_; + this.Y = Y_; + }); + RingBuffer = $pkg.RingBuffer = $newType(0, $kindStruct, "battle.RingBuffer", true, "jsexport/battle", true, function(Ed_, St_, EdFrameId_, StFrameId_, N_, Cnt_, Eles_) { + this.$val = this; + if (arguments.length === 0) { + this.Ed = 0; + this.St = 0; + this.EdFrameId = 0; + this.StFrameId = 0; + this.N = 0; + this.Cnt = 0; + this.Eles = sliceType$2.nil; + return; + } + this.Ed = Ed_; + this.St = St_; + this.EdFrameId = EdFrameId_; + this.StFrameId = StFrameId_; + this.N = N_; + this.Cnt = Cnt_; + this.Eles = Eles_; + }); + SkillMapperType = $pkg.SkillMapperType = $newType(4, $kindFunc, "battle.SkillMapperType", true, "jsexport/battle", true, null); + CharacterConfig = $pkg.CharacterConfig = $newType(0, $kindStruct, "battle.CharacterConfig", true, "jsexport/battle", true, function(SpeciesId_, SpeciesName_, InAirIdleFrameIdxTurningPoint_, InAirIdleFrameIdxTurnedCycle_, LayDownFrames_, LayDownFramesToRecover_, GetUpInvinsibleFrames_, GetUpFramesToRecover_, Speed_, JumpingInitVelY_, DashingEnabled_, OnWallEnabled_, WallJumpingFramesToRecover_, WallJumpingInitVelX_, WallJumpingInitVelY_, WallSlidingVelY_, SkillMapper_) { + this.$val = this; + if (arguments.length === 0) { + this.SpeciesId = 0; + this.SpeciesName = ""; + this.InAirIdleFrameIdxTurningPoint = 0; + this.InAirIdleFrameIdxTurnedCycle = 0; + this.LayDownFrames = 0; + this.LayDownFramesToRecover = 0; + this.GetUpInvinsibleFrames = 0; + this.GetUpFramesToRecover = 0; + this.Speed = 0; + this.JumpingInitVelY = 0; + this.DashingEnabled = false; + this.OnWallEnabled = false; + this.WallJumpingFramesToRecover = 0; + this.WallJumpingInitVelX = 0; + this.WallJumpingInitVelY = 0; + this.WallSlidingVelY = 0; + this.SkillMapper = $throwNilPointerError; + return; + } + this.SpeciesId = SpeciesId_; + this.SpeciesName = SpeciesName_; + this.InAirIdleFrameIdxTurningPoint = InAirIdleFrameIdxTurningPoint_; + this.InAirIdleFrameIdxTurnedCycle = InAirIdleFrameIdxTurnedCycle_; + this.LayDownFrames = LayDownFrames_; + this.LayDownFramesToRecover = LayDownFramesToRecover_; + this.GetUpInvinsibleFrames = GetUpInvinsibleFrames_; + this.GetUpFramesToRecover = GetUpFramesToRecover_; + this.Speed = Speed_; + this.JumpingInitVelY = JumpingInitVelY_; + this.DashingEnabled = DashingEnabled_; + this.OnWallEnabled = OnWallEnabled_; + this.WallJumpingFramesToRecover = WallJumpingFramesToRecover_; + this.WallJumpingInitVelX = WallJumpingInitVelX_; + this.WallJumpingInitVelY = WallJumpingInitVelY_; + this.WallSlidingVelY = WallSlidingVelY_; + this.SkillMapper = SkillMapper_; + }); + SatResult = $pkg.SatResult = $newType(0, $kindStruct, "battle.SatResult", true, "jsexport/battle", true, function(Overlap_, OverlapX_, OverlapY_, AContainedInB_, BContainedInA_, Axis_) { + this.$val = this; + if (arguments.length === 0) { + this.Overlap = 0; + this.OverlapX = 0; + this.OverlapY = 0; + this.AContainedInB = false; + this.BContainedInA = false; + this.Axis = resolv.Vector.nil; + return; + } + this.Overlap = Overlap_; + this.OverlapX = OverlapX_; + this.OverlapY = OverlapY_; + this.AContainedInB = AContainedInB_; + this.BContainedInA = BContainedInA_; + this.Axis = Axis_; + }); + sliceType = $sliceType($Int32); + sliceType$1 = $sliceType(sliceType); + sliceType$2 = $sliceType($emptyInterface); + ptrType = $ptrType(BulletBattleAttr); + ptrType$1 = $ptrType(BulletConfig); + ptrType$2 = $ptrType(Skill); + ptrType$3 = $ptrType(MeleeBullet); + ptrType$4 = $ptrType(SatResult); + sliceType$3 = $sliceType(Vec2D); + sliceType$4 = $sliceType($String); + ptrType$5 = $ptrType(resolv.Collision); + ptrType$6 = $ptrType(sliceType$3); + ptrType$7 = $ptrType(PlayerDownsync); + ptrType$8 = $ptrType(FireballBullet); + ptrType$9 = $ptrType(resolv.ConvexPolygon); + ptrType$10 = $ptrType(InputFrameDownsync); + sliceType$5 = $sliceType($Uint64); + sliceType$6 = $sliceType(ptrType$7); + sliceType$7 = $sliceType(ptrType$3); + sliceType$8 = $sliceType(ptrType$8); + sliceType$9 = $sliceType(ptrType$6); + sliceType$10 = $sliceType($Bool); + ptrType$11 = $ptrType(resolv.Object); + sliceType$11 = $sliceType(ptrType$11); + sliceType$12 = $sliceType($Float64); + ptrType$12 = $ptrType(Vec2D); + sliceType$13 = $sliceType(ptrType$12); + ptrType$13 = $ptrType(Polygon2D); + mapType = $mapType($Int, $Int); + ptrType$14 = $ptrType(RingBuffer); + NewRingBuffer = function(n) { + var n; + return new RingBuffer.ptr(0, 0, 0, 0, n, 0, $makeSlice(sliceType$2, n)); + }; + $pkg.NewRingBuffer = NewRingBuffer; + RingBuffer.ptr.prototype.Put = function(pItem) { + var pItem, rb, x, x$1; + rb = this; + while (true) { + if (!(0 < rb.Cnt && rb.Cnt >= rb.N)) { break; } + rb.Pop(); + } + (x = rb.Eles, x$1 = rb.Ed, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1] = pItem)); + rb.EdFrameId = rb.EdFrameId + (1) >> 0; + rb.Cnt = rb.Cnt + (1) >> 0; + rb.Ed = rb.Ed + (1) >> 0; + if (rb.Ed >= rb.N) { + rb.Ed = rb.Ed - (rb.N) >> 0; + } + }; + RingBuffer.prototype.Put = function(pItem) { return this.$val.Put(pItem); }; + RingBuffer.ptr.prototype.Pop = function() { + var pItem, rb, x, x$1; + rb = this; + if (0 === rb.Cnt) { + return $ifaceNil; + } + pItem = (x = rb.Eles, x$1 = rb.St, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1])); + rb.StFrameId = rb.StFrameId + (1) >> 0; + rb.Cnt = rb.Cnt - (1) >> 0; + rb.St = rb.St + (1) >> 0; + if (rb.St >= rb.N) { + rb.St = rb.St - (rb.N) >> 0; + } + return pItem; + }; + RingBuffer.prototype.Pop = function() { return this.$val.Pop(); }; + RingBuffer.ptr.prototype.GetArrIdxByOffset = function(offsetFromSt) { + var arrIdx, offsetFromSt, rb; + rb = this; + if ((0 === rb.Cnt) || 0 > offsetFromSt) { + return -1; + } + arrIdx = rb.St + offsetFromSt >> 0; + if (rb.St < rb.Ed) { + if (rb.St <= arrIdx && arrIdx < rb.Ed) { + return arrIdx; + } + } else { + if (arrIdx >= rb.N) { + arrIdx = arrIdx - (rb.N) >> 0; + } + if (arrIdx >= rb.St || arrIdx < rb.Ed) { + return arrIdx; + } + } + return -1; + }; + RingBuffer.prototype.GetArrIdxByOffset = function(offsetFromSt) { return this.$val.GetArrIdxByOffset(offsetFromSt); }; + RingBuffer.ptr.prototype.GetByOffset = function(offsetFromSt) { + var arrIdx, offsetFromSt, rb, x; + rb = this; + arrIdx = rb.GetArrIdxByOffset(offsetFromSt); + if (-1 === arrIdx) { + return $ifaceNil; + } + return (x = rb.Eles, ((arrIdx < 0 || arrIdx >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + arrIdx])); + }; + RingBuffer.prototype.GetByOffset = function(offsetFromSt) { return this.$val.GetByOffset(offsetFromSt); }; + RingBuffer.ptr.prototype.GetByFrameId = function(frameId) { + var frameId, rb; + rb = this; + if (frameId >= rb.EdFrameId || frameId < rb.StFrameId) { + return $ifaceNil; + } + return rb.GetByOffset(frameId - rb.StFrameId >> 0); + }; + RingBuffer.prototype.GetByFrameId = function(frameId) { return this.$val.GetByFrameId(frameId); }; + RingBuffer.ptr.prototype.SetByFrameId = function(pItem, frameId) { + var _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, arrIdx, frameId, oldEdFrameId, oldStFrameId, pItem, rb, ret, x; + rb = this; + _tmp = rb.StFrameId; + _tmp$1 = rb.EdFrameId; + oldStFrameId = _tmp; + oldEdFrameId = _tmp$1; + if (frameId < oldStFrameId) { + return [2, oldStFrameId, oldEdFrameId]; + } + if (oldEdFrameId > frameId) { + arrIdx = rb.GetArrIdxByOffset(frameId - rb.StFrameId >> 0); + if (!((-1 === arrIdx))) { + (x = rb.Eles, ((arrIdx < 0 || arrIdx >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + arrIdx] = pItem)); + return [0, oldStFrameId, oldEdFrameId]; + } + } + ret = 0; + if (oldEdFrameId < frameId) { + _tmp$2 = 0; + _tmp$3 = 0; + rb.St = _tmp$2; + rb.Ed = _tmp$3; + _tmp$4 = frameId; + _tmp$5 = frameId; + rb.StFrameId = _tmp$4; + rb.EdFrameId = _tmp$5; + rb.Cnt = 0; + ret = 1; + } + rb.Put(pItem); + return [ret, oldStFrameId, oldEdFrameId]; + }; + RingBuffer.prototype.SetByFrameId = function(pItem, frameId) { return this.$val.SetByFrameId(pItem, frameId); }; + intAbs = function(x) { + var x; + if (x < 0) { + return -x; + } + return x; + }; + ShouldGenerateInputFrameUpsync = function(renderFrameId) { + var renderFrameId; + return (((renderFrameId & 3)) === 0); + }; + $pkg.ShouldGenerateInputFrameUpsync = ShouldGenerateInputFrameUpsync; + ConvertToDelayedInputFrameId = function(renderFrameId) { + var renderFrameId; + if (renderFrameId < 4) { + return 0; + } + return (((renderFrameId - 4 >> 0)) >> 2 >> 0); + }; + $pkg.ConvertToDelayedInputFrameId = ConvertToDelayedInputFrameId; + ConvertToNoDelayInputFrameId = function(renderFrameId) { + var renderFrameId; + return (renderFrameId >> 2 >> 0); + }; + $pkg.ConvertToNoDelayInputFrameId = ConvertToNoDelayInputFrameId; + ConvertToFirstUsedRenderFrameId = function(inputFrameId) { + var inputFrameId; + return (((inputFrameId << 2 >> 0)) + 4 >> 0); + }; + $pkg.ConvertToFirstUsedRenderFrameId = ConvertToFirstUsedRenderFrameId; + ConvertToLastUsedRenderFrameId = function(inputFrameId) { + var inputFrameId; + return (((((inputFrameId << 2 >> 0)) + 4 >> 0) + 4 >> 0) - 1 >> 0); + }; + $pkg.ConvertToLastUsedRenderFrameId = ConvertToLastUsedRenderFrameId; + decodeInput = function(encodedInput) { + var btnALevel, btnBLevel, encodedDirection, encodedInput, x, x$1, x$2, x$3; + encodedDirection = new $Uint64(encodedInput.$high & 0, (encodedInput.$low & 15) >>> 0); + btnALevel = (((x = $shiftRightUint64(encodedInput, 4), new $Uint64(x.$high & 0, (x.$low & 1) >>> 0)).$low >> 0)); + btnBLevel = (((x$1 = $shiftRightUint64(encodedInput, 5), new $Uint64(x$1.$high & 0, (x$1.$low & 1) >>> 0)).$low >> 0)); + return new InputFrameDecoded.ptr((x$2 = (($flatten64(encodedDirection) < 0 || $flatten64(encodedDirection) >= $pkg.DIRECTION_DECODER.$length) ? ($throwRuntimeError("index out of range"), undefined) : $pkg.DIRECTION_DECODER.$array[$pkg.DIRECTION_DECODER.$offset + $flatten64(encodedDirection)]), (0 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 0])), (x$3 = (($flatten64(encodedDirection) < 0 || $flatten64(encodedDirection) >= $pkg.DIRECTION_DECODER.$length) ? ($throwRuntimeError("index out of range"), undefined) : $pkg.DIRECTION_DECODER.$array[$pkg.DIRECTION_DECODER.$offset + $flatten64(encodedDirection)]), (1 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 1])), btnALevel, btnBLevel); + }; + calcPushbacks = function(oldDx, oldDy, playerShape, barrierShape) { + var {$24r, $24r$1, _tmp, _tmp$1, _tuple, barrierShape, oldDx, oldDy, origX, origY, overlapResult, overlapped, playerShape, pushbackX, pushbackY, $s, $deferred, $r, $c} = $restore(this, {oldDx, oldDy, playerShape, barrierShape}); + /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred); + origX = [origX]; + origY = [origY]; + playerShape = [playerShape]; + _tuple = playerShape[0].Position(); + origX[0] = _tuple[0]; + origY[0] = _tuple[1]; + $deferred.push([(function(origX, origY, playerShape) { return function() { + playerShape[0].SetPosition(origX[0], origY[0]); + }; })(origX, origY, playerShape), []]); + playerShape[0].SetPosition(origX[0] + oldDx, origY[0] + oldDy); + overlapResult = new SatResult.ptr(0, 0, 0, true, true, new resolv.Vector([0, 0])); + overlapped = isPolygonPairOverlapped(playerShape[0], barrierShape, overlapResult); + /* */ if (overlapped) { $s = 1; continue; } + /* */ $s = 2; continue; + /* if (overlapped) { */ case 1: + _tmp = overlapResult.Overlap * overlapResult.OverlapX; + _tmp$1 = overlapResult.Overlap * overlapResult.OverlapY; + pushbackX = _tmp; + pushbackY = _tmp$1; + $24r = [true, pushbackX, pushbackY, overlapResult]; + $s = 4; case 4: return $24r; + /* } else { */ case 2: + $24r$1 = [false, 0, 0, overlapResult]; + $s = 5; case 5: return $24r$1; + /* } */ case 3: + $s = -1; return [false, 0, 0, ptrType$4.nil]; + /* */ } return; } } catch(err) { $err = err; $s = -1; return [false, 0, 0, ptrType$4.nil]; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: calcPushbacks, $c: true, $r, $24r, $24r$1, _tmp, _tmp$1, _tuple, barrierShape, oldDx, oldDy, origX, origY, overlapResult, overlapped, playerShape, pushbackX, pushbackY, $s, $deferred};return $f; } } + }; + isPolygonPairOverlapped = function(a, b, result) { + var _i, _i$1, _ref, _ref$1, _tmp, _tmp$1, a, aCnt, axis, axis$1, b, bCnt, result, x, x$1, x$2, x$3, x$4, x$5, x$6, x$7; + _tmp = a.Points.$length; + _tmp$1 = b.Points.$length; + aCnt = _tmp; + bCnt = _tmp$1; + if ((1 === aCnt) && (1 === bCnt)) { + if (!(ptrType$4.nil === result)) { + result.Overlap = 0; + } + return ((x = (x$1 = a.Points, (0 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 0])), (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])) === (x$2 = (x$3 = b.Points, (0 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 0])), (0 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 0]))) && ((x$4 = (x$5 = a.Points, (0 >= x$5.$length ? ($throwRuntimeError("index out of range"), undefined) : x$5.$array[x$5.$offset + 0])), (1 >= x$4.$length ? ($throwRuntimeError("index out of range"), undefined) : x$4.$array[x$4.$offset + 1])) === (x$6 = (x$7 = b.Points, (0 >= x$7.$length ? ($throwRuntimeError("index out of range"), undefined) : x$7.$array[x$7.$offset + 0])), (1 >= x$6.$length ? ($throwRuntimeError("index out of range"), undefined) : x$6.$array[x$6.$offset + 1]))); + } + if (1 < aCnt) { + _ref = a.SATAxes(); + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + axis = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (isPolygonPairSeparatedByDir(a, b, axis.Unit(), result)) { + return false; + } + _i++; + } + } + if (1 < bCnt) { + _ref$1 = b.SATAxes(); + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + axis$1 = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + if (isPolygonPairSeparatedByDir(a, b, axis$1.Unit(), result)) { + return false; + } + _i$1++; + } + } + return true; + }; + IsMeleeBulletActive = function(meleeBullet, currRenderFrame) { + var currRenderFrame, meleeBullet; + if (2 === meleeBullet.BlState) { + return false; + } + return ((meleeBullet.BattleAttr.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) <= currRenderFrame.Id) && (((meleeBullet.BattleAttr.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) + meleeBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id); + }; + $pkg.IsMeleeBulletActive = IsMeleeBulletActive; + IsMeleeBulletAlive = function(meleeBullet, currRenderFrame) { + var currRenderFrame, meleeBullet; + if (2 === meleeBullet.BlState) { + return meleeBullet.FramesInBlState < meleeBullet.Bullet.ExplosionFrames; + } + return ((meleeBullet.BattleAttr.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) + meleeBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id; + }; + $pkg.IsMeleeBulletAlive = IsMeleeBulletAlive; + IsFireballBulletActive = function(fireballBullet, currRenderFrame) { + var currRenderFrame, fireballBullet; + if (2 === fireballBullet.BlState) { + return false; + } + return ((fireballBullet.BattleAttr.OriginatedRenderFrameId + fireballBullet.Bullet.StartupFrames >> 0) < currRenderFrame.Id) && (((fireballBullet.BattleAttr.OriginatedRenderFrameId + fireballBullet.Bullet.StartupFrames >> 0) + fireballBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id); + }; + $pkg.IsFireballBulletActive = IsFireballBulletActive; + IsFireballBulletAlive = function(fireballBullet, currRenderFrame) { + var currRenderFrame, fireballBullet; + if (2 === fireballBullet.BlState) { + return fireballBullet.FramesInBlState < fireballBullet.Bullet.ExplosionFrames; + } + return ((fireballBullet.BattleAttr.OriginatedRenderFrameId + fireballBullet.Bullet.StartupFrames >> 0) + fireballBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id; + }; + $pkg.IsFireballBulletAlive = IsFireballBulletAlive; + isPolygonPairSeparatedByDir = function(a, b, e, result) { + var _i, _i$1, _ref, _ref$1, _tmp, _tmp$1, _tmp$2, _tmp$3, a, aEnd, aStart, absoluteOverlap, b, bEnd, bStart, currentOverlap, dot, dot$1, e, option1, option1$1, option2, option2$1, overlap, p, p$1, result, sign, x, x$1; + _tmp = 1.7e+308; + _tmp$1 = -1.7e+308; + _tmp$2 = 1.7e+308; + _tmp$3 = -1.7e+308; + aStart = _tmp; + aEnd = _tmp$1; + bStart = _tmp$2; + bEnd = _tmp$3; + _ref = a.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + p = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + dot = ((0 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 0]) + a.X) * (0 >= e.$length ? ($throwRuntimeError("index out of range"), undefined) : e.$array[e.$offset + 0]) + ((1 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 1]) + a.Y) * (1 >= e.$length ? ($throwRuntimeError("index out of range"), undefined) : e.$array[e.$offset + 1]); + if (aStart > dot) { + aStart = dot; + } + if (aEnd < dot) { + aEnd = dot; + } + _i++; + } + _ref$1 = b.Points; + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + p$1 = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + dot$1 = ((0 >= p$1.$length ? ($throwRuntimeError("index out of range"), undefined) : p$1.$array[p$1.$offset + 0]) + b.X) * (0 >= e.$length ? ($throwRuntimeError("index out of range"), undefined) : e.$array[e.$offset + 0]) + ((1 >= p$1.$length ? ($throwRuntimeError("index out of range"), undefined) : p$1.$array[p$1.$offset + 1]) + b.Y) * (1 >= e.$length ? ($throwRuntimeError("index out of range"), undefined) : e.$array[e.$offset + 1]); + if (bStart > dot$1) { + bStart = dot$1; + } + if (bEnd < dot$1) { + bEnd = dot$1; + } + _i$1++; + } + if (aStart > bEnd || aEnd < bStart) { + return true; + } + if (!(ptrType$4.nil === result)) { + overlap = 0; + if (aStart < bStart) { + result.AContainedInB = false; + if (aEnd < bEnd) { + overlap = aEnd - bStart; + result.BContainedInA = false; + } else { + option1 = aEnd - bStart; + option2 = bEnd - aStart; + if (option1 < option2) { + overlap = option1; + } else { + overlap = -option2; + } + } + } else { + result.BContainedInA = false; + if (aEnd > bEnd) { + overlap = aStart - bEnd; + result.AContainedInB = false; + } else { + option1$1 = aEnd - bStart; + option2$1 = bEnd - aStart; + if (option1$1 < option2$1) { + overlap = option1$1; + } else { + overlap = -option2$1; + } + } + } + currentOverlap = result.Overlap; + absoluteOverlap = overlap; + if (overlap < 0) { + absoluteOverlap = -overlap; + } + if (((0 === (x = result.Axis, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0]))) && (0 === (x$1 = result.Axis, (1 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 1])))) || currentOverlap > absoluteOverlap) { + sign = 1; + if (overlap < 0) { + sign = -1; + } + result.Overlap = absoluteOverlap; + result.OverlapX = (0 >= e.$length ? ($throwRuntimeError("index out of range"), undefined) : e.$array[e.$offset + 0]) * sign; + result.OverlapY = (1 >= e.$length ? ($throwRuntimeError("index out of range"), undefined) : e.$array[e.$offset + 1]) * sign; + } + result.Axis = e; + } + return false; + }; + WorldToVirtualGridPos = function(wx, wy) { + var virtualGridX, virtualGridY, wx, wy; + virtualGridX = ((math.Round(wx * 100) >> 0)); + virtualGridY = ((math.Round(wy * 100) >> 0)); + return [virtualGridX, virtualGridY]; + }; + $pkg.WorldToVirtualGridPos = WorldToVirtualGridPos; + VirtualGridToWorldPos = function(vx, vy) { + var vx, vy, wx, wy; + wx = (vx) * 0.01; + wy = (vy) * 0.01; + return [wx, wy]; + }; + $pkg.VirtualGridToWorldPos = VirtualGridToWorldPos; + WorldToPolygonColliderBLPos = function(wx, wy, halfBoundingW, halfBoundingH, topPadding, bottomPadding, leftPadding, rightPadding, collisionSpaceOffsetX, collisionSpaceOffsetY) { + var bottomPadding, collisionSpaceOffsetX, collisionSpaceOffsetY, halfBoundingH, halfBoundingW, leftPadding, rightPadding, topPadding, wx, wy; + return [wx - halfBoundingW - leftPadding + collisionSpaceOffsetX, wy - halfBoundingH - bottomPadding + collisionSpaceOffsetY]; + }; + $pkg.WorldToPolygonColliderBLPos = WorldToPolygonColliderBLPos; + PolygonColliderBLToWorldPos = function(cx, cy, halfBoundingW, halfBoundingH, topPadding, bottomPadding, leftPadding, rightPadding, collisionSpaceOffsetX, collisionSpaceOffsetY) { + var bottomPadding, collisionSpaceOffsetX, collisionSpaceOffsetY, cx, cy, halfBoundingH, halfBoundingW, leftPadding, rightPadding, topPadding; + return [cx + halfBoundingW + leftPadding - collisionSpaceOffsetX, cy + halfBoundingH + bottomPadding - collisionSpaceOffsetY]; + }; + $pkg.PolygonColliderBLToWorldPos = PolygonColliderBLToWorldPos; + PolygonColliderBLToVirtualGridPos = function(cx, cy, halfBoundingW, halfBoundingH, topPadding, bottomPadding, leftPadding, rightPadding, collisionSpaceOffsetX, collisionSpaceOffsetY) { + var _tuple, bottomPadding, collisionSpaceOffsetX, collisionSpaceOffsetY, cx, cy, halfBoundingH, halfBoundingW, leftPadding, rightPadding, topPadding, wx, wy; + _tuple = PolygonColliderBLToWorldPos(cx, cy, halfBoundingW, halfBoundingH, topPadding, bottomPadding, leftPadding, rightPadding, collisionSpaceOffsetX, collisionSpaceOffsetY); + wx = _tuple[0]; + wy = _tuple[1]; + return WorldToVirtualGridPos(wx, wy); + }; + $pkg.PolygonColliderBLToVirtualGridPos = PolygonColliderBLToVirtualGridPos; + calcHardPushbacksNorms = function(joinIndex, currPlayerDownsync, thatPlayerInNextFrame, playerCollider, playerShape, snapIntoPlatformOverlap, pEffPushback) { + var {_i, _r, _ref, _ref$1, _tmp, _tmp$1, _tuple, barrierShape, collision, currPlayerDownsync, isBarrier, joinIndex, obj, overlapResult, overlapped, pEffPushback, playerCollider, playerShape, pushbackX, pushbackY, ret, snapIntoPlatformOverlap, thatPlayerInNextFrame, virtualGripToWall, xfac, $s, $r, $c} = $restore(this, {joinIndex, currPlayerDownsync, thatPlayerInNextFrame, playerCollider, playerShape, snapIntoPlatformOverlap, pEffPushback}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + ret = [ret]; + ret[0] = $makeSlice(sliceType$3, 0, 10); + virtualGripToWall = 0; + if ((16 === currPlayerDownsync.CharacterState) && (0 === thatPlayerInNextFrame.VelX) && (currPlayerDownsync.DirX === thatPlayerInNextFrame.DirX)) { + xfac = 1; + if (0 > thatPlayerInNextFrame.DirX) { + xfac = -xfac; + } + virtualGripToWall = xfac * (currPlayerDownsync.Speed) * 0.01; + } + collision = playerCollider.Check(virtualGripToWall, 0, new sliceType$4([])); + if (ptrType$5.nil === collision) { + $s = -1; return (ret.$ptr || (ret.$ptr = new ptrType$6(function() { return this.$target[0]; }, function($v) { this.$target[0] = $v; }, ret))); + } + _ref = collision.Objects; + _i = 0; + /* while (true) { */ case 1: + /* if (!(_i < _ref.$length)) { break; } */ if(!(_i < _ref.$length)) { $s = 2; continue; } + obj = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + isBarrier = false; + _ref$1 = obj.Data; + if ($assertType(_ref$1, ptrType$7, true)[1] || $assertType(_ref$1, ptrType$3, true)[1] || $assertType(_ref$1, ptrType$8, true)[1]) { + } else { + isBarrier = true; + } + if (!isBarrier) { + _i++; + /* continue; */ $s = 1; continue; + } + barrierShape = $assertType(obj.Shape, ptrType$9); + _r = calcPushbacks(0, 0, playerShape, barrierShape); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + _tuple = _r; + overlapped = _tuple[0]; + pushbackX = _tuple[1]; + pushbackY = _tuple[2]; + overlapResult = _tuple[3]; + if (!overlapped) { + _i++; + /* continue; */ $s = 1; continue; + } + _tmp = (overlapResult.Overlap - snapIntoPlatformOverlap) * overlapResult.OverlapX; + _tmp$1 = (overlapResult.Overlap - snapIntoPlatformOverlap) * overlapResult.OverlapY; + pushbackX = _tmp; + pushbackY = _tmp$1; + ret[0] = $append(ret[0], new Vec2D.ptr(overlapResult.OverlapX, overlapResult.OverlapY)); + pEffPushback.X = pEffPushback.X + (pushbackX); + pEffPushback.Y = pEffPushback.Y + (pushbackY); + _i++; + $s = 1; continue; + case 2: + $s = -1; return (ret.$ptr || (ret.$ptr = new ptrType$6(function() { return this.$target[0]; }, function($v) { this.$target[0] = $v; }, ret))); + /* */ } return; } var $f = {$blk: calcHardPushbacksNorms, $c: true, $r, _i, _r, _ref, _ref$1, _tmp, _tmp$1, _tuple, barrierShape, collision, currPlayerDownsync, isBarrier, joinIndex, obj, overlapResult, overlapped, pEffPushback, playerCollider, playerShape, pushbackX, pushbackY, ret, snapIntoPlatformOverlap, thatPlayerInNextFrame, virtualGripToWall, xfac, $s};return $f; + }; + deriveOpPattern = function(currPlayerDownsync, thatPlayerInNextFrame, currRenderFrame, inputsBuffer) { + var _entry, _entry$1, _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, _tuple, _tuple$1, currPlayerDownsync, currRenderFrame, decodedInput, delayedInputFrameId, delayedInputFrameIdForPrevRdf, delayedInputList, delayedInputListForPrevRdf, effDx, effDy, existent, existent$1, inputsBuffer, joinIndex, jumpedOrNot, patternId, prevBtnALevel, prevBtnBLevel, prevDecodedInput, thatPlayerInNextFrame, x, x$1; + delayedInputFrameId = ConvertToDelayedInputFrameId(currRenderFrame.Id); + delayedInputFrameIdForPrevRdf = ConvertToDelayedInputFrameId(currRenderFrame.Id - 1 >> 0); + if (0 >= delayedInputFrameId) { + return [-2, false, 0, 0]; + } + _tuple = (_entry = noOpSet[$Int32.keyFor(currPlayerDownsync.CharacterState)], _entry !== undefined ? [_entry.v, true] : [false, false]); + existent = _tuple[1]; + if (existent) { + return [-2, false, 0, 0]; + } + delayedInputList = $assertType(inputsBuffer.GetByFrameId(delayedInputFrameId), ptrType$10).InputList; + delayedInputListForPrevRdf = sliceType$5.nil; + if (0 < delayedInputFrameIdForPrevRdf) { + delayedInputListForPrevRdf = $assertType(inputsBuffer.GetByFrameId(delayedInputFrameIdForPrevRdf), ptrType$10).InputList; + } + jumpedOrNot = false; + joinIndex = currPlayerDownsync.JoinIndex; + decodedInput = decodeInput((x = joinIndex - 1 >> 0, ((x < 0 || x >= delayedInputList.$length) ? ($throwRuntimeError("index out of range"), undefined) : delayedInputList.$array[delayedInputList.$offset + x]))); + _tmp = 0; + _tmp$1 = 0; + effDx = _tmp; + effDy = _tmp$1; + _tmp$2 = 0; + _tmp$3 = 0; + prevBtnALevel = _tmp$2; + prevBtnBLevel = _tmp$3; + if (!(sliceType$5.nil === delayedInputListForPrevRdf)) { + prevDecodedInput = decodeInput((x$1 = joinIndex - 1 >> 0, ((x$1 < 0 || x$1 >= delayedInputListForPrevRdf.$length) ? ($throwRuntimeError("index out of range"), undefined) : delayedInputListForPrevRdf.$array[delayedInputListForPrevRdf.$offset + x$1]))); + prevBtnALevel = prevDecodedInput.BtnALevel; + prevBtnBLevel = prevDecodedInput.BtnBLevel; + } + if (0 === currPlayerDownsync.FramesToRecover) { + _tmp$4 = decodedInput.Dx; + _tmp$5 = decodedInput.Dy; + effDx = _tmp$4; + effDy = _tmp$5; + if (decodedInput.BtnBLevel > prevBtnBLevel) { + _tuple$1 = (_entry$1 = inAirSet[$Int32.keyFor(currPlayerDownsync.CharacterState)], _entry$1 !== undefined ? [_entry$1.v, true] : [false, false]); + existent$1 = _tuple$1[1]; + if (!existent$1) { + jumpedOrNot = true; + } else if (16 === currPlayerDownsync.CharacterState) { + jumpedOrNot = true; + } + } + } + patternId = -1; + if (0 < decodedInput.BtnALevel) { + if (decodedInput.BtnALevel > prevBtnALevel) { + if (0 > effDy) { + patternId = 3; + } else if (0 < effDy) { + patternId = 2; + } else { + patternId = 1; + } + } else { + patternId = 4; + } + } + return [patternId, jumpedOrNot, effDx, effDy]; + }; + ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame = function(inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex) { + var {_1, _2, _3, _entry, _entry$1, _entry$2, _entry$3, _entry$4, _entry$5, _i, _i$1, _i$10, _i$11, _i$12, _i$13, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _index$2, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _ref$14, _ref$15, _ref$16, _ref$17, _ref$18, _ref$19, _ref$2, _ref$3, _ref$4, _ref$5, _ref$6, _ref$7, _ref$8, _ref$9, _tmp, _tmp$1, _tmp$10, _tmp$11, _tmp$12, _tmp$13, _tmp$14, _tmp$15, _tmp$16, _tmp$17, _tmp$18, _tmp$19, _tmp$2, _tmp$20, _tmp$21, _tmp$22, _tmp$23, _tmp$24, _tmp$25, _tmp$26, _tmp$27, _tmp$28, _tmp$29, _tmp$3, _tmp$30, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$10, _tuple$11, _tuple$12, _tuple$13, _tuple$14, _tuple$15, _tuple$16, _tuple$17, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, atkedPlayerInNextFrame, atkedPlayerInNextFrame$1, bShape, bulletCollider, bulletColliders, bulletLocalId, bulletShape, bulletShape$1, bulletWx, bulletWx$1, bulletWy, bulletWy$1, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, colliderHeight, colliderWidth, colliderWorldHeight, colliderWorldWidth, collision, collision$1, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, defenderShape$1, effDx, effDy, effPushbacks, existent, existent$1, existent$2, existent$3, existent$4, existent$5, exploded, fallStopping, fireballBullet, halfColliderHeightDiff, halfColliderWidthDiff, halfColliderWorldHeightDiff, hardPushbackNorm, hardPushbackNorm$1, hardPushbackNorms, hasLockVel, hitboxSizeWx, hitboxSizeWx$1, hitboxSizeWy, hitboxSizeWy$1, i, i$1, i$2, i$3, i$4, inputsBuffer, isAnotherPlayer, isBarrier, isBullet, joinIndex, joinIndex$1, joinIndex$2, joinIndex$3, jumpedOrNot, jumpedOrNotList, landedOnGravityPushback, meleeBullet, newBullet, newBullet$1, newBulletCollider, newBulletCollider$1, newVx, newVy, nextRenderFrameFireballBullets, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, normAlignmentWithHorizon1, normAlignmentWithHorizon2, obj, obj$1, obj$2, offender, offender$1, offender$2, oldFramesToRecover, oldFramesToRecover$1, oldNextCharacterState, overlapResult, overlapped, overlapped$1, overlapped$2, patternId, playerCollider, playerCollider$1, playerCollider$2, playerCollider$3, playerColliders, playerShape, prevFireball, prevMelee, projectedMagnitude, pushbackVelX, pushbackVelX$1, pushbackVelY, pushbackVelY$1, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, t$2, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, v$2, v$3, v$4, v$5, wx, wy, x, x$1, x$10, x$11, x$12, x$13, x$14, x$15, x$16, x$17, x$18, x$19, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, xfac$2, xfac$3, xfac$4, xfac$5, $s, $r, $c} = $restore(this, {inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + roomCapacity = currRenderFrame.PlayersArr.$length; + nextRenderFramePlayers = $makeSlice(sliceType$6, roomCapacity); + _ref = currRenderFrame.PlayersArr; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + currPlayerDownsync = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + ((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i] = new PlayerDownsync.ptr(currPlayerDownsync.Id, currPlayerDownsync.VirtualGridX, currPlayerDownsync.VirtualGridY, currPlayerDownsync.DirX, currPlayerDownsync.DirY, currPlayerDownsync.VelX, currPlayerDownsync.VelY, currPlayerDownsync.Speed, currPlayerDownsync.BattleState, currPlayerDownsync.JoinIndex, currPlayerDownsync.ColliderRadius, currPlayerDownsync.Removed, currPlayerDownsync.Score, 0, currPlayerDownsync.FramesToRecover - 1 >> 0, currPlayerDownsync.FramesInChState + 1 >> 0, currPlayerDownsync.Hp, currPlayerDownsync.MaxHp, currPlayerDownsync.CharacterState, true, false, currPlayerDownsync.OnWallNormX, currPlayerDownsync.OnWallNormY, currPlayerDownsync.ActiveSkillId, currPlayerDownsync.ActiveSkillHit, currPlayerDownsync.FramesInvinsible - 1 >> 0, 0, 0)); + if (((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i]).FramesToRecover < 0) { + ((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i]).FramesToRecover = 0; + } + if (((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i]).FramesInvinsible < 0) { + ((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i]).FramesInvinsible = 0; + } + _i++; + } + nextRenderFrameMeleeBullets = $makeSlice(sliceType$7, 0, currRenderFrame.MeleeBullets.$length); + nextRenderFrameFireballBullets = $makeSlice(sliceType$8, 0, currRenderFrame.FireballBullets.$length); + effPushbacks = $makeSlice(sliceType$3, roomCapacity); + hardPushbackNorms = $makeSlice(sliceType$9, roomCapacity); + jumpedOrNotList = $makeSlice(sliceType$10, roomCapacity); + bulletLocalId = currRenderFrame.BulletLocalIdCounter; + _ref$1 = currRenderFrame.PlayersArr; + _i$1 = 0; + /* while (true) { */ case 1: + /* if (!(_i$1 < _ref$1.$length)) { break; } */ if(!(_i$1 < _ref$1.$length)) { $s = 2; continue; } + newBullet = [newBullet]; + newBullet$1 = [newBullet$1]; + i$1 = _i$1; + currPlayerDownsync$1 = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + chConfig = ((i$1 < 0 || i$1 >= chConfigsOrderedByJoinIndex.$length) ? ($throwRuntimeError("index out of range"), undefined) : chConfigsOrderedByJoinIndex.$array[chConfigsOrderedByJoinIndex.$offset + i$1]); + thatPlayerInNextFrame = ((i$1 < 0 || i$1 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$1]); + _tuple = deriveOpPattern(currPlayerDownsync$1, thatPlayerInNextFrame, currRenderFrame, inputsBuffer); + patternId = _tuple[0]; + jumpedOrNot = _tuple[1]; + effDx = _tuple[2]; + effDy = _tuple[3]; + ((i$1 < 0 || i$1 >= jumpedOrNotList.$length) ? ($throwRuntimeError("index out of range"), undefined) : jumpedOrNotList.$array[jumpedOrNotList.$offset + i$1] = jumpedOrNot); + joinIndex = currPlayerDownsync$1.JoinIndex; + _r = chConfig.SkillMapper(patternId, currPlayerDownsync$1); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + skillId = _r; + _tuple$1 = (_entry = skills[$Int.keyFor(skillId)], _entry !== undefined ? [_entry.v, true] : [ptrType$2.nil, false]); + skillConfig = _tuple$1[0]; + existent = _tuple$1[1]; + if (existent) { + thatPlayerInNextFrame.ActiveSkillId = ((skillId >> 0)); + thatPlayerInNextFrame.ActiveSkillHit = 0; + thatPlayerInNextFrame.FramesToRecover = skillConfig.RecoveryFrames; + xfac = 1; + if (0 > thatPlayerInNextFrame.DirX) { + xfac = -xfac; + } + hasLockVel = false; + _ref$2 = (x = skillConfig.Hits, x$1 = thatPlayerInNextFrame.ActiveSkillHit, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1])); + if ($assertType(_ref$2, ptrType$3, true)[1]) { + v = _ref$2.$val; + newBullet[0] = $clone(v, MeleeBullet); + newBullet[0].BattleAttr = new BulletBattleAttr.ptr(bulletLocalId, currRenderFrame.Id, joinIndex, currPlayerDownsync$1.BulletTeamId); + bulletLocalId = bulletLocalId + (1) >> 0; + newBullet[0].BlState = 0; + nextRenderFrameMeleeBullets = $append(nextRenderFrameMeleeBullets, newBullet[0]); + if (!((-1 === v.Bullet.SelfLockVelX))) { + hasLockVel = true; + thatPlayerInNextFrame.VelX = $imul(xfac, v.Bullet.SelfLockVelX); + } + if (!((-1 === v.Bullet.SelfLockVelY))) { + hasLockVel = true; + thatPlayerInNextFrame.VelY = v.Bullet.SelfLockVelY; + } + } else if ($assertType(_ref$2, ptrType$8, true)[1]) { + v$1 = _ref$2.$val; + newBullet$1[0] = $clone(v$1, FireballBullet); + newBullet$1[0].BattleAttr = new BulletBattleAttr.ptr(bulletLocalId, currRenderFrame.Id, joinIndex, currPlayerDownsync$1.BulletTeamId); + bulletLocalId = bulletLocalId + (1) >> 0; + _tmp = currPlayerDownsync$1.VirtualGridX + ($imul(xfac, newBullet$1[0].Bullet.HitboxOffsetX)) >> 0; + _tmp$1 = currPlayerDownsync$1.VirtualGridY + newBullet$1[0].Bullet.HitboxOffsetY >> 0; + newBullet$1[0].VirtualGridX = _tmp; + newBullet$1[0].VirtualGridY = _tmp$1; + newBullet$1[0].DirX = xfac; + newBullet$1[0].DirY = 0; + newBullet$1[0].VelX = $imul(newBullet$1[0].Speed, xfac); + newBullet$1[0].VelY = 0; + newBullet$1[0].BlState = 0; + nextRenderFrameFireballBullets = $append(nextRenderFrameFireballBullets, newBullet$1[0]); + if (!((-1 === v$1.Bullet.SelfLockVelX))) { + hasLockVel = true; + thatPlayerInNextFrame.VelX = $imul(xfac, v$1.Bullet.SelfLockVelX); + } + if (!((-1 === v$1.Bullet.SelfLockVelY))) { + hasLockVel = true; + thatPlayerInNextFrame.VelY = v$1.Bullet.SelfLockVelY; + } + } + if (false === hasLockVel && false === currPlayerDownsync$1.InAir) { + thatPlayerInNextFrame.VelX = 0; + } + thatPlayerInNextFrame.CharacterState = skillConfig.BoundChState; + _i$1++; + /* continue; */ $s = 1; continue; + } + if (0 === currPlayerDownsync$1.FramesToRecover) { + if (!((0 === effDx))) { + xfac$1 = 1; + if (0 > effDx) { + xfac$1 = -xfac$1; + } + thatPlayerInNextFrame.DirX = effDx; + thatPlayerInNextFrame.DirY = effDy; + thatPlayerInNextFrame.VelX = $imul(xfac$1, currPlayerDownsync$1.Speed); + if (intAbs(thatPlayerInNextFrame.VelX) < intAbs(currPlayerDownsync$1.VelX)) { + thatPlayerInNextFrame.VelX = $imul(xfac$1, intAbs(currPlayerDownsync$1.VelX)); + } + thatPlayerInNextFrame.CharacterState = 1; + } else { + thatPlayerInNextFrame.CharacterState = 0; + thatPlayerInNextFrame.VelX = 0; + } + } + _i$1++; + $s = 1; continue; + case 2: + playerColliders = $makeSlice(sliceType$11, currRenderFrame.PlayersArr.$length, currRenderFrame.PlayersArr.$length); + _ref$3 = currRenderFrame.PlayersArr; + _i$2 = 0; + /* while (true) { */ case 4: + /* if (!(_i$2 < _ref$3.$length)) { break; } */ if(!(_i$2 < _ref$3.$length)) { $s = 5; continue; } + i$2 = _i$2; + currPlayerDownsync$2 = ((_i$2 < 0 || _i$2 >= _ref$3.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$3.$array[_ref$3.$offset + _i$2]); + joinIndex$1 = currPlayerDownsync$2.JoinIndex; + _tmp$2 = 0; + _tmp$3 = 0; + (x$2 = joinIndex$1 - 1 >> 0, ((x$2 < 0 || x$2 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$2])).X = _tmp$2; + (x$3 = joinIndex$1 - 1 >> 0, ((x$3 < 0 || x$3 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$3])).Y = _tmp$3; + thatPlayerInNextFrame$1 = ((i$2 < 0 || i$2 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$2]); + chConfig$1 = ((i$2 < 0 || i$2 >= chConfigsOrderedByJoinIndex.$length) ? ($throwRuntimeError("index out of range"), undefined) : chConfigsOrderedByJoinIndex.$array[chConfigsOrderedByJoinIndex.$offset + i$2]); + _tmp$4 = currPlayerDownsync$2.VirtualGridX + currPlayerDownsync$2.VelX >> 0; + _tmp$5 = currPlayerDownsync$2.VirtualGridY + currPlayerDownsync$2.VelY >> 0; + newVx = _tmp$4; + newVy = _tmp$5; + if (((i$2 < 0 || i$2 >= jumpedOrNotList.$length) ? ($throwRuntimeError("index out of range"), undefined) : jumpedOrNotList.$array[jumpedOrNotList.$offset + i$2])) { + if (16 === currPlayerDownsync$2.CharacterState) { + if (0 < ($imul(currPlayerDownsync$2.VelX, currPlayerDownsync$2.OnWallNormX))) { + newVx = newVx - (currPlayerDownsync$2.VelX) >> 0; + } + xfac$2 = -1; + if (0 > currPlayerDownsync$2.OnWallNormX) { + xfac$2 = -xfac$2; + } + newVx = newVx + (($imul(xfac$2, chConfig$1.WallJumpingInitVelX))) >> 0; + newVy = newVy + (chConfig$1.WallJumpingInitVelY) >> 0; + thatPlayerInNextFrame$1.VelX = (($imul(xfac$2, chConfig$1.WallJumpingInitVelX))); + thatPlayerInNextFrame$1.VelY = (chConfig$1.WallJumpingInitVelY); + thatPlayerInNextFrame$1.FramesToRecover = chConfig$1.WallJumpingFramesToRecover; + } else { + thatPlayerInNextFrame$1.VelY = (chConfig$1.JumpingInitVelY); + newVy = newVy + (chConfig$1.JumpingInitVelY) >> 0; + } + } + _tuple$2 = VirtualGridToWorldPos(newVx, newVy); + wx = _tuple$2[0]; + wy = _tuple$2[1]; + _tmp$6 = $imul(currPlayerDownsync$2.ColliderRadius, 2); + _tmp$7 = $imul(currPlayerDownsync$2.ColliderRadius, 4); + colliderWidth = _tmp$6; + colliderHeight = _tmp$7; + _1 = currPlayerDownsync$2.CharacterState; + if (_1 === (9)) { + _tmp$8 = $imul(currPlayerDownsync$2.ColliderRadius, 4); + _tmp$9 = $imul(currPlayerDownsync$2.ColliderRadius, 2); + colliderWidth = _tmp$8; + colliderHeight = _tmp$9; + } else if ((_1 === (8)) || (_1 === (4)) || (_1 === (5)) || (_1 === (16))) { + _tmp$10 = $imul(currPlayerDownsync$2.ColliderRadius, 2); + _tmp$11 = $imul(currPlayerDownsync$2.ColliderRadius, 2); + colliderWidth = _tmp$10; + colliderHeight = _tmp$11; + } + _tuple$3 = VirtualGridToWorldPos(colliderWidth, colliderHeight); + colliderWorldWidth = _tuple$3[0]; + colliderWorldHeight = _tuple$3[1]; + _r$1 = GenerateRectCollider(wx, wy, colliderWorldWidth, colliderWorldHeight, 0.1, 0.1, 0.1, 0.1, collisionSpaceOffsetX, collisionSpaceOffsetY, currPlayerDownsync$2, "Player"); /* */ $s = 6; case 6: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; } + playerCollider = _r$1; + ((i$2 < 0 || i$2 >= playerColliders.$length) ? ($throwRuntimeError("index out of range"), undefined) : playerColliders.$array[playerColliders.$offset + i$2] = playerCollider); + $r = collisionSys.Add(new sliceType$11([playerCollider])); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + if (currPlayerDownsync$2.InAir) { + if ((16 === currPlayerDownsync$2.CharacterState) && !((i$2 < 0 || i$2 >= jumpedOrNotList.$length) ? ($throwRuntimeError("index out of range"), undefined) : jumpedOrNotList.$array[jumpedOrNotList.$offset + i$2])) { + thatPlayerInNextFrame$1.VelX = thatPlayerInNextFrame$1.VelX + (0) >> 0; + thatPlayerInNextFrame$1.VelY = chConfig$1.WallSlidingVelY; + } else { + thatPlayerInNextFrame$1.VelX = thatPlayerInNextFrame$1.VelX + (0) >> 0; + thatPlayerInNextFrame$1.VelY = thatPlayerInNextFrame$1.VelY + (-50) >> 0; + } + } + _i$2++; + $s = 4; continue; + case 5: + bulletColliders = $makeSlice(sliceType$11, 0, currRenderFrame.MeleeBullets.$length); + _ref$4 = currRenderFrame.MeleeBullets; + _i$3 = 0; + /* while (true) { */ case 8: + /* if (!(_i$3 < _ref$4.$length)) { break; } */ if(!(_i$3 < _ref$4.$length)) { $s = 9; continue; } + prevMelee = ((_i$3 < 0 || _i$3 >= _ref$4.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$4.$array[_ref$4.$offset + _i$3]); + meleeBullet = new MeleeBullet.ptr(prevMelee.BlState, prevMelee.FramesInBlState + 1 >> 0, prevMelee.BattleAttr, prevMelee.Bullet); + /* */ if (IsMeleeBulletAlive(meleeBullet, currRenderFrame)) { $s = 10; continue; } + /* */ $s = 11; continue; + /* if (IsMeleeBulletAlive(meleeBullet, currRenderFrame)) { */ case 10: + /* */ if (IsMeleeBulletActive(meleeBullet, currRenderFrame)) { $s = 12; continue; } + /* */ $s = 13; continue; + /* if (IsMeleeBulletActive(meleeBullet, currRenderFrame)) { */ case 12: + offender = (x$4 = currRenderFrame.PlayersArr, x$5 = meleeBullet.BattleAttr.OffenderJoinIndex - 1 >> 0, ((x$5 < 0 || x$5 >= x$4.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$4.$array[x$4.$offset + x$5])); + xfac$3 = 1; + if (0 > offender.DirX) { + xfac$3 = -xfac$3; + } + _tuple$4 = VirtualGridToWorldPos(offender.VirtualGridX + ($imul(xfac$3, meleeBullet.Bullet.HitboxOffsetX)) >> 0, offender.VirtualGridY); + bulletWx = _tuple$4[0]; + bulletWy = _tuple$4[1]; + _tuple$5 = VirtualGridToWorldPos(meleeBullet.Bullet.HitboxSizeX, meleeBullet.Bullet.HitboxSizeY); + hitboxSizeWx = _tuple$5[0]; + hitboxSizeWy = _tuple$5[1]; + _r$2 = GenerateRectCollider(bulletWx, bulletWy, hitboxSizeWx, hitboxSizeWy, 0.1, 0.1, 0.1, 0.1, collisionSpaceOffsetX, collisionSpaceOffsetY, meleeBullet, "MeleeBullet"); /* */ $s = 14; case 14: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; } + newBulletCollider = _r$2; + $r = collisionSys.Add(new sliceType$11([newBulletCollider])); /* */ $s = 15; case 15: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + bulletColliders = $append(bulletColliders, newBulletCollider); + meleeBullet.BlState = 1; + if (!((meleeBullet.BlState === prevMelee.BlState))) { + meleeBullet.FramesInBlState = 0; + } + /* } */ case 13: + nextRenderFrameMeleeBullets = $append(nextRenderFrameMeleeBullets, meleeBullet); + /* } */ case 11: + _i$3++; + $s = 8; continue; + case 9: + _ref$5 = currRenderFrame.FireballBullets; + _i$4 = 0; + /* while (true) { */ case 16: + /* if (!(_i$4 < _ref$5.$length)) { break; } */ if(!(_i$4 < _ref$5.$length)) { $s = 17; continue; } + prevFireball = ((_i$4 < 0 || _i$4 >= _ref$5.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$5.$array[_ref$5.$offset + _i$4]); + fireballBullet = new FireballBullet.ptr(prevFireball.VirtualGridX, prevFireball.VirtualGridY, prevFireball.DirX, prevFireball.DirY, prevFireball.VelX, prevFireball.VelY, prevFireball.Speed, prevFireball.BlState, prevFireball.FramesInBlState + 1 >> 0, prevFireball.BattleAttr, prevFireball.Bullet); + /* */ if (IsFireballBulletAlive(fireballBullet, currRenderFrame)) { $s = 18; continue; } + /* */ $s = 19; continue; + /* if (IsFireballBulletAlive(fireballBullet, currRenderFrame)) { */ case 18: + /* */ if (IsFireballBulletActive(fireballBullet, currRenderFrame)) { $s = 20; continue; } + /* */ $s = 21; continue; + /* if (IsFireballBulletActive(fireballBullet, currRenderFrame)) { */ case 20: + _tuple$6 = VirtualGridToWorldPos(fireballBullet.VirtualGridX, fireballBullet.VirtualGridY); + bulletWx$1 = _tuple$6[0]; + bulletWy$1 = _tuple$6[1]; + _tuple$7 = VirtualGridToWorldPos(fireballBullet.Bullet.HitboxSizeX, fireballBullet.Bullet.HitboxSizeY); + hitboxSizeWx$1 = _tuple$7[0]; + hitboxSizeWy$1 = _tuple$7[1]; + _r$3 = GenerateRectCollider(bulletWx$1, bulletWy$1, hitboxSizeWx$1, hitboxSizeWy$1, 0.1, 0.1, 0.1, 0.1, collisionSpaceOffsetX, collisionSpaceOffsetY, fireballBullet, "FireballBullet"); /* */ $s = 23; case 23: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; } + newBulletCollider$1 = _r$3; + $r = collisionSys.Add(new sliceType$11([newBulletCollider$1])); /* */ $s = 24; case 24: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + bulletColliders = $append(bulletColliders, newBulletCollider$1); + fireballBullet.BlState = 1; + if (!((fireballBullet.BlState === prevFireball.BlState))) { + fireballBullet.FramesInBlState = 0; + } + _tmp$12 = fireballBullet.VirtualGridX + fireballBullet.VelX >> 0; + _tmp$13 = fireballBullet.VirtualGridY + fireballBullet.VelY >> 0; + fireballBullet.VirtualGridX = _tmp$12; + fireballBullet.VirtualGridY = _tmp$13; + $s = 22; continue; + /* } else { */ case 21: + /* } */ case 22: + nextRenderFrameFireballBullets = $append(nextRenderFrameFireballBullets, fireballBullet); + /* } */ case 19: + _i$4++; + $s = 16; continue; + case 17: + _ref$6 = currRenderFrame.PlayersArr; + _i$5 = 0; + /* while (true) { */ case 25: + /* if (!(_i$5 < _ref$6.$length)) { break; } */ if(!(_i$5 < _ref$6.$length)) { $s = 26; continue; } + i$3 = _i$5; + currPlayerDownsync$3 = ((_i$5 < 0 || _i$5 >= _ref$6.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$6.$array[_ref$6.$offset + _i$5]); + joinIndex$2 = currPlayerDownsync$3.JoinIndex; + playerCollider$1 = ((i$3 < 0 || i$3 >= playerColliders.$length) ? ($throwRuntimeError("index out of range"), undefined) : playerColliders.$array[playerColliders.$offset + i$3]); + playerShape = $assertType(playerCollider$1.Shape, ptrType$9); + thatPlayerInNextFrame$2 = ((i$3 < 0 || i$3 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$3]); + _r$4 = calcHardPushbacksNorms(joinIndex$2, currPlayerDownsync$3, thatPlayerInNextFrame$2, playerCollider$1, playerShape, 0.1, (x$6 = joinIndex$2 - 1 >> 0, ((x$6 < 0 || x$6 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$6]))); /* */ $s = 27; case 27: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; } + (x$7 = joinIndex$2 - 1 >> 0, ((x$7 < 0 || x$7 >= hardPushbackNorms.$length) ? ($throwRuntimeError("index out of range"), undefined) : hardPushbackNorms.$array[hardPushbackNorms.$offset + x$7] = _r$4)); + chConfig$2 = ((i$3 < 0 || i$3 >= chConfigsOrderedByJoinIndex.$length) ? ($throwRuntimeError("index out of range"), undefined) : chConfigsOrderedByJoinIndex.$array[chConfigsOrderedByJoinIndex.$offset + i$3]); + landedOnGravityPushback = false; + collision = playerCollider$1.Check(0, 0, new sliceType$4([])); + /* */ if (!(ptrType$5.nil === collision)) { $s = 28; continue; } + /* */ $s = 29; continue; + /* if (!(ptrType$5.nil === collision)) { */ case 28: + _ref$7 = collision.Objects; + _i$6 = 0; + /* while (true) { */ case 30: + /* if (!(_i$6 < _ref$7.$length)) { break; } */ if(!(_i$6 < _ref$7.$length)) { $s = 31; continue; } + obj = ((_i$6 < 0 || _i$6 >= _ref$7.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$7.$array[_ref$7.$offset + _i$6]); + _tmp$14 = false; + _tmp$15 = false; + _tmp$16 = false; + isBarrier = _tmp$14; + isAnotherPlayer = _tmp$15; + isBullet = _tmp$16; + _ref$8 = obj.Data; + if ($assertType(_ref$8, ptrType$7, true)[1]) { + isAnotherPlayer = true; + } else if ($assertType(_ref$8, ptrType$3, true)[1] || $assertType(_ref$8, ptrType$8, true)[1]) { + isBullet = true; + } else { + isBarrier = true; + } + if (isBullet) { + _i$6++; + /* continue; */ $s = 30; continue; + } + bShape = $assertType(obj.Shape, ptrType$9); + _r$5 = calcPushbacks(0, 0, playerShape, bShape); /* */ $s = 32; case 32: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; } + _tuple$8 = _r$5; + overlapped = _tuple$8[0]; + pushbackX = _tuple$8[1]; + pushbackY = _tuple$8[2]; + overlapResult = _tuple$8[3]; + if (!overlapped) { + _i$6++; + /* continue; */ $s = 30; continue; + } + normAlignmentWithGravity = overlapResult.OverlapX * 0 + overlapResult.OverlapY * -1; + if (isAnotherPlayer) { + _tmp$17 = (overlapResult.Overlap - 0.2) * overlapResult.OverlapX; + _tmp$18 = (overlapResult.Overlap - 0.2) * overlapResult.OverlapY; + pushbackX = _tmp$17; + pushbackY = _tmp$18; + } + _ref$9 = (x$8 = joinIndex$2 - 1 >> 0, ((x$8 < 0 || x$8 >= hardPushbackNorms.$length) ? ($throwRuntimeError("index out of range"), undefined) : hardPushbackNorms.$array[hardPushbackNorms.$offset + x$8])).$get(); + _i$7 = 0; + while (true) { + if (!(_i$7 < _ref$9.$length)) { break; } + hardPushbackNorm = $clone(((_i$7 < 0 || _i$7 >= _ref$9.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$9.$array[_ref$9.$offset + _i$7]), Vec2D); + projectedMagnitude = pushbackX * hardPushbackNorm.X + pushbackY * hardPushbackNorm.Y; + if (isBarrier || (isAnotherPlayer && 0 > projectedMagnitude)) { + pushbackX = pushbackX - (projectedMagnitude * hardPushbackNorm.X); + pushbackY = pushbackY - (projectedMagnitude * hardPushbackNorm.Y); + } + _i$7++; + } + _index = joinIndex$2 - 1 >> 0; + ((_index < 0 || _index >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + _index]).X = ((_index < 0 || _index >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + _index]).X + (pushbackX); + _index$1 = joinIndex$2 - 1 >> 0; + ((_index$1 < 0 || _index$1 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + _index$1]).Y = ((_index$1 < 0 || _index$1 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + _index$1]).Y + (pushbackY); + if (0.5 < normAlignmentWithGravity) { + landedOnGravityPushback = true; + } + _i$6++; + $s = 30; continue; + case 31: + /* } */ case 29: + if (landedOnGravityPushback) { + thatPlayerInNextFrame$2.InAir = false; + fallStopping = currPlayerDownsync$3.InAir && 0 >= currPlayerDownsync$3.VelY; + if (fallStopping) { + thatPlayerInNextFrame$2.VelY = 0; + thatPlayerInNextFrame$2.VelX = 0; + if (8 === thatPlayerInNextFrame$2.CharacterState) { + thatPlayerInNextFrame$2.CharacterState = 9; + thatPlayerInNextFrame$2.FramesToRecover = chConfig$2.LayDownFramesToRecover; + } else { + _2 = currPlayerDownsync$3.CharacterState; + if ((_2 === (8)) || (_2 === (4)) || (_2 === (5)) || (_2 === (16))) { + _tmp$19 = 0; + _tmp$20 = currPlayerDownsync$3.ColliderRadius; + halfColliderWidthDiff = _tmp$19; + halfColliderHeightDiff = _tmp$20; + _tuple$9 = VirtualGridToWorldPos(halfColliderWidthDiff, halfColliderHeightDiff); + halfColliderWorldHeightDiff = _tuple$9[1]; + _index$2 = joinIndex$2 - 1 >> 0; + ((_index$2 < 0 || _index$2 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + _index$2]).Y = ((_index$2 < 0 || _index$2 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + _index$2]).Y - (halfColliderWorldHeightDiff); + } + thatPlayerInNextFrame$2.CharacterState = 0; + thatPlayerInNextFrame$2.FramesToRecover = 0; + } + } else { + _tuple$10 = (_entry$1 = nonAttackingSet[$Int32.keyFor(thatPlayerInNextFrame$2.CharacterState)], _entry$1 !== undefined ? [_entry$1.v, true] : [false, false]); + existent$1 = _tuple$10[1]; + if (existent$1) { + if (9 === thatPlayerInNextFrame$2.CharacterState) { + if (0 === thatPlayerInNextFrame$2.FramesToRecover) { + thatPlayerInNextFrame$2.CharacterState = 10; + thatPlayerInNextFrame$2.FramesToRecover = chConfig$2.GetUpFramesToRecover; + } + } else if (10 === thatPlayerInNextFrame$2.CharacterState) { + if (0 === thatPlayerInNextFrame$2.FramesToRecover) { + thatPlayerInNextFrame$2.CharacterState = 0; + thatPlayerInNextFrame$2.FramesInvinsible = chConfig$2.GetUpInvinsibleFrames; + } + } + } + } + } + if (chConfig$2.OnWallEnabled) { + if (thatPlayerInNextFrame$2.InAir) { + _tuple$11 = (_entry$2 = noOpSet[$Int32.keyFor(currPlayerDownsync$3.CharacterState)], _entry$2 !== undefined ? [_entry$2.v, true] : [false, false]); + existent$2 = _tuple$11[1]; + if (!existent$2) { + _ref$10 = (x$9 = joinIndex$2 - 1 >> 0, ((x$9 < 0 || x$9 >= hardPushbackNorms.$length) ? ($throwRuntimeError("index out of range"), undefined) : hardPushbackNorms.$array[hardPushbackNorms.$offset + x$9])).$get(); + _i$8 = 0; + while (true) { + if (!(_i$8 < _ref$10.$length)) { break; } + hardPushbackNorm$1 = $clone(((_i$8 < 0 || _i$8 >= _ref$10.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$10.$array[_ref$10.$offset + _i$8]), Vec2D); + normAlignmentWithHorizon1 = hardPushbackNorm$1.X * 1 + hardPushbackNorm$1.Y * 0; + normAlignmentWithHorizon2 = hardPushbackNorm$1.X * -1 + hardPushbackNorm$1.Y * 0; + if (0.9 < normAlignmentWithHorizon1) { + thatPlayerInNextFrame$2.OnWall = true; + _tmp$21 = ((hardPushbackNorm$1.X >> 0)); + _tmp$22 = ((hardPushbackNorm$1.Y >> 0)); + thatPlayerInNextFrame$2.OnWallNormX = _tmp$21; + thatPlayerInNextFrame$2.OnWallNormY = _tmp$22; + break; + } + if (0.9 < normAlignmentWithHorizon2) { + thatPlayerInNextFrame$2.OnWall = true; + _tmp$23 = ((hardPushbackNorm$1.X >> 0)); + _tmp$24 = ((hardPushbackNorm$1.Y >> 0)); + thatPlayerInNextFrame$2.OnWallNormX = _tmp$23; + thatPlayerInNextFrame$2.OnWallNormY = _tmp$24; + break; + } + _i$8++; + } + if (!currPlayerDownsync$3.OnWall && thatPlayerInNextFrame$2.OnWall) { + thatPlayerInNextFrame$2.VelY = 0; + } + } + } + if (!thatPlayerInNextFrame$2.OnWall) { + _tmp$25 = 0; + _tmp$26 = 0; + thatPlayerInNextFrame$2.OnWallNormX = _tmp$25; + thatPlayerInNextFrame$2.OnWallNormY = _tmp$26; + } + } + _i$5++; + $s = 25; continue; + case 26: + _ref$11 = bulletColliders; + _i$9 = 0; + /* while (true) { */ case 33: + /* if (!(_i$9 < _ref$11.$length)) { break; } */ if(!(_i$9 < _ref$11.$length)) { $s = 34; continue; } + bulletCollider = ((_i$9 < 0 || _i$9 >= _ref$11.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$11.$array[_ref$11.$offset + _i$9]); + collision$1 = bulletCollider.Check(0, 0, new sliceType$4([])); + bulletCollider.Space.Remove(new sliceType$11([bulletCollider])); + exploded = false; + /* */ if (!(ptrType$5.nil === collision$1)) { $s = 35; continue; } + /* */ $s = 36; continue; + /* if (!(ptrType$5.nil === collision$1)) { */ case 35: + _ref$12 = bulletCollider.Data; + /* */ if ($assertType(_ref$12, ptrType$3, true)[1]) { $s = 37; continue; } + /* */ if ($assertType(_ref$12, ptrType$8, true)[1]) { $s = 38; continue; } + /* */ $s = 39; continue; + /* if ($assertType(_ref$12, ptrType$3, true)[1]) { */ case 37: + v$2 = _ref$12.$val; + bulletShape = $assertType(bulletCollider.Shape, ptrType$9); + offender$1 = (x$10 = currRenderFrame.PlayersArr, x$11 = v$2.BattleAttr.OffenderJoinIndex - 1 >> 0, ((x$11 < 0 || x$11 >= x$10.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$10.$array[x$10.$offset + x$11])); + _ref$13 = collision$1.Objects; + _i$10 = 0; + /* while (true) { */ case 40: + /* if (!(_i$10 < _ref$13.$length)) { break; } */ if(!(_i$10 < _ref$13.$length)) { $s = 41; continue; } + obj$1 = ((_i$10 < 0 || _i$10 >= _ref$13.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$13.$array[_ref$13.$offset + _i$10]); + defenderShape = $assertType(obj$1.Shape, ptrType$9); + _ref$14 = obj$1.Data; + /* */ if ($assertType(_ref$14, ptrType$7, true)[1]) { $s = 42; continue; } + /* */ $s = 43; continue; + /* if ($assertType(_ref$14, ptrType$7, true)[1]) { */ case 42: + t = _ref$14.$val; + if (v$2.BattleAttr.OffenderJoinIndex === t.JoinIndex) { + _i$10++; + /* continue; */ $s = 40; continue; + } + _r$6 = calcPushbacks(0, 0, bulletShape, defenderShape); /* */ $s = 44; case 44: if($c) { $c = false; _r$6 = _r$6.$blk(); } if (_r$6 && _r$6.$blk !== undefined) { break s; } + _tuple$12 = _r$6; + overlapped$1 = _tuple$12[0]; + if (!overlapped$1) { + _i$10++; + /* continue; */ $s = 40; continue; + } + exploded = true; + _tuple$13 = (_entry$3 = invinsibleSet[$Int32.keyFor(t.CharacterState)], _entry$3 !== undefined ? [_entry$3.v, true] : [false, false]); + existent$3 = _tuple$13[1]; + if (existent$3) { + _i$10++; + /* continue; */ $s = 40; continue; + } + if (0 < t.FramesInvinsible) { + _i$10++; + /* continue; */ $s = 40; continue; + } + xfac$4 = 1; + if (0 > offender$1.DirX) { + xfac$4 = -xfac$4; + } + _tmp$27 = $imul(xfac$4, v$2.Bullet.PushbackVelX); + _tmp$28 = v$2.Bullet.PushbackVelY; + pushbackVelX = _tmp$27; + pushbackVelY = _tmp$28; + atkedPlayerInNextFrame = (x$12 = t.JoinIndex - 1 >> 0, ((x$12 < 0 || x$12 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + x$12])); + atkedPlayerInNextFrame.VelX = pushbackVelX; + atkedPlayerInNextFrame.VelY = pushbackVelY; + if (v$2.Bullet.BlowUp) { + atkedPlayerInNextFrame.CharacterState = 8; + } else { + atkedPlayerInNextFrame.CharacterState = 3; + } + oldFramesToRecover = (x$13 = t.JoinIndex - 1 >> 0, ((x$13 < 0 || x$13 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + x$13])).FramesToRecover; + if (v$2.Bullet.HitStunFrames > oldFramesToRecover) { + atkedPlayerInNextFrame.FramesToRecover = v$2.Bullet.HitStunFrames; + } + /* } */ case 43: + _i$10++; + $s = 40; continue; + case 41: + $s = 39; continue; + /* } else if ($assertType(_ref$12, ptrType$8, true)[1]) { */ case 38: + v$3 = _ref$12.$val; + bulletShape$1 = $assertType(bulletCollider.Shape, ptrType$9); + offender$2 = (x$14 = currRenderFrame.PlayersArr, x$15 = v$3.BattleAttr.OffenderJoinIndex - 1 >> 0, ((x$15 < 0 || x$15 >= x$14.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$14.$array[x$14.$offset + x$15])); + _ref$15 = collision$1.Objects; + _i$11 = 0; + /* while (true) { */ case 45: + /* if (!(_i$11 < _ref$15.$length)) { break; } */ if(!(_i$11 < _ref$15.$length)) { $s = 46; continue; } + obj$2 = ((_i$11 < 0 || _i$11 >= _ref$15.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$15.$array[_ref$15.$offset + _i$11]); + defenderShape$1 = $assertType(obj$2.Shape, ptrType$9); + _ref$16 = obj$2.Data; + /* */ if ($assertType(_ref$16, ptrType$7, true)[1]) { $s = 47; continue; } + /* */ $s = 48; continue; + /* if ($assertType(_ref$16, ptrType$7, true)[1]) { */ case 47: + t$1 = _ref$16.$val; + if (v$3.BattleAttr.OffenderJoinIndex === t$1.JoinIndex) { + _i$11++; + /* continue; */ $s = 45; continue; + } + _r$7 = calcPushbacks(0, 0, bulletShape$1, defenderShape$1); /* */ $s = 50; case 50: if($c) { $c = false; _r$7 = _r$7.$blk(); } if (_r$7 && _r$7.$blk !== undefined) { break s; } + _tuple$14 = _r$7; + overlapped$2 = _tuple$14[0]; + if (!overlapped$2) { + _i$11++; + /* continue; */ $s = 45; continue; + } + exploded = true; + _tuple$15 = (_entry$4 = invinsibleSet[$Int32.keyFor(t$1.CharacterState)], _entry$4 !== undefined ? [_entry$4.v, true] : [false, false]); + existent$4 = _tuple$15[1]; + if (existent$4) { + _i$11++; + /* continue; */ $s = 45; continue; + } + if (0 < t$1.FramesInvinsible) { + _i$11++; + /* continue; */ $s = 45; continue; + } + xfac$5 = 1; + if (0 > offender$2.DirX) { + xfac$5 = -xfac$5; + } + _tmp$29 = $imul(xfac$5, v$3.Bullet.PushbackVelX); + _tmp$30 = v$3.Bullet.PushbackVelY; + pushbackVelX$1 = _tmp$29; + pushbackVelY$1 = _tmp$30; + atkedPlayerInNextFrame$1 = (x$16 = t$1.JoinIndex - 1 >> 0, ((x$16 < 0 || x$16 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + x$16])); + atkedPlayerInNextFrame$1.VelX = pushbackVelX$1; + atkedPlayerInNextFrame$1.VelY = pushbackVelY$1; + if (v$3.Bullet.BlowUp) { + atkedPlayerInNextFrame$1.CharacterState = 8; + } else { + atkedPlayerInNextFrame$1.CharacterState = 3; + } + oldFramesToRecover$1 = (x$17 = t$1.JoinIndex - 1 >> 0, ((x$17 < 0 || x$17 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + x$17])).FramesToRecover; + if (v$3.Bullet.HitStunFrames > oldFramesToRecover$1) { + atkedPlayerInNextFrame$1.FramesToRecover = v$3.Bullet.HitStunFrames; + } + $s = 49; continue; + /* } else { */ case 48: + t$2 = _ref$16; + exploded = true; + /* } */ case 49: + _i$11++; + $s = 45; continue; + case 46: + /* } */ case 39: + /* } */ case 36: + if (exploded) { + _ref$17 = bulletCollider.Data; + if ($assertType(_ref$17, ptrType$3, true)[1]) { + v$4 = _ref$17.$val; + v$4.BlState = 2; + v$4.FramesInBlState = 0; + } else if ($assertType(_ref$17, ptrType$8, true)[1]) { + v$5 = _ref$17.$val; + v$5.BlState = 2; + v$5.FramesInBlState = 0; + } + } + _i$9++; + $s = 33; continue; + case 34: + _ref$18 = currRenderFrame.PlayersArr; + _i$12 = 0; + while (true) { + if (!(_i$12 < _ref$18.$length)) { break; } + i$4 = _i$12; + currPlayerDownsync$4 = ((_i$12 < 0 || _i$12 >= _ref$18.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$18.$array[_ref$18.$offset + _i$12]); + joinIndex$3 = currPlayerDownsync$4.JoinIndex; + playerCollider$2 = ((i$4 < 0 || i$4 >= playerColliders.$length) ? ($throwRuntimeError("index out of range"), undefined) : playerColliders.$array[playerColliders.$offset + i$4]); + thatPlayerInNextFrame$3 = ((i$4 < 0 || i$4 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$4]); + _tuple$16 = PolygonColliderBLToVirtualGridPos(playerCollider$2.X - (x$18 = joinIndex$3 - 1 >> 0, ((x$18 < 0 || x$18 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$18])).X, playerCollider$2.Y - (x$19 = joinIndex$3 - 1 >> 0, ((x$19 < 0 || x$19 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$19])).Y, playerCollider$2.W * 0.5, playerCollider$2.H * 0.5, 0, 0, 0, 0, collisionSpaceOffsetX, collisionSpaceOffsetY); + thatPlayerInNextFrame$3.VirtualGridX = _tuple$16[0]; + thatPlayerInNextFrame$3.VirtualGridY = _tuple$16[1]; + if (thatPlayerInNextFrame$3.InAir) { + oldNextCharacterState = thatPlayerInNextFrame$3.CharacterState; + _3 = oldNextCharacterState; + if ((_3 === (0)) || (_3 === (1))) { + if (thatPlayerInNextFrame$3.OnWall) { + thatPlayerInNextFrame$3.CharacterState = 16; + } else if (((i$4 < 0 || i$4 >= jumpedOrNotList.$length) ? ($throwRuntimeError("index out of range"), undefined) : jumpedOrNotList.$array[jumpedOrNotList.$offset + i$4]) || (5 === currPlayerDownsync$4.CharacterState)) { + thatPlayerInNextFrame$3.CharacterState = 5; + } else { + thatPlayerInNextFrame$3.CharacterState = 4; + } + } else if (_3 === (2)) { + thatPlayerInNextFrame$3.CharacterState = 6; + } else if (_3 === (3)) { + thatPlayerInNextFrame$3.CharacterState = 7; + } + } + if (!((thatPlayerInNextFrame$3.CharacterState === currPlayerDownsync$4.CharacterState))) { + thatPlayerInNextFrame$3.FramesInChState = 0; + } + _tuple$17 = (_entry$5 = nonAttackingSet[$Int32.keyFor(thatPlayerInNextFrame$3.CharacterState)], _entry$5 !== undefined ? [_entry$5.v, true] : [false, false]); + existent$5 = _tuple$17[1]; + if (existent$5) { + thatPlayerInNextFrame$3.ActiveSkillId = -1; + thatPlayerInNextFrame$3.ActiveSkillHit = -1; + } + _i$12++; + } + _ref$19 = playerColliders; + _i$13 = 0; + while (true) { + if (!(_i$13 < _ref$19.$length)) { break; } + playerCollider$3 = ((_i$13 < 0 || _i$13 >= _ref$19.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$19.$array[_ref$19.$offset + _i$13]); + playerCollider$3.Space.Remove(new sliceType$11([playerCollider$3])); + _i$13++; + } + $s = -1; return new RoomDownsyncFrame.ptr(currRenderFrame.Id + 1 >> 0, nextRenderFramePlayers, new $Int64(0, 0), nextRenderFrameMeleeBullets, nextRenderFrameFireballBullets, new $Uint64(0, 0), false, bulletLocalId); + /* */ } return; } var $f = {$blk: ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame, $c: true, $r, _1, _2, _3, _entry, _entry$1, _entry$2, _entry$3, _entry$4, _entry$5, _i, _i$1, _i$10, _i$11, _i$12, _i$13, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _index$2, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _ref$14, _ref$15, _ref$16, _ref$17, _ref$18, _ref$19, _ref$2, _ref$3, _ref$4, _ref$5, _ref$6, _ref$7, _ref$8, _ref$9, _tmp, _tmp$1, _tmp$10, _tmp$11, _tmp$12, _tmp$13, _tmp$14, _tmp$15, _tmp$16, _tmp$17, _tmp$18, _tmp$19, _tmp$2, _tmp$20, _tmp$21, _tmp$22, _tmp$23, _tmp$24, _tmp$25, _tmp$26, _tmp$27, _tmp$28, _tmp$29, _tmp$3, _tmp$30, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$10, _tuple$11, _tuple$12, _tuple$13, _tuple$14, _tuple$15, _tuple$16, _tuple$17, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, atkedPlayerInNextFrame, atkedPlayerInNextFrame$1, bShape, bulletCollider, bulletColliders, bulletLocalId, bulletShape, bulletShape$1, bulletWx, bulletWx$1, bulletWy, bulletWy$1, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, colliderHeight, colliderWidth, colliderWorldHeight, colliderWorldWidth, collision, collision$1, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, defenderShape$1, effDx, effDy, effPushbacks, existent, existent$1, existent$2, existent$3, existent$4, existent$5, exploded, fallStopping, fireballBullet, halfColliderHeightDiff, halfColliderWidthDiff, halfColliderWorldHeightDiff, hardPushbackNorm, hardPushbackNorm$1, hardPushbackNorms, hasLockVel, hitboxSizeWx, hitboxSizeWx$1, hitboxSizeWy, hitboxSizeWy$1, i, i$1, i$2, i$3, i$4, inputsBuffer, isAnotherPlayer, isBarrier, isBullet, joinIndex, joinIndex$1, joinIndex$2, joinIndex$3, jumpedOrNot, jumpedOrNotList, landedOnGravityPushback, meleeBullet, newBullet, newBullet$1, newBulletCollider, newBulletCollider$1, newVx, newVy, nextRenderFrameFireballBullets, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, normAlignmentWithHorizon1, normAlignmentWithHorizon2, obj, obj$1, obj$2, offender, offender$1, offender$2, oldFramesToRecover, oldFramesToRecover$1, oldNextCharacterState, overlapResult, overlapped, overlapped$1, overlapped$2, patternId, playerCollider, playerCollider$1, playerCollider$2, playerCollider$3, playerColliders, playerShape, prevFireball, prevMelee, projectedMagnitude, pushbackVelX, pushbackVelX$1, pushbackVelY, pushbackVelY$1, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, t$2, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, v$2, v$3, v$4, v$5, wx, wy, x, x$1, x$10, x$11, x$12, x$13, x$14, x$15, x$16, x$17, x$18, x$19, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, xfac$2, xfac$3, xfac$4, xfac$5, $s};return $f; + }; + $pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame = ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame; + GenerateRectCollider = function(wx, wy, w, h, topPadding, bottomPadding, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, data, tag) { + var {$24r, _r, _tuple, blX, blY, bottomPadding, data, h, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, tag, topPadding, w, wx, wy, $s, $r, $c} = $restore(this, {wx, wy, w, h, topPadding, bottomPadding, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, data, tag}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _tuple = WorldToPolygonColliderBLPos(wx, wy, w * 0.5, h * 0.5, topPadding, bottomPadding, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY); + blX = _tuple[0]; + blY = _tuple[1]; + _r = generateRectColliderInCollisionSpace(blX, blY, leftPadding + w + rightPadding, bottomPadding + h + topPadding, data, tag); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $24r = _r; + $s = 2; case 2: return $24r; + /* */ } return; } var $f = {$blk: GenerateRectCollider, $c: true, $r, $24r, _r, _tuple, blX, blY, bottomPadding, data, h, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, tag, topPadding, w, wx, wy, $s};return $f; + }; + $pkg.GenerateRectCollider = GenerateRectCollider; + generateRectColliderInCollisionSpace = function(blX, blY, w, h, data, tag) { + var {blX, blY, collider, data, h, shape, tag, w, $s, $r, $c} = $restore(this, {blX, blY, w, h, data, tag}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + collider = resolv.NewObject(blX, blY, w, h, new sliceType$4([tag])); + shape = resolv.NewRectangle(0, 0, w, h); + $r = collider.SetShape(shape); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + collider.Data = data; + $s = -1; return collider; + /* */ } return; } var $f = {$blk: generateRectColliderInCollisionSpace, $c: true, $r, blX, blY, collider, data, h, shape, tag, w, $s};return $f; + }; + GenerateConvexPolygonCollider = function(unalignedSrc, spaceOffsetX, spaceOffsetY, data, tag) { + var {_i, _i$1, _ref, _ref$1, _tmp, _tmp$1, aligned, collider, data, h, i, i$1, j, p, pi, pj, shape, spaceOffsetX, spaceOffsetY, tag, unalignedSrc, w, x, $s, $r, $c} = $restore(this, {unalignedSrc, spaceOffsetX, spaceOffsetY, data, tag}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + aligned = AlignPolygon2DToBoundingBox(unalignedSrc); + _tmp = 0; + _tmp$1 = 0; + w = _tmp; + h = _tmp$1; + shape = resolv.NewConvexPolygon(sliceType$12.nil); + _ref = aligned.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + pi = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + _ref$1 = aligned.Points; + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + j = _i$1; + pj = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + if (i === j) { + _i$1++; + continue; + } + if (math.Abs(pj.X - pi.X) > w) { + w = math.Abs(pj.X - pi.X); + } + if (math.Abs(pj.Y - pi.Y) > h) { + h = math.Abs(pj.Y - pi.Y); + } + _i$1++; + } + _i++; + } + i$1 = 0; + while (true) { + if (!(i$1 < aligned.Points.$length)) { break; } + p = (x = aligned.Points, ((i$1 < 0 || i$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + i$1])); + shape.AddPoints(new sliceType$12([p.X, p.Y])); + i$1 = i$1 + (1) >> 0; + } + collider = resolv.NewObject(aligned.Anchor.X + spaceOffsetX, aligned.Anchor.Y + spaceOffsetY, w, h, new sliceType$4([tag])); + $r = collider.SetShape(shape); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + collider.Data = data; + $s = -1; return collider; + /* */ } return; } var $f = {$blk: GenerateConvexPolygonCollider, $c: true, $r, _i, _i$1, _ref, _ref$1, _tmp, _tmp$1, aligned, collider, data, h, i, i$1, j, p, pi, pj, shape, spaceOffsetX, spaceOffsetY, tag, unalignedSrc, w, x, $s};return $f; + }; + $pkg.GenerateConvexPolygonCollider = GenerateConvexPolygonCollider; + AlignPolygon2DToBoundingBox = function(input) { + var _i, _i$1, _ref, _ref$1, boundingBoxBL, i, input, output, p, p$1, x; + boundingBoxBL = new Vec2D.ptr(1.7e+308, 1.7e+308); + _ref = input.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + p = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (p.X < boundingBoxBL.X) { + boundingBoxBL.X = p.X; + } + if (p.Y < boundingBoxBL.Y) { + boundingBoxBL.Y = p.Y; + } + _i++; + } + output = new Polygon2D.ptr(new Vec2D.ptr(input.Anchor.X + boundingBoxBL.X, input.Anchor.Y + boundingBoxBL.Y), $makeSlice(sliceType$13, input.Points.$length)); + _ref$1 = input.Points; + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + i = _i$1; + p$1 = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + (x = output.Points, ((i < 0 || i >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + i] = new Vec2D.ptr(p$1.X - boundingBoxBL.X, p$1.Y - boundingBoxBL.Y))); + _i$1++; + } + return output; + }; + $pkg.AlignPolygon2DToBoundingBox = AlignPolygon2DToBoundingBox; + NewMeleeBullet = function(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, teamId, blState, framesInBlState, explosionFrames, speciesId) { + var activeFrames, blState, blockStunFrames, blowUp, bulletLocalId, cancellableEdFrame, cancellableStFrame, damage, explosionFrames, framesInBlState, hitStunFrames, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, offenderJoinIndex, originatedRenderFrameId, pushbackVelX, pushbackVelY, selfLockVelX, selfLockVelY, speciesId, startupFrames, teamId; + return new MeleeBullet.ptr(blState, framesInBlState, new BulletBattleAttr.ptr(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, teamId), new BulletConfig.ptr(startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, explosionFrames, speciesId, false)); + }; + $pkg.NewMeleeBullet = NewMeleeBullet; + NewFireballBullet = function(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, teamId, virtualGridX, virtualGridY, dirX, dirY, velX, velY, speed, blState, framesInBlState, explosionFrames, speciesId) { + var activeFrames, blState, blockStunFrames, blowUp, bulletLocalId, cancellableEdFrame, cancellableStFrame, damage, dirX, dirY, explosionFrames, framesInBlState, hitStunFrames, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, offenderJoinIndex, originatedRenderFrameId, pushbackVelX, pushbackVelY, selfLockVelX, selfLockVelY, speciesId, speed, startupFrames, teamId, velX, velY, virtualGridX, virtualGridY; + return new FireballBullet.ptr(virtualGridX, virtualGridY, dirX, dirY, velX, velY, speed, 0, 0, new BulletBattleAttr.ptr(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, teamId), new BulletConfig.ptr(startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, explosionFrames, speciesId, false)); + }; + $pkg.NewFireballBullet = NewFireballBullet; + ptrType$14.methods = [{prop: "Put", name: "Put", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "Pop", name: "Pop", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "GetArrIdxByOffset", name: "GetArrIdxByOffset", pkg: "", typ: $funcType([$Int32], [$Int32], false)}, {prop: "GetByOffset", name: "GetByOffset", pkg: "", typ: $funcType([$Int32], [$emptyInterface], false)}, {prop: "GetByFrameId", name: "GetByFrameId", pkg: "", typ: $funcType([$Int32], [$emptyInterface], false)}, {prop: "SetByFrameId", name: "SetByFrameId", pkg: "", typ: $funcType([$emptyInterface, $Int32], [$Int32, $Int32, $Int32], false)}]; + Vec2D.init("", [{prop: "X", name: "X", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Float64, tag: ""}]); + Polygon2D.init("", [{prop: "Anchor", name: "Anchor", embedded: false, exported: true, typ: ptrType$12, tag: ""}, {prop: "Points", name: "Points", embedded: false, exported: true, typ: sliceType$13, tag: ""}]); + PlayerDownsync.init("", [{prop: "Id", name: "Id", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridX", name: "VirtualGridX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridY", name: "VirtualGridY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirX", name: "DirX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirY", name: "DirY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelX", name: "VelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelY", name: "VelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BattleState", name: "BattleState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "JoinIndex", name: "JoinIndex", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ColliderRadius", name: "ColliderRadius", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Removed", name: "Removed", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "Score", name: "Score", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "LastMoveGmtMillis", name: "LastMoveGmtMillis", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesToRecover", name: "FramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesInChState", name: "FramesInChState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Hp", name: "Hp", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "MaxHp", name: "MaxHp", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CharacterState", name: "CharacterState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "InAir", name: "InAir", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "OnWall", name: "OnWall", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "OnWallNormX", name: "OnWallNormX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "OnWallNormY", name: "OnWallNormY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ActiveSkillId", name: "ActiveSkillId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ActiveSkillHit", name: "ActiveSkillHit", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesInvinsible", name: "FramesInvinsible", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BulletTeamId", name: "BulletTeamId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ChCollisionTeamId", name: "ChCollisionTeamId", embedded: false, exported: true, typ: $Int32, tag: ""}]); + InputFrameDecoded.init("", [{prop: "Dx", name: "Dx", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Dy", name: "Dy", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BtnALevel", name: "BtnALevel", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BtnBLevel", name: "BtnBLevel", embedded: false, exported: true, typ: $Int32, tag: ""}]); + Barrier.init("", [{prop: "Boundary", name: "Boundary", embedded: false, exported: true, typ: ptrType$13, tag: ""}]); + BulletConfig.init("", [{prop: "StartupFrames", name: "StartupFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CancellableStFrame", name: "CancellableStFrame", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CancellableEdFrame", name: "CancellableEdFrame", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ActiveFrames", name: "ActiveFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitStunFrames", name: "HitStunFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BlockStunFrames", name: "BlockStunFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PushbackVelX", name: "PushbackVelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PushbackVelY", name: "PushbackVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Damage", name: "Damage", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SelfLockVelX", name: "SelfLockVelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SelfLockVelY", name: "SelfLockVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxOffsetX", name: "HitboxOffsetX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxOffsetY", name: "HitboxOffsetY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxSizeX", name: "HitboxSizeX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxSizeY", name: "HitboxSizeY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BlowUp", name: "BlowUp", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "ExplosionFrames", name: "ExplosionFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SpeciesId", name: "SpeciesId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CancelTransit", name: "CancelTransit", embedded: false, exported: true, typ: mapType, tag: ""}]); + BulletBattleAttr.init("", [{prop: "BulletLocalId", name: "BulletLocalId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "OriginatedRenderFrameId", name: "OriginatedRenderFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "OffenderJoinIndex", name: "OffenderJoinIndex", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "TeamId", name: "TeamId", embedded: false, exported: true, typ: $Int32, tag: ""}]); + MeleeBullet.init("", [{prop: "BlState", name: "BlState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesInBlState", name: "FramesInBlState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BattleAttr", name: "BattleAttr", embedded: false, exported: true, typ: ptrType, tag: ""}, {prop: "Bullet", name: "Bullet", embedded: false, exported: true, typ: ptrType$1, tag: ""}]); + FireballBullet.init("", [{prop: "VirtualGridX", name: "VirtualGridX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridY", name: "VirtualGridY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirX", name: "DirX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirY", name: "DirY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelX", name: "VelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelY", name: "VelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BlState", name: "BlState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesInBlState", name: "FramesInBlState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BattleAttr", name: "BattleAttr", embedded: false, exported: true, typ: ptrType, tag: ""}, {prop: "Bullet", name: "Bullet", embedded: false, exported: true, typ: ptrType$1, tag: ""}]); + Skill.init("", [{prop: "BattleLocalId", name: "BattleLocalId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFrames", name: "RecoveryFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFramesOnBlock", name: "RecoveryFramesOnBlock", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFramesOnHit", name: "RecoveryFramesOnHit", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ReleaseTriggerType", name: "ReleaseTriggerType", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BoundChState", name: "BoundChState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Hits", name: "Hits", embedded: false, exported: true, typ: sliceType$2, tag: ""}]); + RoomDownsyncFrame.init("", [{prop: "Id", name: "Id", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PlayersArr", name: "PlayersArr", embedded: false, exported: true, typ: sliceType$6, tag: ""}, {prop: "CountdownNanos", name: "CountdownNanos", embedded: false, exported: true, typ: $Int64, tag: ""}, {prop: "MeleeBullets", name: "MeleeBullets", embedded: false, exported: true, typ: sliceType$7, tag: ""}, {prop: "FireballBullets", name: "FireballBullets", embedded: false, exported: true, typ: sliceType$8, tag: ""}, {prop: "BackendUnconfirmedMask", name: "BackendUnconfirmedMask", embedded: false, exported: true, typ: $Uint64, tag: ""}, {prop: "ShouldForceResync", name: "ShouldForceResync", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "BulletLocalIdCounter", name: "BulletLocalIdCounter", embedded: false, exported: true, typ: $Int32, tag: ""}]); + InputFrameDownsync.init("", [{prop: "InputFrameId", name: "InputFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "InputList", name: "InputList", embedded: false, exported: true, typ: sliceType$5, tag: ""}, {prop: "ConfirmedList", name: "ConfirmedList", embedded: false, exported: true, typ: $Uint64, tag: ""}]); + NpcPatrolCue.init("", [{prop: "FlAct", name: "FlAct", embedded: false, exported: true, typ: $Uint64, tag: ""}, {prop: "FrAct", name: "FrAct", embedded: false, exported: true, typ: $Uint64, tag: ""}, {prop: "X", name: "X", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Float64, tag: ""}]); + RingBuffer.init("", [{prop: "Ed", name: "Ed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "St", name: "St", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "EdFrameId", name: "EdFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "StFrameId", name: "StFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "N", name: "N", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Cnt", name: "Cnt", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Eles", name: "Eles", embedded: false, exported: true, typ: sliceType$2, tag: ""}]); + SkillMapperType.init([$Int, ptrType$7], [$Int], false); + CharacterConfig.init("", [{prop: "SpeciesId", name: "SpeciesId", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "SpeciesName", name: "SpeciesName", embedded: false, exported: true, typ: $String, tag: ""}, {prop: "InAirIdleFrameIdxTurningPoint", name: "InAirIdleFrameIdxTurningPoint", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "InAirIdleFrameIdxTurnedCycle", name: "InAirIdleFrameIdxTurnedCycle", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "LayDownFrames", name: "LayDownFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "LayDownFramesToRecover", name: "LayDownFramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "GetUpInvinsibleFrames", name: "GetUpInvinsibleFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "GetUpFramesToRecover", name: "GetUpFramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "JumpingInitVelY", name: "JumpingInitVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DashingEnabled", name: "DashingEnabled", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "OnWallEnabled", name: "OnWallEnabled", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "WallJumpingFramesToRecover", name: "WallJumpingFramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "WallJumpingInitVelX", name: "WallJumpingInitVelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "WallJumpingInitVelY", name: "WallJumpingInitVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "WallSlidingVelY", name: "WallSlidingVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SkillMapper", name: "SkillMapper", embedded: false, exported: true, typ: SkillMapperType, tag: ""}]); + SatResult.init("", [{prop: "Overlap", name: "Overlap", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "OverlapX", name: "OverlapX", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "OverlapY", name: "OverlapY", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "AContainedInB", name: "AContainedInB", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "BContainedInA", name: "BContainedInA", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "Axis", name: "Axis", embedded: false, exported: true, typ: resolv.Vector, tag: ""}]); + $init = function() { + $pkg.$init = function() {}; + /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: + $r = math.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + $r = resolv.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + $pkg.DIRECTION_DECODER = new sliceType$1([new sliceType([0, 0]), new sliceType([0, 2]), new sliceType([0, -2]), new sliceType([2, 0]), new sliceType([-2, 0]), new sliceType([1, 1]), new sliceType([-1, -1]), new sliceType([1, -1]), new sliceType([-1, 1])]); + skills = $makeMap($Int.keyFor, [{ k: 1, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(0, 0, ptrType.nil, new BulletConfig.ptr(7, 13, 30, 22, 13, 9, 50, 0, 5, 5, -1, 1200, 0, 2400, 3200, false, 9, 1, $makeMap($Int.keyFor, [{ k: 1, v: 2 }])))])) }, { k: 2, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(0, 0, ptrType.nil, new BulletConfig.ptr(18, 22, 36, 18, 18, 9, 50, 0, 5, 10, -1, 1800, 0, 2400, 3200, false, 9, 1, $makeMap($Int.keyFor, [{ k: 1, v: 3 }])))])) }, { k: 3, v: new Skill.ptr(0, 50, 50, 50, 1, 12, new sliceType$2([new MeleeBullet.ptr(0, 0, ptrType.nil, new BulletConfig.ptr(8, 0, 0, 30, 999999999, 9, 200, 700, 10, 50, 500, 1600, 800, 3200, 3200, true, 9, 1, false))])) }, { k: 4, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(0, 0, ptrType.nil, new BulletConfig.ptr(7, 13, 30, 22, 13, 9, 50, 0, 5, 5, -1, 1200, 0, 2400, 3200, false, 15, 2, $makeMap($Int.keyFor, [{ k: 1, v: 5 }])))])) }, { k: 5, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(0, 0, ptrType.nil, new BulletConfig.ptr(18, 23, 36, 18, 18, 9, 50, 0, 5, 10, -1, 1800, 0, 2400, 3200, false, 15, 2, $makeMap($Int.keyFor, [{ k: 1, v: 6 }])))])) }, { k: 6, v: new Skill.ptr(0, 45, 45, 45, 1, 12, new sliceType$2([new MeleeBullet.ptr(0, 0, ptrType.nil, new BulletConfig.ptr(8, 0, 0, 28, 999999999, 9, 200, 300, 10, -1, -1, 2400, 0, 3200, 3200, true, 15, 2, false))])) }, { k: 7, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(0, 0, ptrType.nil, new BulletConfig.ptr(7, 13, 30, 22, 13, 9, 50, 0, 5, -1, -1, 1200, 0, 2400, 3200, false, 9, 1, $makeMap($Int.keyFor, [{ k: 1, v: 8 }])))])) }, { k: 8, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(0, 0, ptrType.nil, new BulletConfig.ptr(18, 22, 36, 18, 18, 9, 50, 0, 5, 10, -1, 1800, 0, 2400, 3200, false, 9, 1, $makeMap($Int.keyFor, [{ k: 1, v: 9 }])))])) }, { k: 9, v: new Skill.ptr(0, 40, 40, 40, 1, 12, new sliceType$2([new MeleeBullet.ptr(0, 0, ptrType.nil, new BulletConfig.ptr(7, 0, 0, 30, 999999999, 9, 200, 400, 10, 100, -1, 1000, 0, 3200, 3200, true, 9, 1, false))])) }, { k: 10, v: new Skill.ptr(0, 40, 40, 40, 1, 13, new sliceType$2([new FireballBullet.ptr(0, 0, 0, 0, 0, 0, 500, 0, 0, ptrType.nil, new BulletConfig.ptr(12, 0, 0, 999999999, 15, 9, 200, 0, 20, -1, -1, 2400, 500, 4800, 3200, false, 15, 1, false))])) }, { k: 11, v: new Skill.ptr(0, 60, 60, 60, 1, 14, new sliceType$2([new MeleeBullet.ptr(0, 0, ptrType.nil, new BulletConfig.ptr(3, 0, 0, 25, 999999999, 9, 200, 700, 30, 100, 800, 800, 0, 4000, 6400, true, 15, 3, false))])) }, { k: 255, v: new Skill.ptr(0, 30, 30, 30, 1, 6, new sliceType$2([new MeleeBullet.ptr(0, 0, ptrType.nil, new BulletConfig.ptr(3, 0, 0, 20, 18, 9, 50, 0, 5, -1, -1, 1200, 0, 3200, 2400, false, 9, 1, false))])) }, { k: 256, v: new Skill.ptr(0, 20, 20, 20, 1, 6, new sliceType$2([new MeleeBullet.ptr(0, 0, ptrType.nil, new BulletConfig.ptr(3, 0, 0, 10, 15, 9, 50, 0, 5, -1, -1, 1200, 0, 3200, 2400, false, 15, 2, false))])) }, { k: 257, v: new Skill.ptr(0, 30, 30, 30, 1, 6, new sliceType$2([new MeleeBullet.ptr(0, 0, ptrType.nil, new BulletConfig.ptr(3, 0, 0, 20, 18, 9, 50, 0, 5, -1, -1, 1200, 0, 3200, 2400, false, 9, 1, false))])) }]); + $pkg.Characters = $makeMap($Int.keyFor, [{ k: 0, v: new CharacterConfig.ptr(0, "MonkGirl", 11, 1, 16, 16, 10, 27, 300, 800, false, false, 0, 0, 0, 0, (function(patternId, currPlayerDownsync) { + var _entry, _entry$1, _ref, _tuple, _tuple$1, currPlayerDownsync, existent1, existent2, nextSkillId, patternId, skillConfig, v, x, x$1; + if (1 === patternId) { + if (0 === currPlayerDownsync.FramesToRecover) { + if (currPlayerDownsync.InAir) { + return 255; + } else { + return 1; + } + } else { + _tuple = (_entry = skills[$Int.keyFor(((currPlayerDownsync.ActiveSkillId >> 0)))], _entry !== undefined ? [_entry.v, true] : [ptrType$2.nil, false]); + skillConfig = _tuple[0]; + existent1 = _tuple[1]; + if (existent1) { + _ref = (x = skillConfig.Hits, x$1 = currPlayerDownsync.ActiveSkillHit, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1])); + if ($assertType(_ref, ptrType$3, true)[1]) { + v = _ref.$val; + if (v.Bullet.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.Bullet.CancellableEdFrame) { + _tuple$1 = (_entry$1 = v.Bullet.CancelTransit[$Int.keyFor(patternId)], _entry$1 !== undefined ? [_entry$1.v, true] : [0, false]); + nextSkillId = _tuple$1[0]; + existent2 = _tuple$1[1]; + if (existent2) { + return nextSkillId; + } + } + } + } + } + } + return -1; + })) }, { k: 1, v: new CharacterConfig.ptr(1, "KnifeGirl", 9, 1, 16, 16, 10, 27, 400, 750, true, true, 9, 250, 700, -100, (function(patternId, currPlayerDownsync) { + var _entry, _entry$1, _ref, _tuple, _tuple$1, currPlayerDownsync, existent1, existent2, nextSkillId, patternId, skillConfig, v, x, x$1; + if (1 === patternId) { + if (0 === currPlayerDownsync.FramesToRecover) { + if (currPlayerDownsync.InAir) { + return 256; + } else { + return 4; + } + } else { + _tuple = (_entry = skills[$Int.keyFor(((currPlayerDownsync.ActiveSkillId >> 0)))], _entry !== undefined ? [_entry.v, true] : [ptrType$2.nil, false]); + skillConfig = _tuple[0]; + existent1 = _tuple[1]; + if (existent1) { + _ref = (x = skillConfig.Hits, x$1 = currPlayerDownsync.ActiveSkillHit, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1])); + if ($assertType(_ref, ptrType$3, true)[1]) { + v = _ref.$val; + if (v.Bullet.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.Bullet.CancellableEdFrame) { + _tuple$1 = (_entry$1 = v.Bullet.CancelTransit[$Int.keyFor(patternId)], _entry$1 !== undefined ? [_entry$1.v, true] : [0, false]); + nextSkillId = _tuple$1[0]; + existent2 = _tuple$1[1]; + if (existent2) { + return nextSkillId; + } + } + } + } + } + } + return -1; + })) }, { k: 4096, v: new CharacterConfig.ptr(4096, "Monk", 42, 2, 14, 14, 8, 30, 300, 750, false, false, 0, 0, 0, 0, (function(patternId, currPlayerDownsync) { + var _entry, _entry$1, _ref, _tuple, _tuple$1, currPlayerDownsync, existent1, existent2, nextSkillId, patternId, skillConfig, v, x, x$1; + if (1 === patternId) { + if (0 === currPlayerDownsync.FramesToRecover) { + if (currPlayerDownsync.InAir) { + return 257; + } else { + return 7; + } + } else { + _tuple = (_entry = skills[$Int.keyFor(((currPlayerDownsync.ActiveSkillId >> 0)))], _entry !== undefined ? [_entry.v, true] : [ptrType$2.nil, false]); + skillConfig = _tuple[0]; + existent1 = _tuple[1]; + if (existent1) { + _ref = (x = skillConfig.Hits, x$1 = currPlayerDownsync.ActiveSkillHit, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1])); + if ($assertType(_ref, ptrType$3, true)[1]) { + v = _ref.$val; + if (v.Bullet.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.Bullet.CancellableEdFrame) { + _tuple$1 = (_entry$1 = v.Bullet.CancelTransit[$Int.keyFor(patternId)], _entry$1 !== undefined ? [_entry$1.v, true] : [0, false]); + nextSkillId = _tuple$1[0]; + existent2 = _tuple$1[1]; + if (existent2) { + return nextSkillId; + } + } + } + } + } + } else if (2 === patternId) { + if (!currPlayerDownsync.InAir) { + return 11; + } + } else if (3 === patternId) { + if (!currPlayerDownsync.InAir) { + return 10; + } + } + return -1; + })) }]); + inAirSet = $makeMap($Int32.keyFor, [{ k: 4, v: true }, { k: 5, v: true }, { k: 6, v: true }, { k: 7, v: true }, { k: 8, v: true }, { k: 16, v: true }]); + noOpSet = $makeMap($Int32.keyFor, [{ k: 3, v: true }, { k: 7, v: true }, { k: 8, v: true }, { k: 9, v: true }]); + invinsibleSet = $makeMap($Int32.keyFor, [{ k: 8, v: true }, { k: 9, v: true }, { k: 10, v: true }]); + nonAttackingSet = $makeMap($Int32.keyFor, [{ k: 0, v: true }, { k: 1, v: true }, { k: 4, v: true }, { k: 5, v: true }, { k: 3, v: true }, { k: 7, v: true }, { k: 8, v: true }, { k: 9, v: true }, { k: 10, v: true }]); + /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; + }; + $pkg.$init = $init; + return $pkg; +})(); +$packages["jsexport"] = (function() { + var $pkg = {}, $init, js, battle, resolv, sliceType, ptrType, sliceType$1, ptrType$1, ptrType$2, sliceType$2, ptrType$3, sliceType$3, ptrType$4, sliceType$4, ptrType$5, sliceType$5, ptrType$6, funcType, funcType$1, funcType$2, funcType$3, funcType$4, funcType$5, funcType$6, funcType$7, funcType$8, funcType$9, funcType$10, funcType$11, funcType$12, ptrType$7, funcType$13, funcType$14, funcType$15, funcType$16, sliceType$6, funcType$17, ptrType$8, ptrType$9, ptrType$10, mapType, sliceType$7, funcType$18, funcType$19, funcType$20, funcType$21, funcType$22, mapType$1, NewInputFrameDownsync, NewRingBufferJs, NewCollisionSpaceJs, NewVec2DJs, NewPolygon2DJs, NewBarrierJs, NewPlayerDownsyncJs, NewMeleeBulletJs, NewFireballBulletJs, NewNpcPatrolCue, NewRoomDownsyncFrameJs, GetCollisionSpaceObjsJs, GenerateRectColliderJs, GenerateConvexPolygonColliderJs, GetCharacterConfigsOrderedByJoinIndex, ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs, main; + js = $packages["github.com/gopherjs/gopherjs/js"]; + battle = $packages["jsexport/battle"]; + resolv = $packages["resolv"]; + sliceType = $sliceType($Uint64); + ptrType = $ptrType(battle.Vec2D); + sliceType$1 = $sliceType(ptrType); + ptrType$1 = $ptrType(battle.Polygon2D); + ptrType$2 = $ptrType(battle.PlayerDownsync); + sliceType$2 = $sliceType(ptrType$2); + ptrType$3 = $ptrType(battle.MeleeBullet); + sliceType$3 = $sliceType(ptrType$3); + ptrType$4 = $ptrType(battle.FireballBullet); + sliceType$4 = $sliceType(ptrType$4); + ptrType$5 = $ptrType(js.Object); + sliceType$5 = $sliceType(ptrType$5); + ptrType$6 = $ptrType(battle.CharacterConfig); + funcType = $funcType([$Float64, $Float64], [ptrType$5], false); + funcType$1 = $funcType([ptrType, sliceType$1], [ptrType$5], false); + funcType$2 = $funcType([ptrType$1], [ptrType$5], false); + funcType$3 = $funcType([$Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Bool, $Bool, $Int32, $Int32, $Int32, $Int32], [ptrType$5], false); + funcType$4 = $funcType([$Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Bool, $Int32, $Int32, $Int32, $Int32, $Int32], [ptrType$5], false); + funcType$5 = $funcType([$Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Bool, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32], [ptrType$5], false); + funcType$6 = $funcType([$Uint64, $Uint64, $Float64, $Float64], [ptrType$5], false); + funcType$7 = $funcType([$Int32, sliceType$2, $Int32, sliceType$3, sliceType$4], [ptrType$5], false); + funcType$8 = $funcType([$Int, $Int, $Int, $Int], [ptrType$5], false); + funcType$9 = $funcType([$Int32, sliceType, $Uint64], [ptrType$5], false); + funcType$10 = $funcType([$Int32], [ptrType$5], false); + funcType$11 = $funcType([$Float64, $Float64, $Float64, $Float64, $Float64, $Float64, $emptyInterface, $String], [ptrType$5], false); + funcType$12 = $funcType([ptrType$1, $Float64, $Float64, $emptyInterface, $String], [ptrType$5], false); + ptrType$7 = $ptrType(resolv.Space); + funcType$13 = $funcType([ptrType$7], [sliceType$5], false); + funcType$14 = $funcType([$Float64, $Float64, $Float64, $Float64, $Float64, $Float64, $Float64, $Float64, $Float64, $Float64], [$Float64, $Float64], false); + funcType$15 = $funcType([$Float64, $Float64], [$Int32, $Int32], false); + funcType$16 = $funcType([$Int32, $Int32], [$Float64, $Float64], false); + sliceType$6 = $sliceType($Int); + funcType$17 = $funcType([sliceType$6], [sliceType$5], false); + ptrType$8 = $ptrType(battle.RingBuffer); + ptrType$9 = $ptrType(battle.RoomDownsyncFrame); + ptrType$10 = $ptrType(resolv.Object); + mapType = $mapType($Int32, ptrType$10); + sliceType$7 = $sliceType(ptrType$6); + funcType$18 = $funcType([ptrType$8, ptrType$9, ptrType$7, mapType, $Float64, $Float64, sliceType$7], [ptrType$5], false); + funcType$19 = $funcType([$Int32], [$Int32], false); + funcType$20 = $funcType([$Int32], [$Bool], false); + funcType$21 = $funcType([ptrType$3, ptrType$9], [$Bool], false); + funcType$22 = $funcType([ptrType$4, ptrType$9], [$Bool], false); + mapType$1 = $mapType($String, $emptyInterface); + NewInputFrameDownsync = function(inputFrameId, inputList, confirmedList) { + var {$24r, _r, confirmedList, inputFrameId, inputList, $s, $r, $c} = $restore(this, {inputFrameId, inputList, confirmedList}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = js.MakeFullWrapper(new battle.InputFrameDownsync.ptr(inputFrameId, inputList, confirmedList)); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $24r = _r; + $s = 2; case 2: return $24r; + /* */ } return; } var $f = {$blk: NewInputFrameDownsync, $c: true, $r, $24r, _r, confirmedList, inputFrameId, inputList, $s};return $f; + }; + $pkg.NewInputFrameDownsync = NewInputFrameDownsync; + NewRingBufferJs = function(n) { + var {$24r, _r, n, $s, $r, $c} = $restore(this, {n}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = js.MakeFullWrapper(battle.NewRingBuffer(n)); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $24r = _r; + $s = 2; case 2: return $24r; + /* */ } return; } var $f = {$blk: NewRingBufferJs, $c: true, $r, $24r, _r, n, $s};return $f; + }; + $pkg.NewRingBufferJs = NewRingBufferJs; + NewCollisionSpaceJs = function(spaceW, spaceH, minStepW, minStepH) { + var minStepH, minStepW, spaceH, spaceW; + return js.MakeWrapper(resolv.NewSpace(spaceW, spaceH, minStepW, minStepH)); + }; + $pkg.NewCollisionSpaceJs = NewCollisionSpaceJs; + NewVec2DJs = function(x, y) { + var {$24r, _r, x, y, $s, $r, $c} = $restore(this, {x, y}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = js.MakeFullWrapper(new battle.Vec2D.ptr(x, y)); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $24r = _r; + $s = 2; case 2: return $24r; + /* */ } return; } var $f = {$blk: NewVec2DJs, $c: true, $r, $24r, _r, x, y, $s};return $f; + }; + $pkg.NewVec2DJs = NewVec2DJs; + NewPolygon2DJs = function(anchor, points) { + var {$24r, _r, anchor, points, $s, $r, $c} = $restore(this, {anchor, points}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = js.MakeFullWrapper(new battle.Polygon2D.ptr(anchor, points)); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $24r = _r; + $s = 2; case 2: return $24r; + /* */ } return; } var $f = {$blk: NewPolygon2DJs, $c: true, $r, $24r, _r, anchor, points, $s};return $f; + }; + $pkg.NewPolygon2DJs = NewPolygon2DJs; + NewBarrierJs = function(boundary) { + var boundary; + return js.MakeWrapper(new battle.Barrier.ptr(boundary)); + }; + $pkg.NewBarrierJs = NewBarrierJs; + NewPlayerDownsyncJs = function(id, virtualGridX, virtualGridY, dirX, dirY, velX, velY, framesToRecover, framesInChState, activeSkillId, activeSkillHit, framesInvinsible, speed, battleState, characterState, joinIndex, hp, maxHp, colliderRadius, inAir, onWall, onWallNormX, onWallNormY, bulletTeamId, chCollisionTeamId) { + var activeSkillHit, activeSkillId, battleState, bulletTeamId, chCollisionTeamId, characterState, colliderRadius, dirX, dirY, framesInChState, framesInvinsible, framesToRecover, hp, id, inAir, joinIndex, maxHp, onWall, onWallNormX, onWallNormY, speed, velX, velY, virtualGridX, virtualGridY; + return js.MakeWrapper(new battle.PlayerDownsync.ptr(id, virtualGridX, virtualGridY, dirX, dirY, velX, velY, speed, battleState, joinIndex, colliderRadius, false, 0, 0, framesToRecover, framesInChState, hp, maxHp, characterState, inAir, onWall, onWallNormX, onWallNormY, activeSkillId, activeSkillHit, framesInvinsible, bulletTeamId, chCollisionTeamId)); + }; + $pkg.NewPlayerDownsyncJs = NewPlayerDownsyncJs; + NewMeleeBulletJs = function(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, teamId, blState, framesInBlState, explosionFrames, speciesId) { + var activeFrames, blState, blockStunFrames, blowUp, bulletLocalId, cancellableEdFrame, cancellableStFrame, damage, explosionFrames, framesInBlState, hitStunFrames, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, offenderJoinIndex, originatedRenderFrameId, pushbackVelX, pushbackVelY, selfLockVelX, selfLockVelY, speciesId, startupFrames, teamId; + return js.MakeWrapper(battle.NewMeleeBullet(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, teamId, blState, framesInBlState, explosionFrames, speciesId)); + }; + $pkg.NewMeleeBulletJs = NewMeleeBulletJs; + NewFireballBulletJs = function(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, teamId, virtualGridX, virtualGridY, dirX, dirY, velX, velY, speed, blState, framesInBlState, explosionFrames, speciesId) { + var activeFrames, blState, blockStunFrames, blowUp, bulletLocalId, cancellableEdFrame, cancellableStFrame, damage, dirX, dirY, explosionFrames, framesInBlState, hitStunFrames, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, offenderJoinIndex, originatedRenderFrameId, pushbackVelX, pushbackVelY, selfLockVelX, selfLockVelY, speciesId, speed, startupFrames, teamId, velX, velY, virtualGridX, virtualGridY; + return js.MakeWrapper(battle.NewFireballBullet(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, teamId, virtualGridX, virtualGridY, dirX, dirY, velX, velY, speed, blState, framesInBlState, explosionFrames, speciesId)); + }; + $pkg.NewFireballBulletJs = NewFireballBulletJs; + NewNpcPatrolCue = function(flAct, frAct, x, y) { + var {$24r, _r, flAct, frAct, x, y, $s, $r, $c} = $restore(this, {flAct, frAct, x, y}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = js.MakeFullWrapper(new battle.NpcPatrolCue.ptr(flAct, frAct, x, y)); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $24r = _r; + $s = 2; case 2: return $24r; + /* */ } return; } var $f = {$blk: NewNpcPatrolCue, $c: true, $r, $24r, _r, flAct, frAct, x, y, $s};return $f; + }; + $pkg.NewNpcPatrolCue = NewNpcPatrolCue; + NewRoomDownsyncFrameJs = function(id, playersArr, bulletLocalIdCounter, meleeBullets, fireballBullets) { + var {$24r, _r, bulletLocalIdCounter, fireballBullets, id, meleeBullets, playersArr, $s, $r, $c} = $restore(this, {id, playersArr, bulletLocalIdCounter, meleeBullets, fireballBullets}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = js.MakeFullWrapper(new battle.RoomDownsyncFrame.ptr(id, playersArr, new $Int64(0, 0), meleeBullets, fireballBullets, new $Uint64(0, 0), false, bulletLocalIdCounter)); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $24r = _r; + $s = 2; case 2: return $24r; + /* */ } return; } var $f = {$blk: NewRoomDownsyncFrameJs, $c: true, $r, $24r, _r, bulletLocalIdCounter, fireballBullets, id, meleeBullets, playersArr, $s};return $f; + }; + $pkg.NewRoomDownsyncFrameJs = NewRoomDownsyncFrameJs; + GetCollisionSpaceObjsJs = function(space) { + var {_i, _r, _ref, obj, objs, ret, space, $s, $r, $c} = $restore(this, {space}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + objs = space.Objects(); + ret = $makeSlice(sliceType$5, 0, objs.$length); + _ref = objs; + _i = 0; + /* while (true) { */ case 1: + /* if (!(_i < _ref.$length)) { break; } */ if(!(_i < _ref.$length)) { $s = 2; continue; } + obj = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + _r = js.MakeFullWrapper(obj); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + ret = $append(ret, _r); + _i++; + $s = 1; continue; + case 2: + $s = -1; return ret; + /* */ } return; } var $f = {$blk: GetCollisionSpaceObjsJs, $c: true, $r, _i, _r, _ref, obj, objs, ret, space, $s};return $f; + }; + $pkg.GetCollisionSpaceObjsJs = GetCollisionSpaceObjsJs; + GenerateRectColliderJs = function(wx, wy, w, h, spaceOffsetX, spaceOffsetY, data, tag) { + var {$24r, _r, _r$1, _tmp, _tmp$1, _tmp$2, _tmp$3, bottomPadding, data, h, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, tag, topPadding, w, wx, wy, $s, $r, $c} = $restore(this, {wx, wy, w, h, spaceOffsetX, spaceOffsetY, data, tag}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _tmp = 0.1; + _tmp$1 = 0.1; + _tmp$2 = 0.1; + _tmp$3 = 0.1; + topPadding = _tmp; + bottomPadding = _tmp$1; + leftPadding = _tmp$2; + rightPadding = _tmp$3; + _r = battle.GenerateRectCollider(wx, wy, w, h, topPadding, bottomPadding, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, data, tag); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + _r$1 = js.MakeFullWrapper(_r); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; } + $24r = _r$1; + $s = 3; case 3: return $24r; + /* */ } return; } var $f = {$blk: GenerateRectColliderJs, $c: true, $r, $24r, _r, _r$1, _tmp, _tmp$1, _tmp$2, _tmp$3, bottomPadding, data, h, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, tag, topPadding, w, wx, wy, $s};return $f; + }; + $pkg.GenerateRectColliderJs = GenerateRectColliderJs; + GenerateConvexPolygonColliderJs = function(unalignedSrc, spaceOffsetX, spaceOffsetY, data, tag) { + var {$24r, _r, _r$1, data, spaceOffsetX, spaceOffsetY, tag, unalignedSrc, $s, $r, $c} = $restore(this, {unalignedSrc, spaceOffsetX, spaceOffsetY, data, tag}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = battle.GenerateConvexPolygonCollider(unalignedSrc, spaceOffsetX, spaceOffsetY, data, tag); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + _r$1 = js.MakeFullWrapper(_r); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; } + $24r = _r$1; + $s = 3; case 3: return $24r; + /* */ } return; } var $f = {$blk: GenerateConvexPolygonColliderJs, $c: true, $r, $24r, _r, _r$1, data, spaceOffsetX, spaceOffsetY, tag, unalignedSrc, $s};return $f; + }; + $pkg.GenerateConvexPolygonColliderJs = GenerateConvexPolygonColliderJs; + GetCharacterConfigsOrderedByJoinIndex = function(speciesIdList) { + var {_entry, _i, _r, _ref, i, ret, speciesId, speciesIdList, $s, $r, $c} = $restore(this, {speciesIdList}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + ret = $makeSlice(sliceType$5, speciesIdList.$length, speciesIdList.$length); + _ref = speciesIdList; + _i = 0; + /* while (true) { */ case 1: + /* if (!(_i < _ref.$length)) { break; } */ if(!(_i < _ref.$length)) { $s = 2; continue; } + i = _i; + speciesId = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + _r = js.MakeFullWrapper((_entry = battle.Characters[$Int.keyFor(speciesId)], _entry !== undefined ? _entry.v : ptrType$6.nil)); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + ((i < 0 || i >= ret.$length) ? ($throwRuntimeError("index out of range"), undefined) : ret.$array[ret.$offset + i] = _r); + _i++; + $s = 1; continue; + case 2: + $s = -1; return ret; + /* */ } return; } var $f = {$blk: GetCharacterConfigsOrderedByJoinIndex, $c: true, $r, _entry, _i, _r, _ref, i, ret, speciesId, speciesIdList, $s};return $f; + }; + $pkg.GetCharacterConfigsOrderedByJoinIndex = GetCharacterConfigsOrderedByJoinIndex; + ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs = function(inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex) { + var {$24r, _r, _r$1, chConfigsOrderedByJoinIndex, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currRenderFrame, inputsBuffer, $s, $r, $c} = $restore(this, {inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = battle.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + _r$1 = js.MakeFullWrapper(_r); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; } + $24r = _r$1; + $s = 3; case 3: return $24r; + /* */ } return; } var $f = {$blk: ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs, $c: true, $r, $24r, _r, _r$1, chConfigsOrderedByJoinIndex, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currRenderFrame, inputsBuffer, $s};return $f; + }; + $pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs = ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs; + main = function() { + $global.gopkgs = $externalize($makeMap($String.keyFor, [{ k: "NewVec2DJs", v: new funcType(NewVec2DJs) }, { k: "NewPolygon2DJs", v: new funcType$1(NewPolygon2DJs) }, { k: "NewBarrierJs", v: new funcType$2(NewBarrierJs) }, { k: "NewPlayerDownsyncJs", v: new funcType$3(NewPlayerDownsyncJs) }, { k: "NewMeleeBulletJs", v: new funcType$4(NewMeleeBulletJs) }, { k: "NewFireballBulletJs", v: new funcType$5(NewFireballBulletJs) }, { k: "NewNpcPatrolCue", v: new funcType$6(NewNpcPatrolCue) }, { k: "NewRoomDownsyncFrameJs", v: new funcType$7(NewRoomDownsyncFrameJs) }, { k: "NewCollisionSpaceJs", v: new funcType$8(NewCollisionSpaceJs) }, { k: "NewInputFrameDownsync", v: new funcType$9(NewInputFrameDownsync) }, { k: "NewRingBufferJs", v: new funcType$10(NewRingBufferJs) }, { k: "GenerateRectColliderJs", v: new funcType$11(GenerateRectColliderJs) }, { k: "GenerateConvexPolygonColliderJs", v: new funcType$12(GenerateConvexPolygonColliderJs) }, { k: "GetCollisionSpaceObjsJs", v: new funcType$13(GetCollisionSpaceObjsJs) }, { k: "WorldToPolygonColliderBLPos", v: new funcType$14(battle.WorldToPolygonColliderBLPos) }, { k: "PolygonColliderBLToWorldPos", v: new funcType$14(battle.PolygonColliderBLToWorldPos) }, { k: "WorldToVirtualGridPos", v: new funcType$15(battle.WorldToVirtualGridPos) }, { k: "VirtualGridToWorldPos", v: new funcType$16(battle.VirtualGridToWorldPos) }, { k: "GetCharacterConfigsOrderedByJoinIndex", v: new funcType$17(GetCharacterConfigsOrderedByJoinIndex) }, { k: "ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs", v: new funcType$18(ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs) }, { k: "ConvertToDelayedInputFrameId", v: new funcType$19(battle.ConvertToDelayedInputFrameId) }, { k: "ConvertToNoDelayInputFrameId", v: new funcType$19(battle.ConvertToNoDelayInputFrameId) }, { k: "ConvertToFirstUsedRenderFrameId", v: new funcType$19(battle.ConvertToFirstUsedRenderFrameId) }, { k: "ConvertToLastUsedRenderFrameId", v: new funcType$19(battle.ConvertToLastUsedRenderFrameId) }, { k: "ShouldGenerateInputFrameUpsync", v: new funcType$20(battle.ShouldGenerateInputFrameUpsync) }, { k: "IsMeleeBulletActive", v: new funcType$21(battle.IsMeleeBulletActive) }, { k: "IsMeleeBulletAlive", v: new funcType$21(battle.IsMeleeBulletAlive) }, { k: "IsFireballBulletActive", v: new funcType$22(battle.IsFireballBulletActive) }, { k: "IsFireballBulletAlive", v: new funcType$22(battle.IsFireballBulletAlive) }]), mapType$1); + }; + $init = function() { + $pkg.$init = function() {}; + /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: + $r = js.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + $r = battle.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + $r = resolv.$init(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + if ($pkg === $mainPkg) { + main(); + $mainFinished = true; + } + /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; + }; + $pkg.$init = $init; + return $pkg; +})(); $synthesizeMethods(); $initAllLinknames(); var $mainPkg = $packages["jsexport"]; diff --git a/frontend/assets/resources/animation/KnifeGirl/Atk2.anim b/frontend/assets/resources/animation/KnifeGirl/Atk2.anim index a73ecfe..b004a8d 100644 --- a/frontend/assets/resources/animation/KnifeGirl/Atk2.anim +++ b/frontend/assets/resources/animation/KnifeGirl/Atk2.anim @@ -18,61 +18,43 @@ } }, { - "frame": 0.06666666666666667, + "frame": 0.05, "value": { "__uuid__": "dd9a00aa-ddbc-4b01-a7cb-3c43c3a655b6" } }, { - "frame": 0.11666666666666667, - "value": { - "__uuid__": "f66e83bd-1afc-4957-bb16-488d70566ed1" - } - }, - { - "frame": 0.16666666666666666, - "value": { - "__uuid__": "bd682c41-dc62-49ff-a96a-18b33e50a6de" - } - }, - { - "frame": 0.23333333333333334, - "value": { - "__uuid__": "94ccab85-e32f-4e13-b0e5-72c798f78ad1" - } - }, - { - "frame": 0.3, + "frame": 0.08333333333333333, "value": { "__uuid__": "e80d3a01-5048-42b7-a280-cb6aa01602c2" } }, { - "frame": 0.36666666666666664, + "frame": 0.11666666666666667, "value": { "__uuid__": "d899088c-be62-47b4-9ebf-0a89a2261565" } }, { - "frame": 0.4166666666666667, + "frame": 0.15, "value": { "__uuid__": "5b1e5aa7-fd82-47ae-a5b2-6d4983d848ed" } }, { - "frame": 0.48333333333333334, + "frame": 0.18333333333333332, "value": { "__uuid__": "c2945988-b4bb-4583-a5ef-2fa02b23a347" } }, { - "frame": 0.5666666666666667, + "frame": 0.23333333333333334, "value": { "__uuid__": "070ea1e3-9c07-4735-8b94-515ef70216ad" } }, { - "frame": 0.6666666666666666, + "frame": 0.2833333333333333, "value": { "__uuid__": "3b8bc5c0-26df-4218-b7dc-134a36080a35" } diff --git a/frontend/assets/resources/animation/Monk/Monk.plist b/frontend/assets/resources/animation/Monk/Monk.plist index 12982ed..eb4280a 100644 --- a/frontend/assets/resources/animation/Monk/Monk.plist +++ b/frontend/assets/resources/animation/Monk/Monk.plist @@ -11,11 +11,11 @@ spriteOffset {0,0} spriteSize - {121,107} + {95,105} spriteSourceSize - {121,107} + {95,105} textureRect - {{1558,364},{121,107}} + {{422,574},{95,105}} textureRotated @@ -26,11 +26,11 @@ spriteOffset {0,0} spriteSize - {121,107} + {95,105} spriteSourceSize - {121,107} + {95,105} textureRect - {{693,681},{121,107}} + {{703,587},{95,105}} textureRotated @@ -41,11 +41,11 @@ spriteOffset {0,0} spriteSize - {121,107} + {95,105} spriteSourceSize - {121,107} + {95,105} textureRect - {{693,788},{121,107}} + {{1637,622},{95,105}} textureRotated @@ -56,13 +56,13 @@ spriteOffset {0,0} spriteSize - {121,107} + {95,105} spriteSourceSize - {121,107} + {95,105} textureRect - {{693,788},{121,107}} + {{913,1018},{95,105}} textureRotated - + Atk1_5.png @@ -71,13 +71,13 @@ spriteOffset {0,0} spriteSize - {121,107} + {95,105} spriteSourceSize - {121,107} + {95,105} textureRect - {{693,788},{121,107}} + {{1018,1018},{95,105}} textureRotated - + Atk1_6.png @@ -86,13 +86,13 @@ spriteOffset {0,0} spriteSize - {121,107} + {95,105} spriteSourceSize - {121,107} + {95,105} textureRect - {{693,895},{121,107}} + {{1018,1018},{95,105}} textureRotated - + Atk1_7.png @@ -101,11 +101,41 @@ spriteOffset {0,0} spriteSize - {121,107} + {95,105} spriteSourceSize - {121,107} + {95,105} textureRect - {{814,683},{121,107}} + {{1123,1020},{95,105}} + textureRotated + + + Atk1_8.png + + aliases + + spriteOffset + {0,0} + spriteSize + {95,105} + spriteSourceSize + {95,105} + textureRect + {{1228,1020},{95,105}} + textureRotated + + + Atk1_9.png + + aliases + + spriteOffset + {0,0} + spriteSize + {95,105} + spriteSourceSize + {95,105} + textureRect + {{422,574},{95,105}} textureRotated @@ -120,7 +150,7 @@ spriteSourceSize {123,113} textureRect - {{140,629},{123,113}} + {{1867,177},{123,113}} textureRotated @@ -135,7 +165,7 @@ spriteSourceSize {123,113} textureRect - {{140,742},{123,113}} + {{517,557},{123,113}} textureRotated @@ -150,7 +180,7 @@ spriteSourceSize {123,113} textureRect - {{140,855},{123,113}} + {{798,576},{123,113}} textureRotated @@ -165,7 +195,7 @@ spriteSourceSize {123,113} textureRect - {{140,968},{123,113}} + {{921,571},{123,113}} textureRotated @@ -180,7 +210,7 @@ spriteSourceSize {123,113} textureRect - {{263,657},{123,113}} + {{1044,571},{123,113}} textureRotated @@ -195,7 +225,7 @@ spriteSourceSize {123,113} textureRect - {{263,770},{123,113}} + {{1167,573},{123,113}} textureRotated @@ -210,7 +240,7 @@ spriteSourceSize {123,113} textureRect - {{263,883},{123,113}} + {{1290,573},{123,113}} textureRotated @@ -225,9 +255,9 @@ spriteSourceSize {123,113} textureRect - {{263,996},{123,113}} + {{576,801},{123,113}} textureRotated - + Atk2_4.png @@ -240,9 +270,9 @@ spriteSourceSize {123,113} textureRect - {{386,694},{123,113}} + {{576,924},{123,113}} textureRotated - + Atk2_5.png @@ -255,9 +285,9 @@ spriteSourceSize {123,113} textureRect - {{386,807},{123,113}} + {{689,793},{123,113}} textureRotated - + Atk2_6.png @@ -270,9 +300,9 @@ spriteSourceSize {123,113} textureRect - {{386,807},{123,113}} + {{689,793},{123,113}} textureRotated - + Atk2_7.png @@ -285,9 +315,9 @@ spriteSourceSize {123,113} textureRect - {{386,920},{123,113}} + {{689,916},{123,113}} textureRotated - + Atk2_8.png @@ -300,9 +330,9 @@ spriteSourceSize {123,113} textureRect - {{386,920},{123,113}} + {{689,916},{123,113}} textureRotated - + Atk2_9.png @@ -315,7 +345,7 @@ spriteSourceSize {123,113} textureRect - {{140,742},{123,113}} + {{517,557},{123,113}} textureRotated @@ -330,7 +360,7 @@ spriteSourceSize {101,123} textureRect - {{386,1033},{101,123}} + {{659,692},{101,123}} textureRotated @@ -345,7 +375,7 @@ spriteSourceSize {101,123} textureRect - {{592,672},{101,123}} + {{1413,573},{101,123}} textureRotated @@ -360,9 +390,9 @@ spriteSourceSize {101,123} textureRect - {{592,795},{101,123}} + {{782,692},{101,123}} textureRotated - + Atk3_12.png @@ -375,7 +405,7 @@ spriteSourceSize {101,123} textureRect - {{592,918},{101,123}} + {{802,793},{101,123}} textureRotated @@ -390,7 +420,7 @@ spriteSourceSize {101,123} textureRect - {{814,790},{101,123}} + {{802,916},{101,123}} textureRotated @@ -405,9 +435,9 @@ spriteSourceSize {101,123} textureRect - {{935,683},{101,123}} + {{1514,499},{101,123}} textureRotated - + Atk3_2.png @@ -420,9 +450,9 @@ spriteSourceSize {101,123} textureRect - {{1058,683},{101,123}} + {{1615,499},{101,123}} textureRotated - + Atk3_3.png @@ -435,7 +465,7 @@ spriteSourceSize {101,123} textureRect - {{1181,683},{101,123}} + {{1514,622},{101,123}} textureRotated @@ -450,7 +480,7 @@ spriteSourceSize {101,123} textureRect - {{1304,683},{101,123}} + {{1802,502},{101,123}} textureRotated @@ -465,7 +495,7 @@ spriteSourceSize {101,123} textureRect - {{814,913},{101,123}} + {{1732,603},{101,123}} textureRotated @@ -480,7 +510,7 @@ spriteSourceSize {101,123} textureRect - {{1505,685},{101,123}} + {{1833,714},{101,123}} textureRotated @@ -495,7 +525,7 @@ spriteSourceSize {101,123} textureRect - {{1505,685},{101,123}} + {{1833,714},{101,123}} textureRotated @@ -510,7 +540,7 @@ spriteSourceSize {101,123} textureRect - {{592,1041},{101,123}} + {{1732,726},{101,123}} textureRotated @@ -525,7 +555,7 @@ spriteSourceSize {101,123} textureRect - {{693,1057},{101,123}} + {{1833,815},{101,123}} textureRotated @@ -540,9 +570,9 @@ spriteSourceSize {135,107} textureRect - {{1833,150},{135,107}} + {{140,627},{135,107}} textureRotated - + Atk4_10.png @@ -555,7 +585,7 @@ spriteSourceSize {135,107} textureRect - {{844,469},{135,107}} + {{140,734},{135,107}} textureRotated @@ -570,7 +600,7 @@ spriteSourceSize {135,107} textureRect - {{979,469},{135,107}} + {{140,841},{135,107}} textureRotated @@ -585,7 +615,7 @@ spriteSourceSize {135,107} textureRect - {{1114,469},{135,107}} + {{140,948},{135,107}} textureRotated @@ -600,7 +630,7 @@ spriteSourceSize {135,107} textureRect - {{1249,469},{135,107}} + {{275,679},{135,107}} textureRotated @@ -615,7 +645,7 @@ spriteSourceSize {135,107} textureRect - {{1384,469},{135,107}} + {{275,786},{135,107}} textureRotated @@ -630,7 +660,7 @@ spriteSourceSize {135,107} textureRect - {{1519,471},{135,107}} + {{275,893},{135,107}} textureRotated @@ -645,7 +675,7 @@ spriteSourceSize {135,107} textureRect - {{562,565},{135,107}} + {{275,1000},{135,107}} textureRotated @@ -660,7 +690,7 @@ spriteSourceSize {135,107} textureRect - {{697,574},{135,107}} + {{1199,383},{135,107}} textureRotated @@ -675,7 +705,7 @@ spriteSourceSize {135,107} textureRect - {{832,576},{135,107}} + {{1334,383},{135,107}} textureRotated @@ -690,7 +720,7 @@ spriteSourceSize {135,107} textureRect - {{967,576},{135,107}} + {{1532,392},{135,107}} textureRotated @@ -705,7 +735,7 @@ spriteSourceSize {135,107} textureRect - {{1102,576},{135,107}} + {{1667,392},{135,107}} textureRotated @@ -720,7 +750,7 @@ spriteSourceSize {135,107} textureRect - {{1237,576},{135,107}} + {{1802,395},{135,107}} textureRotated @@ -735,7 +765,7 @@ spriteSourceSize {135,107} textureRect - {{1372,576},{135,107}} + {{433,450},{135,107}} textureRotated @@ -750,7 +780,7 @@ spriteSourceSize {135,107} textureRect - {{1507,578},{135,107}} + {{568,450},{135,107}} textureRotated @@ -765,7 +795,7 @@ spriteSourceSize {135,107} textureRect - {{148,522},{135,107}} + {{786,469},{135,107}} textureRotated @@ -780,9 +810,9 @@ spriteSourceSize {96,150} textureRect - {{1844,0},{96,150}} + {{790,268},{96,150}} textureRotated - + Atk5_10.png @@ -795,7 +825,7 @@ spriteSourceSize {96,150} textureRect - {{1683,114},{96,150}} + {{967,191},{96,150}} textureRotated @@ -810,7 +840,7 @@ spriteSourceSize {96,150} textureRect - {{436,305},{96,150}} + {{1117,191},{96,150}} textureRotated @@ -825,7 +855,7 @@ spriteSourceSize {96,150} textureRect - {{586,268},{96,150}} + {{1267,191},{96,150}} textureRotated @@ -840,7 +870,7 @@ spriteSourceSize {96,150} textureRect - {{736,268},{96,150}} + {{1417,191},{96,150}} textureRotated @@ -855,7 +885,7 @@ spriteSourceSize {96,150} textureRect - {{886,268},{96,150}} + {{1567,191},{96,150}} textureRotated @@ -870,7 +900,7 @@ spriteSourceSize {96,150} textureRect - {{1036,268},{96,150}} + {{1717,191},{96,150}} textureRotated @@ -885,7 +915,7 @@ spriteSourceSize {96,150} textureRect - {{1186,268},{96,150}} + {{940,287},{96,150}} textureRotated @@ -900,7 +930,7 @@ spriteSourceSize {96,150} textureRect - {{1336,268},{96,150}} + {{1090,287},{96,150}} textureRotated @@ -915,7 +945,7 @@ spriteSourceSize {96,150} textureRect - {{1486,268},{96,150}} + {{1240,287},{96,150}} textureRotated @@ -930,7 +960,7 @@ spriteSourceSize {96,150} textureRect - {{586,364},{96,150}} + {{1390,287},{96,150}} textureRotated @@ -945,7 +975,7 @@ spriteSourceSize {86,104} textureRect - {{1235,1027},{86,104}} + {{1937,400},{86,104}} textureRotated @@ -960,7 +990,7 @@ spriteSourceSize {86,104} textureRect - {{1321,1046},{86,104}} + {{1716,499},{86,104}} textureRotated @@ -1245,7 +1275,7 @@ spriteSourceSize {140,114} textureRect - {{436,191},{140,114}} + {{1844,0},{140,114}} textureRotated @@ -1260,9 +1290,9 @@ spriteSourceSize {110,63} textureRect - {{1407,1056},{110,63}} + {{1860,114},{110,63}} textureRotated - + Explosion1_2.png @@ -1275,7 +1305,7 @@ spriteSourceSize {110,63} textureRect - {{1470,1056},{110,63}} + {{1469,383},{110,63}} textureRotated @@ -1290,7 +1320,7 @@ spriteSourceSize {110,63} textureRect - {{1654,471},{110,63}} + {{1951,290},{110,63}} textureRotated @@ -1305,7 +1335,7 @@ spriteSourceSize {110,63} textureRect - {{1679,320},{110,63}} + {{640,557},{110,63}} textureRotated @@ -1320,9 +1350,9 @@ spriteSourceSize {110,63} textureRect - {{1533,1041},{110,63}} + {{693,1039},{110,63}} textureRotated - + Explosion1_6.png @@ -1335,9 +1365,9 @@ spriteSourceSize {110,63} textureRect - {{1603,958},{110,63}} + {{803,1039},{110,63}} textureRotated - + Fireball1_1.png @@ -1350,7 +1380,7 @@ spriteSourceSize {117,55} textureRect - {{693,1002},{117,55}} + {{140,1055},{117,55}} textureRotated @@ -1365,7 +1395,7 @@ spriteSourceSize {117,55} textureRect - {{140,1081},{117,55}} + {{576,1047},{117,55}} textureRotated @@ -1380,7 +1410,7 @@ spriteSourceSize {117,55} textureRect - {{257,1109},{117,55}} + {{1911,604},{117,55}} textureRotated @@ -1395,7 +1425,7 @@ spriteSourceSize {117,55} textureRect - {{1638,210},{117,55}} + {{1911,659},{117,55}} textureRotated @@ -1410,9 +1440,9 @@ spriteSourceSize {117,55} textureRect - {{1638,265},{117,55}} + {{1956,714},{117,55}} textureRotated - + Fireball1_14.png @@ -1425,9 +1455,9 @@ spriteSourceSize {117,55} textureRect - {{1823,619},{117,55}} + {{1956,831},{117,55}} textureRotated - + Fireball1_15.png @@ -1440,7 +1470,7 @@ spriteSourceSize {117,55} textureRect - {{1505,786},{117,55}} + {{921,684},{117,55}} textureRotated @@ -1455,9 +1485,9 @@ spriteSourceSize {117,55} textureRect - {{1603,841},{117,55}} + {{1038,684},{117,55}} textureRotated - + Fireball1_17.png @@ -1470,9 +1500,9 @@ spriteSourceSize {117,55} textureRect - {{1658,792},{117,55}} + {{1155,686},{117,55}} textureRotated - + Fireball1_18.png @@ -1485,7 +1515,7 @@ spriteSourceSize {117,55} textureRect - {{1713,866},{117,55}} + {{1272,686},{117,55}} textureRotated @@ -1500,7 +1530,7 @@ spriteSourceSize {117,55} textureRect - {{1596,1068},{117,55}} + {{905,739},{117,55}} textureRotated @@ -1515,7 +1545,7 @@ spriteSourceSize {117,55} textureRect - {{1713,921},{117,55}} + {{1022,739},{117,55}} textureRotated @@ -1530,9 +1560,9 @@ spriteSourceSize {117,55} textureRect - {{1830,864},{117,55}} + {{1139,741},{117,55}} textureRotated - + Fireball1_21.png @@ -1545,9 +1575,9 @@ spriteSourceSize {117,55} textureRect - {{1885,864},{117,55}} + {{1256,741},{117,55}} textureRotated - + Fireball1_3.png @@ -1560,7 +1590,7 @@ spriteSourceSize {117,55} textureRect - {{1505,786},{117,55}} + {{921,684},{117,55}} textureRotated @@ -1575,9 +1605,9 @@ spriteSourceSize {117,55} textureRect - {{1666,976},{117,55}} + {{1351,796},{117,55}} textureRotated - + Fireball1_5.png @@ -1590,9 +1620,9 @@ spriteSourceSize {117,55} textureRect - {{1783,981},{117,55}} + {{1351,913},{117,55}} textureRotated - + Fireball1_6.png @@ -1605,7 +1635,7 @@ spriteSourceSize {117,55} textureRect - {{1713,1031},{117,55}} + {{1621,835},{117,55}} textureRotated @@ -1620,7 +1650,7 @@ spriteSourceSize {117,55} textureRect - {{1596,1068},{117,55}} + {{905,739},{117,55}} textureRotated @@ -1635,9 +1665,9 @@ spriteSourceSize {117,55} textureRect - {{1768,1036},{117,55}} + {{1676,830},{117,55}} textureRotated - + Fireball1_9.png @@ -1650,7 +1680,7 @@ spriteSourceSize {117,55} textureRect - {{1885,1036},{117,55}} + {{1621,952},{117,55}} textureRotated @@ -1665,7 +1695,7 @@ spriteSourceSize {137,105} textureRect - {{736,364},{137,105}} + {{1540,287},{137,105}} textureRotated @@ -1680,7 +1710,7 @@ spriteSourceSize {137,105} textureRect - {{873,364},{137,105}} + {{1677,287},{137,105}} textureRotated @@ -1695,7 +1725,7 @@ spriteSourceSize {137,105} textureRect - {{1010,364},{137,105}} + {{296,364},{137,105}} textureRotated @@ -1710,7 +1740,7 @@ spriteSourceSize {137,105} textureRect - {{1147,364},{137,105}} + {{288,469},{137,105}} textureRotated @@ -1725,7 +1755,7 @@ spriteSourceSize {137,105} textureRect - {{1284,364},{137,105}} + {{1814,290},{137,105}} textureRotated @@ -1740,7 +1770,7 @@ spriteSourceSize {137,105} textureRect - {{1421,364},{137,105}} + {{148,522},{137,105}} textureRotated @@ -1755,7 +1785,7 @@ spriteSourceSize {137,105} textureRect - {{296,364},{137,105}} + {{285,574},{137,105}} textureRotated @@ -1770,7 +1800,7 @@ spriteSourceSize {137,105} textureRect - {{433,401},{137,105}} + {{436,345},{137,105}} textureRotated @@ -1785,7 +1815,7 @@ spriteSourceSize {137,105} textureRect - {{288,469},{137,105}} + {{573,345},{137,105}} textureRotated @@ -1800,7 +1830,7 @@ spriteSourceSize {137,105} textureRect - {{425,506},{137,105}} + {{788,364},{137,105}} textureRotated @@ -1815,7 +1845,7 @@ spriteSourceSize {137,105} textureRect - {{570,460},{137,105}} + {{925,383},{137,105}} textureRotated @@ -1830,7 +1860,7 @@ spriteSourceSize {137,105} textureRect - {{707,469},{137,105}} + {{1062,383},{137,105}} textureRotated @@ -1845,7 +1875,7 @@ spriteSourceSize {78,111} textureRect - {{1427,683},{78,111}} + {{710,345},{78,111}} textureRotated @@ -1860,7 +1890,7 @@ spriteSourceSize {78,111} textureRect - {{1642,581},{78,111}} + {{1833,603},{78,111}} textureRotated @@ -1875,9 +1905,9 @@ spriteSourceSize {78,111} textureRect - {{1755,210},{78,111}} + {{1333,1030},{78,111}} textureRotated - + Idle1_3.png @@ -1890,7 +1920,7 @@ spriteSourceSize {78,111} textureRect - {{1742,321},{78,111}} + {{1731,849},{78,111}} textureRotated @@ -1905,7 +1935,7 @@ spriteSourceSize {78,111} textureRect - {{1829,385},{78,111}} + {{1676,960},{78,111}} textureRotated @@ -1920,7 +1950,7 @@ spriteSourceSize {78,111} textureRect - {{1829,463},{78,111}} + {{1676,1038},{78,111}} textureRotated @@ -1935,9 +1965,9 @@ spriteSourceSize {78,111} textureRect - {{1829,541},{78,111}} + {{1787,960},{78,111}} textureRotated - + Idle1_7.png @@ -1950,7 +1980,7 @@ spriteSourceSize {78,111} textureRect - {{1731,644},{78,111}} + {{1865,916},{78,111}} textureRotated @@ -1965,7 +1995,7 @@ spriteSourceSize {78,111} textureRect - {{1731,755},{78,111}} + {{1943,948},{78,111}} textureRotated @@ -1980,7 +2010,7 @@ spriteSourceSize {78,111} textureRect - {{1809,786},{78,111}} + {{1444,1035},{78,111}} textureRotated @@ -2145,7 +2175,7 @@ spriteSourceSize {103,100} textureRect - {{1628,692},{103,100}} + {{1925,504},{103,100}} textureRotated @@ -2160,7 +2190,7 @@ spriteSourceSize {103,100} textureRect - {{1833,285},{103,100}} + {{1389,696},{103,100}} textureRotated @@ -2175,7 +2205,7 @@ spriteSourceSize {103,100} textureRect - {{1720,544},{103,100}} + {{1518,835},{103,100}} textureRotated @@ -2190,9 +2220,9 @@ spriteSourceSize {103,100} textureRect - {{1500,841},{103,100}} + {{1630,727},{103,100}} textureRotated - + InAirAtked1_5.png @@ -2205,7 +2235,7 @@ spriteSourceSize {103,100} textureRect - {{1500,941},{103,100}} + {{1518,935},{103,100}} textureRotated @@ -2220,9 +2250,9 @@ spriteSourceSize {83,131} textureRect - {{283,574},{83,131}} + {{703,456},{83,131}} textureRotated - + InAirIdle1_10.png @@ -2235,7 +2265,7 @@ spriteSourceSize {83,131} textureRect - {{414,611},{83,131}} + {{921,488},{83,131}} textureRotated @@ -2250,9 +2280,9 @@ spriteSourceSize {83,131} textureRect - {{509,694},{83,131}} + {{1052,488},{83,131}} textureRotated - + InAirIdle1_12.png @@ -2265,9 +2295,9 @@ spriteSourceSize {83,131} textureRect - {{509,825},{83,131}} + {{1183,490},{83,131}} textureRotated - + InAirIdle1_2.png @@ -2280,9 +2310,9 @@ spriteSourceSize {83,131} textureRect - {{509,956},{83,131}} + {{1314,490},{83,131}} textureRotated - + InAirIdle1_3.png @@ -2295,7 +2325,7 @@ spriteSourceSize {83,131} textureRect - {{915,790},{83,131}} + {{410,679},{83,131}} textureRotated @@ -2310,7 +2340,7 @@ spriteSourceSize {83,131} textureRect - {{1334,784},{83,131}} + {{410,810},{83,131}} textureRotated @@ -2325,7 +2355,7 @@ spriteSourceSize {83,131} textureRect - {{1251,896},{83,131}} + {{410,941},{83,131}} textureRotated @@ -2340,7 +2370,7 @@ spriteSourceSize {83,131} textureRect - {{1334,915},{83,131}} + {{493,679},{83,131}} textureRotated @@ -2355,7 +2385,7 @@ spriteSourceSize {83,131} textureRect - {{1417,794},{83,131}} + {{493,810},{83,131}} textureRotated @@ -2370,7 +2400,7 @@ spriteSourceSize {83,131} textureRect - {{1417,925},{83,131}} + {{493,941},{83,131}} textureRotated @@ -2385,7 +2415,7 @@ spriteSourceSize {83,131} textureRect - {{1152,1008},{83,131}} + {{576,670},{83,131}} textureRotated @@ -2505,7 +2535,7 @@ spriteSourceSize {177,77} textureRect - {{576,191},{177,77}} + {{1683,114},{177,77}} textureRotated @@ -2520,7 +2550,7 @@ spriteSourceSize {177,77} textureRect - {{753,191},{177,77}} + {{436,191},{177,77}} textureRotated @@ -2535,7 +2565,7 @@ spriteSourceSize {177,77} textureRect - {{930,191},{177,77}} + {{436,268},{177,77}} textureRotated @@ -2550,7 +2580,7 @@ spriteSourceSize {177,77} textureRect - {{1107,191},{177,77}} + {{613,191},{177,77}} textureRotated @@ -2565,7 +2595,7 @@ spriteSourceSize {177,77} textureRect - {{1284,191},{177,77}} + {{613,268},{177,77}} textureRotated @@ -2580,7 +2610,7 @@ spriteSourceSize {177,77} textureRect - {{1461,191},{177,77}} + {{790,191},{177,77}} textureRotated @@ -2595,7 +2625,7 @@ spriteSourceSize {112,112} textureRect - {{816,1036},{112,112}} + {{903,794},{112,112}} textureRotated @@ -2610,7 +2640,7 @@ spriteSourceSize {112,112} textureRect - {{998,784},{112,112}} + {{903,906},{112,112}} textureRotated @@ -2625,7 +2655,7 @@ spriteSourceSize {112,112} textureRect - {{1110,784},{112,112}} + {{1015,794},{112,112}} textureRotated @@ -2640,7 +2670,7 @@ spriteSourceSize {112,112} textureRect - {{1222,784},{112,112}} + {{1015,906},{112,112}} textureRotated @@ -2655,7 +2685,7 @@ spriteSourceSize {112,112} textureRect - {{915,921},{112,112}} + {{1127,796},{112,112}} textureRotated @@ -2670,7 +2700,7 @@ spriteSourceSize {112,112} textureRect - {{928,1033},{112,112}} + {{1127,908},{112,112}} textureRotated @@ -2685,7 +2715,7 @@ spriteSourceSize {112,112} textureRect - {{1027,896},{112,112}} + {{1239,796},{112,112}} textureRotated @@ -2700,7 +2730,7 @@ spriteSourceSize {112,112} textureRect - {{1139,896},{112,112}} + {{1239,908},{112,112}} textureRotated @@ -2715,7 +2745,7 @@ spriteSourceSize {112,112} textureRect - {{1040,1008},{112,112}} + {{1406,796},{112,112}} textureRotated @@ -2730,7 +2760,7 @@ spriteSourceSize {112,112} textureRect - {{1717,432},{112,112}} + {{1406,908},{112,112}} textureRotated @@ -2745,7 +2775,7 @@ spriteSourceSize {112,112} textureRect - {{1809,674},{112,112}} + {{1518,723},{112,112}} textureRotated @@ -2761,9 +2791,9 @@ realTextureFileName Monk.png size - {1940,1166} + {2028,1116} smartupdate - $TexturePacker:SmartUpdate:e69bb2557f24713d671ba6cec82bf0ec:5a4ed9f2abb9b318f6387791be499e58:0d538e391a81baa9ecb48d28b418b896$ + $TexturePacker:SmartUpdate:4a3675bd94a2c6e3f247f55df5c3fadc:b426b7ac893d01cd44db02656c54c9c6:0d538e391a81baa9ecb48d28b418b896$ textureFileName Monk.png diff --git a/frontend/assets/resources/animation/Monk/Monk.plist.meta b/frontend/assets/resources/animation/Monk/Monk.plist.meta index 61bdf2e..dd077fc 100644 --- a/frontend/assets/resources/animation/Monk/Monk.plist.meta +++ b/frontend/assets/resources/animation/Monk/Monk.plist.meta @@ -3,8 +3,8 @@ "uuid": "6dcd5722-8ef9-47fd-9520-861d2713e274", "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "size": { - "width": 1940, - "height": 1166 + "width": 2028, + "height": 1116 }, "type": "Texture Packer", "subMetas": { @@ -17,12 +17,12 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1558, - "trimY": 364, - "width": 121, - "height": 107, - "rawWidth": 121, - "rawHeight": 107, + "trimX": 422, + "trimY": 574, + "width": 95, + "height": 105, + "rawWidth": 95, + "rawHeight": 105, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -39,12 +39,12 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 693, - "trimY": 681, - "width": 121, - "height": 107, - "rawWidth": 121, - "rawHeight": 107, + "trimX": 703, + "trimY": 587, + "width": 95, + "height": 105, + "rawWidth": 95, + "rawHeight": 105, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -61,12 +61,12 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 693, - "trimY": 788, - "width": 121, - "height": 107, - "rawWidth": 121, - "rawHeight": 107, + "trimX": 1637, + "trimY": 622, + "width": 95, + "height": 105, + "rawWidth": 95, + "rawHeight": 105, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -80,15 +80,15 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 693, - "trimY": 788, - "width": 121, - "height": 107, - "rawWidth": 121, - "rawHeight": 107, + "trimX": 913, + "trimY": 1018, + "width": 95, + "height": 105, + "rawWidth": 95, + "rawHeight": 105, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -102,15 +102,15 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 693, - "trimY": 788, - "width": 121, - "height": 107, - "rawWidth": 121, - "rawHeight": 107, + "trimX": 1018, + "trimY": 1018, + "width": 95, + "height": 105, + "rawWidth": 95, + "rawHeight": 105, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -124,15 +124,15 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 693, - "trimY": 895, - "width": 121, - "height": 107, - "rawWidth": 121, - "rawHeight": 107, + "trimX": 1018, + "trimY": 1018, + "width": 95, + "height": 105, + "rawWidth": 95, + "rawHeight": 105, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -146,15 +146,59 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1123, + "trimY": 1020, + "width": 95, + "height": 105, + "rawWidth": 95, + "rawHeight": 105, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk1_8.png": { + "ver": "1.0.4", + "uuid": "4cd3b9bc-8c45-4b2c-a307-5baa46d8c198", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1228, + "trimY": 1020, + "width": 95, + "height": 105, + "rawWidth": 95, + "rawHeight": 105, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk1_9.png": { + "ver": "1.0.4", + "uuid": "9a021552-db9e-4e96-be76-b4b32de57a0a", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 814, - "trimY": 683, - "width": 121, - "height": 107, - "rawWidth": 121, - "rawHeight": 107, + "trimX": 422, + "trimY": 574, + "width": 95, + "height": 105, + "rawWidth": 95, + "rawHeight": 105, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -171,8 +215,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 629, + "trimX": 1867, + "trimY": 177, "width": 123, "height": 113, "rawWidth": 123, @@ -193,8 +237,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 742, + "trimX": 517, + "trimY": 557, "width": 123, "height": 113, "rawWidth": 123, @@ -215,8 +259,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 855, + "trimX": 798, + "trimY": 576, "width": 123, "height": 113, "rawWidth": 123, @@ -237,8 +281,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 968, + "trimX": 921, + "trimY": 571, "width": 123, "height": 113, "rawWidth": 123, @@ -259,8 +303,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 263, - "trimY": 657, + "trimX": 1044, + "trimY": 571, "width": 123, "height": 113, "rawWidth": 123, @@ -281,8 +325,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 263, - "trimY": 770, + "trimX": 1167, + "trimY": 573, "width": 123, "height": 113, "rawWidth": 123, @@ -303,8 +347,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 263, - "trimY": 883, + "trimX": 1290, + "trimY": 573, "width": 123, "height": 113, "rawWidth": 123, @@ -322,11 +366,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 263, - "trimY": 996, + "trimX": 576, + "trimY": 801, "width": 123, "height": 113, "rawWidth": 123, @@ -344,11 +388,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 386, - "trimY": 694, + "trimX": 576, + "trimY": 924, "width": 123, "height": 113, "rawWidth": 123, @@ -366,11 +410,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 386, - "trimY": 807, + "trimX": 689, + "trimY": 793, "width": 123, "height": 113, "rawWidth": 123, @@ -388,11 +432,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 386, - "trimY": 807, + "trimX": 689, + "trimY": 793, "width": 123, "height": 113, "rawWidth": 123, @@ -410,11 +454,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 386, - "trimY": 920, + "trimX": 689, + "trimY": 916, "width": 123, "height": 113, "rawWidth": 123, @@ -432,11 +476,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 386, - "trimY": 920, + "trimX": 689, + "trimY": 916, "width": 123, "height": 113, "rawWidth": 123, @@ -457,8 +501,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 742, + "trimX": 517, + "trimY": 557, "width": 123, "height": 113, "rawWidth": 123, @@ -479,8 +523,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 386, - "trimY": 1033, + "trimX": 659, + "trimY": 692, "width": 101, "height": 123, "rawWidth": 101, @@ -501,8 +545,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 592, - "trimY": 672, + "trimX": 1413, + "trimY": 573, "width": 101, "height": 123, "rawWidth": 101, @@ -520,11 +564,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 592, - "trimY": 795, + "trimX": 782, + "trimY": 692, "width": 101, "height": 123, "rawWidth": 101, @@ -545,8 +589,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 592, - "trimY": 918, + "trimX": 802, + "trimY": 793, "width": 101, "height": 123, "rawWidth": 101, @@ -567,8 +611,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 814, - "trimY": 790, + "trimX": 802, + "trimY": 916, "width": 101, "height": 123, "rawWidth": 101, @@ -586,11 +630,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 935, - "trimY": 683, + "trimX": 1514, + "trimY": 499, "width": 101, "height": 123, "rawWidth": 101, @@ -608,11 +652,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1058, - "trimY": 683, + "trimX": 1615, + "trimY": 499, "width": 101, "height": 123, "rawWidth": 101, @@ -633,8 +677,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1181, - "trimY": 683, + "trimX": 1514, + "trimY": 622, "width": 101, "height": 123, "rawWidth": 101, @@ -655,8 +699,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1304, - "trimY": 683, + "trimX": 1802, + "trimY": 502, "width": 101, "height": 123, "rawWidth": 101, @@ -677,8 +721,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 814, - "trimY": 913, + "trimX": 1732, + "trimY": 603, "width": 101, "height": 123, "rawWidth": 101, @@ -699,8 +743,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1505, - "trimY": 685, + "trimX": 1833, + "trimY": 714, "width": 101, "height": 123, "rawWidth": 101, @@ -721,8 +765,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1505, - "trimY": 685, + "trimX": 1833, + "trimY": 714, "width": 101, "height": 123, "rawWidth": 101, @@ -743,8 +787,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 592, - "trimY": 1041, + "trimX": 1732, + "trimY": 726, "width": 101, "height": 123, "rawWidth": 101, @@ -765,8 +809,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 693, - "trimY": 1057, + "trimX": 1833, + "trimY": 815, "width": 101, "height": 123, "rawWidth": 101, @@ -784,11 +828,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1833, - "trimY": 150, + "trimX": 140, + "trimY": 627, "width": 135, "height": 107, "rawWidth": 135, @@ -809,8 +853,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 844, - "trimY": 469, + "trimX": 140, + "trimY": 734, "width": 135, "height": 107, "rawWidth": 135, @@ -831,8 +875,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 979, - "trimY": 469, + "trimX": 140, + "trimY": 841, "width": 135, "height": 107, "rawWidth": 135, @@ -853,8 +897,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1114, - "trimY": 469, + "trimX": 140, + "trimY": 948, "width": 135, "height": 107, "rawWidth": 135, @@ -875,8 +919,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1249, - "trimY": 469, + "trimX": 275, + "trimY": 679, "width": 135, "height": 107, "rawWidth": 135, @@ -897,8 +941,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1384, - "trimY": 469, + "trimX": 275, + "trimY": 786, "width": 135, "height": 107, "rawWidth": 135, @@ -919,8 +963,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1519, - "trimY": 471, + "trimX": 275, + "trimY": 893, "width": 135, "height": 107, "rawWidth": 135, @@ -941,8 +985,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 562, - "trimY": 565, + "trimX": 275, + "trimY": 1000, "width": 135, "height": 107, "rawWidth": 135, @@ -963,8 +1007,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 697, - "trimY": 574, + "trimX": 1199, + "trimY": 383, "width": 135, "height": 107, "rawWidth": 135, @@ -985,8 +1029,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 832, - "trimY": 576, + "trimX": 1334, + "trimY": 383, "width": 135, "height": 107, "rawWidth": 135, @@ -1007,8 +1051,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 967, - "trimY": 576, + "trimX": 1532, + "trimY": 392, "width": 135, "height": 107, "rawWidth": 135, @@ -1029,8 +1073,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1102, - "trimY": 576, + "trimX": 1667, + "trimY": 392, "width": 135, "height": 107, "rawWidth": 135, @@ -1051,8 +1095,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1237, - "trimY": 576, + "trimX": 1802, + "trimY": 395, "width": 135, "height": 107, "rawWidth": 135, @@ -1073,8 +1117,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1372, - "trimY": 576, + "trimX": 433, + "trimY": 450, "width": 135, "height": 107, "rawWidth": 135, @@ -1095,8 +1139,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1507, - "trimY": 578, + "trimX": 568, + "trimY": 450, "width": 135, "height": 107, "rawWidth": 135, @@ -1117,8 +1161,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 148, - "trimY": 522, + "trimX": 786, + "trimY": 469, "width": 135, "height": 107, "rawWidth": 135, @@ -1136,11 +1180,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1844, - "trimY": 0, + "trimX": 790, + "trimY": 268, "width": 96, "height": 150, "rawWidth": 96, @@ -1161,8 +1205,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1683, - "trimY": 114, + "trimX": 967, + "trimY": 191, "width": 96, "height": 150, "rawWidth": 96, @@ -1183,8 +1227,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 436, - "trimY": 305, + "trimX": 1117, + "trimY": 191, "width": 96, "height": 150, "rawWidth": 96, @@ -1205,8 +1249,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 586, - "trimY": 268, + "trimX": 1267, + "trimY": 191, "width": 96, "height": 150, "rawWidth": 96, @@ -1227,8 +1271,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 736, - "trimY": 268, + "trimX": 1417, + "trimY": 191, "width": 96, "height": 150, "rawWidth": 96, @@ -1249,8 +1293,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 886, - "trimY": 268, + "trimX": 1567, + "trimY": 191, "width": 96, "height": 150, "rawWidth": 96, @@ -1271,8 +1315,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1036, - "trimY": 268, + "trimX": 1717, + "trimY": 191, "width": 96, "height": 150, "rawWidth": 96, @@ -1293,8 +1337,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1186, - "trimY": 268, + "trimX": 940, + "trimY": 287, "width": 96, "height": 150, "rawWidth": 96, @@ -1315,8 +1359,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1336, - "trimY": 268, + "trimX": 1090, + "trimY": 287, "width": 96, "height": 150, "rawWidth": 96, @@ -1337,8 +1381,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1486, - "trimY": 268, + "trimX": 1240, + "trimY": 287, "width": 96, "height": 150, "rawWidth": 96, @@ -1359,8 +1403,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 586, - "trimY": 364, + "trimX": 1390, + "trimY": 287, "width": 96, "height": 150, "rawWidth": 96, @@ -1381,8 +1425,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1235, - "trimY": 1027, + "trimX": 1937, + "trimY": 400, "width": 86, "height": 104, "rawWidth": 86, @@ -1403,8 +1447,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1321, - "trimY": 1046, + "trimX": 1716, + "trimY": 499, "width": 86, "height": 104, "rawWidth": 86, @@ -1821,8 +1865,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 436, - "trimY": 191, + "trimX": 1844, + "trimY": 0, "width": 140, "height": 114, "rawWidth": 140, @@ -1840,11 +1884,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1407, - "trimY": 1056, + "trimX": 1860, + "trimY": 114, "width": 110, "height": 63, "rawWidth": 110, @@ -1865,8 +1909,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1470, - "trimY": 1056, + "trimX": 1469, + "trimY": 383, "width": 110, "height": 63, "rawWidth": 110, @@ -1887,8 +1931,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1654, - "trimY": 471, + "trimX": 1951, + "trimY": 290, "width": 110, "height": 63, "rawWidth": 110, @@ -1909,8 +1953,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1679, - "trimY": 320, + "trimX": 640, + "trimY": 557, "width": 110, "height": 63, "rawWidth": 110, @@ -1928,11 +1972,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1533, - "trimY": 1041, + "trimX": 693, + "trimY": 1039, "width": 110, "height": 63, "rawWidth": 110, @@ -1950,11 +1994,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1603, - "trimY": 958, + "trimX": 803, + "trimY": 1039, "width": 110, "height": 63, "rawWidth": 110, @@ -1975,8 +2019,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 693, - "trimY": 1002, + "trimX": 140, + "trimY": 1055, "width": 117, "height": 55, "rawWidth": 117, @@ -1997,8 +2041,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 1081, + "trimX": 576, + "trimY": 1047, "width": 117, "height": 55, "rawWidth": 117, @@ -2019,8 +2063,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 257, - "trimY": 1109, + "trimX": 1911, + "trimY": 604, "width": 117, "height": 55, "rawWidth": 117, @@ -2041,8 +2085,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1638, - "trimY": 210, + "trimX": 1911, + "trimY": 659, "width": 117, "height": 55, "rawWidth": 117, @@ -2060,11 +2104,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1638, - "trimY": 265, + "trimX": 1956, + "trimY": 714, "width": 117, "height": 55, "rawWidth": 117, @@ -2082,11 +2126,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1823, - "trimY": 619, + "trimX": 1956, + "trimY": 831, "width": 117, "height": 55, "rawWidth": 117, @@ -2107,8 +2151,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1505, - "trimY": 786, + "trimX": 921, + "trimY": 684, "width": 117, "height": 55, "rawWidth": 117, @@ -2126,11 +2170,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1603, - "trimY": 841, + "trimX": 1038, + "trimY": 684, "width": 117, "height": 55, "rawWidth": 117, @@ -2148,11 +2192,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1658, - "trimY": 792, + "trimX": 1155, + "trimY": 686, "width": 117, "height": 55, "rawWidth": 117, @@ -2173,8 +2217,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1713, - "trimY": 866, + "trimX": 1272, + "trimY": 686, "width": 117, "height": 55, "rawWidth": 117, @@ -2195,8 +2239,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1596, - "trimY": 1068, + "trimX": 905, + "trimY": 739, "width": 117, "height": 55, "rawWidth": 117, @@ -2217,8 +2261,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1713, - "trimY": 921, + "trimX": 1022, + "trimY": 739, "width": 117, "height": 55, "rawWidth": 117, @@ -2236,11 +2280,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1830, - "trimY": 864, + "trimX": 1139, + "trimY": 741, "width": 117, "height": 55, "rawWidth": 117, @@ -2258,11 +2302,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1885, - "trimY": 864, + "trimX": 1256, + "trimY": 741, "width": 117, "height": 55, "rawWidth": 117, @@ -2283,8 +2327,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1505, - "trimY": 786, + "trimX": 921, + "trimY": 684, "width": 117, "height": 55, "rawWidth": 117, @@ -2302,11 +2346,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1666, - "trimY": 976, + "trimX": 1351, + "trimY": 796, "width": 117, "height": 55, "rawWidth": 117, @@ -2324,11 +2368,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1783, - "trimY": 981, + "trimX": 1351, + "trimY": 913, "width": 117, "height": 55, "rawWidth": 117, @@ -2349,8 +2393,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1713, - "trimY": 1031, + "trimX": 1621, + "trimY": 835, "width": 117, "height": 55, "rawWidth": 117, @@ -2371,8 +2415,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1596, - "trimY": 1068, + "trimX": 905, + "trimY": 739, "width": 117, "height": 55, "rawWidth": 117, @@ -2390,11 +2434,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1768, - "trimY": 1036, + "trimX": 1676, + "trimY": 830, "width": 117, "height": 55, "rawWidth": 117, @@ -2415,8 +2459,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1885, - "trimY": 1036, + "trimX": 1621, + "trimY": 952, "width": 117, "height": 55, "rawWidth": 117, @@ -2437,8 +2481,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 736, - "trimY": 364, + "trimX": 1540, + "trimY": 287, "width": 137, "height": 105, "rawWidth": 137, @@ -2459,8 +2503,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 873, - "trimY": 364, + "trimX": 1677, + "trimY": 287, "width": 137, "height": 105, "rawWidth": 137, @@ -2481,7 +2525,7 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1010, + "trimX": 296, "trimY": 364, "width": 137, "height": 105, @@ -2503,8 +2547,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1147, - "trimY": 364, + "trimX": 288, + "trimY": 469, "width": 137, "height": 105, "rawWidth": 137, @@ -2525,8 +2569,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1284, - "trimY": 364, + "trimX": 1814, + "trimY": 290, "width": 137, "height": 105, "rawWidth": 137, @@ -2547,8 +2591,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1421, - "trimY": 364, + "trimX": 148, + "trimY": 522, "width": 137, "height": 105, "rawWidth": 137, @@ -2569,8 +2613,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 296, - "trimY": 364, + "trimX": 285, + "trimY": 574, "width": 137, "height": 105, "rawWidth": 137, @@ -2591,8 +2635,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 433, - "trimY": 401, + "trimX": 436, + "trimY": 345, "width": 137, "height": 105, "rawWidth": 137, @@ -2613,8 +2657,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 288, - "trimY": 469, + "trimX": 573, + "trimY": 345, "width": 137, "height": 105, "rawWidth": 137, @@ -2635,8 +2679,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 425, - "trimY": 506, + "trimX": 788, + "trimY": 364, "width": 137, "height": 105, "rawWidth": 137, @@ -2657,8 +2701,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 570, - "trimY": 460, + "trimX": 925, + "trimY": 383, "width": 137, "height": 105, "rawWidth": 137, @@ -2679,8 +2723,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 707, - "trimY": 469, + "trimX": 1062, + "trimY": 383, "width": 137, "height": 105, "rawWidth": 137, @@ -2701,8 +2745,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1427, - "trimY": 683, + "trimX": 710, + "trimY": 345, "width": 78, "height": 111, "rawWidth": 78, @@ -2723,8 +2767,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1642, - "trimY": 581, + "trimX": 1833, + "trimY": 603, "width": 78, "height": 111, "rawWidth": 78, @@ -2742,11 +2786,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1755, - "trimY": 210, + "trimX": 1333, + "trimY": 1030, "width": 78, "height": 111, "rawWidth": 78, @@ -2767,8 +2811,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1742, - "trimY": 321, + "trimX": 1731, + "trimY": 849, "width": 78, "height": 111, "rawWidth": 78, @@ -2789,8 +2833,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1829, - "trimY": 385, + "trimX": 1676, + "trimY": 960, "width": 78, "height": 111, "rawWidth": 78, @@ -2811,8 +2855,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1829, - "trimY": 463, + "trimX": 1676, + "trimY": 1038, "width": 78, "height": 111, "rawWidth": 78, @@ -2830,11 +2874,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1829, - "trimY": 541, + "trimX": 1787, + "trimY": 960, "width": 78, "height": 111, "rawWidth": 78, @@ -2855,8 +2899,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1731, - "trimY": 644, + "trimX": 1865, + "trimY": 916, "width": 78, "height": 111, "rawWidth": 78, @@ -2877,8 +2921,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1731, - "trimY": 755, + "trimX": 1943, + "trimY": 948, "width": 78, "height": 111, "rawWidth": 78, @@ -2899,8 +2943,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1809, - "trimY": 786, + "trimX": 1444, + "trimY": 1035, "width": 78, "height": 111, "rawWidth": 78, @@ -3141,8 +3185,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1628, - "trimY": 692, + "trimX": 1925, + "trimY": 504, "width": 103, "height": 100, "rawWidth": 103, @@ -3163,8 +3207,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1833, - "trimY": 285, + "trimX": 1389, + "trimY": 696, "width": 103, "height": 100, "rawWidth": 103, @@ -3185,8 +3229,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1720, - "trimY": 544, + "trimX": 1518, + "trimY": 835, "width": 103, "height": 100, "rawWidth": 103, @@ -3204,11 +3248,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1500, - "trimY": 841, + "trimX": 1630, + "trimY": 727, "width": 103, "height": 100, "rawWidth": 103, @@ -3229,8 +3273,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1500, - "trimY": 941, + "trimX": 1518, + "trimY": 935, "width": 103, "height": 100, "rawWidth": 103, @@ -3248,11 +3292,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 283, - "trimY": 574, + "trimX": 703, + "trimY": 456, "width": 83, "height": 131, "rawWidth": 83, @@ -3273,8 +3317,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 414, - "trimY": 611, + "trimX": 921, + "trimY": 488, "width": 83, "height": 131, "rawWidth": 83, @@ -3292,11 +3336,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 509, - "trimY": 694, + "trimX": 1052, + "trimY": 488, "width": 83, "height": 131, "rawWidth": 83, @@ -3314,11 +3358,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 509, - "trimY": 825, + "trimX": 1183, + "trimY": 490, "width": 83, "height": 131, "rawWidth": 83, @@ -3336,11 +3380,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 509, - "trimY": 956, + "trimX": 1314, + "trimY": 490, "width": 83, "height": 131, "rawWidth": 83, @@ -3361,8 +3405,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 915, - "trimY": 790, + "trimX": 410, + "trimY": 679, "width": 83, "height": 131, "rawWidth": 83, @@ -3383,8 +3427,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1334, - "trimY": 784, + "trimX": 410, + "trimY": 810, "width": 83, "height": 131, "rawWidth": 83, @@ -3405,8 +3449,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1251, - "trimY": 896, + "trimX": 410, + "trimY": 941, "width": 83, "height": 131, "rawWidth": 83, @@ -3427,8 +3471,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1334, - "trimY": 915, + "trimX": 493, + "trimY": 679, "width": 83, "height": 131, "rawWidth": 83, @@ -3449,8 +3493,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1417, - "trimY": 794, + "trimX": 493, + "trimY": 810, "width": 83, "height": 131, "rawWidth": 83, @@ -3471,8 +3515,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1417, - "trimY": 925, + "trimX": 493, + "trimY": 941, "width": 83, "height": 131, "rawWidth": 83, @@ -3493,8 +3537,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1152, - "trimY": 1008, + "trimX": 576, + "trimY": 670, "width": 83, "height": 131, "rawWidth": 83, @@ -3669,8 +3713,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 576, - "trimY": 191, + "trimX": 1683, + "trimY": 114, "width": 177, "height": 77, "rawWidth": 177, @@ -3691,7 +3735,7 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 753, + "trimX": 436, "trimY": 191, "width": 177, "height": 77, @@ -3713,8 +3757,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 930, - "trimY": 191, + "trimX": 436, + "trimY": 268, "width": 177, "height": 77, "rawWidth": 177, @@ -3735,7 +3779,7 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1107, + "trimX": 613, "trimY": 191, "width": 177, "height": 77, @@ -3757,8 +3801,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1284, - "trimY": 191, + "trimX": 613, + "trimY": 268, "width": 177, "height": 77, "rawWidth": 177, @@ -3779,7 +3823,7 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1461, + "trimX": 790, "trimY": 191, "width": 177, "height": 77, @@ -3801,8 +3845,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 816, - "trimY": 1036, + "trimX": 903, + "trimY": 794, "width": 112, "height": 112, "rawWidth": 112, @@ -3823,8 +3867,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 998, - "trimY": 784, + "trimX": 903, + "trimY": 906, "width": 112, "height": 112, "rawWidth": 112, @@ -3845,8 +3889,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1110, - "trimY": 784, + "trimX": 1015, + "trimY": 794, "width": 112, "height": 112, "rawWidth": 112, @@ -3867,8 +3911,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1222, - "trimY": 784, + "trimX": 1015, + "trimY": 906, "width": 112, "height": 112, "rawWidth": 112, @@ -3889,8 +3933,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 915, - "trimY": 921, + "trimX": 1127, + "trimY": 796, "width": 112, "height": 112, "rawWidth": 112, @@ -3911,8 +3955,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 928, - "trimY": 1033, + "trimX": 1127, + "trimY": 908, "width": 112, "height": 112, "rawWidth": 112, @@ -3933,8 +3977,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1027, - "trimY": 896, + "trimX": 1239, + "trimY": 796, "width": 112, "height": 112, "rawWidth": 112, @@ -3955,8 +3999,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1139, - "trimY": 896, + "trimX": 1239, + "trimY": 908, "width": 112, "height": 112, "rawWidth": 112, @@ -3977,8 +4021,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1040, - "trimY": 1008, + "trimX": 1406, + "trimY": 796, "width": 112, "height": 112, "rawWidth": 112, @@ -3999,8 +4043,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1717, - "trimY": 432, + "trimX": 1406, + "trimY": 908, "width": 112, "height": 112, "rawWidth": 112, @@ -4021,8 +4065,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1809, - "trimY": 674, + "trimX": 1518, + "trimY": 723, "width": 112, "height": 112, "rawWidth": 112, diff --git a/frontend/assets/resources/animation/Monk/Monk.png b/frontend/assets/resources/animation/Monk/Monk.png index 24c3670eace7b1a5af5329cf5277fd13076803af..d9f7632df648890fab46617549a2b82fea5463c2 100644 GIT binary patch literal 266699 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