Cubot implements Attackable (untested)

This commit is contained in:
simon 2018-03-10 09:49:34 -05:00
parent d1a3cf9307
commit 8ed192f8d0
7 changed files with 157 additions and 14 deletions

View File

@ -10,13 +10,11 @@ import org.json.simple.JSONObject;
import java.util.ArrayList; import java.util.ArrayList;
public class Cubot extends GameObject implements Updatable, ControllableUnit, Programmable { public class Cubot extends GameObject implements Updatable, ControllableUnit, Programmable, Attackable {
private static final char MAP_INFO = 0x0080; private static final char MAP_INFO = 0x0080;
public static final int ID = 1; public static final int ID = 1;
public static int TYPE_ID = 2;
private int hologram = 0; private int hologram = 0;
private String hologramString = ""; private String hologramString = "";
private HologramMode hologramMode = HologramMode.CLEARED; private HologramMode hologramMode = HologramMode.CLEARED;
@ -34,6 +32,9 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr
private Action currentAction = Action.IDLE; private Action currentAction = Action.IDLE;
private Action lastAction = Action.IDLE; private Action lastAction = Action.IDLE;
private char currentStatus;
private char lastStatus;
private ArrayList<Integer> keyboardBuffer = new ArrayList<>(); private ArrayList<Integer> keyboardBuffer = new ArrayList<>();
private ArrayList<char[]> consoleMessagesBuffer = new ArrayList<>(CONSOLE_BUFFER_MAX_SIZE); private ArrayList<char[]> consoleMessagesBuffer = new ArrayList<>(CONSOLE_BUFFER_MAX_SIZE);
@ -92,6 +93,10 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr
lastConsoleMessagesBuffer = new ArrayList<>(consoleMessagesBuffer); lastConsoleMessagesBuffer = new ArrayList<>(consoleMessagesBuffer);
consoleMessagesBuffer.clear(); consoleMessagesBuffer.clear();
//And the status..
lastStatus = currentStatus;
currentStatus = 0;
} }
@Override @Override
@ -152,8 +157,8 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr
cubot.setX((int) obj.get("x")); cubot.setX((int) obj.get("x"));
cubot.setY((int) obj.get("y")); cubot.setY((int) obj.get("y"));
cubot.hp = (int) obj.get("hp"); cubot.hp = (int) obj.get("hp");
cubot.shield = (int) obj.get("shield"); // cubot.shield = (int) obj.get("shield");
cubot.maxShield = GameServer.INSTANCE.getConfig().getInt("max_shield"); // cubot.maxShield = GameServer.INSTANCE.getConfig().getInt("max_shield");
cubot.setDirection(Direction.getDirection((int) obj.get("direction"))); cubot.setDirection(Direction.getDirection((int) obj.get("direction")));
cubot.heldItem = (int) obj.get("heldItem"); cubot.heldItem = (int) obj.get("heldItem");
cubot.energy = (int) obj.get("energy"); cubot.energy = (int) obj.get("energy");
@ -246,7 +251,6 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr
return maxEnergy; return maxEnergy;
} }
// shield methods are modeled after energy methods
public int getShield() { public int getShield() {
return shield; return shield;
} }
@ -347,4 +351,58 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr
public void setHologramColor(int hologramColor) { public void setHologramColor(int hologramColor) {
this.hologramColor = hologramColor; this.hologramColor = hologramColor;
} }
public void addStatus(CubotStatus status) {
currentStatus |= status.val;
}
public void removeStatus(CubotStatus status) {
currentStatus &= (~status.val);
}
public char getStatus() {
return lastStatus;
}
@Override
public void setHealRate(int hp) {
}
@Override
public int getHp() {
return 0;
}
@Override
public void setHp(int hp) {
}
@Override
public int getMaxHp() {
return 0;
}
@Override
public void setMaxHp(int hp) {
}
@Override
public void heal(int amount) {
}
@Override
public void damage(int amount) {
}
@Override
public boolean onDeadCallback() {
return true; //always cancelled
}
} }

View File

