diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java
index 82750e7..5da34cc 100644
--- a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java
+++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java
@@ -15,39 +15,14 @@ import org.bson.Document;
import org.json.simple.JSONObject;
import java.awt.*;
-import java.util.*;
import java.util.List;
+import java.util.*;
public class Cubot extends GameObject implements Updatable, ControllableUnit, MessageReceiver,
Attackable, Rechargeable, HardwareHost {
private static final char MAP_INFO = 0x0080;
- /**
- * Hologram value that is displayed
- *
TODO: Move to CubotHologram class
- */
- private int hologram = 0;
- /**
- * Hologram string that is displayed
- *
TODO: Move to CubotHologram class
- */
- private String hologramString = "";
- /**
- * Hologram mode that was set during this tick
- *
TODO: Move to CubotHologram class
- */
- private HologramMode hologramMode = HologramMode.CLEARED;
- /**
- * Hologram mode at the end of the last tick
- *
TODO: Move to CubotHologram class
- */
- private HologramMode lastHologramMode = HologramMode.CLEARED;
- /**
- * Hologram color code. Format is handled by the client
- *
TODO: Move to CubotHologram class
- */
- private int hologramColor = 0;
/**
* Hit points
@@ -148,29 +123,6 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
*/
private CPU cpu;
- /**
- * Display mode of the hologram hardware
- *
TODO: move this inside CubotHologram class
- */
- public enum HologramMode {
- /**
- * Display nothing
- */
- CLEARED,
- /**
- * Display value as hexadecimal in format 0x0000
- */
- HEX,
- /**
- * Display string
- */
- STRING,
- /**
- * Display value as decimal
- */
- DEC
- }
-
public enum ConsoleMode {
/**
* Used by the ComPort hardware - clears the console screen (client-side)
@@ -247,8 +199,6 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
currentAction = Action.IDLE;
//Same principle for hologram
- lastHologramMode = hologramMode;
- hologramMode = HologramMode.CLEARED;
//And the console
lastConsoleMode = consoleMode;
@@ -260,6 +210,10 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
//And the status..
lastStatus = currentStatus;
currentStatus = 0;
+
+ for (HardwareModule module : hardwareAddresses.values()) {
+ module.update();
+ }
}
@Override
@@ -272,16 +226,19 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
json.put("hp", hp);
json.put("shield", shield);
json.put("action", lastAction.ordinal());
- json.put("holo", hologram);
- json.put("holoStr", hologramString);
- json.put("holoMode", lastHologramMode.ordinal());
- json.put("holoC", hologramColor);
json.put("energy", energy);
if (parent != null) {
json.put("parent", parent.getUsername()); //Only used client-side for now
}
+ for (HardwareModule module : hardwareAddresses.values()) {
+ JSONObject hwJson = module.jsonSerialise();
+ if (hwJson != null) {
+ json.put(module.getClass().getName(), hwJson);
+ }
+ }
+
return json;
}
@@ -293,10 +250,6 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
dbObject.put("hp", hp);
dbObject.put("shield", shield);
dbObject.put("action", lastAction.ordinal());
- dbObject.put("holo", hologram);
- dbObject.put("holoStr", hologramString);
- dbObject.put("holoMode", lastHologramMode.ordinal());
- dbObject.put("holoC", hologramColor);
dbObject.put("energy", energy);
if (parent != null) {
@@ -331,17 +284,17 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
clearKeyboardBuffer();
consoleMessagesBuffer.clear();
lastConsoleMessagesBuffer.clear();
- hologramColor = 0;
currentStatus = 0;
lastStatus = 0;
addStatus(CubotStatus.FACTORY_NEW);
+
+ for (HardwareModule module : hardwareAddresses.values()) {
+ module.reset();
+ }
}
@Override
public boolean onDeadCallback() {
- //TODO make death event instead
-// LogManager.LOGGER.info(getParent().getUsername() + "'s Cubot died");
-
reset();
//Teleport to spawn point
@@ -401,15 +354,6 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
return currentAction;
}
- public void setHologram(int hologram) {
- this.hologram = hologram;
- }
-
-
- public void setHologramString(String hologramString) {
- this.hologramString = hologramString;
- }
-
public int getEnergy() {
return energy;
}
@@ -494,10 +438,6 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
return false;
}
- public void setHologramMode(HologramMode hologramMode) {
- this.hologramMode = hologramMode;
- }
-
@Override
public void setAction(Action action) {
currentAction = action;
@@ -527,10 +467,6 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Me
this.consoleMode = consoleMode;
}
- public void setHologramColor(int hologramColor) {
- this.hologramColor = hologramColor;
- }
-
public void addStatus(CubotStatus status) {
currentStatus |= status.val;
diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotHologram.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotHologram.java
index 0d90155..9e291c2 100644
--- a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotHologram.java
+++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotHologram.java
@@ -3,15 +3,14 @@ package net.simon987.cubotplugin;
import net.simon987.server.assembly.Status;
import net.simon987.server.game.objects.ControllableUnit;
import org.bson.Document;
+import org.json.simple.JSONObject;
public class CubotHologram extends CubotHardwareModule {
-
/**
* Hardware ID (Should be unique)
*/
static final char HWID = 0x0009;
-
public static final int DEFAULT_ADDRESS = 9;
private static final int HOLO_CLEAR = 0;
@@ -22,12 +21,27 @@ public class CubotHologram extends CubotHardwareModule {
private static final int STR_MAX_LEN = 8;
+ private int displayValue = 0;
+ private String displayString = "";
+ private HologramMode mode = HologramMode.CLEARED;
+ private HologramMode lastMode = HologramMode.CLEARED;
+
+ /**
+ * Hologram color code. Format is handled by the client
+ */
+ private int displayColor = 0;
+
public CubotHologram(Cubot cubot) {
super(cubot);
}
public CubotHologram(Document document, ControllableUnit cubot) {
super(document, cubot);
+
+ displayValue = document.getInteger("value");
+ displayColor = document.getInteger("color");
+ displayString = document.getString("string");
+ mode = HologramMode.values()[document.getInteger("mode")];
}
@Override
@@ -36,11 +50,10 @@ public class CubotHologram extends CubotHardwareModule {
char a = getCpu().getRegisterSet().getRegister("A").getValue();
if (a == HOLO_CLEAR) {
- cubot.setHologramMode(Cubot.HologramMode.CLEARED);
+ mode = HologramMode.CLEARED;
} else if (a == HOLO_DISPLAY_HEX) {
- char b = getCpu().getRegisterSet().getRegister("B").getValue();
- cubot.setHologram(b);
- cubot.setHologramMode(Cubot.HologramMode.HEX);
+ displayValue = getCpu().getRegisterSet().getRegister("B").getValue();
+ mode = HologramMode.HEX;
} else if (a == HOLO_DISPLAY_STRING) {
char x = getCpu().getRegisterSet().getRegister("X").getValue();
//Display zero-terminated string starting at X (max 8 chars)
@@ -58,13 +71,12 @@ public class CubotHologram extends CubotHardwareModule {
}
}
- cubot.setHologramString(holoString.toString());
- cubot.setHologramMode(Cubot.HologramMode.STRING);
+ displayString = holoString.toString();
+ mode = HologramMode.STRING;
} else if (a == HOLO_DISPLAY_DEC) {
//Display decimal number
- char b = getCpu().getRegisterSet().getRegister("B").getValue();
- cubot.setHologram(b);
- cubot.setHologramMode(Cubot.HologramMode.DEC);
+ displayValue = getCpu().getRegisterSet().getRegister("B").getValue();
+ mode = HologramMode.DEC;
} else if (a == HOLO_DISPLAY_COLOR) {
@@ -72,7 +84,7 @@ public class CubotHologram extends CubotHardwareModule {
int b = getCpu().getRegisterSet().getRegister("B").getValue();
int c = getCpu().getRegisterSet().getRegister("C").getValue();
- cubot.setHologramColor((c | (b << 16))); //B:C
+ displayColor = (c | (b << 16)); //B:C
}
}
@@ -83,4 +95,69 @@ public class CubotHologram extends CubotHardwareModule {
return HWID;
}
+ @Override
+ public Document mongoSerialise() {
+ Document document = super.mongoSerialise();
+
+ document.put("color", displayColor);
+ document.put("value", displayValue);
+ document.put("string", displayString);
+ document.put("mode", lastMode.ordinal());
+
+ return document;
+ }
+
+ @Override
+ public JSONObject debugJsonSerialise() {
+ JSONObject json = jsonSerialise();
+
+ json.put("lastmode", mode);
+
+ return json;
+ }
+
+ @Override
+ public JSONObject jsonSerialise() {
+ JSONObject json = new JSONObject();
+
+ json.put("color", displayColor);
+ json.put("value", displayValue);
+ json.put("string", displayString);
+ json.put("mode", lastMode.ordinal());
+
+ return json;
+ }
+
+ private enum HologramMode {
+ /**
+ * Display nothing
+ */
+ CLEARED,
+ /**
+ * Display value as hexadecimal in format 0x0000
+ */
+ HEX,
+ /**
+ * Display string
+ */
+ STRING,
+ /**
+ * Display value as decimal
+ */
+ DEC
+ }
+
+ @Override
+ public void reset() {
+ displayValue = 0;
+ displayColor = 0;
+ displayString = "";
+ mode = HologramMode.CLEARED;
+ }
+
+ @Override
+ public void update() {
+ lastMode = mode;
+ mode = HologramMode.CLEARED;
+ }
}
diff --git a/Server/src/main/java/net/simon987/server/assembly/HardwareModule.java b/Server/src/main/java/net/simon987/server/assembly/HardwareModule.java
index 129bf3f..9aa0e54 100644
--- a/Server/src/main/java/net/simon987/server/assembly/HardwareModule.java
+++ b/Server/src/main/java/net/simon987/server/assembly/HardwareModule.java
@@ -2,11 +2,13 @@ package net.simon987.server.assembly;
import net.simon987.server.game.objects.ControllableUnit;
+import net.simon987.server.io.JSONSerialisable;
import net.simon987.server.io.MongoSerializable;
import org.bson.Document;
+import org.json.simple.JSONObject;
-public abstract class HardwareModule implements MongoSerializable {
+public abstract class HardwareModule implements MongoSerializable, JSONSerialisable {
private CPU cpu;
@@ -35,6 +37,25 @@ public abstract class HardwareModule implements MongoSerializable {
@Override
public String toString() {
- return String.format("{%s}", getClass().getSimpleName());
+ JSONObject hwJson = jsonSerialise();
+ return String.format("{%s: {%s}}", getClass().getSimpleName(), hwJson == null ? "" : hwJson);
+ }
+
+ public void reset() {
+
+ }
+
+ public void update() {
+
+ }
+
+ @Override
+ public JSONObject jsonSerialise() {
+ return null;
+ }
+
+ @Override
+ public JSONObject debugJsonSerialise() {
+ return null;
}
}
diff --git a/Server/src/main/resources/static/js/mar.js b/Server/src/main/resources/static/js/mar.js
index 390dc7a..1d837d9 100644
--- a/Server/src/main/resources/static/js/mar.js
+++ b/Server/src/main/resources/static/js/mar.js
@@ -1023,7 +1023,8 @@ var Cubot = (function (_super) {
this.makeLaserAttack();
}
this.updateDirection();
- this.updateHologram(json.holoMode, json.holoC, json.holo, json.holoStr);
+ var holoHw = json["net.simon987.cubotplugin.CubotHologram"];
+ this.updateHologram(holoHw.mode, holoHw.color, holoHw.value, holoHw.string);
this.setShield(this.shield > 0);
};
Cubot.prototype.updateHologram = function (holoMode, holoColor, holoValue, holoStr) {
@@ -1579,7 +1580,6 @@ var FluidTile = (function (_super) {
}(Tile));
var MagneticTile = (function (_super) {
__extends(MagneticTile, _super);
-
function MagneticTile(x, y) {
var _this = _super.call(this, x, y, config.magneticSprite, 0) || this;
_this.baseTint = 0xFFFFFF;
@@ -1588,7 +1588,6 @@ var MagneticTile = (function (_super) {
_this.tileType = "Magnetic tile";
return _this;
}
-
MagneticTile.prototype.onHover = function () {
mar.game.add.tween(this).to({isoZ: this.baseZ + 30}, 200, Phaser.Easing.Quadratic.InOut, true);
mar.tileIndicator.tileX = this.tileX;
diff --git a/Server/src/main/typescript/GameObject.ts b/Server/src/main/typescript/GameObject.ts
index 22ab0fb..8eea6a0 100644
--- a/Server/src/main/typescript/GameObject.ts
+++ b/Server/src/main/typescript/GameObject.ts
@@ -326,7 +326,8 @@ class Cubot extends GameObject {
}
this.updateDirection();
- this.updateHologram(json.holoMode, json.holoC, json.holo, json.holoStr);
+ let holoHw = json["net.simon987.cubotplugin.CubotHologram"];
+ this.updateHologram(holoHw.mode, holoHw.color, holoHw.value, holoHw.string);
//Update shield
this.setShield(this.shield > 0)