{"version":3,"file":"7665de02a950594638fa.chunk.js","mappings":"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","sources":["webpack://ch.enlightware.gamecreator/./src/blocks/common/script/script.grammar","webpack://ch.enlightware.gamecreator/./src/blocks/actions/animation/animation-block.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/delete.ts","webpack://ch.enlightware.gamecreator/./src/blocks/actions/delete/delete-block.ts","webpack://ch.enlightware.gamecreator/./src/blocks/actions/dialog/dialog-block.ts","webpack://ch.enlightware.gamecreator/./src/blocks/actions/music/music-block.ts","webpack://ch.enlightware.gamecreator/./src/blocks/actions/music/music-interface.ts","webpack://ch.enlightware.gamecreator/./src/blocks/actions/music/music.ts","webpack://ch.enlightware.gamecreator/./src/blocks/actions/sound/sound-block.ts","webpack://ch.enlightware.gamecreator/./src/blocks/actions/spawn/spawn-block.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/stop.ts","webpack://ch.enlightware.gamecreator/./src/blocks/actions/speed/stop-block.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/restart-timer.ts","webpack://ch.enlightware.gamecreator/./src/blocks/actions/timer/restart-timer-block.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/vibrate.ts","webpack://ch.enlightware.gamecreator/./src/blocks/actions/vibrate/vibrate-block.ts","webpack://ch.enlightware.gamecreator/./src/blocks/common/script/script-parser.ts","webpack://ch.enlightware.gamecreator/./src/blocks/common/variable/variable-block.ts","webpack://ch.enlightware.gamecreator/./src/blocks/conditions/animation/animation-is-block.ts","webpack://ch.enlightware.gamecreator/./src/blocks/conditions/collision/collision-block.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/condition/init.ts","webpack://ch.enlightware.gamecreator/./src/blocks/conditions/init/init-block.ts","webpack://ch.enlightware.gamecreator/./src/blocks/conditions/timer/timer-block.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/condition/touch.ts","webpack://ch.enlightware.gamecreator/./src/blocks/conditions/touch/touch-block.ts","webpack://ch.enlightware.gamecreator/./src/blocks/generic/random-value/random-value-block.ts","webpack://ch.enlightware.gamecreator/./src/blocks/generic/script-generic/script-generic-block.ts","webpack://ch.enlightware.gamecreator/./src/color/color.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/action.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/add-acceleration.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/add-angular-acceleration.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/add-angular-velocity.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/add-velocity.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/any-action.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/brake.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/change-variable-operation.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/change-variable.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/end-animation-mode.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/flip.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/music-gains.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/play-animation.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/play-sound.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/script-action.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/set-music.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/show-dialog.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/spawn.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/action/teleport.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/color/packed32.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/condition/animation-is.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/condition/any-condition.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/condition/comparison-operation.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/condition/comparison.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/condition/condition.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/condition/contact-angular-interval.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/condition/contact.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/condition/input-button.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/condition/script-condition.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/condition/timer.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/math/polygon2.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/shape/circular-shape.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/shape/rectangular-shape.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/shape/convex-shape.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/flatbuffers-cast.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/animation-frame.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/animation.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/any-body.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/camera-position.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/camera-tracked-object-or-position.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/camera-tracked-object.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/camera.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/dialog.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/game.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/level.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/limit-override.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/object-instance.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/object-kind.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/object-type.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/rule.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/script-module.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/single-part-body.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/u-u-i-d.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/variable-index-and-value.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/game/variable-name.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/generic-block/any-generic-block.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/generic-block/binary-arithmetic-input.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/generic-block/binary-arithmetic-operation.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/generic-block/binary-arithmetic.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/generic-block/generic-block-container.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/generic-block/input-to-binary-side.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/generic-block/random-value.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/generic-block/read-variable.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/generic-block/script-generic.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/math/scaling-rotation2.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/math/scaling-translation2.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/math/similarity-transform2.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/math/twist2.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/math/vector2.ts","webpack://ch.enlightware.gamecreator/./src/flatbuffers/shape/any-shape.ts","webpack://ch.enlightware.gamecreator/./src/game/game-block-definition.ts","webpack://ch.enlightware.gamecreator/./src/game/game-loader.ts","webpack://ch.enlightware.gamecreator/./src/imgui/display-list.ts","webpack://ch.enlightware.gamecreator/./src/imgui/imgui-types.ts","webpack://ch.enlightware.gamecreator/./src/imgui/render-context.ts","webpack://ch.enlightware.gamecreator/./src/math/math-to-string.ts","webpack://ch.enlightware.gamecreator/./src/network/api-types.ts","webpack://ch.enlightware.gamecreator/./src/runtime/runtime-audio.ts","webpack://ch.enlightware.gamecreator/./src/utils/assert-specific.ts","webpack://ch.enlightware.gamecreator/./src/utils/range.ts","webpack://ch.enlightware.gamecreator/./src/vpl/block.ts"],"sourcesContent":["// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport {LRParser} from \"@lezer/lr\"\nconst spec_Identifier = {__proto__:null,fn:14, let:28, mut:30, for:42, in:44, if:50, else:52, match:56, _:74, not:98, and:112, or:118, return:126}\nexport const __parser = LRParser.deserialize({\n version: 14,\n states: \"7vO]QPOOO!mQPO'#C`Q#}QPOOO%XQPO'#CaOOQO'#Dp'#DpOOQO-E7n-E7nO&eQPO'#DSO'sQQO'#CmO(ZQPO'#CmO(`QPO'#CoOOQO'#C{'#C{O(eQPO'#DTO)vQPO'#CgOOQO'#ET'#ETO)}QQO'#EROOQO'#ES'#ESOOQO'#D`'#D`OOQO'#Da'#DaO+eQPO'#EROOQO'#EQ'#EQO,cQQO'#EPO-pQQO'#EOO.tQQO'#D}O/rQPO'#D|O0mQPO'#D{O1bQPO'#DnO%^QPO'#DnOOQO'#D{'#D{OOQO'#Dz'#DzOOQO'#Dr'#DrO#}QPO'#EgO1jQPO'#EgQOQPOOO1rQPO'#CpO%^QPO'#CtO%^QPO'#CwOOQO'#D^'#D^O%^QPO'#DlO1wQPO'#CiO2PQPO,58{O2UQPO,5:pOOQO,59n,59nO2^QPO,59nOOQO,5:_,5:_O2cQQO,59XOOQO-E7q-E7qO3|QPO'#CmO4UQPO,59ZO4ZQPO'#E]O4fQPO'#E]O4pQPO,59oO4uQQO'#CmO4|QPO,59rO5UQPO,59RO5]QPO,59ROOQO,59R,59RO5eQPO,59uO%^QPO,59vO5mQPO,59wOOQO,5:m,5:mOOQO'#Db'#DbO+eQPO,5:lOOQO'#Dc'#DcO+eQPO,5:kO+eQPO,5:jOOQO'#Dg'#DgO+eQPO,5:iOOQO'#De'#DeOOQO'#Dj'#DjO+eQPO,5:hO%^QPO,5:VOOQO'#Dh'#DhO5tQPO'#DyO6PQPO'#DyO6[QPO,5:YOOQO,5:Y,5:YOOQO-E7p-E7pO6aQPO,5;ROOQO,5:f,5:fO6iQPO,59[O6nQPO,59`O6sQPO,59cOOQO,5:W,5:WO6xQPO,59TO6}QPO,59TO7SQPO1G.gOOQO1G0[1G0[O5mQPO,5:vOOQO1G/Y1G/YP7[QPO'#DsO7aQPO,59XO7iQPO1G.uOOQO,5:`,5:`O7nQPO,5:wOOQO-E7r-E7rOOQO1G/Z1G/ZO%^QPO,59sOOQO1G/^1G/^O7yQPO1G/^O8RQPO1G.mOOQO1G.m1G.mOOQO1G/a1G/aO8ZQPO1G/bO8`QPO1G/cOOQO1G0W1G0WO8eQQO1G0VO9rQQO1G0UO:vQQO1G0TO;tQPO1G0SOOQO1G/q1G/qOOQO,5:],5:]OlQPO1G.}O%^QPO1G.oO>zQPO1G.oO?PQPO7+$ROOQO1G0b1G0bOOQO7+$a7+$aP?UQPO'#DtOOQO1G/_1G/_O?ZQPO'#DXO?`QPO7+$xO?hQPO7+$xOOQO7+$x7+$xOOQO7+$X7+$XOOQO7+$|7+$|OOQO7+$}7+$}P?pQPO'#DqOOQO7+%`7+%`O?uQPO7+$bO?zQPO7+$fOOQO'#Cz'#CzO@SQSO'#CzO@[QSO'#CyO@aQPO7+$iOOQO'#EY'#EYO@iQPO7+$iO@nQPO7+$ZO%^QPO7+$ZO6nQPO<OAN>OPAfQPO'#DuO6nQPOAN=hOAkQPO1G/QOOQO1G/P1G/POOQO1G0`1G0`OApQSOAN=oOOQOAN=aAN=aOOQOG23SG23SOOQO7+$l7+$lO%^QPOG23ZOAuQPO'#EZOA}QPOLD(uOOQO,5:u,5:uOOQO!$'La!$'LaOBSQPO'#Cm\",\n stateData: \"Ba~O!lOSPOSQOS~OVROUSPWSP[SP^SPeSPiSPlSPpSPqSPrSPxSP!RSP!aSP!jSP!ySP#QSP#RSP#XSP#YSP~OVROUSXWSX[SX^SXeSXiSXlSXpSXqSXrSXxSX!RSX!aSX!jSX!ySX#QSX#RSX#XSX#YSX~OUVOWUO[[O^vOeqOirOlsOpYOqYOrYOxZO!RtO!auO!yXO#Q`O#RaO#XjO#YiO~OUwO~OUVOWUO[[OeqOirOlsOpYOqYOrYOxZO!RtO!auO!yXO#Q`O#RaO#XjO#YiO~OYyO~P%^Ob{OWaX`aXxaX!WaX!YaX!]aX!caX!zaX#RaX#SaX#TaX#UaX#VaX#WaX#XaXtaX~O!jaXXaXYaXyaX[aXgaX~P&lOU|O~OU!OO~Oy#PP~P%^OWUO[[O^vOeqOirOlsOpYOqYOrYOt!XOxZO!RtO!auO!yXO#Q`O#RaO#XjO#YiO~OU!TO~P(lOW![Ox!ZO!z!YO`!uX!W!uX!Y!uX!]!uX!c!uX!j!uX#R!uX#S!uX#T!uX#U!uX#V!uX#W!uX#X!uXX!uXY!uXy!uXt!uX[!uXg!uX~OUVOWUO[[OeqOirOlsOpYOqYOrYOxZO!RtO!yXO#Q`O#RaO~O#S!^O#T!^O#U!^O`!sX!W!sX!Y!sX!]!sX!c!sX!j!sX#R!sX#V!sX#W!sX#X!sXX!sXY!sXy!sXt!sX[!sXg!sX~O#R!`O#V!`O`!rX!W!rX!Y!rX!]!rX!c!rX!j!rX#W!rX#X!rXX!rXY!rXy!rXt!rX[!rXg!rX~O!W!bO`!qX!Y!qX!]!qX!c!qX!j!qX#W!qX#X!qXX!qXY!qXy!qXt!qX[!qXg!qX~O!Y!eO#W!cO`!pX!]!pX!c!pX!j!pX#X!pXX!pXY!pXy!pXt!pX[!pXg!pX~O`!hO!]!iO#X!fO!c!oX!j!oXX!oXY!oXy!oXt!oX[!oXg!oX~OU!jO#Y!mP~O!c!pO!j#ZX~OU!qO~OU!uO_!vO~OW!wO~OX!yOY!xO~OY!zO~Ob{OWaa`aaxaa!Waa!Yaa!]aa!caa!jaa!zaa#Raa#Saa#Taa#Uaa#Vaa#Waa#XaaXaaYaayaataa[aagaa~Ob{O!zaX~O!z!}O~OX#OOy#PXY#PX~Oy#PXY#PX~P%^Oy#RO~O|#SO~P&lOX#UOt#TO~Ot#WO~P#}Ot#WO!c!pO~OU#XOp#XO~OY#PP~P%^OX#bO#Y!mXY!mX~OU#cO#Y!mXY!mX~O#Y#eO~O!c!pO!j#Za~Of#gO~O[#hO~O[#jO~O`#kO~OU#lO~OU!jOY!mP~Ob{O~Ob{O!zaa~OU#oO~OX#OOy#PaY#Pa~OU#rOt#uO~Ot#vO!c!pO~Oy#wO~OY#xO~O#S!^O#T!^O#U!^O`!si!W!si!Y!si!]!si!c!si!j!si#R!si#V!si#W!si#X!siX!siY!siy!sit!si[!sig!si~O#R!`O#V!`O`!ri!W!ri!Y!ri!]!ri!c!ri!j!ri#W!ri#X!riX!riY!riy!rit!ri[!rig!ri~O!W!bO`!qi!Y!qi!]!qi!c!qi!j!qi#W!qi#X!qiX!qiY!qiy!qit!qi[!qig!qi~O!Y!eO#W!cO`!pi!]!pi!c!pi!j!pi#X!piX!piY!piy!pit!pi[!pig!pi~OX#bO#Y!maY!ma~Ot!XO~P#}Oj#|OWhi`hixhi!Whi!Yhi!]hi!chi!jhi!zhi#Rhi#Shi#Thi#Uhi#Vhi#Whi#XhiXhiYhiyhithi[highi~OU$OOpYOqYOrYO~O`$UO~OY$VO~OX#OO~O|#SO~OX$WOt$XO~OU#rOt$XO~OX#bO~Og$[O~O[#hOirO~OW$^OsnX~Os$_O~OX$`Ot!{X~Ot$aO~O!c$bO~OX$WOt$eO~OU$OOpYOqYOrYOu$kOt!{a~O!c$lO~OX$WO~OY$nO~Os$oO~OX$rOt!}X~Ot$sO~OU!|O~OPQ#TrqUr~\",\n goto: \"2{#[PPPP#]#`PPPPP#dP$bPPP$iP%^%^PPP&OPP%^P&s&y&}PPPPPP%^%^PP%^'sP'|'|'|(nP(n(n)`)dP)hP)h)lP)l)o)oP)oP*Z*a*i*t+m+uPPP+{,U,]-q.].z/j0Z0{1q'|%^PP2c2f2i2l2oPPPPPPPPP2xRQOTSOP!^]QUZ[bjnrsu!R!V!Z![!_!a!b!d!g!h!y#S#e#g#h#k$U$[$_$oQ#i!rQ$]#|Q$d$VR$m$gZlQ[n!V#h!^]QUZ[bjnrsu!R!V!Z![!_!a!b!d!g!h!y#S#e#g#h#k$U$[$_$oR!PX!_]QUZ[bjnrsu!R!V!Z![!_!a!b!d!g!h!y#S#e#g#h#k$U$[$_$o!^]QUZ[bjnrsu!R!V!Z![!_!a!b!d!g!h!y#S#e#g#h#k$U$[$_$oR$]#|Q$R#jR$j$`T$P#j$`!^]QUZ[bjnrsu!R!V!Z![!_!a!b!d!g!h!y#S#e#g#h#k$U$[$_$oT#}#j$`Q!U[Q#s#UR$Y#t!__QUZ[bjnrsu!R!V!Z![!_!a!b!d!g!h!y#S#e#g#h#k$U$[$_$o!_bQUZ[bjnrsu!R!V!Z![!_!a!b!d!g!h!y#S#e#g#h#k$U$[$_$oT!_d#]T!ae#^T!dg#`R!gh!RkQUZ[jnrsu!R!V!Z![!h!y#S#e#g#h#k$U$[$_$oQPORTPU!ki!w$^R#d!kQnQS!V[#hT!nn!V!^WQUZ[bjnrsu!R!V!Z![!_!a!b!d!g!h!y#S#e#g#h#k$U$[$_$oS}W$tR$tXU!RZ![!yR#Q!RQ#t#UR$Z#tQ!liQ#m!wR$h$^ZmQ[n!V#hQoQQxUU!QZ![!yS!W[#hQ!mjQ!onQ!rrQ!ssQ!tuQ#P!RQ#V!VQ#Y!ZQ#a!hQ#q#SQ#z#eQ#{#gQ$T#kQ$c$UQ$g$[Q$i$_R$p$o!RhQUZ[jnrsu!R!V!Z![!h!y#S#e#g#h#k$U$[$_$o!QgQUZ[jnrsu!R!V!Z![!h!y#S#e#g#h#k$U$[$_$oR#`!g!SfQUZ[jnrsu!R!V!Z![!g!h!y#S#e#g#h#k$U$[$_$oR#_!d!UeQUZ[jnrsu!R!V!Z![!d!g!h!y#S#e#g#h#k$U$[$_$oR#^!b!WdQUZ[jnrsu!R!V!Z![!b!d!g!h!y#S#e#g#h#k$U$[$_$oR#]!a!YcQUZ[jnrsu!R!V!Z![!a!b!d!g!h!y#S#e#g#h#k$U$[$_$oQ!]bR#[!_!_^QUZ[bjnrsu!R!V!Z![!_!a!b!d!g!h!y#S#e#g#h#k$U$[$_$oR$S#jR$Q#jR$q$oRzUQ!SZQ#Z![R#n!yRpQ\",\n nodeNames: \"⚠ LineComment BlockComment ModuleAndExpr Module Function Identifier fn ( , ) Block { Let let mut = Path :: PropertyPath For for in .. If if else Match match MatchBranch Pattern Literal Integer String Boolean => } _ Tuple Array [ ] Record RecordField : Projection Indexing Application LogicOp not LogicOp ArithOp ArithOp ArithOp CompareOp LogicOp and LogicOp LogicOp or LogicOp Assignment Return return Abstraction ;\",\n maxTerm: 103,\n nodeProps: [\n [\"isolate\", -2,1,2,\"\"]\n ],\n skippedNodes: [0,1,2],\n repeatNodeCount: 6,\n tokenData: \"/[~RyX^#rpq#rqr$grs$tuv&bvw&gxy&ryz&wz{&|{|'R|}'W}!O']!O!P'b!P!Q'o!Q![)j![!])r!]!^*P!^!_*U!_!`*^!`!a*U!b!c*n!c!}*s!}#O+U#P#Q+Z#R#S*s#T#Y*s#Y#Z+`#Z#h*s#h#i-s#i#o*s#o#p.s#p#q.x#q#r/V#y#z#r$f$g#r#BY#BZ#r$IS$I_#r$I|$JO#r$JT$JU#r$KV$KW#r&FU&FV#r~#wY!l~X^#rpq#r#y#z#r$f$g#r#BY#BZ#r$IS$I_#r$I|$JO#r$JT$JU#r$KV$KW#r&FU&FV#rR$lP#QP!_!`$oQ$tO!WQ~$wVOr$trs%^s#O$t#O#P%c#P;'S$t;'S;=`&[<%lO$t~%cOq~~%fRO;'S$t;'S;=`%o;=`O$t~%rWOr$trs%^s#O$t#O#P%c#P;'S$t;'S;=`&[;=`<%l$t<%lO$t~&_P;=`<%l$t~&gO#U~~&jPvw&m~&rO#W~~&wOW~~&|OY~~'RO#S~~'WO#V~~']OX~~'bO#R~~'gP!z~!O!P'j~'oOg~~'tQ#T~z{'z!P!Q)R~'}TOz'zz{(^{;'S'z;'S;=`({<%lO'z~(aVOz'zz{(^{!P'z!P!Q(v!Q;'S'z;'S;=`({<%lO'z~({OQ~~)OP;=`<%l'z~)WSP~OY)RZ;'S)R;'S;=`)d<%lO)R~)gP;=`<%l)R~)oPp~!Q![)j~)wP|~![!])z~*POb~~*UO!c~Q*ZP!WQ!_!`$oV*cQ`R!_!`$o!`!a*iS*nOsS~*sO!y~~*xSU~!Q![*s!c!}*s#R#S*s#T#o*s~+ZOx~~+`Oy~~+eUU~rs$t!Q![*s!c!}*s#R#S*s#T#U+w#U#o*s~+|UU~!Q![*s!c!}*s#R#S*s#T#`*s#`#a,`#a#o*s~,eUU~!Q![*s!c!}*s#R#S*s#T#g*s#g#h,w#h#o*s~,|UU~!Q![*s!c!}*s#R#S*s#T#X*s#X#Y-`#Y#o*s~-gSr~U~!Q![*s!c!}*s#R#S*s#T#o*s~-xUU~!Q![*s!c!}*s#R#S*s#T#f*s#f#g.[#g#o*s~.aUU~!Q![*s!c!}*s#R#S*s#T#i*s#i#j,w#j#o*s~.xO[~~.}P#Y~#p#q/Q~/VO#X~~/[Ot~\",\n tokenizers: [0, 1, 2],\n topRules: {\"ModuleAndExpr\":[0,3]},\n specialized: [{term: 6, get: (value) => spec_Identifier[value] || -1}],\n tokenPrec: 1527\n})\n\nexport default __parser\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nexport const\n LineComment = 1,\n BlockComment = 2,\n ModuleAndExpr = 3,\n Module = 4,\n Function = 5,\n Identifier = 6,\n fn = 7,\n Block = 11,\n Let = 13,\n _let = 14,\n mut = 15,\n Path = 17,\n PropertyPath = 19,\n For = 20,\n _for = 21,\n _in = 22,\n If = 24,\n _if = 25,\n _else = 26,\n Match = 27,\n match = 28,\n MatchBranch = 29,\n Pattern = 30,\n Literal = 31,\n Integer = 32,\n String = 33,\n Boolean = 34,\n _ = 37,\n Tuple = 38,\n Array = 39,\n Record = 42,\n RecordField = 43,\n Projection = 45,\n Indexing = 46,\n Application = 47,\n not = 49,\n CompareOp = 54,\n and = 56,\n or = 59,\n Assignment = 61,\n Return = 62,\n _return = 63,\n Abstraction = 64\n","/**\n * action: set the animation for the current object\n * @module block-animation\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { CandliBlock } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { EndAnimationMode } from 'flatbuffers/all';\nexport { EndAnimationMode } from 'flatbuffers/all';\nimport { BlockKind } from 'vpl/block';\nimport { qsT, qsTr } from 'translator/translator';\nimport { assertNonNegativeInteger, assertNumberRange } from 'utils/assert';\nimport { ObjectType, Animation } from 'game/game-core';\nimport { EditedObjectContext } from 'level/behaviour-editor-interface';\nimport { AnimationIndex, AnimWithIndexText, quotedAnimNameOrIndex } from 'blocks/common/animation/animation-common';\nimport { WithNumberSign } from 'translator/common-texts';\n\n/** Set the animation for the current object */\nexport class PlayAnimationBlock extends CandliBlock {\n\t/** which animation to set */\n\tindex: AnimationIndex | null;\n\t/** what to do when finished */\n\tendMode: EndAnimationMode;\n\n\tconstructor(animation: AnimationIndex | null, endMode: EndAnimationMode, lockState?: CandliBlock);\n\tconstructor(fbSetAnimation: CandliFB.PlayAnimation);\n\tconstructor(\n\t\tfbOrAnimation: CandliFB.PlayAnimation | AnimationIndex | null,\n\t\tendMode?: EndAnimationMode,\n\t\tlockState?: CandliBlock\n\t) {\n\t\tsuper('PlayAnimation', lockState);\n\t\tif (fbOrAnimation instanceof CandliFB.PlayAnimation) {\n\t\t\tconst animation = fbOrAnimation.animation();\n\t\t\tif (animation === 0xffff) {\n\t\t\t\tthis.index = null;\n\t\t\t} else {\n\t\t\t\tthis.index = fbOrAnimation.animation();\n\t\t\t}\n\t\t\tthis.endMode = fbOrAnimation.endMode();\n\t\t} else {\n\t\t\tthis.index = fbOrAnimation;\n\t\t\tthis.endMode = endMode!;\n\t\t}\n\t\tthis.validate();\n\t}\n\n\tclone(): PlayAnimationBlock {\n\t\treturn new PlayAnimationBlock(this.index, this.endMode, this);\n\t}\n\n\tget name() {\n\t\treturn qsT('Play animation');\n\t}\n\n\tprivate quotedAnimNameOrIndex(userContext: EditedObjectContext | null, index = this.index) {\n\t\treturn quotedAnimNameOrIndex(userContext?.objectType ?? null, index);\n\t}\n\n\tprivate animNameOrIndex(userContext: EditedObjectContext | null, index = this.index) {\n\t\tconst objectType = userContext?.objectType;\n\t\treturn (index !== null ? objectType?.animName(index) : null) ?? WithNumberSign.args(index);\n\t}\n\n\tsummaryText(userContext: EditedObjectContext | null) {\n\t\treturn AnimWithIndexText.args(this.animNameOrIndex(userContext));\n\t}\n\n\tdetailedTextIfConfigured(userContext: EditedObjectContext | null) {\n\t\tlet text = qsTr('play animation %1').args(this.quotedAnimNameOrIndex(userContext));\n\t\t// if (this.backwards) {\n\t\t// \ttext += qsT(' backwards');\n\t\t// }\n\t\t// if (this.bounce) {\n\t\t// \ttext += qsT(', bounce');\n\t\t// }\n\t\tswitch (this.endMode) {\n\t\t\tcase EndAnimationMode.ReturnToIdle:\n\t\t\t\ttext += qsTr(' and return to animation %1').args(this.quotedAnimNameOrIndex(userContext, 0));\n\t\t\t\tbreak;\n\t\t\tcase EndAnimationMode.Loop:\n\t\t\t\ttext += qsT(' and loop');\n\t\t\t\tbreak;\n\t\t\tcase EndAnimationMode.Stay:\n\t\t\t\tbreak;\n\t\t}\n\t\treturn text;\n\t}\n\n\tserialise(builder: flatbuffers.Builder) {\n\t\treturn CandliFB.PlayAnimation.createPlayAnimation(builder,\n\t\t\tthis.index ?? 0xffff,\n\t\t\tthis.endMode\n\t\t);\n\t}\n\n\tget fbActionType () {\n\t\treturn CandliFB.AnyAction.PlayAnimation;\n\t}\n\n\tget kind() {\n\t\treturn BlockKind.InstantaneousAction;\n\t}\n\n\tget premium() {\n\t\treturn true;\n\t}\n\n\tneedsConfiguration(objectType: ObjectType | null) {\n\t\treturn this.index === null ||\n\t\t\t(objectType?.animations[this.index]?.frameCount ?? 0) === 0;\n\t}\n\n\tneedsConfigurationFix(objectType: ObjectType | null) {\n\t\tif (this.index === null) {\n\t\t\treturn qsT('select an animation');\n\t\t}\n\t\tif ((objectType?.animations[this.index]?.frameCount ?? 0) === 0) {\n\t\t\treturn qsT('add at least one frame');\n\t\t}\n\t\treturn '';\n\t}\n\n\tvalidate() {\n\t\tsuper.validate();\n\t\tif (this.index !== null) {\n\t\t\tassertNonNegativeInteger(this.index, 'animation');\n\t\t}\n\t\tassertNumberRange(this.endMode, 0, 2, 'endMode');\n\t}\n\n\tgetMiniatureKey(): string {\n\t\tconst endMode = this.endMode;\n\t\treturn `set-animation ${this.index} ${endMode}`;\n\t}\n\n\tactionEffects(objectType: ObjectType | null) {\n\t\tif (this.index !== null && ((objectType?.animations[this.index]?.frameCount ?? 0) > 0)) {\n\t\t\treturn {\n\t\t\t\toverrides: ['ANIMATION'] as const\n\t\t\t}\n\t\t} else {\n\t\t\treturn {};\n\t\t}\n\t}\n}","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class Delete {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Delete {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsDelete(bb:flatbuffers.ByteBuffer, obj?:Delete):Delete {\n return (obj || new Delete()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsDelete(bb:flatbuffers.ByteBuffer, obj?:Delete):Delete {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Delete()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic startDelete(builder:flatbuffers.Builder) {\n builder.startObject(0);\n}\n\nstatic endDelete(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createDelete(builder:flatbuffers.Builder):flatbuffers.Offset {\n Delete.startDelete(builder);\n return Delete.endDelete(builder);\n}\n}\n","/**\n * action: delete current object from world\n * @module block-delete\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { CandliBlock } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { BlockKind } from 'vpl/block';\nimport { qsT, qsTr } from 'translator/translator';\n\n/** Delete the block */\nexport class DeleteBlock extends CandliBlock {\n\tconstructor(lockState?: CandliBlock) {\n\t\tsuper('Delete', lockState);\n\t}\n\n\tclone(): DeleteBlock {\n\t\treturn new DeleteBlock(this);\n\t}\n\n\tget name() {\n\t\treturn qsT('Self-destruct');\n\t}\n\n\tsummaryText() {\n\t\treturn qsT('destruct');\n\t}\n\n\tdetailedTextIfConfigured(): string {\n\t\treturn qsTr('destroy %1').args(this.thisObject());\n\t}\n\n\tserialise(builder: flatbuffers.Builder) {\n\t\treturn CandliFB.Delete.createDelete(builder);\n\t}\n\n\tget fbActionType() {\n\t\treturn CandliFB.AnyAction.Delete;\n\t}\n\n\tget kind() {\n\t\treturn BlockKind.InstantaneousAction;\n\t}\n\n\tgetMiniatureKey() { return 'delete'; }\n}\n","/**\n * action: end the current game\n * @module block-endgame\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { CandliBlock } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { assertBoolean, assertNonNegativeInteger } from 'utils/assert';\nimport { BlockKind } from 'vpl/block';\nimport { qsT, qsTr } from 'translator/translator';\nimport { DoNothing } from 'translator/common-texts';\n\n/** Show a dialog, optionally terminates the game */\nexport class ShowDialogBlock extends CandliBlock {\n\tscreen: number | null;\n\tendGame: boolean;\n\n\tconstructor(screen: number | null | CandliFB.ShowDialog = null, endGame?: boolean, lockState?: CandliBlock) {\n\t\tsuper('ShowDialog', lockState);\n\t\tif (screen instanceof CandliFB.ShowDialog) {\n\t\t\tthis.screen = screen.screen();\n\t\t\tif (this.screen === 0xff) {\n\t\t\t\tthis.screen = null;\n\t\t\t}\n\t\t\tthis.endGame = screen.endGame();\n\t\t} else {\n\t\t\tthis.screen = screen;\n\t\t\tthis.endGame = endGame ?? true;\n\t\t}\n\t\tthis.validate();\n\t}\n\n\tclone(): ShowDialogBlock {\n\t\treturn new ShowDialogBlock(this.screen, this.endGame, this);\n\t}\n\n\tget name() {\n\t\treturn qsT('End game or show dialog');\n\t}\n\n\tsummaryText() {\n\t\treturn this.endGame ? qsT('end game') : qsT('dialog');\n\t}\n\n\tdetailedTextIfConfigured() {\n\t\tif (this.endGame) {\n\t\t\tif (this.screen !== null) {\n\t\t\t\treturn qsTr('end the game with screen #%1').args(this.screen);\n\t\t\t} else {\n\t\t\t\treturn qsT('end the game with default message');\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.screen !== null) {\n\t\t\t\treturn qsTr('show a dialog with screen #%1').args(this.screen);\n\t\t\t} else {\n\t\t\t\treturn DoNothing;\n\t\t\t}\n\t\t}\n\t}\n\n\tserialise(builder: flatbuffers.Builder) {\n\t\treturn CandliFB.ShowDialog.createShowDialog(builder,\n\t\t\tthis.screen !== null ? this.screen : 0xff,\n\t\t\tthis.endGame\n\t\t);\n\t}\n\n\tget fbActionType() {\n\t\treturn CandliFB.AnyAction.ShowDialog;\n\t}\n\n\tget kind() {\n\t\treturn BlockKind.InstantaneousAction;\n\t}\n\n\tneedsConfiguration() {\n\t\treturn !this.endGame && this.screen === null;\n\t}\n\n\tneedsConfigurationFix() {\n\t\treturn qsT('select a screen to show');\n\t}\n\n\tvalidate() {\n\t\tsuper.validate();\n\t\tif (this.screen !== null) {\n\t\t\t// Note: without the game, we cannot assert that this screen index is valid\n\t\t\tassertNonNegativeInteger(this.screen, 'screen');\n\t\t}\n\t\tassertBoolean(this.endGame, 'endGame');\n\t}\n\n\tgetMiniatureKey() {\n\t\treturn `showDialog ${this.screen} ${this.endGame}`;\n\t}\n\n\tactionEffects() {\n\t\tif (this.endGame) {\n\t\t\treturn {\n\t\t\t\tfreezes: ['DIALOG', 'END_GAME'] as const,\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.screen !== null) {\n\t\t\t\treturn {\n\t\t\t\t\toverrides: ['DIALOG'] as const\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * action: play a background music with a given mixing\n * @module block-music\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { CandliBlock } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { assertNumberRange, assertIntegerRange } from 'utils/assert';\nimport { clamp } from 'math/helpers';\nimport { BlockKind } from 'vpl/block';\nimport { qsT, qsTr } from 'translator/translator';\nimport { toIndex } from 'utils/array-types';\nimport { AtmosphereCount, AtmosphereIndex, AtmosphereDescriptions, GainValues } from './music-interface';\n\n/** Set the background music */\nexport class MusicBlock extends CandliBlock {\n\tatmosphere: AtmosphereIndex | null;\n\tgains: GainValues;\n\ttimeConstant: number; // WebAudio semantics, in s\n\n\tconstructor(atmosphere: AtmosphereIndex | null, gains: GainValues, timeConstant: number, lockState?: CandliBlock);\n\tconstructor(fbMusic: CandliFB.SetMusic);\n\tconstructor(\n\t\tatmosphereOrFbMusic: AtmosphereIndex | null | CandliFB.SetMusic,\n\t\tgains?: GainValues,\n\t\ttimeConstant?: number,\n\t\tlockState?: CandliBlock\n\t) {\n\t\tsuper('SetMusic', lockState);\n\t\tif (atmosphereOrFbMusic instanceof CandliFB.SetMusic) {\n\t\t\tconst fbMusic = atmosphereOrFbMusic;\n\t\t\tconst atmosphere = fbMusic.atmosphere();\n\t\t\tif (atmosphere === 0xff) {\n\t\t\t\tthis.atmosphere = null;\n\t\t\t} else {\n\t\t\t\tthis.atmosphere = toIndex(AtmosphereCount, atmosphere);\n\t\t\t}\n\t\t\tconst gains = fbMusic.gains();\n\t\t\tthis.gains = [\n\t\t\t\tgains !== null ? gains.gain0() / 255. : 0,\n\t\t\t\tgains !== null ? gains.gain1() / 255. : 0,\n\t\t\t\tgains !== null ? gains.gain2() / 255. : 0\n\t\t\t];\n\t\t\tthis.timeConstant = fbMusic.crossFadeTimeConstant() * 0.001;\n\t\t} else {\n\t\t\tthis.atmosphere = atmosphereOrFbMusic;\n\t\t\tthis.gains = gains!;\n\t\t\tthis.timeConstant = timeConstant!;\n\t\t}\n\t\tthis.validate();\n\t}\n\n\tclone(): MusicBlock {\n\t\treturn new MusicBlock(this.atmosphere, [...this.gains], this.timeConstant, this);\n\t}\n\n\tget name() {\n\t\treturn qsT('Set music');\n\t}\n\n\tsummaryText() {\n\t\treturn qsT('set music');\n\t}\n\n\tdetailedTextIfConfigured() {\n\t\tconst durationText = qsTr('within %1 s').args((this.timeConstant * 8).toFixed(1));\n\t\tif (this.atmosphere === null) {\n\t\t\treturn qsTr('stop music %1').args(durationText);\n\t\t} else {\n\t\t\treturn qsTr('set music track to %1 (bass = %3%, middle = %4%, treble = %5%) %2').args(AtmosphereDescriptions[this.atmosphere].name, durationText, ...this.gains.map(g => (g * 100).toFixed()));\n\t\t}\n\t}\n\n\tserialise(builder: flatbuffers.Builder) {\n\t\tCandliFB.SetMusic.startSetMusic(builder);\n\t\tCandliFB.SetMusic.addAtmosphere(builder,\n\t\t\tthis.atmosphere !== null ? this.atmosphere : 0xff\n\t\t);\n\t\tCandliFB.SetMusic.addGains(builder,\n\t\t\tCandliFB.MusicGains.createMusicGains(builder,\n\t\t\t\tclamp(this.gains[0] * 255, 0, 255),\n\t\t\t\tclamp(this.gains[1] * 255, 0, 255),\n\t\t\t\tclamp(this.gains[2] * 255, 0, 255)\n\t\t\t)\n\t\t);\n\t\tCandliFB.SetMusic.addCrossFadeTimeConstant(builder,\n\t\t\tthis.timeConstant * 1000\n\t\t);\n\t\treturn CandliFB.SetMusic.endSetMusic(builder);\n\t}\n\n\tget fbActionType() {\n\t\treturn CandliFB.AnyAction.SetMusic;\n\t}\n\n\tget kind() {\n\t\treturn BlockKind.InstantaneousAction;\n\t}\n\n\tvalidate() {\n\t\tsuper.validate();\n\t\tif (this.atmosphere !== null) {\n\t\t\tassertIntegerRange(this.atmosphere, 0, AtmosphereDescriptions.length - 1, 'atmosphere');\n\t\t}\n\t\tlet i = 0;\n\t\tfor (const gain of this.gains) {\n\t\t\tassertNumberRange(gain, 0, 1, `gain ${i}`);\n\t\t\ti += 1;\n\t\t}\n\t}\n\n\tgetMiniatureKey() {\n\t\treturn `music ${this.atmosphere} ${this.gains.join(' ')} ${this.timeConstant}`;\n\t}\n\n\tactionEffects() {\n\t\treturn {\n\t\t\toverrides: ['MUSIC'] as const\n\t\t}\n\t}\n}\n","/**\n * @module block-music\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { TupleLength, IndexOf, FixedSizeArray } from 'utils/array-types';\n\nexport interface AtmosphereDescription {\n\tname: string,\n\tduration: number\n};\nexport const AtmosphereDescriptions = [\n\t{ name: 'auroa', duration: 32 } as AtmosphereDescription,\n\t{ name: 'sauty', duration: 30 } as AtmosphereDescription,\n\t{ name: 'vola', duration: 32 } as AtmosphereDescription,\n\t{ name: 'roca', duration: 16 } as AtmosphereDescription,\n\t{ name: 'bleu', duration: 26.667 } as AtmosphereDescription,\n\t{ name: 'clochy', duration: 19.6 } as AtmosphereDescription,\n\t{ name: 'harm', duration: 16 } as AtmosphereDescription,\n\t{ name: 'nuit', duration: 16 } as AtmosphereDescription,\n\t{ name: 'tryl', duration: 27 } as AtmosphereDescription,\n\t{ name: 'valsy', duration: 24 } as AtmosphereDescription\n] as const;\n\nexport type AtmosphereCount = TupleLength;\nexport const AtmosphereCount = AtmosphereDescriptions.length;\nexport type AtmosphereIndex = IndexOf;\nexport const ChannelSuffix = ['low', 'mid', 'high'] as const;\n\nexport const ChannelCount = 3;\nexport type ChannelCount = typeof ChannelCount;\nexport type ChannelIndex = IndexOf;\nexport type GainValues = FixedSizeArray;\n\nexport interface MusicInterface {\n\tpreloadAtmospheres(atmospheres: AtmosphereIndex[]): Promise;\n\tchangeGainSmooth(channel: ChannelIndex, value: number, timeConstant: number): void;\n\tchangeGainNow(channel: ChannelIndex, value: number): void;\n\t/** Changing atmosphere, setting to null stops music */\n\tsetAtmosphere(atmosphere: AtmosphereIndex | null, timeConstant: number, newGains?: GainValues): void;\n\tstop(): void;\n}","/**\n * @module block-music\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { fetchBinary } from 'network/api';\nimport { decodeAudioData, getAudioContext } from 'runtime/runtime-audio';\nimport { IndexOf, FixedSizeArray, iterIndex, map, buildRangeArray } from 'utils/array-types';\nimport { nonnull, definedOr } from 'utils/types';\nimport { AtmosphereIndex, AtmosphereDescriptions, AtmosphereCount, AtmosphereDescription, ChannelSuffix, ChannelIndex, GainValues, ChannelCount, MusicInterface } from './music-interface';\n\n\ntype Source = AudioBufferSourceNode;\ntype Sources = FixedSizeArray;\ntype SourcesIndex = IndexOf;\n\nclass AtmosphereData {\n\tprivate buffers!: FixedSizeArray;\n\n\tprivate constructor() {}\n\n\tstatic async new(audioCtx: AudioContext, atmosphereIndex: AtmosphereIndex) {\n\t\tconst instance = new AtmosphereData();\n\t\tconst decodedPromises = buildRangeArray(ChannelCount, async (index) => {\n\t\t\tconst name = AtmosphereDescriptions[atmosphereIndex].name;\n\t\t\tconst url = `music/${name}-${ChannelSuffix[index]}.mp3`;\n\t\t\tconst arrayBuffer = (await fetchBinary(url, 'GET')).value;\n\t\t\treturn decodeAudioData(audioCtx, arrayBuffer);\n\t\t});\n\t\tinstance.buffers = await Promise.all(decodedPromises);\n\t\treturn instance;\n\t}\n\n\tbuffer(index: ChannelIndex) {\n\t\treturn this.buffers[index];\n\t}\n}\n\nclass Atmosphere {\n\tprivate gains: FixedSizeArray;\n\tprivate ending = false;\n\n\tconstructor(private audioCtx: AudioContext, private description: AtmosphereDescription, private data: AtmosphereData) {\n\t\tthis.gains = this.createGains();\n\t\tthis.createSources();\n\t}\n\n\tprivate get name() {\n\t\treturn this.description.name;\n\t}\n\n\tprivate get duration() {\n\t\treturn this.description.duration;\n\t}\n\n\tget gainValues(): GainValues {\n\t\treturn map(this.gains, (node) => node.gain.value);\n\t}\n\n\tprivate createSources() {\n\t\tif (this.ending) {\n\t\t\treturn;\n\t\t}\n\t\tconst createSource = (channel: ChannelIndex) => {\n\t\t\tconst source = this.audioCtx.createBufferSource();\n\t\t\tsource.buffer = this.data.buffer(channel);\n\t\t\tsource.connect(this.gains[channel]);\n\t\t\tsource.onended = () => {\n\t\t\t\tsource.disconnect();\n\t\t\t};\n\t\t\tsource.start();\n\t\t\treturn source;\n\t\t};\n\t\tbuildRangeArray(ChannelCount, createSource);\n\t\tsetTimeout(() => this.createSources(), this.duration * 1000);\n\t}\n\n\tprivate createGains() {\n\t\treturn buildRangeArray(ChannelCount, () => {\n\t\t\tconst gain = this.audioCtx.createGain();\n\t\t\tgain.gain.value = 0;\n\t\t\tgain.connect(this.audioCtx.destination);\n\t\t\treturn gain;\n\t\t});\n\t}\n\n\tstop() {\n\t\tconsole.debug('stop playing', this.name);\n\t\tthis.ending = true;\n\t\tthis.stopAndDisconnect();\n\t}\n\n\tsilenceSmooth(timeConstant: number) {\n\t\tconsole.debug('silenceSmooth', this.name);\n\t\tthis.ending = true;\n\t\titerIndex(this.gains.length, (channel) => this.changeGain(channel, 0, timeConstant));\n\t\tsetTimeout(() => this.stopAndDisconnect(), timeConstant * 5 * 1000);\n\t}\n\n\tchangeGain(channel: SourcesIndex, value: number, timeConstant: number) {\n\t\tconsole.debug('changeGain', this.name, timeConstant);\n\t\tif (timeConstant === 0) {\n\t\t\tthis.gains[channel].gain.setValueAtTime(value, nonnull(this.audioCtx).currentTime);\n\t\t} else {\n\t\t\tthis.gains[channel].gain.setTargetAtTime(value, nonnull(this.audioCtx).currentTime, timeConstant);\n\t\t}\n\t}\n\n\tprivate stopAndDisconnect() {\n\t\tfor (const node of this.gains) {\n\t\t\tnode.disconnect();\n\t\t}\n\t}\n}\n\nconst MIN_GAIN = 1. / 32768;\n\nnamespace Atmosphere {\n\texport class GainControllers {\n\t\tnodes: FixedSizeArray;\n\n\t\tconstructor(audioCtx: AudioContext, private sources: Sources) {\n\t\t\tconst createGain = (index: SourcesIndex) => {\n\t\t\t\tconst gain = audioCtx.createGain();\n\t\t\t\tsources[index].connect(gain);\n\t\t\t\tgain.connect(audioCtx.destination);\n\t\t\t\treturn gain;\n\t\t\t}\n\t\t\tthis.nodes = buildRangeArray(ChannelCount, createGain);\n\t\t}\n\n\t\t/** check if all gains are zero, if so, disconnect them and return true, otherwise return false */\n\t\tgarbageCollect() {\n\t\t\t// check if this atmosphere has negligible gains\n\t\t\tlet isZero = true;\n\t\t\tfor (const node of this.nodes) {\n\t\t\t\tif (node.gain.value >= MIN_GAIN) {\n\t\t\t\t\tisZero = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// if not, return\n\t\t\tif (!isZero) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// if so, disconnect from both sides\n\t\t\titerIndex(this.nodes.length, (index) => {\n\t\t\t\tconst node = this.nodes[index];\n\t\t\t\tthis.sources[index].disconnect(node);\n\t\t\t\tnode.disconnect();\n\t\t\t});\n\t\t\treturn true;\n\t\t}\n\t}\n}\n\ntype Atmospheres = FixedSizeArray;\ntype AtmospheresIndex = IndexOf;\ntype AtmosphereDataMap = Map;\n\nclass WebAudioMusic implements MusicInterface {\n\tprivate atmosphereIndex?: AtmosphereIndex;\n\tprivate atmosphere?: Atmosphere;\n\tprivate atmosphereDataMap: AtmosphereDataMap = new Map();\n\tprivate savedGainsWhileHidden?: GainValues;\n\n\tconstructor(private audioCtx: AudioContext) {\n\t\tconsole.info('Creating real music object');\n\t\t// create empty buffer and play it\n\t\tconst buffer = this.audioCtx.createBuffer(1, 1, 44100);\n\t\tconst source = this.audioCtx.createBufferSource();\n\t\tsource.buffer = buffer;\n\t\tsource.connect(this.audioCtx.destination);\n\t\tsource.start();\n\t\t// pause music when page is hidden, and restore it when it is visible again\n\t\tdocument.addEventListener('visibilitychange', () => {\n\t\t\tif (document.visibilityState === 'hidden') {\n\t\t\t\tthis.savedGainsWhileHidden = this.atmosphere?.gainValues;\n\t\t\t\tthis.atmosphere?.silenceSmooth(0.1);\n\t\t\t\tthis.atmosphere = undefined;\n\t\t\t} else {\n\t\t\t\tconst index = this.atmosphereIndex;\n\t\t\t\tif (index !== undefined) {\n\t\t\t\t\tconst atmosphere = new Atmosphere(this.audioCtx, AtmosphereDescriptions[index], this.getAtmosphereData(index));\n\t\t\t\t\tthis.atmosphere = atmosphere;\n\t\t\t\t\tthis.changeAllGains(0.1, this.savedGainsWhileHidden);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tasync preloadAtmospheres(atmospheres: AtmosphereIndex[]) {\n\t\tconst newDataMap: AtmosphereDataMap = new Map();\n\t\tawait Promise.all(atmospheres.map(async (index) => {\n\t\t\tconst data = this.atmosphereDataMap.get(index) ??\n\t\t\t\tawait AtmosphereData.new(this.audioCtx, index);\n\t\t\tnewDataMap.set(index, data);\n\t\t}));\n\t\tthis.atmosphereDataMap = newDataMap;\n\t}\n\n\tchangeGainSmooth(channel: SourcesIndex, value: number, timeConstant: number) {\n\t\tthis.atmosphere?.changeGain(channel, value, timeConstant);\n\t}\n\n\tchangeGainNow(channel: SourcesIndex, value: number) {\n\t\tthis.atmosphere?.changeGain(channel, value, 0);\n\t}\n\n\tsetAtmosphere(index: AtmospheresIndex | null, timeConstant: number, newGains?: GainValues) {\n\t\t// if same atmosphere, smoothly change gains\n\t\tif (index === this.atmosphereIndex) {\n\t\t\tthis.changeAllGains(timeConstant, newGains);\n\t\t\treturn;\n\t\t}\n\t\t// silence old atmosphere and retrieve its gains, the atmosphere will be garbage-collected later\n\t\tlet oldGains: GainValues | undefined;\n\t\tif (this.atmosphere !== undefined) {\n\t\t\toldGains = this.atmosphere.gainValues;\n\t\t\tthis.atmosphere.silenceSmooth(timeConstant);\n\t\t}\n\t\t// change atmosphere\n\t\tconsole.debug('Changing atmosphere to', index);\n\t\tthis.atmosphereIndex = index ?? undefined;\n\t\tif (index === null) {\n\t\t\tthis.atmosphere = undefined;\n\t\t\treturn; // return if we have no new atmosphere\n\t\t}\n\t\tconst atmosphere = new Atmosphere(this.audioCtx, AtmosphereDescriptions[index], this.getAtmosphereData(index));\n\t\tthis.atmosphere = atmosphere;\n\t\t// apply either new gains, if they exist, or old gains\n\t\tthis.changeAllGains(timeConstant, newGains ?? oldGains);\n\t}\n\n\tprivate getAtmosphereData(index: AtmosphereIndex) {\n\t\tconst messageF = () => {\n\t\t\tconst available = [...this.atmosphereDataMap.keys()].join(', ');\n\t\t\tconst message = `Data for music atmosphere index ${index} is not available (${available} available)`;\n\t\t\treturn message;\n\t\t}\n\t\treturn definedOr(this.atmosphereDataMap.get(index), messageF);\n\t}\n\n\tprivate changeAllGains(timeConstant: number, newGains?: GainValues) {\n\t\tif (newGains !== undefined) {\n\t\t\tmap(newGains, (gain, index) => {\n\t\t\t\tthis.atmosphere?.changeGain(index, gain, timeConstant);\n\t\t\t});\n\t\t}\n\t}\n\n\tstop() {\n\t\tconsole.debug('Stopping music');\n\t\tthis.atmosphere?.stop();\n\t\tthis.atmosphere = undefined;\n\t\tthis.atmosphereIndex = undefined;\n\t}\n}\n\nclass FakeMusic implements MusicInterface {\n\tconstructor() {\n\t\tconsole.info('Creating fake music object');\n\t}\n\tasync preloadAtmospheres(atmospheres: AtmosphereIndex[]) {}\n\tchangeGainSmooth(channel: ChannelIndex, value: number, timeConstant: number) {}\n\tchangeGainNow(channel: ChannelIndex, value: number) {}\n\tsetAtmosphere(atmosphere: AtmosphereIndex | null, timeConstant: number, newGains?: GainValues) {}\n\tstop() {}\n}\n\nlet music: MusicInterface | null = null;\n\nexport function getMusic(forceFake = false) {\n\tif (music === null) {\n\t\tconst audioCtx = getAudioContext();\n\t\tmusic = (audioCtx !== null && !forceFake) ?\n\t\t\tnew WebAudioMusic(audioCtx) :\n\t\t\tnew FakeMusic();\n\t}\n\treturn music;\n}\n","\n/**\n * action: play a sound effect\n * @module block-sound\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { CandliBlock } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { BlockKind } from 'vpl/block';\nimport { qsT, qsTr } from 'translator/translator';\nimport { SoundIndex } from './sound-interface';\nimport { assertNonNegativeInteger, assertNumberRange } from 'utils/assert';\nimport { defined, nonnull } from 'utils/types';\nimport { EditedObjectContext } from 'level/behaviour-editor-interface';\n\n/// Play a sound effect\nexport class SoundBlock extends CandliBlock {\n\tindex: SoundIndex | null;\n\tgain: number;\n\n\tconstructor(sound: SoundIndex | null, gain: number, lockState?: CandliBlock);\n\tconstructor(fbPlaySound: CandliFB.PlaySound);\n\tconstructor(\n\t\tsoundOrFbPlaySound: SoundIndex | null | CandliFB.PlaySound,\n\t\tgain?: number,\n\t\tlockState?: CandliBlock\n\t) {\n\t\tsuper('PlaySound', lockState);\n\t\tif (soundOrFbPlaySound instanceof CandliFB.PlaySound) {\n\t\t\tconst sound = soundOrFbPlaySound.sound();\n\t\t\tif (sound === 0xffff) {\n\t\t\t\tthis.index = null;\n\t\t\t} else {\n\t\t\t\tthis.index = sound;\n\t\t\t}\n\t\t\tthis.gain = soundOrFbPlaySound.gain() / 255;\n\t\t} else {\n\t\t\tthis.index = soundOrFbPlaySound;\n\t\t\tthis.gain = gain!;\n\t\t}\n\t}\n\n\tclone(): SoundBlock {\n\t\treturn new SoundBlock(this.index, this.gain, this);\n\t}\n\n\tget name() {\n\t\treturn qsT('Play sound');\n\t}\n\n\tsummaryText() {\n\t\treturn qsT('play sound');\n\t}\n\n\tdetailedTextIfConfigured(userContext: EditedObjectContext | null) {\n\t\tconst game = defined(userContext?.game);\n\t\tconst sound = defined(game.sounds[nonnull(this.index)]);\n\t\tconst [samples, rate] = sound.getSamplesAndRate();\n\t\tconst duration = (samples.length / rate).toFixed(1);\n\t\treturn qsTr('play sound #%1 (%2 s) at %3% volume').args(this.index, duration, (this.gain * 100).toFixed());\n\t}\n\n\tserialise(builder: flatbuffers.Builder) {\n\t\treturn CandliFB.PlaySound.createPlaySound(builder,\n\t\t\tthis.index !== null ? this.index : 0xffff,\n\t\t\tthis.gain * 255\n\t\t);\n\t}\n\n\tget fbActionType() {\n\t\treturn CandliFB.AnyAction.PlaySound;\n\t}\n\n\tget kind() {\n\t\treturn BlockKind.InstantaneousAction;\n\t}\n\n\tneedsConfiguration() {\n\t\treturn this.index === null;\n\t}\n\n\tneedsConfigurationFix() {\n\t\treturn qsT('select a sound to play');\n\t}\n\n\tvalidate() {\n\t\tsuper.validate();\n\t\tif (this.index !== null) {\n\t\t\t// Note: without the game, we cannot assert that this sound index is valid\n\t\t\tassertNonNegativeInteger(this.index, 'sound');\n\t\t}\n\t\tassertNumberRange(this.gain, 0, 1, 'gain');\n\t}\n\n\tgetMiniatureKey() {\n\t\treturn `play-sound ${this.index} ${this.gain}`;\n\t}\n}","/**\n * action: spawn a new object from the current object\n * @module block-spawn\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { ObjectType } from 'game/game-core';\nimport { CandliBlock, ObjectTypeIdMap } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { assertTypeOrNull, assertNumber, assertNumberOrNull, assertStrictlyPositiveNumber, assertClassEqual, assertValueEqual, assertMemberNumberEqual, assertBoolean } from 'utils/assert';\nimport { toFbObjectTypeRef, fromFbSimilarityTransform2, fromFbTwist2, toFbSimilarityTransform2, toFbTwist2, fromFbObjectTypeRefOptional, TwoPIToFixedAngle15 } from 'flatbuffers/flatbuffers-cast';\nimport { Vector2, assertVector2 } from 'math/linalg';\nimport { BlockKind } from 'vpl/block';\nimport { defined, downcast, nonnull } from 'utils/types';\nimport { qsT, qsTr } from 'translator/translator';\nimport { assertMemberObjectTypeOptEqual, assertMemberVector2Equal } from 'utils/assert-specific';\nimport { EditedObjectContext } from 'level/behaviour-editor-interface';\nimport { vectorQualitativeDescription } from 'math/math-to-string';\n\nexport class SpawnBlock extends CandliBlock {\n\t/** type of object to spawn, or null if none is selected */\n\tobjectType: ObjectType | null;\n\t/** spawning direction, if null spawn on place */\n\tangle: number | null;\n\t/** spawning speed */\n\tspeed: number;\n\t/** orientation of the spawned object, relative to the parent */\n\torientation = 0;\n\t/** scale of the spawned object, relative to the parent */\n\tscale = 1;\n\t/** pos of the spawned object, relative to the parent */\n\tpos: Vector2;\n\t/** compatibility flag for fixed child spawned velocity */\n\tcompatFixedChildVelocity: boolean;\n\n\tconstructor(objectType: ObjectType | null, angle: number | null, speed: number, orientation: number, scale: number, pos: Vector2, lockState?: CandliBlock);\n\tconstructor(fbSpawn: CandliFB.Spawn, objectTypes: ObjectType[], fromVersion: number);\n\tconstructor(\n\t\tobjectTypeOrFbSpawn: ObjectType | null | CandliFB.Spawn,\n\t\tangleOrObjectTypes: number | null | ObjectType[],\n\t\tspeedOrFromVersion: number,\n\t\torientation?: number,\n\t\tscale?: number,\n\t\tpos?: Vector2,\n\t\tlockState?: CandliBlock\n\t) {\n\t\tsuper('Spawn', lockState);\n\t\tif (objectTypeOrFbSpawn instanceof CandliFB.Spawn) {\n\t\t\tconst fbSpawn = objectTypeOrFbSpawn;\n\t\t\tconst childPoseAndScale = fromFbSimilarityTransform2(fbSpawn.childPoseAndScale());\n\t\t\tconst [linearVelocity, _] = fromFbTwist2(fbSpawn.childTwist());\n\t\t\tthis.objectType = fromFbObjectTypeRefOptional(fbSpawn.objectType(), angleOrObjectTypes as ObjectType[]);\n\t\t\tthis.angle = childPoseAndScale.translation.isZero() ? null : childPoseAndScale.translation.angle;\n\t\t\tthis.speed = linearVelocity.norm();\n\t\t\tthis.orientation = childPoseAndScale.rotationAngle;\n\t\t\tthis.scale = childPoseAndScale.scaleFactor;\n\t\t\tthis.pos = childPoseAndScale.translation;\n\t\t\tif (speedOrFromVersion < 4) { // see version history in game-core.ts\n\t\t\t\tthis.compatFixedChildVelocity = true;\n\t\t\t} else {\n\t\t\t\tthis.compatFixedChildVelocity = fbSpawn.compatFixedChildVelocity();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.objectType = objectTypeOrFbSpawn;\n\t\t\tthis.angle = angleOrObjectTypes as number | null;\n\t\t\tthis.speed = speedOrFromVersion;\n\t\t\tthis.orientation = orientation!;\n\t\t\tthis.scale = scale!;\n\t\t\tthis.pos = pos!;\n\t\t\tthis.compatFixedChildVelocity = false;\n\t\t}\n\t\tthis.validate();\n\t}\n\n\tclone(): SpawnBlock {\n\t\treturn new SpawnBlock(this.objectType, this.angle, this. speed, this.orientation, this.scale, this.pos, this);\n\t}\n\n\tget name() {\n\t\treturn qsT('Spawn');\n\t}\n\n\tsummaryText() {\n\t\treturn qsT('spawn');\n\t}\n\n\tdetailedTextIfConfigured(userContext: EditedObjectContext | null) {\n\t\tconst game = defined(userContext?.game);\n\t\tconst onPlaceText = qsT('on the spot');\n\t\tlet angleText = '';\n\t\tif (this.angle === null) {\n\t\t\tangleText = onPlaceText;\n\t\t} else {\n\t\t\tconst angleVector = Vector2.fromAngleAndLength(-this.angle, 1);\n\t\t\tangleText = qsTr('to the %1').args(vectorQualitativeDescription(angleVector, onPlaceText));\n\t\t}\n\t\treturn qsTr('spawn %1 %2').args(nonnull(this.objectType).anObjectOfType(game), angleText);\n\t}\n\n\tserialise(builder: flatbuffers.Builder, objectTypes: ObjectTypeIdMap) {\n\t\tconst angle = this.angle;\n\t\t// serialise spawn action itself\n\t\tCandliFB.Spawn.startSpawn(builder);\n\t\tCandliFB.Spawn.addChildPoseAndScale(builder,\n\t\t\ttoFbSimilarityTransform2(builder,\n\t\t\t\tthis.scale,\n\t\t\t\tthis.orientation,\n\t\t\t\tthis.pos\n\t\t\t)\n\t\t);\n\t\tCandliFB.Spawn.addChildTwist(builder,\n\t\t\ttoFbTwist2(builder,\n\t\t\t\tVector2.fromAngleAndLength(angle || 0, this.speed),\n\t\t\t\t0\n\t\t\t)\n\t\t);\n\t\tCandliFB.Spawn.addShiftAway(builder,\n\t\t\tangle !== null ? angle * TwoPIToFixedAngle15 : 0xffff\n\t\t);\n\t\tCandliFB.Spawn.addObjectType(builder,\n\t\t\ttoFbObjectTypeRef(this.objectType, objectTypes)\n\t\t);\n\t\treturn CandliFB.Spawn.endSpawn(builder);\n\t}\n\n\tget fbActionType() {\n\t\treturn CandliFB.AnyAction.Spawn;\n\t}\n\n\tget kind() {\n\t\treturn BlockKind.InstantaneousAction;\n\t}\n\n\tneedsConfiguration() {\n\t\treturn this.objectType === null;\n\t}\n\n\tneedsConfigurationFix() {\n\t\treturn qsT('select an object to spawn');\n\t}\n\n\thasReferencesToObjectType(objectType: ObjectType) {\n\t\treturn this.objectType === objectType;\n\t}\n\n\treleaseReferencesToObjectType(objectType: ObjectType) {\n\t\tif (this.objectType === objectType) {\n\t\t\tthis.objectType = null;\n\t\t}\n\t}\n\n\tvalidate() {\n\t\tsuper.validate();\n\t\tassertTypeOrNull(ObjectType, this.objectType, 'objectType');\n\t\tassertNumberOrNull(this.angle, 'angle');\n\t\tassertNumber(this.speed, 'speed');\n\t\tassertNumber(this.orientation, 'orientation');\n\t\tassertStrictlyPositiveNumber(this.scale, 'scale');\n\t\tassertVector2(this.pos, 'pos');\n\t\tassertBoolean(this.compatFixedChildVelocity, 'compatFixedChildVelocity');\n\t}\n\n\tassertEqual(_that: CandliBlock, ctx: string) {\n\t\tassertClassEqual(this, _that, ctx);\n\t\tconst that = downcast(SpawnBlock, _that);\n\t\tassertMemberObjectTypeOptEqual(this, that, 'objectType', ctx);\n\t\tassertMemberNumberEqual(this, that, 'angle', ctx);\n\t\tassertMemberNumberEqual(this, that, 'speed', ctx);\n\t\tassertMemberNumberEqual(this, that, 'orientation', ctx);\n\t\tassertMemberNumberEqual(this, that, 'scale', ctx);\n\t\tassertMemberVector2Equal(this, that, 'pos', ctx);\n\t}\n\n\tgetMiniatureKey() {\n\t\tconst objectTypeText = this.objectType?.id ?? null;\n\t\treturn `spawn ${objectTypeText} ${this.angle} ${this.speed} ${this.orientation} ${this.scale} ${this.pos}`;\n\t}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class Stop {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Stop {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsStop(bb:flatbuffers.ByteBuffer, obj?:Stop):Stop {\n return (obj || new Stop()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsStop(bb:flatbuffers.ByteBuffer, obj?:Stop):Stop {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Stop()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic startStop(builder:flatbuffers.Builder) {\n builder.startObject(0);\n}\n\nstatic endStop(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createStop(builder:flatbuffers.Builder):flatbuffers.Offset {\n Stop.startStop(builder);\n return Stop.endStop(builder);\n}\n}\n","/**\n * @module block-speed\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { CandliBlock } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { BlockKind } from 'vpl/block';\nimport { qsT } from 'translator/translator';\n\nexport class StopBlock extends CandliBlock {\n\tconstructor(lockState?: CandliBlock) {\n\t\tsuper('Stop', lockState);\n\t}\n\n\tclone(): StopBlock {\n\t\treturn new StopBlock(this);\n\t}\n\n\tget name() {\n\t\treturn qsT('Stop');\n\t}\n\n\tsummaryText() {\n\t\treturn qsT('stop');\n\t}\n\n\tserialise(builder: flatbuffers.Builder) {\n\t\treturn CandliFB.Stop.createStop(builder);\n\t}\n\n\tget fbActionType() {\n\t\treturn CandliFB.AnyAction.Stop;\n\t}\n\n\tget kind() {\n\t\treturn BlockKind.InstantaneousAction;\n\t}\n\n\tgetMiniatureKey() { return 'stop'; }\n\n\tactionEffects() {\n\t\treturn {\n\t\t\toverrides: ['LINEAR_VELOCITY', 'ANGULAR_VELOCITY'] as const\n\t\t}\n\t}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class RestartTimer {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):RestartTimer {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsRestartTimer(bb:flatbuffers.ByteBuffer, obj?:RestartTimer):RestartTimer {\n return (obj || new RestartTimer()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsRestartTimer(bb:flatbuffers.ByteBuffer, obj?:RestartTimer):RestartTimer {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new RestartTimer()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic startRestartTimer(builder:flatbuffers.Builder) {\n builder.startObject(0);\n}\n\nstatic endRestartTimer(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createRestartTimer(builder:flatbuffers.Builder):flatbuffers.Offset {\n RestartTimer.startRestartTimer(builder);\n return RestartTimer.endRestartTimer(builder);\n}\n}\n","/**\n * action: restart the timer\n * @module block-restart-timer\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { CandliBlock } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { ActionEffects, BlockKind } from 'vpl/block';\nimport { qsT } from 'translator/translator';\n\nexport class RestartTimerBlock extends CandliBlock {\n\tconstructor(lockState?: CandliBlock) {\n\t\tsuper('RestartTimer', lockState);\n\t}\n\n\tclone(): RestartTimerBlock {\n\t\treturn new RestartTimerBlock(this);\n\t}\n\n\tserialise(builder: flatbuffers.Builder) {\n\t\treturn CandliFB.RestartTimer.createRestartTimer(builder);\n\t}\n\n\tget isEffectlessOnInit() {\n\t\treturn true;\n\t}\n\n\tget name() {\n\t\treturn qsT('Restart the timer');\n\t}\n\n\tsummaryText() {\n\t\treturn qsT('↺ timer');\n\t}\n\n\tdetailedTextIfConfigured() {\n\t\treturn qsT('restart the timer');\n\t}\n\n\tget fbActionType() {\n\t\treturn CandliFB.AnyAction.RestartTimer;\n\t}\n\n\tget kind() {\n\t\treturn BlockKind.InstantaneousAction;\n\t}\n\n\tgetMiniatureKey() { return 'restart-timer'; }\n\n\tactionEffects() {\n\t\treturn {\n\t\t\toverrides: ['TIMER'] as const\n\t\t}\n\t}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class Vibrate {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Vibrate {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsVibrate(bb:flatbuffers.ByteBuffer, obj?:Vibrate):Vibrate {\n return (obj || new Vibrate()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsVibrate(bb:flatbuffers.ByteBuffer, obj?:Vibrate):Vibrate {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Vibrate()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic startVibrate(builder:flatbuffers.Builder) {\n builder.startObject(0);\n}\n\nstatic endVibrate(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createVibrate(builder:flatbuffers.Builder):flatbuffers.Offset {\n Vibrate.startVibrate(builder);\n return Vibrate.endVibrate(builder);\n}\n}\n","/**\n * action: vibrate the device\n * @module block-vibrate\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { CandliBlock } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { BlockKind } from 'vpl/block';\n\nexport class VibrateBlock extends CandliBlock {\n\tconstructor(lockState?: CandliBlock) {\n\t\tsuper('Vibrate', lockState);\n\t}\n\n\tclone(): VibrateBlock {\n\t\treturn new VibrateBlock(this);\n\t}\n\n\tserialise(builder: flatbuffers.Builder) {\n\t\treturn CandliFB.Vibrate.createVibrate(builder);\n\t}\n\n\tget fbActionType() {\n\t\treturn CandliFB.AnyAction.Vibrate;\n\t}\n\n\tget kind() {\n\t\treturn BlockKind.InstantaneousAction;\n\t}\n\n\tgetMiniatureKey() { return 'vibrate'; }\n}\n","/**\n * @module block-script\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { SyntaxNode } from '@lezer/common';\n\nimport parser from './script.grammar';\nimport { is_valid_identifier as isValidIdentifier } from 'app-core-web/pkg';\nexport { parser };\n\nfunction nodeAsCandliVariableFnPosition(code: string, node: SyntaxNode, name: string): [number, number] | null {\n\t// node must be an PropertyPath\n\tif (node.name !== 'PropertyPath') {\n\t\treturn null;\n\t}\n\t// get variable name, check if it matches\n\tconst varNode = node.getChild('Identifier');\n\tif (varNode === null) {\n\t\treturn null;\n\t}\n\tconst from = varNode.from;\n\tconst to = varNode.to;\n\tconst varName = code.substring(from, to);\n\tif (varName !== name) {\n\t\treturn null;\n\t}\n\treturn [from, to];\n}\n\nexport function renameCandliVariable(code: string, oldName: string, newName: string) {\n\tif (!isValidIdentifier(newName) || !isValidIdentifier(oldName)) {\n\t\treturn code;\n\t}\n\tconst replacements: [number, number][] = [];\n\tconst tree = parser.parse(code);\n\tconst cursor = tree.cursor();\n\tdo {\n\t\tconst pos = nodeAsCandliVariableFnPosition(code, cursor.node, oldName);\n\t\tif (pos !== null) {\n\t\t\treplacements.push(pos);\n\t\t}\n\t} while (cursor.next());\n\treplacements.reverse();\n\tfor (const [start, end] of replacements) {\n\t\tcode = code.substring(0, start) + newName + code.substring(end);\n\t}\n\treturn code;\n}","/**\n * @module block-common\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { VariableScope, variableScopeAndIndex } from 'runtime/variable';\nimport { assertFalse, assertPositiveInteger } from 'utils/assert';\nimport { qsT, qsTr } from 'translator/translator';\nimport { Quoting, ScoreText, TheScoreTextAcc, TheScoreTextNom, WithNumberSign } from 'translator/common-texts';\nimport { CoreGame } from 'game/game-core';\n\nexport function varShortName(address: number) {\n\tconst [scope, index] = variableScopeAndIndex(address);\n\tif (scope === VariableScope.Game && index === 0) {\n\t\treturn ScoreText;\n\t}\n\tswitch (scope) {\n\t\tcase VariableScope.Game: return qsT('g. var.');\n\t\tcase VariableScope.ObjectType: return qsT('t. var.');\n\t\tcase VariableScope.ObjectInstance: return qsT('o. var.');\n\t\tdefault: assertFalse(`Invalid scope: ${scope}`);\n\t};\n}\n\nexport function varIndexToText(index: number, game?: CoreGame) {\n\tassertPositiveInteger(index, 'index');\n\tconst name = index > 0 ? game?.variables[index - 1]?.name.name : undefined;\n\treturn name ? Quoting.args(name) : WithNumberSign.args(index);\n}\n\nexport function varLongNameNom(address: number, game?: CoreGame) {\n\tconst [scope, index] = variableScopeAndIndex(address);\n\tif (scope === VariableScope.Game && index === 0) {\n\t\treturn TheScoreTextNom;\n\t}\n\tconst namePart = varIndexToText(index, game);\n\tswitch (scope) {\n\t\tcase VariableScope.Game: return qsTr('the value of game variable %1', 'nominative').args(namePart);\n\t\tcase VariableScope.ObjectType: return qsTr('the value of object type variable %1', 'nominative').args(namePart);\n\t\tcase VariableScope.ObjectInstance: return qsTr('the value of object variable %1', 'nominative').args(namePart);\n\t\tdefault: assertFalse(`Invalid scope: ${scope}`);\n\t};\n}\n\nexport function varLongNameAcc(address: number, game?: CoreGame) {\n\tconst [scope, index] = variableScopeAndIndex(address);\n\tif (scope === VariableScope.Game && index === 0) {\n\t\treturn TheScoreTextAcc;\n\t}\n\tconst namePart = varIndexToText(index, game);\n\tswitch (scope) {\n\t\tcase VariableScope.Game: return qsTr('the value of game variable %1', 'accusative').args(namePart);\n\t\tcase VariableScope.ObjectType: return qsTr('the value of object type variable %1', 'accusative').args(namePart);\n\t\tcase VariableScope.ObjectInstance: return qsTr('the value of object variable %1', 'accusative').args(namePart);\n\t\tdefault: assertFalse(`Invalid scope: ${scope}`);\n\t};\n}\n\n","/**\n * condition: which animation is playing\n * @module block-animation-is\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { AnimWithIndexText, AnimationIndex, quotedAnimNameOrIndex } from 'blocks/common/animation/animation-common';\nimport { CandliBlock } from 'game/game-block-definition';\nimport { EditedObjectContext } from 'level/behaviour-editor-interface';\nimport { SpacedOr, WithNumberSign } from 'translator/common-texts';\nimport { qsT, qsTr } from 'translator/translator';\nimport { assertClassEqual, assertMemberSetEqual } from 'utils/assert';\nimport { defined, downcast } from 'utils/types';\nimport { BlockKind } from 'vpl/block';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { fromFbArrayIdentity } from 'flatbuffers/flatbuffers-cast';\n\nexport class AnimationIsBlock extends CandliBlock {\n\tpublic animations: Set;\n\n\tconstructor(animations: Set, lockState?: CandliBlock);\n\tconstructor(fbIsAnimation: CandliFB.AnimationIs);\n\tconstructor(fbOrAnimations: CandliFB.AnimationIs | Set, lockState?: CandliBlock) {\n\t\tsuper('AnimationIs', lockState);\n\t\tif (fbOrAnimations instanceof CandliFB.AnimationIs) {\n\t\t\tthis.animations = new Set(fromFbArrayIdentity(fbOrAnimations, 'animations'));\n\t\t} else {\n\t\t\tthis.animations = fbOrAnimations;\n\t\t}\n\t\tthis.validate();\n\t}\n\n\tclone(): AnimationIsBlock {\n\t\treturn new AnimationIsBlock(new Set([...this.animations]), this);\n\t}\n\n\tget name() {\n\t\treturn qsT('The animation playing');\n\t}\n\n\tprivate quotedAnimNameOrIndex(userContext: EditedObjectContext | null, index: number) {\n\t\treturn quotedAnimNameOrIndex(userContext?.objectType ?? null, index);\n\t}\n\n\tprivate animNameOrIndex(userContext: EditedObjectContext | null, index: number) {\n\t\tconst objectType = userContext?.objectType;\n\t\treturn objectType?.animName(index) ?? WithNumberSign.args(index);\n\t}\n\n\tsummaryText(userContext: EditedObjectContext | null) {\n\t\tif (this.animations.size === 1) {\n\t\t\tconst index = defined([...this.animations][0]);\n\t\t\treturn AnimWithIndexText.args(this.animNameOrIndex(userContext, index));\n\t\t} else {\n\t\t\treturn qsTr('one of %1 anim.').args(this.animations.size);\n\t\t}\n\t}\n\n\tserialise(builder: flatbuffers.Builder) {\n\t\tconst animationsOfset = CandliFB.AnimationIs.createAnimationsVector(builder, [...this.animations]);\n\t\treturn CandliFB.AnimationIs.createAnimationIs(builder, animationsOfset);\n\t}\n\n\tget fbConditionType() {\n\t\treturn CandliFB.AnyCondition.AnimationIs;\n\t}\n\n\tget kind(): BlockKind {\n\t\treturn BlockKind.Condition;\n\t}\n\n\tget premium() {\n\t\treturn true;\n\t}\n\n\tdetailedTextIfConfigured(userContext: EditedObjectContext | null) {\n\t\treturn qsTr('current animation is %1').args([...this.animations]\n\t\t\t.map((index) => this.quotedAnimNameOrIndex(userContext, index))\n\t\t\t.join(SpacedOr));\n\t}\n\n\tneedsConfiguration() {\n\t\treturn this.animations.size === 0;\n\t}\n\n\tneedsConfigurationFix() {\n\t\treturn qsT('select at least one animation');\n\t}\n\n\t// TODO: validate with OT context\n\n\tassertEqual(_that: CandliBlock, ctx: string) {\n\t\tassertClassEqual(this, _that, ctx);\n\t\tconst that = downcast(AnimationIsBlock, _that);\n\t\tassertMemberSetEqual(this, that, 'animations', ctx);\n\t}\n\n\tgetMiniatureKey() {\n\t\treturn `animation-is ${[...this.animations].sort()}`;\n\t}\n}","/**\n * condition: collision between objects\n * @module block-collision\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { CoreGame, ObjectType } from 'game/game-core';\nimport { ObjectTypeIdMap, CandliBlock } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { assertIntegerRange, assert, assertClassEqual, assertValueEqual, assertSetType } from 'utils/assert';\nimport { fromFbArrayWithFactory, fromFbObjectTypeRef, toFbObjectTypeRef } from 'flatbuffers/flatbuffers-cast';\n// cSpell:ignore camelcase\n// eslint-disable-next-line camelcase\nimport { arcs_array_from_uint32grid, is_angle_in_arcs } from 'app-core-web/pkg';\nimport { nonnull, defined, downcast } from 'utils/types';\nimport { Block, BlockKind } from 'vpl/block';\nimport { qsT, qsTr } from 'translator/translator';\nimport { EditedObjectContext } from 'level/behaviour-editor-interface';\nimport { DirectionContext, Quoting, SpacedOr, downText, leftText, rightText, upText } from 'translator/common-texts';\n\nexport const enum Side {\n\tUp = 0b0001,\n\tDown = 0b0010,\n\tLeft = 0b0100,\n\tRight = 0b1000,\n\tAll = Up | Down | Left | Right\n}\n\nfunction decodeFbAngularIntervals(fbContact: CandliFB.Contact) {\n\tconst arcsCount = fbContact.arcsLength();\n\tconst result = new Uint16Array(arcsCount * 2);\n\tfor (let i = 0; i < arcsCount; ++i) {\n\t\tconst pos = i * 2;\n\t\tconst arc = nonnull(fbContact.arcs(i));\n\t\tresult[pos] = arc.start();\n\t\tresult[pos + 1] = arc.length();\n\t}\n\treturn result;\n}\n\nfunction roleUniqueToObjectTypes(game: CoreGame, types: Set) {\n\tif (types.size <= 1) {\n\t\treturn null;\n\t}\n\t// collect roles that are common to all object types\n\tconst ots = [...types];\n\tconst roles = new Set(defined(ots[0]).roles);\n\tfor (let i = 1; i < ots.length; ++i) {\n\t\tconst ot = defined(ots[i]);\n\t\troles.forEach((role) => {\n\t\t\tif (!ot.roles.has(role)) {\n\t\t\t\troles.delete(role);\n\t\t\t}\n\t\t});\n\t}\n\t// filter with roles that are common only to these object types\n\tgame.objects.forEach((ot) => {\n\t\t// we ignore object types that are already in our list\n\t\tif (types.has(ot)) {\n\t\t\treturn;\n\t\t}\n\t\t// this object type is not in our list\n\t\troles.forEach((role) => {\n\t\t\tif (ot.roles.has(role)) {\n\t\t\t\troles.delete(role);\n\t\t\t}\n\t\t});\n\t});\n\tconst commonRoles = [...roles];\n\treturn commonRoles[0] ?? null;\n}\n\nexport class CollisionBlock extends CandliBlock {\n\tpublic others: Set;\n\tpublic arcs: Uint16Array;\n\tpublic animation: string | null; // TODO: use indices in storage format\n\n\tconstructor(others: Set, angularGridOrArcs: number | Uint16Array, animation: string | null, lockState?: CandliBlock);\n\tconstructor(fbContact: CandliFB.Contact, objectTypes: ObjectType[]);\n\tconstructor(\n\t\tothersOrFbContact: Set | CandliFB.Contact,\n\t\tangularGridOrObjectTypes: number | ObjectType[] | Uint16Array,\n\t\tanimation?: string | null,\n\t\tlockState?: CandliBlock\n\t) {\n\t\tsuper('Contact', lockState);\n\t\tif (othersOrFbContact instanceof Set) {\n\t\t\tthis.others = othersOrFbContact;\n\t\t\tif (angularGridOrObjectTypes instanceof Uint16Array) {\n\t\t\t\tthis.arcs = angularGridOrObjectTypes;\n\t\t\t} else {\n\t\t\t\tthis.arcs = arcs_array_from_uint32grid(angularGridOrObjectTypes as number);\n\t\t\t}\n\t\t\tthis.animation = animation!;\n\t\t} else {\n\t\t\tconst fbContact = othersOrFbContact;\n\t\t\tconst objectTypes = angularGridOrObjectTypes as ObjectType[];\n\t\t\tthis.others = new Set(fromFbArrayWithFactory(fbContact, 'otherTypes', fromFbObjectTypeRef, objectTypes));\n\t\t\tthis.arcs = decodeFbAngularIntervals(fbContact);\n\t\t\tthis.animation = fbContact.animation();\n\t\t\tif (this.animation === '') {\n\t\t\t\tthis.animation = null;\n\t\t\t}\n\t\t}\n\t\tthis.validate();\n\t}\n\n\tclone(): CollisionBlock {\n\t\treturn new CollisionBlock(new Set([...this.others]), new Uint16Array([...this.arcs]), this.animation, this);\n\t}\n\n\tget name() {\n\t\treturn qsT('In contact with another object');\n\t}\n\n\tsummaryText() {\n\t\treturn qsT('contact');\n\t}\n\n\tdetailedTextIfConfigured(userContext: EditedObjectContext | null) {\n\t\tconst game = userContext?.game;\n\t\tconst role = game ? roleUniqueToObjectTypes(game, this.others) : null;\n\t\tlet othersText;\n\t\tif (role) {\n\t\t\tothersText = qsTr('an object of role %1').args(role);\n\t\t} else {\n\t\t\tconst namedOthers = [...this.others]\n\t\t\t\t.filter((o) => o.name !== null)\n\t\t\t\t.map((o) => game ? o.anObjectOfType(game) : o.name!);\n\t\t\tothersText = namedOthers.join(SpacedOr);\n\t\t\tif (namedOthers.length < this.others.size) {\n\t\t\t\tconst otherCount = this.others.size - namedOthers.length;\n\t\t\t\tlet additionalText = othersText.length > 0 ? SpacedOr : '';\n\t\t\t\tif (otherCount === 1) {\n\t\t\t\t\tadditionalText += qsT('an object of another type');\n\t\t\t\t} else {\n\t\t\t\t\tadditionalText += qsTr('an object of one of %1 other types').args(otherCount);\n\t\t\t\t}\n\t\t\t\tothersText += additionalText;\n\t\t\t}\n\t\t}\n\t\tlet conditionText = '';\n\t\tif (this.sides !== Side.All as number) {\n\t\t\tconst sidesText = [];\n\t\t\tif (this.sides & Side.Left) {\n\t\t\t\tsidesText.push(leftText(DirectionContext.Side));\n\t\t\t}\n\t\t\tif (this.sides & Side.Up) {\n\t\t\t\tsidesText.push(upText(DirectionContext.Side));\n\t\t\t}\n\t\t\tif (this.sides & Side.Right) {\n\t\t\t\tsidesText.push(rightText(DirectionContext.Side));\n\t\t\t}\n\t\t\tif (this.sides & Side.Down) {\n\t\t\t\tsidesText.push(downText(DirectionContext.Side));\n\t\t\t}\n\t\t\tconditionText = qsTr(' on the %1 side').args(sidesText.join(SpacedOr));\n\t\t}\n\t\tconst animText = this.animation !== null ?\n\t\t\tqsTr(' with animation %1').args(Quoting.args(this.animation)) : '';\n\t\tconst text = qsTr('%1 is in contact%2 with %3%4').args(this.thisObject(userContext), conditionText, othersText, animText);\n\t\treturn text;\n\t}\n\n\tserialise(builder: flatbuffers.Builder, objectTypes: ObjectTypeIdMap) {\n\t\tconst otherTypesId = [...this.others].map((other) => toFbObjectTypeRef(other, objectTypes));\n\t\tconst otherTypesOffset = CandliFB.Contact.createOtherTypesVector(builder, otherTypesId);\n\t\tconst arcsCount = this.arcs.length / 2;\n\t\tCandliFB.Contact.startArcsVector(builder, arcsCount);\n\t\t// we create structs in reverse because Flatbuffers builds vectors back to front\n\t\tfor (let i = arcsCount - 1; i >= 0; --i) {\n\t\t\tconst pos = i * 2;\n\t\t\tCandliFB.ContactAngularInterval.createContactAngularInterval(\n\t\t\t\tbuilder,\n\t\t\t\tthis.arcs[pos]!,\n\t\t\t\tthis.arcs[pos + 1]!\n\t\t\t);\n\t\t}\n\t\tconst arcsOffset = builder.endVector();\n\t\tconst animationOffset = this.animation !== null ? builder.createString(this.animation) : null;\n\t\tCandliFB.Contact.startContact(builder);\n\t\tCandliFB.Contact.addOtherTypes(builder, otherTypesOffset);\n\t\tCandliFB.Contact.addArcs(builder, arcsOffset);\n\t\tif (animationOffset !== null) {\n\t\t\tCandliFB.Contact.addAnimation(builder, animationOffset);\n\t\t}\n\t\treturn CandliFB.Contact.endContact(builder);\n\t}\n\n\tget fbConditionType() {\n\t\treturn CandliFB.AnyCondition.Contact;\n\t}\n\n\tget kind(): BlockKind {\n\t\treturn BlockKind.Condition;\n\t}\n\n\tneedsConfiguration() {\n\t\tconst anim = this.animation;\n\t\treturn this.others.size === 0 ||\n\t\t\tthis.arcs.length === 0 ||\n\t\t\t(anim !== null && ![...this.others]\n\t\t\t\t.some((o) => o.namedAnimations().includes(anim))\n\t\t\t)\n\t\t;\n\t}\n\n\tneedsConfigurationFix() {\n\t\tif (this.arcs.length === 0) {\n\t\t\treturn qsT('select at least one side to detect contact on');\n\t\t}\n\t\tif (this.others.size === 0) {\n\t\t\treturn qsT('select at least one object to detect contact with');\n\t\t}\n\t\treturn qsT('select an animation from the objects in contact');\n\t}\n\n\tget sides() {\n\t\treturn (\n\t\t\t(this.collidesAtAngle(0) ? Side.Right : 0) |\n\t\t\t(this.collidesAtAngle(Math.PI * 0.5) ? Side.Down : 0) |\n\t\t\t(this.collidesAtAngle(Math.PI) ? Side.Left : 0) |\n\t\t\t(this.collidesAtAngle(Math.PI * 1.5) ? Side.Up : 0)\n\t\t);\n\t}\n\tset sides(_value: number) {}\n\n\tvalidate() {\n\t\tsuper.validate();\n\t\tassertSetType(ObjectType, this.others, 'others');\n\t\tassertIntegerRange(this.sides, 0, 0xf, 'sides');\n\t\tassert(this.arcs.length % 2 === 0, 'arcs');\n\t}\n\n\tassertEqual(_that: CandliBlock, ctx: string) {\n\t\tassertClassEqual(this, _that, ctx);\n\t\tconst that = downcast(CollisionBlock, _that);\n\t\t// use id to compare others\n\t\tconst mkOthersIds = (others: Set) => {\n\t\t\tconst othersIds = [...others.entries()].map((o) => o[0].id);\n\t\t\tothersIds.sort();\n\t\t\treturn JSON.stringify(othersIds);\n\t\t};\n\t\tassertValueEqual(mkOthersIds(this.others), mkOthersIds(that.others), ctx + '.others');\n\t\t// sort arcs\n\t\tconst mkSortedArcs = (arcs: Uint16Array) => {\n\t\t\tconst sortedArcs: [number, number][] = [];\n\t\t\tfor (let i = 0; i < arcs.length; i += 2) {\n\t\t\t\tsortedArcs.push([arcs[i]!, arcs[i + 1]!]);\n\t\t\t}\n\t\t\tsortedArcs.sort((a, b) => a[0] - b[0]);\n\t\t\treturn JSON.stringify(sortedArcs);\n\t\t};\n\t\tassertValueEqual(mkSortedArcs(this.arcs), mkSortedArcs(that.arcs), ctx + '.arcs');\n\t\t// animation\n\t\tassertValueEqual(this.animation, that.animation, ctx + '.animation');\n\t}\n\n\tcollidesAtAngle(angle: number) {\n\t\treturn is_angle_in_arcs(angle, this.arcs);\n\t}\n\n\thasReferencesToObjectType(objectType: ObjectType) {\n\t\treturn this.others.has(objectType);\n\t}\n\n\treleaseReferencesToObjectType(objectType: ObjectType) {\n\t\tthis.others.delete(objectType);\n\t}\n\n\tgetMiniatureKey() {\n\t\tconst othersText = [...this.others].map((x) => x.id);\n\t\treturn `contact ${othersText} ${this.arcs} ${this.animation}`;\n\t}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class Init {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Init {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsInit(bb:flatbuffers.ByteBuffer, obj?:Init):Init {\n return (obj || new Init()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsInit(bb:flatbuffers.ByteBuffer, obj?:Init):Init {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Init()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic startInit(builder:flatbuffers.Builder) {\n builder.startObject(0);\n}\n\nstatic endInit(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createInit(builder:flatbuffers.Builder):flatbuffers.Offset {\n Init.startInit(builder);\n return Init.endInit(builder);\n}\n}\n","/**\n * condition: when an object is instantiated\n * @module block-init\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { CandliBlock } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { BlockKind } from 'vpl/block';\nimport { qsT, qsTr } from 'translator/translator';\nimport { EditedObjectContext } from 'level/behaviour-editor-interface';\n\nexport class InitBlock extends CandliBlock {\n\tconstructor(lockState?: CandliBlock) {\n\t\tsuper('Init', lockState);\n\t}\n\n\tclone(): InitBlock {\n\t\treturn new InitBlock(this);\n\t}\n\n\tget isInit() {\n\t\treturn true;\n\t}\n\n\tget name() {\n\t\treturn qsT('Created');\n\t}\n\n\tsummaryText() {\n\t\treturn qsT('created');\n\t}\n\n\tdetailedTextIfConfigured(userContext: EditedObjectContext | null) {\n\t\treturn qsTr('%1 is created').args(this.thisObject(userContext));\n\t}\n\n\tserialise(builder: flatbuffers.Builder) {\n\t\treturn CandliFB.Init.createInit(builder);\n\t}\n\n\tget fbConditionType() {\n\t\treturn CandliFB.AnyCondition.Init;\n\t}\n\n\tget kind(): BlockKind {\n\t\treturn BlockKind.Condition;\n\t}\n\n\tgetMiniatureKey() { return 'init'; }\n}\n","/**\n * condition: when a timer reaches an interval\n * @module block-timer\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { CandliBlock } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { assertNumberRange, assertBoolean } from 'utils/assert';\nimport { qsT, qsTr } from 'translator/translator';\nimport { BlockKind, ValuePortPresence } from 'vpl/block';\n\nexport class TimerBlock extends CandliBlock {\n\t/* the period in seconds */\n\tperiod: number;\n\t/* whether the timer fires only once or repeatedly */\n\trepeat: boolean;\n\n\tconstructor(period: number, repeat?: boolean, lockState?: CandliBlock);\n\tconstructor(fbTimer: CandliFB.Timer);\n\tconstructor(\n\t\tperiodOrFbTimer: number | CandliFB.Timer,\n\t\trepeat = false,\n\t\tlockState?: CandliBlock\n\t) {\n\t\tsuper('Timer', lockState);\n\t\tif (periodOrFbTimer instanceof CandliFB.Timer) {\n\t\t\tthis.period = periodOrFbTimer.period() * 0.001;\n\t\t\tthis.repeat = periodOrFbTimer.repeat();\n\t\t} else {\n\t\t\tthis.period = periodOrFbTimer;\n\t\t\tthis.repeat = repeat;\n\t\t}\n\t\tthis.validate();\n\t}\n\n\tclone(): TimerBlock {\n\t\treturn new TimerBlock(this.period, this.repeat, this);\n\t}\n\n\t/*get inputValuePortPresence() {\n\t\treturn ValuePortPresence.Optional;\n\t}*/\n\n\tget name() {\n\t\treturn qsT('Timeout');\n\t}\n\n\tsummaryText() {\n\t\tif (this.repeat) {\n\t\t\treturn qsT('interval');\n\t\t} else {\n\t\t\treturn qsT('timeout');\n\t\t}\n\t}\n\n\tdetailedTextIfConfigured() {\n\t\tif (this.repeat) {\n\t\t\tif (this.period === 1) {\n\t\t\t\treturn qsT('each time 1 second has passed');\n\t\t\t} else {\n\t\t\t\treturn qsTr('each time %1 seconds have passed').args(this.period);\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.period === 1) {\n\t\t\t\treturn qsT('1 second has passed');\n\t\t\t} else {\n\t\t\t\treturn qsTr('%1 seconds have passed').args(this.period);\n\t\t\t}\n\t\t}\n\t}\n\n\tserialise(builder: flatbuffers.Builder) {\n\t\tconst uint16Period = Math.round(this.period * 1000);\n\t\treturn CandliFB.Timer.createTimer(builder, uint16Period, this.repeat);\n\t}\n\n\tget fbConditionType() {\n\t\treturn CandliFB.AnyCondition.Timer;\n\t}\n\n\tget kind(): BlockKind {\n\t\treturn BlockKind.Condition;\n\t}\n\n\tvalidate() {\n\t\tsuper.validate();\n\t\tassertNumberRange(this.period, 0.001, 65.535, 'period');\n\t\tassertBoolean(this.repeat, 'repeat');\n\t}\n\n\tgetMiniatureKey() {\n\t\treturn `timer ${this.period} ${this.repeat}`;\n\t}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class Touch {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Touch {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsTouch(bb:flatbuffers.ByteBuffer, obj?:Touch):Touch {\n return (obj || new Touch()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsTouch(bb:flatbuffers.ByteBuffer, obj?:Touch):Touch {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Touch()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic startTouch(builder:flatbuffers.Builder) {\n builder.startObject(0);\n}\n\nstatic endTouch(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createTouch(builder:flatbuffers.Builder):flatbuffers.Offset {\n Touch.startTouch(builder);\n return Touch.endTouch(builder);\n}\n}\n","/**\n * condition: detect if user touches this object\n * @module block-touch\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { CandliBlock } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { qsT, qsTr } from 'translator/translator';\nimport { BlockKind } from 'vpl/block';\nimport { EditedObjectContext } from 'level/behaviour-editor-interface';\n\nexport class TouchBlock extends CandliBlock {\n\tconstructor(lockState?: CandliBlock) {\n\t\tsuper('Touch', lockState);\n\t}\n\n\tclone(): TouchBlock {\n\t\treturn new TouchBlock(this);\n\t}\n\n\tget name() {\n\t\treturn qsT('Touched by the player');\n\t}\n\n\tsummaryText() {\n\t\treturn qsT('touched');\n\t}\n\n\tdetailedTextIfConfigured() {\n\t\treturn qsTr('the player touches %1').args(this.thisObject());\n\t}\n\n\tserialise(builder: flatbuffers.Builder) {\n\t\treturn CandliFB.Touch.createTouch(builder);\n\t}\n\n\tget fbConditionType() {\n\t\treturn CandliFB.AnyCondition.Touch;\n\t}\n\n\tget kind(): BlockKind {\n\t\treturn BlockKind.Condition;\n\t}\n\n\tgetMiniatureKey() { return 'touch'; }\n}\n","/**\n * generic: generates a random value\n * @module block-random-value\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { CandliBlock } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { BlockKind, ValuePortPresence } from 'vpl/block';\nimport { qsT, qsTr } from 'translator/translator';\nimport { EditedObjectContext } from 'level/behaviour-editor-interface';\nimport { assertRecoverable } from 'utils/assert';\n\nexport class RandomValueBlock extends CandliBlock {\n\tpublic min: number;\n\tpublic max: number;\n\tpublic inputToMin: boolean = false;\n\n\tconstructor(fbRandomValue: CandliFB.RandomValue);\n\tconstructor(min: number, max: number, inputToMin?: boolean, lockState?: CandliBlock);\n\tconstructor(\n\t\tminOrFbRandomValue: number | CandliFB.RandomValue,\n\t\tmax?: number,\n\t\tinputToMin?: boolean,\n\t\tlockState?: CandliBlock\n\t) {\n\t\tsuper('RandomValue', lockState);\n\t\tif (minOrFbRandomValue instanceof CandliFB.RandomValue) {\n\t\t\tthis.min = minOrFbRandomValue.min();\n\t\t\tthis.max = minOrFbRandomValue.max();\n\t\t\tthis.inputToMin = minOrFbRandomValue.inputToMin();\n\t\t} else {\n\t\t\tthis.min = minOrFbRandomValue;\n\t\t\tthis.max = max!;\n\t\t\tthis.inputToMin = inputToMin ?? false;\n\t\t}\n\t\tif (this.max < this.min) {\n\t\t\tassertRecoverable(this.min <= this.max, `min ${this.min} must be <= max ${this.max}`);\n\t\t\tconst tmp = this.min;\n\t\t\tthis.min = this.max;\n\t\t\tthis.max = tmp;\n\t\t}\n\t}\n\n\tclone(): RandomValueBlock {\n\t\treturn new RandomValueBlock(this.min, this.max, this.inputToMin, this);\n\t}\n\n\tget name() {\n\t\treturn qsT('Random value');\n\t}\n\n\tget inputValuePortPresence() {\n\t\treturn ValuePortPresence.Optional;\n\t}\n\n\tget outputValuePortPresence() {\n\t\treturn ValuePortPresence.Mandatory;\n\t}\n\n\tserialise(builder: flatbuffers.Builder) {\n\t\treturn CandliFB.RandomValue.createRandomValue(builder,\n\t\t\tthis.min,\n\t\t\tthis.max,\n\t\t\tthis.inputToMin\n\t\t);\n\t}\n\n\tsummaryText(_userContext: EditedObjectContext | null, valueIn: boolean) {\n\t\tif (valueIn) {\n\t\t\tif (this.inputToMin) {\n\t\t\t\treturn qsTr('draw [val.:%1]').args(this.min);\n\t\t\t} else {\n\t\t\t\treturn qsTr('draw [%1:val.]').args(this.max);\n\t\t\t}\n\t\t} else {\n\t\t\treturn qsTr('draw [%1:%2]').args(this.min, this.max);\n\t\t}\n\t}\n\n\tprotected detailedTextIfConfigured(_userContext: EditedObjectContext | null, valueIn: boolean): string {\n\t\tif (valueIn) {\n\t\t\tif (this.inputToMin) {\n\t\t\t\treturn qsTr('draw a random value between the value and %1').args(this.max);\n\t\t\t} else {\n\t\t\t\treturn qsTr('draw a random value between %1 and the value').args(this.min);\n\t\t\t}\n\t\t} else {\n\t\t\treturn qsTr('draw a random value between %1 and %2').args(this.min, this.max);\n\t\t}\n\t}\n\n\tget fbGenericType() {\n\t\treturn CandliFB.AnyGenericBlock.RandomValue;\n\t}\n\n\tget kind(): BlockKind {\n\t\treturn BlockKind.Generic;\n\t}\n\n\tget premium() {\n\t\treturn true;\n\t}\n\n\tgetMiniatureKey(_userContext: unknown, valueIn: boolean) {\n\t\treturn `randVal ${this.min}:${this.max} ${valueIn} ${this.inputToMin}`;\n\t}\n}","/**\n * generic: execute a script in a generic block\n * @module block-generic-script\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { CandliBlock } from 'game/game-block-definition';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { BlockKind } from 'vpl/block';\nimport { qsT } from 'translator/translator';\nimport { ScriptAbstractBlock } from 'blocks/common/script/script-block';\nimport { exec_fn_unit_tuple as execFnUnitInt, exec_fn_int_int as execFnIntInt, ScriptCtx } from 'app-core-web/pkg';\nimport { assertMemberEqual } from 'utils/assert';\n\n\nconst execFns = new Map([\n\t['int → int', [execFnIntInt, true, true]],\n\t['() → int', [execFnUnitInt, false, true]],\n] as const);\n\nexport function setupCompiler(scriptCtx: ScriptCtx) {\n\treturn scriptCtx.condition_block_script_compiler();\n}\n\nexport function validSignatures() {\n\treturn [...execFns.keys()];\n}\n\nfunction getCode(codeOrFb: string | CandliFB.ScriptGeneric) {\n\tif (typeof codeOrFb === 'string') {\n\t\treturn codeOrFb;\n\t} else {\n\t\treturn codeOrFb.code() ?? '';\n\t}\n}\n\nexport class ScriptGenericBlock extends ScriptAbstractBlock {\n\tconstructor(code: string, scriptCtx: ScriptCtx, lockState?: CandliBlock);\n\tconstructor(fb: CandliFB.ScriptGeneric, scriptCtx: ScriptCtx);\n\tconstructor(codeOrFb: string | CandliFB.ScriptGeneric, scriptCtx: ScriptCtx, lockState?: CandliBlock) {\n\t\tsuper(getCode(codeOrFb), scriptCtx, execFns, 'ScriptGeneric', lockState);\n\t}\n\n\trebuildCompiler() {\n\t\treturn setupCompiler(this.scriptCtx);\n\t}\n\n\tclone(): ScriptGenericBlock {\n\t\treturn new ScriptGenericBlock(this.code, this.scriptCtx, this);\n\t}\n\n\tget name() {\n\t\treturn qsT('Value script');\n\t}\n\n\tserialise(builder: flatbuffers.Builder) {\n\t\treturn CandliFB.ScriptGeneric.createScriptGeneric(builder, builder.createString(this.code));\n\t}\n\n\tget fbGenericType() {\n\t\treturn CandliFB.AnyGenericBlock.ScriptGeneric;\n\t}\n\n\tget kind() {\n\t\treturn BlockKind.Generic;\n\t}\n\n\tget premium() {\n\t\treturn false;\n\t}\n\n\tgetMiniatureKey() {\n\t\treturn `script-generic ${this.code}`;\n\t}\n\n\tassertEqual(that: ScriptGenericBlock, ctx: string) {\n\t\tassertMemberEqual(this, that, 'code', ctx);\n\t}\n}","/**\n * Color type, inspired by color.js and building on color-convert.js and color-string.js\n * @module color\n * @preferred\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\n// design inspired by https://github.com/Qix-/color/blob/master/index.js\n\nimport { assertType, assertNumberRange, assertL, assertTypeAny, assertValidArrayPrimitive, assertValidArrayNumber } from 'utils/assert';\nimport { clamp } from 'math/helpers';\nimport { asFixedSizeArray, buildFixedSizeFloat32Array, createFixedSizeFloat32Array, FixedSizeArray, FixedSizeFloat32Array, iterIndex } from 'utils/array-types';\nimport { defined, toStr } from 'utils/types';\nimport { stringUnionCast } from 'utils/union-types';\n\nconst colorString = require('color-string');\nconst colorConvert = require('color-convert');\n\n/** The possible spaces in which the components of a [[Color]] can lie */\nexport type ColorSpace = 'rgb' | 'hsl' | 'hsv' | 'hwb';\n\n/** An object representing the components of an RGB Color */\nexport interface RGBColorObject {\n\t/** red component, unsigned integer 0-255 */\n\tr: number;\n\t/** green component, unsigned integer 0-255 */\n\tg: number;\n\t/** blue component, unsigned integer 0-255 */\n\tb: number;\n\t/** alpha component, float between 0 (transparent) and 1 (opaque) */\n\talpha: number;\n}\n/** An object representing the components of an HSL Color */\nexport interface HSLColorObject {\n\t/** hue component, unsigned integer 0-360 */\n\th: number;\n\t/** saturation component, unsigned integer 0-100 */\n\ts: number;\n\t/** lightness component, unsigned integer 0-100 */\n\tl: number;\n\t/** alpha component, float between 0 (transparent) and 1 (opaque) */\n\talpha: number;\n}\n/** An object representing the components of an HSV Color */\nexport interface HSVColorObject {\n\t/** hue component, unsigned integer 0-360 */\n\th: number;\n\t/** saturation component, unsigned integer 0-100 */\n\ts: number;\n\t/** value component, unsigned integer 0-100 */\n\tv: number;\n\t/** alpha component, float between 0 (transparent) and 1 (opaque) */\n\talpha: number;\n}\n/** An object representing the components of an HWB Color */\nexport interface HWBColorObject {\n\t/** hue component, unsigned integer 0-360 */\n\th: number;\n\t/** whiteness component, unsigned integer 0-100 */\n\tw: number;\n\t/** blackness component, unsigned integer 0-100 */\n\tb: number;\n\t/** alpha component, float between 0 (transparent) and 1 (opaque) */\n\talpha: number;\n}\n\n/** A union type of all possible objects representing color components */\nexport type ColorObject = RGBColorObject | HSLColorObject | HSVColorObject | HWBColorObject;\n\ninterface ConversionResult {\n\tmodel: ColorSpace;\n\tvalue: [number, number, number, number];\n}\n\n/** The index of a color component */\nexport type ColorComponentIndex = 0 | 1 | 2;\n\n/**\n * A color type that supports multiple color spaces.\n * Depending on [[space]], the meaning and range of [[components]] are:\n *\n * space | 0 | 1 | 2\n * ------|------------|-------------------|-----------------\n * 'rgb' | red, 0-255 | green, 0-255 | blue, 0-255\n * 'hsl' | hue, 0-360 | saturation, 0-100 | lightness, 0-100\n * 'hsv' | hue, 0-360 | saturation, 0-100 | value, 0-100\n * 'hwb' | hue, 0-360 | whiteness, 0-100 | blackness, 0-100\n */\nexport class Color {\n\t/** the three color + alpha, unsigned integers for color, float for alpha, their meaning and range depend on [[space]] */\n\treadonly components = createFixedSizeFloat32Array(4);\n\n\t// Note: the first constructor has an overload due to a Typescript limitation preventing\n\t// the caller to pass that union otherwise.\n\t/**\n\t * Create a color from a string\n\t * @param value a string as supported by the [color-string package]{@link https://www.npmjs.com/package/color-string }. Note that alpha cannot be set as part of a HTML string, use factory method fromArgbNumber instead.\n\t * @param components the three color (not alpha) components, their meaning and range depend on space. Opaque alpha and RGB color space.\n\t */\n\tconstructor(componentsOrValue: FixedSizeArray | string);\n\t/**\n\t * Create a color from its component and alpha channel, in a given space\n\t * @param components the three color (not alpha) components, their meaning and range depend on space\n\t * @param alpha alpha value between 0 (transparent) and 1 (opaque)\n\t * @param space the color space to use, one of 'rgb', 'hsl', 'hsv', or 'hwb' (default: 'rgb')\n\t */\n\tconstructor(components: FixedSizeArray, alpha: number, space?: ColorSpace);\n\tconstructor(components: FixedSizeFloat32Array<4>, space: ColorSpace);\n\tconstructor(valueOrComponents: string | FixedSizeArray | FixedSizeFloat32Array<4>, alphaOrSpace: number | ColorSpace = 1.0, public space: ColorSpace = 'rgb') {\n\t\tif (valueOrComponents instanceof Float32Array) {\n\t\t\tthis.components.set(valueOrComponents);\n\t\t\tthis.space = alphaOrSpace as ColorSpace;\n\t\t} else if (valueOrComponents instanceof Array) {\n\t\t\tthis.components.set(valueOrComponents);\n\t\t\tthis.components[3] = alphaOrSpace as number;\n\t\t} else {\n\t\t\tconst result = colorString.get(valueOrComponents) as ConversionResult;\n\t\t\tthis.components.set(result.value);\n\t\t\tthis.space = result.model;\n\t\t}\n\t}\n\n\t/** alpha component */\n\tget alpha() { return this.components[3]; }\n\tset alpha(value: number) { this.components[3] = value; }\n\n\t/** a copy of this color in RGB */\n\tget rgb(): Color { return this.toSpace('rgb'); }\n\t/** a copy of this color in HSL */\n\tget hsl(): Color { return this.toSpace('hsl'); }\n\t/** a copy of this color in HSV */\n\tget hsv(): Color { return this.toSpace('hsv'); }\n\t/** a copy of this color in HWB */\n\tget hwb(): Color { return this.toSpace('hwb'); }\n\n\t/** a copy of this color as an RGB object */\n\tget rgbObject(): RGBColorObject { return this.rgb.toObject() as RGBColorObject; }\n\t/** a copy of this color as an HSL object */\n\tget hslObject(): HSLColorObject { return this.hsl.toObject() as HSLColorObject; }\n\t/** a copy of this color as an HSV object */\n\tget hsvObject(): HSVColorObject { return this.hsv.toObject() as HSVColorObject; }\n\t/** a copy of this color as an HWB object */\n\tget hwbObject(): HWBColorObject { return this.hwb.toObject() as HWBColorObject; }\n\n\t/** an HTML-compatible hex string of this color, without alpha */\n\tget rgbHexString(): string {\n\t\tif (this.space === 'rgb') {\n\t\t\t// fast path for rgb color space\n\t\t\tconst c = this.components;\n\t\t\tconst n = ((c[0] & 0xFF) << 16) | ((c[1] & 0xFF) << 8) | (c[2] & 0xFF);\n\t\t\tconst hex = n.toString(16);\n\t\t\treturn '#000000'.substring(0, 7 - hex.length) + hex;\n\t\t}\n\t\treturn toStr(colorString.to.hex(this.rgb.integerComponents, this.alpha));\n\t}\n\n\t/** an HTML-compatible hex string of this color, with alpha */\n\tget rgbaHexString(): string {\n\t\tif (this.space === 'rgb') {\n\t\t\tif (this.alpha === 1.0) {\n\t\t\t\treturn this.rgbHexString;\n\t\t\t} else {\n\t\t\t\tconst c = this.components;\n\t\t\t\tconst n = (\n\t\t\t\t\t((c[0] & 0xFF) << 24) |\n\t\t\t\t\t((c[1] & 0xFF) << 16) |\n\t\t\t\t\t((c[2] & 0xFF) << 8) |\n\t\t\t\t\t((this.alpha * 255) & 0xFF)\n\t\t\t\t) >>> 0; // that is necessary to force unsigned bit operations\n\t\t\t\tconst hex = n.toString(16);\n\t\t\t\treturn '#00000000'.substring(0, 9 - hex.length) + hex;\n\t\t\t}\n\t\t}\n\t\treturn toStr(colorString.to.hex(this.rgb.integerComponents, this.alpha));\n\t}\n\n\t/** the RGB component of this color as a 24-bit little endian word */\n\tget rgbNumber(): number {\n\t\tconst rgb = this.rgb.integerComponents;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t}\n\t/** this color from RGB component as a 24-bit little endian word */\n\tstatic fromRgbNumber(rgb: number): Color {\n\t\tconst color = Color.fromArgbNumber(rgb);\n\t\tcolor.alpha = 1.0;\n\t\treturn color;\n\t}\n\n\t/** the ARGB component of this color as a 32-bit little endian word */\n\tget argbNumber(): number {\n\t\tconst a = Math.round(clamp(this.alpha * 255, 0, 255));\n\t\treturn this.rgbNumber | (a << 24);\n\t}\n\t/** this color from ARGB component as a 32-bit little endian word */\n\tstatic fromArgbNumber(rgb: number): Color {\n\t\tconst a = (rgb & 0xFF000000) >>> 24;\n\t\tconst r = (rgb & 0x00FF0000) >>> 16;\n\t\tconst g = (rgb & 0x0000FF00) >>> 8;\n\t\tconst b = (rgb & 0x000000FF) >>> 0;\n\t\treturn new Color([r, g, b], a / 255.0, 'rgb');\n\t}\n\n\t/** components rounded to integers */\n\tget integerComponents(): [number, number, number] {\n\t\treturn [\n\t\t\tMath.round(this.components[0]),\n\t\t\tMath.round(this.components[1]),\n\t\t\tMath.round(this.components[2])\n\t\t];\n\t}\n\n\t/** value-equality check */\n\tisEqual(that: Color) {\n\t\tfor (let i = 0; i < 4; ++i) {\n\t\t\tif (this.components[i] !== that.components[i]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn this.space === that.space;\n\t}\n\n\t/** a copy of this color */\n\tclone(): Color {\n\t\treturn new Color(this.components, this.space);\n\t}\n\n\t/**\n\t * Set a component of this color.\n\t * @param index which component to change\n\t * @param value value to assign, no check is done whether this value is valid for the given space\n\t * @return this\n\t */\n\tsetComponent(index: ColorComponentIndex, value: number): Color {\n\t\tthis.components[index] = value;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the alpha value of this color.\n\t * @param alpha alpha value between 0 (transparent) and 1 (opaque)\n\t * @return this\n\t */\n\tsetAlpha(alpha: number): Color {\n\t\tthis.alpha = alpha;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Return this color if it is in [[space]] or throw otherwise.\n\t * @param space target color space\n\t */\n\tassertSpace(space: ColorSpace): Color {\n\t\tif (space !== this.space) {\n\t\t\tthrow new Error(`Wrong color space, expected ${space} but has ${this.space}`);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Return a copy of this color in [[space]].\n\t * @param space target color space\n\t */\n\ttoSpace(space: ColorSpace): Color {\n\t\tif (space === this.space) {\n\t\t\treturn new Color([this.components[0], this.components[1], this.components[2]], this.alpha, this.space);\n\t\t} else {\n\t\t\tconst newComponents = colorConvert[this.space][space](this.components);\n\t\t\tassertValidArrayNumber(newComponents, 'newComponents');\n\t\t\treturn new Color(asFixedSizeArray(newComponents, 3), this.alpha, space);\n\t\t}\n\t}\n\n\t/** Return a copy of this color as an object depending on its space */\n\ttoObject(): ColorObject {\n\t\tconst result: any = {};\n\t\tconst labels = colorConvert[this.space].labels as [string, string, string];\n\t\tconst Keys = ['r', 'g', 'b', 'h', 's', 'l', 'v', 'w', 'b'] as const;\n\t\titerIndex(labels.length, (i) => {\n\t\t\tconst key = stringUnionCast(Keys, labels[i]);\n\t\t\tresult[key] = this.components[i];\n\t\t});\n\t\tresult.alpha = this.alpha;\n\t\treturn result as ColorObject;\n\t}\n\n\t/** Return a string version of this color (not the HTML hex, see [[rgbHexString]] for that) */\n\ttoString(): string {\n\t\treturn toStr(colorString.to[this.space](this.components, this.alpha));\n\t}\n\n\t/**\n\t * Make this color lighter\n\t * @param amount the amount of current lightness to increase\n\t */\n\tlighten(amount = 1) {\n\t\tthis.darken(-amount);\n\t}\n\n\t/**\n\t * Make this color darker\n\t * @param amount the amount of current lightness to decrease\n\t */\n\tdarken(amount = 1) {\n\t\tconst lab: number[] = (colorConvert[this.space].lab(this.components));\n\t\tconst Kn = 18;\n\t\tlab[0] = defined(lab[0]) - Kn * amount;\n\t\tconst newComponents = colorConvert.lab[this.space](lab);\n\t\tassertValidArrayNumber(newComponents, 'newComponents');\n\t\tthis.components.set(newComponents);\n\t}\n\n\t/**\n\t * Linear interpolation between this color and another one.\n\t * @param that the other color\n\t * @param thatRatio how much of the other color to use, 0 for this color, 1 for the other color\n\t * @returns a new color\n\t */\n\trgbaInterpolation(that: Color, thatRatio = 0.5) {\n\t\tconst thisRgb = this.rgb;\n\t\tconst thisRatio = 1 - thatRatio;\n\t\tconst thatRgb = that.rgb;\n\t\tconst components = buildFixedSizeFloat32Array(4,\n\t\t\t(i) => thisRatio * thisRgb.components[i] + thatRatio * thatRgb.components[i]\n\t\t);\n\t\treturn new Color(components, this.space);\n\t}\n\n\t/** black color */\n\tstatic get black() {\n\t\treturn new Color([0, 0, 0]);\n\t}\n\t/** white color */\n\tstatic get white() {\n\t\treturn new Color([255, 255, 255]);\n\t}\n\t/** transparent color */\n\tstatic get transparent() {\n\t\treturn new Color([0, 0, 0], 0);\n\t}\n}\n\nexport function assertColor(value: Color, name: string) {\n\tassertType(Color, value, name);\n\tassertTypeAny(Float32Array, value.components, 'components');\n\tassertL(value.components.length === 4, () => `components.length (${value.components.length}) is not 4`);\n\tassertNumberRange(value.alpha, 0, 1, 'alpha');\n\tconst colorSpaceValid =\n\t\tvalue.space === 'rgb' ||\n\t\tvalue.space === 'hsl' ||\n\t\tvalue.space === 'hsv' ||\n\t\tvalue.space === 'hwb'\n\t;\n\tassertL(colorSpaceValid, () => `invalid space (${value.space})`);\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { AnyAction, unionToAnyAction, unionListToAnyAction } from '../action/any-action';\n\n\nexport class Action {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Action {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsAction(bb:flatbuffers.ByteBuffer, obj?:Action):Action {\n return (obj || new Action()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsAction(bb:flatbuffers.ByteBuffer, obj?:Action):Action {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Action()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nactionType():AnyAction {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : AnyAction.NONE;\n}\n\naction(obj:any):any|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__union(obj, this.bb_pos + offset) : null;\n}\n\nmovementLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nparametersLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startAction(builder:flatbuffers.Builder) {\n builder.startObject(4);\n}\n\nstatic addActionType(builder:flatbuffers.Builder, actionType:AnyAction) {\n builder.addFieldInt8(0, actionType, AnyAction.NONE);\n}\n\nstatic addAction(builder:flatbuffers.Builder, actionOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, actionOffset, 0);\n}\n\nstatic addMovementLocked(builder:flatbuffers.Builder, movementLocked:boolean) {\n builder.addFieldInt8(2, +movementLocked, +false);\n}\n\nstatic addParametersLocked(builder:flatbuffers.Builder, parametersLocked:boolean) {\n builder.addFieldInt8(3, +parametersLocked, +false);\n}\n\nstatic endAction(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createAction(builder:flatbuffers.Builder, actionType:AnyAction, actionOffset:flatbuffers.Offset, movementLocked:boolean, parametersLocked:boolean):flatbuffers.Offset {\n Action.startAction(builder);\n Action.addActionType(builder, actionType);\n Action.addAction(builder, actionOffset);\n Action.addMovementLocked(builder, movementLocked);\n Action.addParametersLocked(builder, parametersLocked);\n return Action.endAction(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class AddAcceleration {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):AddAcceleration {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsAddAcceleration(bb:flatbuffers.ByteBuffer, obj?:AddAcceleration):AddAcceleration {\n return (obj || new AddAcceleration()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsAddAcceleration(bb:flatbuffers.ByteBuffer, obj?:AddAcceleration):AddAcceleration {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new AddAcceleration()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nx():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readInt16(this.bb_pos + offset) : 256;\n}\n\ny():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readInt16(this.bb_pos + offset) : 256;\n}\n\nrelative():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\ncompatFixedMagnitude():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startAddAcceleration(builder:flatbuffers.Builder) {\n builder.startObject(4);\n}\n\nstatic addX(builder:flatbuffers.Builder, x:number) {\n builder.addFieldInt16(0, x, 256);\n}\n\nstatic addY(builder:flatbuffers.Builder, y:number) {\n builder.addFieldInt16(1, y, 256);\n}\n\nstatic addRelative(builder:flatbuffers.Builder, relative:boolean) {\n builder.addFieldInt8(2, +relative, +false);\n}\n\nstatic addCompatFixedMagnitude(builder:flatbuffers.Builder, compatFixedMagnitude:boolean) {\n builder.addFieldInt8(3, +compatFixedMagnitude, +false);\n}\n\nstatic endAddAcceleration(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createAddAcceleration(builder:flatbuffers.Builder, x:number, y:number, relative:boolean, compatFixedMagnitude:boolean):flatbuffers.Offset {\n AddAcceleration.startAddAcceleration(builder);\n AddAcceleration.addX(builder, x);\n AddAcceleration.addY(builder, y);\n AddAcceleration.addRelative(builder, relative);\n AddAcceleration.addCompatFixedMagnitude(builder, compatFixedMagnitude);\n return AddAcceleration.endAddAcceleration(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class AddAngularAcceleration {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):AddAngularAcceleration {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsAddAngularAcceleration(bb:flatbuffers.ByteBuffer, obj?:AddAngularAcceleration):AddAngularAcceleration {\n return (obj || new AddAngularAcceleration()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsAddAngularAcceleration(bb:flatbuffers.ByteBuffer, obj?:AddAngularAcceleration):AddAngularAcceleration {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new AddAngularAcceleration()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\namount():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readInt16(this.bb_pos + offset) : 256;\n}\n\nstatic startAddAngularAcceleration(builder:flatbuffers.Builder) {\n builder.startObject(1);\n}\n\nstatic addAmount(builder:flatbuffers.Builder, amount:number) {\n builder.addFieldInt16(0, amount, 256);\n}\n\nstatic endAddAngularAcceleration(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createAddAngularAcceleration(builder:flatbuffers.Builder, amount:number):flatbuffers.Offset {\n AddAngularAcceleration.startAddAngularAcceleration(builder);\n AddAngularAcceleration.addAmount(builder, amount);\n return AddAngularAcceleration.endAddAngularAcceleration(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class AddAngularVelocity {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):AddAngularVelocity {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsAddAngularVelocity(bb:flatbuffers.ByteBuffer, obj?:AddAngularVelocity):AddAngularVelocity {\n return (obj || new AddAngularVelocity()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsAddAngularVelocity(bb:flatbuffers.ByteBuffer, obj?:AddAngularVelocity):AddAngularVelocity {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new AddAngularVelocity()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\namount():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readInt16(this.bb_pos + offset) : 256;\n}\n\nstatic startAddAngularVelocity(builder:flatbuffers.Builder) {\n builder.startObject(1);\n}\n\nstatic addAmount(builder:flatbuffers.Builder, amount:number) {\n builder.addFieldInt16(0, amount, 256);\n}\n\nstatic endAddAngularVelocity(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createAddAngularVelocity(builder:flatbuffers.Builder, amount:number):flatbuffers.Offset {\n AddAngularVelocity.startAddAngularVelocity(builder);\n AddAngularVelocity.addAmount(builder, amount);\n return AddAngularVelocity.endAddAngularVelocity(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class AddVelocity {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):AddVelocity {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsAddVelocity(bb:flatbuffers.ByteBuffer, obj?:AddVelocity):AddVelocity {\n return (obj || new AddVelocity()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsAddVelocity(bb:flatbuffers.ByteBuffer, obj?:AddVelocity):AddVelocity {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new AddVelocity()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nx():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readInt16(this.bb_pos + offset) : 256;\n}\n\ny():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readInt16(this.bb_pos + offset) : 256;\n}\n\nrelative():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\ncompatFixedMagnitude():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startAddVelocity(builder:flatbuffers.Builder) {\n builder.startObject(4);\n}\n\nstatic addX(builder:flatbuffers.Builder, x:number) {\n builder.addFieldInt16(0, x, 256);\n}\n\nstatic addY(builder:flatbuffers.Builder, y:number) {\n builder.addFieldInt16(1, y, 256);\n}\n\nstatic addRelative(builder:flatbuffers.Builder, relative:boolean) {\n builder.addFieldInt8(2, +relative, +false);\n}\n\nstatic addCompatFixedMagnitude(builder:flatbuffers.Builder, compatFixedMagnitude:boolean) {\n builder.addFieldInt8(3, +compatFixedMagnitude, +false);\n}\n\nstatic endAddVelocity(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createAddVelocity(builder:flatbuffers.Builder, x:number, y:number, relative:boolean, compatFixedMagnitude:boolean):flatbuffers.Offset {\n AddVelocity.startAddVelocity(builder);\n AddVelocity.addX(builder, x);\n AddVelocity.addY(builder, y);\n AddVelocity.addRelative(builder, relative);\n AddVelocity.addCompatFixedMagnitude(builder, compatFixedMagnitude);\n return AddVelocity.endAddVelocity(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport { AddAcceleration } from '../action/add-acceleration';\nimport { AddAngularAcceleration } from '../action/add-angular-acceleration';\nimport { AddAngularVelocity } from '../action/add-angular-velocity';\nimport { AddVelocity } from '../action/add-velocity';\nimport { Brake } from '../action/brake';\nimport { ChangeVariable } from '../action/change-variable';\nimport { Delete } from '../action/delete';\nimport { Flip } from '../action/flip';\nimport { PlayAnimation } from '../action/play-animation';\nimport { PlaySound } from '../action/play-sound';\nimport { RestartTimer } from '../action/restart-timer';\nimport { ScriptAction } from '../action/script-action';\nimport { SetMusic } from '../action/set-music';\nimport { ShowDialog } from '../action/show-dialog';\nimport { Spawn } from '../action/spawn';\nimport { Stop } from '../action/stop';\nimport { Teleport } from '../action/teleport';\nimport { Vibrate } from '../action/vibrate';\nimport { GenericBlockContainer } from '../generic-block/generic-block-container';\n\n\nexport enum AnyAction{\n NONE = 0,\n AddVelocity = 1,\n AddAngularVelocity = 2,\n Stop = 3,\n AddAcceleration = 4,\n AddAngularAcceleration = 5,\n Brake = 6,\n Flip = 7,\n Delete = 8,\n Spawn = 9,\n Teleport = 10,\n ChangeVariable = 11,\n ShowDialog = 12,\n Vibrate = 13,\n SetMusic = 14,\n RestartTimer = 15,\n PlaySound = 16,\n PlayAnimation = 17,\n GenericBlock_GenericBlockContainer = 18,\n ScriptAction = 19\n}\n\nexport function unionToAnyAction(\n type: AnyAction,\n accessor: (obj:AddAcceleration|AddAngularAcceleration|AddAngularVelocity|AddVelocity|Brake|ChangeVariable|Delete|Flip|GenericBlockContainer|PlayAnimation|PlaySound|RestartTimer|ScriptAction|SetMusic|ShowDialog|Spawn|Stop|Teleport|Vibrate) => AddAcceleration|AddAngularAcceleration|AddAngularVelocity|AddVelocity|Brake|ChangeVariable|Delete|Flip|GenericBlockContainer|PlayAnimation|PlaySound|RestartTimer|ScriptAction|SetMusic|ShowDialog|Spawn|Stop|Teleport|Vibrate|null\n): AddAcceleration|AddAngularAcceleration|AddAngularVelocity|AddVelocity|Brake|ChangeVariable|Delete|Flip|GenericBlockContainer|PlayAnimation|PlaySound|RestartTimer|ScriptAction|SetMusic|ShowDialog|Spawn|Stop|Teleport|Vibrate|null {\n switch(AnyAction[type]) {\n case 'NONE': return null; \n case 'AddVelocity': return accessor(new AddVelocity())! as AddVelocity;\n case 'AddAngularVelocity': return accessor(new AddAngularVelocity())! as AddAngularVelocity;\n case 'Stop': return accessor(new Stop())! as Stop;\n case 'AddAcceleration': return accessor(new AddAcceleration())! as AddAcceleration;\n case 'AddAngularAcceleration': return accessor(new AddAngularAcceleration())! as AddAngularAcceleration;\n case 'Brake': return accessor(new Brake())! as Brake;\n case 'Flip': return accessor(new Flip())! as Flip;\n case 'Delete': return accessor(new Delete())! as Delete;\n case 'Spawn': return accessor(new Spawn())! as Spawn;\n case 'Teleport': return accessor(new Teleport())! as Teleport;\n case 'ChangeVariable': return accessor(new ChangeVariable())! as ChangeVariable;\n case 'ShowDialog': return accessor(new ShowDialog())! as ShowDialog;\n case 'Vibrate': return accessor(new Vibrate())! as Vibrate;\n case 'SetMusic': return accessor(new SetMusic())! as SetMusic;\n case 'RestartTimer': return accessor(new RestartTimer())! as RestartTimer;\n case 'PlaySound': return accessor(new PlaySound())! as PlaySound;\n case 'PlayAnimation': return accessor(new PlayAnimation())! as PlayAnimation;\n case 'GenericBlock_GenericBlockContainer': return accessor(new GenericBlockContainer())! as GenericBlockContainer;\n case 'ScriptAction': return accessor(new ScriptAction())! as ScriptAction;\n default: return null;\n }\n}\n\nexport function unionListToAnyAction(\n type: AnyAction, \n accessor: (index: number, obj:AddAcceleration|AddAngularAcceleration|AddAngularVelocity|AddVelocity|Brake|ChangeVariable|Delete|Flip|GenericBlockContainer|PlayAnimation|PlaySound|RestartTimer|ScriptAction|SetMusic|ShowDialog|Spawn|Stop|Teleport|Vibrate) => AddAcceleration|AddAngularAcceleration|AddAngularVelocity|AddVelocity|Brake|ChangeVariable|Delete|Flip|GenericBlockContainer|PlayAnimation|PlaySound|RestartTimer|ScriptAction|SetMusic|ShowDialog|Spawn|Stop|Teleport|Vibrate|null, \n index: number\n): AddAcceleration|AddAngularAcceleration|AddAngularVelocity|AddVelocity|Brake|ChangeVariable|Delete|Flip|GenericBlockContainer|PlayAnimation|PlaySound|RestartTimer|ScriptAction|SetMusic|ShowDialog|Spawn|Stop|Teleport|Vibrate|null {\n switch(AnyAction[type]) {\n case 'NONE': return null; \n case 'AddVelocity': return accessor(index, new AddVelocity())! as AddVelocity;\n case 'AddAngularVelocity': return accessor(index, new AddAngularVelocity())! as AddAngularVelocity;\n case 'Stop': return accessor(index, new Stop())! as Stop;\n case 'AddAcceleration': return accessor(index, new AddAcceleration())! as AddAcceleration;\n case 'AddAngularAcceleration': return accessor(index, new AddAngularAcceleration())! as AddAngularAcceleration;\n case 'Brake': return accessor(index, new Brake())! as Brake;\n case 'Flip': return accessor(index, new Flip())! as Flip;\n case 'Delete': return accessor(index, new Delete())! as Delete;\n case 'Spawn': return accessor(index, new Spawn())! as Spawn;\n case 'Teleport': return accessor(index, new Teleport())! as Teleport;\n case 'ChangeVariable': return accessor(index, new ChangeVariable())! as ChangeVariable;\n case 'ShowDialog': return accessor(index, new ShowDialog())! as ShowDialog;\n case 'Vibrate': return accessor(index, new Vibrate())! as Vibrate;\n case 'SetMusic': return accessor(index, new SetMusic())! as SetMusic;\n case 'RestartTimer': return accessor(index, new RestartTimer())! as RestartTimer;\n case 'PlaySound': return accessor(index, new PlaySound())! as PlaySound;\n case 'PlayAnimation': return accessor(index, new PlayAnimation())! as PlayAnimation;\n case 'GenericBlock_GenericBlockContainer': return accessor(index, new GenericBlockContainer())! as GenericBlockContainer;\n case 'ScriptAction': return accessor(index, new ScriptAction())! as ScriptAction;\n default: return null;\n }\n}\n\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class Brake {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Brake {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsBrake(bb:flatbuffers.ByteBuffer, obj?:Brake):Brake {\n return (obj || new Brake()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsBrake(bb:flatbuffers.ByteBuffer, obj?:Brake):Brake {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Brake()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nintensity():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 2560;\n}\n\nstatic startBrake(builder:flatbuffers.Builder) {\n builder.startObject(1);\n}\n\nstatic addIntensity(builder:flatbuffers.Builder, intensity:number) {\n builder.addFieldInt16(0, intensity, 2560);\n}\n\nstatic endBrake(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createBrake(builder:flatbuffers.Builder, intensity:number):flatbuffers.Offset {\n Brake.startBrake(builder);\n Brake.addIntensity(builder, intensity);\n return Brake.endBrake(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nexport enum ChangeVariableOperation{\n SET = 0,\n ADD = 1\n}\n\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { ChangeVariableOperation } from '../action/change-variable-operation';\n\n\nexport class ChangeVariable {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):ChangeVariable {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsChangeVariable(bb:flatbuffers.ByteBuffer, obj?:ChangeVariable):ChangeVariable {\n return (obj || new ChangeVariable()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsChangeVariable(bb:flatbuffers.ByteBuffer, obj?:ChangeVariable):ChangeVariable {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new ChangeVariable()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\naddress():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\nvalue():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readInt16(this.bb_pos + offset) : 1;\n}\n\noperation():ChangeVariableOperation {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : ChangeVariableOperation.ADD;\n}\n\nstatic startChangeVariable(builder:flatbuffers.Builder) {\n builder.startObject(3);\n}\n\nstatic addAddress(builder:flatbuffers.Builder, address:number) {\n builder.addFieldInt16(0, address, 0);\n}\n\nstatic addValue(builder:flatbuffers.Builder, value:number) {\n builder.addFieldInt16(1, value, 1);\n}\n\nstatic addOperation(builder:flatbuffers.Builder, operation:ChangeVariableOperation) {\n builder.addFieldInt8(2, operation, ChangeVariableOperation.ADD);\n}\n\nstatic endChangeVariable(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createChangeVariable(builder:flatbuffers.Builder, address:number, value:number, operation:ChangeVariableOperation):flatbuffers.Offset {\n ChangeVariable.startChangeVariable(builder);\n ChangeVariable.addAddress(builder, address);\n ChangeVariable.addValue(builder, value);\n ChangeVariable.addOperation(builder, operation);\n return ChangeVariable.endChangeVariable(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nexport enum EndAnimationMode{\n ReturnToIdle = 0,\n Loop = 1,\n Stay = 2\n}\n\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class Flip {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Flip {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsFlip(bb:flatbuffers.ByteBuffer, obj?:Flip):Flip {\n return (obj || new Flip()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsFlip(bb:flatbuffers.ByteBuffer, obj?:Flip):Flip {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Flip()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nflipX():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nflipY():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nrelative():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startFlip(builder:flatbuffers.Builder) {\n builder.startObject(3);\n}\n\nstatic addFlipX(builder:flatbuffers.Builder, flipX:boolean) {\n builder.addFieldInt8(0, +flipX, +false);\n}\n\nstatic addFlipY(builder:flatbuffers.Builder, flipY:boolean) {\n builder.addFieldInt8(1, +flipY, +false);\n}\n\nstatic addRelative(builder:flatbuffers.Builder, relative:boolean) {\n builder.addFieldInt8(2, +relative, +false);\n}\n\nstatic endFlip(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createFlip(builder:flatbuffers.Builder, flipX:boolean, flipY:boolean, relative:boolean):flatbuffers.Offset {\n Flip.startFlip(builder);\n Flip.addFlipX(builder, flipX);\n Flip.addFlipY(builder, flipY);\n Flip.addRelative(builder, relative);\n return Flip.endFlip(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class MusicGains {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):MusicGains {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\ngain0():number {\n return this.bb!.readUint8(this.bb_pos);\n}\n\ngain1():number {\n return this.bb!.readUint8(this.bb_pos + 1);\n}\n\ngain2():number {\n return this.bb!.readUint8(this.bb_pos + 2);\n}\n\nstatic sizeOf():number {\n return 3;\n}\n\nstatic createMusicGains(builder:flatbuffers.Builder, gain0: number, gain1: number, gain2: number):flatbuffers.Offset {\n builder.prep(1, 3);\n builder.writeInt8(gain2);\n builder.writeInt8(gain1);\n builder.writeInt8(gain0);\n return builder.offset();\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { EndAnimationMode } from '../action/end-animation-mode';\n\n\nexport class PlayAnimation {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):PlayAnimation {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsPlayAnimation(bb:flatbuffers.ByteBuffer, obj?:PlayAnimation):PlayAnimation {\n return (obj || new PlayAnimation()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsPlayAnimation(bb:flatbuffers.ByteBuffer, obj?:PlayAnimation):PlayAnimation {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new PlayAnimation()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nanimation():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\nendMode():EndAnimationMode {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : EndAnimationMode.ReturnToIdle;\n}\n\nstatic startPlayAnimation(builder:flatbuffers.Builder) {\n builder.startObject(2);\n}\n\nstatic addAnimation(builder:flatbuffers.Builder, animation:number) {\n builder.addFieldInt16(0, animation, 0);\n}\n\nstatic addEndMode(builder:flatbuffers.Builder, endMode:EndAnimationMode) {\n builder.addFieldInt8(1, endMode, EndAnimationMode.ReturnToIdle);\n}\n\nstatic endPlayAnimation(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createPlayAnimation(builder:flatbuffers.Builder, animation:number, endMode:EndAnimationMode):flatbuffers.Offset {\n PlayAnimation.startPlayAnimation(builder);\n PlayAnimation.addAnimation(builder, animation);\n PlayAnimation.addEndMode(builder, endMode);\n return PlayAnimation.endPlayAnimation(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class PlaySound {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):PlaySound {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsPlaySound(bb:flatbuffers.ByteBuffer, obj?:PlaySound):PlaySound {\n return (obj || new PlaySound()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsPlaySound(bb:flatbuffers.ByteBuffer, obj?:PlaySound):PlaySound {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new PlaySound()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nsound():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\ngain():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : 0;\n}\n\nstatic startPlaySound(builder:flatbuffers.Builder) {\n builder.startObject(2);\n}\n\nstatic addSound(builder:flatbuffers.Builder, sound:number) {\n builder.addFieldInt16(0, sound, 0);\n}\n\nstatic addGain(builder:flatbuffers.Builder, gain:number) {\n builder.addFieldInt8(1, gain, 0);\n}\n\nstatic endPlaySound(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createPlaySound(builder:flatbuffers.Builder, sound:number, gain:number):flatbuffers.Offset {\n PlaySound.startPlaySound(builder);\n PlaySound.addSound(builder, sound);\n PlaySound.addGain(builder, gain);\n return PlaySound.endPlaySound(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class ScriptAction {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):ScriptAction {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsScriptAction(bb:flatbuffers.ByteBuffer, obj?:ScriptAction):ScriptAction {\n return (obj || new ScriptAction()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsScriptAction(bb:flatbuffers.ByteBuffer, obj?:ScriptAction):ScriptAction {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new ScriptAction()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\ncode():string|null\ncode(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\ncode(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\ncontinuous():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startScriptAction(builder:flatbuffers.Builder) {\n builder.startObject(2);\n}\n\nstatic addCode(builder:flatbuffers.Builder, codeOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, codeOffset, 0);\n}\n\nstatic addContinuous(builder:flatbuffers.Builder, continuous:boolean) {\n builder.addFieldInt8(1, +continuous, +false);\n}\n\nstatic endScriptAction(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createScriptAction(builder:flatbuffers.Builder, codeOffset:flatbuffers.Offset, continuous:boolean):flatbuffers.Offset {\n ScriptAction.startScriptAction(builder);\n ScriptAction.addCode(builder, codeOffset);\n ScriptAction.addContinuous(builder, continuous);\n return ScriptAction.endScriptAction(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { MusicGains } from '../action/music-gains';\n\n\nexport class SetMusic {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):SetMusic {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsSetMusic(bb:flatbuffers.ByteBuffer, obj?:SetMusic):SetMusic {\n return (obj || new SetMusic()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsSetMusic(bb:flatbuffers.ByteBuffer, obj?:SetMusic):SetMusic {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new SetMusic()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\natmosphere():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : 255;\n}\n\ngains(obj?:MusicGains):MusicGains|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? (obj || new MusicGains()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\ncrossFadeTimeConstant():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 100;\n}\n\nstatic startSetMusic(builder:flatbuffers.Builder) {\n builder.startObject(3);\n}\n\nstatic addAtmosphere(builder:flatbuffers.Builder, atmosphere:number) {\n builder.addFieldInt8(0, atmosphere, 255);\n}\n\nstatic addGains(builder:flatbuffers.Builder, gainsOffset:flatbuffers.Offset) {\n builder.addFieldStruct(1, gainsOffset, 0);\n}\n\nstatic addCrossFadeTimeConstant(builder:flatbuffers.Builder, crossFadeTimeConstant:number) {\n builder.addFieldInt16(2, crossFadeTimeConstant, 100);\n}\n\nstatic endSetMusic(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class ShowDialog {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):ShowDialog {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsShowDialog(bb:flatbuffers.ByteBuffer, obj?:ShowDialog):ShowDialog {\n return (obj || new ShowDialog()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsShowDialog(bb:flatbuffers.ByteBuffer, obj?:ShowDialog):ShowDialog {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new ShowDialog()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nscreen():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : 255;\n}\n\nendGame():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : true;\n}\n\nstatic startShowDialog(builder:flatbuffers.Builder) {\n builder.startObject(2);\n}\n\nstatic addScreen(builder:flatbuffers.Builder, screen:number) {\n builder.addFieldInt8(0, screen, 255);\n}\n\nstatic addEndGame(builder:flatbuffers.Builder, endGame:boolean) {\n builder.addFieldInt8(1, +endGame, +true);\n}\n\nstatic endShowDialog(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createShowDialog(builder:flatbuffers.Builder, screen:number, endGame:boolean):flatbuffers.Offset {\n ShowDialog.startShowDialog(builder);\n ShowDialog.addScreen(builder, screen);\n ShowDialog.addEndGame(builder, endGame);\n return ShowDialog.endShowDialog(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { SimilarityTransform2 } from '../math/similarity-transform2';\nimport { Twist2 } from '../math/twist2';\n\n\nexport class Spawn {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Spawn {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsSpawn(bb:flatbuffers.ByteBuffer, obj?:Spawn):Spawn {\n return (obj || new Spawn()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsSpawn(bb:flatbuffers.ByteBuffer, obj?:Spawn):Spawn {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Spawn()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nchildPoseAndScale(obj?:SimilarityTransform2):SimilarityTransform2|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? (obj || new SimilarityTransform2()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\nchildTwist(obj?:Twist2):Twist2|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? (obj || new Twist2()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\nshiftAway():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\nobjectType():number {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 65535;\n}\n\ncompatFixedChildVelocity():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startSpawn(builder:flatbuffers.Builder) {\n builder.startObject(5);\n}\n\nstatic addChildPoseAndScale(builder:flatbuffers.Builder, childPoseAndScaleOffset:flatbuffers.Offset) {\n builder.addFieldStruct(0, childPoseAndScaleOffset, 0);\n}\n\nstatic addChildTwist(builder:flatbuffers.Builder, childTwistOffset:flatbuffers.Offset) {\n builder.addFieldStruct(1, childTwistOffset, 0);\n}\n\nstatic addShiftAway(builder:flatbuffers.Builder, shiftAway:number) {\n builder.addFieldInt16(2, shiftAway, 0);\n}\n\nstatic addObjectType(builder:flatbuffers.Builder, objectType:number) {\n builder.addFieldInt16(3, objectType, 65535);\n}\n\nstatic addCompatFixedChildVelocity(builder:flatbuffers.Builder, compatFixedChildVelocity:boolean) {\n builder.addFieldInt8(4, +compatFixedChildVelocity, +false);\n}\n\nstatic endSpawn(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { SimilarityTransform2 } from '../math/similarity-transform2';\n\n\nexport class Teleport {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Teleport {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsTeleport(bb:flatbuffers.ByteBuffer, obj?:Teleport):Teleport {\n return (obj || new Teleport()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsTeleport(bb:flatbuffers.ByteBuffer, obj?:Teleport):Teleport {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Teleport()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nbeacon():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 65535;\n}\n\ntoBeaconTransform(obj?:SimilarityTransform2):SimilarityTransform2|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? (obj || new SimilarityTransform2()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\nmoveCamera():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\ntransformParts():number {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : 255;\n}\n\nstatic startTeleport(builder:flatbuffers.Builder) {\n builder.startObject(4);\n}\n\nstatic addBeacon(builder:flatbuffers.Builder, beacon:number) {\n builder.addFieldInt16(0, beacon, 65535);\n}\n\nstatic addToBeaconTransform(builder:flatbuffers.Builder, toBeaconTransformOffset:flatbuffers.Offset) {\n builder.addFieldStruct(1, toBeaconTransformOffset, 0);\n}\n\nstatic addMoveCamera(builder:flatbuffers.Builder, moveCamera:boolean) {\n builder.addFieldInt8(2, +moveCamera, +false);\n}\n\nstatic addTransformParts(builder:flatbuffers.Builder, transformParts:number) {\n builder.addFieldInt8(3, transformParts, 255);\n}\n\nstatic endTeleport(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class Packed32 {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Packed32 {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nbgra():number {\n return this.bb!.readUint32(this.bb_pos);\n}\n\nstatic sizeOf():number {\n return 4;\n}\n\nstatic createPacked32(builder:flatbuffers.Builder, bgra: number):flatbuffers.Offset {\n builder.prep(4, 4);\n builder.writeInt32(bgra);\n return builder.offset();\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class AnimationIs {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):AnimationIs {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsAnimationIs(bb:flatbuffers.ByteBuffer, obj?:AnimationIs):AnimationIs {\n return (obj || new AnimationIs()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsAnimationIs(bb:flatbuffers.ByteBuffer, obj?:AnimationIs):AnimationIs {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new AnimationIs()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nanimations(index: number):number|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint16(this.bb!.__vector(this.bb_pos + offset) + index * 2) : 0;\n}\n\nanimationsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nanimationsArray():Uint16Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? new Uint16Array(this.bb!.bytes().buffer, this.bb!.bytes().byteOffset + this.bb!.__vector(this.bb_pos + offset), this.bb!.__vector_len(this.bb_pos + offset)) : null;\n}\n\nstatic startAnimationIs(builder:flatbuffers.Builder) {\n builder.startObject(1);\n}\n\nstatic addAnimations(builder:flatbuffers.Builder, animationsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, animationsOffset, 0);\n}\n\nstatic createAnimationsVector(builder:flatbuffers.Builder, data:number[]|Uint16Array):flatbuffers.Offset;\n/**\n * @deprecated This Uint8Array overload will be removed in the future.\n */\nstatic createAnimationsVector(builder:flatbuffers.Builder, data:number[]|Uint8Array):flatbuffers.Offset;\nstatic createAnimationsVector(builder:flatbuffers.Builder, data:number[]|Uint16Array|Uint8Array):flatbuffers.Offset {\n builder.startVector(2, data.length, 2);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addInt16(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startAnimationsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(2, numElems, 2);\n}\n\nstatic endAnimationIs(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createAnimationIs(builder:flatbuffers.Builder, animationsOffset:flatbuffers.Offset):flatbuffers.Offset {\n AnimationIs.startAnimationIs(builder);\n AnimationIs.addAnimations(builder, animationsOffset);\n return AnimationIs.endAnimationIs(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport { AnimationIs } from '../condition/animation-is';\nimport { Comparison } from '../condition/comparison';\nimport { Contact } from '../condition/contact';\nimport { Init } from '../condition/init';\nimport { InputButton } from '../condition/input-button';\nimport { ScriptCondition } from '../condition/script-condition';\nimport { Timer } from '../condition/timer';\nimport { Touch } from '../condition/touch';\nimport { GenericBlockContainer } from '../generic-block/generic-block-container';\nimport { ReadVariable } from '../generic-block/read-variable';\n\n\nexport enum AnyCondition{\n NONE = 0,\n Init = 1,\n InputButton = 2,\n Touch = 3,\n Contact = 4,\n Timer = 5,\n Comparison = 6,\n GenericBlock_ReadVariable = 7,\n AnimationIs = 8,\n GenericBlock_GenericBlockContainer = 9,\n ScriptCondition = 10\n}\n\nexport function unionToAnyCondition(\n type: AnyCondition,\n accessor: (obj:AnimationIs|Comparison|Contact|GenericBlockContainer|Init|InputButton|ReadVariable|ScriptCondition|Timer|Touch) => AnimationIs|Comparison|Contact|GenericBlockContainer|Init|InputButton|ReadVariable|ScriptCondition|Timer|Touch|null\n): AnimationIs|Comparison|Contact|GenericBlockContainer|Init|InputButton|ReadVariable|ScriptCondition|Timer|Touch|null {\n switch(AnyCondition[type]) {\n case 'NONE': return null; \n case 'Init': return accessor(new Init())! as Init;\n case 'InputButton': return accessor(new InputButton())! as InputButton;\n case 'Touch': return accessor(new Touch())! as Touch;\n case 'Contact': return accessor(new Contact())! as Contact;\n case 'Timer': return accessor(new Timer())! as Timer;\n case 'Comparison': return accessor(new Comparison())! as Comparison;\n case 'GenericBlock_ReadVariable': return accessor(new ReadVariable())! as ReadVariable;\n case 'AnimationIs': return accessor(new AnimationIs())! as AnimationIs;\n case 'GenericBlock_GenericBlockContainer': return accessor(new GenericBlockContainer())! as GenericBlockContainer;\n case 'ScriptCondition': return accessor(new ScriptCondition())! as ScriptCondition;\n default: return null;\n }\n}\n\nexport function unionListToAnyCondition(\n type: AnyCondition, \n accessor: (index: number, obj:AnimationIs|Comparison|Contact|GenericBlockContainer|Init|InputButton|ReadVariable|ScriptCondition|Timer|Touch) => AnimationIs|Comparison|Contact|GenericBlockContainer|Init|InputButton|ReadVariable|ScriptCondition|Timer|Touch|null, \n index: number\n): AnimationIs|Comparison|Contact|GenericBlockContainer|Init|InputButton|ReadVariable|ScriptCondition|Timer|Touch|null {\n switch(AnyCondition[type]) {\n case 'NONE': return null; \n case 'Init': return accessor(index, new Init())! as Init;\n case 'InputButton': return accessor(index, new InputButton())! as InputButton;\n case 'Touch': return accessor(index, new Touch())! as Touch;\n case 'Contact': return accessor(index, new Contact())! as Contact;\n case 'Timer': return accessor(index, new Timer())! as Timer;\n case 'Comparison': return accessor(index, new Comparison())! as Comparison;\n case 'GenericBlock_ReadVariable': return accessor(index, new ReadVariable())! as ReadVariable;\n case 'AnimationIs': return accessor(index, new AnimationIs())! as AnimationIs;\n case 'GenericBlock_GenericBlockContainer': return accessor(index, new GenericBlockContainer())! as GenericBlockContainer;\n case 'ScriptCondition': return accessor(index, new ScriptCondition())! as ScriptCondition;\n default: return null;\n }\n}\n\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nexport enum ComparisonOperation{\n EQUAL = 0,\n GREATER_THAN = 1,\n LESS_THAN = 2,\n NOT_EQUAL = 3,\n LESS_THAN_OR_EQUAL_TO = 4,\n GREATER_THAN_OR_EQUAL_TO = 5\n}\n\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { ComparisonOperation } from '../condition/comparison-operation';\nimport { InputToBinarySide } from '../generic-block/input-to-binary-side';\n\n\nexport class Comparison {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Comparison {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsComparison(bb:flatbuffers.ByteBuffer, obj?:Comparison):Comparison {\n return (obj || new Comparison()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsComparison(bb:flatbuffers.ByteBuffer, obj?:Comparison):Comparison {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Comparison()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\naddress():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\nvalue():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readInt16(this.bb_pos + offset) : 0;\n}\n\noperation():ComparisonOperation {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : ComparisonOperation.EQUAL;\n}\n\ninputSide():InputToBinarySide {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : InputToBinarySide.LEFT;\n}\n\nstatic startComparison(builder:flatbuffers.Builder) {\n builder.startObject(4);\n}\n\nstatic addAddress(builder:flatbuffers.Builder, address:number) {\n builder.addFieldInt16(0, address, 0);\n}\n\nstatic addValue(builder:flatbuffers.Builder, value:number) {\n builder.addFieldInt16(1, value, 0);\n}\n\nstatic addOperation(builder:flatbuffers.Builder, operation:ComparisonOperation) {\n builder.addFieldInt8(2, operation, ComparisonOperation.EQUAL);\n}\n\nstatic addInputSide(builder:flatbuffers.Builder, inputSide:InputToBinarySide) {\n builder.addFieldInt8(3, inputSide, InputToBinarySide.LEFT);\n}\n\nstatic endComparison(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createComparison(builder:flatbuffers.Builder, address:number, value:number, operation:ComparisonOperation, inputSide:InputToBinarySide):flatbuffers.Offset {\n Comparison.startComparison(builder);\n Comparison.addAddress(builder, address);\n Comparison.addValue(builder, value);\n Comparison.addOperation(builder, operation);\n Comparison.addInputSide(builder, inputSide);\n return Comparison.endComparison(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { AnyCondition, unionToAnyCondition, unionListToAnyCondition } from '../condition/any-condition';\n\n\nexport class Condition {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Condition {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsCondition(bb:flatbuffers.ByteBuffer, obj?:Condition):Condition {\n return (obj || new Condition()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsCondition(bb:flatbuffers.ByteBuffer, obj?:Condition):Condition {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Condition()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nconditionType():AnyCondition {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : AnyCondition.NONE;\n}\n\ncondition(obj:any):any|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__union(obj, this.bb_pos + offset) : null;\n}\n\ninverted():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nmovementLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nparametersLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startCondition(builder:flatbuffers.Builder) {\n builder.startObject(5);\n}\n\nstatic addConditionType(builder:flatbuffers.Builder, conditionType:AnyCondition) {\n builder.addFieldInt8(0, conditionType, AnyCondition.NONE);\n}\n\nstatic addCondition(builder:flatbuffers.Builder, conditionOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, conditionOffset, 0);\n}\n\nstatic addInverted(builder:flatbuffers.Builder, inverted:boolean) {\n builder.addFieldInt8(2, +inverted, +false);\n}\n\nstatic addMovementLocked(builder:flatbuffers.Builder, movementLocked:boolean) {\n builder.addFieldInt8(3, +movementLocked, +false);\n}\n\nstatic addParametersLocked(builder:flatbuffers.Builder, parametersLocked:boolean) {\n builder.addFieldInt8(4, +parametersLocked, +false);\n}\n\nstatic endCondition(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createCondition(builder:flatbuffers.Builder, conditionType:AnyCondition, conditionOffset:flatbuffers.Offset, inverted:boolean, movementLocked:boolean, parametersLocked:boolean):flatbuffers.Offset {\n Condition.startCondition(builder);\n Condition.addConditionType(builder, conditionType);\n Condition.addCondition(builder, conditionOffset);\n Condition.addInverted(builder, inverted);\n Condition.addMovementLocked(builder, movementLocked);\n Condition.addParametersLocked(builder, parametersLocked);\n return Condition.endCondition(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class ContactAngularInterval {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):ContactAngularInterval {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstart():number {\n return this.bb!.readUint16(this.bb_pos);\n}\n\nlength():number {\n return this.bb!.readUint16(this.bb_pos + 2);\n}\n\nstatic sizeOf():number {\n return 4;\n}\n\nstatic createContactAngularInterval(builder:flatbuffers.Builder, start: number, length: number):flatbuffers.Offset {\n builder.prep(2, 4);\n builder.writeInt16(length);\n builder.writeInt16(start);\n return builder.offset();\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { ContactAngularInterval } from '../condition/contact-angular-interval';\n\n\nexport class Contact {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Contact {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsContact(bb:flatbuffers.ByteBuffer, obj?:Contact):Contact {\n return (obj || new Contact()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsContact(bb:flatbuffers.ByteBuffer, obj?:Contact):Contact {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Contact()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\notherTypes(index: number):number|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint16(this.bb!.__vector(this.bb_pos + offset) + index * 2) : 0;\n}\n\notherTypesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\notherTypesArray():Uint16Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? new Uint16Array(this.bb!.bytes().buffer, this.bb!.bytes().byteOffset + this.bb!.__vector(this.bb_pos + offset), this.bb!.__vector_len(this.bb_pos + offset)) : null;\n}\n\narcs(index: number, obj?:ContactAngularInterval):ContactAngularInterval|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? (obj || new ContactAngularInterval()).__init(this.bb!.__vector(this.bb_pos + offset) + index * 4, this.bb!) : null;\n}\n\narcsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nanimation():string|null\nanimation(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nanimation(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nstatic startContact(builder:flatbuffers.Builder) {\n builder.startObject(3);\n}\n\nstatic addOtherTypes(builder:flatbuffers.Builder, otherTypesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, otherTypesOffset, 0);\n}\n\nstatic createOtherTypesVector(builder:flatbuffers.Builder, data:number[]|Uint16Array):flatbuffers.Offset;\n/**\n * @deprecated This Uint8Array overload will be removed in the future.\n */\nstatic createOtherTypesVector(builder:flatbuffers.Builder, data:number[]|Uint8Array):flatbuffers.Offset;\nstatic createOtherTypesVector(builder:flatbuffers.Builder, data:number[]|Uint16Array|Uint8Array):flatbuffers.Offset {\n builder.startVector(2, data.length, 2);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addInt16(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startOtherTypesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(2, numElems, 2);\n}\n\nstatic addArcs(builder:flatbuffers.Builder, arcsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, arcsOffset, 0);\n}\n\nstatic startArcsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 2);\n}\n\nstatic addAnimation(builder:flatbuffers.Builder, animationOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, animationOffset, 0);\n}\n\nstatic endContact(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createContact(builder:flatbuffers.Builder, otherTypesOffset:flatbuffers.Offset, arcsOffset:flatbuffers.Offset, animationOffset:flatbuffers.Offset):flatbuffers.Offset {\n Contact.startContact(builder);\n Contact.addOtherTypes(builder, otherTypesOffset);\n Contact.addArcs(builder, arcsOffset);\n Contact.addAnimation(builder, animationOffset);\n return Contact.endContact(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class InputButton {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):InputButton {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsInputButton(bb:flatbuffers.ByteBuffer, obj?:InputButton):InputButton {\n return (obj || new InputButton()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsInputButton(bb:flatbuffers.ByteBuffer, obj?:InputButton):InputButton {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new InputButton()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nnumber():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : 0;\n}\n\nplayer():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : 0;\n}\n\nstatic startInputButton(builder:flatbuffers.Builder) {\n builder.startObject(2);\n}\n\nstatic addNumber(builder:flatbuffers.Builder, number:number) {\n builder.addFieldInt8(0, number, 0);\n}\n\nstatic addPlayer(builder:flatbuffers.Builder, player:number) {\n builder.addFieldInt8(1, player, 0);\n}\n\nstatic endInputButton(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createInputButton(builder:flatbuffers.Builder, number:number, player:number):flatbuffers.Offset {\n InputButton.startInputButton(builder);\n InputButton.addNumber(builder, number);\n InputButton.addPlayer(builder, player);\n return InputButton.endInputButton(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class ScriptCondition {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):ScriptCondition {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsScriptCondition(bb:flatbuffers.ByteBuffer, obj?:ScriptCondition):ScriptCondition {\n return (obj || new ScriptCondition()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsScriptCondition(bb:flatbuffers.ByteBuffer, obj?:ScriptCondition):ScriptCondition {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new ScriptCondition()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\ncode():string|null\ncode(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\ncode(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nstatic startScriptCondition(builder:flatbuffers.Builder) {\n builder.startObject(1);\n}\n\nstatic addCode(builder:flatbuffers.Builder, codeOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, codeOffset, 0);\n}\n\nstatic endScriptCondition(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createScriptCondition(builder:flatbuffers.Builder, codeOffset:flatbuffers.Offset):flatbuffers.Offset {\n ScriptCondition.startScriptCondition(builder);\n ScriptCondition.addCode(builder, codeOffset);\n return ScriptCondition.endScriptCondition(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class Timer {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Timer {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsTimer(bb:flatbuffers.ByteBuffer, obj?:Timer):Timer {\n return (obj || new Timer()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsTimer(bb:flatbuffers.ByteBuffer, obj?:Timer):Timer {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Timer()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nperiod():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\nrepeat():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startTimer(builder:flatbuffers.Builder) {\n builder.startObject(2);\n}\n\nstatic addPeriod(builder:flatbuffers.Builder, period:number) {\n builder.addFieldInt16(0, period, 0);\n}\n\nstatic addRepeat(builder:flatbuffers.Builder, repeat:boolean) {\n builder.addFieldInt8(1, +repeat, +false);\n}\n\nstatic endTimer(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createTimer(builder:flatbuffers.Builder, period:number, repeat:boolean):flatbuffers.Offset {\n Timer.startTimer(builder);\n Timer.addPeriod(builder, period);\n Timer.addRepeat(builder, repeat);\n return Timer.endTimer(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { Vector2 } from '../math/vector2';\n\n\nexport class Polygon2 {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Polygon2 {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsPolygon2(bb:flatbuffers.ByteBuffer, obj?:Polygon2):Polygon2 {\n return (obj || new Polygon2()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsPolygon2(bb:flatbuffers.ByteBuffer, obj?:Polygon2):Polygon2 {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Polygon2()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\npoints(index: number, obj?:Vector2):Vector2|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? (obj || new Vector2()).__init(this.bb!.__vector(this.bb_pos + offset) + index * 8, this.bb!) : null;\n}\n\npointsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nstatic startPolygon2(builder:flatbuffers.Builder) {\n builder.startObject(1);\n}\n\nstatic addPoints(builder:flatbuffers.Builder, pointsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, pointsOffset, 0);\n}\n\nstatic startPointsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(8, numElems, 4);\n}\n\nstatic endPolygon2(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createPolygon2(builder:flatbuffers.Builder, pointsOffset:flatbuffers.Offset):flatbuffers.Offset {\n Polygon2.startPolygon2(builder);\n Polygon2.addPoints(builder, pointsOffset);\n return Polygon2.endPolygon2(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class CircularShape {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):CircularShape {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsCircularShape(bb:flatbuffers.ByteBuffer, obj?:CircularShape):CircularShape {\n return (obj || new CircularShape()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsCircularShape(bb:flatbuffers.ByteBuffer, obj?:CircularShape):CircularShape {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new CircularShape()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nradius():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 0.0;\n}\n\nstatic startCircularShape(builder:flatbuffers.Builder) {\n builder.startObject(1);\n}\n\nstatic addRadius(builder:flatbuffers.Builder, radius:number) {\n builder.addFieldFloat32(0, radius, 0.0);\n}\n\nstatic endCircularShape(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createCircularShape(builder:flatbuffers.Builder, radius:number):flatbuffers.Offset {\n CircularShape.startCircularShape(builder);\n CircularShape.addRadius(builder, radius);\n return CircularShape.endCircularShape(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { Vector2 } from '../math/vector2';\n\n\nexport class RectangularShape {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):RectangularShape {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsRectangularShape(bb:flatbuffers.ByteBuffer, obj?:RectangularShape):RectangularShape {\n return (obj || new RectangularShape()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsRectangularShape(bb:flatbuffers.ByteBuffer, obj?:RectangularShape):RectangularShape {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new RectangularShape()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nsize(obj?:Vector2):Vector2|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? (obj || new Vector2()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\nstatic startRectangularShape(builder:flatbuffers.Builder) {\n builder.startObject(1);\n}\n\nstatic addSize(builder:flatbuffers.Builder, sizeOffset:flatbuffers.Offset) {\n builder.addFieldStruct(0, sizeOffset, 0);\n}\n\nstatic endRectangularShape(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createRectangularShape(builder:flatbuffers.Builder, sizeOffset:flatbuffers.Offset):flatbuffers.Offset {\n RectangularShape.startRectangularShape(builder);\n RectangularShape.addSize(builder, sizeOffset);\n return RectangularShape.endRectangularShape(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { Polygon2 } from '../math/polygon2';\n\n\nexport class ConvexShape {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):ConvexShape {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsConvexShape(bb:flatbuffers.ByteBuffer, obj?:ConvexShape):ConvexShape {\n return (obj || new ConvexShape()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsConvexShape(bb:flatbuffers.ByteBuffer, obj?:ConvexShape):ConvexShape {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new ConvexShape()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\npolygon(obj?:Polygon2):Polygon2|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? (obj || new Polygon2()).__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) : null;\n}\n\nstatic startConvexShape(builder:flatbuffers.Builder) {\n builder.startObject(1);\n}\n\nstatic addPolygon(builder:flatbuffers.Builder, polygonOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, polygonOffset, 0);\n}\n\nstatic endConvexShape(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createConvexShape(builder:flatbuffers.Builder, polygonOffset:flatbuffers.Offset):flatbuffers.Offset {\n ConvexShape.startConvexShape(builder);\n ConvexShape.addPolygon(builder, polygonOffset);\n return ConvexShape.endConvexShape(builder);\n}\n}\n","/**\n * @module utils\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { Vector2, SimilarityTransform } from 'math/linalg';\nimport { nonnull, defined, definedOr } from 'utils/types';\nimport { Color } from 'color/color';\nimport { ObjectType } from 'game/game-core';\nimport { ObjectTypeIdMap } from 'game/game-block-definition';\nimport { assertFalse, assertNonNegativeInteger } from 'utils/assert';\nimport { forEachRight } from 'lodash-es';\n\n// Constants for numeric conversions\n\nexport const FixedAngle16ToTwoPI = Math.PI * 2 / 65536;\nexport const TwoPIToFixedAngle16 = 65536 / (2 * Math.PI);\nexport const FixedAngle15ToTwoPI = Math.PI * 2 / 32768;\nexport const TwoPIToFixedAngle15 = 32768 / (2 * Math.PI);\nexport const Fixed88ToFloat = 1 / 256;\nexport const FloatToFixed88 = 256;\n\n// Flatbuffers -> TS Types\n\n// support\n\nfunction numberOr(v: number, d = 0.0) {\n\tif (Number.isNaN(v)) {\n\t\treturn d;\n\t} else {\n\t\treturn v;\n\t}\n}\n\n// math\n\nexport function fromFbVector2(fbVector2: CandliFB.Vector2 | null) {\n\tif (fbVector2 === null) {\n\t\treturn new Vector2();\n\t}\n\treturn new Vector2(numberOr(fbVector2.x()), numberOr(fbVector2.y()));\n}\n\nexport function fromFbTranslation2(fbTranslation2: CandliFB.Translation2 | null) {\n\tif (fbTranslation2 === null) {\n\t\treturn new Vector2();\n\t}\n\treturn new Vector2(numberOr(fbTranslation2.x()), numberOr(fbTranslation2.y()));\n}\n\nexport function fromFbRotation2(fbRotation2: CandliFB.Rotation2 | null) {\n\tif (fbRotation2 === null) {\n\t\treturn 0;\n\t}\n\treturn numberOr(fbRotation2.angle());\n}\n\nexport function fromFbScale(fbScale: CandliFB.Scale | null) {\n\tif (fbScale === null) {\n\t\treturn 1;\n\t}\n\treturn numberOr(fbScale.factor(), 1.0);\n}\n\nexport function fromFbScalingTranslation2(fbTransform: CandliFB.ScalingTranslation2 | null): [number, Vector2] {\n\tif (fbTransform === null) {\n\t\treturn [1, new Vector2()];\n\t} else {\n\t\tconst translation = new Vector2(numberOr(fbTransform.translationX()), numberOr(fbTransform.translationY()));\n\t\treturn [numberOr(fbTransform.scaleFactor(), 1.0), translation];\n\t}\n}\n\nexport function fromFbScalingRotation2(fbTransform: CandliFB.ScalingRotation2 | null): [number, number] {\n\tif (fbTransform === null) {\n\t\treturn [1, 0];\n\t} else {\n\t\treturn [numberOr(fbTransform.scaleFactor(), 1.0), numberOr(fbTransform.rotationAngle())];\n\t}\n}\n\nexport function fromFbSE2(fbTransform: CandliFB.SE2 | null): [number, Vector2] {\n\tif (fbTransform === null) {\n\t\treturn [1, new Vector2()];\n\t} else {\n\t\tconst translation = new Vector2(numberOr(fbTransform.translationX()), numberOr(fbTransform.translationY()));\n\t\treturn [numberOr(fbTransform.rotationAngle()), translation];\n\t}\n}\n\nexport function fromFbSimilarityTransform2(fbTransform: CandliFB.SimilarityTransform2 | null) {\n\tif (fbTransform === null) {\n\t\treturn new SimilarityTransform();\n\t}\n\treturn new SimilarityTransform(\n\t\tnew Vector2(numberOr(fbTransform.translationX()), numberOr(fbTransform.translationY())),\n\t\tnumberOr(fbTransform.rotationAngle()),\n\t\tnumberOr(fbTransform.scaleFactor(), 1.0)\n\t);\n}\n\nexport function fromFbTwist2(fbTwist: CandliFB.Twist2 | null): [Vector2, number] {\n\tif (fbTwist === null) {\n\t\treturn [new Vector2(), 0];\n\t} else {\n\t\treturn [new Vector2(numberOr(fbTwist.linearX()), numberOr(fbTwist.linearY())), numberOr(fbTwist.angular())];\n\t}\n}\n\nexport function fromFbPolygon2(fbPolygon: CandliFB.Polygon2 | null) {\n\treturn fromFbArrayWithFactory(nonnull(fbPolygon), 'points', fromFbVector2);\n}\n\n// color\n\nexport function fromFbColorPacked32(fbPacked32: CandliFB.Packed32 | null) {\n\tif (fbPacked32 === null) {\n\t\treturn new Color([0, 0, 0]);\n\t} else {\n\t\treturn Color.fromArgbNumber(fbPacked32.bgra());\n\t}\n}\n\n// game_def\n\nexport function fromFbObjectTypeRefOptional(index: number, objectTypes: ObjectType[]) {\n\tif (index === 0xffff) {\n\t\treturn null;\n\t} else {\n\t\treturn defined(objectTypes[index]);\n\t}\n}\n\nexport function fromFbObjectTypeRef(index: number, objectTypes: ObjectType[]) {\n\tif (index === 0xffff) {\n\t\tassertFalse('Null object type reference encountered');\n\t}\n\treturn defined(objectTypes[index]);\n}\n\n// general\n\ntype FbArrayGetter = {\n\t[key in keyof T]: T[key] extends ((index: number) => S | null) ? key : never;\n}[keyof T];\n\nexport function fromFbArray, CA extends any[]>(\n\tsourceFbObject: SO,\n\tarrayFbName: SK,\n\tctor: new (source: S, ...args: CA) => T,\n\t...ctorArgs: CA\n): T[] {\n\tconst result: T[] = [];\n\tconst length = ((sourceFbObject as any)[`${String(arrayFbName)}Length`] as () => number)();\n\tassertNonNegativeInteger(length, 'length');\n\tconst getter = (sourceFbObject[arrayFbName] as any).bind(sourceFbObject);\n\tfor (let i = 0; i < length; ++i) {\n\t\tconst element = nonnull(getter(i)) as S;\n\t\tconst decoded = new ctor(element, ...ctorArgs);\n\t\tresult.push(decoded);\n\t}\n\treturn result;\n}\n\nexport function fromFbArrayWithFactory, CA extends any[]>(\n\tsourceFbObject: SO,\n\tarrayFbName: SK,\n\tfactory: (source: S, ...args: CA) => T,\n\t...factoryArgs: CA\n): T[] {\n\tconst result: T[] = [];\n\tconst length = ((sourceFbObject as any)[`${String(arrayFbName)}Length`] as () => number)();\n\tassertNonNegativeInteger(length, 'length');\n\tconst getter = (sourceFbObject[arrayFbName] as any).bind(sourceFbObject);\n\tfor (let i = 0; i < length; ++i) {\n\t\tconst element = nonnull(getter(i)) as S;\n\t\tconst decoded = factory(element, ...factoryArgs);\n\t\tresult.push(decoded);\n\t}\n\treturn result;\n}\n\nexport function fromFbArrayIdentity>(\n\tsourceFbObject: SO,\n\tarrayFbName: SK\n): S[] {\n\treturn fromFbArrayWithFactory(sourceFbObject, arrayFbName, (x: S) => x);\n}\n\n// TS Types -> Flatbuffers\n\n// math\n\nexport function toFbVector2(builder: flatbuffers.Builder, vector: Vector2) {\n\treturn CandliFB.Vector2.createVector2(builder, vector.x, vector.y);\n}\n\nexport function toFbTranslation2(builder: flatbuffers.Builder, vector: Vector2) {\n\treturn CandliFB.Translation2.createTranslation2(builder, vector.x, vector.y);\n}\n\nexport function toFbRotation2(builder: flatbuffers.Builder, angle: number) {\n\treturn CandliFB.Rotation2.createRotation2(builder, angle);\n}\n\nexport function toFbScale(builder: flatbuffers.Builder, angle: number) {\n\treturn CandliFB.Scale.createScale(builder, angle);\n}\n\nexport function toFbScalingTranslation2(builder: flatbuffers.Builder, scaleFactor: number, translation: Vector2) {\n\treturn CandliFB.ScalingTranslation2.createScalingTranslation2(builder, scaleFactor, translation.x, translation.y);\n}\n\nexport function toFbScalingRotation2(builder: flatbuffers.Builder, scaleFactor: number, rotationAngle: number) {\n\treturn CandliFB.ScalingRotation2.createScalingRotation2(builder, scaleFactor, rotationAngle);\n}\n\nexport function toFbSE2(builder: flatbuffers.Builder, rotationAngle: number, translation: Vector2) {\n\treturn CandliFB.SE2.createSE2(builder, rotationAngle, translation.x, translation.y);\n}\n\nexport function toFbSimilarityTransform2(builder: flatbuffers.Builder, transform: SimilarityTransform): number;\nexport function toFbSimilarityTransform2(builder: flatbuffers.Builder, scaleFactor: number, rotationAngle: number, translation: Vector2): number;\nexport function toFbSimilarityTransform2(builder: flatbuffers.Builder, transformOrScaleFactor: SimilarityTransform | number, rotationAngle?: number, translation?: Vector2): number {\n\tif (transformOrScaleFactor instanceof SimilarityTransform) {\n\t\tconst transform = transformOrScaleFactor;\n\t\treturn CandliFB.SimilarityTransform2.createSimilarityTransform2(builder,\n\t\t\ttransform.scaleFactor, transform.rotationAngle, transform.translation.x, transform.translation.y\n\t\t);\n\t} else {\n\t\tconst scaleFactor = transformOrScaleFactor;\n\t\treturn CandliFB.SimilarityTransform2.createSimilarityTransform2(builder,\n\t\t\tscaleFactor, rotationAngle!, translation!.x, translation!.y\n\t\t);\n\t}\n}\n\nexport function toFbTwist2(builder: flatbuffers.Builder, linear: Vector2, angular: number) {\n\treturn CandliFB.Twist2.createTwist2(builder, linear.x, linear.y, angular);\n}\n\nexport function toFbPolygon2(builder: flatbuffers.Builder, polygon: Vector2[]) {\n\tCandliFB.Polygon2.startPointsVector(builder, polygon.length);\n\t// we create structs in reverse because Flatbuffers builds vectors back to front\n\tforEachRight(polygon, (point) => {\n\t\ttoFbVector2(builder, point);\n\t});\n\tconst pointsOffset = builder.endVector();\n\treturn CandliFB.Polygon2.createPolygon2(builder, pointsOffset);\n}\n\n// color\n\nexport function toFbColorPacked32(builder: flatbuffers.Builder, color: Color) {\n\treturn CandliFB.Packed32.createPacked32(builder, color.argbNumber);\n}\n\n// game_def\n\nexport function toFbObjectTypeRef(objectType: ObjectType | null, objectTypes: ObjectTypeIdMap) {\n\tif (objectType !== null) {\n\t\treturn definedOr(objectTypes.get(objectType), () => `Object type \"${objectType.name ?? 'anomymous'}\" not found in object types`);\n\t} else {\n\t\treturn 0xffff;\n\t}\n}\n\n// game\n\nexport function toFbCircularShape(builder: flatbuffers.Builder, radius: number) {\n\treturn CandliFB.CircularShape.createCircularShape(\n\t\tbuilder,\n\t\tradius\n\t);\n}\n\nexport function toFbRectangularShape(builder: flatbuffers.Builder, size: Vector2) {\n\treturn CandliFB.RectangularShape.createRectangularShape(\n\t\tbuilder,\n\t\ttoFbVector2(builder,size)\n\t);\n}\n\nexport function toFbConvexShape(builder: flatbuffers.Builder, polygon: Vector2[]) {\n\treturn CandliFB.ConvexShape.createConvexShape(\n\t\tbuilder,\n\t\ttoFbPolygon2(builder, polygon)\n\t);\n}\n\nexport function toFbAnyShape(builder: flatbuffers.Builder, shape: number | Vector2 | Vector2[]): [CandliFB.AnyShape, number] {\n\tconst shapeType = !(shape instanceof Vector2) ?\n\t\t(shape instanceof Array ?\n\t\t\tCandliFB.AnyShape.ConvexShape :\n\t\t\tCandliFB.AnyShape.CircularShape\n\t\t) :\n\t\tCandliFB.AnyShape.RectangularShape\n\t;\n\tconst shapeOffset = !(shape instanceof Vector2) ?\n\t\t(shape instanceof Array ?\n\t\t\ttoFbConvexShape(builder, shape) :\n\t\t\ttoFbCircularShape(builder, shape)\n\t\t) :\n\t\ttoFbRectangularShape(builder, shape)\n\t;\n\treturn [shapeType, shapeOffset];\n}\n\nexport interface FbAnyShape {\n\tshapeType(): CandliFB.AnyShape;\n\t// We keep the useless generic parameter T here to match the Flatbuffers API,\n\t// hopefully it gets used again in the future. See:\n\t// https://github.com/google/flatbuffers/issues/6740\n\tshape(obj: any): any;\n};\n\nexport function fromFbAnyShape(fbAnyShape: FbAnyShape) {\n\tconst shapeType = fbAnyShape.shapeType();\n\tlet shape;\n\tif (shapeType === CandliFB.AnyShape.ConvexShape) {\n\t\tconst convexShape = nonnull(fbAnyShape.shape(new CandliFB.ConvexShape())) as CandliFB.ConvexShape;\n\t\tshape = fromFbPolygon2(convexShape.polygon());\n\t} else if (shapeType === CandliFB.AnyShape.CircularShape) {\n\t\tconst circularShape = nonnull(fbAnyShape.shape(new CandliFB.CircularShape())) as CandliFB.CircularShape;\n\t\tshape = circularShape.radius();\n\t} else if (shapeType === CandliFB.AnyShape.RectangularShape) {\n\t\tconst rectangularShape = nonnull(fbAnyShape.shape(new CandliFB.RectangularShape())) as CandliFB.RectangularShape;\n\t\tshape = fromFbVector2(rectangularShape.size());\n\t} else {\n\t\tassertFalse(`Invalid shape: ${shapeType}`);\n\t}\n\treturn shape;\n}","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { SimilarityTransform2 } from '../math/similarity-transform2';\n\n\nexport class AnimationFrame {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):AnimationFrame {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsAnimationFrame(bb:flatbuffers.ByteBuffer, obj?:AnimationFrame):AnimationFrame {\n return (obj || new AnimationFrame()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsAnimationFrame(bb:flatbuffers.ByteBuffer, obj?:AnimationFrame):AnimationFrame {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new AnimationFrame()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\ntextureImageIndex():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\npartFromPixelTransform(obj?:SimilarityTransform2):SimilarityTransform2|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? (obj || new SimilarityTransform2()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\nstatic startAnimationFrame(builder:flatbuffers.Builder) {\n builder.startObject(2);\n}\n\nstatic addTextureImageIndex(builder:flatbuffers.Builder, textureImageIndex:number) {\n builder.addFieldInt16(0, textureImageIndex, 0);\n}\n\nstatic addPartFromPixelTransform(builder:flatbuffers.Builder, partFromPixelTransformOffset:flatbuffers.Offset) {\n builder.addFieldStruct(1, partFromPixelTransformOffset, 0);\n}\n\nstatic endAnimationFrame(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { AnimationFrame } from '../game/animation-frame';\n\n\nexport class Animation {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Animation {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsAnimation(bb:flatbuffers.ByteBuffer, obj?:Animation):Animation {\n return (obj || new Animation()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsAnimation(bb:flatbuffers.ByteBuffer, obj?:Animation):Animation {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Animation()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nframes(index: number, obj?:AnimationFrame):AnimationFrame|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? (obj || new AnimationFrame()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\nframesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nname():string|null\nname(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nname(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nfps():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 12.0;\n}\n\nstatic startAnimation(builder:flatbuffers.Builder) {\n builder.startObject(3);\n}\n\nstatic addFrames(builder:flatbuffers.Builder, framesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, framesOffset, 0);\n}\n\nstatic createFramesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startFramesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addName(builder:flatbuffers.Builder, nameOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, nameOffset, 0);\n}\n\nstatic addFps(builder:flatbuffers.Builder, fps:number) {\n builder.addFieldFloat32(2, fps, 12.0);\n}\n\nstatic endAnimation(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createAnimation(builder:flatbuffers.Builder, framesOffset:flatbuffers.Offset, nameOffset:flatbuffers.Offset, fps:number):flatbuffers.Offset {\n Animation.startAnimation(builder);\n Animation.addFrames(builder, framesOffset);\n Animation.addName(builder, nameOffset);\n Animation.addFps(builder, fps);\n return Animation.endAnimation(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport { SinglePartBody } from '../game/single-part-body';\n\n\nexport enum AnyBody{\n NONE = 0,\n SinglePartBody = 1\n}\n\nexport function unionToAnyBody(\n type: AnyBody,\n accessor: (obj:SinglePartBody) => SinglePartBody|null\n): SinglePartBody|null {\n switch(AnyBody[type]) {\n case 'NONE': return null; \n case 'SinglePartBody': return accessor(new SinglePartBody())! as SinglePartBody;\n default: return null;\n }\n}\n\nexport function unionListToAnyBody(\n type: AnyBody, \n accessor: (index: number, obj:SinglePartBody) => SinglePartBody|null, \n index: number\n): SinglePartBody|null {\n switch(AnyBody[type]) {\n case 'NONE': return null; \n case 'SinglePartBody': return accessor(index, new SinglePartBody())! as SinglePartBody;\n default: return null;\n }\n}\n\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { Vector2 } from '../math/vector2';\n\n\nexport class CameraPosition {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):CameraPosition {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsCameraPosition(bb:flatbuffers.ByteBuffer, obj?:CameraPosition):CameraPosition {\n return (obj || new CameraPosition()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsCameraPosition(bb:flatbuffers.ByteBuffer, obj?:CameraPosition):CameraPosition {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new CameraPosition()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nposition(obj?:Vector2):Vector2|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? (obj || new Vector2()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\nstatic startCameraPosition(builder:flatbuffers.Builder) {\n builder.startObject(1);\n}\n\nstatic addPosition(builder:flatbuffers.Builder, positionOffset:flatbuffers.Offset) {\n builder.addFieldStruct(0, positionOffset, 0);\n}\n\nstatic endCameraPosition(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createCameraPosition(builder:flatbuffers.Builder, positionOffset:flatbuffers.Offset):flatbuffers.Offset {\n CameraPosition.startCameraPosition(builder);\n CameraPosition.addPosition(builder, positionOffset);\n return CameraPosition.endCameraPosition(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport { CameraPosition } from '../game/camera-position';\nimport { CameraTrackedObject } from '../game/camera-tracked-object';\n\n\nexport enum CameraTrackedObjectOrPosition{\n NONE = 0,\n CameraTrackedObject = 1,\n CameraPosition = 2\n}\n\nexport function unionToCameraTrackedObjectOrPosition(\n type: CameraTrackedObjectOrPosition,\n accessor: (obj:CameraPosition|CameraTrackedObject) => CameraPosition|CameraTrackedObject|null\n): CameraPosition|CameraTrackedObject|null {\n switch(CameraTrackedObjectOrPosition[type]) {\n case 'NONE': return null; \n case 'CameraTrackedObject': return accessor(new CameraTrackedObject())! as CameraTrackedObject;\n case 'CameraPosition': return accessor(new CameraPosition())! as CameraPosition;\n default: return null;\n }\n}\n\nexport function unionListToCameraTrackedObjectOrPosition(\n type: CameraTrackedObjectOrPosition, \n accessor: (index: number, obj:CameraPosition|CameraTrackedObject) => CameraPosition|CameraTrackedObject|null, \n index: number\n): CameraPosition|CameraTrackedObject|null {\n switch(CameraTrackedObjectOrPosition[type]) {\n case 'NONE': return null; \n case 'CameraTrackedObject': return accessor(index, new CameraTrackedObject())! as CameraTrackedObject;\n case 'CameraPosition': return accessor(index, new CameraPosition())! as CameraPosition;\n default: return null;\n }\n}\n\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class CameraTrackedObject {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):CameraTrackedObject {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsCameraTrackedObject(bb:flatbuffers.ByteBuffer, obj?:CameraTrackedObject):CameraTrackedObject {\n return (obj || new CameraTrackedObject()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsCameraTrackedObject(bb:flatbuffers.ByteBuffer, obj?:CameraTrackedObject):CameraTrackedObject {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new CameraTrackedObject()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\ninstance():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint32(this.bb_pos + offset) : 0;\n}\n\nstatic startCameraTrackedObject(builder:flatbuffers.Builder) {\n builder.startObject(1);\n}\n\nstatic addInstance(builder:flatbuffers.Builder, instance:number) {\n builder.addFieldInt32(0, instance, 0);\n}\n\nstatic endCameraTrackedObject(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createCameraTrackedObject(builder:flatbuffers.Builder, instance:number):flatbuffers.Offset {\n CameraTrackedObject.startCameraTrackedObject(builder);\n CameraTrackedObject.addInstance(builder, instance);\n return CameraTrackedObject.endCameraTrackedObject(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { Packed32 } from '../color/packed32';\nimport { CameraTrackedObjectOrPosition, unionToCameraTrackedObjectOrPosition, unionListToCameraTrackedObjectOrPosition } from '../game/camera-tracked-object-or-position';\nimport { Vector2 } from '../math/vector2';\n\n\nexport class Camera {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Camera {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsCamera(bb:flatbuffers.ByteBuffer, obj?:Camera):Camera {\n return (obj || new Camera()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsCamera(bb:flatbuffers.ByteBuffer, obj?:Camera):Camera {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Camera()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nextentX():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 4.0;\n}\n\ntrackedObjectOrPositionType():CameraTrackedObjectOrPosition {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : CameraTrackedObjectOrPosition.NONE;\n}\n\ntrackedObjectOrPosition(obj:any):any|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__union(obj, this.bb_pos + offset) : null;\n}\n\nbackgroundColor(obj?:Packed32):Packed32|null {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? (obj || new Packed32()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\nfreeMotionBoxFractions(obj?:Vector2):Vector2|null {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? (obj || new Vector2()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\ncenterDisplacement(obj?:Vector2):Vector2|null {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? (obj || new Vector2()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\nextentY():number {\n const offset = this.bb!.__offset(this.bb_pos, 16);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 0.0;\n}\n\nstatic startCamera(builder:flatbuffers.Builder) {\n builder.startObject(7);\n}\n\nstatic addExtentX(builder:flatbuffers.Builder, extentX:number) {\n builder.addFieldFloat32(0, extentX, 4.0);\n}\n\nstatic addTrackedObjectOrPositionType(builder:flatbuffers.Builder, trackedObjectOrPositionType:CameraTrackedObjectOrPosition) {\n builder.addFieldInt8(1, trackedObjectOrPositionType, CameraTrackedObjectOrPosition.NONE);\n}\n\nstatic addTrackedObjectOrPosition(builder:flatbuffers.Builder, trackedObjectOrPositionOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, trackedObjectOrPositionOffset, 0);\n}\n\nstatic addBackgroundColor(builder:flatbuffers.Builder, backgroundColorOffset:flatbuffers.Offset) {\n builder.addFieldStruct(3, backgroundColorOffset, 0);\n}\n\nstatic addFreeMotionBoxFractions(builder:flatbuffers.Builder, freeMotionBoxFractionsOffset:flatbuffers.Offset) {\n builder.addFieldStruct(4, freeMotionBoxFractionsOffset, 0);\n}\n\nstatic addCenterDisplacement(builder:flatbuffers.Builder, centerDisplacementOffset:flatbuffers.Offset) {\n builder.addFieldStruct(5, centerDisplacementOffset, 0);\n}\n\nstatic addExtentY(builder:flatbuffers.Builder, extentY:number) {\n builder.addFieldFloat32(6, extentY, 0.0);\n}\n\nstatic endCamera(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { Packed32 } from '../color/packed32';\n\n\nexport class Dialog {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Dialog {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsDialog(bb:flatbuffers.ByteBuffer, obj?:Dialog):Dialog {\n return (obj || new Dialog()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsDialog(bb:flatbuffers.ByteBuffer, obj?:Dialog):Dialog {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Dialog()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nbackgroundColor(obj?:Packed32):Packed32|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? (obj || new Packed32()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\nimageIndex():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\nscaleFactor():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 1.0;\n}\n\nstatic startDialog(builder:flatbuffers.Builder) {\n builder.startObject(3);\n}\n\nstatic addBackgroundColor(builder:flatbuffers.Builder, backgroundColorOffset:flatbuffers.Offset) {\n builder.addFieldStruct(0, backgroundColorOffset, 0);\n}\n\nstatic addImageIndex(builder:flatbuffers.Builder, imageIndex:number) {\n builder.addFieldInt16(1, imageIndex, 0);\n}\n\nstatic addScaleFactor(builder:flatbuffers.Builder, scaleFactor:number) {\n builder.addFieldFloat32(2, scaleFactor, 1.0);\n}\n\nstatic endDialog(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createDialog(builder:flatbuffers.Builder, backgroundColorOffset:flatbuffers.Offset, imageIndex:number, scaleFactor:number):flatbuffers.Offset {\n Dialog.startDialog(builder);\n Dialog.addBackgroundColor(builder, backgroundColorOffset);\n Dialog.addImageIndex(builder, imageIndex);\n Dialog.addScaleFactor(builder, scaleFactor);\n return Dialog.endDialog(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { Dialog } from '../game/dialog';\nimport { Level } from '../game/level';\nimport { LimitOverride } from '../game/limit-override';\nimport { ObjectType } from '../game/object-type';\nimport { ScriptModule } from '../game/script-module';\nimport { UUID } from '../game/u-u-i-d';\nimport { VariableName } from '../game/variable-name';\n\n\nexport class Game {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Game {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsGame(bb:flatbuffers.ByteBuffer, obj?:Game):Game {\n return (obj || new Game()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsGame(bb:flatbuffers.ByteBuffer, obj?:Game):Game {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Game()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\ndataVersion():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint32(this.bb_pos + offset) : 0;\n}\n\nobjectTypes(index: number, obj?:ObjectType):ObjectType|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? (obj || new ObjectType()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\nobjectTypesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\ndialogs(index: number, obj?:Dialog):Dialog|null {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? (obj || new Dialog()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\ndialogsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nlevels(index: number, obj?:Level):Level|null {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? (obj || new Level()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\nlevelsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nimageKeys(index: number, obj?:UUID):UUID|null {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? (obj || new UUID()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\nimageKeysLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\ntwoPlayers():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 16);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\noldVariableNames(index: number):number|null {\n const offset = this.bb!.__offset(this.bb_pos, 18);\n return offset ? this.bb!.readUint16(this.bb!.__vector(this.bb_pos + offset) + index * 2) : 0;\n}\n\noldVariableNamesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 18);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\noldVariableNamesArray():Uint16Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 18);\n return offset ? new Uint16Array(this.bb!.bytes().buffer, this.bb!.bytes().byteOffset + this.bb!.__vector(this.bb_pos + offset), this.bb!.__vector_len(this.bb_pos + offset)) : null;\n}\n\nroleNames(index: number):string\nroleNames(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array\nroleNames(index: number,optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 20);\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\n}\n\nroleNamesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 20);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nsoundKeys(index: number, obj?:UUID):UUID|null {\n const offset = this.bb!.__offset(this.bb_pos, 22);\n return offset ? (obj || new UUID()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\nsoundKeysLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 22);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nvariableVisibility(index: number):boolean|null {\n const offset = this.bb!.__offset(this.bb_pos, 24);\n return offset ? !!this.bb!.readInt8(this.bb!.__vector(this.bb_pos + offset) + index) : false;\n}\n\nvariableVisibilityLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 24);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nvariableVisibilityArray():Int8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 24);\n return offset ? new Int8Array(this.bb!.bytes().buffer, this.bb!.bytes().byteOffset + this.bb!.__vector(this.bb_pos + offset), this.bb!.__vector_len(this.bb_pos + offset)) : null;\n}\n\nvariableNames(index: number, obj?:VariableName):VariableName|null {\n const offset = this.bb!.__offset(this.bb_pos, 26);\n return offset ? (obj || new VariableName()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\nvariableNamesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 26);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nscriptDependencies(index: number):string\nscriptDependencies(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array\nscriptDependencies(index: number,optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 28);\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\n}\n\nscriptDependenciesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 28);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nscriptModules(index: number, obj?:ScriptModule):ScriptModule|null {\n const offset = this.bb!.__offset(this.bb_pos, 30);\n return offset ? (obj || new ScriptModule()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\nscriptModulesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 30);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nlimitOverrides(index: number, obj?:LimitOverride):LimitOverride|null {\n const offset = this.bb!.__offset(this.bb_pos, 32);\n return offset ? (obj || new LimitOverride()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\nlimitOverridesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 32);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nlimitOverrideDuplicationCounter():number {\n const offset = this.bb!.__offset(this.bb_pos, 34);\n return offset ? this.bb!.readUint32(this.bb_pos + offset) : 0;\n}\n\nstatic startGame(builder:flatbuffers.Builder) {\n builder.startObject(16);\n}\n\nstatic addDataVersion(builder:flatbuffers.Builder, dataVersion:number) {\n builder.addFieldInt32(0, dataVersion, 0);\n}\n\nstatic addObjectTypes(builder:flatbuffers.Builder, objectTypesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, objectTypesOffset, 0);\n}\n\nstatic createObjectTypesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startObjectTypesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addDialogs(builder:flatbuffers.Builder, dialogsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(3, dialogsOffset, 0);\n}\n\nstatic createDialogsVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startDialogsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addLevels(builder:flatbuffers.Builder, levelsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(4, levelsOffset, 0);\n}\n\nstatic createLevelsVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startLevelsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addImageKeys(builder:flatbuffers.Builder, imageKeysOffset:flatbuffers.Offset) {\n builder.addFieldOffset(5, imageKeysOffset, 0);\n}\n\nstatic createImageKeysVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startImageKeysVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addTwoPlayers(builder:flatbuffers.Builder, twoPlayers:boolean) {\n builder.addFieldInt8(6, +twoPlayers, +false);\n}\n\nstatic addOldVariableNames(builder:flatbuffers.Builder, oldVariableNamesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(7, oldVariableNamesOffset, 0);\n}\n\nstatic createOldVariableNamesVector(builder:flatbuffers.Builder, data:number[]|Uint16Array):flatbuffers.Offset;\n/**\n * @deprecated This Uint8Array overload will be removed in the future.\n */\nstatic createOldVariableNamesVector(builder:flatbuffers.Builder, data:number[]|Uint8Array):flatbuffers.Offset;\nstatic createOldVariableNamesVector(builder:flatbuffers.Builder, data:number[]|Uint16Array|Uint8Array):flatbuffers.Offset {\n builder.startVector(2, data.length, 2);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addInt16(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startOldVariableNamesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(2, numElems, 2);\n}\n\nstatic addRoleNames(builder:flatbuffers.Builder, roleNamesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(8, roleNamesOffset, 0);\n}\n\nstatic createRoleNamesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startRoleNamesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addSoundKeys(builder:flatbuffers.Builder, soundKeysOffset:flatbuffers.Offset) {\n builder.addFieldOffset(9, soundKeysOffset, 0);\n}\n\nstatic createSoundKeysVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startSoundKeysVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addVariableVisibility(builder:flatbuffers.Builder, variableVisibilityOffset:flatbuffers.Offset) {\n builder.addFieldOffset(10, variableVisibilityOffset, 0);\n}\n\nstatic createVariableVisibilityVector(builder:flatbuffers.Builder, data:boolean[]):flatbuffers.Offset {\n builder.startVector(1, data.length, 1);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addInt8(+data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startVariableVisibilityVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(1, numElems, 1);\n}\n\nstatic addVariableNames(builder:flatbuffers.Builder, variableNamesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(11, variableNamesOffset, 0);\n}\n\nstatic createVariableNamesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startVariableNamesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addScriptDependencies(builder:flatbuffers.Builder, scriptDependenciesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(12, scriptDependenciesOffset, 0);\n}\n\nstatic createScriptDependenciesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startScriptDependenciesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addScriptModules(builder:flatbuffers.Builder, scriptModulesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(13, scriptModulesOffset, 0);\n}\n\nstatic createScriptModulesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startScriptModulesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addLimitOverrides(builder:flatbuffers.Builder, limitOverridesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(14, limitOverridesOffset, 0);\n}\n\nstatic createLimitOverridesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startLimitOverridesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addLimitOverrideDuplicationCounter(builder:flatbuffers.Builder, limitOverrideDuplicationCounter:number) {\n builder.addFieldInt32(15, limitOverrideDuplicationCounter, 0);\n}\n\nstatic endGame(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createGame(builder:flatbuffers.Builder, dataVersion:number, objectTypesOffset:flatbuffers.Offset, dialogsOffset:flatbuffers.Offset, levelsOffset:flatbuffers.Offset, imageKeysOffset:flatbuffers.Offset, twoPlayers:boolean, oldVariableNamesOffset:flatbuffers.Offset, roleNamesOffset:flatbuffers.Offset, soundKeysOffset:flatbuffers.Offset, variableVisibilityOffset:flatbuffers.Offset, variableNamesOffset:flatbuffers.Offset, scriptDependenciesOffset:flatbuffers.Offset, scriptModulesOffset:flatbuffers.Offset, limitOverridesOffset:flatbuffers.Offset, limitOverrideDuplicationCounter:number):flatbuffers.Offset {\n Game.startGame(builder);\n Game.addDataVersion(builder, dataVersion);\n Game.addObjectTypes(builder, objectTypesOffset);\n Game.addDialogs(builder, dialogsOffset);\n Game.addLevels(builder, levelsOffset);\n Game.addImageKeys(builder, imageKeysOffset);\n Game.addTwoPlayers(builder, twoPlayers);\n Game.addOldVariableNames(builder, oldVariableNamesOffset);\n Game.addRoleNames(builder, roleNamesOffset);\n Game.addSoundKeys(builder, soundKeysOffset);\n Game.addVariableVisibility(builder, variableVisibilityOffset);\n Game.addVariableNames(builder, variableNamesOffset);\n Game.addScriptDependencies(builder, scriptDependenciesOffset);\n Game.addScriptModules(builder, scriptModulesOffset);\n Game.addLimitOverrides(builder, limitOverridesOffset);\n Game.addLimitOverrideDuplicationCounter(builder, limitOverrideDuplicationCounter);\n return Game.endGame(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { Camera } from '../game/camera';\nimport { ObjectInstance } from '../game/object-instance';\nimport { ScalingTranslation2 } from '../math/scaling-translation2';\n\n\nexport class Level {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Level {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsLevel(bb:flatbuffers.ByteBuffer, obj?:Level):Level {\n return (obj || new Level()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsLevel(bb:flatbuffers.ByteBuffer, obj?:Level):Level {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Level()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nobjectInstances(index: number, obj?:ObjectInstance):ObjectInstance|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? (obj || new ObjectInstance()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\nobjectInstancesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\ncamera(obj?:Camera):Camera|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? (obj || new Camera()).__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) : null;\n}\n\ngravity():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 10.0;\n}\n\nairFriction():number {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 0.02;\n}\n\neditorToWorld(obj?:ScalingTranslation2):ScalingTranslation2|null {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? (obj || new ScalingTranslation2()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\nstatic startLevel(builder:flatbuffers.Builder) {\n builder.startObject(5);\n}\n\nstatic addObjectInstances(builder:flatbuffers.Builder, objectInstancesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, objectInstancesOffset, 0);\n}\n\nstatic createObjectInstancesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startObjectInstancesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addCamera(builder:flatbuffers.Builder, cameraOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, cameraOffset, 0);\n}\n\nstatic addGravity(builder:flatbuffers.Builder, gravity:number) {\n builder.addFieldFloat32(2, gravity, 10.0);\n}\n\nstatic addAirFriction(builder:flatbuffers.Builder, airFriction:number) {\n builder.addFieldFloat32(3, airFriction, 0.02);\n}\n\nstatic addEditorToWorld(builder:flatbuffers.Builder, editorToWorldOffset:flatbuffers.Offset) {\n builder.addFieldStruct(4, editorToWorldOffset, 0);\n}\n\nstatic endLevel(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class LimitOverride {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):LimitOverride {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsLimitOverride(bb:flatbuffers.ByteBuffer, obj?:LimitOverride):LimitOverride {\n return (obj || new LimitOverride()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsLimitOverride(bb:flatbuffers.ByteBuffer, obj?:LimitOverride):LimitOverride {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new LimitOverride()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nname():string|null\nname(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nname(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nvalue():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readUint32(this.bb_pos + offset) : 0;\n}\n\nstatic startLimitOverride(builder:flatbuffers.Builder) {\n builder.startObject(2);\n}\n\nstatic addName(builder:flatbuffers.Builder, nameOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, nameOffset, 0);\n}\n\nstatic addValue(builder:flatbuffers.Builder, value:number) {\n builder.addFieldInt32(1, value, 0);\n}\n\nstatic endLimitOverride(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createLimitOverride(builder:flatbuffers.Builder, nameOffset:flatbuffers.Offset, value:number):flatbuffers.Offset {\n LimitOverride.startLimitOverride(builder);\n LimitOverride.addName(builder, nameOffset);\n LimitOverride.addValue(builder, value);\n return LimitOverride.endLimitOverride(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { VariableIndexAndValue } from '../game/variable-index-and-value';\nimport { SimilarityTransform2 } from '../math/similarity-transform2';\n\n\nexport class ObjectInstance {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):ObjectInstance {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsObjectInstance(bb:flatbuffers.ByteBuffer, obj?:ObjectInstance):ObjectInstance {\n return (obj || new ObjectInstance()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsObjectInstance(bb:flatbuffers.ByteBuffer, obj?:ObjectInstance):ObjectInstance {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new ObjectInstance()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\ntype():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\nposeAndScale(obj?:SimilarityTransform2):SimilarityTransform2|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? (obj || new SimilarityTransform2()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\neditionLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nmovementLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\ndeletionLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\ncopyLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nselectionLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 16);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nvariables(index: number, obj?:VariableIndexAndValue):VariableIndexAndValue|null {\n const offset = this.bb!.__offset(this.bb_pos, 18);\n return offset ? (obj || new VariableIndexAndValue()).__init(this.bb!.__vector(this.bb_pos + offset) + index * 8, this.bb!) : null;\n}\n\nvariablesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 18);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nstatic startObjectInstance(builder:flatbuffers.Builder) {\n builder.startObject(8);\n}\n\nstatic addType(builder:flatbuffers.Builder, type:number) {\n builder.addFieldInt16(0, type, 0);\n}\n\nstatic addPoseAndScale(builder:flatbuffers.Builder, poseAndScaleOffset:flatbuffers.Offset) {\n builder.addFieldStruct(1, poseAndScaleOffset, 0);\n}\n\nstatic addEditionLocked(builder:flatbuffers.Builder, editionLocked:boolean) {\n builder.addFieldInt8(2, +editionLocked, +false);\n}\n\nstatic addMovementLocked(builder:flatbuffers.Builder, movementLocked:boolean) {\n builder.addFieldInt8(3, +movementLocked, +false);\n}\n\nstatic addDeletionLocked(builder:flatbuffers.Builder, deletionLocked:boolean) {\n builder.addFieldInt8(4, +deletionLocked, +false);\n}\n\nstatic addCopyLocked(builder:flatbuffers.Builder, copyLocked:boolean) {\n builder.addFieldInt8(5, +copyLocked, +false);\n}\n\nstatic addSelectionLocked(builder:flatbuffers.Builder, selectionLocked:boolean) {\n builder.addFieldInt8(6, +selectionLocked, +false);\n}\n\nstatic addVariables(builder:flatbuffers.Builder, variablesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(7, variablesOffset, 0);\n}\n\nstatic startVariablesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(8, numElems, 4);\n}\n\nstatic endObjectInstance(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nexport enum ObjectKind{\n Background = 0,\n Kinematic = 1,\n Dynamic = 2,\n Foreground = 3\n}\n\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { AnyBody, unionToAnyBody, unionListToAnyBody } from '../game/any-body';\nimport { ObjectKind } from '../game/object-kind';\nimport { Rule } from '../game/rule';\nimport { ScalingRotation2 } from '../math/scaling-rotation2';\n\n\nexport class ObjectType {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):ObjectType {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsObjectType(bb:flatbuffers.ByteBuffer, obj?:ObjectType):ObjectType {\n return (obj || new ObjectType()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsObjectType(bb:flatbuffers.ByteBuffer, obj?:ObjectType):ObjectType {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new ObjectType()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nkind():ObjectKind {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : ObjectKind.Kinematic;\n}\n\nstickiness():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 0.2;\n}\n\nbounciness():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 0.0;\n}\n\ncanRotate():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\npartsType():AnyBody {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : AnyBody.NONE;\n}\n\nparts(obj:any):any|null {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? this.bb!.__union(obj, this.bb_pos + offset) : null;\n}\n\nbehaviour(index: number, obj?:Rule):Rule|null {\n const offset = this.bb!.__offset(this.bb_pos, 16);\n return offset ? (obj || new Rule()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\nbehaviourLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 16);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\neditorLastTransform(obj?:ScalingRotation2):ScalingRotation2|null {\n const offset = this.bb!.__offset(this.bb_pos, 18);\n return offset ? (obj || new ScalingRotation2()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\neditionLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 20);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\ninstantiationLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 22);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\ndensity():number {\n const offset = this.bb!.__offset(this.bb_pos, 24);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 1.0;\n}\n\nname():string|null\nname(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nname(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 26);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nroles(index: number):number|null {\n const offset = this.bb!.__offset(this.bb_pos, 28);\n return offset ? this.bb!.readUint16(this.bb!.__vector(this.bb_pos + offset) + index * 2) : 0;\n}\n\nrolesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 28);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nrolesArray():Uint16Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 28);\n return offset ? new Uint16Array(this.bb!.bytes().buffer, this.bb!.bytes().byteOffset + this.bb!.__vector(this.bb_pos + offset), this.bb!.__vector_len(this.bb_pos + offset)) : null;\n}\n\ndeletionLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 30);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startObjectType(builder:flatbuffers.Builder) {\n builder.startObject(14);\n}\n\nstatic addKind(builder:flatbuffers.Builder, kind:ObjectKind) {\n builder.addFieldInt8(0, kind, ObjectKind.Kinematic);\n}\n\nstatic addStickiness(builder:flatbuffers.Builder, stickiness:number) {\n builder.addFieldFloat32(1, stickiness, 0.2);\n}\n\nstatic addBounciness(builder:flatbuffers.Builder, bounciness:number) {\n builder.addFieldFloat32(2, bounciness, 0.0);\n}\n\nstatic addCanRotate(builder:flatbuffers.Builder, canRotate:boolean) {\n builder.addFieldInt8(3, +canRotate, +false);\n}\n\nstatic addPartsType(builder:flatbuffers.Builder, partsType:AnyBody) {\n builder.addFieldInt8(4, partsType, AnyBody.NONE);\n}\n\nstatic addParts(builder:flatbuffers.Builder, partsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(5, partsOffset, 0);\n}\n\nstatic addBehaviour(builder:flatbuffers.Builder, behaviourOffset:flatbuffers.Offset) {\n builder.addFieldOffset(6, behaviourOffset, 0);\n}\n\nstatic createBehaviourVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startBehaviourVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addEditorLastTransform(builder:flatbuffers.Builder, editorLastTransformOffset:flatbuffers.Offset) {\n builder.addFieldStruct(7, editorLastTransformOffset, 0);\n}\n\nstatic addEditionLocked(builder:flatbuffers.Builder, editionLocked:boolean) {\n builder.addFieldInt8(8, +editionLocked, +false);\n}\n\nstatic addInstantiationLocked(builder:flatbuffers.Builder, instantiationLocked:boolean) {\n builder.addFieldInt8(9, +instantiationLocked, +false);\n}\n\nstatic addDensity(builder:flatbuffers.Builder, density:number) {\n builder.addFieldFloat32(10, density, 1.0);\n}\n\nstatic addName(builder:flatbuffers.Builder, nameOffset:flatbuffers.Offset) {\n builder.addFieldOffset(11, nameOffset, 0);\n}\n\nstatic addRoles(builder:flatbuffers.Builder, rolesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(12, rolesOffset, 0);\n}\n\nstatic createRolesVector(builder:flatbuffers.Builder, data:number[]|Uint16Array):flatbuffers.Offset;\n/**\n * @deprecated This Uint8Array overload will be removed in the future.\n */\nstatic createRolesVector(builder:flatbuffers.Builder, data:number[]|Uint8Array):flatbuffers.Offset;\nstatic createRolesVector(builder:flatbuffers.Builder, data:number[]|Uint16Array|Uint8Array):flatbuffers.Offset {\n builder.startVector(2, data.length, 2);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addInt16(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startRolesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(2, numElems, 2);\n}\n\nstatic addDeletionLocked(builder:flatbuffers.Builder, deletionLocked:boolean) {\n builder.addFieldInt8(13, +deletionLocked, +false);\n}\n\nstatic endObjectType(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { Action } from '../action/action';\nimport { Condition } from '../condition/condition';\n\n\nexport class Rule {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Rule {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsRule(bb:flatbuffers.ByteBuffer, obj?:Rule):Rule {\n return (obj || new Rule()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsRule(bb:flatbuffers.ByteBuffer, obj?:Rule):Rule {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Rule()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nconditions(index: number, obj?:Condition):Condition|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? (obj || new Condition()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\nconditionsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nactions(index: number, obj?:Action):Action|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? (obj || new Action()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\nactionsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nmovementLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nconditionsExtendLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nactionsExtendLocked():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startRule(builder:flatbuffers.Builder) {\n builder.startObject(5);\n}\n\nstatic addConditions(builder:flatbuffers.Builder, conditionsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, conditionsOffset, 0);\n}\n\nstatic createConditionsVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startConditionsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addActions(builder:flatbuffers.Builder, actionsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, actionsOffset, 0);\n}\n\nstatic createActionsVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startActionsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addMovementLocked(builder:flatbuffers.Builder, movementLocked:boolean) {\n builder.addFieldInt8(2, +movementLocked, +false);\n}\n\nstatic addConditionsExtendLocked(builder:flatbuffers.Builder, conditionsExtendLocked:boolean) {\n builder.addFieldInt8(3, +conditionsExtendLocked, +false);\n}\n\nstatic addActionsExtendLocked(builder:flatbuffers.Builder, actionsExtendLocked:boolean) {\n builder.addFieldInt8(4, +actionsExtendLocked, +false);\n}\n\nstatic endRule(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createRule(builder:flatbuffers.Builder, conditionsOffset:flatbuffers.Offset, actionsOffset:flatbuffers.Offset, movementLocked:boolean, conditionsExtendLocked:boolean, actionsExtendLocked:boolean):flatbuffers.Offset {\n Rule.startRule(builder);\n Rule.addConditions(builder, conditionsOffset);\n Rule.addActions(builder, actionsOffset);\n Rule.addMovementLocked(builder, movementLocked);\n Rule.addConditionsExtendLocked(builder, conditionsExtendLocked);\n Rule.addActionsExtendLocked(builder, actionsExtendLocked);\n return Rule.endRule(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class ScriptModule {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):ScriptModule {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsScriptModule(bb:flatbuffers.ByteBuffer, obj?:ScriptModule):ScriptModule {\n return (obj || new ScriptModule()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsScriptModule(bb:flatbuffers.ByteBuffer, obj?:ScriptModule):ScriptModule {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new ScriptModule()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nname():string|null\nname(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nname(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\ncode():string|null\ncode(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\ncode(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nstatic startScriptModule(builder:flatbuffers.Builder) {\n builder.startObject(2);\n}\n\nstatic addName(builder:flatbuffers.Builder, nameOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, nameOffset, 0);\n}\n\nstatic addCode(builder:flatbuffers.Builder, codeOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, codeOffset, 0);\n}\n\nstatic endScriptModule(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createScriptModule(builder:flatbuffers.Builder, nameOffset:flatbuffers.Offset, codeOffset:flatbuffers.Offset):flatbuffers.Offset {\n ScriptModule.startScriptModule(builder);\n ScriptModule.addName(builder, nameOffset);\n ScriptModule.addCode(builder, codeOffset);\n return ScriptModule.endScriptModule(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { Animation } from '../game/animation';\nimport { SimilarityTransform2 } from '../math/similarity-transform2';\nimport { AnyShape, unionToAnyShape, unionListToAnyShape } from '../shape/any-shape';\n\n\nexport class SinglePartBody {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):SinglePartBody {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsSinglePartBody(bb:flatbuffers.ByteBuffer, obj?:SinglePartBody):SinglePartBody {\n return (obj || new SinglePartBody()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsSinglePartBody(bb:flatbuffers.ByteBuffer, obj?:SinglePartBody):SinglePartBody {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new SinglePartBody()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nshapeType():AnyShape {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : AnyShape.NONE;\n}\n\nshape(obj:any):any|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__union(obj, this.bb_pos + offset) : null;\n}\n\ntextureImageIndex():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\npixelToBodyTransform(obj?:SimilarityTransform2):SimilarityTransform2|null {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? (obj || new SimilarityTransform2()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\nalpha():number {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : 255;\n}\n\nanimations(index: number, obj?:Animation):Animation|null {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? (obj || new Animation()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\nanimationsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nstatic startSinglePartBody(builder:flatbuffers.Builder) {\n builder.startObject(6);\n}\n\nstatic addShapeType(builder:flatbuffers.Builder, shapeType:AnyShape) {\n builder.addFieldInt8(0, shapeType, AnyShape.NONE);\n}\n\nstatic addShape(builder:flatbuffers.Builder, shapeOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, shapeOffset, 0);\n}\n\nstatic addTextureImageIndex(builder:flatbuffers.Builder, textureImageIndex:number) {\n builder.addFieldInt16(2, textureImageIndex, 0);\n}\n\nstatic addPixelToBodyTransform(builder:flatbuffers.Builder, pixelToBodyTransformOffset:flatbuffers.Offset) {\n builder.addFieldStruct(3, pixelToBodyTransformOffset, 0);\n}\n\nstatic addAlpha(builder:flatbuffers.Builder, alpha:number) {\n builder.addFieldInt8(4, alpha, 255);\n}\n\nstatic addAnimations(builder:flatbuffers.Builder, animationsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(5, animationsOffset, 0);\n}\n\nstatic createAnimationsVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startAnimationsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic endSinglePartBody(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class UUID {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):UUID {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsUUID(bb:flatbuffers.ByteBuffer, obj?:UUID):UUID {\n return (obj || new UUID()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsUUID(bb:flatbuffers.ByteBuffer, obj?:UUID):UUID {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new UUID()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nvalue(index: number):number|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint8(this.bb!.__vector(this.bb_pos + offset) + index) : 0;\n}\n\nvalueLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nvalueArray():Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? new Uint8Array(this.bb!.bytes().buffer, this.bb!.bytes().byteOffset + this.bb!.__vector(this.bb_pos + offset), this.bb!.__vector_len(this.bb_pos + offset)) : null;\n}\n\nstatic startUUID(builder:flatbuffers.Builder) {\n builder.startObject(1);\n}\n\nstatic addValue(builder:flatbuffers.Builder, valueOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, valueOffset, 0);\n}\n\nstatic createValueVector(builder:flatbuffers.Builder, data:number[]|Uint8Array):flatbuffers.Offset {\n builder.startVector(1, data.length, 1);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addInt8(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startValueVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(1, numElems, 1);\n}\n\nstatic endUUID(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createUUID(builder:flatbuffers.Builder, valueOffset:flatbuffers.Offset):flatbuffers.Offset {\n UUID.startUUID(builder);\n UUID.addValue(builder, valueOffset);\n return UUID.endUUID(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class VariableIndexAndValue {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):VariableIndexAndValue {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nindex():number {\n return this.bb!.readUint8(this.bb_pos);\n}\n\nvalue():number {\n return this.bb!.readFloat32(this.bb_pos + 4);\n}\n\nstatic sizeOf():number {\n return 8;\n}\n\nstatic createVariableIndexAndValue(builder:flatbuffers.Builder, index: number, value: number):flatbuffers.Offset {\n builder.prep(4, 8);\n builder.writeFloat32(value);\n builder.pad(3);\n builder.writeInt8(index);\n return builder.offset();\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class VariableName {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):VariableName {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsVariableName(bb:flatbuffers.ByteBuffer, obj?:VariableName):VariableName {\n return (obj || new VariableName()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsVariableName(bb:flatbuffers.ByteBuffer, obj?:VariableName):VariableName {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new VariableName()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nimageIndex():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 65535;\n}\n\nname():string|null\nname(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nname(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\ntype():string|null\ntype(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\ntype(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nstatic startVariableName(builder:flatbuffers.Builder) {\n builder.startObject(3);\n}\n\nstatic addImageIndex(builder:flatbuffers.Builder, imageIndex:number) {\n builder.addFieldInt16(0, imageIndex, 65535);\n}\n\nstatic addName(builder:flatbuffers.Builder, nameOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, nameOffset, 0);\n}\n\nstatic addType(builder:flatbuffers.Builder, typeOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, typeOffset, 0);\n}\n\nstatic endVariableName(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createVariableName(builder:flatbuffers.Builder, imageIndex:number, nameOffset:flatbuffers.Offset, typeOffset:flatbuffers.Offset):flatbuffers.Offset {\n VariableName.startVariableName(builder);\n VariableName.addImageIndex(builder, imageIndex);\n VariableName.addName(builder, nameOffset);\n VariableName.addType(builder, typeOffset);\n return VariableName.endVariableName(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport { BinaryArithmetic } from '../generic-block/binary-arithmetic';\nimport { RandomValue } from '../generic-block/random-value';\nimport { ReadVariable } from '../generic-block/read-variable';\nimport { ScriptGeneric } from '../generic-block/script-generic';\n\n\nexport enum AnyGenericBlock{\n NONE = 0,\n ReadVariable = 1,\n BinaryArithmetic = 2,\n RandomValue = 3,\n ScriptGeneric = 4\n}\n\nexport function unionToAnyGenericBlock(\n type: AnyGenericBlock,\n accessor: (obj:BinaryArithmetic|RandomValue|ReadVariable|ScriptGeneric) => BinaryArithmetic|RandomValue|ReadVariable|ScriptGeneric|null\n): BinaryArithmetic|RandomValue|ReadVariable|ScriptGeneric|null {\n switch(AnyGenericBlock[type]) {\n case 'NONE': return null; \n case 'ReadVariable': return accessor(new ReadVariable())! as ReadVariable;\n case 'BinaryArithmetic': return accessor(new BinaryArithmetic())! as BinaryArithmetic;\n case 'RandomValue': return accessor(new RandomValue())! as RandomValue;\n case 'ScriptGeneric': return accessor(new ScriptGeneric())! as ScriptGeneric;\n default: return null;\n }\n}\n\nexport function unionListToAnyGenericBlock(\n type: AnyGenericBlock, \n accessor: (index: number, obj:BinaryArithmetic|RandomValue|ReadVariable|ScriptGeneric) => BinaryArithmetic|RandomValue|ReadVariable|ScriptGeneric|null, \n index: number\n): BinaryArithmetic|RandomValue|ReadVariable|ScriptGeneric|null {\n switch(AnyGenericBlock[type]) {\n case 'NONE': return null; \n case 'ReadVariable': return accessor(index, new ReadVariable())! as ReadVariable;\n case 'BinaryArithmetic': return accessor(index, new BinaryArithmetic())! as BinaryArithmetic;\n case 'RandomValue': return accessor(index, new RandomValue())! as RandomValue;\n case 'ScriptGeneric': return accessor(index, new ScriptGeneric())! as ScriptGeneric;\n default: return null;\n }\n}\n\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nexport enum BinaryArithmeticInput{\n VARIABLE = 0,\n LITERAL = 1,\n INPUT = 2\n}\n\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nexport enum BinaryArithmeticOperation{\n ADD = 0,\n SUB = 1,\n MUL = 2,\n DIV = 3,\n IDIV = 4,\n REM = 5,\n POW = 6,\n LOG = 7,\n MIN = 8,\n MAX = 9\n}\n\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { BinaryArithmeticInput } from '../generic-block/binary-arithmetic-input';\nimport { BinaryArithmeticOperation } from '../generic-block/binary-arithmetic-operation';\n\n\nexport class BinaryArithmetic {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):BinaryArithmetic {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsBinaryArithmetic(bb:flatbuffers.ByteBuffer, obj?:BinaryArithmetic):BinaryArithmetic {\n return (obj || new BinaryArithmetic()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsBinaryArithmetic(bb:flatbuffers.ByteBuffer, obj?:BinaryArithmetic):BinaryArithmetic {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new BinaryArithmetic()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\noperation():BinaryArithmeticOperation {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : BinaryArithmeticOperation.ADD;\n}\n\nlInput():BinaryArithmeticInput {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : BinaryArithmeticInput.VARIABLE;\n}\n\nlAddress():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\nlValue():number {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.readInt16(this.bb_pos + offset) : 0;\n}\n\nrInput():BinaryArithmeticInput {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : BinaryArithmeticInput.VARIABLE;\n}\n\nrAddress():number {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\nrValue():number {\n const offset = this.bb!.__offset(this.bb_pos, 16);\n return offset ? this.bb!.readInt16(this.bb_pos + offset) : 0;\n}\n\nstatic startBinaryArithmetic(builder:flatbuffers.Builder) {\n builder.startObject(7);\n}\n\nstatic addOperation(builder:flatbuffers.Builder, operation:BinaryArithmeticOperation) {\n builder.addFieldInt8(0, operation, BinaryArithmeticOperation.ADD);\n}\n\nstatic addLInput(builder:flatbuffers.Builder, lInput:BinaryArithmeticInput) {\n builder.addFieldInt8(1, lInput, BinaryArithmeticInput.VARIABLE);\n}\n\nstatic addLAddress(builder:flatbuffers.Builder, lAddress:number) {\n builder.addFieldInt16(2, lAddress, 0);\n}\n\nstatic addLValue(builder:flatbuffers.Builder, lValue:number) {\n builder.addFieldInt16(3, lValue, 0);\n}\n\nstatic addRInput(builder:flatbuffers.Builder, rInput:BinaryArithmeticInput) {\n builder.addFieldInt8(4, rInput, BinaryArithmeticInput.VARIABLE);\n}\n\nstatic addRAddress(builder:flatbuffers.Builder, rAddress:number) {\n builder.addFieldInt16(5, rAddress, 0);\n}\n\nstatic addRValue(builder:flatbuffers.Builder, rValue:number) {\n builder.addFieldInt16(6, rValue, 0);\n}\n\nstatic endBinaryArithmetic(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createBinaryArithmetic(builder:flatbuffers.Builder, operation:BinaryArithmeticOperation, lInput:BinaryArithmeticInput, lAddress:number, lValue:number, rInput:BinaryArithmeticInput, rAddress:number, rValue:number):flatbuffers.Offset {\n BinaryArithmetic.startBinaryArithmetic(builder);\n BinaryArithmetic.addOperation(builder, operation);\n BinaryArithmetic.addLInput(builder, lInput);\n BinaryArithmetic.addLAddress(builder, lAddress);\n BinaryArithmetic.addLValue(builder, lValue);\n BinaryArithmetic.addRInput(builder, rInput);\n BinaryArithmetic.addRAddress(builder, rAddress);\n BinaryArithmetic.addRValue(builder, rValue);\n return BinaryArithmetic.endBinaryArithmetic(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { AnyGenericBlock, unionToAnyGenericBlock, unionListToAnyGenericBlock } from '../generic-block/any-generic-block';\n\n\nexport class GenericBlockContainer {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):GenericBlockContainer {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsGenericBlockContainer(bb:flatbuffers.ByteBuffer, obj?:GenericBlockContainer):GenericBlockContainer {\n return (obj || new GenericBlockContainer()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsGenericBlockContainer(bb:flatbuffers.ByteBuffer, obj?:GenericBlockContainer):GenericBlockContainer {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new GenericBlockContainer()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\ngenericBlockType():AnyGenericBlock {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : AnyGenericBlock.NONE;\n}\n\ngenericBlock(obj:any):any|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__union(obj, this.bb_pos + offset) : null;\n}\n\nstatic startGenericBlockContainer(builder:flatbuffers.Builder) {\n builder.startObject(2);\n}\n\nstatic addGenericBlockType(builder:flatbuffers.Builder, genericBlockType:AnyGenericBlock) {\n builder.addFieldInt8(0, genericBlockType, AnyGenericBlock.NONE);\n}\n\nstatic addGenericBlock(builder:flatbuffers.Builder, genericBlockOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, genericBlockOffset, 0);\n}\n\nstatic endGenericBlockContainer(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createGenericBlockContainer(builder:flatbuffers.Builder, genericBlockType:AnyGenericBlock, genericBlockOffset:flatbuffers.Offset):flatbuffers.Offset {\n GenericBlockContainer.startGenericBlockContainer(builder);\n GenericBlockContainer.addGenericBlockType(builder, genericBlockType);\n GenericBlockContainer.addGenericBlock(builder, genericBlockOffset);\n return GenericBlockContainer.endGenericBlockContainer(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nexport enum InputToBinarySide{\n LEFT = 0,\n RIGHT = 1\n}\n\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class RandomValue {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):RandomValue {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsRandomValue(bb:flatbuffers.ByteBuffer, obj?:RandomValue):RandomValue {\n return (obj || new RandomValue()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsRandomValue(bb:flatbuffers.ByteBuffer, obj?:RandomValue):RandomValue {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new RandomValue()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nmin():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readInt16(this.bb_pos + offset) : 1;\n}\n\nmax():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readInt16(this.bb_pos + offset) : 6;\n}\n\ninputToMin():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startRandomValue(builder:flatbuffers.Builder) {\n builder.startObject(3);\n}\n\nstatic addMin(builder:flatbuffers.Builder, min:number) {\n builder.addFieldInt16(0, min, 1);\n}\n\nstatic addMax(builder:flatbuffers.Builder, max:number) {\n builder.addFieldInt16(1, max, 6);\n}\n\nstatic addInputToMin(builder:flatbuffers.Builder, inputToMin:boolean) {\n builder.addFieldInt8(2, +inputToMin, +false);\n}\n\nstatic endRandomValue(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createRandomValue(builder:flatbuffers.Builder, min:number, max:number, inputToMin:boolean):flatbuffers.Offset {\n RandomValue.startRandomValue(builder);\n RandomValue.addMin(builder, min);\n RandomValue.addMax(builder, max);\n RandomValue.addInputToMin(builder, inputToMin);\n return RandomValue.endRandomValue(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class ReadVariable {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):ReadVariable {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsReadVariable(bb:flatbuffers.ByteBuffer, obj?:ReadVariable):ReadVariable {\n return (obj || new ReadVariable()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsReadVariable(bb:flatbuffers.ByteBuffer, obj?:ReadVariable):ReadVariable {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new ReadVariable()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\naddress():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readUint16(this.bb_pos + offset) : 0;\n}\n\nstatic startReadVariable(builder:flatbuffers.Builder) {\n builder.startObject(1);\n}\n\nstatic addAddress(builder:flatbuffers.Builder, address:number) {\n builder.addFieldInt16(0, address, 0);\n}\n\nstatic endReadVariable(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createReadVariable(builder:flatbuffers.Builder, address:number):flatbuffers.Offset {\n ReadVariable.startReadVariable(builder);\n ReadVariable.addAddress(builder, address);\n return ReadVariable.endReadVariable(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class ScriptGeneric {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):ScriptGeneric {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsScriptGeneric(bb:flatbuffers.ByteBuffer, obj?:ScriptGeneric):ScriptGeneric {\n return (obj || new ScriptGeneric()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsScriptGeneric(bb:flatbuffers.ByteBuffer, obj?:ScriptGeneric):ScriptGeneric {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new ScriptGeneric()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\ncode():string|null\ncode(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\ncode(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nstatic startScriptGeneric(builder:flatbuffers.Builder) {\n builder.startObject(1);\n}\n\nstatic addCode(builder:flatbuffers.Builder, codeOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, codeOffset, 0);\n}\n\nstatic endScriptGeneric(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createScriptGeneric(builder:flatbuffers.Builder, codeOffset:flatbuffers.Offset):flatbuffers.Offset {\n ScriptGeneric.startScriptGeneric(builder);\n ScriptGeneric.addCode(builder, codeOffset);\n return ScriptGeneric.endScriptGeneric(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class ScalingRotation2 {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):ScalingRotation2 {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nscaleFactor():number {\n return this.bb!.readFloat32(this.bb_pos);\n}\n\nrotationAngle():number {\n return this.bb!.readFloat32(this.bb_pos + 4);\n}\n\nstatic sizeOf():number {\n return 8;\n}\n\nstatic createScalingRotation2(builder:flatbuffers.Builder, scale_factor: number, rotation_angle: number):flatbuffers.Offset {\n builder.prep(4, 8);\n builder.writeFloat32(rotation_angle);\n builder.writeFloat32(scale_factor);\n return builder.offset();\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class ScalingTranslation2 {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):ScalingTranslation2 {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nscaleFactor():number {\n return this.bb!.readFloat32(this.bb_pos);\n}\n\ntranslationX():number {\n return this.bb!.readFloat32(this.bb_pos + 4);\n}\n\ntranslationY():number {\n return this.bb!.readFloat32(this.bb_pos + 8);\n}\n\nstatic sizeOf():number {\n return 12;\n}\n\nstatic createScalingTranslation2(builder:flatbuffers.Builder, scale_factor: number, translation_x: number, translation_y: number):flatbuffers.Offset {\n builder.prep(4, 12);\n builder.writeFloat32(translation_y);\n builder.writeFloat32(translation_x);\n builder.writeFloat32(scale_factor);\n return builder.offset();\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class SimilarityTransform2 {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):SimilarityTransform2 {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nscaleFactor():number {\n return this.bb!.readFloat32(this.bb_pos);\n}\n\nrotationAngle():number {\n return this.bb!.readFloat32(this.bb_pos + 4);\n}\n\ntranslationX():number {\n return this.bb!.readFloat32(this.bb_pos + 8);\n}\n\ntranslationY():number {\n return this.bb!.readFloat32(this.bb_pos + 12);\n}\n\nstatic sizeOf():number {\n return 16;\n}\n\nstatic createSimilarityTransform2(builder:flatbuffers.Builder, scale_factor: number, rotation_angle: number, translation_x: number, translation_y: number):flatbuffers.Offset {\n builder.prep(4, 16);\n builder.writeFloat32(translation_y);\n builder.writeFloat32(translation_x);\n builder.writeFloat32(rotation_angle);\n builder.writeFloat32(scale_factor);\n return builder.offset();\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class Twist2 {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Twist2 {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nlinearX():number {\n return this.bb!.readFloat32(this.bb_pos);\n}\n\nlinearY():number {\n return this.bb!.readFloat32(this.bb_pos + 4);\n}\n\nangular():number {\n return this.bb!.readFloat32(this.bb_pos + 8);\n}\n\nstatic sizeOf():number {\n return 12;\n}\n\nstatic createTwist2(builder:flatbuffers.Builder, linear_x: number, linear_y: number, angular: number):flatbuffers.Offset {\n builder.prep(4, 12);\n builder.writeFloat32(angular);\n builder.writeFloat32(linear_y);\n builder.writeFloat32(linear_x);\n return builder.offset();\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class Vector2 {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n__init(i:number, bb:flatbuffers.ByteBuffer):Vector2 {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nx():number {\n return this.bb!.readFloat32(this.bb_pos);\n}\n\ny():number {\n return this.bb!.readFloat32(this.bb_pos + 4);\n}\n\nstatic sizeOf():number {\n return 8;\n}\n\nstatic createVector2(builder:flatbuffers.Builder, x: number, y: number):flatbuffers.Offset {\n builder.prep(4, 8);\n builder.writeFloat32(y);\n builder.writeFloat32(x);\n return builder.offset();\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\nimport { CircularShape } from '../shape/circular-shape';\nimport { ConvexShape } from '../shape/convex-shape';\nimport { RectangularShape } from '../shape/rectangular-shape';\n\n\nexport enum AnyShape{\n NONE = 0,\n CircularShape = 1,\n RectangularShape = 2,\n ConvexShape = 3\n}\n\nexport function unionToAnyShape(\n type: AnyShape,\n accessor: (obj:CircularShape|ConvexShape|RectangularShape) => CircularShape|ConvexShape|RectangularShape|null\n): CircularShape|ConvexShape|RectangularShape|null {\n switch(AnyShape[type]) {\n case 'NONE': return null; \n case 'CircularShape': return accessor(new CircularShape())! as CircularShape;\n case 'RectangularShape': return accessor(new RectangularShape())! as RectangularShape;\n case 'ConvexShape': return accessor(new ConvexShape())! as ConvexShape;\n default: return null;\n }\n}\n\nexport function unionListToAnyShape(\n type: AnyShape, \n accessor: (index: number, obj:CircularShape|ConvexShape|RectangularShape) => CircularShape|ConvexShape|RectangularShape|null, \n index: number\n): CircularShape|ConvexShape|RectangularShape|null {\n switch(AnyShape[type]) {\n case 'NONE': return null; \n case 'CircularShape': return accessor(index, new CircularShape())! as CircularShape;\n case 'RectangularShape': return accessor(index, new RectangularShape())! as RectangularShape;\n case 'ConvexShape': return accessor(index, new ConvexShape())! as ConvexShape;\n default: return null;\n }\n}\n\n","/**\n * @module game\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { Block } from 'vpl/block';\nimport { CandliEffects, EditedObjectContext } from 'level/behaviour-editor-interface';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { qsT, qsTr } from 'translator/translator';\nimport { Quoting } from 'translator/common-texts';\n\ndeclare class ObjectType {}\n\nexport type ObjectTypeIdMap = Map;\n\n/**\n * Super-class of game creator blocks, providing support for keeping the [[Game]] consistent.\n */\nexport abstract class CandliBlock extends Block {\n\tconstructor(type: string, lockState?: CandliBlock) {\n\t\tsuper(type, lockState?.movementLocked ?? false, lockState?.parametersLocked ?? false);\n\t}\n\n\tabstract serialise(builder: flatbuffers.Builder, objectTypes: ObjectTypeIdMap): number;\n\n\t/**\n\t * Return whether this block has a reference to a specific object type.\n\t * @param _objectType the object type to consider\n\t */\n\thasReferencesToObjectType(_objectType: ObjectType): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * If this block has a reference to a specific object type, release it.\n\t * @param _objectType the object type to forget about\n\t */\n\treleaseReferencesToObjectType(_objectType: ObjectType) {}\n\n\t/** Return the Flatbuffers condition type, if this block can be used in condition context, otherwise null */\n\tget fbConditionType(): CandliFB.AnyCondition | null {\n\t\treturn null;\n\t}\n\t/** Return the Flatbuffers action type, if this block can be used in action context, otherwise null */\n\tget fbActionType(): CandliFB.AnyAction | null {\n\t\treturn null;\n\t}\n\t/** Return the Flatbuffers generic block type, if this block is generic, otherwise null */\n\tget fbGenericType(): CandliFB.AnyGenericBlock | null {\n\t\treturn null;\n\t}\n\n\tthisObject(userContext: EditedObjectContext | null = null) {\n\t\tconst name = userContext?.objectType?.name;\n\t\tif (name) {\n\t\t\treturn qsTr('this object (of type %1)').args(Quoting.args(qsT(name)));\n\t\t} else {\n\t\t\treturn qsT('this object');\n\t\t}\n\t}\n}","/**\n * @module game\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { nonnull, defined } from 'utils/types';\nimport { Game } from './game';\nimport { GameAndItsBinary, Storage } from 'storage/storage';\nimport * as flatbuffers from 'flatbuffers';\nimport * as CandliFB from 'flatbuffers/all';\nimport { fromFbArrayIdentity, fromFbArrayWithFactory } from 'flatbuffers/flatbuffers-cast';\nimport { getMusic } from 'blocks/actions/music/music';\nimport { getRustliSfp, ScriptPackageLocator } from 'network/api';\nimport { ScriptPackage } from './game-core';\n\nexport async function loadGameFromBinary(gameKey: string, storage: Storage): Promise {\n\tconsole.info(`Loading binary game ${gameKey}`);\n\n\t// read the game description from the buffer\n\tconst gameNamePromise = storage.getGameName(gameKey);\n\tconst binaryGame = await storage.loadGameBinary(gameKey);\n\tconst buffer = new flatbuffers.ByteBuffer(binaryGame);\n\tconst fbGame = CandliFB.Game.getRootAsGame(buffer);\n\n\t// load all assets, either from backlog or from network\n\tconst imageKeys = fromFbArrayWithFactory(fbGame, 'imageKeys', (fbUUID: CandliFB.UUID) => {\n\t\treturn nonnull(fbUUID.valueArray());\n\t});\n\tconst imagePromises = imageKeys.map((key) => storage.imageAssets.loadAssetWithBacklog(key));\n\tconst soundKeys = fromFbArrayWithFactory(fbGame, 'soundKeys', (fbUUID: CandliFB.UUID) => {\n\t\treturn nonnull(fbUUID.valueArray());\n\t});\n\tconst soundPromises = soundKeys.map((key) => storage.soundAssets.loadAssetWithBacklog(key));\n\tconst scriptPaths: string[] = fromFbArrayIdentity(fbGame, 'scriptDependencies');\n\tconst scriptPromises = scriptPaths.map(async (path) => {\n\t\tconst locator = ScriptPackageLocator.parseDependencyPath(path);\n\t\tconst name = locator.packageName;\n\t\tconst code = await getRustliSfp(locator);\n\t\treturn new ScriptPackage(path, name, code);\n\t});\n\tconst [images, sounds, scripts] = await Promise.all([\n\t\tPromise.all(imagePromises),\n\t\tPromise.all(soundPromises),\n\t\tPromise.all(scriptPromises),\n\t]);\n\n\t// load the game itself\n\tconst imageDecoder = (index: number) => defined(images[index]);\n\tconst game = new Game(fbGame, imageDecoder, sounds, scripts, gameKey, await gameNamePromise);\n\n\t// load music\n\tawait getMusic().preloadAtmospheres([...game.collectMusicAtmospheres()]);\n\tconsole.debug(`Loaded game \"${game.name ?? 'unnamed'}\" with ${game.objects.length} object types.`, game);\n\n\t// garbage collect unused assets\n\tstorage.imageAssets.forgetAllBut(imageKeys);\n\tstorage.soundAssets.forgetAllBut(soundKeys);\n\treturn [game, binaryGame];\n}\n","/**\n * @module imgui\n */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { Rect } from 'math/geometry';\nimport { assert } from 'utils/assert';\n\n// Display actions and lists\n\nexport abstract class DisplayAction {\n\tabstract get extent(): Rect;\n\tabstract isEqual(that: DisplayAction): boolean;\n\tabstract toString(indent?: string): string;\n}\n\nexport class SealedDisplayList {\n\tconstructor(protected actions: DisplayAction[]) {}\n\n\tget extent() {\n\t\treturn this.actions.reduce((acc: null | Rect, cur) => {\n\t\t\tif (acc !== null) {\n\t\t\t\treturn cur.extent.union(acc);\n\t\t\t} else {\n\t\t\t\treturn cur.extent;\n\t\t\t}\n\t\t}, null);\n\t}\n\n\tgetExtentForRange(startIndex: number, endIndex: number) {\n\t\tassert(startIndex < endIndex, 'invalid range');\n\t\tassert(startIndex >= 0);\n\t\tassert(endIndex <= this.actions.length);\n\t\tlet rect = this.actions[startIndex]!.extent;\n\t\tfor (let i = startIndex + 1; i < endIndex; ++i) {\n\t\t\trect = rect.union(this.actions[i]!.extent);\n\t\t}\n\t\treturn rect;\n\t}\n\n\tgetActions() {\n\t\treturn this.actions;\n\t}\n\n\tforEach(callback = (_currentValue: DisplayAction, _index?: number) => {}) {\n\t\tthis.actions.forEach(callback);\n\t}\n\n\ttoString(indent = '') {\n\t\treturn this.actions.map((action) => indent + action.toString()).join('\\n');\n\t}\n}\n\nexport type DisplayList = DisplayAction[];\n\n/*\nexport class DisplayList extends SealedDisplayList {\n\tconstructor() { super([]); }\n\n\tadd(action: DisplayAction) {\n\t\tthis.actions.push(action);\n\t}\n\tseal() {\n\t\tconst actions = this.actions;\n\t\tthis.actions = [];\n\t\treturn new SealedDisplayList(actions);\n\t}\n}*/","/**\n * @module imgui\n */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { assertFalse } from 'utils/assert';\n\nexport type AnyCanvasRenderingContext2D = CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;\nexport type AnyCanvas = HTMLCanvasElement | OffscreenCanvas;\n\nexport function isCanvas(value: unknown): value is AnyCanvas {\n\treturn (\n\t\t(value instanceof HTMLCanvasElement) ||\n\t\t(typeof OffscreenCanvas !== 'undefined' && value instanceof OffscreenCanvas)\n\t);\n}\n\nexport function castCanvas(value: unknown): AnyCanvas {\n\tif (value instanceof HTMLCanvasElement) {\n\t\treturn value;\n\t} else if (value instanceof OffscreenCanvas) {\n\t\treturn value;\n\t}\n\tassertFalse(`cast error: value ${value} is not a canvas`);\n}\n\nexport class DebugOptions {\n\tstatic showPaints = false;\n}","/**\n * @module imgui\n */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { Rect } from 'math/geometry';\nimport { Vector2 } from 'math/linalg';\nimport { SealedDisplayList } from './display-list';\nimport { AnyCanvas } from './imgui-types';\n\n// Resources\n\nexport interface TextSize {\n\t/** size of the bounding box enclosing the text */\n\tsize: Vector2;\n\t/** distance from the top of the bounding box to the text */\n\tbaseline: number;\n}\n\nexport abstract class Font {\n\tabstract size(text: string): TextSize;\n};\n\nexport abstract class Sprite {\n\tabstract get size(): Vector2;\n};\n\nexport abstract class RenderContext {\n\tabstract loadFont(family: string, size: number, style?: string, weight?: string): Font;\n\t/** Add a sprite, hiDPI indicates how its size must be interpreted, if false, use normal width/height, if true, divide these by window.devicePixelRatio */\n\tabstract addSprite(sprite: AnyCanvas | ImageData, hiDPI: boolean): Sprite;\n\tabstract releaseSprite(sprite: Sprite): void;\n\t/** Render the main and overlay lists, at a given scale */\n\tabstract render(lists: [SealedDisplayList, SealedDisplayList], scale: number): void;\n\tabstract present(): void;\n\tabstract clientRect(): Rect;\n}","/**\n * @module math\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { DirectionContext, SpacedAnd, downText, leftText, rightText, upText } from 'translator/common-texts';\nimport { Vector2 } from './linalg';\n\nexport function vectorQualitativeDescription(vector: Vector2, nullText: string) {\n\t// combine x and y into a single string talking about up, left, etc.\n\tconst epsilon = 1e-15;\n\tlet leftRightText = '';\n\tif (vector.x > epsilon) {\n\t\tleftRightText = rightText(DirectionContext.Vector);\n\t} else if (vector.x < -epsilon) {\n\t\tleftRightText = leftText(DirectionContext.Vector);\n\t}\n\tlet upDownText = '';\n\tif (vector.y > epsilon) {\n\t\tupDownText = upText(DirectionContext.Vector);\n\t} else if (vector.y < -epsilon) {\n\t\tupDownText = downText(DirectionContext.Vector);\n\t}\n\tif (leftRightText && upDownText) {\n\t\treturn leftRightText + SpacedAnd + upDownText;\n\t} else if (leftRightText) {\n\t\treturn leftRightText;\n\t} else if (upDownText) {\n\t\treturn upDownText;\n\t} else {\n\t\treturn nullText;\n\t}\n}","/**\n * @module utils\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nexport namespace ContentTypes {\n\texport const ImagePng = 'image/png';\n\texport const AudioWav = 'audio/wav';\n\t// TODO discuss send this around even though we don't use it? Header compression should compensate..\n\texport const Game = 'application/vnd.candli.game';\n\texport const Json = 'application/json';\n\texport const Text = 'text/plain';\n}\n\nexport type BinaryContentType = typeof ContentTypes.ImagePng | typeof ContentTypes.Game | typeof ContentTypes.Json | typeof ContentTypes.Text;\nexport type ContentType = BinaryContentType | typeof ContentTypes.Text;\n\nexport class ApiError extends Error {\n\tconstructor(public readonly method: string, public readonly url: string, public readonly statusCode: number, public readonly body: string) {\n\t\tsuper(`Fetch failed (${method} ${url}, status=${statusCode})` + (body && body !== 'null' ? ': ' + body : '.'));\n\t}\n}\n\n// TODO Ensure sync with the server.\nexport const OrganisationTypes = ['School', 'Home'] as const;\nexport type OrganisationType = typeof OrganisationTypes[number];\nexport const OrganisationRoles = ['SchoolOwner', 'Teacher', 'Student', 'HomeOwner'] as const; // | 'SubUser';\nexport type OrganisationRole = typeof OrganisationRoles[number];\nexport const Products = ['HomePremium', 'Classroom'] as const;\nexport type Product = typeof Products[number];\n\nexport interface Organisation {\n\tuuid: string;\n\tname: string;\n\ttype: OrganisationType;\n}\nexport interface OrganisationMembershipApi {\n\torganisation: Organisation;\n\trole: OrganisationRole;\n}\n\nexport interface ProductWithLicenceId {\n\tproduct: Product;\n\tlicenceId: number;\n\texpiresInSecs: number | null;\n\texpirationDate?: Date;\n}\n\nexport interface LoggedInUserInfo {\n\tuserInfo: {\n\t\tid: number;\n\t\tuuid: string;\n\t\tname?: string;\n\t\temail?: string;\n\t\tgroups: string[];\n\t\torganisationMembership: OrganisationMembershipApi | null;\n\t\tproducts: ProductWithLicenceId[];\n\t};\n\tprimaryWs: string;\n\tdWsOwned: boolean; // The device workspace was found owned by some user.\n\tattributes: Map;\n\tfeatures: string[];\n}\n\nexport interface UserInfo {\n\tid: number;\n\tname: string | null;\n\temail: string | null;\n\tuuid: string;\n\tgroups: string[];\n\torganisations: OrganisationMembershipApi[];\n}\n\nexport interface BlobWithContentType {\n\tcontentType: string | null; value: ArrayBuffer;\n}\n\nexport interface RedeemVoucherParams {\n\tvoucherUid: string\n}\nexport interface RedeemVoucherResult {\n\tnewProduct: ProductWithLicenceId\n}\n\n","/**\n * @module runtime\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nfunction getAudioContextInterface() {\n\treturn window.AudioContext || (window as any).webkitAudioContext;\n}\n\nlet audioCtx: AudioContext | null = null;\n\nexport function getAudioContext(forceFake = false) {\n\tif (audioCtx === null) {\n\t\tconst AudioContext = getAudioContextInterface();\n\t\tif (AudioContext !== undefined && !forceFake) {\n\t\t\taudioCtx = new AudioContext();\n\t\t\tconsole.info('Creating audio context');\n\t\t}\n\t}\n\tif (audioCtx?.state === 'suspended' || (audioCtx?.state as string) === 'interrupted') {\n\t\tvoid audioCtx?.resume();\n\t}\n\treturn audioCtx;\n}\n\n// We wrap the old non-promise API within a promise to not\n// have to depend on Safari/iOS version 14 minimum.\nexport function decodeAudioData(ctx: AudioContext, data: ArrayBuffer) {\n\treturn new Promise((resolve, reject) => {\n\t\tvoid ctx.decodeAudioData(data, resolve, reject);\n\t});\n\t// return ctx.decodeAudioData(data);\n}","/**\n * @module utils\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { Vector2, SimilarityTransform, assertVector2, ProperIsometry } from 'math/linalg';\nimport { assertMemberArrayEqualF, assertMemberEqualF, assertMemberEqual, EntriesOfTypeOrNull, assertNumberEqual, assertArrayEqual, assertValueEqual, assertType, assertNumber, assertNull, assertTypeEqual } from './assert';\nimport { Color } from 'color/color';\nimport { ObjectType } from 'game/game-core';\n\nexport function assertVector2Array(v2s: Vector2[], name: string) {\n\tassertType(Array, v2s, name);\n\tlet i = 0;\n\tfor (const v2 of v2s) {\n\t\tassertVector2(v2, `${name}[${i}]`);\n\t\ti += 1;\n\t}\n}\n\nexport function assertVector2Equal(lhs: Vector2, rhs: Vector2, ctx: string) {\n\tassertNumberEqual(lhs.x, rhs.x, ctx, 'x');\n\tassertNumberEqual(lhs.y, rhs.y, ctx, 'y');\n}\n\nexport function assertVector2ArrayEqual(lArray: Vector2[], rArray: Vector2[], ctx: string) {\n\tassertArrayEqual(lArray, rArray, assertVector2Equal, ctx);\n}\n\nexport function assertMemberVector2Equal>\n(lhs: T, rhs: T, key: K, ctx: string) {\n\tassertMemberEqualF(lhs, rhs, key, assertVector2Equal, ctx);\n}\n\nexport function assertMemberVector2ArrayEqual>\n(lhs: T, rhs: T, key: K, ctx: string) {\n\tassertMemberArrayEqualF(lhs, rhs, key, assertVector2Equal, ctx);\n}\n\nexport function assertSimilarityTransformEqual(lhs: SimilarityTransform, rhs: SimilarityTransform, ctx: string) {\n\tassertNumberEqual(lhs.translation.x, rhs.translation.x, ctx, 'translationX');\n\tassertNumberEqual(lhs.translation.y, rhs.translation.y, ctx, 'translationY');\n\tassertNumberEqual(lhs.rotationAngle, rhs.rotationAngle, ctx, 'rotationAngle');\n\tassertNumberEqual(lhs.scaleFactor, rhs.scaleFactor, ctx, 'scaleFactor');\n}\n\nexport function assertMemberSimilarityTransformEqual>\n(lhs: T, rhs: T, key: K, ctx: string) {\n\tassertMemberEqualF(lhs, rhs, key, assertSimilarityTransformEqual, ctx);\n}\n\nexport function assertProperIsometryEqual(lhs: ProperIsometry, rhs: ProperIsometry, ctx: string) {\n\tassertNumberEqual(lhs.translation.x, rhs.translation.x, ctx, 'translationX');\n\tassertNumberEqual(lhs.translation.y, rhs.translation.y, ctx, 'translationY');\n\tassertNumberEqual(lhs.rotationAngle, rhs.rotationAngle, ctx, 'rotationAngle');\n}\n\nexport function assertMemberProperIsometryEqual>\n(lhs: T, rhs: T, key: K, ctx: string) {\n\tassertMemberEqualF(lhs, rhs, key, assertProperIsometryEqual, ctx);\n}\n\nexport function assertColorEqual(lhs: Color, rhs: Color, ctx: string) {\n\tassertArrayEqual(lhs.components, rhs.components, assertValueEqual, ctx + '.components');\n\tassertMemberEqual(lhs, rhs, 'space', ctx);\n}\n\nexport function assertMemberColorEqual>\n(lhs: T, rhs: T, key: K, ctx: string) {\n\tassertMemberEqualF(lhs, rhs, key, assertColorEqual, ctx);\n}\n\nexport function assertObjectTypeOptEqual(lhs: ObjectType | null, rhs: ObjectType | null, ctx: string) {\n\tconst lhsId = lhs?.id ?? null;\n\tconst rhsId = rhs?.id ?? null;\n\tassertValueEqual(lhsId, rhsId, ctx, 'objectType');\n}\n\nexport function assertMemberObjectTypeOptEqual>\n(lhs: T, rhs: T, key: K, ctx: string) {\n\tassertMemberEqualF(lhs, rhs, key, assertObjectTypeOptEqual, ctx);\n}\n\ntype Shape = number | Vector2 | Vector2[] | null;\n\nexport function assertShapeEqual(lhs: Shape, rhs: Shape, ctx: string) {\n\tassertTypeEqual(lhs, rhs, ctx);\n\tif (lhs === null) {\n\t\tassertNull(rhs, ctx);\n\t} else if (lhs instanceof Vector2) {\n\t\tassertType(Vector2, rhs, ctx);\n\t\tassertVector2Equal(lhs, rhs, ctx);\n\t} else if (lhs instanceof Array) {\n\t\tassertType(Array, rhs, ctx);\n\t\tassertVector2ArrayEqual(lhs, rhs, ctx);\n\t} else {\n\t\tassertNumber(rhs, ctx);\n\t\tassertNumberEqual(lhs, rhs, ctx);\n\t}\n}","/**\n * @module utils\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\n/** Given a move of an element in a range of number (from -> to), for a given index, call setter with the new index. */\nexport function moveRange(from: number, to: number, index: number, setter: (newIndex: number) => void) {\n\tif (from < to) {\n\t\tif (index === from) {\n\t\t\tsetter(to);\n\t\t} else if (index > from && index <= to) {\n\t\t\tsetter(index - 1);\n\t\t}\n\t} else {\n\t\tif (index === from) {\n\t\t\tsetter(to);\n\t\t} else if (index < from && index >= to) {\n\t\t\tsetter(index + 1);\n\t\t}\n\t}\n}","/**\n * @module vpl\n */\n/** comment to work-around limitation of typedoc module plugin */\n\n// Copyright 2018-2024 Enlightware GmbH, Switzerland\n\nimport { BlockEditorScreen } from './block-editor';\nimport { assert, assertBoolean, assertClassEqual } from 'utils/assert';\nimport { AnyCanvasRenderingContext2D } from 'imgui/imgui-types';\nimport { DoNothing, Never } from 'translator/common-texts';\nimport { Features } from 'apps/common/parameters';\n\nexport const enum BlockKind {\n\tCondition = 0,\n\tInstantaneousAction = 1,\n\tContinuousAction = 2,\n\tGeneric = 3,\n}\n\nexport const enum ValuePortPresence {\n\tNone = 0,\n\tOptional = 1,\n\tMandatory = 2\n}\n\n/**\n * The outer context of the user of the VPL, application-specific.\n * Note: ConfigContext is conceptually an output type and would be an associated type in Rust.\n */\nexport interface OuterUserContext {\n\tconfigContext(): ConfigContext;\n}\n\n/** The effect definitions, basically an object with string values */\nexport type EffectDefs = Record;\n\n/** The effects of an action */\nexport interface ActionEffects {\n\t/// The modified effects, considering their previous values\n\tmodifies?: readonly (keyof E)[],\n\t/// The overridden effects, regardless of their previous values\n\toverrides?: readonly (keyof E)[],\n\t/// The frozen effects, that cannot be modified any more. Note: freezes win over overrides.\n\tfreezes?: readonly (keyof E)[],\n}\n\n/**\n * The base class of a VPL block.\n */\nexport abstract class Block, ConfigCtx> {\n\t/**\n\t * Constructor\n\t * @param type the human-readable type of the block, must be unique\n\t * @param movementLocked whether the object is locked for movement in the editor\n\t * @param parametersLocked whether the object is locked for settings its parameters in the editor\n\t */\n\tconstructor(\n\t\t/** the human-readable type of the block, must be unique */\n\t\tpublic type: string,\n\t\t/** whether the object is locked for movement in the editor */\n\t\tpublic movementLocked = false,\n\t\t/** whether the object is locked for settings its parameters in the editor */\n\t\tpublic parametersLocked = false\n\t) {\n\t}\n\n\t/** Clone this block */\n\tabstract clone(): Block;\n\n\t/** What kind of block this is: condition or instantaneous or continuous action */\n\tabstract get kind(): BlockKind;\n\n\t/** whether the object is fully locked in the editor */\n\tget editLocked() {\n\t\treturn this.movementLocked && this.parametersLocked;\n\t}\n\tset editLocked(locked: boolean) {\n\t\tthis.movementLocked = locked;\n\t\tthis.parametersLocked = locked;\n\t}\n\n\tget isCondition() {\n\t\treturn this.kind === BlockKind.Condition;\n\t}\n\n\tget isInstantaneousAction() {\n\t\treturn this.kind === BlockKind.InstantaneousAction;\n\t}\n\n\tget isContinuousAction() {\n\t\treturn this.kind === BlockKind.ContinuousAction;\n\t}\n\n\tget isGeneric() {\n\t\treturn this.kind === BlockKind.Generic;\n\t}\n\n\t/** Whether this block is a condition denoting initialization */\n\tget isInit() {\n\t\treturn false;\n\t}\n\n\t/** Whether this block has no effect on init */\n\tget isEffectlessOnInit() {\n\t\treturn false;\n\t}\n\n\t/** Whether this block requires premium */\n\tget premium() {\n\t\treturn false;\n\t}\n\n\t/** Whether this block requires premium and premium is not available */\n\tget isPremiumOnly() {\n\t\treturn this.premium && !Features.paid;\n\t}\n\n\t/** Whether this block can be edited with its editor given its IOs */\n\tisEditableWithIO(_valueIn: boolean, _valueOut: boolean) {\n\t\treturn true;\n\t}\n\n\t/** Whether this block can be modified by the user in any way, in general */\n\tget userModifiable() {\n\t\treturn !(this.movementLocked && this.parametersLocked) && !this.isPremiumOnly;\n\t}\n\n\t/** The effects of this block, if it is an action */\n\tactionEffects(_configContext: ConfigCtx | null): ActionEffects {\n\t\treturn {};\n\t}\n\n\t/** Whether this block must be edited to be useful */\n\tneedsConfiguration(_configContext: ConfigCtx | null) {\n\t\treturn false;\n\t}\n\n\t/** The solution to configure this block */\n\tneedsConfigurationFix(_configContext: ConfigCtx | null): string {\n\t\treturn '';\n\t}\n\n\t/** The configuration text, or empty string if not needed */\n\tprivate needsConfigurationText(configContext: ConfigCtx | null, detailed: boolean): string {\n\t\tif (this.needsConfiguration(configContext)) {\n\t\t\tlet prefix;\n\t\t\tif (this.isCondition) {\n\t\t\t\tprefix = Never;\n\t\t\t} else {\n\t\t\t\tprefix = DoNothing;\n\t\t\t}\n\t\t\tif (detailed) {\n\t\t\t\treturn `${prefix} (${this.needsConfigurationFix(configContext)})`;\n\t\t\t} else {\n\t\t\t\treturn prefix;\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t}\n\n\t/** Whether this block can receive a value as input */\n\tget inputValuePortPresence() {\n\t\treturn ValuePortPresence.None;\n\t}\n\n\tget inputValuePossible() {\n\t\treturn this.inputValuePortPresence !== ValuePortPresence.None;\n\t}\n\n\tget inputValueMandatory() {\n\t\treturn this.inputValuePortPresence === ValuePortPresence.Mandatory;\n\t}\n\n\t/** Whether this block can produce a value as output */\n\tget outputValuePortPresence() {\n\t\treturn ValuePortPresence.None;\n\t}\n\n\tget outputValuePossible() {\n\t\treturn this.outputValuePortPresence !== ValuePortPresence.None;\n\t}\n\n\tget outputValueMandatory() {\n\t\treturn this.outputValuePortPresence === ValuePortPresence.Mandatory;\n\t}\n\n\t/**\n\t * Return a key for rendering the miniature, and for block equality comparison.\n\t * @param userContext the outer context of the environment\n\t * @param valueIn whether there is a value producer on the left\n\t * @param valueOut whether there is a value consumer on the right\n\t */\n\tgetMiniatureKey(userContext: OuterCtx | null, valueIn: boolean, valueOut: boolean) {\n\t\treturn JSON.stringify(this);\n\t}\n\n\t/** Human-readable name of the block */\n\tget name() {\n\t\treturn this.type;\n\t}\n\n\t/**\n\t * A summary textual representation of the block\n\t * @param valueIn whether there is a value producer on the left\n\t * @param valueOut whether there is a value consumer on the right\n\t*/\n\tsummaryText(userContext: OuterCtx | null, valueIn: boolean, valueOut: boolean) {\n\t\treturn this.type;\n\t}\n\n\t/**\n\t * A detailed textual representation of the block, assuming it is configured.\n\t * By default, returns the summary text.\n\t * @param valueIn whether there is a value producer on the left\n\t * @param valueOut whether there is a value consumer on the right\n\t*/\n\tprotected detailedTextIfConfigured(userContext: OuterCtx | null, valueIn: boolean, valueOut: boolean) {\n\t\treturn this.summaryText(userContext, valueIn, valueOut);\n\t}\n\n\t/**\n\t * A detailed textual representation of the block.\n\t * By default, returns the summary text.\n\t * @param valueIn whether there is a value producer on the left\n\t * @param valueOut whether there is a value consumer on the right\n\t*/\n\tdetailedText(userContext: OuterCtx | null, valueIn: boolean, valueOut: boolean, detailedIfNotConfigured = false) {\n\t\tconst needsConfigurationText = this.needsConfigurationText(userContext?.configContext() ?? null, detailedIfNotConfigured);\n\t\tif (needsConfigurationText) {\n\t\t\treturn needsConfigurationText;\n\t\t} else {\n\t\t\treturn this.detailedTextIfConfigured(userContext, valueIn, valueOut);\n\t\t}\n\t}\n\n\t/**\n\t * Ensure that the integrity of the block, asserts if invalid\n\t */\n\tvalidate() {\n\t\tassertBoolean(this.movementLocked, 'movementLocked');\n\t\tassertBoolean(this.parametersLocked, 'parametersLocked');\n\t}\n\n\t/**\n\t * Compare this to that, and aborts if they are different\n\t * @param that other to compare to\n\t * @param ctx debug context\n\t */\n\tassertEqual(that: Block, ctx: string) {\n\t\tassertClassEqual(this, that, ctx);\n\t\tconst thisAsString = JSON.stringify(this);\n\t\tconst thatAsString = JSON.stringify(that);\n\t\tassert(\n\t\t\tthisAsString === thatAsString,\n\t\t\t`${ctx}: different stringified content between lhs \"${thisAsString}\" and rhs \"${thatAsString}\"`\n\t\t);\n\t}\n}\n\nexport const enum Category {\n\tCondition = 0,\n\tAction,\n}\n\nexport interface RenderCacheKey, Config> {\n\tblock: Block,\n\tuserContext: Outer,\n\tvalueIn: boolean,\n\tvalueOut: boolean\n}\n\n/** The function used to render block miniatures, userContext is application-specific. */\nexport type BlockRenderFunction, ConfigCtx> =\n\t(ctx: AnyCanvasRenderingContext2D, args: RenderCacheKey ) => void;\n\n/** The definition of a block, everything needed to display it. */\nexport interface Definition, ConfigCtx> {\n\t/** Whether the block is an condition or an action, if not given it is both */\n\tcategory?: Category;\n\t/** A function that renders the block miniature in a 64x64 px circle */\n\trenderer: BlockRenderFunction;\n\t/** Default values for this block, must be of the type of the block */\n\tdefaultValue: Block;\n\t/** Brief description of the block */\n\tdescription: string;\n\t/** A description of what the block does when connected to an input value */\n\tinputValueDescription?: string;\n\t/** A description of what the block does when connected to an output value */\n\toutputValueDescription?: string;\n}\n\n/** The definition of a block, everything needed to display and edit it. */\nexport interface EditorDefinition, ConfigCtx> extends Definition {\n\t/** An editor for this block */\n\teditor: BlockEditorScreen | null;\n}"],"names":["spec_Identifier","__proto__","fn","let","mut","for","in","if","else","match","_","not","and","or","return","deserialize","version","states","stateData","goto","nodeNames","maxTerm","nodeProps","skippedNodes","repeatNodeCount","tokenData","tokenizers","topRules","specialized","term","get","value","tokenPrec","PlayAnimationBlock","index","endMode","constructor","fbOrAnimation","lockState","super","animation","this","validate","clone","name","quotedAnimNameOrIndex","userContext","objectType","animNameOrIndex","animName","args","summaryText","detailedTextIfConfigured","text","ReturnToIdle","Loop","Stay","serialise","builder","createPlayAnimation","fbActionType","PlayAnimation","kind","premium","needsConfiguration","animations","frameCount","needsConfigurationFix","getMiniatureKey","actionEffects","overrides","Delete","bb","bb_pos","__init","i","getRootAsDelete","obj","readInt32","position","getSizePrefixedRootAsDelete","setPosition","startDelete","startObject","endDelete","endObject","createDelete","DeleteBlock","thisObject","ShowDialogBlock","screen","endGame","createShowDialog","ShowDialog","freezes","MusicBlock","atmosphere","gains","timeConstant","atmosphereOrFbMusic","fbMusic","gain0","gain1","gain2","crossFadeTimeConstant","durationText","toFixed","map","g","startSetMusic","addAtmosphere","addGains","createMusicGains","addCrossFadeTimeConstant","endSetMusic","SetMusic","length","gain","join","AtmosphereDescriptions","duration","AtmosphereCount","ChannelSuffix","ChannelCount","AtmosphereData","buffers","audioCtx","atmosphereIndex","instance","decodedPromises","async","url","arrayBuffer","Promise","all","buffer","Atmosphere","description","data","ending","createGains","createSources","gainValues","node","channel","source","createBufferSource","connect","onended","disconnect","start","setTimeout","createGain","destination","stop","console","debug","stopAndDisconnect","silenceSmooth","changeGain","setValueAtTime","currentTime","setTargetAtTime","MIN_GAIN","GainControllers","sources","nodes","garbageCollect","isZero","WebAudioMusic","atmosphereDataMap","Map","savedGainsWhileHidden","info","createBuffer","document","addEventListener","visibilityState","undefined","getAtmosphereData","changeAllGains","preloadAtmospheres","atmospheres","newDataMap","new","set","changeGainSmooth","changeGainNow","setAtmosphere","newGains","oldGains","available","keys","FakeMusic","music","getMusic","forceFake","SoundBlock","soundOrFbPlaySound","sound","game","sounds","samples","rate","getSamplesAndRate","createPlaySound","PlaySound","SpawnBlock","angle","speed","orientation","scale","pos","compatFixedChildVelocity","objectTypeOrFbSpawn","angleOrObjectTypes","speedOrFromVersion","fbSpawn","childPoseAndScale","linearVelocity","childTwist","translation","norm","rotationAngle","scaleFactor","onPlaceText","angleText","angleVector","fromAngleAndLength","anObjectOfType","objectTypes","startSpawn","addChildPoseAndScale","addChildTwist","addShiftAway","addObjectType","endSpawn","Spawn","hasReferencesToObjectType","releaseReferencesToObjectType","assertEqual","_that","ctx","that","id","Stop","getRootAsStop","getSizePrefixedRootAsStop","startStop","endStop","createStop","StopBlock","RestartTimer","getRootAsRestartTimer","getSizePrefixedRootAsRestartTimer","startRestartTimer","endRestartTimer","createRestartTimer","RestartTimerBlock","isEffectlessOnInit","Vibrate","getRootAsVibrate","getSizePrefixedRootAsVibrate","startVibrate","endVibrate","createVibrate","VibrateBlock","nodeAsCandliVariableFnPosition","code","varNode","getChild","from","to","substring","renameCandliVariable","oldName","newName","replacements","cursor","parse","push","next","reverse","end","varShortName","address","scope","varIndexToText","variables","varLongNameNom","namePart","varLongNameAcc","AnimationIsBlock","fbOrAnimations","Set","size","animationsOfset","createAnimationsVector","createAnimationIs","fbConditionType","AnimationIs","sort","decodeFbAngularIntervals","fbContact","arcsCount","arcsLength","result","Uint16Array","arc","arcs","roleUniqueToObjectTypes","types","ots","roles","ot","forEach","role","has","delete","objects","CollisionBlock","others","othersOrFbContact","angularGridOrObjectTypes","othersText","namedOthers","filter","o","otherCount","additionalText","conditionText","sides","sidesText","animText","otherTypesId","other","otherTypesOffset","createOtherTypesVector","startArcsVector","createContactAngularInterval","arcsOffset","endVector","animationOffset","createString","startContact","addOtherTypes","addArcs","addAnimation","endContact","Contact","anim","some","namedAnimations","includes","collidesAtAngle","Math","PI","_value","mkOthersIds","othersIds","entries","JSON","stringify","mkSortedArcs","sortedArcs","a","b","x","Init","getRootAsInit","getSizePrefixedRootAsInit","startInit","endInit","createInit","InitBlock","isInit","TimerBlock","period","repeat","periodOrFbTimer","uint16Period","round","createTimer","Timer","Touch","getRootAsTouch","getSizePrefixedRootAsTouch","startTouch","endTouch","createTouch","TouchBlock","RandomValueBlock","min","max","inputToMin","minOrFbRandomValue","tmp","inputValuePortPresence","outputValuePortPresence","createRandomValue","_userContext","valueIn","fbGenericType","RandomValue","execFns","getCode","codeOrFb","ScriptGenericBlock","scriptCtx","rebuildCompiler","condition_block_script_compiler","createScriptGeneric","ScriptGeneric","colorString","colorConvert","Color","space","components","valueOrComponents","alphaOrSpace","Float32Array","Array","model","alpha","rgb","toSpace","hsl","hsv","hwb","rgbObject","toObject","hslObject","hsvObject","hwbObject","rgbHexString","c","hex","toString","integerComponents","rgbaHexString","rgbNumber","fromRgbNumber","color","fromArgbNumber","argbNumber","isEqual","setComponent","setAlpha","assertSpace","Error","newComponents","labels","Keys","key","lighten","amount","darken","lab","rgbaInterpolation","thatRatio","thisRgb","thisRatio","thatRgb","black","white","transparent","assertColor","colorSpaceValid","Action","getRootAsAction","getSizePrefixedRootAsAction","actionType","offset","__offset","readUint8","NONE","action","__union","movementLocked","readInt8","parametersLocked","startAction","addActionType","addFieldInt8","addAction","actionOffset","addFieldOffset","addMovementLocked","addParametersLocked","endAction","createAction","AddAcceleration","getRootAsAddAcceleration","getSizePrefixedRootAsAddAcceleration","readInt16","y","relative","compatFixedMagnitude","startAddAcceleration","addX","addFieldInt16","addY","addRelative","addCompatFixedMagnitude","endAddAcceleration","createAddAcceleration","AddAngularAcceleration","getRootAsAddAngularAcceleration","getSizePrefixedRootAsAddAngularAcceleration","startAddAngularAcceleration","addAmount","endAddAngularAcceleration","createAddAngularAcceleration","AddAngularVelocity","getRootAsAddAngularVelocity","getSizePrefixedRootAsAddAngularVelocity","startAddAngularVelocity","endAddAngularVelocity","createAddAngularVelocity","AddVelocity","getRootAsAddVelocity","getSizePrefixedRootAsAddVelocity","startAddVelocity","endAddVelocity","createAddVelocity","AnyAction","Brake","getRootAsBrake","getSizePrefixedRootAsBrake","intensity","readUint16","startBrake","addIntensity","endBrake","createBrake","ChangeVariableOperation","ChangeVariable","getRootAsChangeVariable","getSizePrefixedRootAsChangeVariable","operation","ADD","startChangeVariable","addAddress","addValue","addOperation","endChangeVariable","createChangeVariable","EndAnimationMode","Flip","getRootAsFlip","getSizePrefixedRootAsFlip","flipX","flipY","startFlip","addFlipX","addFlipY","endFlip","createFlip","MusicGains","sizeOf","prep","writeInt8","getRootAsPlayAnimation","getSizePrefixedRootAsPlayAnimation","startPlayAnimation","addEndMode","endPlayAnimation","getRootAsPlaySound","getSizePrefixedRootAsPlaySound","startPlaySound","addSound","addGain","endPlaySound","ScriptAction","getRootAsScriptAction","getSizePrefixedRootAsScriptAction","optionalEncoding","__string","continuous","startScriptAction","addCode","codeOffset","addContinuous","endScriptAction","createScriptAction","getRootAsSetMusic","getSizePrefixedRootAsSetMusic","gainsOffset","addFieldStruct","getRootAsShowDialog","getSizePrefixedRootAsShowDialog","startShowDialog","addScreen","addEndGame","endShowDialog","getRootAsSpawn","getSizePrefixedRootAsSpawn","shiftAway","childPoseAndScaleOffset","childTwistOffset","addCompatFixedChildVelocity","Teleport","getRootAsTeleport","getSizePrefixedRootAsTeleport","beacon","toBeaconTransform","moveCamera","transformParts","startTeleport","addBeacon","addToBeaconTransform","toBeaconTransformOffset","addMoveCamera","addTransformParts","endTeleport","Packed32","bgra","readUint32","createPacked32","writeInt32","getRootAsAnimationIs","getSizePrefixedRootAsAnimationIs","__vector","animationsLength","__vector_len","animationsArray","bytes","byteOffset","startAnimationIs","addAnimations","animationsOffset","startVector","addInt16","startAnimationsVector","numElems","endAnimationIs","AnyCondition","ComparisonOperation","Comparison","getRootAsComparison","getSizePrefixedRootAsComparison","EQUAL","inputSide","LEFT","startComparison","addInputSide","endComparison","createComparison","Condition","getRootAsCondition","getSizePrefixedRootAsCondition","conditionType","condition","inverted","startCondition","addConditionType","addCondition","conditionOffset","addInverted","endCondition","createCondition","ContactAngularInterval","writeInt16","getRootAsContact","getSizePrefixedRootAsContact","otherTypes","otherTypesLength","otherTypesArray","startOtherTypesVector","createContact","InputButton","getRootAsInputButton","getSizePrefixedRootAsInputButton","number","player","startInputButton","addNumber","addPlayer","endInputButton","createInputButton","ScriptCondition","getRootAsScriptCondition","getSizePrefixedRootAsScriptCondition","startScriptCondition","endScriptCondition","createScriptCondition","getRootAsTimer","getSizePrefixedRootAsTimer","startTimer","addPeriod","addRepeat","endTimer","Polygon2","getRootAsPolygon2","getSizePrefixedRootAsPolygon2","points","pointsLength","startPolygon2","addPoints","pointsOffset","startPointsVector","endPolygon2","createPolygon2","CircularShape","getRootAsCircularShape","getSizePrefixedRootAsCircularShape","radius","readFloat32","startCircularShape","addRadius","addFieldFloat32","endCircularShape","createCircularShape","RectangularShape","getRootAsRectangularShape","getSizePrefixedRootAsRectangularShape","startRectangularShape","addSize","sizeOffset","endRectangularShape","createRectangularShape","ConvexShape","getRootAsConvexShape","getSizePrefixedRootAsConvexShape","polygon","__indirect","startConvexShape","addPolygon","polygonOffset","endConvexShape","createConvexShape","TwoPIToFixedAngle15","Fixed88ToFloat","FloatToFixed88","numberOr","v","d","Number","isNaN","fromFbVector2","fbVector2","fromFbScalingTranslation2","fbTransform","translationX","translationY","fromFbScalingRotation2","fromFbSimilarityTransform2","fromFbTwist2","fbTwist","linearX","linearY","angular","fromFbColorPacked32","fbPacked32","fromFbObjectTypeRefOptional","fromFbObjectTypeRef","assert","fromFbArray","sourceFbObject","arrayFbName","ctor","ctorArgs","String","getter","bind","decoded","fromFbArrayWithFactory","factory","factoryArgs","fromFbArrayIdentity","toFbVector2","vector","createVector2","toFbScalingTranslation2","createScalingTranslation2","toFbScalingRotation2","createScalingRotation2","toFbSimilarityTransform2","transformOrScaleFactor","transform","createSimilarityTransform2","toFbTwist2","linear","createTwist2","toFbColorPacked32","toFbObjectTypeRef","toFbConvexShape","forEachRight","point","toFbPolygon2","toFbAnyShape","shape","shapeType","shapeOffset","toFbRectangularShape","toFbCircularShape","fromFbAnyShape","fbAnyShape","convexShape","fbPolygon","AnimationFrame","getRootAsAnimationFrame","getSizePrefixedRootAsAnimationFrame","textureImageIndex","partFromPixelTransform","startAnimationFrame","addTextureImageIndex","addPartFromPixelTransform","partFromPixelTransformOffset","endAnimationFrame","Animation","getRootAsAnimation","getSizePrefixedRootAsAnimation","frames","framesLength","fps","startAnimation","addFrames","framesOffset","createFramesVector","addOffset","startFramesVector","addName","nameOffset","addFps","endAnimation","createAnimation","AnyBody","CameraPosition","getRootAsCameraPosition","getSizePrefixedRootAsCameraPosition","startCameraPosition","addPosition","positionOffset","endCameraPosition","createCameraPosition","CameraTrackedObjectOrPosition","CameraTrackedObject","getRootAsCameraTrackedObject","getSizePrefixedRootAsCameraTrackedObject","startCameraTrackedObject","addInstance","addFieldInt32","endCameraTrackedObject","createCameraTrackedObject","Camera","getRootAsCamera","getSizePrefixedRootAsCamera","extentX","trackedObjectOrPositionType","trackedObjectOrPosition","backgroundColor","freeMotionBoxFractions","centerDisplacement","extentY","startCamera","addExtentX","addTrackedObjectOrPositionType","addTrackedObjectOrPosition","trackedObjectOrPositionOffset","addBackgroundColor","backgroundColorOffset","addFreeMotionBoxFractions","freeMotionBoxFractionsOffset","addCenterDisplacement","centerDisplacementOffset","addExtentY","endCamera","Dialog","getRootAsDialog","getSizePrefixedRootAsDialog","imageIndex","startDialog","addImageIndex","addScaleFactor","endDialog","createDialog","Game","getRootAsGame","getSizePrefixedRootAsGame","dataVersion","objectTypesLength","dialogs","dialogsLength","levels","levelsLength","imageKeys","imageKeysLength","twoPlayers","oldVariableNames","oldVariableNamesLength","oldVariableNamesArray","roleNames","roleNamesLength","soundKeys","soundKeysLength","variableVisibility","variableVisibilityLength","variableVisibilityArray","Int8Array","variableNames","variableNamesLength","scriptDependencies","scriptDependenciesLength","scriptModules","scriptModulesLength","limitOverrides","limitOverridesLength","limitOverrideDuplicationCounter","startGame","addDataVersion","addObjectTypes","objectTypesOffset","createObjectTypesVector","startObjectTypesVector","addDialogs","dialogsOffset","createDialogsVector","startDialogsVector","addLevels","levelsOffset","createLevelsVector","startLevelsVector","addImageKeys","imageKeysOffset","createImageKeysVector","startImageKeysVector","addTwoPlayers","addOldVariableNames","oldVariableNamesOffset","createOldVariableNamesVector","startOldVariableNamesVector","addRoleNames","roleNamesOffset","createRoleNamesVector","startRoleNamesVector","addSoundKeys","soundKeysOffset","createSoundKeysVector","startSoundKeysVector","addVariableVisibility","variableVisibilityOffset","createVariableVisibilityVector","addInt8","startVariableVisibilityVector","addVariableNames","variableNamesOffset","createVariableNamesVector","startVariableNamesVector","addScriptDependencies","scriptDependenciesOffset","createScriptDependenciesVector","startScriptDependenciesVector","addScriptModules","scriptModulesOffset","createScriptModulesVector","startScriptModulesVector","addLimitOverrides","limitOverridesOffset","createLimitOverridesVector","startLimitOverridesVector","addLimitOverrideDuplicationCounter","createGame","Level","getRootAsLevel","getSizePrefixedRootAsLevel","objectInstances","objectInstancesLength","camera","gravity","airFriction","editorToWorld","startLevel","addObjectInstances","objectInstancesOffset","createObjectInstancesVector","startObjectInstancesVector","addCamera","cameraOffset","addGravity","addAirFriction","addEditorToWorld","editorToWorldOffset","endLevel","LimitOverride","getRootAsLimitOverride","getSizePrefixedRootAsLimitOverride","startLimitOverride","endLimitOverride","createLimitOverride","ObjectInstance","getRootAsObjectInstance","getSizePrefixedRootAsObjectInstance","type","poseAndScale","editionLocked","deletionLocked","copyLocked","selectionLocked","variablesLength","startObjectInstance","addType","addPoseAndScale","poseAndScaleOffset","addEditionLocked","addDeletionLocked","addCopyLocked","addSelectionLocked","addVariables","variablesOffset","startVariablesVector","endObjectInstance","ObjectKind","ObjectType","getRootAsObjectType","getSizePrefixedRootAsObjectType","Kinematic","stickiness","bounciness","canRotate","partsType","parts","behaviour","behaviourLength","editorLastTransform","instantiationLocked","density","rolesLength","rolesArray","startObjectType","addKind","addStickiness","addBounciness","addCanRotate","addPartsType","addParts","partsOffset","addBehaviour","behaviourOffset","createBehaviourVector","startBehaviourVector","addEditorLastTransform","editorLastTransformOffset","addInstantiationLocked","addDensity","addRoles","rolesOffset","createRolesVector","startRolesVector","endObjectType","Rule","getRootAsRule","getSizePrefixedRootAsRule","conditions","conditionsLength","actions","actionsLength","conditionsExtendLocked","actionsExtendLocked","startRule","addConditions","conditionsOffset","createConditionsVector","startConditionsVector","addActions","actionsOffset","createActionsVector","startActionsVector","addConditionsExtendLocked","addActionsExtendLocked","endRule","createRule","ScriptModule","getRootAsScriptModule","getSizePrefixedRootAsScriptModule","startScriptModule","endScriptModule","createScriptModule","SinglePartBody","getRootAsSinglePartBody","getSizePrefixedRootAsSinglePartBody","pixelToBodyTransform","startSinglePartBody","addShapeType","addShape","addPixelToBodyTransform","pixelToBodyTransformOffset","addAlpha","endSinglePartBody","UUID","getRootAsUUID","getSizePrefixedRootAsUUID","valueLength","valueArray","Uint8Array","startUUID","valueOffset","createValueVector","startValueVector","endUUID","createUUID","VariableIndexAndValue","createVariableIndexAndValue","writeFloat32","pad","VariableName","getRootAsVariableName","getSizePrefixedRootAsVariableName","startVariableName","typeOffset","endVariableName","createVariableName","AnyGenericBlock","BinaryArithmeticInput","BinaryArithmeticOperation","BinaryArithmetic","getRootAsBinaryArithmetic","getSizePrefixedRootAsBinaryArithmetic","lInput","VARIABLE","lAddress","lValue","rInput","rAddress","rValue","startBinaryArithmetic","addLInput","addLAddress","addLValue","addRInput","addRAddress","addRValue","endBinaryArithmetic","createBinaryArithmetic","GenericBlockContainer","getRootAsGenericBlockContainer","getSizePrefixedRootAsGenericBlockContainer","genericBlockType","genericBlock","startGenericBlockContainer","addGenericBlockType","addGenericBlock","genericBlockOffset","endGenericBlockContainer","createGenericBlockContainer","InputToBinarySide","getRootAsRandomValue","getSizePrefixedRootAsRandomValue","startRandomValue","addMin","addMax","addInputToMin","endRandomValue","ReadVariable","getRootAsReadVariable","getSizePrefixedRootAsReadVariable","startReadVariable","endReadVariable","createReadVariable","getRootAsScriptGeneric","getSizePrefixedRootAsScriptGeneric","startScriptGeneric","endScriptGeneric","ScalingRotation2","scale_factor","rotation_angle","ScalingTranslation2","translation_x","translation_y","SimilarityTransform2","Twist2","linear_x","linear_y","Vector2","AnyShape","CandliBlock","_objectType","loadGameFromBinary","gameKey","storage","gameNamePromise","getGameName","binaryGame","loadGameBinary","fbGame","fbUUID","imagePromises","imageAssets","loadAssetWithBacklog","soundPromises","soundAssets","scriptPromises","path","locator","parseDependencyPath","packageName","images","scripts","collectMusicAtmospheres","forgetAllBut","DisplayAction","SealedDisplayList","extent","reduce","acc","cur","union","getExtentForRange","startIndex","endIndex","rect","getActions","callback","_currentValue","_index","indent","isCanvas","HTMLCanvasElement","OffscreenCanvas","DebugOptions","static","Font","Sprite","RenderContext","vectorQualitativeDescription","nullText","epsilon","leftRightText","upDownText","ContentTypes","ImagePng","AudioWav","Json","Text","ApiError","method","statusCode","body","getAudioContext","AudioContext","window","webkitAudioContext","state","resume","decodeAudioData","resolve","reject","assertVector2Array","v2s","v2","assertVector2Equal","lhs","rhs","assertMemberVector2Equal","assertSimilarityTransformEqual","assertMemberSimilarityTransformEqual","assertColorEqual","assertMemberColorEqual","assertObjectTypeOptEqual","lhsId","rhsId","assertMemberObjectTypeOptEqual","assertShapeEqual","lArray","rArray","assertVector2ArrayEqual","moveRange","setter","Block","editLocked","locked","isCondition","isInstantaneousAction","isContinuousAction","isGeneric","isPremiumOnly","paid","isEditableWithIO","_valueIn","_valueOut","userModifiable","_configContext","needsConfigurationText","configContext","detailed","prefix","inputValuePossible","inputValueMandatory","outputValuePossible","outputValueMandatory","valueOut","detailedText","detailedIfNotConfigured","thisAsString","thatAsString"],"sourceRoot":""}