From 48024e5b026cad8e6c2d07e9190dce443614fdfb Mon Sep 17 00:00:00 2001 From: mileswa1q22 Date: Wed, 5 Feb 2025 19:30:35 +0000 Subject: [PATCH] added things to ba --- .../WebGames-master/games/cap/compiler.js | 968 +++ .../WebGames-master/games/cap/doc.md | 5 + .../games/cap/fonts/BitCell.ttf | Bin 0 -> 67612 bytes .../WebGames-master/games/cap/icon1024.png | Bin 0 -> 12290 bytes .../WebGames-master/games/cap/icon16.png | Bin 0 -> 821 bytes .../WebGames-master/games/cap/icon180.png | Bin 0 -> 5651 bytes .../WebGames-master/games/cap/icon192.png | Bin 0 -> 5611 bytes .../WebGames-master/games/cap/icon32.png | Bin 0 -> 2309 bytes .../WebGames-master/games/cap/icon512.png | Bin 0 -> 7838 bytes .../WebGames-master/games/cap/icon64.png | Bin 0 -> 4505 bytes .../WebGames-master/games/cap/index.html | 1419 ++++ .../WebGames-master/games/cap/manifest.json | 33 + .../WebGames-master/games/cap/microengine.js | 6623 +++++++++++++++++ .../WebGames-master/games/cap/music/music.mp3 | Bin 2372406 -> 1711500 bytes .../WebGames-master/games/cap/parser.js | 812 ++ .../WebGames-master/games/cap/processor.js | 1542 ++++ .../WebGames-master/games/cap/program.js | 371 + .../WebGames-master/games/cap/routine.js | 530 ++ .../WebGames-master/games/cap/runner.js | 385 + .../games/cap/sounds/death.wav | Bin 0 -> 47912 bytes .../WebGames-master/games/cap/sounds/jump.wav | Bin 0 -> 16486 bytes .../WebGames-master/games/cap/sprites/bas.png | Bin 0 -> 4327 bytes .../games/cap/sprites/blade.png | Bin 0 -> 472 bytes .../games/cap/sprites/cage.png | Bin 0 -> 371 bytes .../games/cap/sprites/chick.png | Bin 0 -> 614 bytes .../games/cap/sprites/columnblade.png | Bin 0 -> 288 bytes .../games/cap/sprites/columnempty.png | Bin 0 -> 238 bytes .../games/cap/sprites/cube.png | Bin 0 -> 288 bytes .../games/cap/sprites/cube_ghost.png | Bin 0 -> 294 bytes .../games/cap/sprites/icon.png | Bin 0 -> 3749 bytes .../games/cap/sprites/mockup_bas.png | Bin 0 -> 45262 bytes .../games/cap/sprites/piece.png | Bin 0 -> 112 bytes .../games/cap/sprites/poster.png | Bin 0 -> 31500 bytes .../games/cap/sprites/spike.png | Bin 0 -> 501 bytes .../games/cap/sprites/tower.png | Bin 0 -> 1141 bytes .../games/cap/sprites/tower1.png | Bin 0 -> 839 bytes .../games/cap/sprites/tower2.png | Bin 0 -> 564 bytes .../WebGames-master/games/cap/token.js | 201 + .../WebGames-master/games/cap/tokenizer.js | 343 + .../WebGames-master/games/cap/transpiler.js | 244 + ba.html | 6 +- 41 files changed, 13481 insertions(+), 1 deletion(-) create mode 100644 WebGames-master/WebGames-master/games/cap/compiler.js create mode 100644 WebGames-master/WebGames-master/games/cap/doc.md create mode 100644 WebGames-master/WebGames-master/games/cap/fonts/BitCell.ttf create mode 100644 WebGames-master/WebGames-master/games/cap/icon1024.png create mode 100644 WebGames-master/WebGames-master/games/cap/icon16.png create mode 100644 WebGames-master/WebGames-master/games/cap/icon180.png create mode 100644 WebGames-master/WebGames-master/games/cap/icon192.png create mode 100644 WebGames-master/WebGames-master/games/cap/icon32.png create mode 100644 WebGames-master/WebGames-master/games/cap/icon512.png create mode 100644 WebGames-master/WebGames-master/games/cap/icon64.png create mode 100644 WebGames-master/WebGames-master/games/cap/index.html create mode 100644 WebGames-master/WebGames-master/games/cap/manifest.json create mode 100644 WebGames-master/WebGames-master/games/cap/microengine.js rename cas.zip => WebGames-master/WebGames-master/games/cap/music/music.mp3 (72%) create mode 100644 WebGames-master/WebGames-master/games/cap/parser.js create mode 100644 WebGames-master/WebGames-master/games/cap/processor.js create mode 100644 WebGames-master/WebGames-master/games/cap/program.js create mode 100644 WebGames-master/WebGames-master/games/cap/routine.js create mode 100644 WebGames-master/WebGames-master/games/cap/runner.js create mode 100644 WebGames-master/WebGames-master/games/cap/sounds/death.wav create mode 100644 WebGames-master/WebGames-master/games/cap/sounds/jump.wav create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/bas.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/blade.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/cage.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/chick.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/columnblade.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/columnempty.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/cube.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/cube_ghost.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/icon.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/mockup_bas.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/piece.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/poster.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/spike.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/tower.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/tower1.png create mode 100644 WebGames-master/WebGames-master/games/cap/sprites/tower2.png create mode 100644 WebGames-master/WebGames-master/games/cap/token.js create mode 100644 WebGames-master/WebGames-master/games/cap/tokenizer.js create mode 100644 WebGames-master/WebGames-master/games/cap/transpiler.js diff --git a/WebGames-master/WebGames-master/games/cap/compiler.js b/WebGames-master/WebGames-master/games/cap/compiler.js new file mode 100644 index 00000000..c7e912bd --- /dev/null +++ b/WebGames-master/WebGames-master/games/cap/compiler.js @@ -0,0 +1,968 @@ +var Compiler, LocalLayer; + +Compiler = (function() { + class Compiler { + constructor(program) { + var i, j, len, ref, s; + this.program = program; + this.code_saves = []; + this.code = ""; + this.code = [this.code]; + this.routine = new Routine(); + this.locals = new Locals(this); + this.count = 0; + ref = this.program.statements; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + s = ref[i]; + this.compile(s); + if (i < this.program.statements.length - 1) { + this.routine.POP(s); + } + } + this.routine.optimize(); + this.routine.resolveLabels(); + this.count += this.routine.opcodes.length; + this.routine.locals_size = this.locals.max_index; + } + + + // console.info(JSON.stringify @routine.export()) + // @routine = new Routine(0).import( @routine.export() ) + compile(statement) { + if (statement instanceof Program.Value) { + return this.compileValue(statement); + } else if (statement instanceof Program.Operation) { + return this.compileOperation(statement); + } else if (statement instanceof Program.Assignment) { + return this.compileAssignment(statement); + } else if (statement instanceof Program.Variable) { + return this.compileVariable(statement); + } else if (statement instanceof Program.Function) { + return this.compileFunction(statement); + } else if (statement instanceof Program.FunctionCall) { + return this.compileFunctionCall(statement); + } else if (statement instanceof Program.While) { + return this.compileWhile(statement); + } + if (statement instanceof Program.SelfAssignment) { + return this.compileSelfAssignment(statement); + } else if (statement instanceof Program.Braced) { + return this.compileBraced(statement); + } else if (statement instanceof Program.CreateObject) { + return this.compileCreateObject(statement); + } else if (statement instanceof Program.Field) { + return this.compileField(statement); + } else if (statement instanceof Program.Negate) { + return this.compileNegate(statement); + } else if (statement instanceof Program.For) { + return this.compileFor(statement); + } else if (statement instanceof Program.ForIn) { + return this.compileForIn(statement); + } else if (statement instanceof Program.Not) { + return this.compileNot(statement); + } else if (statement instanceof Program.Return) { + return this.compileReturn(statement); + } else if (statement instanceof Program.Condition) { + return this.compileCondition(statement); + } else if (statement instanceof Program.Break) { + return this.compileBreak(statement); + } else if (statement instanceof Program.Continue) { + return this.compileContinue(statement); + } else if (statement instanceof Program.CreateClass) { + return this.compileCreateClass(statement); + } else if (statement instanceof Program.NewCall) { + return this.compileNewCall(statement); + } else if (statement instanceof Program.After) { + return this.compileAfter(statement); + } else if (statement instanceof Program.Every) { + return this.compileEvery(statement); + } else if (statement instanceof Program.Do) { + return this.compileDo(statement); + } else if (statement instanceof Program.Sleep) { + return this.compileSleep(statement); + } else if (statement instanceof Program.Delete) { + return this.compileDelete(statement); + } else if (true) { + console.info(statement); + throw "Not implemented"; + } + } + + compileAssignment(statement) { + var arg_index, f, i, index, j, ref; + if (statement.local) { + if (statement.field instanceof Program.Variable) { + if (statement.expression instanceof Program.Function) { + index = this.locals.register(statement.field.identifier); //# register function locally first + this.compile(statement.expression); //# then compile function which may refer to itself + this.routine.arg1[this.routine.arg1.length - 1].import_self = index; + return this.routine.STORE_LOCAL(index, statement); + } else if (statement.expression instanceof Program.After || statement.expression instanceof Program.Do || statement.expression instanceof Program.Every) { + index = this.locals.register(statement.field.identifier); //# register thread locally first + arg_index = this.routine.arg1.length; //# thread main routine will land here + this.compile(statement.expression); //# then compile function which may refer to itself + this.routine.arg1[arg_index].import_self = index; + return this.routine.STORE_LOCAL(index, statement); + } else { + this.compile(statement.expression); //# first compile expression which may refer to another local with same name + index = this.locals.register(statement.field.identifier); //# then register a local for that name + return this.routine.STORE_LOCAL(index, statement); + } + } else { + throw "illegal"; + } + } else { + if (statement.field instanceof Program.Variable) { + if (this.locals.get(statement.field.identifier) != null) { + this.compile(statement.expression); + index = this.locals.get(statement.field.identifier); + this.routine.STORE_LOCAL(index, statement); + } else if (statement.expression instanceof Program.CreateClass) { + return this.compileUpdateClass(statement.expression, statement.field.identifier); + } else { + this.compile(statement.expression); + this.routine.STORE_VARIABLE(statement.field.identifier, statement); + } + } else { + f = statement.field; + if (f.expression instanceof Program.Variable) { + if (f.expression.identifier === "this") { + this.routine.LOAD_THIS(f); + } else if (this.locals.get(f.expression.identifier) != null) { + index = this.locals.get(f.expression.identifier); + this.routine.LOAD_LOCAL_OBJECT(index, f.expression); + } else if (f.expression.identifier === "global") { + this.routine.LOAD_GLOBAL(f); + } else { + this.routine.LOAD_VARIABLE_OBJECT(f.expression.identifier, statement); + } + } else { + this.compile(f.expression); + this.routine.MAKE_OBJECT(statement); + } + for (i = j = 0, ref = f.chain.length - 2; j <= ref; i = j += 1) { + this.compile(f.chain[i]); + this.routine.LOAD_PROPERTY_OBJECT(f.chain[i]); + } + this.compile(f.chain[f.chain.length - 1]); + this.compile(statement.expression); + return this.routine.STORE_PROPERTY(statement); + } + } + } + + compileSelfAssignment(statement) { + var c, f, i, index, j, op, ref; + switch (statement.operation) { + case Token.TYPE_PLUS_EQUALS: + op = "ADD"; + break; + case Token.TYPE_MINUS_EQUALS: + op = "SUB"; + break; + case Token.TYPE_MULTIPLY_EQUALS: + op = "MUL"; + break; + case Token.TYPE_DIVIDE_EQUALS: + op = "DIV"; + break; + case Token.TYPE_MODULO_EQUALS: + op = "MODULO"; + break; + case Token.TYPE_AND_EQUALS: + op = "BINARY_AND"; + break; + case Token.TYPE_OR_EQUALS: + op = "BINARY_OR"; + } + if (statement.field instanceof Program.Variable) { + if (this.locals.get(statement.field.identifier) != null) { + index = this.locals.get(statement.field.identifier); + this.routine.LOAD_LOCAL(index, statement); + this.compile(statement.expression); + this.routine[op](statement, 1); + this.routine.STORE_LOCAL(index, statement); + } else { + this.routine.LOAD_VARIABLE(statement.field.identifier, statement); + this.compile(statement.expression); + this.routine[op](statement, 1); + this.routine.STORE_VARIABLE(statement.field.identifier, statement); + } + } else { + f = statement.field; + if (f.expression instanceof Program.Variable) { + if (f.expression.identifier === "this") { + this.routine.LOAD_THIS(f); + } else if (this.locals.get(f.expression.identifier) != null) { + index = this.locals.get(f.expression.identifier); + this.routine.LOAD_LOCAL_OBJECT(index, statement); + } else if (f.expression.identifier === "global") { + this.routine.LOAD_GLOBAL(f); + } else { + this.routine.LOAD_VARIABLE_OBJECT(f.expression.identifier, statement); + } + } else { + this.compile(f.expression); + this.routine.MAKE_OBJECT(statement); + } + for (i = j = 0, ref = f.chain.length - 2; j <= ref; i = j += 1) { + this.compile(f.chain[i]); + this.routine.LOAD_PROPERTY_OBJECT(f.chain[i]); + } + c = f.chain[f.chain.length - 1]; + this.compile(f.chain[f.chain.length - 1]); + this.routine.LOAD_PROPERTY_ATOP(statement); + this.compile(statement.expression); + this.routine[op](statement, 1); + return this.routine.STORE_PROPERTY(statement); + } + } + + compileOperation(op) { + var jump, ref, ref1; + if ((ref = op.operation) === "+" || ref === "-" || ref === "*" || ref === "/" || ref === "%" || ref === "&" || ref === "|" || ref === "<<" || ref === ">>") { + this.compile(op.term1); + this.compile(op.term2); + switch (op.operation) { + case "+": + this.routine.ADD(op); + break; + case "-": + this.routine.SUB(op); + break; + case "*": + this.routine.MUL(op); + break; + case "/": + this.routine.DIV(op); + break; + case "%": + this.routine.MODULO(op); + break; + case "&": + this.routine.BINARY_AND(op); + break; + case "|": + this.routine.BINARY_OR(op); + break; + case "<<": + this.routine.SHIFT_LEFT(op); + break; + case ">>": + this.routine.SHIFT_RIGHT(op); + } + } else if ((ref1 = op.operation) === "==" || ref1 === "!=" || ref1 === "<" || ref1 === ">" || ref1 === "<=" || ref1 === ">=") { + this.compile(op.term1); + this.compile(op.term2); + switch (op.operation) { + case "==": + this.routine.EQ(op); + break; + case "!=": + this.routine.NEQ(op); + break; + case "<": + this.routine.LT(op); + break; + case ">": + this.routine.GT(op); + break; + case "<=": + this.routine.LTE(op); + break; + case ">=": + this.routine.GTE(op); + } + } else if (op.operation === "and") { + jump = this.routine.createLabel("and"); + op.term1.nowarning = true; + op.term2.nowarning = true; + this.compile(op.term1); + this.routine.JUMPN_NOPOP(jump, op); + this.routine.POP(op); + this.compile(op.term2); + return this.routine.setLabel(jump); + } else if (op.operation === "or") { + jump = this.routine.createLabel("or"); + op.term1.nowarning = true; + op.term2.nowarning = true; + this.compile(op.term1); + this.routine.JUMPY_NOPOP(jump, op); + this.routine.POP(op); + this.compile(op.term2); + return this.routine.setLabel(jump); + } else if (op.operation === "^") { + this.compile(op.term1); + this.compile(op.term2); + return this.routine.BINARY_OP(Compiler.predefined_binary_functions.pow, op); + } else { + return ""; + } + } + + compileBraced(expression) { + this.compile(expression.expression); + } + + compileNegate(expression) { + if (expression.expression instanceof Program.Value && expression.expression.type === Program.Value.TYPE_NUMBER) { + return this.routine.LOAD_VALUE(-expression.expression.value, expression); + } else { + this.compile(expression.expression); + return this.routine.NEGATE(expression); + } + } + + compileNot(expression) { + expression.expression.nowarning = true; + this.compile(expression.expression); + return this.routine.NOT(expression); + } + + compileValue(value) { + var i, j, ref; + switch (value.type) { + case Program.Value.TYPE_NUMBER: + this.routine.LOAD_VALUE(value.value, value); + break; + case Program.Value.TYPE_STRING: + this.routine.LOAD_VALUE(value.value, value); + break; + case Program.Value.TYPE_ARRAY: + this.routine.CREATE_ARRAY(value); + for (i = j = 0, ref = value.value.length - 1; j <= ref; i = j += 1) { + this.routine.LOAD_VALUE(i, value); + this.compile(value.value[i]); + this.routine.CREATE_PROPERTY(value); + } + } + } + + compileVariable(variable) { + var index, v; + v = variable.identifier; + if (v === "this") { + return this.routine.LOAD_THIS(variable); + } else if (v === "global") { + return this.routine.LOAD_GLOBAL(variable); + } else if (Compiler.predefined_values[v] != null) { + return this.routine.LOAD_VALUE(Compiler.predefined_values[v], variable); + } else if (this.locals.get(v) != null) { + index = this.locals.get(v); + return this.routine.LOAD_LOCAL(index, variable); + } else { + return this.routine.LOAD_VARIABLE(v, variable); + } + } + + compileField(field) { + var c, i, id, index, j, k, len, ref, ref1; + if (field.expression.identifier === "keyboard" || field.expression.identifier === "gamepad") { + field.nowarning = true; + } + c = field.chain[field.chain.length - 1]; + if (c instanceof Program.Value && c.value === "type") { + if (field.chain.length === 1) { + if (field.expression instanceof Program.Variable) { // variable.type + id = field.expression.identifier; + if (this.locals.get(id) != null) { + index = this.locals.get(id); + this.routine.LOAD_LOCAL(index, field); + this.routine.TYPE(field); + } else if (Compiler.predefined_values[id] != null) { + this.routine.LOAD_VALUE("number", field); + } else if ((Compiler.predefined_unary_functions[id] != null) || Compiler.predefined_binary_functions[id]) { + this.routine.LOAD_VALUE("function", field); + } else { + this.routine.VARIABLE_TYPE(id, field.expression); + } + } else { + this.compile(field.expression); + this.routine.TYPE(field); + } + } else { + this.compile(field.expression); + for (i = j = 0, ref = field.chain.length - 3; j <= ref; i = j += 1) { + this.compile(field.chain[i]); + this.routine.LOAD_PROPERTY(field); + } + this.compile(field.chain[field.chain.length - 2]); + this.routine.PROPERTY_TYPE(field.expression); + } + } else { + this.compile(field.expression); + ref1 = field.chain; + for (k = 0, len = ref1.length; k < len; k++) { + c = ref1[k]; + this.compile(c); + this.routine.LOAD_PROPERTY(field); + } + } + } + + compileFieldParent(field) { + var c, i, j, ref; + this.compile(field.expression); + for (i = j = 0, ref = field.chain.length - 2; j <= ref; i = j += 1) { + c = field.chain[i]; + this.compile(c); + this.routine.LOAD_PROPERTY(field); + } + } + + compileFunctionCall(call) { + var a, funk, i, index, j, k, l, len, len1, len2, len3, len4, m, n, ref, ref1, ref2, ref3, ref4; + if (call.expression instanceof Program.Field) { + ref = call.args; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + a = ref[i]; + this.compile(a); + } + this.compileFieldParent(call.expression); + this.compile(call.expression.chain[call.expression.chain.length - 1]); + return this.routine.FUNCTION_APPLY_PROPERTY(call.args.length, call); + } else if (call.expression instanceof Program.Variable) { + if (Compiler.predefined_unary_functions[call.expression.identifier] != null) { + funk = Compiler.predefined_unary_functions[call.expression.identifier]; + if (call.args.length > 0) { + this.compile(call.args[0]); + } else { + this.routine.LOAD_VALUE(0, call); + } + return this.routine.UNARY_OP(funk, call); + } else if (Compiler.predefined_binary_functions[call.expression.identifier] != null) { + funk = Compiler.predefined_binary_functions[call.expression.identifier]; + if (call.args.length > 0) { + this.compile(call.args[0]); + } else { + this.routine.LOAD_VALUE(0, call); + } + if (call.args.length > 1) { + this.compile(call.args[1]); + } else { + this.routine.LOAD_VALUE(0, call); + } + return this.routine.BINARY_OP(funk, call); + } else if (call.expression.identifier === "super") { + ref1 = call.args; + for (i = k = 0, len1 = ref1.length; k < len1; i = ++k) { + a = ref1[i]; + this.compile(a); + } + return this.routine.SUPER_CALL(call.args.length, call); + } else if (this.locals.get(call.expression.identifier) != null) { + ref2 = call.args; + for (i = l = 0, len2 = ref2.length; l < len2; i = ++l) { + a = ref2[i]; + this.compile(a); + } + index = this.locals.get(call.expression.identifier); + this.routine.LOAD_LOCAL(index, call); + return this.routine.FUNCTION_CALL(call.args.length, call); + } else { + ref3 = call.args; + for (i = m = 0, len3 = ref3.length; m < len3; i = ++m) { + a = ref3[i]; + this.compile(a); + } + this.routine.LOAD_VALUE(call.expression.identifier, call); + return this.routine.FUNCTION_APPLY_VARIABLE(call.args.length, call); + } + } else { + ref4 = call.args; + for (n = 0, len4 = ref4.length; n < len4; n++) { + a = ref4[n]; + this.compile(a); + } + this.compile(call.expression); + return this.routine.FUNCTION_CALL(call.args.length, call); + } + } + + compileFor(forloop) { + var for_continue, for_end, for_start, iterator, save_break, save_continue; + iterator = this.locals.register(forloop.iterator); + this.locals.allocate(); // range_to + this.locals.allocate(); // step + this.compile(forloop.range_from); + this.routine.STORE_LOCAL(iterator, forloop); + this.routine.POP(forloop); + this.compile(forloop.range_to); + if (forloop.range_by !== 0) { + this.compile(forloop.range_by); + } else { + this.routine.LOAD_VALUE(0, forloop); + } + for_start = this.routine.createLabel("for_start"); + for_continue = this.routine.createLabel("for_continue"); + for_end = this.routine.createLabel("for_end"); + this.routine.FORLOOP_INIT([iterator, for_end], forloop); + this.routine.setLabel(for_start); + this.locals.push(); + save_break = this.break_label; + save_continue = this.continue_label; + this.break_label = for_end; + this.continue_label = for_continue; + this.compileSequence(forloop.sequence); + this.break_label = save_break; + this.continue_label = save_continue; + this.routine.setLabel(for_continue); + this.routine.FORLOOP_CONTROL([iterator, for_start], forloop); + this.routine.setLabel(for_end); + return this.locals.pop(); + } + + compileForIn(forloop) { + var for_continue, for_end, for_start, iterator, save_break, save_continue; + iterator = this.locals.register(forloop.iterator); + this.locals.allocate(); // array + this.locals.allocate(); // index + this.compile(forloop.list); + for_start = this.routine.createLabel("for_start"); + for_continue = this.routine.createLabel("for_continue"); + for_end = this.routine.createLabel("for_end"); + this.routine.FORIN_INIT([iterator, for_end], forloop); + this.routine.setLabel(for_start); + this.locals.push(); + save_break = this.break_label; + save_continue = this.continue_label; + this.break_label = for_end; + this.continue_label = for_continue; + this.compileSequence(forloop.sequence); + this.break_label = save_break; + this.continue_label = save_continue; + this.routine.setLabel(for_continue); + this.routine.FORIN_CONTROL([iterator, for_start], forloop); + this.routine.setLabel(for_end); + return this.locals.pop(); + } + + compileSequence(sequence) { + var i, j, ref; + for (i = j = 0, ref = sequence.length - 1; j <= ref; i = j += 1) { + if (!sequence[i].nopop) { + this.routine.POP(sequence[i]); + } + this.compile(sequence[i]); + } + } + + compileWhile(whiloop) { + var end, save_break, save_continue, start; + this.locals.push(); + start = this.routine.createLabel("while_start"); + end = this.routine.createLabel("while_end"); + this.routine.LOAD_VALUE(0, whiloop); + this.routine.setLabel(start); + this.compile(whiloop.condition); + this.routine.JUMPN(end); + save_break = this.break_label; + save_continue = this.continue_label; + this.break_label = end; + this.continue_label = start; + this.compileSequence(whiloop.sequence); + this.routine.JUMP(start, whiloop); + this.break_label = save_break; + this.continue_label = save_continue; + this.routine.setLabel(end); + return this.locals.pop(); + } + + compileBreak(statement) { + if (this.break_label != null) { + return this.routine.JUMP(this.break_label); + } + } + + compileContinue(statement) { + if (this.continue_label != null) { + return this.routine.JUMP(this.continue_label); + } + } + + compileFunction(func) { + var r; + r = this.compileFunctionBody(func); + return this.routine.LOAD_ROUTINE(r, func); + } + + compileFunctionBody(func) { + var a, args, i, index, j, k, l, label, len, local_index, locals, m, numargs, r, ref, ref1, ref2, ref3, routine; + routine = this.routine; + locals = this.locals; + this.routine = new Routine(func.args != null ? func.args.length : 0); + this.locals = new Locals(this, locals); + local_index = this.locals.index; + this.routine.uses_arguments = true; + if (func.args != null) { + if (this.routine.uses_arguments) { + args = this.locals.register("arguments"); + this.routine.STORE_LOCAL(args, func); + this.routine.POP(func); + } + numargs = this.locals.register("+numargs"); + this.routine.STORE_LOCAL(numargs, func); + this.routine.POP(func); + for (i = j = ref = func.args.length - 1; j >= 0; i = j += -1) { + a = func.args[i]; + index = this.locals.register(a.name); + this.routine.STORE_LOCAL(index, func); + this.routine.POP(func); + } + for (i = k = 0, ref1 = func.args.length - 1; k <= ref1; i = k += 1) { + a = func.args[i]; + if (a.default != null) { + index = this.locals.get(a.name); + label = this.routine.createLabel("default_arg"); + this.routine.LOAD_VALUE(i, func); + this.routine.LOAD_LOCAL(numargs, func); + this.routine.LT(func); + this.routine.JUMPY(label, func); + this.compile(a.default); + this.routine.STORE_LOCAL(index, func); + this.routine.POP(func); + this.routine.setLabel(label); + } + } + } + if (func.sequence.length > 0) { + for (i = l = 0, ref2 = func.sequence.length - 1; l <= ref2; i = l += 1) { + this.compile(func.sequence[i]); + if (i < func.sequence.length - 1) { + this.routine.POP(func.sequence[i]); + } else { + this.routine.RETURN(func.sequence[i]); + } + } + } else { + this.routine.LOAD_VALUE(0, func); + this.routine.RETURN(func); + } + if ((func.args != null) && !this.locals.arguments_used) { + this.routine.uses_arguments = false; + this.routine.remove(0); + this.routine.remove(0); + } + index = 0; + ref3 = this.locals.imports; + for (m = 0, len = ref3.length; m < len; m++) { + i = ref3[m]; + this.routine.OP_INSERT(OPCODES.LOAD_IMPORT, func, index, index * 3); + this.routine.OP_INSERT(OPCODES.STORE_LOCAL, func, i.index, index * 3 + 1); + this.routine.OP_INSERT(OPCODES.POP, func, 0, index * 3 + 2); + this.routine.import_refs.push(i.source); + index += 1; + } + this.routine.optimize(); + this.routine.resolveLabels(); + this.count += this.routine.opcodes.length; + r = this.routine; + // console.info r.toString() + this.routine.locals_size = this.locals.max_index; + this.routine = routine; + this.locals = locals; + return r; + } + + compileReturn(ret) { + if (ret.expression != null) { + this.compile(ret.expression); + return this.routine.RETURN(ret); + } else { + this.routine.LOAD_VALUE(0, ret); + return this.routine.RETURN(ret); + } + } + + compileCondition(condition) { + var c, chain, condition_end, condition_next, i, j, ref; + chain = condition.chain; + this.routine.LOAD_VALUE(0, condition); + condition_end = this.routine.createLabel("condition_end"); + for (i = j = 0, ref = chain.length - 1; j <= ref; i = j += 1) { + condition_next = this.routine.createLabel("condition_next"); + c = chain[i]; + c.condition.nowarning = true; + this.compile(c.condition); + this.routine.JUMPN(condition_next); + this.locals.push(); + this.compileSequence(c.sequence); + this.locals.pop(); + this.routine.JUMP(condition_end, condition); + this.routine.setLabel(condition_next); + if (i === chain.length - 1 && (c.else != null)) { + this.locals.push(); + this.compileSequence(c.else); + this.locals.pop(); + } + } + this.routine.setLabel(condition_end); + } + + formatField(field) { + if (field === "constructor") { + field = "_constructor"; + } + return field.toString().replace(/"/g, "\\\""); + } + + compileCreateObject(statement) { + var f, j, len, ref; + this.routine.CREATE_OBJECT(statement); + ref = statement.fields; + for (j = 0, len = ref.length; j < len; j++) { + f = ref[j]; + this.routine.LOAD_VALUE(f.field, statement); + this.compile(f.value); + this.routine.CREATE_PROPERTY(statement); + } + } + + compileCreateClass(statement) { + var f, j, len, ref, variable; + if (statement.ext != null) { + statement.ext.nowarning = true; + this.compile(statement.ext); + } else { + this.routine.LOAD_VALUE(0, statement); + } + variable = (statement.ext != null) && statement.ext instanceof Program.Variable ? statement.ext.identifier : 0; + this.routine.CREATE_CLASS(variable, statement); + ref = statement.fields; + for (j = 0, len = ref.length; j < len; j++) { + f = ref[j]; + this.routine.LOAD_VALUE(f.field, statement); + this.compile(f.value); + this.routine.CREATE_PROPERTY(statement); + } + } + + compileUpdateClass(statement, variable) { + this.compileCreateClass(statement); + return this.routine.UPDATE_CLASS(variable, statement); + } + + compileNewCall(statement) { + var a, call, i, j, len, ref; + call = statement.expression; + this.routine.LOAD_VALUE(0, statement); // reserve spot on stack for the class instance + ref = call.args; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + a = ref[i]; + this.compile(a); + } + this.compile(call.expression); + this.routine.NEW_CALL(call.args.length, statement); + return this.routine.POP(statement); // pop return value of class constructor + } + + compileAfter(after) { + var r; + r = this.compileFunctionBody(after); + this.routine.LOAD_ROUTINE(r, after); + this.compile(after.delay); + if ((after.multiplier != null) && after.multiplier !== 1) { + this.routine.LOAD_VALUE(after.multiplier, after); + this.routine.MUL(after); + } + return this.routine.AFTER(after); + } + + compileEvery(every) { + var r; + r = this.compileFunctionBody(every); + this.routine.LOAD_ROUTINE(r, every); + this.compile(every.delay); + if ((every.multiplier != null) && every.multiplier !== 1) { + this.routine.LOAD_VALUE(every.multiplier, every); + this.routine.MUL(every); + } + return this.routine.EVERY(every); + } + + compileDo(dostuff) { + var r; + r = this.compileFunctionBody(dostuff); + this.routine.LOAD_ROUTINE(r, dostuff); + return this.routine.DO(dostuff); + } + + compileSleep(sleep) { + this.compile(sleep.delay); + if ((sleep.multiplier != null) && sleep.multiplier !== 1) { + this.routine.LOAD_VALUE(sleep.multiplier, sleep); + this.routine.MUL(sleep); + } + return this.routine.SLEEP(sleep); + } + + compileDelete(del) { + var chain, i, j, ref; + if (del.field instanceof Program.Variable) { + this.routine.LOAD_THIS(del); + this.routine.LOAD_VALUE(del.field.identifier, del); + this.routine.DELETE(del); + } else { + this.compile(del.field.expression); + chain = del.field.chain; + for (i = j = 0, ref = chain.length - 1; j <= ref; i = j += 1) { + this.compile(chain[i]); + if (i < chain.length - 1) { + this.routine.LOAD_PROPERTY(del); + } + } + this.routine.DELETE(del); + } + } + + exec(context) { + this.processor = new Processor(); + this.processor.load(this.routine); + return this.processor.run(context); + } + + }; + + Compiler.predefined_unary_functions = { + "round": Math.round, + "floor": Math.floor, + "ceil": Math.ceil, + "abs": Math.abs, + "sqrt": Math.sqrt, + "sin": Math.sin, + "cos": Math.cos, + "tan": Math.tan, + "acos": Math.acos, + "asin": Math.asin, + "atan": Math.atan, + "sind": function(x) { + return Math.sin(x * Math.PI / 180); + }, + "cosd": function(x) { + return Math.cos(x * Math.PI / 180); + }, + "tand": function(x) { + return Math.tan(x * Math.PI / 180); + }, + "asind": function(x) { + return Math.asin(x) / Math.PI * 180; + }, + "acosd": function(x) { + return Math.acos(x) / Math.PI * 180; + }, + "atand": function(x) { + return Math.atan(x) / Math.PI * 180; + }, + "log": Math.log, + "exp": Math.exp + }; + + Compiler.predefined_binary_functions = { + "min": Math.min, + "max": Math.max, + "pow": Math.pow, + "atan2": Math.atan2, + "atan2d": function(y, x) { + return Math.atan2(y, x) / Math.PI * 180; + } + }; + + Compiler.predefined_values = { + PI: Math.PI, + true: 1, + false: 0 + }; + + return Compiler; + +}).call(this); + +this.Locals = class Locals { + constructor(compiler, parent = null) { + this.compiler = compiler; + this.parent = parent; + this.layers = []; + this.index = 0; + this.max_index = 0; + this.push(); + this.imports = []; + } + + increment() { + var spot; + spot = this.index++; + this.max_index = Math.max(this.index, this.max_index); + return spot; + } + + push() { + return this.layers.push(new LocalLayer(this)); + } + + pop() { + // resetting the @index below was causing erasure of outer locals + // when used after the block ; such reset is not needed + //@index = @layers[@layers.length-1].start_index + return this.layers.splice(this.layers.length - 1, 1); + } + + register(name) { + return this.layers[this.layers.length - 1].register(name); + } + + allocate() { + return this.layers[this.layers.length - 1].allocate(); + } + + get(name) { + var i, index, j, ref, v; + if (name === "arguments") { + this.arguments_used = true; + } + for (i = j = ref = this.layers.length - 1; j >= 0; i = j += -1) { + v = this.layers[i].get(name); + if (v != null) { + return v; + } + } + if (this.parent != null) { + v = this.parent.get(name); + if (v != null) { + index = this.register(name); + this.imports.push({ + name: name, + index: index, + source: v + }); + return index; + } + } + return null; + } + +}; + +LocalLayer = class LocalLayer { + constructor(locals1) { + this.locals = locals1; + this.start_index = this.locals.index; + this.registered = {}; + } + + register(name) { + return this.registered[name] = this.locals.increment(); + } + + allocate() { + return this.locals.increment(); + } + + get(name) { + if (this.registered[name] != null) { + return this.registered[name]; + } else { + return null; + } + } + +}; diff --git a/WebGames-master/WebGames-master/games/cap/doc.md b/WebGames-master/WebGames-master/games/cap/doc.md new file mode 100644 index 00000000..746e436e --- /dev/null +++ b/WebGames-master/WebGames-master/games/cap/doc.md @@ -0,0 +1,5 @@ +Assets and gameplay from @yokoboko + +https://github.com/yokoboko/bas-pico-8 + +Cube GFX from my friend @Vampirics diff --git a/WebGames-master/WebGames-master/games/cap/fonts/BitCell.ttf b/WebGames-master/WebGames-master/games/cap/fonts/BitCell.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7b585aa70a146168b5817467febbb8c893691f40 GIT binary patch literal 67612 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 literal 0 HcmV?d00001 diff --git a/WebGames-master/WebGames-master/games/cap/icon16.png b/WebGames-master/WebGames-master/games/cap/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..cd8d4157d3d71cb16b328504b8e6351b7abab07a GIT binary patch literal 821 zcmV-51Iqk~P)0(Tzka*d$!x9f`GmFS(f`*0ZG$W=$`~yKNYsY}LRLbk4@0oWP(Sx6lNcX(#S-}`N z2O{ZTICtwO9y3GjbY@;6*>ou=Ne~!xAnC!?!Z(~s9!1(xQ5JB;;J<{x*{C7afiIiQg6E+JEOgVN-E}Dm$he?97)u}H z+WIZ_rqZZnq-T6;GfL-bn7#W$oVoN7!?{tSu^4y0{TitZHe4Ii-ekquIiLMGh+0}iBe_L3X$9MF|i!A>7J;Bxlni1xU zutnIkIO0VaI6QzZ6h5sEGzDBSAhNW?xerg{lTt%U6UVM%m==95{4BwiE;F-tInnV9 zcD;@^tVKDHDbnh}YJ*);3*fpox@j@eaJgnkat_QY$=U1>m*#Hp_qz&}jr5Fvxf!K% zHB2C~#^mBdd~UNr)7e640rE63?HWHeYdpJERB-OgI!JIt0ip3?X%Xb_VI72V)W`V}S~%#sSm(W0J5S-@=#MoU%r zWQNC-)s16U(M^j3O_)<)1DBVl7)u{xwNd3C4(tzMKV?$#00000NkvXXu0mjfo$G*L literal 0 HcmV?d00001 diff --git a/WebGames-master/WebGames-master/games/cap/icon180.png b/WebGames-master/WebGames-master/games/cap/icon180.png new file mode 100644 index 0000000000000000000000000000000000000000..3721896a0f9f95e60b8d699b4e94e5e047af2c27 GIT binary patch literal 5651 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 literal 0 HcmV?d00001 diff --git a/WebGames-master/WebGames-master/games/cap/icon32.png b/WebGames-master/WebGames-master/games/cap/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..126a1b418362d7a62cf6bc19d524ff82cbbd289a GIT binary patch literal 2309 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 literal 0 HcmV?d00001 diff --git a/WebGames-master/WebGames-master/games/cap/icon64.png b/WebGames-master/WebGames-master/games/cap/icon64.png new file mode 100644 index 0000000000000000000000000000000000000000..739a30fcf385c8243ceb013e75bc91b559eaf6a4 GIT binary patch literal 4505 zcmZ{oXHe5kyT$>f2m}&(FF`;$QiGtBgf4=j6zNeRNRbFiK#KG~p^2dMsuXF`r79(% zhY~u{tA$<^B*L5LIcLtiU(U?7FFU(?&pr3=x;EPEmOhA{hn|9h0%T}_xI><`{^@iy z&Q(Eo}uDSiFGpm@3w!gPaW*iZxZ^mR%>@oC!gK_AQuj(`}7d*w40XFb%w7 z&oW6)Br++G&;2W2Fa2v~FS{6IsN&YB@-YRsD*m(}mACt23Z#_5MaxyCdIH*UKOV_c zyHagGz>;<;k8cd)d7^~0q#JVMVrtNvmlGL$<03(;tfG+PITwbhZ^50Gr#5TBo%W=m ziWs`vGJ{E*JGc*QNuEr0$`}n$lsP)Zt0ySDC?{dg*;kob`_E&OQ@hh{i-krZ? zDF;}9p}>!+{?XN;(rfuI3s`%kpr*~X8!qKtUP;M1DE|6PAi;x0tI!@10i_G^L_k(GZYBH*{$5q;kii0*j!E+Lr02-&`c3qAegqXN!5Vor zhxf$!MsK&m!7O8UvkU;>J2(mVmCjNkLgr$aw}(a{1*RnE^p*an;k(`Mt__CGW}Fe-7PkRk+^F zT%+O5m&hGJQ4Zogq80AQQR_umzO~XI_^ZRAQB;^eL`dXwe!WeGrR2!&zzQDTX52@? zK-#M7vv~ffKPL#&Hh*#|ob>Ix;$DrzvaGY4rou2C56lAtvw($TLe3&?Pqp#sn!+-k z(_t}MJSf%SPl1CTLf(mHCW}Fbo(^y9KC8?LtsfW zANFWZ1*12zM)`tPWwJHC3*R}SKmR*V$rQBES>|##pJ6X+I?1R0DACJyKCY_jZ*1IF zk*%z7&}NOMcCdqB5E$C!@-#EUwv9$0|4u5ob^JC0PWFOn*g$@Zuh&YDX86*9yyQY* z+5xMI`@gWHQM?H7J|aJKvJyB%zF7#ETQP6`C3NFtFX8Eqh@i8G_m?C@OPSJ+uCX!I zRV5{yzc!dy)0&fWdg7p^@s~3gYmvUzqKm1!hj_7bCEvonqyE?ED@T(KmhV!sXrfK~ z^M|g-sm$eKTJ8&<2hK+NNdr0DIFU3+-x^H)J|Cj6m3<55{=SirCY5f$k6NBEDzfn- z?InnGZ8s%t|GJ!WvX`T`YH0!9LvTWO-IR*zYi`f5d_U3|TpZ1uiT`#<+qxkPJhD}I zJY{EI+rU%x@m-7^?fM=`tR8vGE{GdK^Ncv_PaqJ0xz5uD7hkyxzBjO_KK7|tX96u% zPh_sOVtd^_{jZ2z{uqOT5>z+KMQmhDO4GM*#Z~NzO{Zv_9VMT4LtpBvfa2Y99VHuR z(x@@8akj&-$;*dSwk%lM4h!@7^?oXLgEnC6&8Jk%hA860G9~s%GD3n!j3haOzHKzR zNHy3f0!Z$r*h9KapszQUyyb8`4L6oQB?QL^nUR*mn!&%T)d(Jghmi;lb_{*2C~>5! zuMx@c#Q!SJfWr6Sx_*52V!)0xfA3|`8~-fkSP--xRO^If`Wd+N;p3e>rF`{My8FB; z)hdWp7t`09JuERruBcCyBA1E09hP$ZOK^CU_0HZPJJ0h+8+!pM<*AczhlGDw#cgp> zY!T)8I;{IacA069CPbHcjO#z8^v0+mT%Pc-dZS>fHwcfb`d*Ab&g%{>0xn_!ClhuQ zRoOUQfsXBDH?xe*)y6e6u2ehAP^$r4BfOmg8DQ!NzvWMj`%BsKqb<-Ga$8yjy}jnK`E^V9*T0d_&^U(Rsy;la zvbUU+j7DTl+0rJKbn3xdulrn1Qc}X({fW8;?m|tdlZLMh1sqAOrmKSwQsQ5uz8Z#E zN`asB4m-|XZZ`5u$NJ%PTH6+mA0a;o@I;PYu$46tviNFw;`2Oy!B1OQU{D96HRw|_*IQhBk12R^^-DW#F5x9yjC zQ2xl-nP#u_%h6?zxfc?XfY0Gv43UY~nip!ZZkmMpsx6(J@1#%n`xL>pd$_9FWU@hwZqbP zvV&rV0?)jaj+;RJJZre&naadEVI7IM=SWm{fm26_3lj0`G}kPEixb@uaSA^kPho-z zs9;V14*RC2&UaZTeNwBbRR}q59(Qe`5foY}#Hhv#1}BN1FEYd?IB3PjZ@IYp#O9EC zb9Bh%da?YW)yMxLe1!|-$mo9o-^G%~@DJd{e0i#*!d;XDo^QaGPZ$CNj?UlvA;)w# zVdMxE+58sDmXX`@ylG-09JFP89zzCFBy0D=Dwz;!{)eK7B)8(bC0we}J&Xc6m({Dw zHYQ_$$LQ>b`W%FGcrRtOuw|AU0bQ2;ZuWXCjDh6Xl=DQD8W8;Eus8zW*}dRk1`I7U z#&ru^*L59vB(?5#7eXzarDYHCn_0VdF5-jQ{|S(fB*Z2p)MQW4R4MqT6KXwqwNc`x z(%E`d&J#MlI-$zn?^B9Lk>a{;{P%rmKb5V_niadj;Z_EvO zhSZPXtGT8Rn?)7gL4pQeVcC*yo>&FH3{gI@t1CeHm{{$-PGLzHfJ;l@M}@J}j5r=YJAW z>CK50K)DI73g-YcY`Y{98YkY=4Hh&2RnKD`^lU#!?}v;Dk=0L{IYL8dF!(bD8b(Kw zH0c#kF|vkUf0nbeJd(Vbx0FpGS=J~;!Rb|}y=iz@nHJ$sd3(QgxyOi<4F- z6g^oIxixSWk?@A0m22tBthPJ(k)1anoi85f`D(^DNWFZ(^eNLp4(dE4*xqo7>I+uB zibHFp@?wj1W`|?+v9gAEAR-7TfOLu|!_DAV=$?#5o;aP|d3XXHrX8+iv!*#55 zXwAjY&{sn_H0cd6)9gN@J&PGqemtSS`j;hXoR8Pl(|f($;~nt8d|~;zUqyz=8i+Ja zbyli|BjG<;KUpI70}s1paX;&*#BCI8$1@{mBn#`Y-^$ovD=Ceye&jj9t{aT@Nh3M9 zC_XnR#KVTub!SJ2@XiRLbOBkY7jsTcXSUzG0)3Vn;hQHawBM!>AWoevreGUhb7{&! zh`8OpLugZHuP3VzXrEM4?em1n+Zm!y^*#TaictX-=q6YMrr0~2AU(zajFu*8jH!h- zV%8kMhHHygqR!3iAly$v(k}?RiDk5n%FpXuw$V$)u#B`Gh`4u=eb)p{xHi8>bSzD! z_-cvwgm^8blbL=1CuTORdW}bz<2KU|_d*^F-4IQ3*fny_a!)_wy2{h$#&mwwfi*4K zJ5D#H=VqpXB?yAKha;}?rdlbI_oG;8*;Ec8c@83)zd5kVA5WhRqAs8i62;530%w~x zN-f{+0U6E+MKel1wq-p26SyE33rNsfcJG!YTscv;w+&!WP{<>d>xHY(2>b|iI9 z1*hwd1qG)c#?xA-X~v=Eo~s)1Ry=^?`Z~BnCn#@f=yqla$I>8>Z7E_7!sF_ZT$h$) zK$^?mabL2oM^0r;b$uRVQc+mgWdKg8@OQkalGoo(Phb3M8?J(m&Cqg<^Fqpy{cO(+ zIIpffTKNG|2H-NQ@rqUMq(l{*yc!LKafdNS4i`2=-sTx8vztN6{42NdBvD+7Wzlz@ zfS0iu%Y^|48ju1v6k}=E75e@l>8B0R874&ZS;Z zC-(gxYqoBuv8`j__CJY9mK!t#G=pEUBp9 z_U)EMswA+>Av2IkMNj6DBV RLjH20Fx0(;sL*i?{SSuwt+W6D literal 0 HcmV?d00001 diff --git a/WebGames-master/WebGames-master/games/cap/index.html b/WebGames-master/WebGames-master/games/cap/index.html new file mode 100644 index 00000000..1c6e4fff --- /dev/null +++ b/WebGames-master/WebGames-master/games/cap/index.html @@ -0,0 +1,1419 @@ +CubeAndSaw
\ No newline at end of file diff --git a/WebGames-master/WebGames-master/games/cap/manifest.json b/WebGames-master/WebGames-master/games/cap/manifest.json new file mode 100644 index 00000000..1743d4d7 --- /dev/null +++ b/WebGames-master/WebGames-master/games/cap/manifest.json @@ -0,0 +1,33 @@ +{ + "name": "CubeAndSaw", + "short_name": "CubeAndSaw", + "theme_color": "#000000", + "background_color": "#000000", + "display": "fullscreen", + "orientation": "portrait", + "scope": "", + "start_url": ".", + "icons": [ + { + "src": "icon192.png?v=0", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "icon196.png?v=0", + "type": "image/png", + "sizes": "196x196", + "purpose": "maskable" + }, + { + "src": "icon512.png?v=0", + "type": "image/png", + "sizes": "512x512" + }, + { + "src": "icon1024.png?v=0", + "type": "image/png", + "sizes": "1024x1024" + } + ] +} diff --git a/WebGames-master/WebGames-master/games/cap/microengine.js b/WebGames-master/WebGames-master/games/cap/microengine.js new file mode 100644 index 00000000..6625467d --- /dev/null +++ b/WebGames-master/WebGames-master/games/cap/microengine.js @@ -0,0 +1,6623 @@ +CanvasRenderingContext2D.prototype.roundRect = function(x, y, w, h, r) { + if (w < 2 * r) { + r = w / 2; + } + if (h < 2 * r) { + r = h / 2; + } + this.beginPath(); + this.moveTo(x + r, y); + this.arcTo(x + w, y, x + w, y + h, r); + this.arcTo(x + w, y + h, x, y + h, r); + this.arcTo(x, y + h, x, y, r); + this.arcTo(x, y, x + w, y, r); + return this.closePath(); +}; + +CanvasRenderingContext2D.prototype.fillRoundRect = function(x, y, w, h, r) { + this.roundRect(x, y, w, h, r); + return this.fill(); +}; + +CanvasRenderingContext2D.prototype.strokeRoundRect = function(x, y, w, h, r) { + this.roundRect(x, y, w, h, r); + return this.stroke(); +}; + +var Random; + +Random = (function() { + function Random(_seed, hash) { + this._seed = _seed != null ? _seed : Math.random(); + if (hash == null) { + hash = true; + } + if (this._seed === 0) { + this._seed = Math.random(); + } + if (this._seed < 1) { + this._seed *= 1 << 30; + } + this.a = 13971; + this.b = 12345; + this.size = 1 << 30; + this.mask = this.size - 1; + this.norm = 1 / this.size; + if (hash) { + this.nextSeed(); + this.nextSeed(); + this.nextSeed(); + } + } + + Random.prototype.next = function() { + this._seed = (this._seed * this.a + this.b) & this.mask; + return this._seed * this.norm; + }; + + Random.prototype.nextInt = function(num) { + return Math.floor(this.next() * num); + }; + + Random.prototype.nextSeed = function() { + return this._seed = (this._seed * this.a + this.b) & this.mask; + }; + + Random.prototype.seed = function(_seed) { + this._seed = _seed != null ? _seed : Math.random(); + if (this._seed < 1) { + this._seed *= 1 << 30; + } + this.nextSeed(); + this.nextSeed(); + return this.nextSeed(); + }; + + Random.prototype.clone = function(seed) { + if (seed != null) { + return new Random(seed); + } else { + seed = this._seed; + return new Random(seed, false); + } + }; + + return Random; + +})(); + +this.MPServerConnection = class MPServerConnection { + constructor(address) { + var impl; + this.status = "connecting"; + impl = new MPServerConnectionImpl(this, address); + this.send = (data) => { + var err; + try { + impl.sendMessage(data); + return "sent"; + } catch (error) { + err = error; + console.error(err); + return err.toString(); + } + }; + this.close = () => { + var err; + try { + return impl.close(); + } catch (error) { + err = error; + return console.error(err); + } + }; + this.messages = []; + } + +}; + +this.MPServerConnectionImpl = class MPServerConnectionImpl { + constructor(_interface, address1) { + var err; + this.interface = _interface; + this.address = address1; + this.status = "connecting"; + this.buffer = []; + if (this.address) { + this.connect(this.address); + } else { + try { + this.getRelay((address) => { + return this.connect(address); + }); + } catch (error) { + err = error; + console.error(err); + } + } + this.messages = []; + player.runtime.addConnection(this); + } + + getRelay(callback) { + return player.client.sendRequest({ + name: "get_relay_server" + }, (msg) => { + var address; + if (msg.name === "error") { + this.interface.status = "error"; + return this.interface.error = msg.error; + } else { + address = msg.address; + if (address === "self") { + address = location.origin.replace("http", "ws"); + } + return callback(address); + } + }); + } + + connect(address) { + this.socket = new WebSocket(address); + this.socket.onmessage = (msg) => { + var err; + try { + msg = JSON.parse(msg.data); + switch (msg.name) { + case "mp_server_message": + return this.messages.push(msg.data); + } + } catch (error) { + err = error; + return console.error(err); + } + }; + this.socket.onopen = () => { + var i, len, m, ref; + this.interface.status = "connected"; + this.send({ + name: "mp_client_connection", + server_id: ms_project_id + }); + ref = this.buffer; + for (i = 0, len = ref.length; i < len; i++) { + m = ref[i]; + this.sendMessage(m); + } + return this.buffer = []; + }; + return this.socket.onclose = () => { + return this.interface.status = "disconnected"; + }; + } + + update() { + if (this.messages.length > 0 || this.interface.messages.length > 0) { + this.interface.messages = this.messages; + return this.messages = []; + } + } + + sendMessage(data) { + if ((this.socket != null) && this.socket.readyState === 1) { + return this.send({ + name: "mp_client_message", + data: data + }); + } else { + return this.buffer.push(data); + } + } + + send(data) { + return this.socket.send(JSON.stringify(data)); + } + + close() { + return this.socket.close(); + } + +}; + +this.MicroVM = class MicroVM { + constructor(meta = {}, global = {}, namespace1 = "/microstudio", preserve_ls = false) { + var ctx, err; + this.namespace = namespace1; + this.preserve_ls = preserve_ls; + if (meta.print == null) { + meta.print = (text) => { + if (typeof text === "object" && (this.runner != null)) { + text = this.runner.toString(text); + } + return console.info(text); + }; + } + Array.prototype.insert = function(e) { + this.splice(0, 0, e); + return e; + }; + Array.prototype.insertAt = function(e, i) { + if (i >= 0 && i < this.length) { + this.splice(i, 0, e); + } else { + this.push(e); + } + return e; + }; + Array.prototype.remove = function(i) { + if (i >= 0 && i < this.length) { + return this.splice(i, 1)[0]; + } else { + return 0; + } + }; + Array.prototype.removeAt = function(i) { + if (i >= 0 && i < this.length) { + return this.splice(i, 1)[0]; + } else { + return 0; + } + }; + Array.prototype.removeElement = function(e) { + var index; + index = this.indexOf(e); + if (index >= 0) { + return this.splice(index, 1)[0]; + } else { + return 0; + } + }; + Array.prototype.contains = function(e) { + if (this.indexOf(e) >= 0) { + return 1; + } else { + return 0; + } + }; + meta.round = function(x) { + return Math.round(x); + }; + meta.floor = function(x) { + return Math.floor(x); + }; + meta.ceil = function(x) { + return Math.ceil(x); + }; + meta.abs = function(x) { + return Math.abs(x); + }; + meta.min = function(x, y) { + return Math.min(x, y); + }; + meta.max = function(x, y) { + return Math.max(x, y); + }; + meta.sqrt = function(x) { + return Math.sqrt(x); + }; + meta.pow = function(x, y) { + return Math.pow(x, y); + }; + meta.sin = function(x) { + return Math.sin(x); + }; + meta.cos = function(x) { + return Math.cos(x); + }; + meta.tan = function(x) { + return Math.tan(x); + }; + meta.acos = function(x) { + return Math.acos(x); + }; + meta.asin = function(x) { + return Math.asin(x); + }; + meta.atan = function(x) { + return Math.atan(x); + }; + meta.atan2 = function(y, x) { + return Math.atan2(y, x); + }; + meta.sind = function(x) { + return Math.sin(x / 180 * Math.PI); + }; + meta.cosd = function(x) { + return Math.cos(x / 180 * Math.PI); + }; + meta.tand = function(x) { + return Math.tan(x / 180 * Math.PI); + }; + meta.acosd = function(x) { + return Math.acos(x) * 180 / Math.PI; + }; + meta.asind = function(x) { + return Math.asin(x) * 180 / Math.PI; + }; + meta.atand = function(x) { + return Math.atan(x) * 180 / Math.PI; + }; + meta.atan2d = function(y, x) { + return Math.atan2(y, x) * 180 / Math.PI; + }; + meta.log = function(x) { + return Math.log(x); + }; + meta.exp = function(x) { + return Math.exp(x); + }; + meta.random = new Random(0); + meta.PI = Math.PI; + meta.true = 1; + meta.false = 0; + global.system = { + time: Date.now, + language: navigator.language, + update_rate: 60, + inputs: { + keyboard: 1, + mouse: 1, + touch: "ontouchstart" in window ? 1 : 0, + gamepad: 0 + }, + prompt: (text, callback) => { + return setTimeout((() => { + var args, result; + global.mouse.pressed = 0; + global.touch.touching = 0; + result = window.prompt(text); + if ((callback != null) && typeof callback === "function") { + args = [(result != null ? 1 : 0), result]; + this.context.timeout = Date.now() + 1000; + return callback.apply(null, args); + } + }), 0); + }, + say: (text) => { + return setTimeout((() => { + return window.alert(text); + }), 0); + } + }; + try { + global.system.inputs.keyboard = window.matchMedia("(pointer:fine)").matches ? 1 : 0; + global.system.inputs.mouse = window.matchMedia("(any-hover:none)").matches ? 0 : 1; + } catch (error1) { + err = error1; + } + this.storage_service = this.createStorageService(); + global.storage = this.storage_service.api; + meta.global = global; + this.context = { + meta: meta, + global: global, + local: global, + object: global, + breakable: 0, + continuable: 0, + returnable: 0, + stack_size: 0 + }; + ctx = this.context; + Array.prototype.sortList = function(f) { + var funk; + if ((f != null) && f instanceof Program.Function) { + funk = function(a, b) { + return f.call(ctx, [a, b], true); + }; + } else if ((f != null) && typeof f === "function") { + funk = f; + } + return this.sort(funk); + }; + this.clearWarnings(); + this.runner = new Runner(this); + } + + clearWarnings() { + return this.context.warnings = { + using_undefined_variable: {}, + assigning_field_to_undefined: {}, + invoking_non_function: {}, + assigning_api_variable: {}, + assignment_as_condition: {} + }; + } + + setMeta(key, value) { + return this.context.meta[key] = value; + } + + setGlobal(key, value) { + return this.context.global[key] = value; + } + + run(program, timeout = 3000, filename = "", callback) { + var err, res; + this.program = program; + this.error_info = null; + this.context.timeout = Date.now() + timeout; + this.context.stack_size = 0; + try { + res = this.runner.run(this.program, filename, callback); + this.storage_service.check(); + if (res != null) { + return this.runner.toString(res); + } else { + return null; + } + } catch (error1) { + err = error1; + if ((err.type != null) && (err.line != null) && (err.error != null)) { + this.error_info = err; + } else if ((this.context.location != null) && (this.context.location.token != null)) { + this.error_info = { + error: this.context.location.token.error_text || err, + file: filename, + line: this.context.location.token.line, + column: this.context.location.token.column + }; + console.info(`Error at line: ${this.context.location.token.line} column: ${this.context.location.token.column}`); + } else { + this.error_info = { + error: err, + file: filename + }; + } + console.error(err); + return this.storage_service.check(); + } + } + + call(name, args = [], timeout = 3000) { + var err, res; + this.error_info = null; + this.context.timeout = Date.now() + timeout; + this.context.stack_size = 0; + try { + res = this.runner.call(name, args); + this.storage_service.check(); + return res; + } catch (error1) { + err = error1; + console.error(err); + if ((this.context.location != null) && (this.context.location.token != null)) { + this.error_info = { + error: this.context.location.token.error_text || err, + line: this.context.location.token.line, + column: this.context.location.token.column, + file: this.context.location.token.file + }; + } else { + this.error_info = { + error: err + }; + } + if ((this.context.location != null) && (this.context.location.token != null)) { + console.info(`Error at line: ${this.context.location.token.line} column: ${this.context.location.token.column}`); + } + return this.storage_service.check(); + } + } + + createStorageService() { + var err, error, ls, namespace, s, service, storage, write_storage; + try { + ls = window.localStorage; + } catch (error1) { + error = error1; // in incognito mode, embedded by an iframe, localStorage isn't available + console.info("localStorage not available"); + return service = { + api: { + set: function() {}, + get: function() { + return 0; + } + }, + check: function() {} + }; + } + if (!this.preserve_ls) { + try { + delete window.localStorage; + } catch (error1) { + err = error1; + } + } + storage = {}; + write_storage = false; + namespace = this.namespace; + try { + s = ls.getItem(`ms${namespace}`); + if (s) { + storage = JSON.parse(s); + } + } catch (error1) { + err = error1; + } + return service = { + api: { + set: (name, value) => { + value = this.storableObject(value); + if ((name != null) && (value != null)) { + storage[name] = value; + write_storage = true; + } + return value; + }, + get: (name) => { + if (name != null) { + if (storage[name] != null) { + return storage[name]; + } else { + return 0; + } + } else { + return 0; + } + } + }, + check: () => { + if (write_storage) { + write_storage = false; + try { + return ls.setItem(`ms${namespace}`, JSON.stringify(storage)); + } catch (error1) { + err = error1; + } + } + } + }; + } + + storableObject(value) { + var referenced; + referenced = [this.context.global.screen, this.context.global.system, this.context.global.keyboard, this.context.global.audio, this.context.global.gamepad, this.context.global.touch, this.context.global.mouse, this.context.global.sprites, this.context.global.maps]; + return this.makeStorableObject(value, referenced); + } + + makeStorableObject(value, referenced) { + var i, j, key, len, res, v; + if (value == null) { + return value; + } + if (typeof value === "function" || ((typeof Program !== "undefined" && Program !== null) && value instanceof Program.Function) || ((typeof Routine !== "undefined" && Routine !== null) && value instanceof Routine)) { + return void 0; + } else if (typeof value === "object") { + if (referenced.indexOf(value) >= 0) { + return void 0; + } + referenced = referenced.slice(); + referenced.push(value); + if (Array.isArray(value)) { + res = []; + for (i = j = 0, len = value.length; j < len; i = ++j) { + v = value[i]; + v = this.makeStorableObject(v, referenced); + if (v != null) { + res[i] = v; + } + } + return res; + } else { + res = {}; + for (key in value) { + v = value[key]; + if (key === "class") { + continue; + } + v = this.makeStorableObject(v, referenced); + if (v != null) { + res[key] = v; + } + } + return res; + } + } else { + return value; + } + } + +}; + +var arrayBufferToBase64, loadFile, loadLameJSLib, loadWaveFileLib, saveFile, writeProjectFile; + +this.Runtime = class Runtime { + constructor(url1, sources, resources, listener) { + this.url = url1; + this.sources = sources; + this.resources = resources; + this.listener = listener; + this.screen = new Screen(this); + this.audio = new AudioCore(this); + this.keyboard = new Keyboard(); + this.gamepad = new Gamepad(); + this.asset_manager = new AssetManager(this); + this.sprites = {}; + this.maps = {}; + this.sounds = {}; + this.music = {}; + this.assets = {}; + this.touch = {}; + this.mouse = this.screen.mouse; + this.previous_init = null; + this.random = new Random(0); + this.orientation = window.orientation; + this.aspect = window.aspect; + this.report_errors = true; + this.log = (text) => { + return this.listener.log(text); + }; + this.update_memory = {}; + this.time_machine = new TimeMachine(this); + this.createDropFeature(); + window.ms_async_load = false; + this.connections = []; + } + + addConnection(connection) { + return this.connections.push(connection); + } + + updateSource(file, src, reinit = false) { + var err, init; + if (this.vm == null) { + return false; + } + if (src === this.update_memory[file]) { + return false; + } + this.update_memory[file] = src; + this.audio.cancelBeeps(); + this.screen.clear(); + try { + this.vm.run(src, 3000, file); + this.listener.postMessage({ + name: "compile_success", + file: file + }); + this.reportWarnings(); + if (this.vm.error_info != null) { + err = this.vm.error_info; + err.type = "init"; + err.file = file; + this.listener.reportError(err); + return false; + } + if (this.vm.runner.getFunctionSource != null) { + init = this.vm.runner.getFunctionSource("init"); + if ((init != null) && init !== this.previous_init && reinit) { + this.previous_init = init; + this.vm.call("init"); + if (this.vm.error_info != null) { + err = this.vm.error_info; + err.type = "init"; + this.listener.reportError(err); + } + } + } + return true; + } catch (error) { + err = error; + if (this.report_errors) { + console.error(err); + err.file = file; + this.listener.reportError(err); + return false; + } + } + } + + start() { + var a, i, j, k, key, l, len1, len2, len3, len4, len5, m, n, name, o, ref, ref1, ref2, ref3, ref4, ref5, s, value; + if (window.ms_async_load) { + this.startReady(); + } + ref = this.resources.images; + for (j = 0, len1 = ref.length; j < len1; j++) { + i = ref[j]; + s = LoadSprite(this.url + "sprites/" + i.file + "?v=" + i.version, i.properties, () => { + this.updateMaps(); + return this.checkStartReady(); + }); + name = i.file.split(".")[0].replace(/-/g, "/"); + s.name = name; + this.sprites[name] = s; + } + if (Array.isArray(this.resources.maps)) { + ref1 = this.resources.maps; + for (k = 0, len2 = ref1.length; k < len2; k++) { + m = ref1[k]; + name = m.file.split(".")[0].replace(/-/g, "/"); + this.maps[name] = LoadMap(this.url + `maps/${m.file}?v=${m.version}`, () => { + return this.checkStartReady(); + }); + this.maps[name].name = name; + } + } else if (this.resources.maps != null) { + if (window.player == null) { + window.player = this.listener; + } + ref2 = this.resources.maps; + for (key in ref2) { + value = ref2[key]; + this.updateMap(key, 0, value); + } + } + ref3 = this.resources.sounds; + for (l = 0, len3 = ref3.length; l < len3; l++) { + s = ref3[l]; + name = s.file.split(".")[0]; + s = new Sound(this.audio, this.url + "sounds/" + s.file + "?v=" + s.version); + s.name = name; + this.sounds[name] = s; + } + ref4 = this.resources.music; + for (n = 0, len4 = ref4.length; n < len4; n++) { + m = ref4[n]; + name = m.file.split(".")[0]; + m = new Music(this.audio, this.url + "music/" + m.file + "?v=" + m.version); + m.name = name; + this.music[name] = m; + } + ref5 = this.resources.assets; + for (o = 0, len5 = ref5.length; o < len5; o++) { + a = ref5[o]; + name = a.file.split(".")[0]; + name = name.replace(/-/g, "/"); + a.name = name; + this.assets[name] = a; + } + } + + checkStartReady() { + var count, key, progress, ready, ref, ref1, value; + count = 0; + ready = 0; + ref = this.sprites; + for (key in ref) { + value = ref[key]; + count += 1; + if (value.ready) { + ready += 1; + } + } + ref1 = this.maps; + for (key in ref1) { + value = ref1[key]; + count += 1; + if (value.ready) { + ready += 1; + } + } + if (ready < count) { + if ((this.loading_bar_time == null) || Date.now() > this.loading_bar_time + 16) { + this.loading_bar_time = Date.now(); + if (this.screen.fillRect != null) { + this.screen.clear(); + this.screen.drawRect(0, 0, 100, 10, "#DDD"); + progress = ready / count; + this.screen.fillRect(-(1 - progress) * 48, 0, progress * 96, 6, "#DDD"); + } + if (window.ms_async_load && (this.vm != null)) { + this.vm.context.global.system.loading = Math.floor(ready / count * 100); + } + } + if (!window.ms_async_load) { + return; + } + } else { + if (window.ms_async_load && (this.vm != null)) { + this.vm.context.global.system.loading = 100; + } + } + if (!this.started) { + return this.startReady(); + } + } + + startReady() { + var err, file, global, init, j, len1, lib, meta, namespace, ref, ref1, src; + this.started = true; + meta = { + print: (text) => { + if ((typeof text === "object" || typeof text === "function") && (this.vm != null)) { + text = this.vm.runner.toString(text); + } + return this.listener.log(text); + } + }; + global = { + screen: this.screen.getInterface(), + audio: this.audio.getInterface(), + keyboard: this.keyboard.keyboard, + gamepad: this.gamepad.status, + sprites: this.sprites, + sounds: this.sounds, + music: this.music, + assets: this.assets, + asset_manager: this.asset_manager.getInterface(), + maps: this.maps, + touch: this.touch, + mouse: this.mouse, + fonts: window.fonts, + Sound: Sound.createSoundClass(this.audio), + Image: msImage, + Sprite: Sprite, + Map: MicroMap + }; + if (window.graphics === "M3D") { + global.M3D = M3D; + M3D.runtime = this; + } else if (window.graphics === "M2D") { + global.M2D = M2D; + M2D.runtime = this; + } else if (window.graphics.toLowerCase().startsWith("pixi")) { + global.PIXI = PIXI; + PIXI.runtime = this; + } else if (window.graphics.toLowerCase().startsWith("babylon")) { + global.BABYLON = BABYLON; + BABYLON.runtime = this; + } + ref = window.ms_libs; + for (j = 0, len1 = ref.length; j < len1; j++) { + lib = ref[j]; + lib = lib.split("_")[0]; + switch (lib) { + case "matterjs": + global.Matter = Matter; + break; + case "cannonjs": + global.CANNON = CANNON; + } + } + namespace = location.pathname; + this.vm = new MicroVM(meta, global, namespace, location.hash === "#transpiler"); + if (window.ms_use_server) { + this.vm.context.global.ServerConnection = MPServerConnection; + } + this.vm.context.global.system.pause = () => { + return this.listener.codePaused(); + }; + this.vm.context.global.system.exit = () => { + return this.exit(); + }; + if (!window.ms_async_load) { + this.vm.context.global.system.loading = 100; + } + this.vm.context.global.system.disable_autofullscreen = 0; + this.vm.context.global.system.file = System.file; + this.vm.context.global.system.javascript = System.javascript; + if (window.ms_in_editor) { + this.vm.context.global.system.project = new ProjectInterface(this).interface; + } + System.runtime = this; + ref1 = this.sources; + for (file in ref1) { + src = ref1[file]; + this.updateSource(file, src, false); + } + if (this.vm.runner.getFunctionSource != null) { + init = this.vm.runner.getFunctionSource("init"); + if (init != null) { + this.previous_init = init; + this.vm.call("init"); + if (this.vm.error_info != null) { + err = this.vm.error_info; + err.type = "draw"; + this.listener.reportError(err); + } + } + } else { + this.vm.call("init"); + if (this.vm.error_info != null) { + err = this.vm.error_info; + err.type = "draw"; + this.listener.reportError(err); + } + } + this.dt = 1000 / 60; + this.last_time = Date.now(); + this.current_frame = 0; + this.floating_frame = 0; + requestAnimationFrame(() => { + return this.timer(); + }); + this.screen.startControl(); + return this.listener.postMessage({ + name: "started" + }); + } + + updateMaps() { + var key, map, ref; + ref = this.maps; + for (key in ref) { + map = ref[key]; + map.needs_update = true; + } + } + + runCommand(command, callback) { + var err, res, warnings; + try { + warnings = this.vm.context.warnings; + this.vm.clearWarnings(); + res = this.vm.run(command, void 0, void 0, callback); + this.reportWarnings(); + this.vm.context.warnings = warnings; + if (this.vm.error_info != null) { + err = this.vm.error_info; + err.type = "exec"; + this.listener.reportError(err); + } + this.watchStep(); + if (callback == null) { + return res; + } else if (res != null) { + callback(res); + } + return null; + } catch (error) { + err = error; + return this.listener.reportError(err); + } + } + + projectFileUpdated(type, file, version, data, properties) { + switch (type) { + case "sprites": + return this.updateSprite(file, version, data, properties); + case "maps": + return this.updateMap(file, version, data); + case "ms": + return this.updateCode(file, version, data); + } + } + + projectFileDeleted(type, file) { + switch (type) { + case "sprites": + return delete this.sprites[file.substring(0, file.length - 4).replace(/-/g, "/")]; + case "maps": + return delete this.maps[file.substring(0, file.length - 5).replace(/-/g, "/")]; + } + } + + projectOptionsUpdated(msg) { + this.orientation = msg.orientation; + this.aspect = msg.aspect; + return this.screen.resize(); + } + + updateSprite(name, version, data, properties) { + var img, slug; + slug = name; + name = name.replace(/-/g, "/"); + if (data != null) { + data = "data:image/png;base64," + data; + if (this.sprites[name] != null) { + img = new Image; + img.crossOrigin = "Anonymous"; + img.src = data; + return img.onload = () => { + UpdateSprite(this.sprites[name], img, properties); + return this.updateMaps(); + }; + } else { + this.sprites[name] = LoadSprite(data, properties, () => { + return this.updateMaps(); + }); + return this.sprites[name].name = name; + } + } else { + if (this.sprites[name] != null) { + img = new Image; + img.crossOrigin = "Anonymous"; + img.src = this.url + "sprites/" + slug + `.png?v=${version}`; + return img.onload = () => { + UpdateSprite(this.sprites[name], img, properties); + return this.updateMaps(); + }; + } else { + this.sprites[name] = LoadSprite(this.url + "sprites/" + slug + `.png?v=${version}`, properties, () => { + return this.updateMaps(); + }); + return this.sprites[name].name = name; + } + } + } + + updateMap(name, version, data) { + var m, url; + name = name.replace(/-/g, "/"); + if (data != null) { + m = this.maps[name]; + if (m != null) { + UpdateMap(m, data); + return m.needs_update = true; + } else { + m = new MicroMap(1, 1, 1, 1); + UpdateMap(m, data); + this.maps[name] = m; + return this.maps[name].name = name; + } + } else { + url = this.url + `maps/${name}.json?v=${version}`; + m = this.maps[name]; + if (m != null) { + return m.loadFile(url); + } else { + this.maps[name] = LoadMap(url); + return this.maps[name].name = name; + } + } + } + + updateCode(name, version, data) { + var req, url; + if (data != null) { + this.sources[name] = data; + if ((this.vm != null) && data !== this.update_memory[name]) { + this.vm.clearWarnings(); + } + return this.updateSource(name, data, true); + } else { + url = this.url + `ms/${name}.ms?v=${version}`; + req = new XMLHttpRequest(); + req.onreadystatechange = (event) => { + if (req.readyState === XMLHttpRequest.DONE) { + if (req.status === 200) { + this.sources[name] = req.responseText; + return this.updateSource(name, this.sources[name], true); + } + } + }; + req.open("GET", url); + return req.send(); + } + } + + stop() { + this.stopped = true; + return this.audio.cancelBeeps(); + } + + stepForward() { + if (this.stopped) { + this.updateCall(); + this.drawCall(); + if (this.vm.runner.tick != null) { + this.vm.runner.tick(); + } + return this.watchStep(); + } + } + + resume() { + if (this.stopped) { + this.stopped = false; + return requestAnimationFrame(() => { + return this.timer(); + }); + } + } + + timer() { + var ds, dt, fps, i, j, ref, time, update_rate; + if (this.stopped) { + return; + } + requestAnimationFrame(() => { + return this.timer(); + }); + time = Date.now(); + if (Math.abs(time - this.last_time) > 160) { + this.last_time = time - 16; + } + dt = time - this.last_time; + this.dt = this.dt * .9 + dt * .1; + this.last_time = time; + this.vm.context.global.system.fps = Math.round(fps = 1000 / this.dt); + update_rate = this.vm.context.global.system.update_rate; + if ((update_rate == null) || !(update_rate > 0) || !isFinite(update_rate)) { + update_rate = 60; + } + this.floating_frame += this.dt * update_rate / 1000; + ds = Math.min(10, Math.round(this.floating_frame - this.current_frame)); + if ((ds === 0 || ds === 2) && update_rate === 60 && Math.abs(fps - 60) < 2) { + //console.info "INCORRECT DS: "+ds+ " floating = "+@floating_frame+" current = "+@current_frame + ds = 1; + this.floating_frame = this.current_frame + 1; + } + for (i = j = 1, ref = ds; j <= ref; i = j += 1) { + this.updateCall(); + if (i < ds) { + if (this.vm.runner.tick != null) { + this.vm.runner.tick(); + } + } + } + this.current_frame += ds; + this.drawCall(); + if (this.vm.runner.tick != null) { + this.vm.runner.tick(); + } + if (ds > 0) { + return this.watchStep(); + } + } + + //if ds != 1 + // console.info "frame missed" + //if @current_frame%60 == 0 + // console.info("fps: #{Math.round(1000/@dt)}") + updateCall() { + var err; + if (this.vm.runner.triggers_controls_update) { + if (this.vm.runner.updateControls == null) { + this.vm.runner.updateControls = () => { + return this.updateControls(); + }; + } + } else { + this.updateControls(); + } + try { + //time = Date.now() + this.vm.call("update"); + this.time_machine.step(); + this.reportWarnings(); + //console.info "update time: "+(Date.now()-time) + if (this.vm.error_info != null) { + err = this.vm.error_info; + err.type = "update"; + return this.listener.reportError(err); + } + } catch (error) { + err = error; + if (this.report_errors) { + return this.listener.reportError(err); + } + } + } + + drawCall() { + var err; + try { + this.screen.initDraw(); + this.screen.updateInterface(); + this.vm.call("draw"); + this.reportWarnings(); + if (this.vm.error_info != null) { + err = this.vm.error_info; + err.type = "draw"; + return this.listener.reportError(err); + } + } catch (error) { + err = error; + if (this.report_errors) { + return this.listener.reportError(err); + } + } + } + + reportWarnings() { + var key, ref, ref1, ref2, ref3, ref4, value; + if (this.vm != null) { + ref = this.vm.context.warnings.invoking_non_function; + for (key in ref) { + value = ref[key]; + if (!value.reported) { + value.reported = true; + this.listener.reportError({ + error: "", + type: "non_function", + expression: value.expression, + line: value.line, + column: value.column, + file: value.file + }); + } + } + ref1 = this.vm.context.warnings.using_undefined_variable; + for (key in ref1) { + value = ref1[key]; + if (!value.reported) { + value.reported = true; + this.listener.reportError({ + error: "", + type: "undefined_variable", + expression: value.expression, + line: value.line, + column: value.column, + file: value.file + }); + } + } + ref2 = this.vm.context.warnings.assigning_field_to_undefined; + for (key in ref2) { + value = ref2[key]; + if (!value.reported) { + value.reported = true; + this.listener.reportError({ + error: "", + type: "assigning_undefined", + expression: value.expression, + line: value.line, + column: value.column, + file: value.file + }); + } + } + ref3 = this.vm.context.warnings.assigning_api_variable; + for (key in ref3) { + value = ref3[key]; + if (!value.reported) { + value.reported = true; + this.listener.reportError({ + error: "", + type: "assigning_api_variable", + expression: value.expression, + line: value.line, + column: value.column, + file: value.file + }); + } + } + ref4 = this.vm.context.warnings.assignment_as_condition; + for (key in ref4) { + value = ref4[key]; + if (!value.reported) { + value.reported = true; + this.listener.reportError({ + error: "", + type: "assignment_as_condition", + line: value.line, + column: value.column, + file: value.file + }); + } + } + } + } + + updateControls() { + var c, err, j, k, key, len1, len2, ref, t, touches; + ref = this.connections; + for (j = 0, len1 = ref.length; j < len1; j++) { + c = ref[j]; + c.update(); + } + touches = Object.keys(this.screen.touches); + this.touch.touching = touches.length > 0 ? 1 : 0; + this.touch.touches = []; + for (k = 0, len2 = touches.length; k < len2; k++) { + key = touches[k]; + t = this.screen.touches[key]; + this.touch.x = t.x; + this.touch.y = t.y; + this.touch.touches.push({ + x: t.x, + y: t.y, + id: key + }); + } + if (this.mouse.pressed && !this.previous_mouse_pressed) { + this.previous_mouse_pressed = true; + this.mouse.press = 1; + } else { + this.mouse.press = 0; + } + if (!this.mouse.pressed && this.previous_mouse_pressed) { + this.previous_mouse_pressed = false; + this.mouse.release = 1; + } else { + this.mouse.release = 0; + } + this.mouse.wheel = this.screen.wheel || 0; + this.screen.wheel = 0; + if (this.touch.touching && !this.previous_touch) { + this.previous_touch = true; + this.touch.press = 1; + } else { + this.touch.press = 0; + } + if (!this.touch.touching && this.previous_touch) { + this.previous_touch = false; + this.touch.release = 1; + } else { + this.touch.release = 0; + } + this.vm.context.global.system.file.dropped = 0; + if (this.files_dropped != null) { + this.vm.context.global.system.file.dropped = this.files_dropped; + delete this.files_dropped; + } + this.vm.context.global.system.file.loaded = 0; + if (this.files_loaded != null) { + this.vm.context.global.system.file.loaded = this.files_loaded; + delete this.files_loaded; + } + this.gamepad.update(); + this.keyboard.update(); + try { + this.vm.context.global.system.inputs.gamepad = this.gamepad.count > 0 ? 1 : 0; + } catch (error) { + err = error; + } + } + + getAssetURL(asset) { + return this.url + "assets/" + asset + ".glb"; + } + + getWatcher() { + return this.watcher || (this.watcher = new Watcher(this)); + } + + watch(variables) { + return this.getWatcher().watch(variables); + } + + watchStep() { + return this.getWatcher().step(); + } + + stopWatching() { + return this.getWatcher().stop(); + } + + exit() { + var err; + this.stop(); + if (this.screen.clear != null) { + setTimeout((() => { + return this.screen.clear(); + }), 1); + } + try { + // microStudio embedded exit + this.listener.exit(); + } catch (error) { + err = error; + } + try { + // TODO: Cordova exit, this might work + if ((navigator.app != null) && (navigator.app.exitApp != null)) { + navigator.app.exitApp(); + } + } catch (error) { + err = error; + } + try { + // TODO: Electron exit, may already be covered by window.close() + + // Windowed mode exit + return window.close(); + } catch (error) { + err = error; + } + } + + createDropFeature() { + document.addEventListener("dragenter", (event) => { + return event.stopPropagation(); + }); + document.addEventListener("dragleave", (event) => { + return event.stopPropagation(); + }); + document.addEventListener("dragover", (event) => { + event.preventDefault(); + if (player.runtime.screen.mouseMove != null) { + return player.runtime.screen.mouseMove(event); + } + }); + return document.addEventListener("drop", (event) => { + var err, file, files, i, index, j, len1, list, processFile, ref, result; + event.preventDefault(); + event.stopPropagation(); + try { + list = []; + files = []; + ref = event.dataTransfer.items; + for (j = 0, len1 = ref.length; j < len1; j++) { + i = ref[j]; + if (i.kind === "file") { + file = i.getAsFile(); + files.push(file); + } + } + result = []; + index = 0; + processFile = function() { + var f; + if (index < files.length) { + f = files[index++]; + return loadFile(f, function(data) { + result.push({ + name: f.name, + size: f.size, + content: data, + file_type: f.type + }); + return processFile(); + }); + } else { + player.runtime.files_dropped = result; + if (typeof window.dropHandler === "function") { + return window.dropHandler(result); + } + } + }; + return processFile(); + } catch (error) { + err = error; + return console.error(err); + } + }); + } + +}; + +saveFile = function(data, name, type) { + var a, blob, url; + a = document.createElement("a"); + document.body.appendChild(a); + a.style = "display: none"; + blob = new Blob([data], { + type: type + }); + url = window.URL.createObjectURL(blob); + a.href = url; + a.download = name; + a.click(); + return window.URL.revokeObjectURL(url); +}; + +loadWaveFileLib = function(callback) { + var s; + if (typeof wavefile !== "undefined" && wavefile !== null) { + return callback(); + } else { + s = document.createElement("script"); + s.src = location.origin + "/lib/wavefile/wavefile.js"; + document.head.appendChild(s); + return s.onload = function() { + return callback(); + }; + } +}; + +loadLameJSLib = function(callback) { + var s; + if (typeof lamejs !== "undefined" && lamejs !== null) { + return callback(); + } else { + s = document.createElement("script"); + s.src = location.origin + "/lib/lamejs/lame.min.js"; + document.head.appendChild(s); + return s.onload = function() { + return callback(); + }; + } +}; + +writeProjectFile = function(name, data, thumb) { + return window.player.postMessage({ + name: "write_project_file", + filename: name, + content: data, + thumbnail: thumb + }); +}; + +arrayBufferToBase64 = function(buffer) { + var binary, bytes, i, j, len, ref; + binary = ''; + bytes = new Uint8Array(buffer); + len = bytes.byteLength; + for (i = j = 0, ref = len - 1; j <= ref; i = j += 1) { + binary += String.fromCharCode(bytes[i]); + } + return window.btoa(binary); +}; + +loadFile = function(file, callback) { + var fr; + switch (file.type) { + case "image/png": + case "image/jpeg": + fr = new FileReader; + fr.onload = function() { + var img; + img = new Image; + img.onload = function() { + var image; + image = new msImage(img); + return callback(image); + }; + return img.src = fr.result; + }; + return fr.readAsDataURL(file); + case "audio/wav": + case "audio/x-wav": + case "audio/mp3": + fr = new FileReader; + fr.onload = function() { + return player.runtime.audio.getContext().decodeAudioData(fr.result, function(buffer) { + return callback(new Sound(player.runtime.audio, buffer)); + }); + }; + return fr.readAsArrayBuffer(file); + case "application/json": + fr = new FileReader; + fr.onload = function() { + var err, object; + object = fr.result; + try { + object = JSON.parse(fr.result); + } catch (error) { + err = error; + } + return callback(object); + }; + return fr.readAsText(file); + default: + fr = new FileReader; + fr.onload = function() { + return callback(fr.result); + }; + return fr.readAsText(file); + } +}; + +this.System = { + javascript: function(s) { + var err, f, res; + try { + f = eval(`res = function(global) { ${s} }`); + res = f.call(player.runtime.vm.context.global, player.runtime.vm.context.global); + } catch (error) { + err = error; + console.error(err); + } + if (res != null) { + return res; + } else { + return 0; + } + }, + file: { + save: function(obj, name, format, options) { + var a, c; + if (obj instanceof MicroSound) { + return loadWaveFileLib(function() { + var buffer, ch, ch1, ch2, i, j, k, ref, ref1, wav; + wav = new wavefile.WaveFile; + ch1 = []; + for (i = j = 0, ref = obj.length - 1; j <= ref; i = j += 1) { + ch1[i] = Math.round(Math.min(1, Math.max(-1, obj.read(0, i))) * 32767); + } + if (obj.channels === 2) { + ch2 = []; + for (i = k = 0, ref1 = obj.length - 1; k <= ref1; i = k += 1) { + ch2[i] = Math.round(Math.min(1, Math.max(-1, obj.read(1, i))) * 32767); + } + ch = [ch1, ch2]; + } else { + ch = [ch1]; + } + wav.fromScratch(ch.length, obj.sampleRate, '16', ch); + buffer = wav.toBuffer(); + if (typeof name !== "string") { + name = "sound.wav"; + } else if (!name.endsWith(".wav")) { + name += ".wav"; + } + return saveFile(buffer, name, "octet/stream"); + }); + } else if (obj instanceof msImage) { + c = obj.canvas; + if (typeof name !== "string") { + name = "image"; + } + format = typeof format === "string" && format.toLowerCase() === "jpg" ? "jpg" : "png"; + if (!name.endsWith(`.${format}`)) { + name += `.${format}`; + } + a = document.createElement("a"); + document.body.appendChild(a); + a.style = "display: none"; + return c.toBlob(((blob) => { + var url; + url = window.URL.createObjectURL(blob); + a.href = url; + a.download = name; + a.click(); + return window.URL.revokeObjectURL(url); + }), (format === "png" ? "image/png" : "image/jpeg"), options); + } else if (typeof obj === "object") { + obj = System.runtime.vm.storableObject(obj); + obj = JSON.stringify(obj, null, 2); + if (typeof name !== "string") { + name = "data"; + } + if (!name.endsWith(".json")) { + name += ".json"; + } + return saveFile(obj, name, "text/json"); + } else if (typeof obj === "string") { + if (typeof name !== "string") { + name = "text"; + } + if (!name.endsWith(".txt")) { + name += ".txt"; + } + return saveFile(obj, name, "text/plain"); + } + }, + load: function(options, callback) { + var extensions, i, input, j, ref; + if (typeof options === "string" || Array.isArray(options)) { + extensions = options; + } else { + extensions = options.extensions || null; + } + input = document.createElement("input"); + if (options.multiple) { + input.multiple = true; + } + input.type = "file"; + if (typeof extensions === "string") { + input.accept = `.${extensions}`; + } else if (Array.isArray(extensions)) { + for (i = j = 0, ref = extensions.length - 1; (0 <= ref ? j <= ref : j >= ref); i = 0 <= ref ? ++j : --j) { + extensions[i] = `.${extensions[i]}`; + } + input.accept = extensions.join(","); + } + input.addEventListener("change", (event) => { + var files, index, processFile, result; + files = event.target.files; + result = []; + index = 0; + processFile = function() { + var f; + if (index < files.length) { + f = files[index++]; + return loadFile(f, function(data) { + result.push({ + name: f.name, + size: f.size, + content: data, + file_type: f.type + }); + return processFile(); + }); + } else { + player.runtime.files_loaded = result; + if (typeof callback === "function") { + return callback(result); + } + } + }; + return processFile(); + }); + return input.click(); + }, + setDropHandler: function(handler) { + return window.dropHandler = handler; + } + } +}; + +this.Watcher = class Watcher { + constructor(runtime) { + this.runtime = runtime; + this.vm = this.runtime.vm; + } + + update() { + if (this.watching_variables) { + return this.step(); + } + } + + watch(variables) { + this.watching = true; + this.watching_variables = variables; + this.exclusion_list = [this.vm.context.global.screen, this.vm.context.global.system, this.vm.context.global.keyboard, this.vm.context.global.audio, this.vm.context.global.gamepad, this.vm.context.global.touch, this.vm.context.global.mouse, this.vm.context.global.sprites, this.vm.context.global.maps, this.vm.context.global.sounds, this.vm.context.global.music, this.vm.context.global.assets, this.vm.context.global.asset_manager, this.vm.context.global.fonts, this.vm.context.global.storage]; + if (this.vm.context.global.Function != null) { + this.exclusion_list.push(this.vm.context.global.Function); + } + if (this.vm.context.global.String != null) { + this.exclusion_list.push(this.vm.context.global.String); + } + if (this.vm.context.global.List != null) { + this.exclusion_list.push(this.vm.context.global.List); + } + if (this.vm.context.global.Number != null) { + this.exclusion_list.push(this.vm.context.global.Number); + } + if (this.vm.context.global.Object != null) { + this.exclusion_list.push(this.vm.context.global.Object); + } + if (this.vm.context.global.Image != null) { + this.exclusion_list.push(this.vm.context.global.Image); + } + if (this.vm.context.global.Sound != null) { + this.exclusion_list.push(this.vm.context.global.Sound); + } + if (this.vm.context.global.Sprite != null) { + this.exclusion_list.push(this.vm.context.global.Sprite); + } + if (this.vm.context.global.Map != null) { + this.exclusion_list.push(this.vm.context.global.Map); + } + if (this.vm.context.global.random != null) { + this.exclusion_list.push(this.vm.context.global.random); + } + if (this.vm.context.global.print != null) { + this.exclusion_list.push(this.vm.context.global.print); + } + return this.step(); + } + + stop() { + return this.watching = false; + } + + step(variables = this.watching_variables) { + var index, j, len, res, v, value, vs; + if (!this.watching) { + return; + } + res = {}; + for (j = 0, len = variables.length; j < len; j++) { + v = variables[j]; + if (v === "global") { + value = this.vm.context.global; + } else { + vs = v.split("."); + value = this.vm.context.global; + index = 0; + while (index < vs.length && (value != null)) { + value = value[vs[index++]]; + } + } + if ((value != null) && this.exclusion_list.indexOf(value) < 0) { + res[v] = this.exploreValue(value, 1, 10); + } + } + return this.runtime.listener.postMessage({ + name: "watch_update", + data: res + }); + } + + exploreValue(value, depth = 1, array_max = 10) { + var i, j, key, len, res, v; + if (value == null) { + return { + type: "number", + value: 0 + }; + } + if (typeof value === "function" || value instanceof Program.Function || (typeof Routine !== "undefined" && Routine !== null) && value instanceof Routine) { + return { + type: "function", + value: "" + }; + } else if (typeof value === "object") { + if (Array.isArray(value)) { + if (depth === 0) { + return { + type: "list", + value: "", + length: value.length + }; + } + res = []; + for (i = j = 0, len = value.length; j < len; i = ++j) { + v = value[i]; + if (i >= 100) { + break; + } + if (this.exclusion_list.indexOf(v) < 0) { + res[i] = this.exploreValue(v, depth - 1, array_max); + } + } + return res; + } else { + if (depth === 0) { + v = ""; + if (value.classname) { + v = "class " + value.classname; + } + if ((value.class != null) && (value.class.classname != null)) { + v = value.class.classname; + } + return { + type: "object", + value: v + }; + } + res = {}; + for (key in value) { + v = value[key]; + if (this.exclusion_list.indexOf(v) < 0) { + res[key] = this.exploreValue(v, depth - 1, array_max); + } + } + return res; + } + } else if (typeof value === "string") { + return { + type: "string", + value: value.length < 43 ? value : value.substring(0, 40) + "..." + }; + } else if (typeof value === "number") { + return { + type: "number", + value: isFinite(value) ? value : 0 + }; + } else if (typeof value === "boolean") { + return { + type: "number", + value: value ? 1 : 0 + }; + } else { + return { + type: "unknown", + value: value + }; + } + } + +}; + +this.ProjectInterface = class ProjectInterface { + constructor(runtime) { + this.runtime = runtime; + this.interface = { + listFiles: (path, callback) => { + return this.listFiles(path, callback); + }, + readFile: (path, callback) => { + return this.readFile(path, callback); + }, + writeFile: (path, obj, options, callback) => { + return this.writeFile(path, obj, options, callback); + }, + deleteFile: (path, callback) => { + return this.deleteFile(path, callback); + } + }; + } + + callback(callback, data, res, error) { + if (error != null) { + res.error = error; + res.ready = 1; + if (typeof callback === "function") { + return callback(0, error); + } + } else { + res.data = data; + res.ready = 1; + if (typeof callback === "function") { + return callback(data); + } + } + } + + writeFile(path, obj, options, callback) { + var kind; + kind = path.split("/")[0]; + switch (kind) { + case "source": + return this.writeSourceFile(obj, path, options, callback); + case "sprites": + return this.writeSpriteFile(obj, path, options, callback); + case "maps": + return this.writeMapFile(obj, path, options, callback); + case "sounds": + return this.writeSoundFile(obj, path, options, callback); + case "music": + return this.writeMusicFile(obj, path, options, callback); + case "assets": + return this.writeAssetFile(obj, path, options, callback); + default: + return callback(0, `Root folder ${kind} does not exist`); + } + } + + writeSourceFile(obj, path, options, callback) { + var msg, res; + res = { + ready: 0 + }; + if (typeof obj !== "string") { + this.callback(callback, 0, res, "Incorrect object type, expected string"); + } else { + msg = { + name: "write_project_file", + path: path, + content: obj, + options: options + }; + this.runtime.listener.postRequest(msg, (result) => { + return this.callback(callback, result.content, res, result.error); + }); + } + return res; + } + + writeSpriteFile(obj, path, options, callback) { + var canvas, context, fps, frames, i, j, msg, ref, res; + res = { + ready: 0 + }; + if (obj instanceof msImage) { + msg = { + name: "write_project_file", + path: path, + content: obj.canvas.toDataURL().split(",")[1], + options: options + }; + this.runtime.listener.postRequest(msg, (result) => { + return this.callback(callback, result.content, res, result.error); + }); + } else if (obj instanceof Sprite) { + fps = obj.fps; + if (obj.frames.length === 1) { + canvas = obj.frames[0].canvas; + frames = 1; + } else { + canvas = document.createElement("canvas"); + canvas.width = obj.width; + canvas.height = obj.height * obj.frames.length; + context = canvas.getContext("2d"); + for (i = j = 0, ref = obj.frames.length - 1; (0 <= ref ? j <= ref : j >= ref); i = 0 <= ref ? ++j : --j) { + context.drawImage(obj.frames[i].canvas, 0, i * obj.height); + } + frames = obj.frames.length; + } + msg = { + name: "write_project_file", + path: path, + content: canvas.toDataURL().split(",")[1], + fps: fps, + frames: frames, + options: options + }; + this.runtime.listener.postRequest(msg, (result) => { + return this.callback(callback, result.content, res, result.error); + }); + } else { + this.callback(callback, 0, res, "Incorrect object type, expected Image or Sprite"); + } + return res; + } + + writeMapFile(obj, path, options, callback) { + var msg, res; + res = { + ready: 0 + }; + if (obj instanceof MicroMap) { + msg = { + name: "write_project_file", + path: path, + content: SaveMap(obj), + options: options + }; + this.runtime.listener.postRequest(msg, (result) => { + return this.callback(callback, result.content, res, result.error); + }); + } else { + this.callback(callback, 0, res, "Incorrect object type, expected Map"); + } + return res; + } + + writeSoundFile(obj, path, options, callback) { + var res; + res = { + ready: 0 + }; + if (obj instanceof MicroSound) { + loadWaveFileLib(() => { + var buffer, ch, ch1, ch2, encoded, i, j, k, msg, ref, ref1, wav; + wav = new wavefile.WaveFile; + ch1 = []; + for (i = j = 0, ref = obj.length - 1; j <= ref; i = j += 1) { + ch1[i] = Math.round(Math.min(1, Math.max(-1, obj.read(0, i))) * 32767); + } + if (obj.channels === 2) { + ch2 = []; + for (i = k = 0, ref1 = obj.length - 1; k <= ref1; i = k += 1) { + ch2[i] = Math.round(Math.min(1, Math.max(-1, obj.read(1, i))) * 32767); + } + ch = [ch1, ch2]; + } else { + ch = [ch1]; + } + wav.fromScratch(ch.length, obj.sampleRate, '16', ch); + buffer = wav.toBuffer(); + encoded = arrayBufferToBase64(buffer); + msg = { + name: "write_project_file", + path: path, + content: encoded, + options: options + }; + return this.runtime.listener.postRequest(msg, (result) => { + return this.callback(callback, result.content, res, result.error); + }); + }); + } else { + this.callback(callback, 0, res, "Incorrect object type, expected Sound"); + } + return res; + } + + writeMusicFile(obj, path, options, callback) { + var res; + res = { + ready: 0 + }; + if (obj instanceof MicroSound) { + loadLameJSLib(() => { + var blob, fr, i, index, j, k, kbps, l, m, mp3Data, mp3buf, mp3encoder, ref, ref1, ref2, ref3, ref4, ref5, sampleBlockSize, samples, samplesR, toindex; + kbps = 128; + mp3encoder = new lamejs.Mp3Encoder(obj.channels, obj.sampleRate, kbps); + index = 0; + sampleBlockSize = 1152; + samples = new Int16Array(sampleBlockSize); + samplesR = new Int16Array(sampleBlockSize); + mp3Data = []; + while (index < obj.length) { + toindex = Math.min(sampleBlockSize - 1, obj.length - index - 1); + for (i = j = 0, ref = toindex; j <= ref; i = j += 1) { + samples[i] = Math.round(32767 * Math.max(-1, Math.min(1, obj.read(0, index + i)))); + } + if (obj.channels === 2) { + for (i = k = 0, ref1 = toindex; k <= ref1; i = k += 1) { + samplesR[i] = Math.round(32767 * Math.max(-1, Math.min(1, obj.read(1, index + i)))); + } + } + for (i = l = ref2 = toindex + 1, ref3 = sampleBlockSize - 1; l <= ref3; i = l += 1) { + samples[i] = 0; + } + if (obj.channels === 2) { + for (i = m = ref4 = toindex + 1, ref5 = sampleBlockSize - 1; m <= ref5; i = m += 1) { + samplesR[i] = 0; + } + } + index += sampleBlockSize; + if (obj.channels === 2) { + mp3buf = mp3encoder.encodeBuffer(samples, samplesR); + } else { + mp3buf = mp3encoder.encodeBuffer(samples); + } + if (mp3buf.length > 0) { + mp3Data.push(mp3buf); + } + } + mp3buf = mp3encoder.flush(); + if (mp3buf.length > 0) { + mp3Data.push(mp3buf); + } + blob = new Blob(mp3Data, { + type: 'audio/mp3' + }); + fr = new FileReader(); + fr.onload = (e) => { + var msg; + msg = { + name: "write_project_file", + path: path, + content: fr.result.split(",")[1], + options: options + }; + return this.runtime.listener.postRequest(msg, (result) => { + return this.callback(callback, result.content, res, result.error); + }); + }; + return fr.readAsDataURL(blob); + }); + } else { + this.callback(callback, 0, res, "Incorrect object type, expected Sound"); + } + return res; + } + + writeAssetFile(obj, path, options, callback) { + var err, ext, mime, msg, ref, ref1, res; + res = { + ready: 0 + }; + if (obj instanceof msImage || obj instanceof Sprite) { + if (obj instanceof Sprite) { + obj = obj.frames[0]; + } + if ((ref = options.ext) === "jpg" || ref === "png") { + ext = options.ext; + } else { + ext = "png"; + } + mime = ext === "jpg" ? "image/jpeg" : "image/png"; + msg = { + name: "write_project_file", + path: path, + content: obj.canvas.toDataURL(mime), + ext: ext, + options: options + }; + this.runtime.listener.postRequest(msg, (result) => { + return this.callback(callback, result.content, res, result.error); + }); + } else if (typeof obj === "string") { + if ((ref1 = options.ext) === "txt" || ref1 === "csv" || ref1 === "obj" || ref1 === "json" || ref1 === "md") { + ext = options.ext; + } else { + ext = "txt"; + } + if (ext === "json" && typeof obj === "string") { + try { + obj = JSON.parse(obj); + } catch (error1) { + err = error1; + } + } + msg = { + name: "write_project_file", + path: path, + content: obj, + ext: ext, + options: options + }; + this.runtime.listener.postRequest(msg, (result) => { + return this.callback(callback, result.content, res, result.error); + }); + } else if (typeof obj === "object") { + obj = this.runtime.vm.storableObject(obj); + msg = { + name: "write_project_file", + path: path, + content: obj, + ext: "json", + options: options + }; + this.runtime.listener.postRequest(msg, (result) => { + return this.callback(callback, result.content, res, result.error); + }); + } else { + this.callback(callback, 0, res, "Unrecognized object type"); + } + return res; + } + + listFiles(path, callback) { + var msg, res; + msg = { + name: "list_project_files", + path: path + }; + res = { + ready: 0 + }; + this.runtime.listener.postRequest(msg, function(result) { + res.ready = 1; + if (result.list) { + res.list = result.list; + } + if (result.error) { + res.error = result.error; + } + if (typeof callback === "function") { + return callback(result.list, result.error); + } + }); + return res; + } + + readFile(path, callback) { + var kind, msg, res; + msg = { + name: "read_project_file", + path: path + }; + res = { + ready: 0 + }; + kind = path.split("/")[0]; + this.runtime.listener.postRequest(msg, (result) => { + var img, map, s; + res.ready = 1; + if (result.error) { + res.error = result.error; + if (typeof callback === "function") { + return callback(0, result.error); + } + } else { + switch (kind) { + case "sprites": + s = LoadSprite(result.content.data, { + fps: result.content.fps, + frames: result.content.frames + }, () => { + res.result = s; + if (typeof callback === "function") { + return callback(res.result, 0); + } + }); + break; + case "maps": + map = new MicroMap(1, 1, 1, 1); + UpdateMap(map, result.content); + res.result = map; + if (typeof callback === "function") { + callback(res.result, 0); + } + break; + case "sounds": + case "music": + s = new Sound(this.runtime.audio, result.content); + res.result = s; + if (typeof callback === "function") { + callback(s, 0); + } + break; + case "assets": + switch (result.content.type) { + case "text": + res.result = result.content.data; + callback(res.result, 0); + break; + case "json": + res.result = result.content.data; + callback(res.result, 0); + break; + case "image": + img = new Image; + img.src = result.content.data; + img.onload = () => { + var image; + image = new msImage(img); + res.result = image; + return callback(res.result, 0); + }; + } + break; + default: + res.result = result.content.toString(); + if (typeof callback === "function") { + return callback(res.result, 0); + } + } + } + }); + return res; + } + + deleteFile(path, callback) { + var msg, res; + msg = { + name: "delete_project_file", + path: path + }; + res = { + ready: 0 + }; + this.runtime.listener.postRequest(msg, function(result) { + res.ready = 1; + res.result = result.content || 0; + if (result.error) { + res.error = result.error; + } + if (typeof callback === "function") { + return callback(res.result, result.error); + } + }); + return res; + } + +}; + +this.TimeMachine = class TimeMachine { + constructor(runtime) { + this.runtime = runtime; + this.history = []; + this.record_index = 0; + this.replay_position = 0; + this.recording = false; + this.max_length = 60 * 30; + this.record_length = 0; + this.loop_length = 60 * 4; + } + + step() { + var end, err, histo, i, index, j, ref, ref1, start; + if (this.recording) { + try { + if (this.replay_position !== 0) { + histo = []; + start = this.record_length; + end = this.replay_position + 1; + for (i = j = ref = start, ref1 = end; j >= ref1; i = j += -1) { + index = (this.record_index - i + this.max_length) % this.max_length; + histo.push(this.history[index]); + } + if (this.looping) { + this.loop_start = this.loop_length; + } + this.history = histo; + this.record_index = this.history.length; + this.record_length = this.history.length; + this.replay_position = 0; + } + this.history[this.record_index++] = this.storableHistory(this.runtime.vm.context.global); + this.record_length = Math.min(this.record_length + 1, this.max_length); + if (this.record_index >= this.max_length) { + this.record_index = 0; + } + return this.sendStatus(); + } catch (error) { + err = error; + return console.error(err); + } + } + } + + messageReceived(data) { + var pos; + switch (data.command) { + case "start_recording": + if (!this.recording) { + this.recording = true; + this.record_index = 0; + this.replay_position = 0; + this.record_length = 0; + this.history = []; + return this.sendStatus(); + } + break; + case "stop_recording": + if (this.recording) { + this.recording = false; + return this.sendStatus(); + } + break; + case "step_backward": + return this.stepBackward(); + case "step_forward": + return this.stepForward(); + case "replay_position": + pos = Math.round(data.position); + this.replay_position = Math.max(2, Math.min(this.record_length - 1, pos)); + if (this.looping) { + this.loop_start = this.replay_position; + this.loop_index = 0; + } + this.replay(); + return this.sendStatus(); + case "start_looping": + if (this.record_length === 0) { + return; + } + this.looping = true; + this.recording = false; + this.loop_start = Math.max(this.replay_position, 1); + this.loop_index = 0; + return this.loop(); + case "stop_looping": + return this.stopLooping(); + } + } + + stopLooping() { + if (this.looping) { + this.looping = false; + this.replay_position = this.loop_start; + return this.sendStatus(); + } + } + + loop() { + if (!this.looping) { + return; + } + requestAnimationFrame(() => { + return this.loop(); + }); + if (this.loop_index === 0) { + this.replay_position = this.loop_start; + this.replay(true); + this.loop_index += 1; + } else { + this.loop_index += 1; + if (this.loop_index > this.loop_length) { + this.loop_index = 0; + } + this.replay_position = this.loop_start - this.loop_index; + this.replayControls(); + this.runtime.updateCall(); + this.runtime.drawCall(); + this.runtime.watchStep(); + this.resetControls(); + } + return this.sendStatus(); + } + + stepBackward() { + if (this.replay_position + 1 >= this.record_length) { + return; + } + this.stopLooping(); + this.replay_position += 1; + this.replay(); + return this.sendStatus(); + } + + stepForward() { + if (this.replay_position <= 1) { + return; + } + this.stopLooping(); + this.replay_position--; + this.replay(); + return this.sendStatus(); + } + + replayControls() { + var index; + if (this.replay_position >= this.record_length) { + return; + } + if (this.replay_position <= 0) { + return; + } + index = (this.record_index - this.replay_position + this.max_length) % this.max_length; + this.copyGlobal(this.history[index].keyboard, this.runtime.vm.context.global.keyboard); + this.copyGlobal(this.history[index].gamepad, this.runtime.vm.context.global.gamepad); + this.copyGlobal(this.history[index].touch, this.runtime.vm.context.global.touch); + return this.copyGlobal(this.history[index].mouse, this.runtime.vm.context.global.mouse); + } + + resetControls() { + var mouse, touch; + this.runtime.keyboard.reset(); + touch = this.runtime.vm.context.global.touch; + touch.touching = 0; + touch.touches = []; + mouse = this.runtime.vm.context.global.mouse; + mouse.pressed = 0; + mouse.left = 0; + mouse.right = 0; + return mouse.middle = 0; + } + + replay(clone = false) { + var index; + index = (this.record_index - this.replay_position + this.max_length) % this.max_length; + this.copyGlobal((clone ? this.storableHistory(this.history[index]) : this.history[index]), this.runtime.vm.context.global); + //@runtime.vm.context.global = if clone then @storableHistory(@history[index]) else @history[index] + //@runtime.vm.context.meta.global = @runtime.vm.context.global + //@runtime.vm.context.object = @runtime.vm.context.global + //@runtime.vm.context.local = @runtime.vm.context.global + this.runtime.vm.call("draw"); + if (this.runtime.vm.runner.tick != null) { + this.runtime.vm.runner.tick(); + } + return this.runtime.watchStep(); + } + + copyGlobal(source, dest) { + var key, value; + for (key in source) { + value = source[key]; + if (key === "keyboard" || key === "gamepad" || key === "touch" || key === "mouse") { + continue; + } + if (((typeof Routine === "undefined" || Routine === null) || !(value instanceof Routine)) && !(value instanceof Program.Function) && typeof value !== "function" && (value.classname == null)) { + dest[key] = value; + } + } + for (key in dest) { + if (source[key] == null) { + delete dest[key]; + } + } + } + + sendStatus() { + return this.runtime.listener.postMessage({ + name: "time_machine", + command: "status", + length: this.record_length, + head: this.record_length - this.replay_position, + max: this.max_length + }); + } + + storableHistory(value) { + var clones, global, refs; + global = this.runtime.vm.context.global; + this.excluded = [ + global.screen, + global.system, + //global.keyboard + global.audio, + //global.gamepad + //global.touch + //global.mouse + global.sprites, + global.maps, + global.sounds, + global.music, + global.assets, + global.asset_manager, + global.fonts, + global.storage, + window + ]; + if (global.PIXI != null) { + // for key,value of window + // @excluded.push value + this.excluded.push(global.PIXI); + } + if (global.BABYLON != null) { + this.excluded.push(global.BABYLON); + } + if (global.M2D != null) { + this.excluded.push(global.M2D); + } + if (global.M3D != null) { + this.excluded.push(global.M3D); + } + if (global.Matter != null) { + this.excluded.push(global.Matter); + } + if (global.CANNON != null) { + this.excluded.push(global.CANNON); + } + if (global.Object != null) { + this.excluded.push(global.Object); + } + if (global.List != null) { + this.excluded.push(global.List); + } + if (global.String != null) { + this.excluded.push(global.String); + } + if (global.Number != null) { + this.excluded.push(global.Number); + } + if (global.Function != null) { + this.excluded.push(global.Function); + } + if (global.random != null) { + this.excluded.push(global.random); + } + refs = []; + clones = []; + return this.makeStorableObject(value, refs, clones); + } + + makeStorableObject(value, refs, clones) { + var i, index, j, key, len, res, v; + if (value == null) { + return value; + } + if (typeof value === "function" || value instanceof Program.Function || (typeof Routine !== "undefined" && Routine !== null) && value instanceof Routine) { + return value; + } else if (typeof value === "object") { + if (this.excluded.indexOf(value) >= 0) { + return value; + } + if (value instanceof Sprite || value instanceof MicroMap || value instanceof msImage || value instanceof MicroSound) { + return value; + } + if (value.classname != null) { + return value; + } + index = refs.indexOf(value); + if (index >= 0) { + return clones[index]; + } + if (Array.isArray(value)) { + res = []; + refs.push(value); + clones.push(res); + for (i = j = 0, len = value.length; j < len; i = ++j) { + v = value[i]; + v = this.makeStorableObject(v, refs, clones); + if (v != null) { + res[i] = v; + } + } + return res; + } else { + res = {}; + refs.push(value); + clones.push(res); + for (key in value) { + v = value[key]; + v = this.makeStorableObject(v, refs, clones); + if (v != null) { + res[key] = v; + } + } + return res; + } + } else { + return value; + } + } + +}; + +this.Screen = class Screen { + constructor(runtime) { + this.runtime = runtime; + this.canvas = document.createElement("canvas"); + this.canvas.width = 1080; + this.canvas.height = 1920; + this.touches = {}; + this.mouse = { + x: -10000, + y: -10000, + pressed: 0, + left: 0, + middle: 0, + right: 0, + wheel: 0 + }; + this.alpha = 1; + this.pixelated = 1; + this.line_width = 1; + this.translation_x = 0; + this.translation_y = 0; + this.rotation = 0; + this.scale_x = 1; + this.scale_y = 1; + this.screen_transform = false; + this.object_rotation = 0; + this.object_scale_x = 1; + this.object_scale_y = 1; + this.anchor_x = 0; + this.anchor_y = 0; + this.supersampling = this.previous_supersampling = 1; + this.font = "BitCell"; + this.font_load_requested = {}; + this.font_loaded = {}; + this.loadFont(this.font); + this.initContext(); + this.cursor = "default"; + this.canvas.addEventListener("mousemove", () => { + this.last_mouse_move = Date.now(); + if (this.cursor !== "default" && this.cursor_visibility === "auto") { + this.cursor = "default"; + return this.canvas.style.cursor = "default"; + } + }); + // when the context is lost and then restored, base transform needs to be reinstated. + this.canvas.addEventListener("contextrestored", () => { + return this.initContext(); + }); + setInterval((() => { + return this.checkMouseCursor(); + }), 1000); + this.cursor_visibility = "auto"; + } + + checkMouseCursor() { + if (Date.now() > this.last_mouse_move + 4000 && this.cursor_visibility === "auto") { + if (this.cursor !== "none") { + this.cursor = "none"; + return this.canvas.style.cursor = "none"; + } + } + } + + setCursorVisible(visible) { + this.cursor_visibility = visible; + if (visible) { + this.cursor = "default"; + return this.canvas.style.cursor = "default"; + } else { + this.cursor = "none"; + return this.canvas.style.cursor = "none"; + } + } + + initContext() { + var b, c, j, len1, ratio, ref; + c = this.canvas.getContext("2d", { + alpha: false + }); + if (c !== this.context) { + this.context = c; + } else { + this.context.restore(); + } + this.context.save(); + this.context.translate(this.canvas.width / 2, this.canvas.height / 2); + ratio = Math.min(this.canvas.width / 200, this.canvas.height / 200); + this.context.scale(ratio, ratio); + this.width = this.canvas.width / ratio; + this.height = this.canvas.height / ratio; + // @translation_x = 0 + // @translation_y = 0 + // @rotation = 0 + // @scale_x = 1 + // @scale_y = 1 + // @screen_transform = false + this.context.lineCap = "round"; + this.blending = { + normal: "source-over", + additive: "lighter" + }; + ref = ["source-over", "source-in", "source-out", "source-atop", "destination-over", "destination-in", "destination-out", "destination-atop", "lighter", "copy", "xor", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"]; + for (j = 0, len1 = ref.length; j < len1; j++) { + b = ref[j]; + this.blending[b] = b; + } + } + + getInterface() { + var screen; + if (this.interface != null) { + return this.interface; + } + screen = this; + return this.interface = { + width: this.width, + height: this.height, + clear: function(color) { + return screen.clear(color); + }, + setColor: function(color) { + return screen.setColor(color); + }, + setAlpha: function(alpha) { + return screen.setAlpha(alpha); + }, + setPixelated: function(pixelated) { + return screen.setPixelated(pixelated); + }, + setBlending: function(blending) { + return screen.setBlending(blending); + }, + setLinearGradient: function(x1, y1, x2, y2, c1, c2) { + return screen.setLinearGradient(x1, y1, x2, y2, c1, c2); + }, + setRadialGradient: function(x, y, radius, c1, c2) { + return screen.setRadialGradient(x, y, radius, c1, c2); + }, + setFont: function(font) { + return screen.setFont(font); + }, + setTranslation: function(tx, ty) { + return screen.setTranslation(tx, ty); + }, + setScale: function(x, y) { + return screen.setScale(x, y); + }, + setRotation: function(rotation) { + return screen.setRotation(rotation); + }, + setDrawAnchor: function(ax, ay) { + return screen.setDrawAnchor(ax, ay); + }, + setDrawRotation: function(rotation) { + return screen.setDrawRotation(rotation); + }, + setDrawScale: function(x, y) { + return screen.setDrawScale(x, y); + }, + fillRect: function(x, y, w, h, c) { + return screen.fillRect(x, y, w, h, c); + }, + fillRoundRect: function(x, y, w, h, r, c) { + return screen.fillRoundRect(x, y, w, h, r, c); + }, + fillRound: function(x, y, w, h, c) { + return screen.fillRound(x, y, w, h, c); + }, + drawRect: function(x, y, w, h, c) { + return screen.drawRect(x, y, w, h, c); + }, + drawRoundRect: function(x, y, w, h, r, c) { + return screen.drawRoundRect(x, y, w, h, r, c); + }, + drawRound: function(x, y, w, h, c) { + return screen.drawRound(x, y, w, h, c); + }, + drawSprite: function(sprite, x, y, w, h) { + return screen.drawSprite(sprite, x, y, w, h); + }, + drawImage: function(sprite, x, y, w, h) { + return screen.drawSprite(sprite, x, y, w, h); + }, + drawSpritePart: function(sprite, sx, sy, sw, sh, x, y, w, h) { + return screen.drawSpritePart(sprite, sx, sy, sw, sh, x, y, w, h); + }, + drawImagePart: function(sprite, sx, sy, sw, sh, x, y, w, h) { + return screen.drawSpritePart(sprite, sx, sy, sw, sh, x, y, w, h); + }, + drawMap: function(map, x, y, w, h) { + return screen.drawMap(map, x, y, w, h); + }, + drawText: function(text, x, y, size, color) { + return screen.drawText(text, x, y, size, color); + }, + drawTextOutline: function(text, x, y, size, color) { + return screen.drawTextOutline(text, x, y, size, color); + }, + textWidth: function(text, size) { + return screen.textWidth(text, size); + }, + setLineWidth: function(width) { + return screen.setLineWidth(width); + }, + setLineDash: function(dash) { + return screen.setLineDash(dash); + }, + drawLine: function(x1, y1, x2, y2, color) { + return screen.drawLine(x1, y1, x2, y2, color); + }, + drawPolygon: function() { + return screen.drawPolygon(arguments); + }, + drawPolyline: function() { + return screen.drawPolyline(arguments); + }, + fillPolygon: function() { + return screen.fillPolygon(arguments); + }, + drawQuadCurve: function() { + return screen.drawQuadCurve(arguments); + }, + drawBezierCurve: function() { + return screen.drawBezierCurve(arguments); + }, + drawArc: function(x, y, radius, angle1, angle2, ccw, color) { + return screen.drawArc(x, y, radius, angle1, angle2, ccw, color); + }, + fillArc: function(x, y, radius, angle1, angle2, ccw, color) { + return screen.fillArc(x, y, radius, angle1, angle2, ccw, color); + }, + setCursorVisible: function(visible) { + return screen.setCursorVisible(visible); + }, + loadFont: function(font) { + return screen.loadFont(font); + }, + isFontReady: function(font) { + return screen.isFontReady(font); + } + }; + } + + updateInterface() { + this.interface.width = this.width; + return this.interface.height = this.height; + } + + clear(color) { + var blending_save, c, s; + c = this.context.fillStyle; + s = this.context.strokeStyle; + blending_save = this.context.globalCompositeOperation; + this.context.globalAlpha = 1; + this.context.globalCompositeOperation = "source-over"; + if (color != null) { + this.setColor(color); + } else { + this.context.fillStyle = "#000"; + } + this.context.fillRect(-this.width / 2, -this.height / 2, this.width, this.height); + this.context.fillStyle = c; + this.context.strokeStyle = s; + return this.context.globalCompositeOperation = blending_save; + } + + initDraw() { + this.alpha = 1; + this.line_width = 1; + if (this.supersampling !== this.previous_supersampling) { + this.resize(); + return this.previous_supersampling = this.supersampling; + } + } + + setColor(color) { + var b, c, g, r; + if (color == null) { + return; + } + if (!Number.isNaN(Number.parseInt(color))) { + r = (Math.floor(color / 100) % 10) / 9 * 255; + g = (Math.floor(color / 10) % 10) / 9 * 255; + b = (Math.floor(color) % 10) / 9 * 255; + c = 0xFF000000; + c += r << 16; + c += g << 8; + c += b; + c = "#" + c.toString(16).substring(2, 8); + this.context.fillStyle = c; + return this.context.strokeStyle = c; + } else if (typeof color === "string") { + this.context.fillStyle = color; + return this.context.strokeStyle = color; + } + } + + setAlpha(alpha1) { + this.alpha = alpha1; + } + + setPixelated(pixelated1) { + this.pixelated = pixelated1; + } + + setBlending(blending) { + blending = this.blending[blending || "normal"] || "source-over"; + return this.context.globalCompositeOperation = blending; + } + + setLineWidth(line_width) { + this.line_width = line_width; + } + + setLineDash(dash) { + if (!Array.isArray(dash)) { + return this.context.setLineDash([]); + } else { + return this.context.setLineDash(dash); + } + } + + setLinearGradient(x1, y1, x2, y2, c1, c2) { + var grd; + grd = this.context.createLinearGradient(x1, -y1, x2, -y2); + grd.addColorStop(0, c1); + grd.addColorStop(1, c2); + this.context.fillStyle = grd; + return this.context.strokeStyle = grd; + } + + setRadialGradient(x, y, radius, c1, c2) { + var grd; + grd = this.context.createRadialGradient(x, -y, 0, x, -y, radius); + grd.addColorStop(0, c1); + grd.addColorStop(1, c2); + this.context.fillStyle = grd; + return this.context.strokeStyle = grd; + } + + setFont(font) { + this.font = font || "Verdana"; + return this.loadFont(this.font); + } + + loadFont(font = "BitCell") { + var err; + if (!this.font_load_requested[font]) { + this.font_load_requested[font] = true; + try { + if ((document.fonts != null) && (document.fonts.load != null)) { + document.fonts.load(`16pt ${font}`); + } + } catch (error) { + err = error; + } + } + return 1; + } + + isFontReady(font = this.font) { + var err, res; + if (this.font_loaded[font]) { + return 1; + } + try { + if ((document.fonts != null) && (document.fonts.check != null)) { + res = document.fonts.check(`16pt ${font}`); + if (res) { + this.font_loaded[font] = res; + } + if (res) { + return 1; + } else { + return 0; + } + } + } catch (error) { + err = error; + } + return 1; + } + + setTranslation(translation_x, translation_y) { + this.translation_x = translation_x; + this.translation_y = translation_y; + if (!isFinite(this.translation_x)) { + this.translation_x = 0; + } + if (!isFinite(this.translation_y)) { + this.translation_y = 0; + } + return this.updateScreenTransform(); + } + + setScale(scale_x, scale_y) { + this.scale_x = scale_x; + this.scale_y = scale_y; + if (!isFinite(this.scale_x) || this.scale_x === 0) { + this.scale_x = 1; + } + if (!isFinite(this.scale_y) || this.scale_y === 0) { + this.scale_y = 1; + } + return this.updateScreenTransform(); + } + + setRotation(rotation1) { + this.rotation = rotation1; + if (!isFinite(this.rotation)) { + this.rotation = 0; + } + return this.updateScreenTransform(); + } + + updateScreenTransform() { + return this.screen_transform = this.translation_x !== 0 || this.translation_y !== 0 || this.scale_x !== 1 || this.scale_y !== 1 || this.rotation !== 0; + } + + setDrawAnchor(anchor_x, anchor_y) { + this.anchor_x = anchor_x; + this.anchor_y = anchor_y; + if (typeof this.anchor_x !== "number") { + this.anchor_x = 0; + } + if (typeof this.anchor_y !== "number") { + return this.anchor_y = 0; + } + } + + setDrawRotation(object_rotation) { + this.object_rotation = object_rotation; + } + + setDrawScale(object_scale_x, object_scale_y = this.object_scale_x) { + this.object_scale_x = object_scale_x; + this.object_scale_y = object_scale_y; + } + + initDrawOp(x, y, object_transform = true) { + var res; + res = false; + if (this.screen_transform) { + this.context.save(); + res = true; + this.context.translate(this.translation_x, -this.translation_y); + this.context.scale(this.scale_x, this.scale_y); + this.context.rotate(-this.rotation / 180 * Math.PI); + this.context.translate(x, y); + } + if (object_transform && (this.object_rotation !== 0 || this.object_scale_x !== 1 || this.object_scale_y !== 1)) { + if (!res) { + this.context.save(); + res = true; + this.context.translate(x, y); + } + if (this.object_rotation !== 0) { + this.context.rotate(-this.object_rotation / 180 * Math.PI); + } + if (this.object_scale_x !== 1 || this.object_scale_y !== 1) { + this.context.scale(this.object_scale_x, this.object_scale_y); + } + } + return res; + } + + closeDrawOp(x, y) { + //if @object_scale_x != 1 or @object_scale_y != 1 + // @context.scale 1/@object_scale_x,1/@object_scale_y + + //if @object_rotation != 0 + // @context.rotate -@object_rotation/180*Math.PI + //@context.translate -x,-y + return this.context.restore(); + } + + fillRect(x, y, w, h, color) { + this.setColor(color); + this.context.globalAlpha = this.alpha; + if (this.initDrawOp(x, -y)) { + this.context.fillRect(-w / 2 - this.anchor_x * w / 2, -h / 2 + this.anchor_y * h / 2, w, h); + return this.closeDrawOp(x, -y); + } else { + return this.context.fillRect(x - w / 2 - this.anchor_x * w / 2, -y - h / 2 + this.anchor_y * h / 2, w, h); + } + } + + fillRoundRect(x, y, w, h, round = 10, color) { + this.setColor(color); + this.context.globalAlpha = this.alpha; + if (this.initDrawOp(x, -y)) { + this.context.fillRoundRect(-w / 2 - this.anchor_x * w / 2, -h / 2 + this.anchor_y * h / 2, w, h, round); + return this.closeDrawOp(x, -y); + } else { + return this.context.fillRoundRect(x - w / 2 - this.anchor_x * w / 2, -y - h / 2 + this.anchor_y * h / 2, w, h, round); + } + } + + fillRound(x, y, w, h, color) { + this.setColor(color); + this.context.globalAlpha = this.alpha; + w = Math.abs(w); + h = Math.abs(h); + if (this.initDrawOp(x, -y)) { + this.context.beginPath(); + this.context.ellipse(-this.anchor_x * w / 2, 0 + this.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false); + this.context.fill(); + return this.closeDrawOp(x, -y); + } else { + this.context.beginPath(); + this.context.ellipse(x - this.anchor_x * w / 2, -y + this.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false); + return this.context.fill(); + } + } + + drawRect(x, y, w, h, color) { + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (this.initDrawOp(x, -y)) { + this.context.strokeRect(-w / 2 - this.anchor_x * w / 2, -h / 2 + this.anchor_y * h / 2, w, h); + return this.closeDrawOp(x, -y); + } else { + return this.context.strokeRect(x - w / 2 - this.anchor_x * w / 2, -y - h / 2 + this.anchor_y * h / 2, w, h); + } + } + + drawRoundRect(x, y, w, h, round = 10, color) { + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (this.initDrawOp(x, -y)) { + this.context.strokeRoundRect(-w / 2 - this.anchor_x * w / 2, -h / 2 + this.anchor_y * h / 2, w, h, round); + return this.closeDrawOp(x, -y); + } else { + return this.context.strokeRoundRect(x - w / 2 - this.anchor_x * w / 2, -y - h / 2 + this.anchor_y * h / 2, w, h, round); + } + } + + drawRound(x, y, w, h, color) { + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + w = Math.abs(w); + h = Math.abs(h); + if (this.initDrawOp(x, -y)) { + this.context.beginPath(); + this.context.ellipse(0 - this.anchor_x * w / 2, 0 + this.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false); + this.context.stroke(); + return this.closeDrawOp(x, -y); + } else { + this.context.beginPath(); + this.context.ellipse(x - this.anchor_x * w / 2, -y + this.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false); + return this.context.stroke(); + } + } + + drawLine(x1, y1, x2, y2, color) { + var transform; + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + transform = this.initDrawOp(0, 0, false); + this.context.beginPath(); + this.context.moveTo(x1, -y1); + this.context.lineTo(x2, -y2); + this.context.stroke(); + if (transform) { + return this.closeDrawOp(); + } + } + + drawPolyline(args) { + var i, j, len, ref, transform; + if (args.length > 0 && args.length % 2 === 1 && typeof args[args.length - 1] === "string") { + this.setColor(args[args.length - 1]); + } + if (Array.isArray(args[0])) { + if ((args[1] != null) && typeof args[1] === "string") { + this.setColor(args[1]); + } + args = args[0]; + } + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (args.length < 4) { + return; + } + len = Math.floor(args.length / 2); + transform = this.initDrawOp(0, 0, false); + this.context.beginPath(); + this.context.moveTo(args[0], -args[1]); + for (i = j = 1, ref = len - 1; (1 <= ref ? j <= ref : j >= ref); i = 1 <= ref ? ++j : --j) { + this.context.lineTo(args[i * 2], -args[i * 2 + 1]); + } + this.context.stroke(); + if (transform) { + return this.closeDrawOp(); + } + } + + drawPolygon(args) { + var i, j, len, ref, transform; + if (args.length > 0 && args.length % 2 === 1 && typeof args[args.length - 1] === "string") { + this.setColor(args[args.length - 1]); + } + if (Array.isArray(args[0])) { + if ((args[1] != null) && typeof args[1] === "string") { + this.setColor(args[1]); + } + args = args[0]; + } + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (args.length < 4) { + return; + } + len = Math.floor(args.length / 2); + transform = this.initDrawOp(0, 0, false); + this.context.beginPath(); + this.context.moveTo(args[0], -args[1]); + for (i = j = 1, ref = len - 1; (1 <= ref ? j <= ref : j >= ref); i = 1 <= ref ? ++j : --j) { + this.context.lineTo(args[i * 2], -args[i * 2 + 1]); + } + this.context.closePath(); + this.context.stroke(); + if (transform) { + return this.closeDrawOp(); + } + } + + fillPolygon(args) { + var i, j, len, ref, transform; + if (args.length > 0 && args.length % 2 === 1 && typeof args[args.length - 1] === "string") { + this.setColor(args[args.length - 1]); + } + if (Array.isArray(args[0])) { + if ((args[1] != null) && typeof args[1] === "string") { + this.setColor(args[1]); + } + args = args[0]; + } + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (args.length < 4) { + return; + } + len = Math.floor(args.length / 2); + transform = this.initDrawOp(0, 0, false); + this.context.beginPath(); + this.context.moveTo(args[0], -args[1]); + for (i = j = 1, ref = len - 1; (1 <= ref ? j <= ref : j >= ref); i = 1 <= ref ? ++j : --j) { + this.context.lineTo(args[i * 2], -args[i * 2 + 1]); + } + this.context.fill(); + if (transform) { + return this.closeDrawOp(); + } + } + + drawQuadCurve(args) { + var index, len, transform; + if (args.length > 0 && args.length % 2 === 1 && typeof args[args.length - 1] === "string") { + this.setColor(args[args.length - 1]); + } + if (Array.isArray(args[0])) { + if ((args[1] != null) && typeof args[1] === "string") { + this.setColor(args[1]); + } + args = args[0]; + } + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (args.length < 4) { + return; + } + len = Math.floor(args.length / 2); + transform = this.initDrawOp(0, 0, false); + this.context.beginPath(); + this.context.moveTo(args[0], -args[1]); + index = 2; + while (index <= args.length - 4) { + this.context.quadraticCurveTo(args[index], -args[index + 1], args[index + 2], -args[index + 3]); + index += 4; + } + this.context.stroke(); + if (transform) { + return this.closeDrawOp(); + } + } + + drawBezierCurve(args) { + var index, len, transform; + if (args.length > 0 && args.length % 2 === 1 && typeof args[args.length - 1] === "string") { + this.setColor(args[args.length - 1]); + } + if (Array.isArray(args[0])) { + if ((args[1] != null) && typeof args[1] === "string") { + this.setColor(args[1]); + } + args = args[0]; + } + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (args.length < 4) { + return; + } + len = Math.floor(args.length / 2); + transform = this.initDrawOp(0, 0, false); + this.context.beginPath(); + this.context.moveTo(args[0], -args[1]); + index = 2; + while (index <= args.length - 6) { + this.context.bezierCurveTo(args[index], -args[index + 1], args[index + 2], -args[index + 3], args[index + 4], -args[index + 5]); + index += 6; + } + this.context.stroke(); + if (transform) { + return this.closeDrawOp(); + } + } + + drawArc(x, y, radius, angle1, angle2, ccw, color) { + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (this.initDrawOp(x, -y)) { + this.context.beginPath(); + this.context.arc(0, 0, radius, -angle1 / 180 * Math.PI, -angle2 / 180 * Math.PI, ccw); + this.context.stroke(); + return this.closeDrawOp(x, -y); + } else { + this.context.beginPath(); + this.context.arc(x, -y, radius, -angle1 / 180 * Math.PI, -angle2 / 180 * Math.PI, ccw); + return this.context.stroke(); + } + } + + fillArc(x, y, radius, angle1, angle2, ccw, color) { + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (this.initDrawOp(x, -y)) { + this.context.beginPath(); + this.context.arc(0, 0, radius, -angle1 / 180 * Math.PI, -angle2 / 180 * Math.PI, ccw); + this.context.fill(); + return this.closeDrawOp(x, -y); + } else { + this.context.beginPath(); + this.context.arc(x, -y, radius, -angle1 / 180 * Math.PI, -angle2 / 180 * Math.PI, ccw); + return this.context.fill(); + } + } + + textWidth(text, size) { + this.context.font = `${size}pt ${this.font}`; + return this.context.measureText(text).width; + } + + drawText(text, x, y, size, color) { + var h, w; + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.font = `${size}pt ${this.font}`; + this.context.textAlign = "center"; + this.context.textBaseline = "middle"; + w = this.context.measureText(text).width; + h = size; + if (this.initDrawOp(x, -y)) { + this.context.fillText(text, 0 - this.anchor_x * w / 2, 0 + this.anchor_y * h / 2); + return this.closeDrawOp(x, -y); + } else { + return this.context.fillText(text, x - this.anchor_x * w / 2, -y + this.anchor_y * h / 2); + } + } + + drawTextOutline(text, x, y, size, color) { + var h, w; + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.font = `${size}pt ${this.font}`; + this.context.lineWidth = this.line_width; + this.context.textAlign = "center"; + this.context.textBaseline = "middle"; + w = this.context.measureText(text).width; + h = size; + if (this.initDrawOp(x, -y)) { + this.context.strokeText(text, 0 - this.anchor_x * w / 2, 0 + this.anchor_y * h / 2); + return this.closeDrawOp(x, -y); + } else { + return this.context.strokeText(text, x - this.anchor_x * w / 2, -y + this.anchor_y * h / 2); + } + } + + getSpriteFrame(sprite) { + var dt, frame, s; + frame = null; + if (typeof sprite === "string") { + s = this.runtime.sprites[sprite]; + if (s != null) { + sprite = s; + } else { + s = sprite.split("."); + if (s.length > 1) { + sprite = this.runtime.sprites[s[0]]; + frame = s[1] | 0; + } + } + } else if (sprite instanceof msImage) { + return sprite.canvas || sprite.image; + } + if ((sprite == null) || !sprite.ready) { + return null; + } + if (sprite.frames.length > 1) { + if (frame == null) { + dt = 1000 / sprite.fps; + frame = Math.floor((Date.now() - sprite.animation_start) / dt) % sprite.frames.length; + } + if (frame >= 0 && frame < sprite.frames.length) { + return sprite.frames[frame].canvas; + } else { + return sprite.frames[0].canvas; + } + } else if (sprite.frames[0] != null) { + return sprite.frames[0].canvas; + } else { + return null; + } + } + + drawSprite(sprite, x, y, w, h) { + var canvas; + canvas = this.getSpriteFrame(sprite); + if (canvas == null) { + return; + } + if (w == null) { + w = canvas.width; + } + if (!h) { + h = w / canvas.width * canvas.height; + } + this.context.globalAlpha = this.alpha; + this.context.imageSmoothingEnabled = !this.pixelated; + if (this.initDrawOp(x, -y)) { + this.context.drawImage(canvas, -w / 2 - this.anchor_x * w / 2, -h / 2 + this.anchor_y * h / 2, w, h); + return this.closeDrawOp(x, -y); + } else { + return this.context.drawImage(canvas, x - w / 2 - this.anchor_x * w / 2, -y - h / 2 + this.anchor_y * h / 2, w, h); + } + } + + drawSpritePart(sprite, sx, sy, sw, sh, x, y, w, h) { + var canvas; + canvas = this.getSpriteFrame(sprite); + if (canvas == null) { + return; + } + if (w == null) { + w = sw; + } + if (!h) { + h = w / sw * sh; + } + this.context.globalAlpha = this.alpha; + this.context.imageSmoothingEnabled = !this.pixelated; + if (this.initDrawOp(x, -y)) { + this.context.drawImage(canvas, sx, sy, sw, sh, -w / 2 - this.anchor_x * w / 2, -h / 2 + this.anchor_y * h / 2, w, h); + return this.closeDrawOp(x, -y); + } else { + return this.context.drawImage(canvas, sx, sy, sw, sh, x - w / 2 - this.anchor_x * w / 2, -y - h / 2 + this.anchor_y * h / 2, w, h); + } + } + + drawMap(map, x, y, w, h) { + if (typeof map === "string") { + map = this.runtime.maps[map]; + } + if ((map == null) || !map.ready) { + return; + } + this.context.globalAlpha = this.alpha; + this.context.imageSmoothingEnabled = !this.pixelated; + if (this.initDrawOp(x, -y)) { + map.draw(this.context, -w / 2 - this.anchor_x * w / 2, -h / 2 + this.anchor_y * h / 2, w, h); + //@context.drawImage map.getCanvas(),-w/2-@anchor_x*w/2,-h/2+@anchor_y*h/2,w,h + return this.closeDrawOp(x, -y); + } else { + return map.draw(this.context, x - w / 2 - this.anchor_x * w / 2, -y - h / 2 + this.anchor_y * h / 2, w, h); + } + } + + //@context.drawImage map.getCanvas(),x-w/2-@anchor_x*w/2,-y-h/2+@anchor_y*h/2,w,h + resize() { + var backingStoreRatio, ch, cw, devicePixelRatio, h, min, r, ratio, w; + cw = window.innerWidth; + ch = window.innerHeight; + ratio = { + "4x3": 4 / 3, + "16x9": 16 / 9, + "2x1": 2 / 1, + "1x1": 1 / 1, + ">4x3": 4 / 3, + ">16x9": 16 / 9, + ">2x1": 2 / 1, + ">1x1": 1 / 1 + }[this.runtime.aspect]; + min = this.runtime.aspect.startsWith(">"); + //if not ratio? and @runtime.orientation in ["portrait","landscape"] + // ratio = 16/9 + if (ratio != null) { + if (min) { + switch (this.runtime.orientation) { + case "portrait": + ratio = Math.max(ratio, ch / cw); + break; + case "landscape": + ratio = Math.max(ratio, cw / ch); + break; + default: + if (ch > cw) { + ratio = Math.max(ratio, ch / cw); + } else { + ratio = Math.max(ratio, cw / ch); + } + } + } + switch (this.runtime.orientation) { + case "portrait": + r = Math.min(cw, ch / ratio) / cw; + w = cw * r; + h = cw * r * ratio; + break; + case "landscape": + r = Math.min(cw / ratio, ch) / ch; + w = ch * r * ratio; + h = ch * r; + break; + default: + if (cw > ch) { + r = Math.min(cw / ratio, ch) / ch; + w = ch * r * ratio; + h = ch * r; + } else { + r = Math.min(cw, ch / ratio) / cw; + w = cw * r; + h = cw * r * ratio; + } + } + } else { + w = cw; + h = ch; + } + this.canvas.style["margin-top"] = Math.round((ch - h) / 2) + "px"; + this.canvas.style.width = Math.round(w) + "px"; + this.canvas.style.height = Math.round(h) + "px"; + devicePixelRatio = window.devicePixelRatio || 1; + backingStoreRatio = this.context.webkitBackingStorePixelRatio || this.context.mozBackingStorePixelRatio || this.context.msBackingStorePixelRatio || this.context.oBackingStorePixelRatio || this.context.backingStorePixelRatio || 1; + this.ratio = devicePixelRatio / backingStoreRatio * Math.max(1, Math.min(2, this.supersampling)); + this.width = w * this.ratio; + this.height = h * this.ratio; + this.canvas.width = this.width; + this.canvas.height = this.height; + return this.initContext(); + } + + startControl(element) { + var backingStoreRatio, devicePixelRatio; + this.element = element; + document.addEventListener("touchstart", (event) => { + return this.touchStart(event); + }); + document.addEventListener("touchmove", (event) => { + return this.touchMove(event); + }); + document.addEventListener("touchend", (event) => { + return this.touchRelease(event); + }); + document.addEventListener("touchcancel", (event) => { + return this.touchRelease(event); + }); + document.addEventListener("mousedown", (event) => { + return this.mouseDown(event); + }); + document.addEventListener("mousemove", (event) => { + return this.mouseMove(event); + }); + document.addEventListener("mouseup", (event) => { + return this.mouseUp(event); + }); + document.addEventListener("mousewheel", (event) => { + return this.mouseWheel(event); + }); + document.addEventListener("DOMMouseScroll", (event) => { + return this.mouseWheel(event); + }); + devicePixelRatio = window.devicePixelRatio || 1; + backingStoreRatio = this.context.webkitBackingStorePixelRatio || this.context.mozBackingStorePixelRatio || this.context.msBackingStorePixelRatio || this.context.oBackingStorePixelRatio || this.context.backingStorePixelRatio || 1; + return this.ratio = devicePixelRatio / backingStoreRatio; + } + + touchStart(event) { + var b, i, j, min, ref, t, x, y; + event.preventDefault(); + event.stopPropagation(); + b = this.canvas.getBoundingClientRect(); + for (i = j = 0, ref = event.changedTouches.length - 1; j <= ref; i = j += 1) { + t = event.changedTouches[i]; + min = Math.min(this.canvas.clientWidth, this.canvas.clientHeight); + x = (t.clientX - b.left - this.canvas.clientWidth / 2) / min * 200; + y = (this.canvas.clientHeight / 2 - (t.clientY - b.top)) / min * 200; + this.touches[t.identifier] = { + x: x, + y: y + }; + this.mouse.x = x; + this.mouse.y = y; + this.mouse.pressed = 1; + this.mouse.left = 1; + } + return false; + } + + touchMove(event) { + var b, i, j, min, ref, t, x, y; + event.preventDefault(); + event.stopPropagation(); + b = this.canvas.getBoundingClientRect(); + for (i = j = 0, ref = event.changedTouches.length - 1; j <= ref; i = j += 1) { + t = event.changedTouches[i]; + if (this.touches[t.identifier] != null) { + min = Math.min(this.canvas.clientWidth, this.canvas.clientHeight); + x = (t.clientX - b.left - this.canvas.clientWidth / 2) / min * 200; + y = (this.canvas.clientHeight / 2 - (t.clientY - b.top)) / min * 200; + this.touches[t.identifier].x = x; + this.touches[t.identifier].y = y; + this.mouse.x = x; + this.mouse.y = y; + } + } + return false; + } + + touchRelease(event) { + var i, j, ref, t, x, y; + for (i = j = 0, ref = event.changedTouches.length - 1; j <= ref; i = j += 1) { + t = event.changedTouches[i]; + x = (t.clientX - this.canvas.offsetLeft) * this.ratio; + y = (t.clientY - this.canvas.offsetTop) * this.ratio; + delete this.touches[t.identifier]; + this.mouse.pressed = 0; + this.mouse.left = 0; + this.mouse.right = 0; + this.mouse.middle = 0; + } + return false; + } + + mouseDown(event) { + var b, min, x, y; + this.mousepressed = true; + b = this.canvas.getBoundingClientRect(); + min = Math.min(this.canvas.clientWidth, this.canvas.clientHeight); + x = (event.clientX - b.left - this.canvas.clientWidth / 2) / min * 200; + y = (this.canvas.clientHeight / 2 - (event.clientY - b.top)) / min * 200; + this.touches["mouse"] = { + x: x, + y: y + }; + //console.info @touches["mouse"] + this.mouse.x = x; + this.mouse.y = y; + switch (event.button) { + case 0: + this.mouse.left = 1; + break; + case 1: + this.mouse.middle = 1; + break; + case 2: + this.mouse.right = 1; + } + this.mouse.pressed = Math.min(1, this.mouse.left + this.mouse.right + this.mouse.middle); + return false; + } + + mouseMove(event) { + var b, min, x, y; + event.preventDefault(); + b = this.canvas.getBoundingClientRect(); + min = Math.min(this.canvas.clientWidth, this.canvas.clientHeight); + x = (event.clientX - b.left - this.canvas.clientWidth / 2) / min * 200; + y = (this.canvas.clientHeight / 2 - (event.clientY - b.top)) / min * 200; + if (this.touches["mouse"] != null) { + this.touches["mouse"].x = x; + this.touches["mouse"].y = y; + } + this.mouse.x = x; + this.mouse.y = y; + return false; + } + + mouseUp(event) { + var b, min, x, y; + delete this.touches["mouse"]; + b = this.canvas.getBoundingClientRect(); + min = Math.min(this.canvas.clientWidth, this.canvas.clientHeight); + x = (event.clientX - b.left - this.canvas.clientWidth / 2) / min * 200; + y = (this.canvas.clientHeight / 2 - (event.clientY - b.top)) / min * 200; + this.mouse.x = x; + this.mouse.y = y; + switch (event.button) { + case 0: + this.mouse.left = 0; + break; + case 1: + this.mouse.middle = 0; + break; + case 2: + this.mouse.right = 0; + } + this.mouse.pressed = Math.min(1, this.mouse.left + this.mouse.right + this.mouse.middle); + return false; + } + + mouseWheel(e) { + if (e.wheelDelta < 0 || e.detail > 0) { + return this.wheel = -1; + } else { + return this.wheel = 1; + } + } + + takePicture(callback) { + return callback(this.canvas.toDataURL()); + } + +}; + +this.AssetManager = class AssetManager { + constructor(runtime) { + this.runtime = runtime; + this.interface = { + loadFont: (font) => { + return this.loadFont(font); + }, + loadModel: (path, scene, callback) => { + return this.loadModel(path, scene, callback); + }, + loadImage: (path, callback) => { + return this.loadImage(path, callback); + }, + loadJSON: (path, callback) => { + return this.loadJSON(path, callback); + }, + loadText: (path, callback) => { + return this.loadText(path, callback); + }, + loadCSV: (path, callback) => { + return this.loadCSV(path, callback); + }, + loadMarkdown: (path, callback) => { + return this.loadMarkdown(path, callback); + }, + wasmInstance: (path, callback) => { + return this.wasmInstance(path, callback); + } + }; + } + + getInterface() { + return this.interface; + } + + loadFont(font) { + var err, file, name, split; + if (typeof font !== "string") { + return; + } + file = font.replace(/\//g, "-"); + split = file.split("-"); + name = split[split.length - 1]; + try { + font = new FontFace(name, `url(assets/${file}.ttf)`); + return font.load().then(() => { + return document.fonts.add(font); + }); + } catch (error) { + err = error; + return console.error(err); + } + } + + loadModel(path, scene, callback) { + var loader; + if (typeof BABYLON === "undefined" || BABYLON === null) { + return; + } + loader = { + ready: 0 + }; + if (this.runtime.assets[path] != null) { + path = this.runtime.assets[path].file; + } else { + path = path.replace(/\//g, "-"); + path += ".glb"; + } + return BABYLON.SceneLoader.LoadAssetContainer("", `assets/${path}`, scene, (container) => { + loader.container = container; + loader.ready = 1; + if (callback) { + return callback(container); + } + }); + } + + loadImage(path, callback) { + var img, loader; + loader = { + ready: 0 + }; + if (this.runtime.assets[path] != null) { + path = this.runtime.assets[path].file; + } + img = new Image; + img.src = `assets/${path}`; + img.onload = () => { + var i; + i = new msImage(img); + loader.image = i; + loader.ready = 1; + if (callback) { + return callback(i); + } + }; + return loader; + } + + loadJSON(path, callback) { + var loader; + path = path.replace(/\//g, "-"); + path = `assets/${path}.json`; + loader = { + ready: 0 + }; + fetch(path).then((result) => { + return result.json().then((data) => { + loader.data = data; + loader.ready = 1; + if (callback) { + return callback(data); + } + }); + }); + return loader; + } + + loadText(path, callback, ext = "txt") { + var loader; + path = path.replace(/\//g, "-"); + path = `assets/${path}.${ext}`; + loader = { + ready: 0 + }; + fetch(path).then((result) => { + return result.text().then((text) => { + loader.text = text; + loader.ready = 1; + if (callback) { + return callback(text); + } + }); + }); + return loader; + } + + loadCSV(path, callback) { + return this.loadText(path, callback, "csv"); + } + + loadMarkdown(path, callback) { + return this.loadText(path, callback, "md"); + } + + wasmInstance(path, callback) { + var loader; + path = path.replace(/\//g, "-"); + path = `assets/${path}.wasm`; + loader = { + ready: 0 + }; + fetch(path).then((response) => { + return response.arrayBuffer().then((buffer) => { + return WebAssembly.instantiate(buffer).then((result) => { + loader.instance = result.instance; + loader.ready = 1; + if (callback) { + return callback(loader.instance); + } + }); + }); + }); + return loader; + } + +}; + +this.Keyboard = (function() { + function Keyboard() { + document.addEventListener("keydown", (function(_this) { + return function(event) { + return _this.keydown(event); + }; + })(this)); + document.addEventListener("keyup", (function(_this) { + return function(event) { + return _this.keyup(event); + }; + })(this)); + this.keyboard = { + press: {}, + release: {} + }; + this.previous = {}; + } + + Keyboard.prototype.convertCode = function(code) { + var c, i, j, low, ref, res; + res = ""; + low = false; + for (i = j = 0, ref = code.length - 1; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) { + c = code.charAt(i); + if (c === c.toUpperCase() && low) { + res += "_"; + low = false; + } else { + low = true; + } + res += c.toUpperCase(); + } + return res; + }; + + Keyboard.prototype.keydown = function(event) { + var code, key; + if (!event.altKey && !event.ctrlKey && !event.metaKey && !/Escape|(F\d+)/.test(event.key)) { + event.preventDefault(); + } + code = event.code; + key = event.key; + this.keyboard[this.convertCode(code)] = 1; + this.keyboard[key.toUpperCase()] = 1; + return this.updateDirectional(); + }; + + Keyboard.prototype.keyup = function(event) { + var code, key; + code = event.code; + key = event.key; + this.keyboard[this.convertCode(code)] = 0; + this.keyboard[key.toUpperCase()] = 0; + return this.updateDirectional(); + }; + + Keyboard.prototype.updateDirectional = function() { + this.keyboard.UP = this.keyboard.KEY_W || this.keyboard.ARROW_UP; + this.keyboard.DOWN = this.keyboard.KEY_S || this.keyboard.ARROW_DOWN; + this.keyboard.LEFT = this.keyboard.KEY_A || this.keyboard.ARROW_LEFT; + return this.keyboard.RIGHT = this.keyboard.KEY_D || this.keyboard.ARROW_RIGHT; + }; + + Keyboard.prototype.update = function() { + var key; + for (key in this.keyboard.press) { + this.keyboard.press[key] = 0; + } + for (key in this.keyboard.release) { + this.keyboard.release[key] = 0; + } + for (key in this.previous) { + if (this.previous[key] && !this.keyboard[key]) { + this.keyboard.release[key] = 1; + } + } + for (key in this.keyboard) { + if (key === "press" || key === "release") { + continue; + } + if (this.keyboard[key] && !this.previous[key]) { + this.keyboard.press[key] = 1; + } + } + for (key in this.previous) { + this.previous[key] = 0; + } + for (key in this.keyboard) { + if (key === "press" || key === "release") { + continue; + } + this.previous[key] = this.keyboard[key]; + } + }; + + Keyboard.prototype.reset = function() { + var key; + for (key in this.keyboard) { + if (key === "press" || key === "release") { + continue; + } + this.keyboard[key] = 0; + } + }; + + return Keyboard; + +})(); + +this.Gamepad = (function() { + function Gamepad(listener, index) { + var error, pads; + this.listener = listener; + this.index = index != null ? index : 0; + try { + if (navigator.getGamepads != null) { + pads = navigator.getGamepads(); + if (this.index < pads.length && (pads[this.index] != null)) { + this.pad = pads[this.index]; + } + } + } catch (error1) { + error = error1; + console.error(error); + } + this.buttons_map = { + 0: "A", + 1: "B", + 2: "X", + 3: "Y", + 4: "LB", + 5: "RB", + 8: "VIEW", + 9: "MENU", + 10: "LS", + 11: "RS", + 12: "DPAD_UP", + 13: "DPAD_DOWN", + 14: "DPAD_LEFT", + 15: "DPAD_RIGHT" + }; + this.triggers_map = { + 6: "LT", + 7: "RT" + }; + this.status = { + press: {}, + release: {} + }; + this.previous = { + global: {}, + 0: {}, + 1: {}, + 2: {}, + 3: {} + }; + } + + Gamepad.prototype.update = function() { + var angle, err, i, j, k, key, l, len, len1, len2, m, n, o, pad, pad_count, pads, r, ref, ref1, ref2, ref3, ref4, ref5, ref6, value, x, y; + try { + pads = navigator.getGamepads(); + } catch (error1) { + err = error1; + return; + } + pad_count = 0; + for (i = j = 0, len = pads.length; j < len; i = ++j) { + pad = pads[i]; + if (pad == null) { + break; + } + pad_count++; + if (!this.status[i]) { + this.status[i] = { + press: {}, + release: {} + }; + } + ref = this.buttons_map; + for (key in ref) { + value = ref[key]; + if (pad.buttons[key] != null) { + this.status[i][value] = pad.buttons[key].pressed ? 1 : 0; + } + } + ref1 = this.triggers_map; + for (key in ref1) { + value = ref1[key]; + if (pad.buttons[key] != null) { + this.status[i][value] = pad.buttons[key].value; + } + } + if (pad.axes.length >= 2) { + x = pad.axes[0]; + y = -pad.axes[1]; + r = Math.sqrt(x * x + y * y); + angle = Math.floor(((Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2)) / (Math.PI * 2) * 360); + this.status[i].LEFT_STICK_ANGLE = angle; + this.status[i].LEFT_STICK_AMOUNT = r; + this.status[i].LEFT_STICK_UP = y > .5; + this.status[i].LEFT_STICK_DOWN = y < -.5; + this.status[i].LEFT_STICK_LEFT = x < -.5; + this.status[i].LEFT_STICK_RIGHT = x > .5; + } + if (pad.axes.length >= 4) { + x = pad.axes[2]; + y = -pad.axes[3]; + r = Math.sqrt(x * x + y * y); + angle = Math.floor(((Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2)) / (Math.PI * 2) * 360); + this.status[i].RIGHT_STICK_ANGLE = angle; + this.status[i].RIGHT_STICK_AMOUNT = r; + this.status[i].RIGHT_STICK_UP = y > .5; + this.status[i].RIGHT_STICK_DOWN = y < -.5; + this.status[i].RIGHT_STICK_LEFT = x < -.5; + this.status[i].RIGHT_STICK_RIGHT = x > .5; + } + } + ref2 = this.buttons_map; + for (key in ref2) { + value = ref2[key]; + this.status[value] = 0; + for (k = 0, len1 = pads.length; k < len1; k++) { + pad = pads[k]; + if (pad == null) { + break; + } + if ((pad.buttons[key] != null) && pad.buttons[key].pressed) { + this.status[value] = 1; + } + } + } + ref3 = this.triggers_map; + for (key in ref3) { + value = ref3[key]; + this.status[value] = 0; + for (l = 0, len2 = pads.length; l < len2; l++) { + pad = pads[l]; + if (pad == null) { + break; + } + if (pad.buttons[key] != null) { + this.status[value] = pad.buttons[key].value; + } + } + } + this.status.UP = 0; + this.status.DOWN = 0; + this.status.LEFT = 0; + this.status.RIGHT = 0; + this.status.LEFT_STICK_UP = 0; + this.status.LEFT_STICK_DOWN = 0; + this.status.LEFT_STICK_LEFT = 0; + this.status.LEFT_STICK_RIGHT = 0; + this.status.RIGHT_STICK_UP = 0; + this.status.RIGHT_STICK_DOWN = 0; + this.status.RIGHT_STICK_LEFT = 0; + this.status.RIGHT_STICK_RIGHT = 0; + this.status.LEFT_STICK_ANGLE = 0; + this.status.LEFT_STICK_AMOUNT = 0; + this.status.RIGHT_STICK_ANGLE = 0; + this.status.RIGHT_STICK_AMOUNT = 0; + this.status.RT = 0; + this.status.LT = 0; + for (i = m = 0, ref4 = pad_count - 1; m <= ref4; i = m += 1) { + this.status[i].UP = this.status[i].DPAD_UP || this.status[i].LEFT_STICK_UP || this.status[i].RIGHT_STICK_UP; + this.status[i].DOWN = this.status[i].DPAD_DOWN || this.status[i].LEFT_STICK_DOWN || this.status[i].RIGHT_STICK_DOWN; + this.status[i].LEFT = this.status[i].DPAD_LEFT || this.status[i].LEFT_STICK_LEFT || this.status[i].RIGHT_STICK_LEFT; + this.status[i].RIGHT = this.status[i].DPAD_RIGHT || this.status[i].LEFT_STICK_RIGHT || this.status[i].RIGHT_STICK_RIGHT; + if (this.status[i].UP) { + this.status.UP = 1; + } + if (this.status[i].DOWN) { + this.status.DOWN = 1; + } + if (this.status[i].LEFT) { + this.status.LEFT = 1; + } + if (this.status[i].RIGHT) { + this.status.RIGHT = 1; + } + if (this.status[i].LEFT_STICK_UP) { + this.status.LEFT_STICK_UP = 1; + } + if (this.status[i].LEFT_STICK_DOWN) { + this.status.LEFT_STICK_DOWN = 1; + } + if (this.status[i].LEFT_STICK_LEFT) { + this.status.LEFT_STICK_LEFT = 1; + } + if (this.status[i].LEFT_STICK_RIGHT) { + this.status.LEFT_STICK_RIGHT = 1; + } + if (this.status[i].RIGHT_STICK_UP) { + this.status.RIGHT_STICK_UP = 1; + } + if (this.status[i].RIGHT_STICK_DOWN) { + this.status.RIGHT_STICK_DOWN = 1; + } + if (this.status[i].RIGHT_STICK_LEFT) { + this.status.RIGHT_STICK_LEFT = 1; + } + if (this.status[i].RIGHT_STICK_RIGHT) { + this.status.RIGHT_STICK_RIGHT = 1; + } + if (this.status[i].LT) { + this.status.LT = this.status[i].LT; + } + if (this.status[i].RT) { + this.status.RT = this.status[i].RT; + } + if (this.status[i].LEFT_STICK_AMOUNT > this.status.LEFT_STICK_AMOUNT) { + this.status.LEFT_STICK_AMOUNT = this.status[i].LEFT_STICK_AMOUNT; + this.status.LEFT_STICK_ANGLE = this.status[i].LEFT_STICK_ANGLE; + } + if (this.status[i].RIGHT_STICK_AMOUNT > this.status.RIGHT_STICK_AMOUNT) { + this.status.RIGHT_STICK_AMOUNT = this.status[i].RIGHT_STICK_AMOUNT; + this.status.RIGHT_STICK_ANGLE = this.status[i].RIGHT_STICK_ANGLE; + } + } + for (i = n = ref5 = pad_count; n <= 3; i = n += 1) { + delete this.status[i]; + } + this.count = pad_count; + this.updateChanges(this.status, this.previous.global); + for (i = o = 0, ref6 = pad_count - 1; o <= ref6; i = o += 1) { + this.updateChanges(this.status[i], this.previous[i]); + } + }; + + Gamepad.prototype.updateChanges = function(current, previous) { + var key; + for (key in current.press) { + current.press[key] = 0; + } + for (key in current.release) { + current.release[key] = 0; + } + for (key in previous) { + if (previous[key] && !current[key]) { + current.release[key] = 1; + } + } + for (key in current) { + if (key === "press" || key === "release") { + continue; + } + if (current[key] && !previous[key]) { + current.press[key] = 1; + } + } + for (key in previous) { + previous[key] = 0; + } + for (key in current) { + if (key === "press" || key === "release") { + continue; + } + previous[key] = current[key]; + } + }; + + return Gamepad; + +})(); + +this.Sprite = class Sprite { + constructor(width, height) { + this.width = width; + this.height = height; + this.name = ""; + this.frames = []; + this.animation_start = 0; + this.fps = 5; + if (this.width > 0 && this.height > 0) { + this.frames.push(new msImage(this.width, this.height)); + this.ready = 1; + } + } + + setFPS(fps) { + var dt, frame; + dt = 1000 / this.fps; + frame = ((Date.now() - this.animation_start) / dt) % this.frames.length; + this.fps = fps; + dt = 1000 / fps; + this.animation_start = Date.now() - frame * dt; + return fps; + } + + setFrame(f) { + return this.animation_start = Date.now() - 1000 / this.fps * f; + } + + getFrame() { + var dt; + dt = 1000 / this.fps; + return Math.floor((Date.now() - this.animation_start) / dt) % this.frames.length; + } + +}; + +this.LoadSprite = function(url, properties, loaded) { + var img, sprite; + sprite = new Sprite(0, 0); + sprite.ready = 0; + img = new Image; + if (location.protocol !== "file:") { + img.crossOrigin = "Anonymous"; + } + img.src = url; + img.onload = () => { + var frame, i, j, numframes, ref; + sprite.ready = true; + if (img.width > 0 && img.height > 0) { + numframes = 1; + if ((properties != null) && (properties.frames != null)) { + numframes = properties.frames; + } + if (properties.fps != null) { + sprite.fps = properties.fps; + } + sprite.width = img.width; + sprite.height = Math.round(img.height / numframes); + sprite.frames = []; + for (i = j = 0, ref = numframes - 1; (0 <= ref ? j <= ref : j >= ref); i = 0 <= ref ? ++j : --j) { + frame = new msImage(sprite.width, sprite.height); + frame.initContext(); + frame.context.drawImage(img, 0, -i * sprite.height); + sprite.frames.push(frame); + } + sprite.ready = true; + } + if (loaded != null) { + return loaded(); + } + }; + img.onerror = () => { + return sprite.ready = 1; + }; + return sprite; +}; + +this.UpdateSprite = function(sprite, img, properties) { + var frame, i, j, numframes, ref; + if (img.width > 0 && img.height > 0) { + numframes = 1; + if ((properties != null) && (properties.frames != null)) { + numframes = properties.frames; + } + if ((properties != null) && (properties.fps != null)) { + sprite.fps = properties.fps; + } + sprite.width = img.width; + sprite.height = Math.round(img.height / numframes); + sprite.frames = []; + for (i = j = 0, ref = numframes - 1; (0 <= ref ? j <= ref : j >= ref); i = 0 <= ref ? ++j : --j) { + frame = new msImage(sprite.width, sprite.height); + frame.initContext(); + frame.context.drawImage(img, 0, -i * sprite.height); + sprite.frames.push(frame); + } + return sprite.ready = true; + } +}; + +var b, j, len1, ref; + +this.msImage = (function() { + class msImage { + constructor(width, height, centered = false) { + this.width = width; + this.height = height; + this.centered = centered; + this.class = msImage; + if (this.width instanceof Image) { + this.image = this.width; + this.width = this.image.width; + this.height = this.image.height; + } else if (this.width instanceof HTMLCanvasElement) { + this.canvas = this.width; + this.width = this.canvas.width; + this.height = this.canvas.height; + } else { + this.canvas = document.createElement("canvas"); + this.canvas.width = this.width = Math.round(this.width); + this.canvas.height = this.height = Math.round(this.height); + } + } + + setRGB(x, y, r, g, b) { + this.initContext(); + if (this.pixeldata == null) { + this.pixeldata = this.context.getImageData(0, 0, 1, 1); + } + if (r.R != null) { + this.pixeldata.data[0] = r.R; + this.pixeldata.data[1] = r.G; + this.pixeldata.data[2] = r.B; + } else { + this.pixeldata.data[0] = r; + this.pixeldata.data[1] = g; + this.pixeldata.data[2] = b; + } + this.pixeldata.data[3] = 255; + return this.context.putImageData(this.pixeldata, x, y); + } + + setRGBA(x, y, r, g, b, a) { + this.initContext(); + if (this.pixeldata == null) { + this.pixeldata = this.context.getImageData(0, 0, 1, 1); + } + if (r.R != null) { + this.pixeldata.data[0] = r.R; + this.pixeldata.data[1] = r.G; + this.pixeldata.data[2] = r.B; + this.pixeldata.data[3] = r.A != null ? r.A : 255; + } else { + this.pixeldata.data[0] = r; + this.pixeldata.data[1] = g; + this.pixeldata.data[2] = b; + this.pixeldata.data[3] = a; + } + return this.context.putImageData(this.pixeldata, x, y); + } + + getRGB(x, y, result = {}) { + var d; + this.initContext(); + d = this.context.getImageData(x, y, 1, 1); + result.R = d.data[0]; + result.G = d.data[1]; + result.B = d.data[2]; + return result; + } + + getRGBA(x, y, result = {}) { + var d; + this.initContext(); + d = this.context.getImageData(x, y, 1, 1); + result.R = d.data[0]; + result.G = d.data[1]; + result.B = d.data[2]; + result.A = d.data[3]; + return result; + } + + initContext() { + if (this.context != null) { + return; + } + if ((this.canvas == null) && (this.image != null)) { + this.canvas = document.createElement("canvas"); + this.canvas.width = this.image.width; + this.canvas.height = this.image.height; + this.context = this.canvas.getContext("2d"); + this.context.drawImage(this.image, 0, 0); + this.image = null; + } + this.alpha = 1; + this.pixelated = 1; + this.line_width = 1; + this.context = this.canvas.getContext("2d"); + this.context.lineCap = "round"; + if (this.centered) { + this.translation_x = this.width / 2; + this.translation_y = this.height / 2; + this.rotation = 0; + this.scale_x = 1; + this.scale_y = -1; + this.image_transform = true; + this.anchor_x = 0; + this.anchor_y = 0; + this.object_scale_y = -1; + } else { + this.translation_x = 0; + this.translation_y = 0; + this.rotation = 0; + this.scale_x = 1; + this.scale_y = 1; + this.image_transform = false; + this.anchor_x = -1; + this.anchor_y = 1; + this.object_scale_y = 1; + } + this.object_rotation = 0; + this.object_scale_x = 1; + return this.font = "BitCell"; + } + + clear(color) { + var blending_save, c, s; + this.initContext(); + c = this.context.fillStyle; + s = this.context.strokeStyle; + blending_save = this.context.globalCompositeOperation; + this.context.globalAlpha = 1; + this.context.globalCompositeOperation = "source-over"; + if (color != null) { + this.setColor(color); + } else { + this.context.fillStyle = "#000"; + } + this.context.fillRect(0, 0, this.width, this.height); + this.context.fillStyle = c; + this.context.strokeStyle = s; + return this.context.globalCompositeOperation = blending_save; + } + + setColor(color) { + this.initContext(); + if (color == null) { + return; + } + if (typeof color === "string") { + this.context.fillStyle = color; + return this.context.strokeStyle = color; + } + } + + setAlpha(alpha) { + this.initContext(); + return this.alpha = alpha; + } + + setPixelated(pixelated) { + this.initContext(); + return this.pixelated = pixelated; + } + + setBlending(blending) { + this.initContext(); + blending = BLENDING_MODES[blending || "normal"] || "source-over"; + return this.context.globalCompositeOperation = blending; + } + + setLineWidth(line_width) { + this.initContext(); + return this.line_width = line_width; + } + + setLineDash(dash) { + this.initContext(); + if (!Array.isArray(dash)) { + return this.context.setLineDash([]); + } else { + return this.context.setLineDash(dash); + } + } + + setLinearGradient(x1, y1, x2, y2, c1, c2) { + var grd; + this.initContext(); + grd = this.context.createLinearGradient(x1, y1, x2, y2); + grd.addColorStop(0, c1); + grd.addColorStop(1, c2); + this.context.fillStyle = grd; + return this.context.strokeStyle = grd; + } + + setRadialGradient(x, y, radius, c1, c2) { + var grd; + this.initContext(); + grd = this.context.createRadialGradient(x, y, 0, x, y, radius); + grd.addColorStop(0, c1); + grd.addColorStop(1, c2); + this.context.fillStyle = grd; + return this.context.strokeStyle = grd; + } + + setFont(font) { + return this.font = font || "Verdana"; + } + + setTranslation(translation_x, translation_y) { + this.initContext(); + this.translation_x = translation_x; + this.translation_y = translation_y; + if (!isFinite(this.translation_x)) { + this.translation_x = 0; + } + if (!isFinite(this.translation_y)) { + this.translation_y = 0; + } + return this.updateScreenTransform(); + } + + setScale(scale_x, scale_y) { + this.initContext(); + this.scale_x = scale_x; + this.scale_y = scale_y; + if (!isFinite(this.scale_x) || this.scale_x === 0) { + this.scale_x = 1; + } + if (!isFinite(this.scale_y) || this.scale_y === 0) { + this.scale_y = 1; + } + return this.updateScreenTransform(); + } + + setRotation(rotation) { + this.initContext(); + this.rotation = rotation; + if (!isFinite(this.rotation)) { + this.rotation = 0; + } + return this.updateScreenTransform(); + } + + updateScreenTransform() { + return this.image_transform = this.translation_x !== 0 || this.translation_y !== 0 || this.scale_x !== 1 || this.scale_y !== 1 || this.rotation !== 0; + } + + setDrawAnchor(anchor_x, anchor_y) { + this.initContext(); + this.anchor_x = anchor_x; + this.anchor_y = anchor_y; + if (typeof this.anchor_x !== "number") { + this.anchor_x = 0; + } + if (typeof this.anchor_y !== "number") { + return this.anchor_y = 0; + } + } + + setDrawRotation(object_rotation) { + this.initContext(); + return this.object_rotation = object_rotation; + } + + setDrawScale(object_scale_x, object_scale_y = object_scale_x) { + this.initContext(); + this.object_scale_x = object_scale_x; + return this.object_scale_y = object_scale_y; + } + + initDrawOp(x, y, object_transform = true) { + var res; + res = false; + if (this.image_transform) { + this.context.save(); + res = true; + this.context.translate(this.translation_x, this.translation_y); + this.context.scale(this.scale_x, this.scale_y); + this.context.rotate(this.rotation / 180 * Math.PI); + this.context.translate(x, y); + } + if (object_transform && (this.object_rotation !== 0 || this.object_scale_x !== 1 || this.object_scale_y !== 1)) { + if (!res) { + this.context.save(); + res = true; + this.context.translate(x, y); + } + if (this.object_rotation !== 0) { + this.context.rotate(this.object_rotation / 180 * Math.PI); + } + if (this.object_scale_x !== 1 || this.object_scale_y !== 1) { + this.context.scale(this.object_scale_x, this.object_scale_y); + } + } + return res; + } + + closeDrawOp(x, y) { + return this.context.restore(); + } + + fillRect(x, y, w, h, color) { + this.initContext(); + this.setColor(color); + this.context.globalAlpha = this.alpha; + if (this.initDrawOp(x, y)) { + this.context.fillRect(-w / 2 - this.anchor_x * w / 2, -h / 2 + this.anchor_y * h / 2, w, h); + return this.closeDrawOp(x, y); + } else { + return this.context.fillRect(x - w / 2 - this.anchor_x * w / 2, y - h / 2 + this.anchor_y * h / 2, w, h); + } + } + + fillRoundRect(x, y, w, h, round = 10, color) { + this.initContext(); + this.setColor(color); + this.context.globalAlpha = this.alpha; + if (this.initDrawOp(x, y)) { + this.context.fillRoundRect(-w / 2 - this.anchor_x * w / 2, -h / 2 + this.anchor_y * h / 2, w, h, round); + return this.closeDrawOp(x, y); + } else { + return this.context.fillRoundRect(x - w / 2 - this.anchor_x * w / 2, y - h / 2 + this.anchor_y * h / 2, w, h, round); + } + } + + fillRound(x, y, w, h, color) { + this.initContext(); + this.setColor(color); + this.context.globalAlpha = this.alpha; + w = Math.abs(w); + h = Math.abs(h); + if (this.initDrawOp(x, y)) { + this.context.beginPath(); + this.context.ellipse(-this.anchor_x * w / 2, 0 + this.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false); + this.context.fill(); + return this.closeDrawOp(x, y); + } else { + this.context.beginPath(); + this.context.ellipse(x - this.anchor_x * w / 2, y + this.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false); + return this.context.fill(); + } + } + + drawRect(x, y, w, h, color) { + this.initContext(); + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (this.initDrawOp(x, y)) { + this.context.strokeRect(-w / 2 - this.anchor_x * w / 2, -h / 2 + this.anchor_y * h / 2, w, h); + return this.closeDrawOp(x, y); + } else { + return this.context.strokeRect(x - w / 2 - this.anchor_x * w / 2, y - h / 2 + this.anchor_y * h / 2, w, h); + } + } + + drawRoundRect(x, y, w, h, round = 10, color) { + this.initContext(); + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (this.initDrawOp(x, y)) { + this.context.strokeRoundRect(-w / 2 - this.anchor_x * w / 2, -h / 2 + this.anchor_y * h / 2, w, h, round); + return this.closeDrawOp(x, y); + } else { + return this.context.strokeRoundRect(x - w / 2 - this.anchor_x * w / 2, y - h / 2 + this.anchor_y * h / 2, w, h, round); + } + } + + drawRound(x, y, w, h, color) { + this.initContext(); + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + w = Math.abs(w); + h = Math.abs(h); + if (this.initDrawOp(x, y)) { + this.context.beginPath(); + this.context.ellipse(0 - this.anchor_x * w / 2, 0 + this.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false); + this.context.stroke(); + return this.closeDrawOp(x, y); + } else { + this.context.beginPath(); + this.context.ellipse(x - this.anchor_x * w / 2, y + this.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false); + return this.context.stroke(); + } + } + + drawLine(x1, y1, x2, y2, color) { + var transform; + this.initContext(); + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + transform = this.initDrawOp(0, 0, false); + this.context.beginPath(); + this.context.moveTo(x1, y1); + this.context.lineTo(x2, y2); + this.context.stroke(); + if (transform) { + return this.closeDrawOp(); + } + } + + drawPolyline() { + var args, i, j, len, ref, transform; + args = arguments; + this.initContext(); + if (args.length > 0 && args.length % 2 === 1 && typeof args[args.length - 1] === "string") { + this.setColor(args[args.length - 1]); + } + if (Array.isArray(args[0])) { + if ((args[1] != null) && typeof args[1] === "string") { + this.setColor(args[1]); + } + args = args[0]; + } + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (args.length < 4) { + return; + } + len = Math.floor(args.length / 2); + transform = this.initDrawOp(0, 0, false); + this.context.beginPath(); + this.context.moveTo(args[0], args[1]); + for (i = j = 1, ref = len - 1; (1 <= ref ? j <= ref : j >= ref); i = 1 <= ref ? ++j : --j) { + this.context.lineTo(args[i * 2], args[i * 2 + 1]); + } + this.context.stroke(); + if (transform) { + return this.closeDrawOp(); + } + } + + drawPolygon() { + var args, i, j, len, ref, transform; + args = arguments; + this.initContext(); + if (args.length > 0 && args.length % 2 === 1 && typeof args[args.length - 1] === "string") { + this.setColor(args[args.length - 1]); + } + if (Array.isArray(args[0])) { + if ((args[1] != null) && typeof args[1] === "string") { + this.setColor(args[1]); + } + args = args[0]; + } + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (args.length < 4) { + return; + } + len = Math.floor(args.length / 2); + transform = this.initDrawOp(0, 0, false); + this.context.beginPath(); + this.context.moveTo(args[0], args[1]); + for (i = j = 1, ref = len - 1; (1 <= ref ? j <= ref : j >= ref); i = 1 <= ref ? ++j : --j) { + this.context.lineTo(args[i * 2], args[i * 2 + 1]); + } + this.context.closePath(); + this.context.stroke(); + if (transform) { + return this.closeDrawOp(); + } + } + + fillPolygon() { + var args, i, j, len, ref, transform; + args = arguments; + this.initContext(); + if (args.length > 0 && args.length % 2 === 1 && typeof args[args.length - 1] === "string") { + this.setColor(args[args.length - 1]); + } + if (Array.isArray(args[0])) { + if ((args[1] != null) && typeof args[1] === "string") { + this.setColor(args[1]); + } + args = args[0]; + } + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (args.length < 4) { + return; + } + len = Math.floor(args.length / 2); + transform = this.initDrawOp(0, 0, false); + this.context.beginPath(); + this.context.moveTo(args[0], args[1]); + for (i = j = 1, ref = len - 1; (1 <= ref ? j <= ref : j >= ref); i = 1 <= ref ? ++j : --j) { + this.context.lineTo(args[i * 2], args[i * 2 + 1]); + } + this.context.fill(); + if (transform) { + return this.closeDrawOp(); + } + } + + drawQuadCurve() { + var args, index, len, transform; + args = arguments; + this.initContext(); + if (args.length > 0 && args.length % 2 === 1 && typeof args[args.length - 1] === "string") { + this.setColor(args[args.length - 1]); + } + if (Array.isArray(args[0])) { + if ((args[1] != null) && typeof args[1] === "string") { + this.setColor(args[1]); + } + args = args[0]; + } + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (args.length < 4) { + return; + } + len = Math.floor(args.length / 2); + transform = this.initDrawOp(0, 0, false); + this.context.beginPath(); + this.context.moveTo(args[0], args[1]); + index = 2; + while (index <= args.length - 4) { + this.context.quadraticCurveTo(args[index], args[index + 1], args[index + 2], args[index + 3]); + index += 4; + } + this.context.stroke(); + if (transform) { + return this.closeDrawOp(); + } + } + + drawBezierCurve() { + var args, index, len, transform; + args = arguments; + this.initContext(); + if (args.length > 0 && args.length % 2 === 1 && typeof args[args.length - 1] === "string") { + this.setColor(args[args.length - 1]); + } + if (Array.isArray(args[0])) { + if ((args[1] != null) && typeof args[1] === "string") { + this.setColor(args[1]); + } + args = args[0]; + } + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (args.length < 4) { + return; + } + len = Math.floor(args.length / 2); + transform = this.initDrawOp(0, 0, false); + this.context.beginPath(); + this.context.moveTo(args[0], args[1]); + index = 2; + while (index <= args.length - 6) { + this.context.bezierCurveTo(args[index], args[index + 1], args[index + 2], args[index + 3], args[index + 4], args[index + 5]); + index += 6; + } + this.context.stroke(); + if (transform) { + return this.closeDrawOp(); + } + } + + drawArc(x, y, radius, angle1, angle2, ccw, color) { + this.initContext(); + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (this.initDrawOp(x, y)) { + this.context.beginPath(); + this.context.arc(0, 0, radius, angle1 / 180 * Math.PI, angle2 / 180 * Math.PI, ccw); + this.context.stroke(); + return this.closeDrawOp(x, -y); + } else { + this.context.beginPath(); + this.context.arc(x, y, radius, angle1 / 180 * Math.PI, angle2 / 180 * Math.PI, ccw); + return this.context.stroke(); + } + } + + fillArc(x, y, radius, angle1, angle2, ccw, color) { + this.initContext(); + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.lineWidth = this.line_width; + if (this.initDrawOp(x, y)) { + this.context.beginPath(); + this.context.arc(0, 0, radius, angle1 / 180 * Math.PI, angle2 / 180 * Math.PI, ccw); + this.context.fill(); + return this.closeDrawOp(x, -y); + } else { + this.context.beginPath(); + this.context.arc(x, y, radius, angle1 / 180 * Math.PI, angle2 / 180 * Math.PI, ccw); + return this.context.fill(); + } + } + + textWidth(text, size) { + this.initContext(); + this.context.font = `${size}pt ${this.font}`; + return this.context.measureText(text).width; + } + + drawText(text, x, y, size, color) { + var h, w; + this.initContext(); + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.font = `${size}pt ${this.font}`; + this.context.textAlign = "center"; + this.context.textBaseline = "middle"; + w = this.context.measureText(text).width; + h = size; + if (this.initDrawOp(x, y)) { + this.context.fillText(text, 0 - this.anchor_x * w / 2, 0 + this.anchor_y * h / 2); + return this.closeDrawOp(x, y); + } else { + return this.context.fillText(text, x - this.anchor_x * w / 2, y + this.anchor_y * h / 2); + } + } + + drawTextOutline(text, x, y, size, color) { + var h, w; + this.initContext(); + this.setColor(color); + this.context.globalAlpha = this.alpha; + this.context.font = `${size}pt ${this.font}`; + this.context.lineWidth = this.line_width; + this.context.textAlign = "center"; + this.context.textBaseline = "middle"; + w = this.context.measureText(text).width; + h = size; + if (this.initDrawOp(x, y)) { + this.context.strokeText(text, 0 - this.anchor_x * w / 2, 0 + this.anchor_y * h / 2); + return this.closeDrawOp(x, y); + } else { + return this.context.strokeText(text, x - this.anchor_x * w / 2, y + this.anchor_y * h / 2); + } + } + + getSpriteFrame(sprite) { + var dt, frame, s; + frame = null; + if (typeof sprite === "string") { + s = window.player.runtime.sprites[sprite]; + if (s != null) { + sprite = s; + } else { + s = sprite.split("."); + if (s.length > 1) { + sprite = window.player.runtime.sprites[s[0]]; + frame = s[1] | 0; + } + } + } else if (sprite instanceof msImage) { + return sprite.canvas || sprite.image; + } + if ((sprite == null) || !sprite.ready) { + return null; + } + if (sprite.frames.length > 1) { + if (frame == null) { + dt = 1000 / sprite.fps; + frame = Math.floor((Date.now() - sprite.animation_start) / dt) % sprite.frames.length; + } + if (frame >= 0 && frame < sprite.frames.length) { + return sprite.frames[frame].canvas; + } else { + return sprite.frames[0].canvas; + } + } else if (sprite.frames[0] != null) { + return sprite.frames[0].canvas; + } else { + return null; + } + } + + drawImage(sprite, x, y, w, h) { + return this.drawSprite(sprite, x, y, w, h); + } + + drawSprite(sprite, x, y, w, h) { + var canvas; + this.initContext(); + canvas = this.getSpriteFrame(sprite); + if (canvas == null) { + return; + } + if (w == null) { + w = canvas.width; + } + if (!h) { + h = w / canvas.width * canvas.height; + } + this.context.globalAlpha = this.alpha; + this.context.imageSmoothingEnabled = !this.pixelated; + if (this.initDrawOp(x, y)) { + this.context.drawImage(canvas, -w / 2 - this.anchor_x * w / 2, -h / 2 + this.anchor_y * h / 2, w, h); + return this.closeDrawOp(x, y); + } else { + return this.context.drawImage(canvas, x - w / 2 - this.anchor_x * w / 2, y - h / 2 + this.anchor_y * h / 2, w, h); + } + } + + drawImagePart(sprite, sx, sy, sw, sh, x, y, w, h) { + return this.drawSpritePart(sprite, sx, sy, sw, sh, x, y, w, h); + } + + drawSpritePart(sprite, sx, sy, sw, sh, x, y, w, h) { + var canvas; + this.initContext(); + canvas = this.getSpriteFrame(sprite); + if (canvas == null) { + return; + } + if (w == null) { + w = canvas.width; + } + if (!h) { + h = w / sw * sh; + } + this.context.globalAlpha = this.alpha; + this.context.imageSmoothingEnabled = !this.pixelated; + if (this.initDrawOp(x, y)) { + this.context.drawImage(canvas, sx, sy, sw, sh, -w / 2 - this.anchor_x * w / 2, -h / 2 + this.anchor_y * h / 2, w, h); + return this.closeDrawOp(x, y); + } else { + return this.context.drawImage(canvas, sx, sy, sw, sh, x - w / 2 - this.anchor_x * w / 2, y - h / 2 + this.anchor_y * h / 2, w, h); + } + } + + drawMap(map, x, y, w, h) { + this.initContext(); + if (typeof map === "string") { + map = window.player.runtime.maps[map]; + } + if ((map == null) || !map.ready) { + return; + } + this.context.globalAlpha = this.alpha; + this.context.imageSmoothingEnabled = !this.pixelated; + if (this.initDrawOp(x, y)) { + map.draw(this.context, -w / 2 - this.anchor_x * w / 2, -h / 2 + this.anchor_y * h / 2, w, h); + return this.closeDrawOp(x, y); + } else { + return map.draw(this.context, x - w / 2 - this.anchor_x * w / 2, y - h / 2 + this.anchor_y * h / 2, w, h); + } + } + + }; + + msImage.classname = "Image"; + + return msImage; + +}).call(this); + +this.BLENDING_MODES = { + normal: "source-over", + additive: "lighter" +}; + +ref = ["source-over", "source-in", "source-out", "source-atop", "destination-over", "destination-in", "destination-out", "destination-atop", "lighter", "copy", "xor", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"]; +for (j = 0, len1 = ref.length; j < len1; j++) { + b = ref[j]; + this.BLENDING_MODES[b] = b; +} + +this.MicroMap = (function() { + function MicroMap(width, height, block_width, block_height) { + this.width = width; + this.height = height; + this.block_width = block_width; + this.block_height = block_height; + this.sprites = window.player.runtime.sprites; + this.map = []; + this.ready = true; + this.clear(); + } + + MicroMap.prototype.clear = function() { + var i, j, k, l, ref1, ref2; + for (j = k = 0, ref1 = this.height - 1; k <= ref1; j = k += 1) { + for (i = l = 0, ref2 = this.width - 1; l <= ref2; i = l += 1) { + this.map[i + j * this.width] = null; + } + } + }; + + MicroMap.prototype.set = function(x, y, ref) { + if (x >= 0 && x < this.width && y >= 0 && y < this.height) { + if (typeof ref === "string") { + ref = ref.replace(/\//g, "-"); + } + this.map[x + y * this.width] = ref; + return this.needs_update = true; + } + }; + + MicroMap.prototype.get = function(x, y) { + var c; + if (x < 0 || y < 0 || x >= this.width || y >= this.height) { + return 0; + } + c = this.map[x + y * this.width]; + if (typeof c === "string") { + c = c.replace(/-/g, "/"); + } + return c || 0; + }; + + MicroMap.prototype.getCanvas = function() { + if ((this.canvas == null) || this.needs_update) { + this.update(); + } + return this.canvas; + }; + + MicroMap.prototype.draw = function(context, x, y, w, h) { + var a, c, ctx, k, len, len1, ref1, time; + if ((this.animated != null) && this.animated.length > 0) { + time = Date.now(); + if ((this.buffer == null) || this.buffer.width !== this.block_width * this.width || this.buffer.height !== this.block_height * this.height) { + console.info("creating buffer"); + this.buffer = document.createElement("canvas"); + this.buffer.width = this.block_width * this.width; + this.buffer.height = this.block_height * this.height; + } + ctx = this.buffer.getContext("2d"); + ctx.clearRect(0, 0, this.buffer.width, this.buffer.height); + ctx.drawImage(this.getCanvas(), 0, 0); + ref1 = this.animated; + for (k = 0, len1 = ref1.length; k < len1; k++) { + a = ref1[k]; + len = a.sprite.frames.length; + c = a.sprite.frames[Math.floor(time / 1000 * a.sprite.fps) % len].canvas; + if (a.tx != null) { + ctx.drawImage(c, a.tx, a.ty, this.block_width, this.block_height, a.x, a.y, this.block_width, this.block_height); + } else { + ctx.drawImage(c, a.x, a.y, this.block_width, this.block_height); + } + } + context.drawImage(this.buffer, x, y, w, h); + } else { + context.drawImage(this.getCanvas(), x, y, w, h); + } + }; + + MicroMap.prototype.update = function() { + var a, c, context, i, index, j, k, l, ref1, ref2, s, sprite, tx, ty, xy; + this.needs_update = false; + if (this.canvas == null) { + this.canvas = document.createElement("canvas"); + } + if (this.canvas.width !== this.width * this.block_width || this.canvas.height !== this.height * this.block_height) { + this.canvas.width = this.width * this.block_width; + this.canvas.height = this.height * this.block_height; + } + context = this.canvas.getContext("2d"); + context.clearRect(0, 0, this.canvas.width, this.canvas.height); + this.animated = []; + for (j = k = 0, ref1 = this.height - 1; k <= ref1; j = k += 1) { + for (i = l = 0, ref2 = this.width - 1; l <= ref2; i = l += 1) { + index = i + (this.height - 1 - j) * this.width; + s = this.map[index]; + if ((s != null) && s.length > 0) { + s = s.split(":"); + sprite = this.sprites[s[0]]; + if (sprite == null) { + sprite = this.sprites[s[0].replace(/-/g, "/")]; + } + if ((sprite != null) && (sprite.frames[0] != null)) { + if (sprite.frames.length > 1) { + a = { + x: this.block_width * i, + y: this.block_height * j, + w: this.block_width, + h: this.block_height, + sprite: sprite + }; + if (s[1] != null) { + xy = s[1].split(","); + a.tx = xy[0] * this.block_width; + a.ty = xy[1] * this.block_height; + } + this.animated.push(a); + continue; + } + if (s[1] != null) { + xy = s[1].split(","); + tx = xy[0] * this.block_width; + ty = xy[1] * this.block_height; + c = sprite.frames[0].canvas; + if ((c != null) && c.width > 0 && c.height > 0) { + context.drawImage(c, tx, ty, this.block_width, this.block_height, this.block_width * i, this.block_height * j, this.block_width, this.block_height); + } + } else { + c = sprite.frames[0].canvas; + if ((c != null) && c.width > 0 && c.height > 0) { + context.drawImage(c, this.block_width * i, this.block_height * j); + } + } + } + } + } + } + }; + + MicroMap.prototype.loadFile = function(url) { + var req; + req = new XMLHttpRequest(); + req.onreadystatechange = (function(_this) { + return function(event) { + if (req.readyState === XMLHttpRequest.DONE) { + if (req.status === 200) { + _this.load(req.responseText, _this.sprites); + return _this.update(); + } + } + }; + })(this); + req.open("GET", url); + return req.send(); + }; + + MicroMap.prototype.load = function(data, sprites) { + var i, j, k, l, ref1, ref2, s; + data = JSON.parse(data); + this.width = data.width; + this.height = data.height; + this.block_width = data.block_width; + this.block_height = data.block_height; + for (j = k = 0, ref1 = data.height - 1; k <= ref1; j = k += 1) { + for (i = l = 0, ref2 = data.width - 1; l <= ref2; i = l += 1) { + s = data.data[i + j * data.width]; + if (s > 0) { + this.map[i + j * data.width] = data.sprites[s]; + } else { + this.map[i + j * data.width] = null; + } + } + } + }; + + MicroMap.prototype.clone = function() { + var i, j, k, l, map, ref1, ref2; + map = new MicroMap(this.width, this.height, this.block_width, this.block_height, this.sprites); + for (j = k = 0, ref1 = this.height - 1; k <= ref1; j = k += 1) { + for (i = l = 0, ref2 = this.width - 1; l <= ref2; i = l += 1) { + map.map[i + j * this.width] = this.map[i + j * this.width]; + } + } + map.needs_update = true; + return map; + }; + + MicroMap.prototype.copyFrom = function(map) { + var i, j, k, l, ref1, ref2; + this.width = map.width; + this.height = map.height; + this.block_width = map.block_width; + this.block_height = map.block_height; + for (j = k = 0, ref1 = this.height - 1; k <= ref1; j = k += 1) { + for (i = l = 0, ref2 = this.width - 1; l <= ref2; i = l += 1) { + this.map[i + j * this.width] = map.map[i + j * this.width]; + } + } + this.update(); + return this; + }; + + return MicroMap; + +})(); + +this.LoadMap = function(url, loaded) { + var map, req; + map = new MicroMap(1, 1, 1, 1); + map.ready = false; + req = new XMLHttpRequest(); + req.onreadystatechange = (function(_this) { + return function(event) { + if (req.readyState === XMLHttpRequest.DONE) { + map.ready = true; + if (req.status === 200) { + UpdateMap(map, req.responseText); + } + map.needs_update = true; + if (loaded != null) { + return loaded(); + } + } + }; + })(this); + req.open("GET", url); + req.send(); + return map; +}; + +this.UpdateMap = function(map, data) { + var i, j, k, l, ref1, ref2, s; + data = JSON.parse(data); + map.width = data.width; + map.height = data.height; + map.block_width = data.block_width; + map.block_height = data.block_height; + for (j = k = 0, ref1 = data.height - 1; k <= ref1; j = k += 1) { + for (i = l = 0, ref2 = data.width - 1; l <= ref2; i = l += 1) { + s = data.data[i + j * data.width]; + if (s > 0) { + map.map[i + j * data.width] = data.sprites[s]; + } else { + map.map[i + j * data.width] = null; + } + } + } + map.needs_update = true; + return map; +}; + +this.SaveMap = function(map) { + var data, i, index, j, k, l, list, m, n, o, ref1, ref2, ref3, ref4, s, table; + index = 1; + list = [0]; + table = {}; + for (j = k = 0, ref1 = map.height - 1; k <= ref1; j = k += 1) { + for (i = l = 0, ref2 = map.width - 1; l <= ref2; i = l += 1) { + s = map.map[i + j * map.width]; + if ((s != null) && s.length > 0 && (table[s] == null)) { + list.push(s); + table[s] = index++; + } + } + } + m = []; + for (j = n = 0, ref3 = map.height - 1; n <= ref3; j = n += 1) { + for (i = o = 0, ref4 = map.width - 1; o <= ref4; i = o += 1) { + s = map.map[i + j * map.width]; + m[i + j * map.width] = (s != null) && s.length > 0 ? table[s] : 0; + } + } + data = { + width: map.width, + height: map.height, + block_width: map.block_width, + block_height: map.block_height, + sprites: list, + data: m + }; + return JSON.stringify(data); +}; + +this.AudioCore = (function() { + function AudioCore(runtime) { + this.runtime = runtime; + this.buffer = []; + this.getContext(); + this.playing = []; + this.wakeup_list = []; + } + + AudioCore.prototype.isStarted = function() { + return this.context.state === "running"; + }; + + AudioCore.prototype.addToWakeUpList = function(item) { + return this.wakeup_list.push(item); + }; + + AudioCore.prototype.getInterface = function() { + var audio; + audio = this; + return this["interface"] = { + beep: function(sequence) { + return audio.beep(sequence); + }, + cancelBeeps: function() { + return audio.cancelBeeps(); + }, + playSound: function(sound, volume, pitch, pan, loopit) { + return audio.playSound(sound, volume, pitch, pan, loopit); + }, + playMusic: function(music, volume, loopit) { + return audio.playMusic(music, volume, loopit); + } + }; + }; + + AudioCore.prototype.playSound = function(sound, volume, pitch, pan, loopit) { + var s; + if (volume == null) { + volume = 1; + } + if (pitch == null) { + pitch = 1; + } + if (pan == null) { + pan = 0; + } + if (loopit == null) { + loopit = 0; + } + if (typeof sound === "string") { + s = this.runtime.sounds[sound.replace(/\//g, "-")]; + if (s != null) { + return s.play(volume, pitch, pan, loopit); + } + } + return 0; + }; + + AudioCore.prototype.playMusic = function(music, volume, loopit) { + var m; + if (volume == null) { + volume = 1; + } + if (loopit == null) { + loopit = 0; + } + if (typeof music === "string") { + m = this.runtime.music[music.replace(/\//g, "-")]; + if (m != null) { + return m.play(volume, loopit); + } + } + return 0; + }; + + AudioCore.prototype.start = function() { + var blob, src; + if (false) { + blob = new Blob([AudioCore.processor], { + type: "text/javascript" + }); + return this.context.audioWorklet.addModule(window.URL.createObjectURL(blob)).then((function(_this) { + return function() { + _this.node = new AudioWorkletNode(_this.context, "my-worklet-processor"); + _this.node.connect(_this.context.destination); + return _this.flushBuffer(); + }; + })(this)); + } else { + this.script_processor = this.context.createScriptProcessor(4096, 2, 2); + this.processor_funk = (function(_this) { + return function(event) { + return _this.onAudioProcess(event); + }; + })(this); + this.script_processor.onaudioprocess = this.processor_funk; + this.script_processor.connect(this.context.destination); + src = "class AudioWorkletProcessor {\n constructor() {\n this.port = {} ;\n\n var _this = this ;\n\n this.port.postMessage = function(data) {\n var event = { data: data } ;\n _this.port.onmessage(event) ;\n }\n }\n\n} ;\nregisterProcessor = function(a,b) {\n return new MyWorkletProcessor()\n} ;\n"; + src += AudioCore.processor; + this.node = eval(src); + this.flushBuffer(); + return this.bufferizer = new AudioBufferizer(this.node); + } + }; + + AudioCore.prototype.flushBuffer = function() { + var results; + results = []; + while (this.buffer.length > 0) { + results.push(this.node.port.postMessage(this.buffer.splice(0, 1)[0])); + } + return results; + }; + + AudioCore.prototype.onAudioProcess = function(event) { + var left, outputs, right; + left = event.outputBuffer.getChannelData(0); + right = event.outputBuffer.getChannelData(1); + outputs = [[left, right]]; + this.bufferizer.flush(outputs); + }; + + AudioCore.prototype.getContext = function() { + var activate; + if (this.context == null) { + this.context = new (window.AudioContext || window.webkitAudioContext); + if (this.context.state !== "running") { + activate = (function(_this) { + return function() { + var item, j, len, ref; + console.info("resuming context"); + _this.context.resume(); + if (_this.beeper != null) { + _this.start(); + } + ref = _this.wakeup_list; + for (j = 0, len = ref.length; j < len; j++) { + item = ref[j]; + item.wakeUp(); + } + document.body.removeEventListener("touchend", activate); + return document.body.removeEventListener("mouseup", activate); + }; + })(this); + document.body.addEventListener("touchend", activate); + document.body.addEventListener("mouseup", activate); + } else if (this.beeper != null) { + this.start(); + } + } + return this.context; + }; + + AudioCore.prototype.getBeeper = function() { + if (this.beeper == null) { + this.beeper = new Beeper(this); + if (this.context.state === "running") { + this.start(); + } + } + return this.beeper; + }; + + AudioCore.prototype.beep = function(sequence) { + return this.getBeeper().beep(sequence); + }; + + AudioCore.prototype.addBeeps = function(beeps) { + var b, j, len; + for (j = 0, len = beeps.length; j < len; j++) { + b = beeps[j]; + b.duration *= this.context.sampleRate; + b.increment = b.frequency / this.context.sampleRate; + } + if (this.node != null) { + return this.node.port.postMessage(JSON.stringify({ + name: "beep", + sequence: beeps + })); + } else { + return this.buffer.push(JSON.stringify({ + name: "beep", + sequence: beeps + })); + } + }; + + AudioCore.prototype.cancelBeeps = function() { + if (this.node != null) { + this.node.port.postMessage(JSON.stringify({ + name: "cancel_beeps" + })); + } else { + this.buffer.push(JSON.stringify({ + name: "cancel_beeps" + })); + } + return this.stopAll(); + }; + + AudioCore.prototype.addPlaying = function(item) { + return this.playing.push(item); + }; + + AudioCore.prototype.removePlaying = function(item) { + var index; + index = this.playing.indexOf(item); + if (index >= 0) { + return this.playing.splice(index, 1); + } + }; + + AudioCore.prototype.stopAll = function() { + var err, j, len, p, ref; + ref = this.playing; + for (j = 0, len = ref.length; j < len; j++) { + p = ref[j]; + try { + p.stop(); + } catch (error) { + err = error; + console.error(err); + } + } + return this.playing = []; + }; + + AudioCore.processor = "class MyWorkletProcessor extends AudioWorkletProcessor {\n constructor() {\n super();\n this.beeps = [] ;\n this.last = 0 ;\n this.port.onmessage = (event) => {\n let data = JSON.parse(event.data) ;\n if (data.name == \"cancel_beeps\")\n {\n this.beeps = [] ;\n }\n else if (data.name == \"beep\")\n {\n let seq = data.sequence ;\n for (let i=0;i0)\n {\n seq[i-1].next = note ;\n }\n\n if (note.loopto != null)\n {\n note.loopto = seq[note.loopto] ;\n }\n\n note.phase = 0 ;\n note.time = 0 ;\n }\n\n this.beeps.push(seq[0]) ;\n }\n } ;\n }\n\n process(inputs, outputs, parameters) {\n var output = outputs[0] ;\n var phase ;\n for (var i=0;i0)\n {\n for (var j=0;j=0;k--)\n {\n let b = this.beeps[k];\n let volume = b.volume ;\n if (b.time/b.duration>b.span)\n {\n volume = 0 ;\n }\n if (b.waveform == \"square\")\n {\n sig += b.phase>.5? volume : -volume ;\n }\n else if (b.waveform == \"saw\")\n {\n sig += (b.phase*2-1)*volume ;\n }\n else if (b.waveform == \"noise\")\n {\n sig += (Math.random()*2-1)*volume ;\n }\n else\n {\n sig += Math.sin(b.phase*Math.PI*2)*volume ;\n }\n\n b.phase = (b.phase+b.increment)%1 ;\n b.time += 1 ;\n if (b.time>=b.duration)\n {\n b.time = 0 ;\n if (b.loopto != null)\n {\n if (b.repeats != null && b.repeats>0)\n {\n if (b.loopcount == null)\n {\n b.loopcount = 0 ;\n }\n b.loopcount++ ;\n if (b.loopcount>=b.repeats)\n {\n b.loopcount = 0 ;\n if (b.next != null)\n {\n b.next.phase = b.phase ;\n b = b.next ;\n this.beeps[k] = b ;\n }\n else\n {\n this.beeps.splice(k,1) ;\n }\n }\n else\n {\n b.loopto.phase = b.phase ;\n b = b.loopto ;\n this.beeps[k] = b ;\n }\n }\n else\n {\n b.loopto.phase = b.phase ;\n b = b.loopto ;\n this.beeps[k] = b ;\n }\n }\n else if (b.next != null)\n {\n b.next.phase = b.phase ;\n b = b.next ;\n this.beeps[k] = b ;\n }\n else\n {\n this.beeps.splice(k,1) ;\n }\n }\n }\n this.last = this.last*.9+sig*.1 ;\n channel[j] = this.last ;\n }\n }\n }\n return true ;\n }\n}\n\nregisterProcessor('my-worklet-processor', MyWorkletProcessor);"; + + return AudioCore; + +})(); + +this.AudioBufferizer = (function() { + function AudioBufferizer(node) { + var i, j, k, left, ref, right; + this.node = node; + this.buffer_size = 4096; + this.chunk_size = 512; + this.chunks = []; + this.nb_chunks = this.buffer_size / this.chunk_size; + for (i = j = 0, ref = this.nb_chunks - 1; j <= ref; i = j += 1) { + left = (function() { + var n, ref1, results; + results = []; + for (k = n = 0, ref1 = this.chunk_size - 1; 0 <= ref1 ? n <= ref1 : n >= ref1; k = 0 <= ref1 ? ++n : --n) { + results.push(0); + } + return results; + }).call(this); + right = (function() { + var n, ref1, results; + results = []; + for (k = n = 0, ref1 = this.chunk_size - 1; 0 <= ref1 ? n <= ref1 : n >= ref1; k = 0 <= ref1 ? ++n : --n) { + results.push(0); + } + return results; + }).call(this); + this.chunks[i] = [[left, right]]; + } + this.current = 0; + setInterval(((function(_this) { + return function() { + return _this.step(); + }; + })(this)), this.chunk_size / 44100 * 1000); + } + + AudioBufferizer.prototype.step = function() { + if (this.current >= this.chunks.length) { + return; + } + this.node.process(null, this.chunks[this.current], null); + this.current++; + }; + + AudioBufferizer.prototype.flush = function(outputs) { + var chunk, i, index, j, k, l, left, n, r, ref, ref1, right; + while (this.current < this.chunks.length) { + this.step(); + } + this.current = 0; + left = outputs[0][0]; + right = outputs[0][1]; + index = 0; + chunk = 0; + for (i = j = 0, ref = this.chunks.length - 1; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) { + chunk = this.chunks[i]; + l = chunk[0][0]; + r = chunk[0][1]; + for (k = n = 0, ref1 = l.length - 1; 0 <= ref1 ? n <= ref1 : n >= ref1; k = 0 <= ref1 ? ++n : --n) { + left[index] = l[k]; + right[index] = r[k]; + index += 1; + } + } + }; + + return AudioBufferizer; + +})(); + +this.Beeper = (function() { + function Beeper(audio) { + var i, j, k, l, len, len1, n, oct, ref, ref1, text; + this.audio = audio; + this.notes = {}; + this.plain_notes = {}; + text = [["C", "DO"], ["C#", "DO#", "Db", "REb"], ["D", "RE"], ["D#", "RE#", "Eb", "MIb"], ["E", "MI"], ["F", "FA"], ["F#", "FA#", "Gb", "SOLb"], ["G", "SOL"], ["G#", "SOL#", "Ab", "LAb"], ["A", "LA"], ["A#", "LA#", "Bb", "SIb"], ["B", "SI"]]; + for (i = j = 0; j <= 127; i = j += 1) { + this.notes[i] = i; + oct = Math.floor(i / 12) - 1; + ref = text[i % 12]; + for (k = 0, len = ref.length; k < len; k++) { + n = ref[k]; + this.notes[n + oct] = i; + } + if (oct === -1) { + ref1 = text[i % 12]; + for (l = 0, len1 = ref1.length; l < len1; l++) { + n = ref1[l]; + this.plain_notes[n] = i; + } + } + } + this.current_octave = 5; + this.current_duration = .5; + this.current_volume = .5; + this.current_span = 1; + this.current_waveform = "square"; + } + + Beeper.prototype.beep = function(input) { + var i, j, k, len, loops, lop, n, note, parsed, ref, ref1, sequence, status, t, test; + test = "loop 0 square tempo 120 duration 500 volume 50 span 50 DO2 DO - FA SOL SOL FA -"; + status = "normal"; + sequence = []; + loops = []; + parsed = input.split(" "); + for (j = 0, len = parsed.length; j < len; j++) { + t = parsed[j]; + if (t === "") { + continue; + } + switch (status) { + case "normal": + if (this.notes[t] != null) { + note = this.notes[t]; + this.current_octave = Math.floor(note / 12); + sequence.push({ + frequency: 440 * Math.pow(Math.pow(2, 1 / 12), note - 69), + volume: this.current_volume, + span: this.current_span, + duration: this.current_duration, + waveform: this.current_waveform + }); + } else if (this.plain_notes[t] != null) { + note = this.plain_notes[t] + this.current_octave * 12; + sequence.push({ + frequency: 440 * Math.pow(Math.pow(2, 1 / 12), note - 69), + volume: this.current_volume, + span: this.current_span, + duration: this.current_duration, + waveform: this.current_waveform + }); + } else if (t === "square" || t === "sine" || t === "saw" || t === "noise") { + this.current_waveform = t; + } else if (t === "tempo" || t === "duration" || t === "volume" || t === "span" || t === "loop" || t === "to") { + status = t; + } else if (t === "-") { + sequence.push({ + frequency: 440, + volume: 0, + span: this.current_span, + duration: this.current_duration, + waveform: this.current_waveform + }); + } else if (t === "end") { + if (loops.length > 0 && sequence.length > 0) { + sequence.push({ + frequency: 440, + volume: 0, + span: this.current_span, + duration: 0, + waveform: this.current_waveform + }); + lop = loops.splice(loops.length - 1, 1)[0]; + sequence[sequence.length - 1].loopto = lop.start; + sequence[sequence.length - 1].repeats = lop.repeats; + } + } + break; + case "tempo": + status = "normal"; + t = Number.parseFloat(t); + if (!Number.isNaN(t) && t > 0) { + this.current_duration = 60 / t; + } + break; + case "duration": + status = "normal"; + t = Number.parseFloat(t); + if (!Number.isNaN(t) && t > 0) { + this.current_duration = t / 1000; + } + break; + case "volume": + status = "normal"; + t = Number.parseFloat(t); + if (!Number.isNaN(t)) { + this.current_volume = t / 100; + } + break; + case "span": + status = "normal"; + t = Number.parseFloat(t); + if (!Number.isNaN(t)) { + this.current_span = t / 100; + } + break; + case "loop": + status = "normal"; + loops.push({ + start: sequence.length + }); + t = Number.parseFloat(t); + if (!Number.isNaN(t)) { + loops[loops.length - 1].repeats = t; + } + break; + case "to": + status = "normal"; + if (note != null) { + n = null; + if (this.notes[t] != null) { + n = this.notes[t]; + } else if (this.plain_notes[t] != null) { + n = this.plain_notes[t] + this.current_octave * 12; + } + if ((n != null) && n !== note) { + for (i = k = ref = note, ref1 = n; ref <= ref1 ? k <= ref1 : k >= ref1; i = ref <= ref1 ? ++k : --k) { + if (i !== note) { + sequence.push({ + frequency: 440 * Math.pow(Math.pow(2, 1 / 12), i - 69), + volume: this.current_volume, + span: this.current_span, + duration: this.current_duration, + waveform: this.current_waveform + }); + } + } + note = n; + } + } + } + } + if (loops.length > 0 && sequence.length > 0) { + lop = loops.splice(loops.length - 1, 1)[0]; + sequence.push({ + frequency: 440, + volume: 0, + span: this.current_span, + duration: 0, + waveform: this.current_waveform + }); + sequence[sequence.length - 1].loopto = lop.start; + sequence[sequence.length - 1].repeats = lop.repeats; + } + return this.audio.addBeeps(sequence); + }; + + return Beeper; + +})(); + +this.Sound = class Sound { + constructor(audio, url) { + var request; + this.audio = audio; + this.url = url; + if (typeof MicroSound !== "undefined" && MicroSound !== null) { + this.class = MicroSound; + } + if (this.url instanceof AudioBuffer) { + this.buffer = this.url; + this.ready = 1; + } else { + this.ready = 0; + request = new XMLHttpRequest(); + request.open('GET', this.url, true); + request.responseType = 'arraybuffer'; + request.onload = () => { + return this.audio.context.decodeAudioData(request.response, (buffer1) => { + this.buffer = buffer1; + return this.ready = 1; + }); + }; + request.send(); + } + } + + play(volume = 1, pitch = 1, pan = 0, loopit = false) { + var gain, panner, playing, res, source; + if (this.buffer == null) { + return; + } + source = this.audio.context.createBufferSource(); + source.playbackRate.value = pitch; + source.buffer = this.buffer; + if (loopit) { + source.loop = true; + } + gain = this.audio.context.createGain(); + gain.gain.value = volume; + if (false && (this.audio.context.createStereoPanner != null)) { + panner = this.audio.context.createStereoPanner(); + panner.setPan = function(pan) { + return panner.pan.value = pan; + }; + } else { + panner = this.audio.context.createPanner(); + panner.panningModel = "equalpower"; + panner.setPan = function(pan) { + return panner.setPosition(pan, 0, 1 - Math.abs(pan)); + }; + } + panner.setPan(pan); + source.connect(gain); + gain.connect(panner); + panner.connect(this.audio.context.destination); + source.start(); + playing = null; + if (loopit) { + playing = { + stop: () => { + return source.stop(); + } + }; + this.audio.addPlaying(playing); + } + res = { + stop: () => { + source.stop(); + if (playing) { + this.audio.removePlaying(playing); + } + return 1; + }, + setVolume: function(volume) { + return gain.gain.value = Math.max(0, Math.min(1, volume)); + }, + setPitch: function(pitch) { + return source.playbackRate.value = Math.max(.001, Math.min(1000, pitch)); + }, + setPan: function(pan) { + return panner.setPan(Math.max(-1, Math.min(1, pan))); + }, + getDuration: function() { + return source.buffer.duration; + }, + finished: false + }; + source.onended = function() { + return res.finished = true; + }; + return res; + } + + static createSoundClass(audiocore) { + return window.MicroSound = (function() { + var _Class; + + _Class = class { + constructor(channels, length, sampleRate = 44100) { + var buffer, ch1, ch2, snd; + this.class = MicroSound; + channels = channels === 1 ? 1 : 2; + if (!(length > 1) || !(length < 44100 * 1000)) { + length = 44100; + } + if (!(sampleRate >= 8000) || !(sampleRate <= 96000)) { + sampleRate = 44100; + } + buffer = audiocore.context.createBuffer(channels, length, sampleRate); + snd = new Sound(audiocore, buffer); + this.channels = channels; + this.length = length; + this.sampleRate = sampleRate; + ch1 = buffer.getChannelData(0); + if (channels === 2) { + ch2 = buffer.getChannelData(1); + } + this.play = function(volume, pitch, pan, loopit) { + return snd.play(volume, pitch, pan, loopit); + }; + this.write = function(channel, position, value) { + if (channel === 0) { + ch1 = buffer.getChannelData(0); + return ch1[position] = value; + } else if (channels === 2) { + ch2 = buffer.getChannelData(1); + return ch2[position] = value; + } + }; + this.read = function(channel, position) { + if (channel === 0) { + ch1 = buffer.getChannelData(0); + return ch1[position]; + } else if (channels === 2) { + ch2 = buffer.getChannelData(1); + return ch2[position]; + } else { + return 0; + } + }; + } + + }; + + _Class.classname = "Sound"; + + return _Class; + + }).call(this); + } + +}; + +this.Music = (function() { + function Music(audio, url) { + this.audio = audio; + this.url = url; + this.tag = new Audio(this.url); + this.playing = false; + } + + Music.prototype.play = function(volume, loopit) { + if (volume == null) { + volume = 1; + } + if (loopit == null) { + loopit = false; + } + this.playing = true; + this.tag.loop = loopit ? true : false; + this.tag.volume = volume; + if (this.audio.isStarted()) { + this.tag.play(); + } else { + this.audio.addToWakeUpList(this); + } + this.audio.addPlaying(this); + return { + play: (function(_this) { + return function() { + return _this.tag.play(); + }; + })(this), + stop: (function(_this) { + return function() { + _this.playing = false; + _this.tag.pause(); + return _this.audio.removePlaying(_this); + }; + })(this), + setVolume: (function(_this) { + return function(volume) { + return _this.tag.volume = Math.max(0, Math.min(1, volume)); + }; + })(this), + getPosition: (function(_this) { + return function() { + return _this.tag.currentTime; + }; + })(this), + getDuration: (function(_this) { + return function() { + return _this.tag.duration; + }; + })(this), + setPosition: (function(_this) { + return function(pos) { + _this.tag.pause(); + _this.tag.currentTime = Math.max(0, Math.min(_this.tag.duration, pos)); + if (_this.playing) { + return _this.tag.play(); + } + }; + })(this) + }; + }; + + Music.prototype.wakeUp = function() { + if (this.playing) { + return this.tag.play(); + } + }; + + Music.prototype.stop = function() { + this.playing = false; + return this.tag.pause(); + }; + + return Music; + +})(); + +this.Player = class Player { + constructor(listener) { + var i, len, ref, source; + this.listener = listener; + //src = document.getElementById("code").innerText + this.source_count = 0; + this.sources = {}; + this.resources = resources; + this.request_id = 1; + this.pending_requests = {}; + if (resources.sources != null) { + ref = resources.sources; + for (i = 0, len = ref.length; i < len; i++) { + source = ref[i]; + this.loadSource(source); + } + } else { + this.sources.main = document.getElementById("code").innerText; + this.start(); + } + } + + loadSource(source) { + var req; + req = new XMLHttpRequest(); + req.onreadystatechange = (event) => { + var name; + if (req.readyState === XMLHttpRequest.DONE) { + if (req.status === 200) { + name = source.file.split(".")[0]; + this.sources[name] = req.responseText; + this.source_count++; + if (this.source_count >= resources.sources.length && (this.runtime == null)) { + return this.start(); + } + } + } + }; + req.open("GET", location.origin + location.pathname + `ms/${source.file}?v=${source.version}`); + return req.send(); + } + + start() { + var touchListener, touchStartListener, wrapper; + this.runtime = new Runtime((window.exported_project ? "" : location.origin + location.pathname), this.sources, resources, this); + this.client = new PlayerClient(this); + wrapper = document.getElementById("canvaswrapper"); + wrapper.appendChild(this.runtime.screen.canvas); + window.addEventListener("resize", () => { + return this.resize(); + }); + this.resize(); + //@runtime.start() + touchStartListener = (event) => { + event.preventDefault(); + //event.stopPropagation() + //event.stopImmediatePropagation() + this.runtime.screen.canvas.removeEventListener("touchstart", touchStartListener); + return true; + }; + touchListener = (event) => { + //event.preventDefault() + //event.stopPropagation() + //event.stopImmediatePropagation() + //@runtime.screen.canvas.removeEventListener "touchend",touchListener + if ((this.runtime != null) && (this.runtime.vm != null) && this.runtime.vm.context.global.system.disable_autofullscreen) { + return true; + } else { + this.setFullScreen(); + } + return true; + }; + this.runtime.screen.canvas.addEventListener("touchstart", touchStartListener); + this.runtime.screen.canvas.addEventListener("touchend", touchListener); + this.runtime.start(); + window.addEventListener("message", (msg) => { + return this.messageReceived(msg); + }); + return this.postMessage({ + name: "focus" + }); + } + + resize() { + var file, ref, results, src; + this.runtime.screen.resize(); + if (this.runtime.vm != null) { + if (this.runtime.vm.context.global.draw == null) { + this.runtime.update_memory = {}; + ref = this.runtime.sources; + results = []; + for (file in ref) { + src = ref[file]; + results.push(this.runtime.updateSource(file, src, false)); + } + return results; + } else if (this.runtime.stopped) { + return this.runtime.drawCall(); + } + } + } + + setFullScreen() { + var ref; + if ((document.documentElement.webkitRequestFullScreen != null) && !document.webkitIsFullScreen) { + document.documentElement.webkitRequestFullScreen(); + } else if ((document.documentElement.requestFullScreen != null) && !document.fullScreen) { + document.documentElement.requestFullScreen(); + } else if ((document.documentElement.mozRequestFullScreen != null) && !document.mozFullScreen) { + document.documentElement.mozRequestFullScreen(); + } + if ((window.screen != null) && (window.screen.orientation != null) && ((ref = window.orientation) === "portrait" || ref === "landscape")) { + return window.screen.orientation.lock(window.orientation).then(null, function(error) {}); + } + } + + //console.error error + reportError(err) { + return this.postMessage({ + name: "error", + data: err + }); + } + + log(text) { + return this.postMessage({ + name: "log", + data: text + }); + } + + codePaused() { + return this.postMessage({ + name: "code_paused" + }); + } + + exit() { + return this.postMessage({ + name: "exit" + }); + } + + messageReceived(msg) { + var code, data, err, file; + data = msg.data; + try { + data = JSON.parse(data); + switch (data.name) { + case "command": + return this.runtime.runCommand(data.line, (res) => { + if (!data.line.trim().startsWith("print")) { + return this.postMessage({ + name: "output", + data: res, + id: data.id + }); + } + }); + case "pause": + return this.runtime.stop(); + case "step_forward": + return this.runtime.stepForward(); + case "resume": + return this.runtime.resume(); + case "code_updated": + code = data.code; + file = data.file.split(".")[0]; + if (this.runtime.vm != null) { + this.runtime.vm.clearWarnings(); + } + return this.runtime.updateSource(file, code, true); + case "sprite_updated": + file = data.file; + return this.runtime.updateSprite(file, 0, data.data, data.properties); + case "map_updated": + file = data.file; + return this.runtime.updateMap(file, 0, data.data); + case "take_picture": + this.runtime.screen.takePicture((pic) => { + return this.postMessage({ + name: "picture_taken", + data: pic + }); + }); + if (this.runtime.stopped) { + return this.runtime.drawCall(); + } + break; + case "time_machine": + return this.runtime.time_machine.messageReceived(data); + case "watch": + return this.runtime.watch(data.list); + case "stop_watching": + return this.runtime.stopWatching(); + default: + if (data.request_id != null) { + if (this.pending_requests[data.request_id] != null) { + this.pending_requests[data.request_id](data); + return delete this.pending_requests[data.request_id]; + } + } + } + } catch (error1) { + err = error1; + return console.error(err); + } + } + + call(name, args) { + if ((this.runtime != null) && (this.runtime.vm != null)) { + return this.runtime.vm.call(name, args); + } + } + + setGlobal(name, value) { + if ((this.runtime != null) && (this.runtime.vm != null)) { + return this.runtime.vm.context.global[name] = value; + } + } + + exec(command, callback) { + if (this.runtime != null) { + return this.runtime.runCommand(command, callback); + } + } + + postMessage(data) { + var err; + if (window !== window.parent) { + window.parent.postMessage(JSON.stringify(data), "*"); + } + if (this.listener != null) { + try { + return this.listener(data); + } catch (error1) { + err = error1; + return console.error(err); + } + } + } + + postRequest(data, callback) { + data.request_id = this.request_id; + this.pending_requests[this.request_id++] = callback; + return this.postMessage(data); + } + +}; + +if ((navigator.serviceWorker != null) && !window.skip_service_worker) { + navigator.serviceWorker.register('sw.js', { + scope: location.pathname + }).then(function(reg) { + return console.log('Registration succeeded. Scope is' + reg.scope); + }).catch(function(error) { + return console.log('Registration failed with' + error); + }); +} + +this.PlayerClient = class PlayerClient { + constructor(player) { + var err; + this.player = player; + this.pending_requests = {}; + this.request_id = 0; + this.version_checked = false; + this.reconnect_delay = 1000; + if (location.protocol.startsWith("http") && !window.exported_project) { + try { + this.connect(); + } catch (error) { + err = error; + console.error(err); + } + setInterval((() => { + if (this.socket != null) { + return this.sendRequest({ + name: "ping" + }); + } + }), 30000); + } + } + + connect() { + this.socket = new WebSocket(window.location.origin.replace("http", "ws")); + this.socket.onmessage = (msg) => { + var err; + console.info("received: " + msg.data); + try { + msg = JSON.parse(msg.data); + if (msg.request_id != null) { + if (this.pending_requests[msg.request_id] != null) { + this.pending_requests[msg.request_id](msg); + delete this.pending_requests[msg.request_id]; + } + } + //if msg.name == "code_updated" + // @player.runtime.updateSource(msg.file,msg.code,true) + + //if msg.name == "sprite_updated" + // @player.runtime.updateSprite(msg.sprite) + if (msg.name === "project_file_updated") { + this.player.runtime.projectFileUpdated(msg.type, msg.file, msg.version, msg.data, msg.properties); + } + if (msg.name === "project_file_deleted") { + this.player.runtime.projectFileDeleted(msg.type, msg.file); + } + if (msg.name === "project_options_updated") { + return this.player.runtime.projectOptionsUpdated(msg); + } + } catch (error) { + err = error; + return console.error(err); + } + }; + this.socket.onopen = () => { + var i, j, k, l, len, len1, len2, len3, m, maps, project, ref, ref1, ref2, ref3, s, sources, sprites, user; + //console.info "socket opened" + this.reconnect_delay = 1000; + user = location.pathname.split("/")[1]; + project = location.pathname.split("/")[2]; + if (this.buffer != null) { + ref = this.buffer; + for (i = 0, len = ref.length; i < len; i++) { + m = ref[i]; + this.send(m); + } + delete this.buffer; + } + this.send({ + name: "listen_to_project", + user: user, + project: project + }); + if (!this.version_checked) { + this.version_checked = true; + sprites = {}; + maps = {}; + sources = {}; + ref1 = this.player.resources.images; + for (j = 0, len1 = ref1.length; j < len1; j++) { + s = ref1[j]; + sprites[s.file.split(".")[0]] = s.version; + } + ref2 = this.player.resources.maps; + for (k = 0, len2 = ref2.length; k < len2; k++) { + s = ref2[k]; + maps[s.file.split(".")[0]] = s.version; + } + ref3 = this.player.resources.sources; + for (l = 0, len3 = ref3.length; l < len3; l++) { + s = ref3[l]; + sources[s.file.split(".")[0]] = s.version; + } + return this.sendRequest({ + name: "get_file_versions", + user: user, + project: project + }, (msg) => { + var info, name, ref4, ref5, ref6, results, v; + ref4 = msg.data.sources; + for (name in ref4) { + info = ref4[name]; + v = sources[name]; + if ((v == null) || v !== info.version) { + //console.info "updating #{name} to version #{version}" + this.player.runtime.projectFileUpdated("ms", name, info.version, null, info.properties); + } + } + ref5 = msg.data.sprites; + for (name in ref5) { + info = ref5[name]; + v = sprites[name]; + if ((v == null) || v !== info.version) { + //console.info "updating #{name} to version #{version}" + this.player.runtime.projectFileUpdated("sprites", name, info.version, null, info.properties); + } + } + ref6 = msg.data.maps; + results = []; + for (name in ref6) { + info = ref6[name]; + v = maps[name]; + if ((v == null) || v !== info.version) { + //console.info "updating #{name} to version #{version}" + results.push(this.player.runtime.projectFileUpdated("maps", name, info.version, null, info.properties)); + } else { + results.push(void 0); + } + } + return results; + }); + } + }; + return this.socket.onclose = () => { + //console.info "socket closed" + setTimeout((() => { + return this.connect(); + }), this.reconnect_delay); + return this.reconnect_delay += 1000; + }; + } + + send(data) { + if (this.socket.readyState !== 1) { + if (this.buffer == null) { + this.buffer = []; + } + return this.buffer.push(data); + } else { + return this.socket.send(JSON.stringify(data)); + } + } + + sendRequest(msg, callback) { + msg.request_id = this.request_id++; + this.pending_requests[msg.request_id] = callback; + return this.send(msg); + } + +}; + diff --git a/cas.zip b/WebGames-master/WebGames-master/games/cap/music/music.mp3 similarity index 72% rename from cas.zip rename to WebGames-master/WebGames-master/games/cap/music/music.mp3 index 4cdfb4abea0972dac6b551a595f7841d4d25c06b..e165672360737b8d562c2f3ff0ccf551d651827e 100644 GIT binary patch delta 117 zcmWN=w+(<}6sU ZV$FsvH9PhkICA35g)2AiG_SbB8V}g`JH!A0 delta 666035 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%0A*>pbF>CutzJtgp9Vne#JcH?eTDQ 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%0AuTJ!k%YAz9G2P}edLps) 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 diff --git a/WebGames-master/WebGames-master/games/cap/parser.js b/WebGames-master/WebGames-master/games/cap/parser.js new file mode 100644 index 00000000..c9696477 --- /dev/null +++ b/WebGames-master/WebGames-master/games/cap/parser.js @@ -0,0 +1,812 @@ +this.Parser = (function() { + class Parser { + constructor(input, filename = "") { + this.input = input; + this.filename = filename; + if (/^\s*\/\/\s*javascript\s*\n/.test(this.input)) { + this.input = 'system.javascript("""\n\n' + this.input.replace(/\\/g, "\\\\") + '\n\n""")'; + } + this.tokenizer = new Tokenizer(this.input, this.filename); + this.program = new Program(); + this.current_block = []; + this.current = { + line: 1, + column: 1 + }; + this.verbose = false; + this.nesting = 0; + this.object_nesting = 0; + this.not_terminated = []; + this.api_reserved = { + screen: true, + audio: true, + keyboard: true, + gamepad: true, + sprites: true, + sounds: true, + music: true, + assets: true, + asset_manager: true, + maps: true, + touch: true, + mouse: true, + fonts: true, + Sound: true, + Image: true, + Sprite: true, + Map: true, + system: true, + storage: true, + print: true, + random: true, + Function: true, + List: true, + Object: true, + String: true, + Number: true + }; + } + + nextToken() { + var token; + token = this.tokenizer.next(); + if (token == null) { + this.unexpected_eof = true; + throw "Unexpected end of file"; + } + return this.current = token; + } + + nextTokenOptional() { + var token; + token = this.tokenizer.next(); + if (token != null) { + this.current = token; + } + return token; + } + + parse() { + var err, expression, nt, token; + try { + this.warnings = []; + while (true) { + expression = this.parseLine(); + if ((expression == null) && !this.tokenizer.finished()) { + token = this.tokenizer.next(); + if ((token != null) && token.reserved_keyword) { + if (token.value === "end") { + this.error("Too many 'end'"); + } else { + this.error(`Misuse of reserved keyword: '${token.value}'`); + } + } else { + this.error("Unexpected data"); + } + } + if (expression === null) { + break; + } + this.current_block.push(expression); + this.program.add(expression); + if (this.verbose) { + console.info(expression); + } + } + return this; + } catch (error1) { + err = error1; + //console.info "Error at line: #{@current.line} column: #{@current.column}" + if (this.not_terminated.length > 0 && err === "Unexpected end of file") { + nt = this.not_terminated[this.not_terminated.length - 1]; + return this.error_info = { + error: `Unterminated '${nt.value}' ; no matching 'end' found`, + line: nt.line, + column: nt.column + }; + } else { + return this.error_info = { + error: err, + line: this.current.line, + column: this.current.column + }; + } + } + } + + //console.error err + parseLine() { + var token; + token = this.nextTokenOptional(); + if (token == null) { + return null; + } + switch (token.type) { + case Token.TYPE_RETURN: + return new Program.Return(token, this.parseExpression()); + case Token.TYPE_BREAK: + return new Program.Break(token); + case Token.TYPE_CONTINUE: + return new Program.Continue(token); + case Token.TYPE_LOCAL: + return this.parseLocalAssignment(token); + default: + this.tokenizer.pushBack(token); + return this.parseExpression(); + } + } + + parseExpression(filter, first_function_call = false) { + var access, expression; + expression = this.parseExpressionStart(); + if (expression == null) { + return null; + } + while (true) { + access = this.parseExpressionSuffix(expression, filter); + if (access == null) { + return expression; + } + if (first_function_call && access instanceof Program.FunctionCall) { + return access; + } + expression = access; + } + } + + assertExpression(filter, first_function_call = false) { + var exp; + exp = this.parseExpression(filter, first_function_call); + if (exp == null) { + throw "Expression expected"; + } + return exp; + } + + parseExpressionSuffix(expression, filter) { + var field, identifier, token; + token = this.nextTokenOptional(); + if (token == null) { + return (filter === "self" ? expression : null); + } + switch (token.type) { + case Token.TYPE_DOT: + if (expression instanceof Program.Value && expression.type === Program.Value.TYPE_NUMBER) { + this.tokenizer.pushBack(token); + return null; + } else { + this.tokenizer.changeNumberToIdentifier(); + identifier = this.assertBroadIdentifier("Expected identifier"); + return Program.CreateFieldAccess(token, expression, new Program.Value(identifier, Program.Value.TYPE_STRING, identifier.value)); + } + break; + case Token.TYPE_OPEN_BRACKET: + field = this.assertExpression(); + this.assert(Token.TYPE_CLOSED_BRACKET, "Expected ']'"); + return Program.CreateFieldAccess(token, expression, field); + case Token.TYPE_OPEN_BRACE: + return this.parseFunctionCall(token, expression); + case Token.TYPE_EQUALS: + return this.parseAssignment(token, expression); + case Token.TYPE_PLUS_EQUALS: + return this.parseSelfAssignment(token, expression, token.type); + case Token.TYPE_MINUS_EQUALS: + return this.parseSelfAssignment(token, expression, token.type); + case Token.TYPE_MULTIPLY_EQUALS: + return this.parseSelfAssignment(token, expression, token.type); + case Token.TYPE_DIVIDE_EQUALS: + return this.parseSelfAssignment(token, expression, token.type); + case Token.TYPE_MODULO_EQUALS: + case Token.TYPE_AND_EQUALS: + case Token.TYPE_OR_EQUALS: + return this.parseSelfAssignment(token, expression, token.type); + default: + if (filter === "self") { + this.tokenizer.pushBack(token); + return expression; + } else if (token.is_binary_operator && filter !== "noop") { + return this.parseBinaryOperation(token, expression); + } else { + this.tokenizer.pushBack(token); + return null; + } + } + } + + parseExpressionStart() { + var next, token; + token = this.nextTokenOptional(); + if (token == null) { + return null; + } + switch (token.type) { + case Token.TYPE_IDENTIFIER: // variable name + return new Program.Variable(token, token.value); + case Token.TYPE_NUMBER: + return this.parseNumberExpression(token); + case Token.TYPE_PLUS: + return this.assertExpression(); + case Token.TYPE_MINUS: + return this.parseExpressionSuffix(new Program.Negate(token, this.assertExpression("noop")), "self"); + case Token.TYPE_NOT: + return this.parseExpressionSuffix(new Program.Not(token, this.assertExpression("noop")), "self"); + case Token.TYPE_STRING: + return this.parseStringExpression(token); + case Token.TYPE_IF: + return this.parseIf(token); + case Token.TYPE_FOR: + return this.parseFor(token); + case Token.TYPE_WHILE: + return this.parseWhile(token); + case Token.TYPE_OPEN_BRACE: + return this.parseBracedExpression(token); + case Token.TYPE_OPEN_BRACKET: + return this.parseArray(token); + case Token.TYPE_FUNCTION: + return this.parseFunction(token); + case Token.TYPE_OBJECT: + return this.parseObject(token); + case Token.TYPE_CLASS: + return this.parseClass(token); + case Token.TYPE_NEW: + return this.parseNew(token); + case Token.TYPE_DOT: + next = this.assert(Token.TYPE_NUMBER, "malformed number"); + if (!Number.isInteger(next.value)) { + throw "malformed number"; + } + return new Program.Value(token, Program.Value.TYPE_NUMBER, Number.parseFloat(`.${next.string_value}`)); + case Token.TYPE_AFTER: + return this.parseAfter(token); + case Token.TYPE_EVERY: + return this.parseEvery(token); + case Token.TYPE_DO: + return this.parseDo(token); + case Token.TYPE_SLEEP: + return this.parseSleep(token); + case Token.TYPE_DELETE: + return this.parseDelete(token); + default: + this.tokenizer.pushBack(token); + return null; + } + } + + parseNumberExpression(number) { + return new Program.Value(number, Program.Value.TYPE_NUMBER, number.value); + } + + parseStringExpression(string) { + var token; + token = this.nextTokenOptional(); + if (token == null) { + return new Program.Value(string, Program.Value.TYPE_STRING, string.value); + } else { + this.tokenizer.pushBack(token); + return new Program.Value(string, Program.Value.TYPE_STRING, string.value); + } + } + + parseArray(bracket) { + var res, token; + res = []; + while (true) { + token = this.nextToken(); + if (token.type === Token.TYPE_CLOSED_BRACKET) { + return new Program.Value(bracket, Program.Value.TYPE_ARRAY, res); + } else if (token.type === Token.TYPE_COMMA) { + continue; + } else { + this.tokenizer.pushBack(token); + res.push(this.assertExpression()); + } + } + } + + parseBinaryOperation(operation, term1) { + var ops, terms, token; + ops = [new Program.Operation(operation, operation.value)]; + terms = [term1]; + terms.push(this.assertExpression("noop")); + while (true) { + token = this.nextTokenOptional(); + if (token == null) { + break; + } + if (!token.is_binary_operator) { + this.tokenizer.pushBack(token); + break; + } + ops.push(new Program.Operation(token, token.value)); + terms.push(this.assertExpression("noop")); + } + return Program.BuildOperations(ops, terms); + } + + parseAssignment(token, expression) { + var res; + if (!(expression instanceof Program.Variable) && !(expression instanceof Program.Field)) { + throw "Expected variable identifier or property"; + } + if (this.object_nesting === 0 && expression instanceof Program.Variable && this.api_reserved[expression.identifier]) { + this.warnings.push({ + type: "assigning_api_variable", + identifier: expression.identifier, + line: token.line, + column: token.column + }); + } + if (expression instanceof Program.Field) { + this.object_nesting += 1; + res = new Program.Assignment(token, expression, this.assertExpression()); + this.object_nesting -= 1; + } else { + res = new Program.Assignment(token, expression, this.assertExpression()); + } + return res; + } + + parseSelfAssignment(token, expression, operation) { + if (!(expression instanceof Program.Variable) && !(expression instanceof Program.Field)) { + throw "Expected variable identifier or property"; + } + return new Program.SelfAssignment(token, expression, operation, this.assertExpression()); + } + + parseLocalAssignment(local) { + var identifier; + identifier = this.assert(Token.TYPE_IDENTIFIER, "Expected identifier"); + this.assert(Token.TYPE_EQUALS, "Expected '='"); + return new Program.Assignment(local, new Program.Variable(identifier, identifier.value), this.assertExpression(), true); + } + + parseBracedExpression(open) { + var expression, token; + expression = this.assertExpression(); + token = this.nextToken(); + if (token.type === Token.TYPE_CLOSED_BRACE) { + return new Program.Braced(open, expression); + } else { + return this.error("missing closing parenthese"); + } + } + + parseFunctionCall(brace_token, expression) { + var args, start, token; + args = []; + this.last_function_call = new Program.FunctionCall(brace_token, expression, args); + this.last_function_call.argslimits = []; + while (true) { + token = this.nextTokenOptional(); + if (token == null) { + return this.error("missing closing parenthese"); + } else if (token.type === Token.TYPE_CLOSED_BRACE) { + return new Program.FunctionCall(token, expression, args); + } else if (token.type === Token.TYPE_COMMA) { + continue; + } else { + this.tokenizer.pushBack(token); + start = token.start; + args.push(this.assertExpression()); + this.last_function_call.argslimits.push({ + start: start, + end: this.tokenizer.index - 1 + }); + } + } + } + + addTerminable(token) { + return this.not_terminated.push(token); + } + + endTerminable() { + if (this.not_terminated.length > 0) { + this.not_terminated.splice(this.not_terminated.length - 1, 1); + } + } + + parseFunction(funk) { + var args, line, sequence, token; + this.nesting += 1; + this.addTerminable(funk); + args = this.parseFunctionArgs(); + sequence = []; + while (true) { + token = this.nextToken(); + if (token.type === Token.TYPE_END) { + this.nesting -= 1; + this.endTerminable(); + return new Program.Function(funk, args, sequence, token); + } else { + this.tokenizer.pushBack(token); + line = this.parseLine(); + if (line != null) { + sequence.push(line); + } else { + this.error("Unexpected data while parsing function"); + } + } + } + } + + parseFunctionArgs() { + var args, exp, last, token; + token = this.nextToken(); + args = []; + last = null; + if (token.type !== Token.TYPE_OPEN_BRACE) { + return this.error("Expected opening parenthese"); + } + while (true) { + token = this.nextToken(); + if (token.type === Token.TYPE_CLOSED_BRACE) { + return args; + } else if (token.type === Token.TYPE_COMMA) { + last = null; + continue; + } else if (token.type === Token.TYPE_EQUALS && last === "argument") { + exp = this.assertExpression(); + args[args.length - 1].default = exp; + } else if (token.type === Token.TYPE_IDENTIFIER) { + last = "argument"; + args.push({ + name: token.value + }); + } else { + return this.error("Unexpected token"); + } + } + } + + warningAssignmentCondition(expression) { + if (expression instanceof Program.Assignment) { + return this.warnings.push({ + type: "assignment_as_condition", + line: expression.token.line, + column: expression.token.column + }); + } + } + + parseIf(iftoken) { + var chain, current, line, token; + this.addTerminable(iftoken); + current = { + condition: this.assertExpression(), + sequence: [] + }; + this.warningAssignmentCondition(current.condition); + chain = []; + token = this.nextToken(); + if (token.type !== Token.TYPE_THEN) { + return this.error("Expected 'then'"); + } + while (true) { + token = this.nextToken(); + if (token.type === Token.TYPE_ELSIF) { + chain.push(current); + current = { + condition: this.assertExpression(), + sequence: [] + }; + this.warningAssignmentCondition(current.condition); + this.assert(Token.TYPE_THEN, "Expected 'then'"); + } else if (token.type === Token.TYPE_ELSE) { + current.else = []; + } else if (token.type === Token.TYPE_END) { + chain.push(current); + this.endTerminable(); + return new Program.Condition(iftoken, chain); + } else { + this.tokenizer.pushBack(token); + line = this.parseLine(); + if (line == null) { + throw Error("Unexpected data while parsing if"); + } + if (current.else != null) { + current.else.push(line); + } else { + current.sequence.push(line); + } + } + } + } + + assert(type, error) { + var token; + token = this.nextToken(); + if (token.type !== type) { + throw error; + } + return token; + } + + assertBroadIdentifier(error) { + var token; + token = this.nextToken(); + if (token.type !== Token.TYPE_IDENTIFIER && token.reserved_keyword) { + token.type = Token.TYPE_IDENTIFIER; + } + if (token.type !== Token.TYPE_IDENTIFIER) { + throw error; + } + return token; + } + + error(text) { + throw text; + } + + parseFor(fortoken) { + var iterator, list, range_by, range_from, range_to, token; + iterator = this.assertExpression(); + if (iterator instanceof Program.Assignment) { + range_from = iterator.expression; + iterator = iterator.field; + token = this.nextToken(); + if (token.type !== Token.TYPE_TO) { + return this.error("Expected 'to'"); + } + range_to = this.assertExpression(); + token = this.nextToken(); + if (token.type === Token.TYPE_BY) { + range_by = this.assertExpression(); + } else { + range_by = 0; + this.tokenizer.pushBack(token); + } + return new Program.For(fortoken, iterator.identifier, range_from, range_to, range_by, this.parseSequence(fortoken)); + } else if (iterator instanceof Program.Variable) { + this.assert(Token.TYPE_IN, "Error expected keyword 'in'"); + list = this.assertExpression(); + return new Program.ForIn(fortoken, iterator.identifier, list, this.parseSequence(fortoken)); + } else { + return this.error("Malformed for loop"); + } + } + + parseWhile(whiletoken) { + var condition; + condition = this.assertExpression(); + return new Program.While(whiletoken, condition, this.parseSequence(whiletoken)); + } + + parseSequence(start_token) { + var line, sequence, token; + if (start_token != null) { + this.addTerminable(start_token); + } + this.nesting += 1; + sequence = []; + while (true) { + token = this.nextToken(); + if (token.type === Token.TYPE_END) { + if (start_token != null) { + this.endTerminable(); + } + this.nesting -= 1; + return sequence; + } else { + this.tokenizer.pushBack(token); + line = this.parseLine(); + if (line == null) { + this.error("Unexpected data"); + } + sequence.push(line); + } + } + return sequence; + } + + parseObject(object) { + var exp, fields, token; + this.nesting += 1; + this.object_nesting += 1; + this.addTerminable(object); + fields = []; + while (true) { + token = this.nextToken(); + if (token.type === Token.TYPE_END) { + this.nesting -= 1; + this.object_nesting -= 1; + this.endTerminable(); + return new Program.CreateObject(object, fields); + } else { + if (token.type !== Token.TYPE_IDENTIFIER && token.reserved_keyword) { + token.type = Token.TYPE_IDENTIFIER; + } + if (token.type === Token.TYPE_STRING) { + token.type = Token.TYPE_IDENTIFIER; + } + if (token.type === Token.TYPE_IDENTIFIER) { + this.assert(Token.TYPE_EQUALS, "Expected '='"); + exp = this.assertExpression(); + fields.push({ + field: token.value, + value: exp + }); + } else { + return this.error("Malformed object"); + } + } + } + } + + parseClass(object) { + var exp, ext, fields, token; + this.nesting += 1; + this.object_nesting += 1; + this.addTerminable(object); + fields = []; + token = this.nextToken(); + if (token.type === Token.TYPE_EXTENDS) { + ext = this.assertExpression(); + token = this.nextToken(); + } + while (true) { + if (token.type === Token.TYPE_END) { + this.nesting -= 1; + this.object_nesting -= 1; + this.endTerminable(); + return new Program.CreateClass(object, ext, fields); + } else { + if (token.type !== Token.TYPE_IDENTIFIER && token.reserved_keyword) { + token.type = Token.TYPE_IDENTIFIER; + } + if (token.type === Token.TYPE_STRING) { + token.type = Token.TYPE_IDENTIFIER; + } + if (token.type === Token.TYPE_IDENTIFIER) { + this.assert(Token.TYPE_EQUALS, "Expected '='"); + exp = this.assertExpression(); + fields.push({ + field: token.value, + value: exp + }); + } else { + return this.error("Malformed object"); + } + } + token = this.nextToken(); + } + } + + parseNew(token) { + var exp; + exp = this.assertExpression(null, true); + return new Program.NewCall(token, exp); + } + + parseAfter(after) { + var delay, line, multiplier, sequence, token; + this.nesting += 1; + this.addTerminable(after); + delay = this.assertExpression(); + token = this.nextToken(); + multiplier = null; + if (token.type === Token.TYPE_IDENTIFIER && this.multipliers[token.value]) { + multiplier = this.multipliers[token.value]; + token = this.nextToken(); + } + if ((token == null) || token.type !== Token.TYPE_DO) { + this.error("Expected keyword 'do'"); + } + sequence = []; + while (true) { + token = this.nextToken(); + if (token.type === Token.TYPE_END) { + this.nesting -= 1; + this.endTerminable(); + return new Program.After(after, delay, sequence, token, multiplier); + } else { + this.tokenizer.pushBack(token); + line = this.parseLine(); + if (line != null) { + sequence.push(line); + } else { + this.error("Unexpected data while parsing after"); + } + } + } + } + + parseEvery(every) { + var delay, line, multiplier, sequence, token; + this.nesting += 1; + this.addTerminable(every); + delay = this.assertExpression(); + token = this.nextToken(); + multiplier = null; + if (token.type === Token.TYPE_IDENTIFIER && this.multipliers[token.value]) { + multiplier = this.multipliers[token.value]; + token = this.nextToken(); + } + if ((token == null) || token.type !== Token.TYPE_DO) { + this.error("Expected keyword 'do'"); + } + sequence = []; + while (true) { + token = this.nextToken(); + if (token.type === Token.TYPE_END) { + this.nesting -= 1; + this.endTerminable(); + return new Program.Every(every, delay, sequence, token, multiplier); + } else { + this.tokenizer.pushBack(token); + line = this.parseLine(); + if (line != null) { + sequence.push(line); + } else { + this.error("Unexpected data while parsing after"); + } + } + } + } + + parseDo(do_token) { + var line, sequence, token; + this.nesting += 1; + this.addTerminable(do_token); + sequence = []; + while (true) { + token = this.nextToken(); + if (token.type === Token.TYPE_END) { + this.nesting -= 1; + this.endTerminable(); + return new Program.Do(do_token, sequence, token); + } else { + this.tokenizer.pushBack(token); + line = this.parseLine(); + if (line != null) { + sequence.push(line); + } else { + this.error("Unexpected data while parsing after"); + } + } + } + } + + parseSleep(sleep) { + var delay, multiplier, token; + delay = this.assertExpression(); + token = this.nextToken(); + multiplier = null; + if (token != null) { + if (token.type === Token.TYPE_IDENTIFIER && this.multipliers[token.value]) { + multiplier = this.multipliers[token.value]; + } else { + this.tokenizer.pushBack(token); + } + } + return new Program.Sleep(sleep, delay, multiplier); + } + + parseDelete(del) { + var v; + v = this.parseExpression(); + if ((v == null) || (!(v instanceof Program.Variable) && !(v instanceof Program.Field))) { + return this.error("expecting variable name or property access after keyword `delete`"); + } else { + return new Program.Delete(del, v); + } + } + + }; + + Parser.prototype.multipliers = { + millisecond: 1, + milliseconds: 1, + second: 1000, + seconds: 1000, + minute: 60000, + minutes: 60000, + hour: 60000 * 60, + hours: 60000 * 60, + day: 60000 * 60 * 24, + days: 60000 * 60 * 24 + }; + + return Parser; + +}).call(this); diff --git a/WebGames-master/WebGames-master/games/cap/processor.js b/WebGames-master/WebGames-master/games/cap/processor.js new file mode 100644 index 00000000..60ed44c6 --- /dev/null +++ b/WebGames-master/WebGames-master/games/cap/processor.js @@ -0,0 +1,1542 @@ +this.Processor = class Processor { + constructor(runner) { + this.runner = runner; + this.locals = []; + this.stack = []; + this.call_stack = []; + this.log = false; + this.time_limit = 2e308; + this.done = true; + } + + load(routine1) { + this.routine = routine1; + return this.resetState(); + } + + resetState() { + this.local_index = 0; + this.stack_index = -1; + this.op_index = 0; + this.call_stack_index = 0; + this.global = null; + this.object = this.routine.object || null; + this.locals_offset = 0; + this.call_super = null; + this.call_supername = ""; + return this.done = false; + } + + resolveParentClass(obj, global) { + if ((obj.class != null) && typeof obj.class === "string") { + if (global[obj.class] != null) { + obj.class = global[obj.class]; + return this.resolveParentClass(obj.class, global); + } + } else if (obj.class != null) { + return this.resolveParentClass(obj.class, global); + } + } + + applyFunction(args) {} + + routineAsFunction(routine, context) { + var f, proc; + proc = new Processor(this.runner); + f = function() { + var a, count, i, j, k, ref, ref1; + count = Math.min(routine.num_args, arguments.length); + proc.load(routine); + for (i = j = 0, ref = count - 1; j <= ref; i = j += 1) { + proc.stack[++proc.stack_index] = arguments[i] || 0; + } + proc.stack[++proc.stack_index] = arguments.length; + if (routine.uses_arguments) { + a = [...arguments]; + for (i = k = 0, ref1 = a.length - 1; k <= ref1; i = k += 1) { + if (a[i] == null) { + a[i] = 0; + } + } + proc.stack[++proc.stack_index] = a; + } + return proc.run(context); + }; + //res = proc.stack[0] + return f; + } + + routineAsApplicableFunction(routine, context) { + var f, proc; + proc = new Processor(this.runner); + f = function() { + var a, count, i, j, k, ref, ref1, res; + count = routine.num_args; + proc.load(routine); + proc.object = this; + for (i = j = 0, ref = count - 1; j <= ref; i = j += 1) { + proc.stack[++proc.stack_index] = arguments[i] || 0; + } + proc.stack[++proc.stack_index] = arguments.length; + if (routine.uses_arguments) { + a = [...arguments]; + for (i = k = 0, ref1 = a.length - 1; k <= ref1; i = k += 1) { + if (a[i] == null) { + a[i] = 0; + } + } + proc.stack[++proc.stack_index] = a; + } + proc.run(context); + return res = proc.stack[0]; + }; + return f; + } + + argToNative(arg, context) { + if (arg instanceof Routine) { + return this.routineAsFunction(arg, context); + } else { + if (arg != null) { + return arg; + } else { + return 0; + } + } + } + + modulo(context, a, b) { + var f, obj; + if (Array.isArray(a)) { + obj = context.global.List; + } else if (typeof a === "string") { + if (isFinite(a)) { + a %= b; + if (isFinite(a)) { + return a; + } else { + return 0; + } + } else { + obj = context.global.String; + } + } else { + obj = a; + } + f = obj["%"]; + while ((f == null) && (obj.class != null)) { + obj = obj.class; + f = obj["%"]; + } + if (f == null) { + f = context.global.Object["%"]; + } + if ((f != null) && f instanceof Routine) { + if (f.as_function == null) { + f.as_function = this.routineAsApplicableFunction(f, context); + } + f = f.as_function; + return f.call(context.global, a, b); + } else { + return 0; + } + } + + add(context, a, b, self) { + var f, obj; + if (Array.isArray(a)) { + obj = context.global.List; + } else if (typeof a === "string") { + obj = context.global.String; + } else { + obj = a; + } + f = obj["+"]; + while ((f == null) && (obj.class != null)) { + obj = obj.class; + f = obj["+"]; + } + if (f == null) { + f = context.global.Object["+"]; + } + if (f != null) { + if (f instanceof Routine) { + if (f.as_function == null) { + f.as_function = this.routineAsApplicableFunction(f, context); + } + f = f.as_function; + return f.call(context.global, a, b, self); + } else if (typeof f === "function") { + return f.call(context.global, a, b, self); + } + } else { + return 0; + } + } + + sub(context, a, b, self) { + var f, obj; + if (Array.isArray(a)) { + obj = context.global.List; + } else if (typeof a === "string") { + if (isFinite(a)) { + a -= b; + if (isFinite(a)) { + return a; + } else { + return 0; + } + } else { + obj = context.global.String; + } + } else { + obj = a; + } + f = obj["-"]; + while ((f == null) && (obj.class != null)) { + obj = obj.class; + f = obj["-"]; + } + if (f == null) { + f = context.global.Object["-"]; + } + if (f != null) { + if (f instanceof Routine) { + if (f.as_function == null) { + f.as_function = this.routineAsApplicableFunction(f, context); + } + f = f.as_function; + return f.call(context.global, a, b, self); + } else if (typeof f === "function") { + return f.call(context.global, a, b, self); + } + } else { + return 0; + } + } + + negate(context, a) { + var f, obj; + if (Array.isArray(a)) { + obj = context.global.List; + } else if (typeof a === "string") { + if (isFinite(a)) { + return -a; + } else { + obj = context.global.String; + } + } else { + obj = a; + } + f = obj["-"]; + while ((f == null) && (obj.class != null)) { + obj = obj.class; + f = obj["-"]; + } + if (f == null) { + f = context.global.Object["-"]; + } + if (f != null) { + if (f instanceof Routine) { + if (f.as_function == null) { + f.as_function = this.routineAsApplicableFunction(f, context); + } + f = f.as_function; + return f.call(context.global, 0, a); + } else if (typeof f === "function") { + return f.call(context.global, 0, a); + } + } else { + return 0; + } + } + + mul(context, a, b, self) { + var f, obj; + if (Array.isArray(a)) { + obj = context.global.List; + } else if (typeof a === "string") { + if (isFinite(a)) { + a *= b; + if (isFinite(a)) { + return a; + } else { + return 0; + } + } else { + obj = context.global.String; + } + } else { + obj = a; + } + f = obj["*"]; + while ((f == null) && (obj.class != null)) { + obj = obj.class; + f = obj["*"]; + } + if (f == null) { + f = context.global.Object["*"]; + } + if (f != null) { + if (f instanceof Routine) { + if (f.as_function == null) { + f.as_function = this.routineAsApplicableFunction(f, context); + } + f = f.as_function; + return f.call(context.global, a, b, self); + } else if (typeof f === "function") { + return f.call(context.global, a, b, self); + } + } else { + return 0; + } + } + + div(context, a, b, self) { + var f, obj; + if (Array.isArray(a)) { + obj = context.global.List; + } else if (typeof a === "string") { + if (isFinite(a)) { + a /= b; + if (isFinite(a)) { + return a; + } else { + return 0; + } + } else { + obj = context.global.String; + } + } else { + obj = a; + } + f = obj["/"]; + while ((f == null) && (obj.class != null)) { + obj = obj.class; + f = obj["/"]; + } + if (f == null) { + f = context.global.Object["/"]; + } + if (f != null) { + if (f instanceof Routine) { + if (f.as_function == null) { + f.as_function = this.routineAsApplicableFunction(f, context); + } + f = f.as_function; + return f.call(context.global, a, b, self); + } else if (typeof f === "function") { + return f.call(context.global, a, b, self); + } + } else { + return 0; + } + } + + band(context, a, b, self) { + var f, obj; + if (Array.isArray(a)) { + obj = context.global.List; + } else if (typeof a === "string") { + if (isFinite(a)) { + a &= b; + if (isFinite(a)) { + return a; + } else { + return 0; + } + } else { + obj = context.global.String; + } + } else { + obj = a; + } + f = obj["&"]; + while ((f == null) && (obj.class != null)) { + obj = obj.class; + f = obj["&"]; + } + if (f == null) { + f = context.global.Object["&"]; + } + if (f != null) { + if (f instanceof Routine) { + if (f.as_function == null) { + f.as_function = this.routineAsApplicableFunction(f, context); + } + f = f.as_function; + return f.call(context.global, a, b, self); + } else if (typeof f === "function") { + return f.call(context.global, a, b, self); + } + } else { + return 0; + } + } + + bor(context, a, b, self) { + var f, obj; + if (Array.isArray(a)) { + obj = context.global.List; + } else if (typeof a === "string") { + if (isFinite(a)) { + a |= b; + if (isFinite(a)) { + return a; + } else { + return 0; + } + } else { + obj = context.global.String; + } + } else { + obj = a; + } + f = obj["|"]; + while ((f == null) && (obj.class != null)) { + obj = obj.class; + f = obj["|"]; + } + if (f == null) { + f = context.global.Object["|"]; + } + if (f != null) { + if (f instanceof Routine) { + if (f.as_function == null) { + f.as_function = this.routineAsApplicableFunction(f, context); + } + f = f.as_function; + return f.call(context.global, a, b, self); + } else if (typeof f === "function") { + return f.call(context.global, a, b, self); + } + } else { + return 0; + } + } + + run(context) { + var a, arg1, args, argv, b, c, call_stack, call_stack_index, call_super, call_supername, con, cs, err, f, fc, field, global, i, i1, i2, id, index, ir, iter, iterator, j, k, key, l, len, length, local_index, locals, locals_offset, loop_by, loop_to, m, n, name, o, obj, object, op_count, op_index, opcodes, p, parent, q, r, rc, ref, ref1, ref10, ref11, ref12, ref13, ref14, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9, res, restore_op_index, routine, s, sleep_time, src, stack, stack_index, sup, t, token, u, v, value, w; + routine = this.routine; + opcodes = this.routine.opcodes; + arg1 = this.routine.arg1; + length = opcodes.length; + op_index = this.op_index; + stack = this.stack; + stack_index = this.stack_index; + locals = this.locals; + local_index = this.local_index; + global = this.global || context.global; + object = this.object || global; + call_stack = this.call_stack; + call_stack_index = this.call_stack_index; + call_super = this.call_super || global; + call_supername = this.call_supername || ""; + locals_offset = this.locals_offset; + op_count = 0; + restore_op_index = -1; + while (op_index < length) { + switch (opcodes[op_index]) { + case 1: // OPCODE_TYPE + v = stack[stack_index]; + switch (typeof v) { + case "number": + stack[stack_index] = "number"; + break; + case "string": + stack[stack_index] = "string"; + break; + case "function": + stack[stack_index] = "function"; + break; + case "object": + if (Array.isArray(v)) { + stack[stack_index] = "list"; + } else if (v instanceof Routine) { + stack[stack_index] = "function"; + } else { + stack[stack_index] = "object"; + } + } + op_index++; + break; + case 2: // OPCODE_TYPE_VARIABLE + v = object[arg1[op_index]]; + if (v == null) { + v = global[arg1[op_index]]; + } + if (v == null) { + stack[++stack_index] = 0; + } else { + switch (typeof v) { + case "number": + stack[++stack_index] = "number"; + break; + case "string": + stack[++stack_index] = "string"; + break; + case "function": + stack[++stack_index] = "function"; + break; + default: + if (Array.isArray(v)) { + stack[++stack_index] = "list"; + } else if (v instanceof Routine) { + stack[++stack_index] = "function"; + } else { + stack[++stack_index] = "object"; + } + } + } + op_index++; + break; + case 3: // OPCODE_TYPE_PROPERTY + v = stack[stack_index - 1][stack[stack_index]]; + if (v == null) { + stack[--stack_index] = 0; + } else { + switch (typeof v) { + case "number": + stack[--stack_index] = "number"; + break; + case "string": + stack[--stack_index] = "string"; + break; + case "function": + stack[--stack_index] = "function"; + break; + default: + if (Array.isArray(v)) { + stack[--stack_index] = "list"; + } else if (v instanceof Routine) { + stack[--stack_index] = "function"; + } else { + stack[--stack_index] = "object"; + } + } + } + op_index++; + break; + case 4: // OPCODE_LOAD_IMPORT + stack[++stack_index] = routine.import_values[arg1[op_index++]]; + break; + case 5: // OPCODE_LOAD_THIS + stack[++stack_index] = object; + op_index++; + break; + case 6: // OPCODE_LOAD_GLOBAL + stack[++stack_index] = global; + op_index++; + break; + case 10: // CODE_LOAD_VALUE + stack[++stack_index] = arg1[op_index++]; + break; + case 11: // OPCODE_LOAD_LOCAL + stack[++stack_index] = locals[locals_offset + arg1[op_index++]]; + break; + case 12: // OPCODE_LOAD_VARIABLE + name = arg1[op_index]; + v = object[name]; + if ((v == null) && (object.class != null)) { + obj = object; + while ((v == null) && (obj.class != null)) { + obj = obj.class; + v = obj[name]; + } + } + if (v == null) { + v = global[name]; + } + if ((v == null) && !routine.ref[op_index].nowarning) { + token = routine.ref[op_index].token; + id = token.tokenizer.filename + "-" + token.line + "-" + token.column; + if (!context.warnings.using_undefined_variable[id]) { + context.warnings.using_undefined_variable[id] = { + file: token.tokenizer.filename, + line: token.line, + column: token.column, + expression: name + }; + } + } + stack[++stack_index] = v != null ? v : 0; + op_index++; + break; + case 13: // OPCODE_LOAD_LOCAL_OBJECT + o = locals[locals_offset + arg1[op_index]]; + if (typeof o !== "object") { + o = locals[locals_offset + arg1[op_index]] = {}; + token = routine.ref[op_index].token; + id = token.tokenizer.filename + "-" + token.line + "-" + token.column; + if (!context.warnings.assigning_field_to_undefined[id]) { + context.warnings.assigning_field_to_undefined[id] = { + file: token.tokenizer.filename, + line: token.line, + column: token.column, + expression: token.value + }; + } + } + stack[++stack_index] = o; + op_index++; + break; + case 14: // OPCODE_LOAD_VARIABLE_OBJECT + name = arg1[op_index]; + obj = object; + v = obj[name]; + while ((v == null) && (obj.class != null)) { + obj = obj.class; + v = obj[name]; + } + if ((v == null) && (global[name] != null)) { + obj = global; + v = global[name]; + } + if ((v == null) || typeof v !== "object") { + v = obj[name] = {}; + token = routine.ref[op_index].token; + id = token.tokenizer.filename + "-" + token.line + "-" + token.column; + if (!context.warnings.assigning_field_to_undefined[id]) { + context.warnings.assigning_field_to_undefined[id] = { + file: token.tokenizer.filename, + line: token.line, + column: token.column, + expression: arg1[op_index] + }; + } + } + stack[++stack_index] = v; + op_index++; + break; + case 15: // OPCODE_POP + stack_index--; + op_index++; + break; + case 16: // OPCODE_LOAD_PROPERTY + obj = stack[stack_index - 1]; + name = stack[stack_index]; + v = obj[name]; + while ((v == null) && (obj.class != null)) { + obj = obj.class; + v = obj[name]; + } + if (v == null) { + v = 0; + if (!routine.ref[op_index].nowarning) { + routine.ref[op_index].nowarning = true; + if (!Array.isArray(obj)) { + token = routine.ref[op_index].token; + id = token.tokenizer.filename + "-" + token.line + "-" + token.column; + context.warnings.using_undefined_variable[id] = { + file: token.tokenizer.filename, + line: token.line, + column: token.column, + expression: name + }; + } + } + } + stack[--stack_index] = v; + op_index++; + break; + case 17: // OPCODE_LOAD_PROPERTY_OBJECT + v = stack[stack_index - 1][stack[stack_index]]; + if (typeof v !== "object") { + v = stack[stack_index - 1][stack[stack_index]] = {}; + token = routine.ref[op_index].token; + id = token.tokenizer.filename + "-" + token.line + "-" + token.column; + if (!context.warnings.assigning_field_to_undefined[id]) { + context.warnings.assigning_field_to_undefined[id] = { + file: token.tokenizer.filename, + line: token.line, + column: token.column, + expression: stack[stack_index] + }; + } + } + stack[--stack_index] = v; + op_index++; + break; + case 18: // OPCODE_CREATE_OBJECT + stack[++stack_index] = {}; + op_index++; + break; + case 19: // OPCODE_MAKE_OBJECT + if (typeof stack[stack_index] !== "object") { + stack[stack_index] = {}; + } + op_index++; + break; + case 20: // OPCODE_CREATE_ARRAY + stack[++stack_index] = []; + op_index++; + break; + case 21: // OPCODE_STORE_LOCAL + locals[locals_offset + arg1[op_index]] = stack[stack_index]; + op_index++; + break; + case 22: // OPCODE_STORE_LOCAL_POP + locals[locals_offset + arg1[op_index]] = stack[stack_index--]; + op_index++; + break; + case 23: // OPCODE_STORE_VARIABLE + object[arg1[op_index++]] = stack[stack_index]; + break; + case 24: // OPCODE_CREATE_PROPERTY + obj = stack[stack_index - 2]; + field = stack[stack_index - 1]; + obj[field] = stack[stack_index]; + stack_index -= 2; + op_index++; + break; + case 25: // OPCODE_STORE_PROPERTY + obj = stack[stack_index - 2]; + field = stack[stack_index - 1]; + stack[stack_index - 2] = obj[field] = stack[stack_index]; + stack_index -= 2; + op_index++; + break; + case 26: // OPCODE_DELETE + obj = stack[stack_index - 1]; + field = stack[stack_index]; + delete obj[field]; + stack[stack_index -= 1] = 0; + op_index++; + break; + case 27: // OPCODE_UPDATE_CLASS + name = arg1[op_index]; + // TODO: set classname to variable name + if ((object[name] != null) && typeof object[name] === "object") { + obj = object[name]; + src = stack[stack_index]; + for (key in src) { + value = src[key]; + obj[key] = value; + } + } else { + object[name] = stack[stack_index]; + } + op_index++; + break; + case 28: // OPCODE_CREATE_CLASS + res = {}; + parent = stack[stack_index]; + if (parent) { + res.class = parent; + } else if (arg1[op_index]) { + res.class = arg1[op_index]; + } + stack[stack_index] = res; + op_index++; + break; + case 29: // OPCODE_NEW_CALL + c = stack[stack_index]; + args = arg1[op_index]; + if (typeof c === "function") { + a = []; + for (i = j = 0, ref = args - 1; j <= ref; i = j += 1) { + a.push(stack[stack_index - args + i]); + } + stack_index -= args; + // NEW CALL is followed by a POP (to get rid of constructor return value) + stack[stack_index - 1] = new c(...a); + op_index++; + } else { + this.resolveParentClass(c, global); + res = { + class: c + }; + con = c.constructor; + while (!con && (c.class != null)) { + c = c.class; + con = c.constructor; + } + if ((con != null) && con instanceof Routine) { + stack[stack_index - args - 1] = res; + stack_index--; + cs = call_stack[call_stack_index] || (call_stack[call_stack_index] = {}); + call_stack_index++; + cs.routine = routine; + cs.object = object; + cs.super = call_super; + cs.supername = call_supername; + cs.op_index = op_index + 1; + locals_offset += routine.locals_size; + routine = con; + opcodes = con.opcodes; + arg1 = con.arg1; + op_index = 0; + length = opcodes.length; + object = res; + call_super = c; + call_supername = "constructor"; + if (routine.uses_arguments) { + argv = stack.slice(stack_index - args + 1, stack_index + 1); + } + if (args < con.num_args) { + for (i = k = ref1 = args + 1, ref2 = con.num_args; k <= ref2; i = k += 1) { + stack[++stack_index] = 0; + } + } else if (args > con.num_args) { + stack_index -= args - con.num_args; + } + stack[++stack_index] = args; + if (routine.uses_arguments) { + stack[++stack_index] = argv; + } + } else { + stack_index -= args; + stack[stack_index - 1] = res; + op_index++; + } + } + break; + case 30: // OPCODE_ADD + b = stack[stack_index--]; + a = stack[stack_index]; + if (typeof a === "number") { + a += b; + stack[stack_index] = isFinite(a) || typeof b === "string" ? a : 0; + } else { + stack[stack_index] = this.add(context, a, b, arg1[op_index]); + } + op_index++; + break; + case 31: // OPCODE_SUB + b = stack[stack_index--]; + a = stack[stack_index]; + if (typeof a === "number") { + a -= b; + stack[stack_index] = isFinite(a) ? a : 0; + } else { + stack[stack_index] = this.sub(context, a, b, arg1[op_index]); + } + op_index++; + break; + case 32: // OPCODE_MUL + b = stack[stack_index--]; + a = stack[stack_index]; + if (typeof a === "number") { + a *= b; + stack[stack_index] = isFinite(a) ? a : 0; + } else { + stack[stack_index] = this.mul(context, a, b); + } + op_index++; + break; + case 33: // OPCODE_DIV + b = stack[stack_index--]; + a = stack[stack_index]; + if (typeof a === "number") { + a /= b; + stack[stack_index] = isFinite(a) ? a : 0; + } else { + stack[stack_index] = this.div(context, a, b); + } + op_index++; + break; + case 34: // OPCODE_MODULO + b = stack[stack_index--]; + a = stack[stack_index]; + if (typeof a === "number" && typeof b === "number") { + a %= b; + stack[stack_index] = isFinite(a) ? a : 0; + } else { + stack[stack_index] = this.modulo(context, a, b); + } + op_index++; + break; + case 35: // OPCODE_BINARY_AND + b = stack[stack_index--]; + a = stack[stack_index]; + if (typeof a === "number") { + a &= b; + stack[stack_index] = isFinite(a) ? a : 0; + } else { + stack[stack_index] = this.band(context, a, b); + } + op_index++; + break; + case 36: // OPCODE_BINARY_OR + b = stack[stack_index--]; + a = stack[stack_index]; + if (typeof a === "number") { + a |= b; + stack[stack_index] = isFinite(a) ? a : 0; + } else { + stack[stack_index] = this.bor(context, a, b); + } + op_index++; + break; + case 37: // OPCODE_SHIFT_LEFT + v = stack[stack_index - 1] << stack[stack_index]; + stack[--stack_index] = isFinite(v) ? v : 0; + op_index++; + break; + case 38: // OPCODE_SHIFT_RIGHT + v = stack[stack_index - 1] >> stack[stack_index]; + stack[--stack_index] = isFinite(v) ? v : 0; + op_index++; + break; + case 39: // OPCODE_NEGATE + a = stack[stack_index]; + if (typeof a === "number") { + stack[stack_index] = -a; + } else { + stack[stack_index] = this.negate(context, a); + } + op_index++; + break; + case 50: // OPCODE_NOT + stack[stack_index] = stack[stack_index] ? 0 : 1; + op_index++; + break; + case 68: // OPCODE_LOAD_PROPERTY_ATOP + obj = stack[stack_index - 1]; + name = stack[stack_index]; + v = obj[name]; + while ((v == null) && (obj.class != null)) { + obj = obj.class; + v = obj[name]; + } + if (v == null) { + v = 0; + if (!routine.ref[op_index].nowarning) { + routine.ref[op_index].nowarning = true; + if (!Array.isArray(obj)) { + token = routine.ref[op_index].token; + id = token.tokenizer.filename + "-" + token.line + "-" + token.column; + context.warnings.using_undefined_variable[id] = { + file: token.tokenizer.filename, + line: token.line, + column: token.column, + expression: name + }; + } + } + } + stack[++stack_index] = v; + op_index++; + break; + case 40: // OPCODE_EQ + stack[stack_index - 1] = stack[stack_index] === stack[stack_index - 1] ? 1 : 0; + stack_index--; + op_index++; + break; + case 41: // OPCODE_NEQ + stack[stack_index - 1] = stack[stack_index] !== stack[stack_index - 1] ? 1 : 0; + stack_index--; + op_index++; + break; + case 42: // OPCODE_LT + stack[stack_index - 1] = stack[stack_index - 1] < stack[stack_index] ? 1 : 0; + stack_index--; + op_index++; + break; + case 43: // OPCODE_GT + stack[stack_index - 1] = stack[stack_index - 1] > stack[stack_index] ? 1 : 0; + stack_index--; + op_index++; + break; + case 44: // OPCODE_LTE + stack[stack_index - 1] = stack[stack_index - 1] <= stack[stack_index] ? 1 : 0; + stack_index--; + op_index++; + break; + case 45: // OPCODE_GTE + stack[stack_index - 1] = stack[stack_index - 1] >= stack[stack_index] ? 1 : 0; + stack_index--; + op_index++; + break; + case 95: // FORLOOP_INIT + // fix loop_by if not set + iter = arg1[op_index][0]; + loop_to = locals[locals_offset + iter + 1] = stack[stack_index - 1]; + loop_by = stack[stack_index]; + iterator = locals[locals_offset + iter]; + stack[--stack_index] = 0; // unload 2 values and load default value + if (loop_by === 0) { + locals[locals_offset + iter + 2] = loop_to > iterator ? 1 : -1; + op_index++; + } else { + locals[locals_offset + iter + 2] = loop_by; + if ((loop_by > 0 && iterator > loop_to) || (loop_by < 0 && iterator < loop_to)) { + op_index = arg1[op_index][1]; + } else { + op_index++; + } + } + break; + case 96: // FORLOOP_CONTROL + iter = arg1[op_index][0]; + loop_by = locals[locals_offset + iter + 2]; + loop_to = locals[locals_offset + iter + 1]; + iterator = locals[locals_offset + iter]; + iterator += loop_by; + if ((loop_by > 0 && iterator > loop_to) || (loop_by < 0 && iterator < loop_to)) { + op_index++; + } else { + locals[locals_offset + iter] = iterator; + op_index = arg1[op_index][1]; + } + if (op_count++ > 100) { + op_count = 0; + if (Date.now() > this.time_limit) { + restore_op_index = op_index; + op_index = length; // stop the loop without adding a condition statement + } + } + break; + case 97: // FORIN_INIT + v = stack[stack_index]; + stack[stack_index] = 0; // default result + iterator = arg1[op_index][0]; + if (typeof v === "object") { + if (Array.isArray(v)) { + locals[locals_offset + iterator + 1] = v; + } else { + v = locals[locals_offset + iterator + 1] = Object.keys(v); + } + } else if (typeof v === "string") { + v = locals[locals_offset + iterator + 1] = v.split(""); + } else { + v = locals[locals_offset + iterator + 1] = []; + } + if (v.length === 0) { + op_index = arg1[op_index][1]; + } else { + value = v[0]; + // value could be undefined if the array is sparse + locals[locals_offset + arg1[op_index][0]] = value != null ? value : 0; + locals[locals_offset + iterator + 2] = 0; + op_index++; + } + break; + case 98: // FORIN_CONTROL + iterator = arg1[op_index][0]; + index = locals[locals_offset + iterator + 2] += 1; + v = locals[locals_offset + iterator + 1]; + if (index < v.length) { + value = v[index]; + // value could be undefined if the array is sparse + locals[locals_offset + iterator] = value != null ? value : 0; + op_index = arg1[op_index][1]; + } else { + op_index++; + } + if (op_count++ > 100) { + op_count = 0; + if (Date.now() > this.time_limit) { + restore_op_index = op_index; + op_index = length; // stop the loop without adding a condition statement + } + } + break; + case 80: // OPCODE_JUMP + op_index = arg1[op_index]; + if (op_count++ > 100) { + op_count = 0; + if (Date.now() > this.time_limit) { + restore_op_index = op_index; + op_index = length; // stop the loop without adding a condition statement + } + } + break; + case 81: // OPCODE_JUMPY + if (stack[stack_index--]) { + op_index = arg1[op_index]; + } else { + op_index++; + } + break; + case 82: // OPCODE_JUMPN + if (!stack[stack_index--]) { + op_index = arg1[op_index]; + } else { + op_index++; + } + break; + case 83: // OPCODE_JUMPY_NOPOP + if (stack[stack_index]) { + op_index = arg1[op_index]; + } else { + op_index++; + } + break; + case 84: // OPCODE_JUMPN_NOPOP + if (!stack[stack_index]) { + op_index = arg1[op_index]; + } else { + op_index++; + } + break; + case 89: // OPCODE_LOAD_ROUTINE + r = arg1[op_index++]; + rc = r.clone(); + ref3 = r.import_refs; + for (l = 0, len = ref3.length; l < len; l++) { + ir = ref3[l]; + if (ir === r.import_self) { + rc.import_values.push(rc); + } else { + rc.import_values.push(locals[locals_offset + ir]); + } + } + rc.object = object; + stack[++stack_index] = rc; + break; + case 90: // OPCODE_FUNCTION_CALL + args = arg1[op_index]; + f = stack[stack_index]; + if (f instanceof Routine) { + stack_index--; + cs = call_stack[call_stack_index] || (call_stack[call_stack_index] = {}); + call_stack_index++; + cs.routine = routine; + cs.object = object; + cs.super = call_super; + cs.supername = call_supername; + cs.op_index = op_index + 1; + locals_offset += routine.locals_size; + routine = f; + opcodes = f.opcodes; + arg1 = f.arg1; + op_index = 0; + length = opcodes.length; + object = routine.object != null ? routine.object : global; + call_super = global; + call_supername = ""; + if (routine.uses_arguments) { + argv = stack.slice(stack_index - args + 1, stack_index + 1); + } + if (args < f.num_args) { + for (i = m = ref4 = args + 1, ref5 = f.num_args; m <= ref5; i = m += 1) { + stack[++stack_index] = 0; + } + } else if (args > f.num_args) { + stack_index -= args - f.num_args; + } + stack[++stack_index] = args; + if (routine.uses_arguments) { + stack[++stack_index] = argv; + } + } else if (typeof f === "function") { + switch (args) { + case 0: + try { + v = f(); + } catch (error) { + err = error; + console.error(err); + v = 0; + } + stack[stack_index] = v != null ? v : 0; + break; + case 1: + try { + v = f(this.argToNative(stack[stack_index - 1], context)); + } catch (error) { + err = error; + console.error(err); + v = 0; + } + stack[stack_index - 1] = v != null ? v : 0; + stack_index -= 1; + break; + default: + argv = []; + stack_index -= args; + for (i = n = 0, ref6 = args - 1; n <= ref6; i = n += 1) { + argv[i] = this.argToNative(stack[stack_index + i], context); + } + try { + v = f.apply(null, argv); + } catch (error) { + err = error; + console.error(err); + v = 0; + } + stack[stack_index] = v != null ? v : 0; + } + op_index++; + } else { + stack_index -= args; + stack[stack_index] = f != null ? f : 0; + token = routine.ref[op_index].token; + id = token.tokenizer.filename + "-" + token.line + "-" + token.column; + if (!context.warnings.invoking_non_function[id]) { + fc = routine.ref[op_index]; + i1 = fc.expression.token.start; + i2 = fc.token.start + fc.token.length; + context.warnings.invoking_non_function[id] = { + file: token.tokenizer.filename, + line: token.line, + column: token.column, + expression: fc.token.tokenizer.input.substring(i1, i2) + }; + } + op_index++; + } + break; + case 91: // OPCODE_FUNCTION_APPLY_VARIABLE + name = stack[stack_index]; + sup = obj = object; + f = obj[name]; + if (f == null) { + while ((f == null) && (sup.class != null)) { + sup = sup.class; + f = sup[name]; + } + if (f == null) { + f = global.Object[name]; + } + if (f == null) { + f = global[name]; + sup = global; + obj = global; + } + } + args = arg1[op_index]; + if (f instanceof Routine) { + stack_index -= 1; + cs = call_stack[call_stack_index] || (call_stack[call_stack_index] = {}); + call_stack_index++; + cs.routine = routine; + cs.object = object; + cs.super = call_super; + cs.supername = call_supername; + cs.op_index = op_index + 1; + locals_offset += routine.locals_size; + routine = f; + opcodes = f.opcodes; + arg1 = f.arg1; + op_index = 0; + length = opcodes.length; + object = obj; + call_super = sup; + call_supername = name; + if (routine.uses_arguments) { + argv = stack.slice(stack_index - args + 1, stack_index + 1); + } + if (args < f.num_args) { + for (i = p = ref7 = args + 1, ref8 = f.num_args; p <= ref8; i = p += 1) { + stack[++stack_index] = 0; + } + } else if (args > f.num_args) { + stack_index -= args - f.num_args; + } + stack[++stack_index] = args; + if (routine.uses_arguments) { + stack[++stack_index] = argv; + } + } else if (typeof f === "function") { + switch (args) { + case 0: + try { + v = f.call(obj); + } catch (error) { + err = error; + console.error(err); + v = 0; + } + stack[stack_index] = v != null ? v : 0; + break; + case 1: + try { + v = f.call(obj, this.argToNative(stack[stack_index - 1], context)); + } catch (error) { + err = error; + console.error(err); + v = 0; + } + stack[--stack_index] = v != null ? v : 0; + break; + default: + argv = []; + stack_index -= args; + for (i = q = 0, ref9 = args - 1; q <= ref9; i = q += 1) { + argv[i] = this.argToNative(stack[stack_index + i], context); + } + try { + v = f.apply(obj, argv); + } catch (error) { + err = error; + console.error(err); + v = 0; + } + stack[stack_index] = v != null ? v : 0; + } + op_index++; + } else { + stack_index -= args; + stack[stack_index] = f != null ? f : 0; + token = routine.ref[op_index].token; + id = token.tokenizer.filename + "-" + token.line + "-" + token.column; + if (!context.warnings.invoking_non_function[id]) { + fc = routine.ref[op_index]; + i1 = fc.expression.token.start; + i2 = fc.token.start + fc.token.length; + context.warnings.invoking_non_function[id] = { + file: token.tokenizer.filename, + line: token.line, + column: token.column, + expression: fc.token.tokenizer.input.substring(i1, i2) + }; + } + op_index++; + } + break; + case 92: // OPCODE_FUNCTION_APPLY_PROPERTY + obj = stack[stack_index - 1]; + sup = obj; + name = stack[stack_index]; + f = obj[name]; + while ((f == null) && (sup.class != null)) { + sup = sup.class; + f = sup[name]; + } + args = arg1[op_index]; + if (f == null) { + if (obj instanceof Routine) { + f = global.Function[name]; + } else if (typeof obj === "string") { + f = global.String[name]; + } else if (typeof obj === "number") { + f = global.Number[name]; + } else if (Array.isArray(obj)) { + f = global.List[name]; + } else if (typeof obj === "object") { + f = global.Object[name]; + } + } + if (f instanceof Routine) { + stack_index -= 2; + cs = call_stack[call_stack_index] || (call_stack[call_stack_index] = {}); + call_stack_index++; + cs.object = object; + cs.super = call_super; + cs.supername = call_supername; + cs.routine = routine; + cs.op_index = op_index + 1; + locals_offset += routine.locals_size; + routine = f; + opcodes = f.opcodes; + arg1 = f.arg1; + op_index = 0; + length = opcodes.length; + object = obj; + call_super = sup; + call_supername = name; + if (routine.uses_arguments) { + argv = stack.slice(stack_index - args + 1, stack_index + 1); + } + if (args < f.num_args) { + for (i = s = ref10 = args + 1, ref11 = f.num_args; s <= ref11; i = s += 1) { + stack[++stack_index] = 0; + } + } else if (args > f.num_args) { + stack_index -= args - f.num_args; + } + stack[++stack_index] = args; + if (routine.uses_arguments) { + stack[++stack_index] = argv; + } + } else if (typeof f === "function") { + switch (args) { + case 0: + try { + v = f.call(obj); + } catch (error) { + err = error; + console.error(err); + v = 0; + } + stack[--stack_index] = v != null ? v : 0; + break; + case 1: + try { + v = f.call(obj, this.argToNative(stack[stack_index - 2], context)); + } catch (error) { + err = error; + console.error(err); + v = 0; + } + stack[stack_index - 2] = v != null ? v : 0; + stack_index -= 2; + break; + default: + argv = []; + stack_index -= args + 1; + for (i = u = 0, ref12 = args - 1; u <= ref12; i = u += 1) { + argv[i] = this.argToNative(stack[stack_index + i], context); + } + try { + v = f.apply(obj, argv); + } catch (error) { + err = error; + console.error(err); + v = 0; + } + stack[stack_index] = v != null ? v : 0; + } + op_index++; + } else { + stack_index -= args + 1; + stack[stack_index] = f != null ? f : 0; + token = routine.ref[op_index].token; + id = token.tokenizer.filename + "-" + token.line + "-" + token.column; + if (!context.warnings.invoking_non_function[id]) { + fc = routine.ref[op_index]; + i1 = fc.expression.token.start; + i2 = fc.token.start + fc.token.length; + context.warnings.invoking_non_function[id] = { + file: token.tokenizer.filename, + line: token.line, + column: token.column, + expression: fc.token.tokenizer.input.substring(i1, i2) + }; + } + op_index++; + } + break; + case 93: // OPCODE_SUPER_CALL + if ((call_super != null) && (call_supername != null)) { + sup = call_super; + f = null; + while ((f == null) && (sup.class != null)) { + sup = sup.class; + f = sup[call_supername]; + } + if ((f != null) && f instanceof Routine) { + args = arg1[op_index]; + cs = call_stack[call_stack_index] || (call_stack[call_stack_index] = {}); + call_stack_index++; + cs.object = object; + cs.super = call_super; + cs.supername = call_supername; + cs.routine = routine; + cs.op_index = op_index + 1; + locals_offset += routine.locals_size; + routine = f; + opcodes = f.opcodes; + arg1 = f.arg1; + op_index = 0; + length = opcodes.length; + call_super = sup; + if (routine.uses_arguments) { + argv = stack.slice(stack_index - args + 1, stack_index + 1); + } + if (args < f.num_args) { + for (i = w = ref13 = args + 1, ref14 = f.num_args; w <= ref14; i = w += 1) { + stack[++stack_index] = 0; + } + } else if (args > f.num_args) { + stack_index -= args - f.num_args; + } + stack[++stack_index] = args; + if (routine.uses_arguments) { + stack[++stack_index] = argv; + } + } else { + args = arg1[op_index]; + stack_index -= args; + stack[++stack_index] = 0; + op_index++; + } + } else { + args = arg1[op_index]; + stack_index -= args; + stack[++stack_index] = 0; + op_index++; + } + break; + case 94: // OPCODE_RETURN + local_index -= arg1[op_index]; + if (call_stack_index <= 0) { + op_index = length; + } else { + cs = call_stack[--call_stack_index]; + object = cs.object; + call_super = cs.super; + call_supername = cs.supername; + routine = cs.routine; + op_index = cs.op_index; + opcodes = routine.opcodes; + arg1 = routine.arg1; + locals_offset -= routine.locals_size; + length = opcodes.length; + } + break; + case 100: // OPCODE_UNARY_FUNC + v = arg1[op_index](stack[stack_index]); + stack[stack_index] = isFinite(v) ? v : 0; + op_index++; + break; + case 101: // OPCODE_BINARY_FUNC + v = arg1[op_index](stack[stack_index - 1], stack[stack_index]); + stack[--stack_index] = isFinite(v) ? v : 0; + op_index++; + break; + case 110: // OPCODE_AFTER + t = this.runner.createThread(stack[stack_index - 1], stack[stack_index], false); + stack[--stack_index] = t; + op_index += 1; + break; + // add thread to the runner thread list + case 111: // OPCODE_EVERY + t = this.runner.createThread(stack[stack_index - 1], stack[stack_index], true); + stack[--stack_index] = t; + op_index += 1; + break; + // add thread to the runner thread list + case 112: // OPCODE_DO + t = this.runner.createThread(stack[stack_index], 0, false); + stack[stack_index] = t; + op_index += 1; + break; + // add thread to the runner thread list + case 113: // OPCODE_SLEEP + sleep_time = isFinite(stack[stack_index]) ? stack[stack_index] : 0; + this.runner.sleep(sleep_time); + op_index += 1; + restore_op_index = op_index; + op_index = length; // stop the thread + break; + case 200: // COMPILED + stack_index = arg1[op_index](stack, stack_index, locals, locals_offset, object, global); + op_index++; + break; + default: + throw `Unsupported operation: ${opcodes[op_index]}`; + } + } + if (restore_op_index >= 0) { + this.op_index = restore_op_index; + this.routine = routine; + this.stack_index = stack_index; + this.local_index = local_index; + this.object = object; + this.call_stack_index = call_stack_index; + this.call_super = call_super; + this.call_supername = call_supername; + this.locals_offset = locals_offset; + this.done = false; + } else { + this.op_index = 0; + this.done = true; + if (this.routine.callback != null) { + this.routine.callback(stack[stack_index]); + this.routine.callback = null; + } + } + // console.info """stack_index: #{stack_index}""" + // console.info stack + if (this.log) { + console.info("total operations: " + op_count); + console.info(`stack_index: ${stack_index}`); + console.info(`result: ${stack[stack_index]}`); + } + return stack[stack_index]; + } + +}; diff --git a/WebGames-master/WebGames-master/games/cap/program.js b/WebGames-master/WebGames-master/games/cap/program.js new file mode 100644 index 00000000..784c1d66 --- /dev/null +++ b/WebGames-master/WebGames-master/games/cap/program.js @@ -0,0 +1,371 @@ +this.Program = class Program { + constructor() { + this.statements = []; + } + + add(statement) { + return this.statements.push(statement); + } + + isAssignment() { + return this.statements.length > 0 && this.statements[this.statements.length - 1] instanceof Program.Assignment; + } + +}; + +this.Program.Expression = class Expression { + constructor() {} + +}; + +this.Program.Assignment = class Assignment { + constructor(token1, field1, expression1, local) { + this.token = token1; + this.field = field1; + this.expression = expression1; + this.local = local; + } + +}; + +this.Program.SelfAssignment = class SelfAssignment { + constructor(token1, field1, operation, expression1) { + this.token = token1; + this.field = field1; + this.operation = operation; + this.expression = expression1; + } + +}; + +this.Program.Value = (function() { + class Value { + constructor(token1, type, value1) { + this.token = token1; + this.type = type; + this.value = value1; + } + + }; + + Value.TYPE_NUMBER = 1; + + Value.TYPE_STRING = 2; + + Value.TYPE_ARRAY = 3; + + Value.TYPE_OBJECT = 4; + + Value.TYPE_FUNCTION = 5; + + Value.TYPE_CLASS = 6; + + return Value; + +}).call(this); + +this.Program.CreateFieldAccess = function(token, expression, field) { + if (expression instanceof Program.Field) { + expression.appendField(field); + return expression; + } else { + return new Program.Field(token, expression, [field]); + } +}; + +this.Program.Variable = class Variable { + constructor(token1, identifier) { + this.token = token1; + this.identifier = identifier; + } + +}; + +this.Program.Field = class Field { + constructor(token1, expression1, chain) { + this.token = token1; + this.expression = expression1; + this.chain = chain; + this.token = this.expression.token; + } + + appendField(field) { + return this.chain.push(field); + } + +}; + +this.Program.BuildOperations = function(ops, terms) { + var i, o, o1, o2, prec, t1, t2; + while (ops.length > 1) { + i = 0; + prec = 0; + while (i < ops.length - 1) { + o1 = ops[i]; + o2 = ops[i + 1]; + if (Program.Precedence[o2.operation] <= Program.Precedence[o1.operation]) { + break; + } + i++; + } + t1 = terms[i]; + t2 = terms[i + 1]; + o = new Program.Operation(ops[i].token, ops[i].operation, t1, t2); + terms.splice(i, 2, o); + ops.splice(i, 1); + } + return new Program.Operation(ops[0].token, ops[0].operation, terms[0], terms[1]); +}; + +this.Program.Operation = class Operation { + constructor(token1, operation, term1, term2) { + this.token = token1; + this.operation = operation; + this.term1 = term1; + this.term2 = term2; + } + +}; + +this.Program.Negate = class Negate { + constructor(token1, expression1) { + this.token = token1; + this.expression = expression1; + } + +}; + +this.Program.Not = class Not { + constructor(token1, expression1) { + this.token = token1; + this.expression = expression1; + } + +}; + +this.Program.Braced = class Braced { + constructor(token1, expression1) { + this.token = token1; + this.expression = expression1; + } + +}; + +this.Program.Return = class Return { + constructor(token1, expression1) { + this.token = token1; + this.expression = expression1; + } + +}; + +this.Program.Condition = class Condition { + constructor(token1, chain) { + this.token = token1; + this.chain = chain; + } + +}; + +this.Program.For = class For { + constructor(token1, iterator, range_from, range_to, range_by, sequence) { + this.token = token1; + this.iterator = iterator; + this.range_from = range_from; + this.range_to = range_to; + this.range_by = range_by; + this.sequence = sequence; + } + +}; + +this.Program.ForIn = class ForIn { + constructor(token1, iterator, list, sequence) { + this.token = token1; + this.iterator = iterator; + this.list = list; + this.sequence = sequence; + } + +}; + +this.Program.toString = function(value, nesting = 0) { + var i, j, k, key, len, pref, ref, s, v; + if (value instanceof Routine) { + if (nesting === 0) { + return value.source || "[function]"; + } else { + return "[function]"; + } + } else if (typeof value === "function") { + return "[native function]"; + } else if (typeof value === "string") { + return `"${value}"`; + } else if (Array.isArray(value)) { + if (nesting >= 1) { + return "[list]"; + } + s = "["; + for (i = j = 0, len = value.length; j < len; i = ++j) { + v = value[i]; + s += Program.toString(v, nesting + 1) + (i < value.length - 1 ? "," : ""); + } + return s + "]"; + } else if (typeof value === "object") { + if (nesting >= 1) { + return "[object]"; + } + s = "object\n"; + pref = ""; + for (i = k = 1, ref = nesting; k <= ref; i = k += 1) { + pref += " "; + } + for (key in value) { + v = value[key]; + s += pref + ` ${key} = ${Program.toString(v, nesting + 1)}\n`; + } + return s + pref + "end"; + } + return value || 0; +}; + +this.Program.While = class While { + constructor(token1, condition, sequence) { + this.token = token1; + this.condition = condition; + this.sequence = sequence; + } + +}; + +this.Program.Break = class Break { + constructor(token1) { + this.token = token1; + this.nopop = true; + } + +}; + +this.Program.Continue = class Continue { + constructor(token1) { + this.token = token1; + this.nopop = true; + } + +}; + +this.Program.Function = class Function { + constructor(token1, args, sequence, end) { + this.token = token1; + this.args = args; + this.sequence = sequence; + this.source = "function" + this.token.tokenizer.input.substring(this.token.index, end.index + 2); + } + +}; + +this.Program.FunctionCall = class FunctionCall { + constructor(token1, expression1, args) { + this.token = token1; + this.expression = expression1; + this.args = args; + } + +}; + +this.Program.CreateObject = class CreateObject { + constructor(token1, fields) { + this.token = token1; + this.fields = fields; + } + +}; + +this.Program.CreateClass = class CreateClass { + constructor(token1, ext, fields) { + this.token = token1; + this.ext = ext; + this.fields = fields; + } + +}; + +this.Program.NewCall = class NewCall { + constructor(token1, expression1) { + this.token = token1; + this.expression = expression1; + if (!(this.expression instanceof Program.FunctionCall)) { + this.expression = new Program.FunctionCall(this.token, this.expression, []); + } + } + +}; + +this.Program.After = class After { + constructor(token1, delay, sequence, end, multiplier) { + this.token = token1; + this.delay = delay; + this.sequence = sequence; + this.multiplier = multiplier; + this.source = "after " + this.token.tokenizer.input.substring(this.token.index, end.index + 2); + } + +}; + +this.Program.Every = class Every { + constructor(token1, delay, sequence, end, multiplier) { + this.token = token1; + this.delay = delay; + this.sequence = sequence; + this.multiplier = multiplier; + this.source = "every " + this.token.tokenizer.input.substring(this.token.index, end.index + 2); + } + +}; + +this.Program.Do = class Do { + constructor(token1, sequence, end) { + this.token = token1; + this.sequence = sequence; + this.source = "do " + this.token.tokenizer.input.substring(this.token.index, end.index + 2); + } + +}; + +this.Program.Sleep = class Sleep { + constructor(token1, delay, multiplier) { + this.token = token1; + this.delay = delay; + this.multiplier = multiplier; + } + +}; + +this.Program.Delete = class Delete { + constructor(token1, field1) { + this.token = token1; + this.field = field1; + } + +}; + +this.Program.Precedence = { + "^": 21, + "/": 20, + "*": 19, + "%": 18, + "+": 17, + "-": 17, + "<": 16, + "<=": 15, + ">": 14, + ">=": 13, + "==": 12, + "!=": 11, + "<<": 10, + ">>": 9, + "&": 8, + "|": 7, + "and": 6, + "or": 5 +}; diff --git a/WebGames-master/WebGames-master/games/cap/routine.js b/WebGames-master/WebGames-master/games/cap/routine.js new file mode 100644 index 00000000..9d0b5540 --- /dev/null +++ b/WebGames-master/WebGames-master/games/cap/routine.js @@ -0,0 +1,530 @@ +this.Routine = class Routine { + constructor(num_args) { + this.num_args = num_args; + this.ops = []; + this.opcodes = []; + this.arg1 = []; + this.ref = []; + this.label_count = 0; + this.labels = {}; + this.transpile = false; + this.import_refs = []; + this.import_values = []; + this.import_self = -1; + } + + clone() { + var r; + r = new Routine(this.num_args); + r.opcodes = this.opcodes; + r.arg1 = this.arg1; + r.ref = this.ref; + r.locals_size = this.locals_size; + r.uses_arguments = this.uses_arguments; + return r; + } + + createLabel(str = "label") { + var name; + return name = ":" + str + "_" + this.label_count++; + } + + setLabel(name) { + return this.labels[name] = this.opcodes.length; + } + + optimize() { + if (this.transpile) { + new Transpiler().transpile(this); + } + } + + removeable(index) { + var label, ref1, value; + ref1 = this.labels; + for (label in ref1) { + value = ref1[label]; + if (value === index) { + return false; + } + } + return true; + } + + remove(index) { + var label, ref1, value; + ref1 = this.labels; + for (label in ref1) { + value = ref1[label]; + if (value === index) { + return false; + } else if (value > index) { + this.labels[label] -= 1; + } + } + this.opcodes.splice(index, 1); + this.arg1.splice(index, 1); + this.ref.splice(index, 1); + return true; + } + + resolveLabels() { + var i, j, ref1, ref2, ref3, results; + results = []; + for (i = j = 0, ref1 = this.opcodes.length - 1; (0 <= ref1 ? j <= ref1 : j >= ref1); i = 0 <= ref1 ? ++j : --j) { + if ((ref2 = this.opcodes[i]) === OPCODES.JUMP || ref2 === OPCODES.JUMPY || ref2 === OPCODES.JUMPN || ref2 === OPCODES.JUMPY_NOPOP || ref2 === OPCODES.JUMPN_NOPOP) { + if (this.labels[this.arg1[i]]) { + results.push(this.arg1[i] = this.labels[this.arg1[i]]); + } else { + results.push(void 0); + } + } else if ((ref3 = this.opcodes[i]) === OPCODES.FORLOOP_CONTROL || ref3 === OPCODES.FORLOOP_INIT || ref3 === OPCODES.FORIN_CONTROL || ref3 === OPCODES.FORIN_INIT) { + if (this.labels[this.arg1[i][1]]) { + results.push(this.arg1[i][1] = this.labels[this.arg1[i][1]]); + } else { + results.push(void 0); + } + } else { + results.push(void 0); + } + } + return results; + } + + OP(code, ref, v1 = 0) { + this.opcodes.push(code); + this.arg1.push(v1); + return this.ref.push(ref); + } + + OP_INSERT(code, ref, v1 = 0, index) { + var label, ref1, value; + this.opcodes.splice(index, 0, code); + this.arg1.splice(index, 0, v1); + this.ref.splice(index, 0, ref); + ref1 = this.labels; + for (label in ref1) { + value = ref1[label]; + if (value >= index) { + this.labels[label] += 1; + } + } + } + + TYPE(ref) { + return this.OP(OPCODES.TYPE, ref); + } + + VARIABLE_TYPE(variable, ref) { + return this.OP(OPCODES.VARIABLE_TYPE, ref, variable); + } + + PROPERTY_TYPE(ref) { + return this.OP(OPCODES.PROPERTY_TYPE, ref); + } + + LOAD_THIS(ref) { + return this.OP(OPCODES.LOAD_THIS, ref); + } + + LOAD_GLOBAL(ref) { + return this.OP(OPCODES.LOAD_GLOBAL, ref); + } + + LOAD_VALUE(value, ref) { + return this.OP(OPCODES.LOAD_VALUE, ref, value); + } + + LOAD_LOCAL(index, ref) { + return this.OP(OPCODES.LOAD_LOCAL, ref, index); + } + + LOAD_VARIABLE(variable, ref) { + return this.OP(OPCODES.LOAD_VARIABLE, ref, variable); + } + + LOAD_LOCAL_OBJECT(index, ref) { + return this.OP(OPCODES.LOAD_LOCAL_OBJECT, ref, index); + } + + LOAD_VARIABLE_OBJECT(variable, ref) { + return this.OP(OPCODES.LOAD_VARIABLE_OBJECT, ref, variable); + } + + POP(ref) { + return this.OP(OPCODES.POP, ref); + } + + LOAD_PROPERTY(ref) { + return this.OP(OPCODES.LOAD_PROPERTY, ref); + } + + LOAD_PROPERTY_OBJECT(ref) { + return this.OP(OPCODES.LOAD_PROPERTY_OBJECT, ref); + } + + CREATE_OBJECT(ref) { + return this.OP(OPCODES.CREATE_OBJECT, ref); + } + + MAKE_OBJECT(ref) { + return this.OP(OPCODES.MAKE_OBJECT, ref); + } + + CREATE_ARRAY(ref) { + return this.OP(OPCODES.CREATE_ARRAY, ref); + } + + CREATE_CLASS(parent_var, ref) { + return this.OP(OPCODES.CREATE_CLASS, ref, parent_var); + } + + UPDATE_CLASS(variable, ref) { + return this.OP(OPCODES.UPDATE_CLASS, ref, variable); + } + + NEW_CALL(args, ref) { + return this.OP(OPCODES.NEW_CALL, ref, args); + } + + ADD(ref, self = 0) { + return this.OP(OPCODES.ADD, ref, self); + } + + SUB(ref, self = 0) { + return this.OP(OPCODES.SUB, ref, self); + } + + MUL(ref) { + return this.OP(OPCODES.MUL, ref); + } + + DIV(ref) { + return this.OP(OPCODES.DIV, ref); + } + + MODULO(ref) { + return this.OP(OPCODES.MODULO, ref); + } + + BINARY_AND(ref) { + return this.OP(OPCODES.BINARY_AND, ref); + } + + BINARY_OR(ref) { + return this.OP(OPCODES.BINARY_OR, ref); + } + + SHIFT_LEFT(ref) { + return this.OP(OPCODES.SHIFT_LEFT, ref); + } + + SHIFT_RIGHT(ref) { + return this.OP(OPCODES.SHIFT_RIGHT, ref); + } + + NEGATE(ref) { + return this.OP(OPCODES.NEGATE, ref); + } + + LOAD_PROPERTY_ATOP(ref) { + return this.OP(OPCODES.LOAD_PROPERTY_ATOP, ref); + } + + EQ(ref) { + return this.OP(OPCODES.EQ, ref); + } + + NEQ(ref) { + return this.OP(OPCODES.NEQ, ref); + } + + LT(ref) { + return this.OP(OPCODES.LT, ref); + } + + GT(ref) { + return this.OP(OPCODES.GT, ref); + } + + LTE(ref) { + return this.OP(OPCODES.LTE, ref); + } + + GTE(ref) { + return this.OP(OPCODES.GTE, ref); + } + + NOT(ref) { + return this.OP(OPCODES.NOT, ref); + } + + FORLOOP_INIT(iterator, ref) { + return this.OP(OPCODES.FORLOOP_INIT, ref, iterator); + } + + FORLOOP_CONTROL(args, ref) { + return this.OP(OPCODES.FORLOOP_CONTROL, ref, args); + } + + FORIN_INIT(args, ref) { + return this.OP(OPCODES.FORIN_INIT, ref, args); + } + + FORIN_CONTROL(args, ref) { + return this.OP(OPCODES.FORIN_CONTROL, ref, args); + } + + JUMP(index, ref) { + return this.OP(OPCODES.JUMP, ref, index); + } + + JUMPY(index, ref) { + return this.OP(OPCODES.JUMPY, ref, index); + } + + JUMPN(index, ref) { + return this.OP(OPCODES.JUMPN, ref, index); + } + + JUMPY_NOPOP(index, ref) { + return this.OP(OPCODES.JUMPY_NOPOP, ref, index); + } + + JUMPN_NOPOP(index, ref) { + return this.OP(OPCODES.JUMPN_NOPOP, ref, index); + } + + STORE_LOCAL(index, ref) { + return this.OP(OPCODES.STORE_LOCAL, ref, index); + } + + STORE_VARIABLE(field, ref) { + return this.OP(OPCODES.STORE_VARIABLE, ref, field); + } + + CREATE_PROPERTY(ref) { + return this.OP(OPCODES.CREATE_PROPERTY, ref); + } + + STORE_PROPERTY(ref) { + return this.OP(OPCODES.STORE_PROPERTY, ref); + } + + LOAD_ROUTINE(value, ref) { + return this.OP(OPCODES.LOAD_ROUTINE, ref, value); + } + + FUNCTION_CALL(args, ref) { + return this.OP(OPCODES.FUNCTION_CALL, ref, args); + } + + FUNCTION_APPLY_VARIABLE(args, ref) { + return this.OP(OPCODES.FUNCTION_APPLY_VARIABLE, ref, args); + } + + FUNCTION_APPLY_PROPERTY(args, ref) { + return this.OP(OPCODES.FUNCTION_APPLY_PROPERTY, ref, args); + } + + SUPER_CALL(args, ref) { + return this.OP(OPCODES.SUPER_CALL, ref, args); + } + + RETURN(ref) { + return this.OP(OPCODES.RETURN, ref); + } + + AFTER(ref) { + return this.OP(OPCODES.AFTER, ref); + } + + EVERY(ref) { + return this.OP(OPCODES.EVERY, ref); + } + + DO(ref) { + return this.OP(OPCODES.DO, ref); + } + + SLEEP(ref) { + return this.OP(OPCODES.SLEEP, ref); + } + + DELETE(ref) { + return this.OP(OPCODES.DELETE, ref); + } + + UNARY_OP(f, ref) { + return this.OP(OPCODES.UNARY_OP, ref, f); + } + + BINARY_OP(f, ref) { + return this.OP(OPCODES.BINARY_OP, ref, f); + } + + toString() { + var i, j, len, op, ref1, s; + s = ""; + ref1 = this.opcodes; + for (i = j = 0, len = ref1.length; j < len; i = ++j) { + op = ref1[i]; + s += OPCODES[op]; + if (this.arg1[i] != null) { + //if typeof @arg1[i] != "function" + s += ` ${this.arg1[i]}`; + } + s += "\n"; + } + return s; + } + + exportArg(arg) { + if (arg == null) { + return 0; + } else if (arg instanceof Routine) { + return arg.export(); + } else if (typeof arg === "function") { + return arg.name; + } else { + return arg; + } + } + + export() { + var args, i, j, ref1, res; + args = []; + for (i = j = 0, ref1 = this.arg1.length - 1; j <= ref1; i = j += 1) { + args[i] = this.exportArg(this.arg1[i]); + } + res = { + num_args: this.num_args, + ops: this.opcodes, + args: args, + import_refs: this.import_refs, + import_values: this.import_values, + import_self: this.import_self, + locals_size: this.locals_size + }; + return res; + } + + import(src) { + var i, j, ref, ref1, token; + this.num_args = src.num_args; + this.opcodes = src.ops; + this.arg1 = src.args; + this.import_refs = src.import_refs; + this.import_values = src.import_values; + this.import_self = src.import_self; + this.locals_size = src.locals_size; + token = { + line: 0, + column: 0, + start: 0, + length: 0, + index: 0, + tokenizer: { + filename: "filename", + input: "" + } + }; + ref = { + expression: { + token: token + }, + token: token + }; + for (i = j = 0, ref1 = this.opcodes.length - 1; j <= ref1; i = j += 1) { + if (this.opcodes[i] === 100) { + this.arg1[i] = Compiler.predefined_unary_functions[this.arg1[i]]; + } else if (this.opcodes[i] === 101) { + this.arg1[i] = Compiler.predefined_binary_functions[this.arg1[i]]; + } else if (typeof this.arg1[i] === "object" && !Array.isArray(this.arg1[i])) { + this.arg1[i] = new Routine(0).import(this.arg1[i]); + } + this.ref[i] = ref; + } + return this; + } + +}; + +this.OPCODES_CLASS = class OPCODES_CLASS { + constructor() { + this.table = {}; + this.set("TYPE", 1); + this.set("VARIABLE_TYPE", 2); + this.set("PROPERTY_TYPE", 3); + this.set("LOAD_IMPORT", 4); + this.set("LOAD_THIS", 5); + this.set("LOAD_GLOBAL", 6); + this.set("LOAD_VALUE", 10); + this.set("LOAD_LOCAL", 11); + this.set("LOAD_VARIABLE", 12); + this.set("LOAD_LOCAL_OBJECT", 13); + this.set("LOAD_VARIABLE_OBJECT", 14); + this.set("POP", 15); + this.set("LOAD_PROPERTY", 16); + this.set("LOAD_PROPERTY_OBJECT", 17); + this.set("CREATE_OBJECT", 18); + this.set("MAKE_OBJECT", 19); + this.set("CREATE_ARRAY", 20); + this.set("STORE_LOCAL", 21); + this.set("STORE_VARIABLE", 23); + this.set("CREATE_PROPERTY", 24); + this.set("STORE_PROPERTY", 25); + this.set("DELETE", 26); + this.set("UPDATE_CLASS", 27); + this.set("CREATE_CLASS", 28); + this.set("NEW_CALL", 29); + this.set("ADD", 30); + this.set("SUB", 31); + this.set("MUL", 32); + this.set("DIV", 33); + this.set("MODULO", 34); + this.set("BINARY_AND", 35); + this.set("BINARY_OR", 36); + this.set("SHIFT_LEFT", 37); + this.set("SHIFT_RIGHT", 38); + this.set("NEGATE", 39); + this.set("EQ", 40); + this.set("NEQ", 41); + this.set("LT", 42); + this.set("GT", 43); + this.set("LTE", 44); + this.set("GTE", 45); + this.set("NOT", 50); + this.set("LOAD_PROPERTY_ATOP", 68); + this.set("JUMP", 80); + this.set("JUMPY", 81); + this.set("JUMPN", 82); + this.set("JUMPY_NOPOP", 83); + this.set("JUMPN_NOPOP", 84); + this.set("LOAD_ROUTINE", 89); + this.set("FUNCTION_CALL", 90); + this.set("FUNCTION_APPLY_VARIABLE", 91); + this.set("FUNCTION_APPLY_PROPERTY", 92); + this.set("SUPER_CALL", 93); + this.set("RETURN", 94); + this.set("FORLOOP_INIT", 95); + this.set("FORLOOP_CONTROL", 96); + this.set("FORIN_INIT", 97); + this.set("FORIN_CONTROL", 98); + this.set("UNARY_OP", 100); + this.set("BINARY_OP", 101); + this.set("COMPILED", 200); + this.set("AFTER", 110); + this.set("EVERY", 111); + this.set("DO", 112); + this.set("SLEEP", 113); + } + + set(op, code) { + this[op] = code; + return this[code] = op; + } + +}; + +this.OPCODES = new this.OPCODES_CLASS; diff --git a/WebGames-master/WebGames-master/games/cap/runner.js b/WebGames-master/WebGames-master/games/cap/runner.js new file mode 100644 index 00000000..a4cde560 --- /dev/null +++ b/WebGames-master/WebGames-master/games/cap/runner.js @@ -0,0 +1,385 @@ +this.Runner = class Runner { + constructor(microvm) { + this.microvm = microvm; + } + + init() { + this.initialized = true; + this.system = this.microvm.context.global.system; + this.system.preemptive = 1; + this.system.threads = []; + this.main_thread = new Thread(this); + this.threads = [this.main_thread]; + this.current_thread = this.main_thread; + this.thread_index = 0; + this.microvm.context.global.print = this.microvm.context.meta.print; + this.microvm.context.global.random = new Random(0); + this.microvm.context.global.Function = { + bind: function(obj) { + var rc; + if (this instanceof Routine) { + rc = this.clone(); + rc.object = obj; + return rc; + } else { + return this; + } + } + }; + this.microvm.context.global.List = { + sortList: (f) => { + var funk; + if ((f != null) && f instanceof Program.Function) { + funk = function(a, b) { + return f.call(this.microvm.context.global, [a, b], true); + }; + } else if ((f != null) && typeof f === "function") { + funk = f; + } + return this.sort(funk); + }, + "+": function(a, b, self) { + if (!self) { // not +=, clone array a + a = [...a]; + } + if (Array.isArray(b)) { + return a.concat(b); + } else { + a.push(b); + return a; + } + }, + "-": function(a, b, self) { + var index; + if (!self) { // not -=, clone array a + a = [...a]; + } + index = a.indexOf(b); + if (index >= 0) { + a.splice(index, 1); + } + return a; + } + }; + this.microvm.context.global.Object = {}; + this.microvm.context.global.String = { + fromCharCode: function(...args) { return String.fromCharCode(...args) }, + "+": function(a, b) { + return a + b; + } + }; + this.microvm.context.global.Number = { + parse: function(s) { + var res; + res = Number.parseFloat(s); + if (isFinite(res)) { + return res; + } else { + return 0; + } + }, + toString: function() { + return this.toString(); + } + }; + this.fps = 60; + this.fps_max = 60; + this.cpu_load = 0; + this.microvm.context.meta.print("microScript 2.0"); + return this.triggers_controls_update = true; + } + + run(src, filename, callback) { + var compiler, err, id, j, len, parser, program, ref, result, w; + if (!this.initialized) { + this.init(); + } + parser = new Parser(src, filename); + parser.parse(); + if (parser.error_info != null) { + err = parser.error_info; + err.type = "compile"; + throw err; + } + if (parser.warnings.length > 0) { + ref = parser.warnings; + for (j = 0, len = ref.length; j < len; j++) { + w = ref[j]; + id = filename + "-" + w.line + "-" + w.column; + switch (w.type) { + case "assigning_api_variable": + if (this.microvm.context.warnings.assigning_api_variable[id] == null) { + this.microvm.context.warnings.assigning_api_variable[id] = { + file: filename, + line: w.line, + column: w.column, + expression: w.identifier + }; + } + break; + case "assignment_as_condition": + if (this.microvm.context.warnings.assignment_as_condition[id] == null) { + this.microvm.context.warnings.assignment_as_condition[id] = { + file: filename, + line: w.line, + column: w.column + }; + } + } + } + } + program = parser.program; + compiler = new Compiler(program); + result = null; + compiler.routine.callback = function(res) { + if (callback != null) { + return callback(Program.toString(res)); + } else { + return result = res; + } + }; + this.main_thread.addCall(compiler.routine); + this.tick(); + return result; + } + + call(name, args) { + var f, routine; + if (name === "draw" || name === "update" || name === "serverUpdate") { + if (this.microvm.context.global[name] != null) { + this.main_thread.addCall(`${name}()`); + } + return; + } + if (this.microvm.context.global[name] != null) { + if ((args == null) || !args.length) { + return this.main_thread.addCall(`${name}()`); + } else { + routine = this.microvm.context.global[name]; + if (routine instanceof Routine) { + f = this.main_thread.processor.routineAsFunction(routine, this.microvm.context); + return f(...args); + } else if (typeof routine === "function") { + return routine(...args); + } + } + } else { + return 0; + } + } + + toString(obj) { + return Program.toString(obj); + } + + process(thread, time_limit) { + var processor; + processor = thread.processor; + processor.time_limit = time_limit; + this.current_thread = thread; + return processor.run(this.microvm.context); + } + + tick() { + var dt, frame_time, i, index, j, k, len, load, margin, processing, processor, ref, ref1, t, time, time_limit, time_out; + if (this.system.fps != null) { + this.fps = this.fps * .9 + this.system.fps * .1; + } + this.fps_max = Math.max(this.fps, this.fps_max); + frame_time = Math.min(16, Math.floor(1000 / this.fps_max)); + if (this.fps < 59) { + margin = 10; + } else { + margin = Math.floor(1000 / this.fps * .8); + } + time = Date.now(); + time_limit = time + 100; // allow more time to prevent interrupting main_thread in the middle of a draw() + time_out = this.system.preemptive ? time_limit : 2e308; + processor = this.main_thread.processor; + if (!processor.done) { + if (this.main_thread.sleep_until != null) { + if (Date.now() >= this.main_thread.sleep_until) { + delete this.main_thread.sleep_until; + this.process(this.main_thread, time_out); + } + } else { + this.process(this.main_thread, time_out); + } + } + while (processor.done && Date.now() < time_out && this.main_thread.loadNext()) { + this.process(this.main_thread, time_out); + } + time_limit = time + margin; // secondary threads get remaining time + time_out = this.system.preemptive ? time_limit : 2e308; + processing = true; + while (processing) { + processing = false; + ref = this.threads; + for (j = 0, len = ref.length; j < len; j++) { + t = ref[j]; + if (t !== this.main_thread) { + if (t.paused || t.terminated) { + continue; + } + processor = t.processor; + if (!processor.done) { + if (t.sleep_until != null) { + if (Date.now() >= t.sleep_until) { + delete t.sleep_until; + this.process(t, time_out); + processing = true; + } + } else { + this.process(t, time_out); + processing = true; + } + } else if (t.start_time != null) { + if (t.repeat) { + while (time >= t.start_time && !(t.paused || t.terminated)) { + if (time >= t.start_time + 150) { + t.start_time = time + t.delay; + } else { + t.start_time += t.delay; + } + processor.load(t.routine); + this.process(t, time_out); + processing = true; + } + } else { + if (time >= t.start_time) { + delete t.start_time; + processor.load(t.routine); + this.process(t, time_out); + processing = true; + } + } + } else { + t.terminated = true; + } + } + } + if (Date.now() > time_limit) { + break; + } + } + for (i = k = ref1 = this.threads.length - 1; k >= 1; i = k += -1) { + t = this.threads[i]; + if (t.terminated) { + this.threads.splice(i, 1); + index = this.system.threads.indexOf(t.interface); + if (index >= 0) { + this.system.threads.splice(index, 1); + } + } + } + t = Date.now() - time; + dt = time_limit - time; + load = t / dt * 100; + this.cpu_load = this.cpu_load * .9 + load * .1; + this.system.cpu_load = Math.min(100, Math.round(this.cpu_load)); + } + + createThread(routine, delay, repeat) { + var i, j, ref, t; + t = new Thread(this); + t.routine = routine; + this.threads.push(t); + t.start_time = Date.now() + delay - 1000 / this.fps; + if (repeat) { + t.repeat = repeat; + t.delay = delay; + } + this.system.threads.push(t.interface); + for (i = j = 0, ref = routine.import_values.length - 1; j <= ref; i = j += 1) { + if (routine.import_values[i] === routine) { + routine.import_values[i] = t.interface; + } + } + return t.interface; + } + + sleep(value) { + if (this.current_thread != null) { + return this.current_thread.sleep_until = Date.now() + Math.max(0, value); + } + } + +}; + +this.Thread = class Thread { + constructor(runner) { + this.runner = runner; + this.loop = false; + this.processor = new Processor(this.runner); + this.paused = false; + this.terminated = false; + this.next_calls = []; + this.interface = { + pause: () => { + return this.pause(); + }, + resume: () => { + return this.resume(); + }, + stop: () => { + return this.stop(); + }, + status: "running" + }; + } + + addCall(call) { + if (this.next_calls.indexOf(call) < 0) { + return this.next_calls.push(call); + } + } + + loadNext() { + var compiler, f, parser, program; + if (this.next_calls.length > 0) { + f = this.next_calls.splice(0, 1)[0]; + if (f instanceof Routine) { + this.processor.load(f); + } else { + parser = new Parser(f, ""); + parser.parse(); + program = parser.program; + compiler = new Compiler(program); + this.processor.load(compiler.routine); + if ((f === "update()" || f === "serverUpdate()") && (this.runner.updateControls != null)) { + this.runner.updateControls(); + } + } + return true; + } else { + return false; + } + } + + pause() { + if (this.interface.status === "running") { + this.interface.status = "paused"; + this.paused = true; + return 1; + } else { + return 0; + } + } + + resume() { + if (this.interface.status === "paused") { + this.interface.status = "running"; + this.paused = false; + return 1; + } else { + return 0; + } + } + + stop() { + this.interface.status = "stopped"; + this.terminated = true; + return 1; + } + +}; diff --git a/WebGames-master/WebGames-master/games/cap/sounds/death.wav b/WebGames-master/WebGames-master/games/cap/sounds/death.wav new file mode 100644 index 0000000000000000000000000000000000000000..65c7153e7a83b0da8ab26756031aaa7632b22c1d GIT binary patch literal 47912 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 UjsJcrzx?0-{m)DPfB)bA14pyNQvd(} literal 0 HcmV?d00001 diff --git a/WebGames-master/WebGames-master/games/cap/sounds/jump.wav b/WebGames-master/WebGames-master/games/cap/sounds/jump.wav new file mode 100644 index 0000000000000000000000000000000000000000..ac5d6cf6f6d54a8fc329fb5e7f7f7f122eb208cc GIT binary patch literal 16486 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 R|G&;5oKqzK-~ayS{{fh;#`FLH literal 0 HcmV?d00001 diff --git a/WebGames-master/WebGames-master/games/cap/sprites/bas.png b/WebGames-master/WebGames-master/games/cap/sprites/bas.png new file mode 100644 index 0000000000000000000000000000000000000000..b30f9235f4beb1909c81d664bf5e08c9a2935b90 GIT binary patch literal 4327 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 O0000Px$ElET{R9Hvtn9U7?FbsvAOSj zA1wKVgs~kS==n?3`_}6FFaiK50MK~Fd(%|mJ!qN*O5&JXk{9dCt*&}rJMD|;#C=_i zzVP^LMNW-}A15_0)|XpdRn?t#BI4rl55kvR=HC3#Ro$&3=fwSwlam+g%dPH4L|nWt zuCom%a%vo(Tjm~e^PIRxeYw@e_d$W-4A0&3PN_To23pMfa^t=&{Nv?eUv72HkUPV3 zL+=djq}0o~*EK^f=6xk`>z6C~`2#c6%lGPx%AW1|)R9HvtSusunF%aBqkoW|m;Rg{NPoN+Qp+Y=?hKdG>f(nT@pj1HM5u}I| z(NoYtl~){EBL{oE>)q3F;vl}#@y_|yp4nNaf|gI!G9I!3HSE_HI~#EM_9)I1f2d#X zYr48>Fiz&P0AcXf$sN4k9s#_L9bR=DuQ~zX-s~a=6PON{aQL){V$1;3t7{mYp8@?0 zGl0)WBLM%_FqvimE*Qtu96Stn-S*-4h7T9)c7^VBJ%M_*J&%T$H>b&)S2^JTxc!!n zJi7vVSaN*nmP{6=cDsT?=XehaodL{r#?(E}=8>c~rZch;b-}_)md-^FEHd&vrw9sH znHXnc_6MT5fG;xndKp&e)h^_Mb6zP6z?FE%lfZ1P0I;lwC0z=px)2>C?+rMAfMX_u z!TAFWmP936-YufiEf*}j?C}aL-hj1vIB2!{yiW|+s9Aj#Kr+~ocTS8Zrw2l>U|xY_ zE>wU&YWIsjuqZ%0r^kBWX#Kz1f9~=jVPm$mY4-Px#+DSw~R5(v#WME+UU#A+(00K?7*D`?E^Vt{}5`Qr;=;}TOi{kr{jP z!xVrFkkt+bYX%tt0)6V(4FPFhv)+t>5uXcShJXx22Qb%x4Z!6@kZVAIC<8!#M-GF> zS0UaZ$^cj(f)v975EdRp830m5kqame16=8Vs8}GB4q#ybingMgvhYAfiAG{v0Mc;z zvMfd_B|04tG=NYn;5C4lbkJD07M%7$;eedc;9el)0@~&UVqyWO3y4hzc)dW83r0wJ mfGxYj3R|M`0;~5xc@I2wnUL+!puy}==g!xBJY4af;wgp* zg(i{1OafwZE|LsEE)%&m_?Tl}HmrzHn8Me=#oQHRFpE!NW~Pa3fFh5^xn2`}{td3i kYc{BA$v*H>S8!(78hOED$BG5#fNo~+boFyt=akR{05$qee*gdg literal 0 HcmV?d00001 diff --git a/WebGames-master/WebGames-master/games/cap/sprites/cube.png b/WebGames-master/WebGames-master/games/cap/sprites/cube.png new file mode 100644 index 0000000000000000000000000000000000000000..d4bd77657dc4fc9400594585e0b33c385dba2938 GIT binary patch literal 288 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 Iol`;+0FJyJMF0Q* literal 0 HcmV?d00001 diff --git a/WebGames-master/WebGames-master/games/cap/sprites/poster.png b/WebGames-master/WebGames-master/games/cap/sprites/poster.png new file mode 100644 index 0000000000000000000000000000000000000000..bfa655c4b0eadae1ac63e4bd87563be6a2d4a13a GIT binary patch literal 31500 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 literal 0 HcmV?d00001 diff --git a/WebGames-master/WebGames-master/games/cap/sprites/tower.png b/WebGames-master/WebGames-master/games/cap/sprites/tower.png new file mode 100644 index 0000000000000000000000000000000000000000..4e2d1c8f6853d5045cc0d3b2b23c41bbeab2cafb GIT binary patch literal 1141 zcmV-*1d98KP)Px(FG)l}RA@u(TRUzPK@jbgfIAQ@M2Nt0Lf})7fK5oi6%YX;Fv5XFfVctyAzny0 zg#!|c01<%$?f^(ewbonL6jlAH>7MnhXOp$JduIA|Rlj;w-7^azoCW1G-`WkQUl)PC zwa=5^Asl@Fzny-^huZh==+{%9RJ+#a-Hq;OXpHm>`8#?61AUi#t_uEHO$Q+3lOf;) zF#~UJpN2;tkHd$DJK^MHZrX<51NY{}zDy2Kg5R?MTHv3}w{}$qpaEiXE$fsp02v&g zy$8q3KWC3aID3Eo>(Qs3RXcYG=|mO-l#DT#32Nfko>`Ltz4%QA$epCA-?(RBE3PfP^8}1>_Xg3c$p0N04z_(+pN- z(*i#qn)Jfp9k1|r_ms^^qXD_Ns{IaLS+)R%_@ z$`X(rT;?>eWX1Pk1U$zZ@^F1M2av)KF&~1C{wE_^^v@Z9oQE_3gd^7kG8gVU0oGbA z6@{AcO&K`VuIYx__>*-29xr*k$KbSf#Qh-|fE!XWgcb8sL@hNzE`HoMW#Cl1B^)&d z^x~g1K*|d?ygfS&q1K@(# z?w_^-te7|?17LEvD$bbz;GyqU_=jMCzW65%u;DR21+T*Za+T-Cd`^R;P$~AK4p1u% zq!f~C0htHm|5)Wq;=vgK&KSIp7k|!nc#Q6?uo2r1_Tq0|2SDw=Zy^YK1GV#DYlWml zp*#>X+ByK&022drGo35V0IAsFX`l82JhRsJnqFA|4K21C`1AQ0Hu|&n1wvM zfw{-xJ&cf32Pnlq)d36-NQH!rssm_qP&xrn#3=^I;Y95~NU9R3#X}yqhj=q+lrM%@ zZwBQUYU(ro85sOju=XYpO{4X;&~z&J;z)SYQ^6j}=l*Y<2SA^kcL8I4TAho>_*&!l zh(12Qt?*~p0i@`W#$R_HToU79Y>uIi1LV9J)yDx^z8Uln?1(yXq-O|I00000NkvXX Hu0mjf?=KK2 literal 0 HcmV?d00001 diff --git a/WebGames-master/WebGames-master/games/cap/sprites/tower1.png b/WebGames-master/WebGames-master/games/cap/sprites/tower1.png new file mode 100644 index 0000000000000000000000000000000000000000..95f717dccaa617a07a25222fbd6e7a6341146a10 GIT binary patch literal 839 zcmV-N1GxN&P)Px&0ZBwbRA@u(S+P#sKoDI^A^$+(P@xovCIw%SCV`YG@(U3Kq5y>=N)hE3Qlx}S zntTNX4N4KEf-Cq3Kmt9V-Z36#yk6hh9OT>_c-QNl@q2II&K4nrn_yh!+GZI483p`W z*N4jx4*uP5$9-OC-&?hxN1s@`)#v;3`fM;qyhGn-FUEjh>nd_40KsD-OhQwD>+9q2 z?&onhe7g}&PfK%hIsqJ820L>C%C$`s0eCqF_hy%Z00hiy>&z{<|zBR2yj2i6Kj|zpeyH*4+(jUqp5&Cggp3q_UbykzPhNT^7qnmSUGuC z>4K((guX5;ce|E=qt9O}Ex;I{#r{EEJUOO( zhXuyu1V|0AR9~yQUKOl%iGV6t!FhaL9Xta;5+ICH7mySW0eCK^30Av|VNeZd3SK8+ zD5=T543h8o>Jsw!k{0xJpriu&N=jgr;OdZd8O-GawD6Jh6g2#gAUya>1R#0P01Btn z1nmVT{S=opMHnu1DYUjCV&q# z?f$F;c$zRI0<;%Mi2;2V8UPWLkdYZ|%Xvuya1z|756HC)VhNR6z;~u-f{v#V0Wne3 z1rg5&(EHD7gt#}z?gJJGa7tqTl@I8;3dmZ3bcUqE`Oau+X}eMY%jb(PcQu9-&c~L? zng+x;-^B+|5D|P=A0UOVHy?oDW=Vio5$YQOUPUO`2=&2tYs|Ua3*_DnKC}-=b%xmr zB9Gb!Sa6MLf^{+^_W+&~Y(qDzAQE$e*-wVrO!O)Asa1qhy?@LH01>(>Y@GyQ9PhMf zu&Qtu$V&ux^#Jy1a~9atr?+zfmc(XBK%0{xI>n~bVy{n|lOgZ)w@Kg7b_-V8BSf|J RTGIdk002ovPDHLkV1js2b2Px$?ny*JRA@u(Sxa`pFbs4yy#>pzI1VT1MObi=o`B#ZBn`|3U2`Q+Yt+6_~Vtz~y5CFWa0C22vwqfOf)@d-~^0gt+G!3=_z#_iLz-ZhPLfDH_b+r(R zbO6T-^8pSQjki{UI_@p4qCLb@v$EF80SJLe2f*EykOlhwaa|h>)&U*>AUzaEC`@#? z)D}OS&h#Fh4oCxl7y7C{3jmK3#!`Y-uFu#Yb5{-!4q%sI1hdL;%5r#!^3(S8dO$>q zx*@Vy9k6ZIralGA4{76FgG2L0pJYfk~ua18= 30 && this.type <= 39) || (this.type >= 200 && this.type <= 201) || (this.type >= 2 && this.type <= 7); + } + + toString() { + return this.value + " : " + this.type; + } + +}; + +this.Token.TYPE_EQUALS = 1; + +this.Token.TYPE_DOUBLE_EQUALS = 2; + +this.Token.TYPE_GREATER = 3; + +this.Token.TYPE_GREATER_OR_EQUALS = 4; + +this.Token.TYPE_LOWER = 5; + +this.Token.TYPE_LOWER_OR_EQUALS = 6; + +this.Token.TYPE_UNEQUALS = 7; + +this.Token.TYPE_IDENTIFIER = 10; + +this.Token.TYPE_NUMBER = 11; + +this.Token.TYPE_STRING = 12; + +this.Token.TYPE_OPEN_BRACE = 20; + +this.Token.TYPE_CLOSED_BRACE = 21; + +// @Token.TYPE_OPEN_CURLY_BRACE = 22 +// @Token.TYPE_CLOSED_CURLY_BRACE = 23 +this.Token.TYPE_OPEN_BRACKET = 24; + +this.Token.TYPE_CLOSED_BRACKET = 25; + +this.Token.TYPE_COMMA = 26; + +this.Token.TYPE_DOT = 27; + +this.Token.TYPE_PLUS = 30; + +this.Token.TYPE_MINUS = 31; + +this.Token.TYPE_MULTIPLY = 32; + +this.Token.TYPE_DIVIDE = 33; + +this.Token.TYPE_POWER = 34; + +this.Token.TYPE_MODULO = 35; + +this.Token.TYPE_BINARY_AND = 36; + +this.Token.TYPE_BINARY_OR = 37; + +this.Token.TYPE_SHIFT_LEFT = 38; + +this.Token.TYPE_SHIFT_RIGHT = 39; + +this.Token.TYPE_PLUS_EQUALS = 40; + +this.Token.TYPE_MINUS_EQUALS = 41; + +this.Token.TYPE_MULTIPLY_EQUALS = 42; + +this.Token.TYPE_DIVIDE_EQUALS = 43; + +this.Token.TYPE_MODULO_EQUALS = 44; + +this.Token.TYPE_AND_EQUALS = 45; + +this.Token.TYPE_OR_EQUALS = 46; + +this.Token.TYPE_RETURN = 50; + +this.Token.TYPE_BREAK = 51; + +this.Token.TYPE_CONTINUE = 52; + +this.Token.TYPE_FUNCTION = 60; + +this.Token.TYPE_AFTER = 61; + +this.Token.TYPE_EVERY = 62; + +this.Token.TYPE_DO = 63; + +this.Token.TYPE_SLEEP = 64; + +this.Token.TYPE_LOCAL = 70; + +this.Token.TYPE_OBJECT = 80; + +this.Token.TYPE_CLASS = 90; + +this.Token.TYPE_EXTENDS = 91; + +this.Token.TYPE_NEW = 92; + +this.Token.TYPE_FOR = 100; + +this.Token.TYPE_TO = 101; + +this.Token.TYPE_BY = 102; + +this.Token.TYPE_IN = 103; + +this.Token.TYPE_WHILE = 104; + +this.Token.TYPE_IF = 105; + +this.Token.TYPE_THEN = 106; + +this.Token.TYPE_ELSE = 107; + +this.Token.TYPE_ELSIF = 108; + +this.Token.TYPE_END = 120; + +this.Token.TYPE_AND = 200; + +this.Token.TYPE_OR = 201; + +this.Token.TYPE_NOT = 202; + +this.Token.TYPE_ERROR = 404; + +this.Token.predefined = {}; + +this.Token.predefined["return"] = this.Token.TYPE_RETURN; + +this.Token.predefined["break"] = this.Token.TYPE_BREAK; + +this.Token.predefined["continue"] = this.Token.TYPE_CONTINUE; + +this.Token.predefined["function"] = this.Token.TYPE_FUNCTION; + +this.Token.predefined["for"] = this.Token.TYPE_FOR; + +this.Token.predefined["to"] = this.Token.TYPE_TO; + +this.Token.predefined["by"] = this.Token.TYPE_BY; + +this.Token.predefined["in"] = this.Token.TYPE_IN; + +this.Token.predefined["while"] = this.Token.TYPE_WHILE; + +this.Token.predefined["if"] = this.Token.TYPE_IF; + +this.Token.predefined["then"] = this.Token.TYPE_THEN; + +this.Token.predefined["else"] = this.Token.TYPE_ELSE; + +this.Token.predefined["elsif"] = this.Token.TYPE_ELSIF; + +this.Token.predefined["end"] = this.Token.TYPE_END; + +this.Token.predefined["object"] = this.Token.TYPE_OBJECT; + +this.Token.predefined["class"] = this.Token.TYPE_CLASS; + +this.Token.predefined["extends"] = this.Token.TYPE_EXTENDS; + +this.Token.predefined["new"] = this.Token.TYPE_NEW; + +this.Token.predefined["and"] = this.Token.TYPE_AND; + +this.Token.predefined["or"] = this.Token.TYPE_OR; + +this.Token.predefined["not"] = this.Token.TYPE_NOT; + +this.Token.predefined["after"] = this.Token.TYPE_AFTER; + +this.Token.predefined["every"] = this.Token.TYPE_EVERY; + +this.Token.predefined["do"] = this.Token.TYPE_DO; + +this.Token.predefined["sleep"] = this.Token.TYPE_SLEEP; + +this.Token.predefined["delete"] = this.Token.TYPE_DELETE; + +this.Token.predefined["local"] = this.Token.TYPE_LOCAL; diff --git a/WebGames-master/WebGames-master/games/cap/tokenizer.js b/WebGames-master/WebGames-master/games/cap/tokenizer.js new file mode 100644 index 00000000..37b7ffe4 --- /dev/null +++ b/WebGames-master/WebGames-master/games/cap/tokenizer.js @@ -0,0 +1,343 @@ +this.Tokenizer = (function() { + function Tokenizer(input, filename) { + this.input = input; + this.filename = filename; + this.index = 0; + this.line = 1; + this.column = 0; + this.last_column = 0; + this.buffer = []; + this.chars = {}; + this.chars["("] = Token.TYPE_OPEN_BRACE; + this.chars[")"] = Token.TYPE_CLOSED_BRACE; + this.chars["["] = Token.TYPE_OPEN_BRACKET; + this.chars["]"] = Token.TYPE_CLOSED_BRACKET; + this.chars["{"] = Token.TYPE_OPEN_CURLY_BRACE; + this.chars["}"] = Token.TYPE_CLOSED_CURLY_BRACE; + this.chars["^"] = Token.TYPE_POWER; + this.chars[","] = Token.TYPE_COMMA; + this.chars["."] = Token.TYPE_DOT; + this.doubles = {}; + this.doubles[">"] = [Token.TYPE_GREATER, Token.TYPE_GREATER_OR_EQUALS]; + this.doubles["<"] = [Token.TYPE_LOWER, Token.TYPE_LOWER_OR_EQUALS]; + this.doubles["="] = [Token.TYPE_EQUALS, Token.TYPE_DOUBLE_EQUALS]; + this.doubles["+"] = [Token.TYPE_PLUS, Token.TYPE_PLUS_EQUALS]; + this.doubles["-"] = [Token.TYPE_MINUS, Token.TYPE_MINUS_EQUALS]; + this.doubles["*"] = [Token.TYPE_MULTIPLY, Token.TYPE_MULTIPLY_EQUALS]; + this.doubles["/"] = [Token.TYPE_DIVIDE, Token.TYPE_DIVIDE_EQUALS]; + this.doubles["%"] = [Token.TYPE_MODULO, Token.TYPE_MODULO_EQUALS]; + this.doubles["&"] = [Token.TYPE_BINARY_AND, Token.TYPE_AND_EQUALS]; + this.doubles["|"] = [Token.TYPE_BINARY_OR, Token.TYPE_OR_EQUALS]; + this.shifts = { + "<": Token.TYPE_SHIFT_LEFT, + ">": Token.TYPE_SHIFT_RIGHT + }; + this.letter_regex = RegExp(/^\p{L}/, 'u'); + } + + Tokenizer.prototype.pushBack = function(token) { + return this.buffer.splice(0, 0, token); + }; + + Tokenizer.prototype.finished = function() { + return this.index >= this.input.length && this.buffer.length === 0; + }; + + Tokenizer.prototype.nextChar = function(ignore_comments) { + var c, endseq; + if (ignore_comments == null) { + ignore_comments = false; + } + c = this.input.charAt(this.index++); + if (c === "\n") { + this.line += 1; + this.last_column = this.column; + this.column = 0; + } else if (c === "/" && !ignore_comments) { + if (this.input.charAt(this.index) === "/") { + while (true) { + c = this.input.charAt(this.index++); + if (c === "\n" || this.index >= this.input.length) { + break; + } + } + this.line += 1; + this.last_column = this.column; + this.column = 0; + return this.nextChar(); + } else if (this.input.charAt(this.index) === "*") { + endseq = 0; + while (true) { + c = this.input.charAt(this.index++); + if (c === "\n") { + this.line += 1; + this.last_column = this.column; + this.column = 0; + endseq = 0; + } else if (c === "*") { + endseq = 1; + } else if (c === "/" && endseq === 1) { + break; + } else { + endseq = 0; + } + if (this.index >= this.input.length) { + break; + } + } + return this.nextChar(); + } + } else { + this.column += 1; + } + return c; + }; + + Tokenizer.prototype.rewind = function() { + this.index -= 1; + this.column -= 1; + if (this.input.charAt(this.index) === "\n") { + this.line -= 1; + return this.column = this.last_column; + } + }; + + Tokenizer.prototype.next = function() { + var c, code; + if (this.buffer.length > 0) { + return this.buffer.splice(0, 1)[0]; + } + while (true) { + if (this.index >= this.input.length) { + return null; + } + c = this.nextChar(); + code = c.charCodeAt(0); + if (code > 32 && code !== 160) { + break; + } + } + this.token_start = this.index - 1; + if (this.doubles[c] != null) { + return this.parseDouble(c, this.doubles[c]); + } + if (this.chars[c] != null) { + return new Token(this, this.chars[c], c); + } + if (c === "!") { + return this.parseUnequals(c); + } else if (code >= 48 && code <= 57) { + return this.parseNumber(c); + } else if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122) || code === 95 || this.letter_regex.test(c)) { + return this.parseIdentifier(c); + } else if (c === '"') { + return this.parseString(c, '"'); + } else if (c === "'") { + return this.parseString(c, "'"); + } else { + return this.error("Syntax Error"); + } + }; + + Tokenizer.prototype.changeNumberToIdentifier = function() { + var i, j, ref, results, token, v; + token = this.next(); + if ((token != null) && token.type === Token.TYPE_NUMBER) { + v = token.string_value.split("."); + results = []; + for (i = j = ref = v.length - 1; j >= 0; i = j += -1) { + if (v[i].length > 0) { + this.pushBack(new Token(this, Token.TYPE_IDENTIFIER, v[i])); + } + if (i > 0) { + results.push(this.pushBack(new Token(this, Token.TYPE_DOT, "."))); + } else { + results.push(void 0); + } + } + return results; + } else if ((token != null) && token.type === Token.TYPE_STRING) { + return this.pushBack(new Token(this, Token.TYPE_IDENTIFIER, token.value)); + } else { + return this.pushBack(token); + } + }; + + Tokenizer.prototype.parseDouble = function(c, d) { + if ((this.shifts[c] != null) && this.index < this.input.length && this.input.charAt(this.index) === c) { + this.nextChar(); + return new Token(this, this.shifts[c], c + c); + } else if (this.index < this.input.length && this.input.charAt(this.index) === "=") { + this.nextChar(); + return new Token(this, d[1], c + "="); + } else { + return new Token(this, d[0], c); + } + }; + + Tokenizer.prototype.parseEquals = function(c) { + if (this.index < this.input.length && this.input.charAt(this.index) === "=") { + this.nextChar(); + return new Token(this, Token.TYPE_DOUBLE_EQUALS, "=="); + } else { + return new Token(this, Token.TYPE_EQUALS, "="); + } + }; + + Tokenizer.prototype.parseGreater = function(c) { + if (this.index < this.input.length && this.input.charAt(this.index) === "=") { + this.nextChar(); + return new Token(this, Token.TYPE_GREATER_OR_EQUALS, ">="); + } else { + return new Token(this, Token.TYPE_GREATER_OR_EQUALS, ">"); + } + }; + + Tokenizer.prototype.parseLower = function(c) { + if (this.index < this.input.length && this.input.charAt(this.index) === "=") { + this.nextChar(); + return new Token(this, Token.TYPE_LOWER_OR_EQUALS, "<="); + } else { + return new Token(this, Token.TYPE_LOWER, "<"); + } + }; + + Tokenizer.prototype.parseUnequals = function(c) { + if (this.index < this.input.length && this.input.charAt(this.index) === "=") { + this.nextChar(); + return new Token(this, Token.TYPE_UNEQUALS, "!="); + } else { + return this.error("Expected inequality !="); + } + }; + + Tokenizer.prototype.parseIdentifier = function(s) { + var c, code; + while (true) { + if (this.index >= this.input.length) { + return new Token(this, Token.TYPE_IDENTIFIER, s); + } + c = this.nextChar(); + code = c.charCodeAt(0); + if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122) || code === 95 || (code >= 48 && code <= 57) || this.letter_regex.test(c)) { + s += c; + } else { + this.rewind(); + return new Token(this, Token.TYPE_IDENTIFIER, s); + } + } + }; + + Tokenizer.prototype.parseNumber = function(s) { + var c, code, exp, pointed; + pointed = false; + exp = false; + while (true) { + if (this.index >= this.input.length) { + return new Token(this, Token.TYPE_NUMBER, Number.parseFloat(s), s); + } + c = this.nextChar(); + code = c.charCodeAt(0); + if (c === "." && !pointed && !exp) { + pointed = true; + s += c; + } else if (code >= 48 && code <= 57) { + s += c; + } else if ((c === "e" || c === "E") && !exp && this.index < this.input.length) { + exp = true; + s += c; + c = this.nextChar(); + if (c === "+" || c === "-") { + s += c; + } else { + this.rewind(); + } + } else if ((c === "x" || c === "X") && s === "0") { + return this.parseHexNumber("0x"); + } else { + this.rewind(); + return new Token(this, Token.TYPE_NUMBER, Number.parseFloat(s), s); + } + } + }; + + Tokenizer.prototype.parseHexNumber = function(s) { + var c; + while (true) { + if (this.index >= this.input.length) { + return new Token(this, Token.TYPE_NUMBER, Number.parseInt(s), s); + } + c = this.nextChar(); + if (/[a-fA-F0-9]/.test(c)) { + s += c; + } else { + this.rewind(); + return new Token(this, Token.TYPE_NUMBER, Number.parseInt(s), s); + } + } + }; + + Tokenizer.prototype.parseString = function(s, close) { + var c, code, count_close, n; + if (close == null) { + close = '"'; + } + if (close === '"') { + if (this.input.charAt(this.index) === '"' && this.input.charAt(this.index + 1) === '"' && this.input.charAt(this.index + 2) !== '"') { + close = '"""'; + this.nextChar(true); + this.nextChar(true); + } + } + count_close = 0; + while (true) { + if (this.index >= this.input.length) { + return this.error("Unclosed string value"); + } + c = this.nextChar(true); + code = c.charCodeAt(0); + if (c === "\\") { + n = this.nextChar(true); + switch (n) { + case "n": + s += "\n"; + break; + case "\\": + s += "\\"; + break; + case close: + s += close; + break; + default: + s += "\\" + n; + } + } else if (c === close) { + n = this.nextChar(true); + if (n === close) { + s += c; + } else { + this.rewind(); + s += c; + return new Token(this, Token.TYPE_STRING, s.substring(1, s.length - 1)); + } + } else { + if (close === '"""' && c === '"') { + count_close += 1; + if (count_close === 3) { + return new Token(this, Token.TYPE_STRING, s.substring(1, s.length - 2)); + } + } else { + count_close = 0; + } + s += c; + } + } + }; + + Tokenizer.prototype.error = function(s) { + throw s; + }; + + return Tokenizer; + +})(); diff --git a/WebGames-master/WebGames-master/games/cap/transpiler.js b/WebGames-master/WebGames-master/games/cap/transpiler.js new file mode 100644 index 00000000..8395cfc1 --- /dev/null +++ b/WebGames-master/WebGames-master/games/cap/transpiler.js @@ -0,0 +1,244 @@ +var Transpiler; + +Transpiler = (function() { + function Transpiler() {} + + Transpiler.prototype.transpile = function(r) { + var i, j, l, op, ref, results; + results = []; + for (i = l = 0, ref = r.opcodes.length - 1; l <= ref; i = l += 1) { + op = OPCODES[r.opcodes[i]]; + if (this.transpilable(op, r.arg1[i])) { + j = i + 1; + while (j < r.opcodes.length && r.removeable(j) && this.transpilable(OPCODES[r.opcodes[j]], r.arg1[j])) { + j += 1; + } + j -= 1; + if (j - i >= 2) { + results.push(this.transpileSegment(r, i, j)); + } else { + results.push(void 0); + } + } else { + results.push(void 0); + } + } + return results; + }; + + Transpiler.prototype.transpileSegment = function(r, i, j) { + var comp, err, index, k, l, m, ref, ref1, ref2, ref3, s; + this.vcount = 0; + this.stack = new Stack(); + this.locals = {}; + this.variables = {}; + s = "f = function(stack,stack_index,locals,locals_offset,object,global) {\n"; + for (k = l = ref = i, ref1 = j; l <= ref1; k = l += 1) { + console.info(OPCODES[r.opcodes[k]] + " " + r.arg1[k]); + comp = this[OPCODES[r.opcodes[k]]](r.arg1[k]); + if (comp) { + s += comp + "\n"; + } + } + for (index in this.stack.touched) { + if (this.stack.touched[index]) { + if (index < 0) { + s += "stack[stack_index-" + (Math.abs(index)) + "] = " + this.stack.stack[index] + " ;\n"; + } else if (index > 0) { + s += "stack[stack_index+" + index + "] = " + this.stack.stack[index] + " ;\n"; + } else { + s += "stack[stack_index] = " + this.stack.stack[index] + " ;\n"; + } + } + } + if (this.stack.index < 0) { + s += "stack_index -= " + (Math.abs(this.stack.index)) + " ;\n"; + } else if (this.stack.index > 0) { + s += "stack_index += " + this.stack.index + " ;\n"; + } + s += "return stack_index ;\n}"; + console.info(s); + try { + eval(s); + } catch (error) { + err = error; + console.error(s); + console.error(err); + } + r.opcodes[i] = 200; + r.arg1[i] = f; + for (k = m = ref2 = i + 1, ref3 = j; m <= ref3; k = m += 1) { + r.remove(i + 1); + } + }; + + Transpiler.prototype.createVariable = function() { + return "v" + (this.vcount++); + }; + + Transpiler.prototype.transpilable = function(op, arg) { + var ref; + if (op === "LOAD_VALUE") { + return (ref = typeof arg) === "string" || ref === "number"; + } else { + return this[op] != null; + } + }; + + Transpiler.prototype.LOAD_VALUE = function(arg) { + if (typeof arg === "string") { + this.stack.push(" \"" + (arg.replace(/"/g, "\\\"")) + "\" "); + } else if (typeof arg === "number") { + this.stack.push(arg + ""); + } + return ""; + }; + + Transpiler.prototype.LOAD_LOCAL = function(arg) { + var v; + v = this.createVariable(); + this.stack.push(v); + return "let " + v + " = locals[locals_offset+" + arg + "] ; // LOAD_LOCAL"; + }; + + Transpiler.prototype.LOAD_LOCAL_OBJECT = function(arg) { + var res, v; + if (this.locals[arg] != null) { + v = this.locals[arg]; + this.stack.push(v); + return "if (typeof " + v + " != \"object\") { " + v + " = locals[locals_offset+" + arg + "] = {} } ;"; + } else { + v = this.createVariable(); + res = "let " + v + " = locals[locals_offset+" + arg + "] ;\nif (typeof " + v + " != \"object\") { " + v + " = locals[locals_offset+" + arg + "] = {} } ;"; + this.stack.push(v); + this.locals[arg] = v; + return res; + } + }; + + Transpiler.prototype.STORE_LOCAL = function(arg) { + var v; + v = this.stack.get(); + return "locals[locals_offset+" + arg + "] = " + v + " ; // STORE_LOCAL"; + }; + + Transpiler.prototype.POP = function() { + this.stack.pop(); + return ""; + }; + + Transpiler.prototype.CREATE_PROPERTY = function(arg) { + var res; + res = (this.stack.get(-2)) + "[" + (this.stack.get(-1)) + "] = " + (this.stack.get()) + " ;"; + this.stack.pop(); + this.stack.pop(); + return res; + }; + + Transpiler.prototype.LOAD_PROPERTY = function(arg) { + var res, v; + v = this.createVariable(); + res = "let " + v + " = " + (this.stack.get(-1)) + "[" + (this.stack.get()) + "] ; // LOAD_PROPERTY\nif (" + v + " == null) { " + v + " = 0 ; }"; + this.stack.pop(); + this.stack.pop(); + this.stack.push(v); + return res; + }; + + Transpiler.prototype.LOAD_PROPERTY_ATOP = function(arg) { + var res, v; + v = this.createVariable(); + res = "let " + v + " = " + (this.stack.get(-1)) + "[" + (this.stack.get()) + "] ; // LOAD_PROPERTY_ATOP\nif (" + v + " == null) { " + v + " = 0 ; }"; + this.stack.push(v); + return res; + }; + + Transpiler.prototype.NEW_OBJECT = function() { + var v; + v = this.createVariable(); + this.stack.push(v); + return "let " + v + " = {} ;"; + }; + + Transpiler.prototype.NEW_ARRAY = function() { + var v; + v = this.createVariable(); + this.stack.push(v); + return "let " + v + " = [] ;"; + }; + + Transpiler.prototype.MAKE_OBJECT = function() { + var res, v; + v = this.createVariable(); + res = "let " + v + " = " + (this.stack.get()) + " ;\nif (typeof " + v + " != \"object\") " + v + " = {} ; "; + this.stack.pop(); + this.stack.push(v); + return res; + }; + + Transpiler.prototype.STORE_VARIABLE = function(arg) { + if (this.variables[arg] != null) { + return this.variables[arg] + " = object[\"" + arg + "\"] = " + (this.stack.get()) + " ; // STORE_VARIABLE"; + } else { + return "object[\"" + arg + "\"] = " + (this.stack.get()) + " ; // STORE_VARIABLE"; + } + }; + + Transpiler.prototype.STORE_PROPERTY = function(arg) { + var res, v; + v = this.createVariable(); + res = "let " + v + " = " + (this.stack.get(-2)) + "[" + (this.stack.get(-1)) + "] = " + (this.stack.get(0)) + " ; // STORE_PROPERTY"; + this.stack.pop(); + this.stack.pop(); + this.stack.pop(); + this.stack.push(v); + return res; + }; + + return Transpiler; + +})(); + +this.Stack = (function() { + function Stack() { + this.stack = ["stack[stack_index]"]; + this.index = 0; + this.touched = {}; + } + + Stack.prototype.push = function(value) { + this.stack[++this.index] = value; + return this.touched[this.index] = true; + }; + + Stack.prototype.pop = function() { + var res; + if (this.index >= 0) { + res = this.stack.splice(this.index, 1)[0]; + } else if (this.stack[this.index] != null) { + res = this.stack[this.index]; + } else { + res = "stack[stack_index-" + this.index + "]"; + } + this.index -= 1; + return res; + }; + + Stack.prototype.get = function(index) { + var i; + if (index == null) { + index = 0; + } + i = this.index + index; + if (i >= 0) { + return this.stack[i]; + } else if (this.stack[i] != null) { + return this.stack[i]; + } else { + return "stack[stack_index-" + (-i) + "]"; + } + }; + + return Stack; + +})(); diff --git a/ba.html b/ba.html index afa97f15..70416680 100644 --- a/ba.html +++ b/ba.html @@ -8,6 +8,10 @@ else { window.location="https://fun-miles-4jub.onrender.com/404"; } -

this is for the bata testers

+ + new test + Gladihoppers-gh +

this wont look good because its beta testers eyes only

+ \ No newline at end of file