Added Hologram Projector Hardware. Added GET_WORLD_POS in LiDAR. Fixed Drill.

This commit is contained in:
simon 2017-11-11 19:43:06 -05:00
parent 1a6f92a29d
commit 8c5dcd0fba
8 changed files with 83 additions and 57 deletions

View File

@ -1,6 +1,9 @@
package net.simon987.cubotplugin;
import net.simon987.server.game.*;
import net.simon987.server.game.ControllableUnit;
import net.simon987.server.game.Direction;
import net.simon987.server.game.GameObject;
import net.simon987.server.game.Updatable;
import net.simon987.server.user.User;
import org.json.simple.JSONObject;
@ -11,7 +14,8 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit {
private static final char MAP_INFO = 0x0080;
public static final int ID = 1;
private EffectType currentEmote = null;
private char hologram = 0;
private char lastHologram = 0;
/**
* Hit points
@ -45,11 +49,6 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit {
}
}
if (currentEmote != null) {
// getWorld().getQueuedGameEffects().add(new GameEffect(currentEmote, getX(), getY()));
currentEmote = null;
}
/*
* CurrentAction is set during the code execution and this function is called right after
* If no action as been set, the action sent to the client is the action in currentAction that
@ -57,6 +56,10 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit {
*/
lastAction = currentAction;
currentAction = CubotAction.IDLE;
//Same principle for hologram
lastHologram = hologram;
hologram = 0;
}
@Override
@ -70,6 +73,8 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit {
json.put("heldItem", heldItem);
json.put("hp", hp);
json.put("action", lastAction.ordinal());
json.put("holo", (int) lastHologram);
if (parent != null) {
json.put("parent", parent.getUsername()); //Only used client-side for now
}
@ -128,4 +133,12 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit {
public CubotAction getAction() {
return lastAction;
}
public void setHologram(char hologram) {
this.hologram = hologram;
}
public char getHologram() {
return lastHologram;
}
}

View File

@ -40,7 +40,7 @@ public class CubotDrill extends CpuHardware {
} else if (a == GATHER_SLOW || a == GATHER_FAST) {
if (cubot.getAction() != CubotAction.IDLE) {
if (cubot.getAction() == CubotAction.IDLE) {
int tile = cubot.getWorld().getTileMap().getTileAt(cubot.getX(), cubot.getY());
if (tile == TileMap.IRON_TILE) {

View File

@ -0,0 +1,49 @@
package net.simon987.cubotplugin;
import net.simon987.server.GameServer;
import net.simon987.server.assembly.CpuHardware;
import net.simon987.server.assembly.Status;
import org.json.simple.JSONObject;
public class CubotHologram extends CpuHardware {
/**
* Hardware ID (Should be unique)
*/
static final char HWID = 0x0009;
public static final int DEFAULT_ADDRESS = 9;
private Cubot cubot;
public CubotHologram(Cubot cubot) {
this.cubot = cubot;
}
@Override
public void handleInterrupt(Status status) {
char a = getCpu().getRegisterSet().getRegister("A").getValue();
cubot.setHologram(a);
}
@Override
public char getId() {
return HWID;
}
public static CubotHologram deserialize(JSONObject hwJSON) {
return new CubotHologram((Cubot) GameServer.INSTANCE.getGameUniverse().getObject((int) (long) hwJSON.get("cubot")));
}
@Override
public JSONObject serialise() {
JSONObject json = new JSONObject();
json.put("hwid", (int) HWID);
json.put("cubot", cubot.getObjectId());
return json;
}
}

View File

@ -26,6 +26,7 @@ public class CubotLidar extends CpuHardware implements JSONSerialisable {
private static final int GET_POS = 1;
private static final int GET_PATH = 2;
private static final int GET_MAP = 3;
private static final int GET_WORLD_POS = 4;
private static final int MEMORY_MAP_START = 0x0100;
private static final int MEMORY_PATH_START = 0x0000;
@ -120,6 +121,12 @@ public class CubotLidar extends CpuHardware implements JSONSerialisable {
getCpu().getMemory().set(i++, mapInfo[x][y]);
}
}
break;
case GET_WORLD_POS:
getCpu().getRegisterSet().getRegister("X").setValue(cubot.getWorld().getX());
getCpu().getRegisterSet().getRegister("Y").setValue(cubot.getWorld().getY());
break;
}

View File

@ -51,6 +51,8 @@ public class CubotPlugin extends ServerPlugin implements GameObjectDeserializer,
return CubotInventory.deserialize(hwJson);
case Keyboard.HWID:
return Keyboard.deserialize(hwJson);
case CubotHologram.HWID:
return CubotHologram.deserialize(hwJson);
}
return null;

View File

@ -33,6 +33,8 @@ public class CpuInitialisationListener implements GameEventListener {
drillHw.setCpu(cpu);
CubotInventory invHw = new CubotInventory((Cubot) user.getControlledUnit());
invHw.setCpu(cpu);
CubotHologram emoteHw = new CubotHologram((Cubot) user.getControlledUnit());
emoteHw.setCpu(cpu);
cpu.attachHardware(legHw, CubotLeg.DEFAULT_ADDRESS);
cpu.attachHardware(laserHw, CubotLaser.DEFAULT_ADDRESS);
@ -40,5 +42,7 @@ public class CpuInitialisationListener implements GameEventListener {
cpu.attachHardware(keyboard, Keyboard.DEFAULT_ADDRESS);
cpu.attachHardware(drillHw, CubotDrill.DEFAULT_ADDRESS);
cpu.attachHardware(invHw, CubotInventory.DEFAULT_ADDRESS);
cpu.attachHardware(invHw, CubotInventory.DEFAULT_ADDRESS);
cpu.attachHardware(emoteHw, CubotHologram.DEFAULT_ADDRESS);
}
}

View File

@ -11,55 +11,6 @@ public class Main {
public static void main(String[] args){
//TODO: Docs
/*
* - Intel 8086 p.14 design
* - Memory: Storage organisation: From a storage pov, 8086 memory spaces are
* organised as identical arrays of 16-bit words
* - Microprocessor
* - Instruction set
* -
*/
//TODO: Random number generator
//TODO: Clock hardware
//TODO: Floppy drive hardware (and item?)
//TODO: LEA instruction
//TODO: NOT instruction
//TODO: Battery Hardware
//---------------------------------
//TODO: favicon
//TODO: Email verification
//TODO: Real account page
// Change/reset password
//TODO: Object information Window (Hover, click ?)
//TODO: Inventory indicator (Multiple items)
//TODO: Software Interrupts (PIC): Interupt flag?
/*
* - INT/INTO instruction
* - IRET instruction
*/
//TODO: XCHG instruction
//TODO: SAL/SAR instruction
//TODO: ROL/ROR/RCL/RCR instruction
//TODO: LOOP/LOOPE/LOOPX/LOOPNE/LOOPNZ ?
//TODO: World goto (form)
//TODO: Save backup (keep X saves, Zip em)
//TODO: Log backup (keep X backups, Zip em)
//TODO: More tests
//TODO: Handle client disconnects
//TODO: Cache objects requests?
//TODO: Ability to toggle debug stuff
//TODO: Data segment, DB, DW, DD, DQ
//TODO: Set client animation speed relative to TICK_LENGTH
//TODO: Withdraw animation / action
//TODO: Prevent World creation out of bounds, warp around universe
//TODO: Multiple Biomass style (and yield, rarity)
//TODO: Clean sprites
//TODO: Auto-resize
LogManager.initialize();
ServerConfiguration config = new ServerConfiguration(new File("config.properties"));

Binary file not shown.