// Generated by CoffeeScript 1.7.1 (function() { var Ease, Engine, Object, ResourceManager, Scene, Sound, Sprite, Tileset, TilesetTile, Timer, util, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __slice = [].slice; window.pass = void 0; Engine = (function() { function Engine(resource_manager) { this.resource_manager = resource_manager; this.getTileset = __bind(this.getTileset, this); this.getSprite = __bind(this.getSprite, this); this.getSound = __bind(this.getSound, this); this.getObject = __bind(this.getObject, this); this.getScene = __bind(this.getScene, this); this.createTileset = __bind(this.createTileset, this); this.createSprite = __bind(this.createSprite, this); this.createSound = __bind(this.createSound, this); this.createObject = __bind(this.createObject, this); this.createScene = __bind(this.createScene, this); this.setPreloadScene = __bind(this.setPreloadScene, this); this.setInitialScene = __bind(this.setInitialScene, this); this.skipTimers = __bind(this.skipTimers, this); this.updateTimers = __bind(this.updateTimers, this); this.updateEasings = __bind(this.updateEasings, this); this.iteration = __bind(this.iteration, this); this.loop = __bind(this.loop, this); this.start = __bind(this.start, this); this.updateCanvasSize = __bind(this.updateCanvasSize, this); this.getSurface = __bind(this.getSurface, this); this.createSurface = __bind(this.createSurface, this); this.addCanvas = __bind(this.addCanvas, this); this.canvases = {}; this.fps = 45; this.last_frameskip_collection = Math.floor(Date.now()); this.frameskip = 0; this.current_frameskip = 0; this.current_frame = 0; this.scenes = {}; this.objects = {}; this.sounds = {}; this.sprites = {}; this.tilesets = {}; this.easings = []; this.named_timers = {}; this.unnamed_timers = []; } Engine.prototype.addCanvas = function(canvas, label) { if (label == null) { label = ""; } return this.canvases[label] = util.unpackElement(canvas); }; Engine.prototype.createSurface = function(label) { return this.canvases[label] = document.createElement("canvas"); }; Engine.prototype.getSurface = function(label) { var _ref; if (typeof label === "string") { return (_ref = this.canvases[label]) != null ? _ref.getContext("2d") : void 0; } else if (label.tagName === "CANVAS") { return label.getContext("2d"); } else { return label; } }; Engine.prototype.updateCanvasSize = function(canvas, w, h) { canvas.width = w; canvas.height = h; canvas.style.width = "" + w + "px"; return canvas.style.height = "" + h + "px"; }; Engine.prototype.start = function() { this.initial_scene.addTargetSurface(this.canvases[""]); return this.loop(); }; Engine.prototype.loop = function() { return this.iteration(); }; Engine.prototype.iteration = function() { var belated_timeout, current_frame, frame_interval, name, next_frame, overtime, scene, skipped_frames, _ref; frame_interval = 1000 / this.fps; current_frame = Date.now(); next_frame = current_frame + frame_interval; this.current_frame += 1; if (Math.floor(current_frame) > this.last_frameskip_collection) { this.frameskip = this.current_frameskip; this.current_frameskip = 0; this.last_frameskip_collection = Math.floor(current_frame); } this.updateEasings(); this.updateTimers(); _ref = this.scenes; for (name in _ref) { scene = _ref[name]; if (scene.active) { scene.iteration(); } } if (Date.now() < next_frame) { return setTimeout(this.iteration, next_frame - Date.now()); } else { overtime = Date.now() - next_frame; skipped_frames = Math.floor(overtime / frame_interval); this.current_frameskip += skipped_frames; this.current_frame += skipped_frames; this.skipTimers(skipped_frames); belated_timeout = overtime % frame_interval; return setTimeout(this.iteration, belated_timeout); } }; Engine.prototype.updateEasings = function() { var easing, _i, _len, _ref; _ref = this.easings; for (_i = 0, _len = _ref.length; _i < _len; _i++) { easing = _ref[_i]; if (this.current_frame >= (easing.start_frame + easing.duration)) { if (easing.infinite) { easing.start_frame = this.current_frame; easing.updateValue(this.current_frame); } else { easing.finished = true; easing.value = easing.end; } } else { easing.updateValue(this.current_frame); } } return this.easings = this.easings.filter(function(obj) { return !obj.finished; }); }; Engine.prototype.updateTimers = function() { var key, timer, timer_name, val, _i, _len, _ref, _ref1, _results; _ref = this.unnamed_timers.concat((function() { var _ref, _results; _ref = this.named_timers; _results = []; for (key in _ref) { val = _ref[key]; _results.push(val); } return _results; }).call(this)); for (_i = 0, _len = _ref.length; _i < _len; _i++) { timer = _ref[_i]; timer.step(); } this.unnamed_timers = this.unnamed_timers.filter(function(obj) { return !obj.finished; }); _ref1 = this.named_timers; _results = []; for (timer_name in _ref1) { timer = _ref1[timer_name]; if (timer.finished) { _results.push(delete this.named_timers[timer_name]); } else { _results.push(void 0); } } return _results; }; Engine.prototype.skipTimers = function(frames) { var key, timer, val, _i, _len, _ref, _results; _ref = this.unnamed_timers.concat((function() { var _ref, _results1; _ref = this.named_timers; _results1 = []; for (key in _ref) { val = _ref[key]; _results1.push(val); } return _results1; }).call(this)); _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { timer = _ref[_i]; _results.push(timer.skip(frames)); } return _results; }; Engine.prototype.setInitialScene = function(scene) { return this.initial_scene = scene; }; Engine.prototype.setPreloadScene = function(scene) { return this.preload_scene = scene; }; Engine.prototype.createScene = function(name) { var scene; scene = new Scene(this, name); if (this.initial_scene == null) { this.initial_scene = scene; } return this.scenes[name] = scene; }; Engine.prototype.createObject = function(name) { return this.objects[name] = new Object(this, name); }; Engine.prototype.createSound = function(name, sound) { return this.sounds[name] = new Sound(this, name, this.resource_manager.getSound(sound)); }; Engine.prototype.createSprite = function(name, image) { console.log("gget", this.resource_manager.getImage(image)); return this.sprites[name] = new Sprite(this, name, this.resource_manager.getImage(image)); }; Engine.prototype.createTileset = function(name, image, tile_width, tile_height) { return this.tilesets[name] = new Tileset(this, name, this.resource_manager.getImage(image), tile_width, tile_height); }; Engine.prototype.getScene = function(name) { if (typeof name === "string") { return this.scenes[name]; } else { return name; } }; Engine.prototype.getObject = function(name) { if (typeof name === "string") { return this.objects[name]; } else { return name; } }; Engine.prototype.getSound = function(name) { if (typeof name === "string") { return this.sounds[name]; } else { return name; } }; Engine.prototype.getSprite = function(name) { if (typeof name === "string") { return this.sprites[name]; } else { return name; } }; Engine.prototype.getTileset = function(name) { if (typeof name === "string") { return this.tilesets[name]; } else { return name; } }; return Engine; })(); Engine.prototype.draw = { _startPath: (function(_this) { return function(surface, options) { var _ref; surface = _this.getSurface(surface); if ((_ref = !options._is_text) != null ? _ref : false) { surface.beginPath(); } return surface; }; })(this), _finishPath: (function(_this) { return function(surface, options) { var _ref, _ref1, _ref10, _ref11, _ref12, _ref13, _ref14, _ref15, _ref16, _ref17, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9; if ((_ref = options.stroke) != null ? _ref : true) { surface.lineWidth = (_ref1 = (_ref2 = (_ref3 = (_ref4 = (_ref5 = options.lineWidth) != null ? _ref5.value : void 0) != null ? _ref4 : options.lineWidth) != null ? _ref3 : (_ref6 = options.pen) != null ? (_ref7 = _ref6.lineWidth) != null ? _ref7.value : void 0 : void 0) != null ? _ref2 : (_ref8 = options.pen) != null ? _ref8.lineWidth : void 0) != null ? _ref1 : 1; surface.strokeStyle = (_ref9 = (_ref10 = options.lineColor) != null ? _ref10 : (_ref11 = options.pen) != null ? _ref11.lineColor : void 0) != null ? _ref9 : "black"; if ((_ref12 = options._is_text) != null ? _ref12 : false) { surface.strokeText(options.text, options.x, options.y); } else { surface.stroke(); } } if ((_ref13 = options.fill) != null ? _ref13 : false) { surface.fillStyle = (_ref14 = (_ref15 = options.fillColor) != null ? _ref15 : (_ref16 = options.pen) != null ? _ref16.fillColor : void 0) != null ? _ref14 : "white"; if ((_ref17 = options._is_text) != null ? _ref17 : false) { return surface.fillText(options.text, options.x, options.y); } else { return surface.fill(); } } }; })(this), _getTextWidth: (function(_this) { return function(surface, text, options) { var width; _this._applyTextContext(surface, options); width = surface.measureText(text).width; surface.restore(); return width; }; })(this), _applyTextContext: (function(_this) { return function(surface, options) { var font_family, font_size, font_style, font_weight, scale, _ref, _ref1, _ref10, _ref11, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9; font_family = (_ref = options.font) != null ? _ref : "sans-serif"; font_size = (_ref1 = (_ref2 = (_ref3 = options.size) != null ? _ref3.value : void 0) != null ? _ref2 : options.size) != null ? _ref1 : 16; font_weight = (_ref4 = options.weight) != null ? _ref4 : "normal"; font_style = (_ref5 = options.style) != null ? _ref5 : "normal"; scale = (_ref6 = (_ref7 = (_ref8 = options.scale) != null ? _ref8.value : void 0) != null ? _ref7 : options.scale) != null ? _ref6 : 1; surface.save(); surface.font = "" + font_weight + " " + font_style + " " + font_size + "px '" + font_family + "'"; surface.globalAlpha = (_ref9 = (_ref10 = (_ref11 = options.alpha) != null ? _ref11.value : void 0) != null ? _ref10 : options.alpha) != null ? _ref9 : 1; return surface.scale(scale, scale); }; })(this), line: (function(_this) { return function(x1, y1, x2, y2, options, surface) { var _ref, _ref1, _ref2, _ref3; if (options == null) { options = {}; } if (surface == null) { surface = ""; } x1 = (_ref = x1.value) != null ? _ref : x1; y1 = (_ref1 = y1.value) != null ? _ref1 : y1; x2 = (_ref2 = x2.value) != null ? _ref2 : x2; y2 = (_ref3 = y2.value) != null ? _ref3 : y2; surface = _this._startPath(surface, options); surface.moveTo(x1, y1); surface.lineTo(x2, y2); return _this._finishPath(surface, options); }; })(this), rectangle: (function(_this) { return function(x1, y1, x2, y2, options, surface) { var _ref, _ref1, _ref2, _ref3; if (options == null) { options = {}; } if (surface == null) { surface = ""; } x1 = (_ref = x1.value) != null ? _ref : x1; y1 = (_ref1 = y1.value) != null ? _ref1 : y1; x2 = (_ref2 = x2.value) != null ? _ref2 : x2; y2 = (_ref3 = y2.value) != null ? _ref3 : y2; surface = _this._startPath(surface, options); surface.rect(x1, y1, x2 - x1, y2 - y1); return _this._finishPath(surface, options); }; })(this), boxEllipse: (function(_this) { return function(x1, y1, x2, y2, options, surface) { var rx, ry, x, y, _ref, _ref1, _ref2, _ref3; if (options == null) { options = {}; } if (surface == null) { surface = ""; } x1 = (_ref = x1.value) != null ? _ref : x1; y1 = (_ref1 = y1.value) != null ? _ref1 : y1; x2 = (_ref2 = x2.value) != null ? _ref2 : x2; y2 = (_ref3 = y2.value) != null ? _ref3 : y2; x = (x1 + x2) / 2; y = (y1 + y2) / 2; rx = (x2 - x1) / 2; ry = (y2 - y1) / 2; return _this.radiusEllipse(x, y, rx, ry, options, surface); }; })(this), radiusEllipse: (function(_this) { return function(x, y, rx, ry, options, surface) { var i, step, _i, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7; if (options == null) { options = {}; } if (surface == null) { surface = ""; } x = (_ref = x.value) != null ? _ref : x; y = (_ref1 = y.value) != null ? _ref1 : y; rx = (_ref2 = rx.value) != null ? _ref2 : rx; ry = (_ref3 = ry.value) != null ? _ref3 : ry; surface = _this._startPath(surface, options); step = (_ref4 = (_ref5 = (_ref6 = options.step) != null ? _ref6.value : void 0) != null ? _ref5 : options.step) != null ? _ref4 : 0.1; if (rx === ry) { surface.arc(x, y, rx, 0, 2 * Math.PI, false); } else { surface.moveTo(x + rx, y); for (i = _i = 0, _ref7 = Math.PI * 2 + step; 0 <= _ref7 ? _i <= _ref7 : _i >= _ref7; i = 0 <= _ref7 ? ++_i : --_i) { surface.lineTo(x + (Math.cos(i) * rx), y + (Math.sin(i) * ry)); } } return _this._finishPath(surface, options); }; })(this), boxPolygon: (function(_this) { return function(x1, y1, x2, y2, sides, options, surface) { if (options == null) { options = {}; } if (surface == null) { surface = ""; } return pass; }; })(this), radiusPolygon: (function(_this) { return function(x, y, r, sides, options, surface) { if (options == null) { options = {}; } if (surface == null) { surface = ""; } return pass; }; })(this), text: (function(_this) { return function(x, y, text, options, surface) { var text_width, _ref, _ref1, _ref2, _ref3, _ref4; if (options == null) { options = {}; } if (surface == null) { surface = ""; } x = (_ref = x.value) != null ? _ref : x; y = (_ref1 = y.value) != null ? _ref1 : y; if (options.alignment == null) { options.alignment = "left"; } options.scale = (_ref2 = (_ref3 = (_ref4 = options.scale) != null ? _ref4.value : void 0) != null ? _ref3 : options.scale) != null ? _ref2 : 1; options._is_text = true; options.text = text; options.y = y; if (options.fill == null) { options.fill = true; } if (options.fillColor == null) { options.fillColor = "black"; } if (options.stroke == null) { options.stroke = false; } if (alignment === "left") { options.x = x; } else { text_width = _this._getTextWidth(text, options); if (alignment === "center") { options.x = x - ((text_width / 2) * scale * scale); } else if (alignment === "right") { options.x = x - text_width; } } _this._startPath(surface, options); _this._finishPath(surface, options); return surface.restore(); }; })(this) }; Engine.prototype.ease = { _calculateElasticValues: (function(_this) { return function(amplitude, period, change, inout) { var overshoot; if (inout == null) { inout = false; } if (period == null) { if (inout) { period = duration * (0.3 * 1.5); } else { period = duration * 0.3; } } if ((amplitude == null) || amplitude < Math.abs(change)) { amplitude = change; overshoot = period / 4; } else { overshoot = period / (2 * Math.PI) * Math.asin(change / amplitude); } return [amplitude, period, change]; }; })(this), backIn: (function(_this) { return function(start, end, duration, infinite, overshoot) { if (infinite == null) { infinite = false; } if (overshoot == null) { overshoot = 1.70158; } return new Ease("backIn", infinite, start, end, _this.current_frame, duration, overshoot); }; })(this), backOut: (function(_this) { return function(start, end, duration, infinite, overshoot) { if (infinite == null) { infinite = false; } if (overshoot == null) { overshoot = 1.70158; } return new Ease("backOut", infinite, start, end, _this.current_frame, duration, overshoot); }; })(this), backInOut: (function(_this) { return function(start, end, duration, infinite, overshoot) { if (infinite == null) { infinite = false; } if (overshoot == null) { overshoot = 1.70158; } return new Ease("backInOut", infinite, start, end, _this.current_frame, duration, overshoot); }; })(this), bounceOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("bounceOut", infinite, start, end, _this.current_frame, duration); }; })(this), bounceIn: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("bounceIn", infinite, start, end, _this.current_frame, duration); }; })(this), bounceInOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("bounceInOut", infinite, start, end, _this.current_frame, duration); }; })(this), circOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("circOut", infinite, start, end, _this.current_frame, duration); }; })(this), circIn: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("circIn", infinite, start, end, _this.current_frame, duration); }; })(this), circInOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("circInOut", infinite, start, end, _this.current_frame, duration); }; })(this), cubicOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("cubicOut", infinite, start, end, _this.current_frame, duration); }; })(this), cubicIn: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("cubicIn", infinite, start, end, _this.current_frame, duration); }; })(this), cubicInOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("cubicInOut", infinite, start, end, _this.current_frame, duration); }; })(this), elasticOut: (function(_this) { return function(start, end, duration, infinite, amplitude, period) { var change, _ref; if (infinite == null) { infinite = false; } if (amplitude == null) { amplitude = null; } if (period == null) { period = null; } _ref = _this._calculateElasticValues(amplitude, period, end - start), amplitude = _ref[0], period = _ref[1], change = _ref[2]; end = start + change; return new Ease("elasticOut", infinite, start, end, _this.current_frame, duration); }; })(this), elasticIn: (function(_this) { return function(start, end, duration, infinite, amplitude, period) { var change, _ref; if (infinite == null) { infinite = false; } if (amplitude == null) { amplitude = null; } if (period == null) { period = null; } _ref = _this._calculateElasticValues(amplitude, period, end - start), amplitude = _ref[0], period = _ref[1], change = _ref[2]; end = start + change; return new Ease("elasticIn", infinite, start, end, _this.current_frame, duration); }; })(this), elasticInOut: (function(_this) { return function(start, end, duration, infinite, amplitude, period) { var change, _ref; if (infinite == null) { infinite = false; } if (amplitude == null) { amplitude = null; } if (period == null) { period = null; } _ref = _this._calculateElasticValues(amplitude, period, end - start, true), amplitude = _ref[0], period = _ref[1], change = _ref[2]; end = start + change; return new Ease("elasticInOut", infinite, start, end, _this.current_frame, duration); }; })(this), expoOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("expoOut", infinite, start, end, _this.current_frame, duration); }; })(this), expoIn: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("expoIn", infinite, start, end, _this.current_frame, duration); }; })(this), expoInOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("expoInOut", infinite, start, end, _this.current_frame, duration); }; })(this), linearNone: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("linearNone", infinite, start, end, _this.current_frame, duration); }; })(this), linearOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("linearNone", infinite, start, end, _this.current_frame, duration); }; })(this), linearIn: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("linearNone", infinite, start, end, _this.current_frame, duration); }; })(this), linearInOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("linearNone", infinite, start, end, _this.current_frame, duration); }; })(this), quadOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("quadOut", infinite, start, end, _this.current_frame, duration); }; })(this), quadIn: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("quadIn", infinite, start, end, _this.current_frame, duration); }; })(this), quadInOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("quadInOut", infinite, start, end, _this.current_frame, duration); }; })(this), quartOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("quartOut", infinite, start, end, _this.current_frame, duration); }; })(this), quartIn: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("quartIn", infinite, start, end, _this.current_frame, duration); }; })(this), quartInOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("quartInOut", infinite, start, end, _this.current_frame, duration); }; })(this), sineOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("sineOut", infinite, start, end, _this.current_frame, duration); }; })(this), sineIn: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("sineIn", infinite, start, end, _this.current_frame, duration); }; })(this), sineInOut: (function(_this) { return function(start, end, duration, infinite) { if (infinite == null) { infinite = false; } return new Ease("sineInOut", infinite, start, end, _this.current_frame, duration); }; })(this) }; Ease = (function() { function Ease() { var duration, end, infinite, params, start, start_frame, type; type = arguments[0], infinite = arguments[1], start = arguments[2], end = arguments[3], start_frame = arguments[4], duration = arguments[5], params = 7 <= arguments.length ? __slice.call(arguments, 6) : []; this.infinite = infinite; this.start = start; this.start_frame = start_frame; this.duration = duration; this.params = params; this.circInOut = __bind(this.circInOut, this); this.circOut = __bind(this.circOut, this); this.circIn = __bind(this.circIn, this); this.bounceInOut = __bind(this.bounceInOut, this); this.bounceIn = __bind(this.bounceIn, this); this.bounceOut = __bind(this.bounceOut, this); this.backInOut = __bind(this.backInOut, this); this.backOut = __bind(this.backOut, this); this.backIn = __bind(this.backIn, this); this.updateValue = __bind(this.updateValue, this); this.func = this[type]; this.change = end - this.start; this.value = this.start; this.finished = false; } Ease.prototype.updateValue = function(current_frame) { return this.value = this.func(current_frame - this.start_frame); }; Ease.prototype.backIn = function(time) { var overshoot; time = time / this.duration; overshoot = this.params[0]; return this.change * time * time * ((overshoot + 1) * time - overshoot) + this.start; }; Ease.prototype.backOut = function(time) { var overshoot; time = time / this.duration - 1; overshoot = this.params[0]; return this.change * (time * time * ((overshoot + 1) * time + overshoot) + 1) + this.start; }; Ease.prototype.backInOut = function(time) { var overshoot; time = time / (this.duration / 2); overshoot = this.params[0] * 1.525; if (time < 1) { return this.change / 2 * (time * time * ((overshoot + 1) * time - overshoot)) + this.start; } else { time -= 2; return this.change / 2 * (time * time * ((overshoot + 1) * time + overshoot) + 2) + this.start; } }; Ease.prototype.bounceOut = function(time, start) { if (start == null) { start = null; } time = time / this.duration; start = start != null ? start : this.start; if (time < 1 / 2.75) { return this.change * (7.5625 * time * time) + start; } else if (time < 2 / 2.75) { time = time - (1.5 / 2.75); return this.change * (7.5625 * time * time + 0.75) + start; } else if (time < 2.5 / 2.75) { time = time - (2.25 / 2.75); return this.change * (7.5625 * time * time + 0.9375) + start; } else { time = time - (2.625 / 2.75); return this.change * (7.5625 * time * time + 0.984375) + start; } }; Ease.prototype.bounceIn = function(time, start) { if (start == null) { start = null; } start = start != null ? start : this.start; return this.change - this.bounceOut(this.duration - time, 0) + start; }; Ease.prototype.bounceInOut = function(time) { if (time < this.duration / 2) { return this.bounceIn(time * 2, 0) + this.start; } else { return this.bounceOut(time * 2 - this.duration, 0) + this.start; } }; Ease.prototype.circIn = function(time) { time = time / this.duration; return -this.change * (Math.sqrt(1 - time * time) - 1) + this.start; }; Ease.prototype.circOut = function(time) { time = time / this.duration - 1; return this.change * Math.sqrt(1 - time * time) + this.start; }; Ease.prototype.circInOut = function(time) { time = time / (this.duration / 2); if (time < 1) { return -this.change / 2 * (Math.sqrt(1 - time * time) - 1) + this.start; } else { time = time - 2; return this.change / 2 * (Math.sqrt(1 - time * time) + 1) + this.begin; } }; return Ease; })(); Engine.prototype.random = { number: (function(_this) { return function(min, max, precision) { var base_number, rounding_factor, space; base_number = Math.random(); space = Math.abs(max - min); rounding_factor = 1 / (precision != null ? precision : 0.00000001); return Math.floor((min + (base_number * space)) * rounding_factor) / rounding_factor; }; })(this), pick: (function(_this) { return function() { var options; options = 1 <= arguments.length ? __slice.call(arguments, 0) : []; return options[Math.floor(Math.random() * options.length)]; }; })(this), string: (function(_this) { return function(length, alphabet) { var i; if (alphabet == null) { alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; } return ((function() { var _i, _ref, _results; _results = []; for (i = _i = 0, _ref = length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { _results.push(alphabet[Math.floor(Math.random() * alphabet.length)]); } return _results; })()).join(""); }; })(this) }; Engine.prototype.timing = { startTimer: (function(_this) { return function(frames, callback, name, repeat) { var timer; if (name == null) { name = null; } if (repeat == null) { repeat = false; } timer = new Timer(frames, callback, repeat); if (name != null) { return _this.named_timers[name] = timer; } else { return _this.unnamed_timers.push(timer); } }; })(this), stopTimer: (function(_this) { return function(name) { return _this.timers[name].stop(); }; })(this) }; Timer = (function() { function Timer(frames, callback, repeat) { this.frames = frames; this.callback = callback; this.repeat = repeat; this.stop = __bind(this.stop, this); this.skip = __bind(this.skip, this); this.step = __bind(this.step, this); this.current_frame = 0; this.finished = false; } Timer.prototype.step = function() { if (this.current_frame >= this.frames) { this.callback(); if (repeat) { return this.current_frame = 0; } else { return this.finished = true; } } }; Timer.prototype.skip = function(frames) { return this.current_frame += frames; }; Timer.prototype.stop = function() { return this.finished = true; }; return Timer; })(); Object = (function() { function Object(engine, name) { this.engine = engine; this.name = name; this.sprite = null; this.instances = []; this.x = 0; this.y = 0; } Object.prototype.callEvent = function(name, data) { var event_map, _ref, _ref1; if (data == null) { data = {}; } event_map = { mouseover: this.onMouseOver, mouseout: this.onMouseOut, create: this.onCreate, step: this.onStep }; switch (name) { case "draw": this.drawSelf((_ref = data.surface) != null ? _ref : ""); return typeof this.onDraw === "function" ? this.onDraw(data) : void 0; default: return (_ref1 = event_map[name]) != null ? _ref1.bind(this)(data) : void 0; } }; Object.prototype.drawSelf = function(surface) { return this.drawSprite(surface); }; Object.prototype.drawSprite = function(surface) { var _ref; if (surface == null) { surface = ""; } if ((this.sprite != null) && ((_ref = this.draw_sprite) != null ? _ref : "true")) { return this.sprite.draw(this.x, this.y, {}, surface); } }; Object.prototype.getBoundingBox = function() { var image_size, _ref; image_size = (_ref = this.sprite) != null ? _ref.getSize() : void 0; return { x1: this.x, x2: this.x + (image_size != null ? image_size.width : void 0), y1: this.y, y2: this.y + (image_size != null ? image_size.height : void 0) }; }; Object.prototype.getInstances = function() { return this.instances; }; Object.prototype.checkPointCollision = function(x, y) { var bounding_box; bounding_box = this.getBoundingBox(); return x >= (bounding_box != null ? bounding_box.x1 : void 0) && x <= (bounding_box != null ? bounding_box.x2 : void 0) && y >= (bounding_box != null ? bounding_box.y1 : void 0) && y <= (bounding_box != null ? bounding_box.y2 : void 0); }; return Object; })(); ResourceManager = (function() { function ResourceManager(base_path) { this.base_path = base_path != null ? base_path : ""; this.preload = __bind(this.preload, this); this.prepare = __bind(this.prepare, this); this.getImage = __bind(this.getImage, this); this.addSounds = __bind(this.addSounds, this); this.addScripts = __bind(this.addScripts, this); this.addImages = __bind(this.addImages, this); this.addScript = __bind(this.addScript, this); this.addSound = __bind(this.addSound, this); this.addImage = __bind(this.addImage, this); this.joinPath = __bind(this.joinPath, this); this.resources = { stage1_images: [], stage1_audio: [], stage1_scripts: [], images: [], audio: [], scripts: [] }; this.resource_objects = { images: {}, audio: {}, scripts: {} }; } ResourceManager.prototype.joinPath = function(path) { if (this.base_path === "") { return path; } else { return util.stripRight(this.base_path, "/") + "/" + path; } }; ResourceManager.prototype.addImage = function(path, first_stage) { if (first_stage == null) { first_stage = false; } if (first_stage) { return this.resources.stage1_images.push(this.joinPath(path)); } else { return this.resources.images.push(this.joinPath(path)); } }; ResourceManager.prototype.addSound = function(path, first_stage) { if (first_stage == null) { first_stage = false; } if (first_stage) { return this.resources.stage1_audio.push(this.joinPath(path)); } else { return this.resources.audio.push(this.joinPath(path)); } }; ResourceManager.prototype.addScript = function(path, first_stage) { if (first_stage == null) { first_stage = false; } if (first_stage) { return this.resources.stage1_scripts.push(this.joinPath(path)); } else { return this.resources.scripts.push(this.joinPath(path)); } }; ResourceManager.prototype.addImages = function(paths, first_stage) { var path, _i, _len, _results; if (first_stage == null) { first_stage = false; } _results = []; for (_i = 0, _len = paths.length; _i < _len; _i++) { path = paths[_i]; _results.push(this.addImage(path, first_stage)); } return _results; }; ResourceManager.prototype.addScripts = function(paths, first_stage) { var path, _i, _len, _results; if (first_stage == null) { first_stage = false; } _results = []; for (_i = 0, _len = paths.length; _i < _len; _i++) { path = paths[_i]; _results.push(this.addScript(path, first_stage)); } return _results; }; ResourceManager.prototype.addSounds = function(paths, first_stage) { var path, _i, _len, _results; if (first_stage == null) { first_stage = false; } _results = []; for (_i = 0, _len = paths.length; _i < _len; _i++) { path = paths[_i]; _results.push(this.addSound(path, first_stage)); } return _results; }; ResourceManager.prototype.getImage = function(path) { console.log("objs", this.resource_objects); console.log("path", path); return this.resource_objects.images[this.joinPath(path)]; }; ResourceManager.prototype.prepare = function(finished_callback) { if (finished_callback == null) { finished_callback = (function() {}); } return pass; }; ResourceManager.prototype.preload = function(progress_callback, finished_callback) { var image, obj, _i, _len, _ref; if (progress_callback == null) { progress_callback = (function() {}); } if (finished_callback == null) { finished_callback = (function() {}); } _ref = this.resources.images; for (_i = 0, _len = _ref.length; _i < _len; _i++) { image = _ref[_i]; obj = document.createElement("img"); obj.src = image; this.resource_objects.images[image] = obj; } return finished_callback(); }; return ResourceManager; })(); Scene = (function() { function Scene(engine, name) { this.engine = engine; this.name = name; this.changeScene = __bind(this.changeScene, this); this.createInstance = __bind(this.createInstance, this); this.checkMouseCollisions = __bind(this.checkMouseCollisions, this); this.redraw = __bind(this.redraw, this); this.iteration = __bind(this.iteration, this); this.checkActive = __bind(this.checkActive, this); this.removeTargetSurface = __bind(this.removeTargetSurface, this); this.addTargetSurface = __bind(this.addTargetSurface, this); this.instances = {}; this.surfaces = []; this.dirty = true; this.last_instance_id = 100; this.active = false; this.width = 800; this.height = 600; this.last_width = 800; this.last_height = 600; } Scene.prototype.addTargetSurface = function(surface) { this.surfaces.push(surface); this.engine.updateCanvasSize(surface, this.width, this.height); $(surface).on("mousemove.radium", (function(_this) { return function(event) { var canvas_pos; canvas_pos = surface.getBoundingClientRect(); _this.mouse_x = (event.clientX - canvas_pos.left) | 0; _this.mouse_y = (event.clientY - canvas_pos.top) | 0; return _this.checkMouseCollisions(); }; })(this)); return this.checkActive(); }; Scene.prototype.removeTargetSurface = function(surface) { this.surfaces = this.surfaces.filter(function(obj) { return obj !== surface; }); $(surface).off("mousemove.radium"); return this.checkActive(); }; Scene.prototype.checkActive = function() { return this.active = this.surfaces.length > 0; }; Scene.prototype.iteration = function() { var id, instance, surface, _i, _len, _ref, _ref1, _ref2; if (this.width !== this.last_width || this.height !== this.last_height) { _ref = this.surfaces; for (_i = 0, _len = _ref.length; _i < _len; _i++) { surface = _ref[_i]; this.engine.updateCanvasSize(surface, this.width, this.height); } _ref1 = [this.width, this.height], this.last_width = _ref1[0], this.last_height = _ref1[1]; } _ref2 = this.instances; for (id in _ref2) { instance = _ref2[id]; if (instance.callEvent("step")) { this.dirty = true; } } if (this.dirty) { this.redraw(); return this.dirty = false; } }; Scene.prototype.redraw = function() { var ctx, id, instance, surface, _i, _len, _ref, _results; _ref = this.surfaces; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { surface = _ref[_i]; ctx = this.engine.getSurface(surface); ctx.clearRect(0, 0, surface.width, surface.height); _results.push((function() { var _ref1, _results1; _ref1 = this.instances; _results1 = []; for (id in _ref1) { instance = _ref1[id]; _results1.push(instance.callEvent("draw", { surface: surface })); } return _results1; }).call(this)); } return _results; }; Scene.prototype.checkMouseCollisions = function() { var collision, id, instance, _ref, _results; _ref = this.instances; _results = []; for (id in _ref) { instance = _ref[id]; collision = instance.checkPointCollision(this.mouse_x, this.mouse_y); if (collision && !instance._moused_over) { instance.callEvent("mouseover"); _results.push(instance._moused_over = true); } else if (!collision && instance._moused_over) { instance.callEvent("mouseout"); _results.push(instance._moused_over = false); } else { _results.push(void 0); } } return _results; }; Scene.prototype.createInstance = function(object, x, y) { var id, instance, real_object; if (x == null) { x = 0; } if (y == null) { y = 0; } id = this.last_instance_id += 1; real_object = this.engine.getObject(object); instance = window.Object.create(real_object); instance.x = x; instance.y = y; instance.id = id; instance.scene = this; this.instances[id] = instance; real_object.instances.push(instance); instance.callEvent("create"); return instance; }; Scene.prototype.changeScene = function(scene) { return pass; }; return Scene; })(); Sound = (function() { function Sound() {} return Sound; })(); Sprite = (function() { function Sprite(engine, name, image) { this.engine = engine; this.name = name; this.image = image; this.getSize = __bind(this.getSize, this); this.draw = __bind(this.draw, this); pass; } Sprite.prototype.draw = function(x, y, options, surface) { var _ref; if (options == null) { options = {}; } if (surface == null) { surface = ""; } surface = this.engine.getSurface(surface); surface.globalAlpha = (_ref = options.alpha) != null ? _ref : 1; return surface.drawImage(this.image, x, y); }; Sprite.prototype.getSize = function() { return { width: this.image.width, height: this.image.height }; }; return Sprite; })(); Tileset = (function() { function Tileset(engine, name, image, tile_width, tile_height) { this.engine = engine; this.name = name; this.image = image; this.tile_width = tile_width; this.tile_height = tile_height; this.tile = __bind(this.tile, this); this.tiles = {}; } Tileset.prototype.tile = function(x, y, precise, w, h) { var key, _ref; if (precise == null) { precise = false; } if (w == null) { w = 0; } if (h == null) { h = 0; } key = ("" + x + "/" + y + "/" + w + "/" + h + "/") + (precise ? 1 : 0); return (_ref = this.tiles[key]) != null ? _ref : tiles[key] = new TilesetTile(this.engine, this, x, y, precise, w, h); }; return Tileset; })(); TilesetTile = (function() { function TilesetTile(engine, tileset, x, y, precise, w, h) { this.engine = engine; this.tileset = tileset; this.x = x; this.y = y; this.precise = precise != null ? precise : false; this.w = w != null ? w : 0; this.h = h != null ? h : 0; this.getSize = __bind(this.getSize, this); this.draw = __bind(this.draw, this); pass; } TilesetTile.prototype.draw = function(x, y) { var source_h, source_w, source_x, source_y, surface; if (this.precise) { source_x = this.x; source_y = this.y; source_w = this.w; source_h = this.h; } else { source_x = this.x * this.tileset.tile_width; source_y = this.y * this.tileset.tile_height; source_w = this.tileset.tile_width; source_h = this.tileset.tile_height; } surface = this.engine.getSurface(); return surface.drawImage(source_x, source_y, source_width, source_height, x, y); }; TilesetTile.prototype.getSize = function() { if (this.precise) { return { width: this.w, height: this.h }; } else { return { width: this.tileset.tile_width, height: this.tileset.tile_height }; } }; return TilesetTile; })(); util = { stripRight: function(string, character) { return string.replace(new RegExp(character + "*$", "g"), ""); }, unpackElement: function(element) { console.log(element); if (element instanceof jQuery) { return element[0]; } else { return element; } } }; window.ResourceManager = ResourceManager; window.Engine = Engine; }).call(this);