mirror of
https://github.com/simon987/Much-Assembly-Required-Frontend.git
synced 2025-04-10 14:26:44 +00:00
258 lines
12 KiB
JavaScript
258 lines
12 KiB
JavaScript
var __extends = (this && this.__extends) || (function () {
|
||
var extendStatics = Object.setPrototypeOf ||
|
||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
||
return function (d, b) {
|
||
extendStatics(d, b);
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
})();
|
||
var MarGame = (function () {
|
||
function MarGame() {
|
||
this.cursorPos = new Phaser.Plugin.Isometric.Point3();
|
||
this.debugMessages = [];
|
||
this.animationFrames = {};
|
||
var self = this;
|
||
this.game = new Phaser.Game(RENDERER_WIDTH, RENDERER_HEIGHT, Phaser.AUTO, 'game', null, true, false);
|
||
this.bootState = {
|
||
preload: function () {
|
||
if (DEBUG) {
|
||
console.log("[MAR] Loading sprites.png as JSONHash");
|
||
}
|
||
this.game.load.atlasJSONHash("sheet", "./mar/sprites.png", "./mar/sprites.json").onLoadComplete.add(function () {
|
||
self.game.time.advancedTiming = true;
|
||
//Add and enable the isometric plug-in.
|
||
if (DEBUG) {
|
||
console.log("[MAR] Enabling isometric plugin");
|
||
}
|
||
self.game.plugins.add(new Phaser.Plugin.Isometric(self.game));
|
||
// This is used to set a game canvas-based offset for the 0, 0, 0 isometric coordinate - by default
|
||
// this point would be at screen coordinates 0, 0 (top left) which is usually undesirable.
|
||
self.game.iso.anchor.setTo(0.5, 0);
|
||
//Todo: set world size based on window size?
|
||
self.game.world.setBounds(0, 0, 2200, 1100);
|
||
//Make camera more or less centered (tested on 1080 screen)
|
||
self.game.camera.x = 280;
|
||
self.game.camera.y = 90;
|
||
self.game.scale.scaleMode = Phaser.ScaleManager.RESIZE;
|
||
self.game.scale.pageAlignHorizontally = true;
|
||
self.game.scale.pageAlignVertically = true;
|
||
self.game.stage.disableVisibilityChange = true;
|
||
self.client = new GameClient();
|
||
//Grab focus when clicked (For chrome, Opera)
|
||
self.game.input.onDown.add(function () {
|
||
document.getElementById("game").focus();
|
||
if (DEBUG) {
|
||
console.log("Grabbed focus of #game");
|
||
}
|
||
});
|
||
self.isoGroup = mar.game.add.group();
|
||
self.textGroup = mar.game.add.group();
|
||
self.hudGroup = mar.game.add.group();
|
||
self.hudGroup.fixedToCamera = true;
|
||
});
|
||
},
|
||
create: function () {
|
||
console.log("[MAR] create");
|
||
self.initialiseAnimations();
|
||
self.initialiseStaticHud();
|
||
},
|
||
update: function () {
|
||
self.game.scale.refresh();
|
||
// Update the cursor position.
|
||
self.game.iso.unproject(self.game.input.activePointer.position, self.cursorPos);
|
||
// Loop through all tiles and test to see if the 3D position from above intersects with the automatically generated IsoSprite tile bounds.
|
||
self.isoGroup.forEach(function (tile) {
|
||
if (tile instanceof Tile) {
|
||
var inBounds = tile.isoBounds.containsXY(self.cursorPos.x, self.cursorPos.y);
|
||
// If it does, do a little animation and tint change.
|
||
if (!tile.selected && inBounds) {
|
||
tile.selected = true;
|
||
tile.onHover();
|
||
//Dispatch tile over
|
||
self.isoGroup.forEach(function (obj) {
|
||
if (obj instanceof GameObject && obj.onTileHover != undefined && obj.isAt(tile.tileX, tile.tileY)) {
|
||
obj.onTileHover();
|
||
}
|
||
}, 1);
|
||
}
|
||
else if (tile.selected && !inBounds) {
|
||
tile.selected = false;
|
||
tile.onExit();
|
||
//Dispatch tile exit
|
||
self.isoGroup.forEach(function (obj) {
|
||
if (obj.onTileExit != undefined && obj.isAt(tile.tileX, tile.tileY)) {
|
||
obj.onTileExit();
|
||
}
|
||
}, 0);
|
||
}
|
||
}
|
||
}, 0);
|
||
//Enable dragging the camera
|
||
if (this.game.input.activePointer.isDown) {
|
||
if (this.game.origDragPoint) {
|
||
// move the camera by the amount the mouse has moved since last update
|
||
this.game.camera.x += this.game.origDragPoint.x - this.game.input.activePointer.position.x;
|
||
this.game.camera.y += this.game.origDragPoint.y - this.game.input.activePointer.position.y;
|
||
}
|
||
// set new drag origin to current position
|
||
this.game.origDragPoint = this.game.input.activePointer.position.clone();
|
||
}
|
||
else {
|
||
this.game.origDragPoint = null;
|
||
}
|
||
self.game.iso.topologicalSort(self.isoGroup);
|
||
},
|
||
render: function () {
|
||
for (var i = 0; i < self.debugMessages.length; i++) {
|
||
self.game.debug.text(self.debugMessages[i].getMessage(), self.debugMessages[i].x, self.debugMessages[i].y);
|
||
}
|
||
}
|
||
};
|
||
this.game.state.add('Boot', this.bootState);
|
||
this.game.state.start('Boot');
|
||
}
|
||
MarGame.prototype.addDebugMessage = function (debugMsg) {
|
||
this.debugMessages.push(debugMsg);
|
||
};
|
||
MarGame.prototype.initialiseAnimations = function () {
|
||
//Walk =-------------------------------------------------------
|
||
//East
|
||
this.animationFrames.walk_e_start = [];
|
||
for (var i = 0; i < 10; i++) {
|
||
this.animationFrames.walk_e_start.push("cubot/walk_e/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.walk_e = [];
|
||
for (var i = 10; i < 30; i++) {
|
||
this.animationFrames.walk_e.push("cubot/walk_e/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.harvester_walk_e_start = [];
|
||
for (var i = 0; i < 10; i++) {
|
||
this.animationFrames.harvester_walk_e_start.push("harvester/walk_e/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.harvester_walk_e = [];
|
||
for (var i = 10; i < 30; i++) {
|
||
this.animationFrames.harvester_walk_e.push("harvester/walk_e/" + ("0000" + i).slice(-4));
|
||
}
|
||
//North
|
||
this.animationFrames.walk_n_start = [];
|
||
for (var i = 0; i < 10; i++) {
|
||
this.animationFrames.walk_n_start.push("cubot/walk_n/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.walk_n = [];
|
||
for (var i = 10; i < 30; i++) {
|
||
this.animationFrames.walk_n.push("cubot/walk_n/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.harvester_walk_n_start = [];
|
||
for (var i = 0; i < 10; i++) {
|
||
this.animationFrames.harvester_walk_n_start.push("harvester/walk_n/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.harvester_walk_n = [];
|
||
for (var i = 10; i < 30; i++) {
|
||
this.animationFrames.harvester_walk_n.push("harvester/walk_n/" + ("0000" + i).slice(-4));
|
||
}
|
||
//South
|
||
this.animationFrames.walk_s_start = [];
|
||
for (var i = 0; i < 10; i++) {
|
||
this.animationFrames.walk_s_start.push("cubot/walk_s/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.walk_s = [];
|
||
for (var i = 10; i < 30; i++) {
|
||
this.animationFrames.walk_s.push("cubot/walk_s/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.harvester_walk_s_start = [];
|
||
for (var i = 0; i < 10; i++) {
|
||
this.animationFrames.harvester_walk_s_start.push("harvester/walk_s/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.harvester_walk_s = [];
|
||
for (var i = 10; i < 30; i++) {
|
||
this.animationFrames.harvester_walk_s.push("harvester/walk_s/" + ("0000" + i).slice(-4));
|
||
}
|
||
//West
|
||
this.animationFrames.walk_w_start = [];
|
||
for (var i = 0; i < 10; i++) {
|
||
this.animationFrames.walk_w_start.push("cubot/walk_w/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.walk_w = [];
|
||
for (var i = 10; i < 30; i++) {
|
||
this.animationFrames.walk_w.push("cubot/walk_w/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.harvester_walk_w_start = [];
|
||
for (var i = 0; i < 10; i++) {
|
||
this.animationFrames.harvester_walk_w_start.push("harvester/walk_w/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.harvester_walk_w = [];
|
||
for (var i = 10; i < 30; i++) {
|
||
this.animationFrames.harvester_walk_w.push("harvester/walk_w/" + ("0000" + i).slice(-4));
|
||
}
|
||
//Dig =-------------------------------------------------------
|
||
this.animationFrames.dig_e = [];
|
||
for (var i = 1; i <= 41; i++) {
|
||
this.animationFrames.dig_e.push("cubot/dig_e/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.dig_n = [];
|
||
for (var i = 1; i <= 41; i++) {
|
||
this.animationFrames.dig_n.push("cubot/dig_n/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.dig_s = [];
|
||
for (var i = 1; i <= 41; i++) {
|
||
this.animationFrames.dig_s.push("cubot/dig_s/" + ("0000" + i).slice(-4));
|
||
}
|
||
this.animationFrames.dig_w = [];
|
||
for (var i = 1; i <= 41; i++) {
|
||
this.animationFrames.dig_w.push("cubot/dig_w/" + ("0000" + i).slice(-4));
|
||
}
|
||
//Biomass =-------------------------------------------------------
|
||
this.animationFrames.biomassIdle = [];
|
||
for (var i = 1; i < 60; i++) {
|
||
this.animationFrames.biomassIdle.push("objects/biomass/idle/" + ("0000" + i).slice(-4));
|
||
}
|
||
};
|
||
MarGame.prototype.initialiseStaticHud = function () {
|
||
this.game.add.sprite(0, this.game.camera.height - 150, "sheet", "ui/compass", this.hudGroup);
|
||
this.addDebugMessage(new WorldIndicator(10, 20));
|
||
this.tileIndicator = new TileIndicator(10, 40);
|
||
this.addDebugMessage(this.tileIndicator);
|
||
};
|
||
return MarGame;
|
||
}());
|
||
var DebugMessage = (function () {
|
||
function DebugMessage(x, y) {
|
||
this.x = x;
|
||
this.y = y;
|
||
}
|
||
return DebugMessage;
|
||
}());
|
||
var TileIndicator = (function (_super) {
|
||
__extends(TileIndicator, _super);
|
||
function TileIndicator() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
TileIndicator.prototype.getMessage = function () {
|
||
if (this.tileType != undefined) {
|
||
return this.tileX + ", " + this.tileY + " : " + this.tileType;
|
||
}
|
||
else {
|
||
return "";
|
||
}
|
||
};
|
||
return TileIndicator;
|
||
}(DebugMessage));
|
||
var WorldIndicator = (function (_super) {
|
||
__extends(WorldIndicator, _super);
|
||
function WorldIndicator() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
WorldIndicator.prototype.getMessage = function () {
|
||
if (mar.world != undefined) {
|
||
return "World: (" + Number(mar.client.worldX).toString(16).toUpperCase() + ", " +
|
||
Number(mar.client.worldY).toString(16).toUpperCase() + ")";
|
||
}
|
||
else {
|
||
return "Loading...";
|
||
}
|
||
};
|
||
return WorldIndicator;
|
||
}(DebugMessage));
|