@ -0,0 +1,59 @@
package net.simon987.cubotplugin;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import net.simon987.server.GameServer;
import net.simon987.server.assembly.CpuHardware;
import net.simon987.server.assembly.Status;
public class CubotCore extends CpuHardware {
public static final int DEFAULT_ADDRESS = 0x000E;
/**
* Hardware ID (Should be unique)
*/
public static final char HWID = 0x000E;
private static final int CORE_STATUS_POLL = 1;
private static final int CORE_HULL_POLL = 2;
private Cubot cubot;
public CubotCore(Cubot cubot) {
this.cubot = cubot;
}
@Override
public void handleInterrupt(Status status) {
int a = getCpu().getRegisterSet().getRegister("A").getValue();
if (a == CORE_STATUS_POLL) {
getCpu().getRegisterSet().getRegister("B").setValue(cubot.getStatus());
} else if (a == CORE_HULL_POLL) {
getCpu().getRegisterSet().getRegister("B").setValue(cubot.getHp());
}
}
@Override
public char getId() {
return HWID;
}
@Override
public BasicDBObject mongoSerialise() {
BasicDBObject dbObject = new BasicDBObject();
dbObject.put("hwid", (int) HWID);
dbObject.put("cubot", cubot.getObjectId());
return dbObject;
}
public static CubotCore deserialize(DBObject obj) {
return new CubotCore((Cubot) GameServer.INSTANCE.getGameUniverse().getObject((long) obj.get("cubot")));
}
}

View File

@ -7,10 +7,10 @@ import net.simon987.server.assembly.CpuHardware;
import net.simon987.server.assembly.Status; import net.simon987.server.assembly.Status;
public class CubotShield extends CpuHardware { public class CubotShield extends CpuHardware {
static final char HWID = 0x000E; static final char HWID = 0x000F;
private static final int SHIELD_CHARGE = 1; private static final int SHIELD_CHARGE = 1;
private static final int SHIELD_QUERY = 2; private static final int SHIELD_POLL = 2;
private Cubot cubot; private Cubot cubot;
public CubotShield(Cubot cubot) { public CubotShield(Cubot cubot) {
@ -39,7 +39,7 @@ public class CubotShield extends CpuHardware {
if(a == SHIELD_CHARGE) { if(a == SHIELD_CHARGE) {
int b = getCpu().getRegisterSet().getRegister("B").getValue(); int b = getCpu().getRegisterSet().getRegister("B").getValue();
cubot.chargeShield(b); cubot.chargeShield(b);
} else if(a == SHIELD_QUERY) { } else if (a == SHIELD_POLL) {
int shield = cubot.getShield(); int shield = cubot.getShield();
getCpu().getRegisterSet().getRegister("B").setValue(shield); getCpu().getRegisterSet().getRegister("B").setValue(shield);
} }

View File

@ -0,0 +1,18 @@
package net.simon987.cubotplugin;
/**
* Status of a Cubot (Special buff or debuff)
*/
public enum CubotStatus {
DEFAULT(0),
RADIATED(1),
DAMAGED(2);
public char val;
CubotStatus(int val) {
this.val = (char) val;
}
}

View File

@ -46,7 +46,7 @@ public class HarvesterNPC extends NonPlayerCharacter {
} }
@Override @Override
public void onDeadCallback() { public boolean onDeadCallback() {
getWorld().decUpdatable(); getWorld().decUpdatable();
@ -56,6 +56,8 @@ public class HarvesterNPC extends NonPlayerCharacter {
GameServer.INSTANCE.getEventDispatcher().dispatch( GameServer.INSTANCE.getEventDispatcher().dispatch(
new ObjectDeathEvent(this, ID)); new ObjectDeathEvent(this, ID));
return false;
} }
@Override @Override

View File

@ -257,6 +257,9 @@ public abstract class GameObject implements JSONSerialisable, MongoSerialisable
/** /**
* Called before this GameObject is removed from the world - defaults to doing nothing * Called before this GameObject is removed from the world - defaults to doing nothing
* @return true if cancelled
*/ */
public void onDeadCallback() { } public boolean onDeadCallback() {
return false;
}
} }

View File

@ -147,9 +147,12 @@ public class World implements MongoSerialisable {
for (GameObject object : gameObjects.values()) { for (GameObject object : gameObjects.values()) {
//Clean up dead objects //Clean up dead objects
if (object.isDead()) { if (object.isDead()) {
object.onDeadCallback();
if (!object.onDeadCallback()) {
removeObject(object); removeObject(object);
//LogManager.LOGGER.fine("Removed object " + object + " id: " + object.getObjectId()); //LogManager.LOGGER.fine("Removed object " + object + " id: " + object.getObjectId());
}
} else if (object instanceof Updatable) { } else if (object instanceof Updatable) {
((Updatable) object).update(); ((Updatable) object).update();
} }