|
|
@ -0,0 +1,894 @@ |
|
|
|
// Generated by CoffeeScript 1.7.1
|
|
|
|
(function() { |
|
|
|
var Engine, Object, ResourceManager, Scene, Sound, Sprite, Tileset, TilesetTile, 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.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.scenes = {}; |
|
|
|
this.objects = {}; |
|
|
|
this.sounds = {}; |
|
|
|
this.sprites = {}; |
|
|
|
this.tilesets = {}; |
|
|
|
} |
|
|
|
|
|
|
|
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, _ref; |
|
|
|
frame_interval = 1000 / this.fps; |
|
|
|
current_frame = Date.now(); |
|
|
|
next_frame = current_frame + frame_interval; |
|
|
|
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); |
|
|
|
} |
|
|
|
_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; |
|
|
|
this.current_frameskip += Math.floor(overtime / frame_interval); |
|
|
|
belated_timeout = overtime % frame_interval; |
|
|
|
return setTimeout(this.iteration, belated_timeout); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
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, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9; |
|
|
|
if ((_ref = options.stroke) != null ? _ref : true) { |
|
|
|
surface.lineWidth = (_ref1 = (_ref2 = options.lineWidth) != null ? _ref2 : (_ref3 = options.pen) != null ? _ref3.lineWidth : void 0) != null ? _ref1 : 1; |
|
|
|
surface.strokeStyle = (_ref4 = (_ref5 = options.lineColor) != null ? _ref5 : (_ref6 = options.pen) != null ? _ref6.lineColor : void 0) != null ? _ref4 : "black"; |
|
|
|
if ((_ref7 = options._is_text) != null ? _ref7 : false) { |
|
|
|
surface.strokeText(options.text, options.x, options.y); |
|
|
|
} else { |
|
|
|
surface.stroke(); |
|
|
|
} |
|
|
|
} |
|
|
|
if ((_ref8 = options.fill) != null ? _ref8 : false) { |
|
|
|
surface.fillStyle = (_ref9 = (_ref10 = options.fillColor) != null ? _ref10 : (_ref11 = options.pen) != null ? _ref11.fillColor : void 0) != null ? _ref9 : "white"; |
|
|
|
if ((_ref12 = options._is_text) != null ? _ref12 : 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, _ref2, _ref3, _ref4, _ref5; |
|
|
|
font_family = (_ref = options.font) != null ? _ref : "sans-serif"; |
|
|
|
font_size = (_ref1 = options.size) != null ? _ref1 : 16; |
|
|
|
font_weight = (_ref2 = options.weight) != null ? _ref2 : "normal"; |
|
|
|
font_style = (_ref3 = options.style) != null ? _ref3 : "normal"; |
|
|
|
scale = (_ref4 = options.scale) != null ? _ref4 : 1; |
|
|
|
surface.save(); |
|
|
|
surface.font = "" + font_weight + " " + font_style + " " + font_size + "px '" + font_family + "'"; |
|
|
|
surface.globalAlpha = (_ref5 = options.alpha) != null ? _ref5 : 1; |
|
|
|
return surface.scale(scale, scale); |
|
|
|
}; |
|
|
|
})(this), |
|
|
|
line: (function(_this) { |
|
|
|
return function(x1, y1, x2, y2, options, surface) { |
|
|
|
if (options == null) { |
|
|
|
options = {}; |
|
|
|
} |
|
|
|
if (surface == null) { |
|
|
|
surface = ""; |
|
|
|
} |
|
|
|
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) { |
|
|
|
if (options == null) { |
|
|
|
options = {}; |
|
|
|
} |
|
|
|
if (surface == null) { |
|
|
|
surface = ""; |
|
|
|
} |
|
|
|
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; |
|
|
|
if (options == null) { |
|
|
|
options = {}; |
|
|
|
} |
|
|
|
if (surface == null) { |
|
|
|
surface = ""; |
|
|
|
} |
|
|
|
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; |
|
|
|
if (options == null) { |
|
|
|
options = {}; |
|
|
|
} |
|
|
|
if (surface == null) { |
|
|
|
surface = ""; |
|
|
|
} |
|
|
|
surface = _this._startPath(surface, options); |
|
|
|
step = (_ref = options.step) != null ? _ref : 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, _ref1 = Math.PI * 2 + step; 0 <= _ref1 ? _i <= _ref1 : _i >= _ref1; i = 0 <= _ref1 ? ++_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; |
|
|
|
if (options == null) { |
|
|
|
options = {}; |
|
|
|
} |
|
|
|
if (surface == null) { |
|
|
|
surface = ""; |
|
|
|
} |
|
|
|
if (options.alignment == null) { |
|
|
|
options.alignment = "left"; |
|
|
|
} |
|
|
|
if (options.scale == null) { |
|
|
|
options.scale = 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.random = { |
|
|
|
number: (function(_this) { |
|
|
|
return function(min, max, precision) { |
|
|
|
var base_number, rounding_factor, space; |
|
|
|
base_number = Math.random(); |
|
|
|
space = Math.abs(ceiling - floor); |
|
|
|
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) |
|
|
|
}; |
|
|
|
|
|
|
|
Object = (function() { |
|
|
|
function Object(engine, name) { |
|
|
|
this.engine = engine; |
|
|
|
this.name = name; |
|
|
|
this.checkPointCollision = __bind(this.checkPointCollision, this); |
|
|
|
this.getBoundingBox = __bind(this.getBoundingBox, this); |
|
|
|
this.drawSprite = __bind(this.drawSprite, this); |
|
|
|
this.drawSelf = __bind(this.drawSelf, this); |
|
|
|
this.callEvent = __bind(this.callEvent, this); |
|
|
|
this.sprite = null; |
|
|
|
this.x = 0; |
|
|
|
this.y = 0; |
|
|
|
} |
|
|
|
|
|
|
|
Object.prototype.callEvent = function(name, data) { |
|
|
|
var _ref; |
|
|
|
if (data == null) { |
|
|
|
data = {}; |
|
|
|
} |
|
|
|
switch (name) { |
|
|
|
case "create": |
|
|
|
return typeof this.onCreate === "function" ? this.onCreate(data) : void 0; |
|
|
|
case "step": |
|
|
|
return typeof this.onStep === "function" ? this.onStep(data) : void 0; |
|
|
|
case "draw": |
|
|
|
this.drawSelf((_ref = data.surface) != null ? _ref : ""); |
|
|
|
return typeof this.onDraw === "function" ? this.onDraw(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.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; |
|
|
|
} |
|
|
|
|
|
|
|
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 = Math.floor(event.clientX - canvas_pos.left); |
|
|
|
_this.mouse_y = Math.floor(event.clientY - canvas_pos.top); |
|
|
|
$("#debug").html("" + _this.mouse_x + " / " + _this.mouse_y); |
|
|
|
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 id, instance, _ref, _results; |
|
|
|
_ref = this.instances; |
|
|
|
_results = []; |
|
|
|
for (id in _ref) { |
|
|
|
instance = _ref[id]; |
|
|
|
if (instance.checkPointCollision(this.mouseX, this.mouseY)) { |
|
|
|
_results.push(instance.callEvent("mouseover")); |
|
|
|
} else { |
|
|
|
_results.push(void 0); |
|
|
|
} |
|
|
|
} |
|
|
|
return _results; |
|
|
|
}; |
|
|
|
|
|
|
|
Scene.prototype.createInstance = function(object, x, y) { |
|
|
|
var id, instance; |
|
|
|
if (x == null) { |
|
|
|
x = 0; |
|
|
|
} |
|
|
|
if (y == null) { |
|
|
|
y = 0; |
|
|
|
} |
|
|
|
id = this.last_instance_id += 1; |
|
|
|
instance = window.Object.create(this.engine.getObject(object)); |
|
|
|
instance.x = x; |
|
|
|
instance.y = y; |
|
|
|
instance.id = id; |
|
|
|
instance.scene = this; |
|
|
|
this.instances[id] = 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); |