mirror of
https://github.com/simon987/Much-Assembly-Required-Frontend.git
synced 2025-04-10 14:26:44 +00:00
467 lines
18 KiB
JavaScript
467 lines
18 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 ObjectType;
|
|
(function (ObjectType) {
|
|
ObjectType[ObjectType["CUBOT"] = 1] = "CUBOT";
|
|
ObjectType[ObjectType["BIOMASS"] = 2] = "BIOMASS";
|
|
ObjectType[ObjectType["HARVESTER_NPC"] = 10] = "HARVESTER_NPC";
|
|
ObjectType[ObjectType["FACTORY"] = 3] = "FACTORY";
|
|
ObjectType[ObjectType["RADIO_TOWER"] = 4] = "RADIO_TOWER";
|
|
})(ObjectType || (ObjectType = {}));
|
|
var ItemType;
|
|
(function (ItemType) {
|
|
ItemType[ItemType["BIOMASS"] = 1] = "BIOMASS";
|
|
ItemType[ItemType["IRON"] = 3] = "IRON";
|
|
ItemType[ItemType["COPPER"] = 4] = "COPPER";
|
|
})(ItemType || (ItemType = {}));
|
|
var Action;
|
|
(function (Action) {
|
|
Action[Action["IDLE"] = 0] = "IDLE";
|
|
Action[Action["DIGGING"] = 1] = "DIGGING";
|
|
Action[Action["WALKING"] = 2] = "WALKING";
|
|
Action[Action["WITHDRAWING"] = 3] = "WITHDRAWING";
|
|
Action[Action["DEPOSITING"] = 4] = "DEPOSITING";
|
|
Action[Action["LISTENING"] = 5] = "LISTENING";
|
|
Action[Action["JUMPING"] = 6] = "JUMPING";
|
|
})(Action || (Action = {}));
|
|
var GameObject = (function (_super) {
|
|
__extends(GameObject, _super);
|
|
function GameObject(x, y, z, key, frame) {
|
|
return _super.call(this, mar.game, x, y, z, key, frame) || this;
|
|
}
|
|
/**
|
|
* Factory method for GameObjects
|
|
*/
|
|
GameObject.createObject = function (json) {
|
|
switch (json.t) {
|
|
case ObjectType.CUBOT:
|
|
return new Cubot(json);
|
|
case ObjectType.BIOMASS:
|
|
return new BiomassBlob(json);
|
|
case ObjectType.HARVESTER_NPC:
|
|
return new HarvesterNPC(json);
|
|
case ObjectType.FACTORY:
|
|
return new Factory(json);
|
|
case ObjectType.RADIO_TOWER:
|
|
return new RadioTower(json);
|
|
default:
|
|
return null;
|
|
}
|
|
};
|
|
/**
|
|
* Set text that will appear on top of the object. Usually used for hover text
|
|
*/
|
|
GameObject.prototype.setText = function (text) {
|
|
this.text = mar.game.make.text(0, 0, text, {
|
|
fontSize: 22,
|
|
fill: config.textFill,
|
|
stroke: config.textStroke,
|
|
strokeThickness: 2,
|
|
font: "fixedsys"
|
|
});
|
|
this.text.anchor.set(0.5, 0);
|
|
this.addChild(this.text);
|
|
};
|
|
/**
|
|
* Tested to trigger onTileHover and onTileExit
|
|
*/
|
|
GameObject.prototype.isAt = function (x, y) {
|
|
return x == this.tileX && y == this.tileY;
|
|
};
|
|
return GameObject;
|
|
}(Phaser.Plugin.Isometric.IsoSprite));
|
|
var HologramMode;
|
|
(function (HologramMode) {
|
|
HologramMode[HologramMode["CLEARED"] = 0] = "CLEARED";
|
|
HologramMode[HologramMode["HEX"] = 1] = "HEX";
|
|
HologramMode[HologramMode["STRING"] = 2] = "STRING";
|
|
HologramMode[HologramMode["DEC"] = 3] = "DEC";
|
|
})(HologramMode || (HologramMode = {}));
|
|
var Cubot = (function (_super) {
|
|
__extends(Cubot, _super);
|
|
function Cubot(json) {
|
|
var _this = _super.call(this, Util.getIsoX(json.x), Util.getIsoY(json.y), 15, "sheet", null) || this;
|
|
/**
|
|
* List of animation functions queued for execution.
|
|
*/
|
|
_this.queuedAnimations = [];
|
|
_this.hovered = false;
|
|
if (DEBUG) {
|
|
console.log("Creating Cubot object");
|
|
}
|
|
_this.anchor.set(0.5, 0);
|
|
_this.id = json.i;
|
|
_this.tileX = json.x;
|
|
_this.tileY = json.y;
|
|
_this.username = json.parent;
|
|
_this.heldItem = json.heldItem;
|
|
_this.direction = json.direction;
|
|
_this.action = json.action;
|
|
_this.energy = json.energy;
|
|
_this.animations.add("walk_w", mar.animationFrames.walk_w);
|
|
_this.animations.add("walk_s", mar.animationFrames.walk_s);
|
|
_this.animations.add("walk_e", mar.animationFrames.walk_e);
|
|
_this.animations.add("walk_n", mar.animationFrames.walk_n);
|
|
_this.animations.add("dig_w", mar.animationFrames.dig_w);
|
|
_this.animations.add("dig_s", mar.animationFrames.dig_s);
|
|
_this.animations.add("dig_e", mar.animationFrames.dig_e);
|
|
_this.animations.add("dig_n", mar.animationFrames.dig_n);
|
|
_this.createUsername();
|
|
_this.updateDirection();
|
|
_this.tint = _this.getTint();
|
|
return _this;
|
|
}
|
|
Cubot.prototype.onTileHover = function () {
|
|
mar.game.add.tween(this).to({ isoZ: 45 }, 200, Phaser.Easing.Quadratic.InOut, true);
|
|
mar.game.add.tween(this.scale).to({ x: 1.2, y: 1.2 }, 200, Phaser.Easing.Linear.None, true);
|
|
this.tint = config.cubotHoverTint;
|
|
if (this.text !== undefined) {
|
|
this.text.visible = true;
|
|
}
|
|
this.hovered = true;
|
|
};
|
|
Cubot.prototype.onTileExit = function () {
|
|
mar.game.add.tween(this).to({ isoZ: 15 }, 400, Phaser.Easing.Bounce.Out, true);
|
|
mar.game.add.tween(this.scale).to({ x: 1, y: 1 }, 200, Phaser.Easing.Linear.None, true);
|
|
if (this.text !== undefined) {
|
|
this.text.visible = false;
|
|
}
|
|
this.hovered = false;
|
|
this.tint = this.getTint();
|
|
};
|
|
Cubot.prototype.getTint = function () {
|
|
if (!this.hovered) {
|
|
if (this.energy <= config.lowEnergy) {
|
|
return config.lowEnergyTint;
|
|
}
|
|
else {
|
|
return config.cubotTint;
|
|
}
|
|
}
|
|
else {
|
|
return config.cubotHoverTint;
|
|
}
|
|
};
|
|
Cubot.prototype.updateObject = function (json) {
|
|
if (DEBUG) {
|
|
console.log("Updating Cubot object");
|
|
}
|
|
this.action = json.action;
|
|
this.energy = json.energy;
|
|
this.direction = json.direction;
|
|
//Update color
|
|
this.tint = this.getTint();
|
|
//Update Location
|
|
if (!this.isAt(json.x, json.y)) {
|
|
//Location changed
|
|
if (this.action == Action.WALKING) {
|
|
//Walking..
|
|
this.tileX = json.x;
|
|
this.tileY = json.y;
|
|
this.walk();
|
|
}
|
|
else if (this.action == Action.JUMPING) {
|
|
//TODO
|
|
}
|
|
}
|
|
if (this.action == Action.DIGGING) {
|
|
//TODO dig animation
|
|
}
|
|
this.updateDirection();
|
|
this.updateHologram(json.holoMode, json.holoC, json.holo, json.holoStr);
|
|
};
|
|
Cubot.prototype.updateHologram = function (holoMode, holoColor, holoValue, holoStr) {
|
|
//Create hologram if not exist, set style
|
|
if (this.hologram == undefined) {
|
|
this.hologram = mar.game.make.text(0, 32, "");
|
|
this.hologram.anchor.set(0.5, 0);
|
|
this.addChild(this.hologram);
|
|
this.hologram.setStyle(config.holoStyle(holoColor));
|
|
}
|
|
else {
|
|
this.hologram.setStyle(config.holoStyle(holoColor));
|
|
}
|
|
switch (holoMode) {
|
|
case HologramMode.CLEARED:
|
|
this.hologram.text = "";
|
|
break;
|
|
case HologramMode.DEC:
|
|
this.hologram.text = Number(holoValue).toString();
|
|
break;
|
|
case HologramMode.HEX:
|
|
this.hologram.text = "0x" + ("0000" + Number(holoValue).toString(16).toUpperCase()).slice(-4);
|
|
break;
|
|
case HologramMode.STRING:
|
|
this.hologram.text = holoStr.replace(/[\n|\t]/g, '');
|
|
break;
|
|
}
|
|
};
|
|
/**
|
|
* Set appropriate frame based on direction
|
|
*/
|
|
Cubot.prototype.updateDirection = function () {
|
|
switch (this.direction) {
|
|
case Direction.NORTH:
|
|
this.animations.frameName = "cubot/walk_n/0001";
|
|
break;
|
|
case Direction.EAST:
|
|
this.animations.frameName = "cubot/walk_e/0001";
|
|
break;
|
|
case Direction.SOUTH:
|
|
this.animations.frameName = "cubot/walk_s/0001";
|
|
break;
|
|
case Direction.WEST:
|
|
this.animations.frameName = "cubot/walk_w/0001";
|
|
break;
|
|
}
|
|
};
|
|
/**
|
|
* Initiate the walk animation. Handles multiple calls of this function even if the previous animations
|
|
* were not completed
|
|
*/
|
|
Cubot.prototype.walk = function () {
|
|
var self = this;
|
|
var walkAnimation = function (duration) {
|
|
//Move the Cubot to desired tile
|
|
var tween = mar.game.add.tween(self).to({ isoX: Util.getIsoX(self.tileX), isoY: Util.getIsoY(self.tileY) }, duration, Phaser.Easing.Linear.None, true);
|
|
//Play appropriate animation
|
|
switch (self.direction) {
|
|
case Direction.NORTH:
|
|
self.animations.play("walk_n", 60, true);
|
|
break;
|
|
case Direction.SOUTH:
|
|
self.animations.play("walk_s", 60, true);
|
|
break;
|
|
case Direction.EAST:
|
|
self.animations.play("walk_e", 60, true);
|
|
break;
|
|
case Direction.WEST:
|
|
self.animations.play("walk_w", 60, true);
|
|
break;
|
|
}
|
|
//When moved to destination,
|
|
tween.onComplete.add(function () {
|
|
self.animations.stop();
|
|
self.updateDirection();
|
|
//Resync position
|
|
self.isoX = Util.getIsoX(self.tileX);
|
|
self.isoY = Util.getIsoY(self.tileY);
|
|
self.onTileExit();
|
|
//Execute all the queued walk animations at a faster pace
|
|
for (var i = 0; i < self.queuedAnimations.length; i++) {
|
|
self.queuedAnimations[i](config.walkDuration / 2);
|
|
self.queuedAnimations.splice(i, 1);
|
|
}
|
|
});
|
|
};
|
|
if (this.animations.currentAnim.isPlaying) {
|
|
//Queue up the animation
|
|
this.queuedAnimations.push(walkAnimation);
|
|
}
|
|
else {
|
|
walkAnimation(config.walkDuration);
|
|
}
|
|
};
|
|
/**
|
|
* Create the username text that will appear on top of the Cubot. Text will have alternate
|
|
* color when current username matches. This function is also responsable for setting the
|
|
* reduced transparency of other Cubots
|
|
*/
|
|
Cubot.prototype.createUsername = function () {
|
|
var username = mar.game.make.text(0, -24, this.username, {
|
|
fontSize: 22,
|
|
fill: config.textFill,
|
|
stroke: config.textStroke,
|
|
strokeThickness: 2,
|
|
font: "fixedsys"
|
|
});
|
|
username.alpha = 0.85;
|
|
username.anchor.set(0.5, 0);
|
|
//Color own username
|
|
if (this.username === mar.client.username) {
|
|
username.tint = config.selfUsernameColor;
|
|
}
|
|
else {
|
|
this.alpha = config.otherCubotAlpha;
|
|
}
|
|
this.addChild(username);
|
|
};
|
|
return Cubot;
|
|
}(GameObject));
|
|
var HarvesterNPC = (function (_super) {
|
|
__extends(HarvesterNPC, _super);
|
|
function HarvesterNPC(json) {
|
|
var _this = _super.call(this, json) || this;
|
|
_this.animations.add("walk_w", mar.animationFrames.harvester_walk_w);
|
|
_this.animations.add("walk_s", mar.animationFrames.harvester_walk_s);
|
|
_this.animations.add("walk_e", mar.animationFrames.harvester_walk_e);
|
|
_this.animations.add("walk_n", mar.animationFrames.harvester_walk_n);
|
|
_this.updateDirection();
|
|
_this.setText("Harvester NPC");
|
|
_this.text.visible = false;
|
|
return _this;
|
|
}
|
|
/**
|
|
* Needs to be overridden because Cubot() calls getTint() when initialised
|
|
*/
|
|
HarvesterNPC.prototype.getTint = function () {
|
|
return config.cubotTint;
|
|
};
|
|
HarvesterNPC.prototype.updateDirection = function () {
|
|
switch (this.direction) {
|
|
case Direction.NORTH:
|
|
this.animations.frameName = "harvester/walk_n/0001";
|
|
break;
|
|
case Direction.EAST:
|
|
this.animations.frameName = "harvester/walk_e/0001";
|
|
break;
|
|
case Direction.SOUTH:
|
|
this.animations.frameName = "harvester/walk_s/0001";
|
|
break;
|
|
case Direction.WEST:
|
|
this.animations.frameName = "harvester/walk_w/0001";
|
|
break;
|
|
}
|
|
};
|
|
HarvesterNPC.prototype.updateObject = function (json) {
|
|
if (DEBUG) {
|
|
console.log("Updating Harvester NPC object");
|
|
}
|
|
this.action = json.action;
|
|
this.direction = json.direction;
|
|
//Update Location
|
|
if (!this.isAt(json.x, json.y)) {
|
|
//Location changed
|
|
if (this.action == Action.WALKING) {
|
|
//Walking..
|
|
this.tileX = json.x;
|
|
this.tileY = json.y;
|
|
this.walk();
|
|
}
|
|
else if (this.action == Action.JUMPING) {
|
|
//TODO
|
|
}
|
|
}
|
|
//Update Direction
|
|
this.updateDirection();
|
|
};
|
|
HarvesterNPC.prototype.createUsername = function () {
|
|
//No-op
|
|
};
|
|
return HarvesterNPC;
|
|
}(Cubot));
|
|
var BiomassBlob = (function (_super) {
|
|
__extends(BiomassBlob, _super);
|
|
function BiomassBlob(json) {
|
|
var _this = _super.call(this, Util.getIsoX(json.x), Util.getIsoY(json.y), 10, "sheet", 1) || this;
|
|
if (DEBUG) {
|
|
console.log("Creating Biomass object");
|
|
}
|
|
_this.anchor.set(0.5, 0);
|
|
_this.id = json.i;
|
|
_this.tileX = json.x;
|
|
_this.tileY = json.y;
|
|
_this.tint = config.biomassTint;
|
|
_this.animations.add("idle", mar.animationFrames.biomassIdle);
|
|
_this.animations.play("idle", 45, true);
|
|
_this.setText("Biomass");
|
|
_this.text.visible = false;
|
|
return _this;
|
|
}
|
|
BiomassBlob.prototype.onTileHover = function () {
|
|
mar.game.tweens.removeFrom(this);
|
|
mar.game.add.tween(this).to({ isoZ: 45 }, 200, Phaser.Easing.Quadratic.InOut, true);
|
|
this.tint = config.biomassHoverTint;
|
|
mar.game.add.tween(this.scale).to({ x: 1.2, y: 1.2 }, 200, Phaser.Easing.Linear.None, true);
|
|
this.text.visible = true;
|
|
};
|
|
BiomassBlob.prototype.onTileExit = function () {
|
|
mar.game.tweens.removeFrom(this);
|
|
mar.game.add.tween(this).to({ isoZ: 15 }, 400, Phaser.Easing.Bounce.Out, true);
|
|
mar.game.add.tween(this.scale).to({ x: 1, y: 1 }, 200, Phaser.Easing.Linear.None, true);
|
|
this.tint = config.biomassTint;
|
|
this.text.visible = false;
|
|
};
|
|
BiomassBlob.prototype.updateObject = function (json) {
|
|
if (DEBUG) {
|
|
console.log("Updating Biomass object");
|
|
}
|
|
};
|
|
return BiomassBlob;
|
|
}(GameObject));
|
|
var Factory = (function (_super) {
|
|
__extends(Factory, _super);
|
|
function Factory(json) {
|
|
var _this = _super.call(this, Util.getIsoX(json.x), Util.getIsoY(json.y), 15, "sheet", "objects/factory") || this;
|
|
_this.anchor.set(0.5, .25);
|
|
_this.setText("Factory");
|
|
_this.text.visible = false;
|
|
_this.id = json.i;
|
|
_this.tileX = json.x;
|
|
_this.tileY = json.y;
|
|
return _this;
|
|
}
|
|
Factory.prototype.onTileHover = function () {
|
|
mar.game.tweens.removeFrom(this);
|
|
mar.game.add.tween(this).to({ isoZ: 25 }, 200, Phaser.Easing.Quadratic.InOut, true);
|
|
mar.game.add.tween(this.scale).to({ x: 1.06, y: 1.06 }, 200, Phaser.Easing.Linear.None, true);
|
|
this.tint = config.cubotHoverTint;
|
|
this.text.visible = true;
|
|
};
|
|
Factory.prototype.onTileExit = function () {
|
|
mar.game.tweens.removeFrom(this);
|
|
mar.game.add.tween(this).to({ isoZ: 15 }, 400, Phaser.Easing.Bounce.Out, true);
|
|
mar.game.add.tween(this.scale).to({ x: 1, y: 1 }, 200, Phaser.Easing.Linear.None, true);
|
|
this.tint = config.cubotTint;
|
|
this.text.visible = false;
|
|
};
|
|
Factory.prototype.updateObject = function (json) {
|
|
//No op
|
|
};
|
|
Factory.prototype.isAt = function (x, y) {
|
|
//Factory is 2x2
|
|
return (this.tileX === x || this.tileX + 1 === x) && (this.tileY + 1 === y || this.tileY === y);
|
|
};
|
|
;
|
|
return Factory;
|
|
}(GameObject));
|
|
var RadioTower = (function (_super) {
|
|
__extends(RadioTower, _super);
|
|
function RadioTower(json) {
|
|
var _this = _super.call(this, Util.getIsoX(json.x), Util.getIsoY(json.y), 15, "sheet", "objects/RadioTower") || this;
|
|
_this.anchor.set(0.5, 0.64);
|
|
_this.setText("Radio Tower");
|
|
_this.text.visible = false;
|
|
_this.id = json.i;
|
|
_this.tileX = json.x;
|
|
_this.tileY = json.y;
|
|
return _this;
|
|
}
|
|
RadioTower.prototype.onTileHover = function () {
|
|
mar.game.tweens.removeFrom(this);
|
|
mar.game.add.tween(this).to({ isoZ: 25 }, 200, Phaser.Easing.Quadratic.InOut, true);
|
|
mar.game.add.tween(this.scale).to({ x: 1.06, y: 1.06 }, 200, Phaser.Easing.Linear.None, true);
|
|
this.tint = config.cubotHoverTint;
|
|
this.text.visible = true;
|
|
};
|
|
RadioTower.prototype.onTileExit = function () {
|
|
mar.game.tweens.removeFrom(this);
|
|
mar.game.add.tween(this).to({ isoZ: 15 }, 400, Phaser.Easing.Bounce.Out, true);
|
|
mar.game.add.tween(this.scale).to({ x: 1, y: 1 }, 200, Phaser.Easing.Linear.None, true);
|
|
this.tint = config.cubotTint;
|
|
this.text.visible = false;
|
|
};
|
|
RadioTower.prototype.updateObject = function (json) {
|
|
//No op
|
|
};
|
|
return RadioTower;
|
|
}(GameObject));
|