mirror of
https://github.com/simon987/Much-Assembly-Required.git
synced 2025-04-19 10:36:43 +00:00
NPC Plugin refactoring
This commit is contained in:
parent
e4a06e79d4
commit
b361f87154
@ -18,8 +18,7 @@ import java.awt.*;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class Cubot extends GameObject implements Updatable, ControllableUnit, MessageReceiver,
|
public class Cubot extends GameObject implements Updatable, ControllableUnit, MessageReceiver {
|
||||||
Attackable, Rechargeable, HardwareHost {
|
|
||||||
|
|
||||||
private static final char MAP_INFO = 0x0200;
|
private static final char MAP_INFO = 0x0200;
|
||||||
|
|
||||||
|
@ -0,0 +1,38 @@
|
|||||||
|
package net.simon987.npcplugin;
|
||||||
|
|
||||||
|
import net.simon987.server.GameServer;
|
||||||
|
import net.simon987.server.game.objects.Action;
|
||||||
|
|
||||||
|
public class ExecuteCpuTask extends NPCTask {
|
||||||
|
|
||||||
|
private static final int MAX_EXEC_TIME = GameServer.INSTANCE.getConfig().getInt("npc_exec_time");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean checkCompleted() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick(NonPlayerCharacter npc) {
|
||||||
|
|
||||||
|
HackedNPC hNpc = (HackedNPC) npc;
|
||||||
|
|
||||||
|
//Execute code
|
||||||
|
int timeout = Math.min(hNpc.getEnergy(), MAX_EXEC_TIME);
|
||||||
|
hNpc.getCpu().reset();
|
||||||
|
int cost = hNpc.getCpu().execute(timeout);
|
||||||
|
hNpc.spendEnergy(cost);
|
||||||
|
|
||||||
|
if (hNpc.getCurrentAction() == Action.WALKING) {
|
||||||
|
if (hNpc.spendEnergy(100)) {
|
||||||
|
if (hNpc.incrementLocation()) {
|
||||||
|
//Couldn't walk
|
||||||
|
hNpc.setCurrentAction(Action.IDLE);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
hNpc.setCurrentAction(Action.IDLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -41,6 +41,8 @@ public class Factory extends Structure implements Updatable, MessageReceiver {
|
|||||||
private char[] program;
|
private char[] program;
|
||||||
private int programIndex = 0;
|
private int programIndex = 0;
|
||||||
|
|
||||||
|
private static final int PROGRAM_SIZE = GameServer.INSTANCE.getConfig().getInt("factory_program_size");
|
||||||
|
|
||||||
public Factory() {
|
public Factory() {
|
||||||
super(2, 2);
|
super(2, 2);
|
||||||
}
|
}
|
||||||
@ -83,47 +85,57 @@ public class Factory extends Structure implements Updatable, MessageReceiver {
|
|||||||
private NonPlayerCharacter spawnNPC(Point p) {
|
private NonPlayerCharacter spawnNPC(Point p) {
|
||||||
|
|
||||||
NonPlayerCharacter npc;
|
NonPlayerCharacter npc;
|
||||||
|
|
||||||
if (programIndex == 0) {
|
if (programIndex == 0) {
|
||||||
npc = new HarvesterNPC();
|
npc = spawnRandomNpc(p);
|
||||||
npc.setWorld(getWorld());
|
|
||||||
npc.setObjectId(new ObjectId());
|
|
||||||
npc.setX(p.x);
|
|
||||||
npc.setY(p.y);
|
|
||||||
getWorld().addObject(npc);
|
|
||||||
getWorld().incUpdatable();
|
|
||||||
} else {
|
} else {
|
||||||
|
npc = spawnHackedNpc(p);
|
||||||
npc = new HackedNPC(program);
|
|
||||||
npc.setWorld(getWorld());
|
|
||||||
npc.setObjectId(new ObjectId());
|
|
||||||
npc.setX(p.x);
|
|
||||||
npc.setY(p.y);
|
|
||||||
getWorld().addObject(npc);
|
|
||||||
getWorld().incUpdatable();
|
|
||||||
|
|
||||||
System.out.println("NEW HACKED NPC");
|
|
||||||
this.locked = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private NonPlayerCharacter spawnRandomNpc(Point p) {
|
||||||
|
NonPlayerCharacter npc;
|
||||||
|
npc = new HarvesterNPC();
|
||||||
|
npc.setWorld(getWorld());
|
||||||
|
npc.setObjectId(new ObjectId());
|
||||||
|
npc.setX(p.x);
|
||||||
|
npc.setY(p.y);
|
||||||
|
getWorld().addObject(npc);
|
||||||
|
getWorld().incUpdatable();
|
||||||
|
return npc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private NonPlayerCharacter spawnHackedNpc(Point p) {
|
||||||
|
NonPlayerCharacter npc;
|
||||||
|
npc = new HackedNPC(program);
|
||||||
|
npc.setWorld(getWorld());
|
||||||
|
npc.setObjectId(new ObjectId());
|
||||||
|
npc.setX(p.x);
|
||||||
|
npc.setY(p.y);
|
||||||
|
getWorld().addObject(npc);
|
||||||
|
getWorld().incUpdatable();
|
||||||
|
|
||||||
|
this.locked = true;
|
||||||
|
this.programIndex = 0;
|
||||||
|
|
||||||
|
return npc;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean sendMessage(char[] message) {
|
public boolean sendMessage(char[] message) {
|
||||||
|
|
||||||
String strMessage = String.valueOf(message);
|
String strMessage = String.valueOf(message);
|
||||||
|
|
||||||
System.out.println("Received message " + strMessage);
|
|
||||||
if (locked) {
|
if (locked) {
|
||||||
Settlement settlement = NpcPlugin.settlementMap.get(getWorld().getId());
|
Settlement settlement = NpcPlugin.settlementMap.get(getWorld().getId());
|
||||||
|
|
||||||
if (Arrays.equals(settlement.getPassword(), message)) {
|
if (Arrays.equals(settlement.getPassword(), message)) {
|
||||||
System.out.println("Factory unlock");
|
|
||||||
this.locked = false;
|
this.locked = false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
System.out.println("Wrong password, " + strMessage + "!=" + String.valueOf(settlement.getPassword()));
|
|
||||||
} else if (programIndex <= 2048) { //todo config
|
} else if (programIndex <= 2048) { //todo config
|
||||||
|
|
||||||
if (programIndex == 0) {
|
if (programIndex == 0) {
|
||||||
@ -131,13 +143,11 @@ public class Factory extends Structure implements Updatable, MessageReceiver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
System.arraycopy(message, 0, program, programIndex, message.length);
|
System.arraycopy(message, 0, program, programIndex, message.length);
|
||||||
System.out.println("Factory append code: " + strMessage);
|
|
||||||
System.out.println("Wrote " + message.length + " chars");
|
|
||||||
programIndex += message.length;
|
programIndex += message.length;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import net.simon987.server.game.item.ItemVoid;
|
|||||||
import net.simon987.server.game.objects.Action;
|
import net.simon987.server.game.objects.Action;
|
||||||
import net.simon987.server.game.objects.ControllableUnit;
|
import net.simon987.server.game.objects.ControllableUnit;
|
||||||
import net.simon987.server.game.objects.Direction;
|
import net.simon987.server.game.objects.Direction;
|
||||||
import net.simon987.server.game.objects.HardwareHost;
|
import net.simon987.server.logging.LogManager;
|
||||||
import net.simon987.server.user.User;
|
import net.simon987.server.user.User;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
@ -17,9 +17,10 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class HackedNPC extends NonPlayerCharacter implements ControllableUnit, HardwareHost {
|
public class HackedNPC extends NonPlayerCharacter implements ControllableUnit {
|
||||||
|
|
||||||
private static final int MEM_SIZE = GameServer.INSTANCE.getConfig().getInt("hacked_npc_mem_size");
|
private static final int MEM_SIZE = GameServer.INSTANCE.getConfig().getInt("hacked_npc_mem_size");
|
||||||
|
private static final boolean DIE_ON_NO_ENERGY = GameServer.INSTANCE.getConfig().getInt("hacked_npc_die_on_no_energy") != 0;
|
||||||
|
|
||||||
private CPU cpu;
|
private CPU cpu;
|
||||||
/**
|
/**
|
||||||
@ -39,15 +40,15 @@ public class HackedNPC extends NonPlayerCharacter implements ControllableUnit, H
|
|||||||
|
|
||||||
cpu.setMemory(new Memory(MEM_SIZE));
|
cpu.setMemory(new Memory(MEM_SIZE));
|
||||||
cpu.setHardwareHost(this);
|
cpu.setHardwareHost(this);
|
||||||
//Write program
|
cpu.getMemory().write(0, program, 0, program.length);
|
||||||
boolean write = cpu.getMemory().write(0, program, 0, program.length);
|
|
||||||
System.out.println("Write " + write);
|
|
||||||
|
|
||||||
for (Object serialisedHw : (List) NpcPlugin.DEFAULT_HACKED_NPC.get("hardware")) {
|
for (Object serialisedHw : (List) NpcPlugin.DEFAULT_HACKED_NPC.get("hardware")) {
|
||||||
HardwareModule hardware = GameServer.INSTANCE.getRegistry().deserializeHardware((Document) serialisedHw, this);
|
HardwareModule hardware = GameServer.INSTANCE.getRegistry().deserializeHardware((Document) serialisedHw, this);
|
||||||
hardware.setCpu(cpu);
|
hardware.setCpu(cpu);
|
||||||
attachHardware(hardware, ((Document) serialisedHw).getInteger("address"));
|
attachHardware(hardware, ((Document) serialisedHw).getInteger("address"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setTask(new ExecuteCpuTask());
|
||||||
}
|
}
|
||||||
|
|
||||||
public HackedNPC(Document document) {
|
public HackedNPC(Document document) {
|
||||||
@ -68,37 +69,14 @@ public class HackedNPC extends NonPlayerCharacter implements ControllableUnit, H
|
|||||||
hardware.setCpu(cpu);
|
hardware.setCpu(cpu);
|
||||||
attachHardware(hardware, ((Document) serialisedHw).getInteger("address"));
|
attachHardware(hardware, ((Document) serialisedHw).getInteger("address"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setTask(new ExecuteCpuTask());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
|
super.update();
|
||||||
|
|
||||||
|
|
||||||
System.out.println(Util.toHex(cpu.getMemory().getBytes()));
|
|
||||||
|
|
||||||
//Execute code
|
|
||||||
System.out.println("HACKED NPC " + this.getObjectId());
|
|
||||||
int timeout = Math.min(getEnergy(), 30); //todo get from config
|
|
||||||
cpu.reset();
|
|
||||||
int cost = cpu.execute(timeout);
|
|
||||||
spendEnergy(cost);
|
|
||||||
|
|
||||||
if (currentAction == Action.WALKING) {
|
|
||||||
if (spendEnergy(100)) {
|
|
||||||
if (!incrementLocation()) {
|
|
||||||
//Couldn't walk
|
|
||||||
currentAction = Action.IDLE;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
currentAction = Action.IDLE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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
|
|
||||||
* was set last tick (IDLE)
|
|
||||||
*/
|
|
||||||
lastAction = currentAction;
|
lastAction = currentAction;
|
||||||
currentAction = Action.IDLE;
|
currentAction = Action.IDLE;
|
||||||
|
|
||||||
@ -108,32 +86,49 @@ public class HackedNPC extends NonPlayerCharacter implements ControllableUnit, H
|
|||||||
for (HardwareModule module : hardwareAddresses.values()) {
|
for (HardwareModule module : hardwareAddresses.values()) {
|
||||||
module.update();
|
module.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Don't bother calling checkCompleted()
|
||||||
|
getTask().tick(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setKeyboardBuffer(ArrayList<Integer> kbBuffer) {
|
public void setKeyboardBuffer(ArrayList<Integer> kbBuffer) {
|
||||||
|
LogManager.LOGGER.warning("Something went wrong here: Hacked NPC has no keyboard module" +
|
||||||
|
"@HackedNPC::setKeyBoardBuffer()");
|
||||||
|
Thread.dumpStack();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setParent(User user) {
|
public void setParent(User user) {
|
||||||
|
LogManager.LOGGER.warning("Something went wrong here: Hacked NPC has no parent" +
|
||||||
|
"@HackedNPC::setParent()");
|
||||||
|
Thread.dumpStack();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public User getParent() {
|
public User getParent() {
|
||||||
|
LogManager.LOGGER.warning("Something went wrong here: Hacked NPC has no parent" +
|
||||||
|
"@HackedNPC::getParent()");
|
||||||
|
Thread.dumpStack();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ArrayList<Integer> getKeyboardBuffer() {
|
public ArrayList<Integer> getKeyboardBuffer() {
|
||||||
|
LogManager.LOGGER.warning("Something went wrong here: Hacked NPC has no keyboard module" +
|
||||||
|
"@HackedNPC::getKeyBoardBuffer()");
|
||||||
|
Thread.dumpStack();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Memory getFloppyData() {
|
public Memory getFloppyData() {
|
||||||
|
LogManager.LOGGER.warning("Something went wrong here: Hacked NPC has floppy data." +
|
||||||
|
"@HackedNPC::getFloppyData()");
|
||||||
|
Thread.dumpStack();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAction(Action action) {
|
public void setAction(Action action) {
|
||||||
currentAction = action;
|
currentAction = action;
|
||||||
@ -141,11 +136,14 @@ public class HackedNPC extends NonPlayerCharacter implements ControllableUnit, H
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ArrayList<char[]> getConsoleMessagesBuffer() {
|
public ArrayList<char[]> getConsoleMessagesBuffer() {
|
||||||
return null;
|
return lastConsoleMessagesBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getConsoleMode() {
|
public int getConsoleMode() {
|
||||||
|
LogManager.LOGGER.warning("Something went wrong here: Hacked NPC has no console UI." +
|
||||||
|
"@HackedNPC::getConsoleMode()");
|
||||||
|
Thread.dumpStack();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,6 +208,10 @@ public class HackedNPC extends NonPlayerCharacter implements ControllableUnit, H
|
|||||||
public void setEnergy(int energy) {
|
public void setEnergy(int energy) {
|
||||||
NpcBattery battery = (NpcBattery) getHardware(NpcBattery.class);
|
NpcBattery battery = (NpcBattery) getHardware(NpcBattery.class);
|
||||||
battery.setEnergy(energy);
|
battery.setEnergy(energy);
|
||||||
|
|
||||||
|
if (energy == 0 && DIE_ON_NO_ENERGY) {
|
||||||
|
setDead(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean spendEnergy(int amount) {
|
public boolean spendEnergy(int amount) {
|
||||||
@ -217,6 +219,9 @@ public class HackedNPC extends NonPlayerCharacter implements ControllableUnit, H
|
|||||||
NpcBattery battery = (NpcBattery) getHardware(NpcBattery.class);
|
NpcBattery battery = (NpcBattery) getHardware(NpcBattery.class);
|
||||||
|
|
||||||
if (battery.getEnergy() - amount < 0) {
|
if (battery.getEnergy() - amount < 0) {
|
||||||
|
if (DIE_ON_NO_ENERGY) {
|
||||||
|
setDead(true);
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
battery.setEnergy(battery.getEnergy() - amount);
|
battery.setEnergy(battery.getEnergy() - amount);
|
||||||
|
@ -30,7 +30,6 @@ public class HarvesterNPC extends NonPlayerCharacter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
|
|
||||||
super.update();
|
super.update();
|
||||||
|
|
||||||
if (getSettlement() != null) {
|
if (getSettlement() != null) {
|
||||||
|
@ -30,7 +30,7 @@ public class NpcPlugin extends ServerPlugin {
|
|||||||
ServerConfiguration configuration = gameServer.getConfig();
|
ServerConfiguration configuration = gameServer.getConfig();
|
||||||
GameRegistry registry = gameServer.getRegistry();
|
GameRegistry registry = gameServer.getRegistry();
|
||||||
|
|
||||||
listeners.add(new WorldCreationListener(configuration.getInt("factory_spawn_rate")));
|
listeners.add(new WorldCreationListener(configuration.getInt("settlement_spawn_rate")));
|
||||||
listeners.add(new CpuInitialisationListener());
|
listeners.add(new CpuInitialisationListener());
|
||||||
listeners.add(new VaultWorldUpdateListener(configuration));
|
listeners.add(new VaultWorldUpdateListener(configuration));
|
||||||
listeners.add(new VaultCompleteListener());
|
listeners.add(new VaultCompleteListener());
|
||||||
@ -54,6 +54,8 @@ public class NpcPlugin extends ServerPlugin {
|
|||||||
|
|
||||||
settlementMap = new ConcurrentHashMap<>();
|
settlementMap = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
LogManager.LOGGER.fine("(NPC Plugin) Loading default HackedNPC settings from" +
|
||||||
|
" defaultHackedCubotHardware.json");
|
||||||
InputStream is = getClass().getClassLoader().getResourceAsStream("defaultHackedCubotHardware.json");
|
InputStream is = getClass().getClassLoader().getResourceAsStream("defaultHackedCubotHardware.json");
|
||||||
Scanner scanner = new Scanner(is).useDelimiter("\\A");
|
Scanner scanner = new Scanner(is).useDelimiter("\\A");
|
||||||
String json = scanner.next();
|
String json = scanner.next();
|
||||||
|
@ -55,8 +55,6 @@ public class Settlement implements MongoSerializable {
|
|||||||
|
|
||||||
public Settlement(World world) throws WorldGenerationException {
|
public Settlement(World world) throws WorldGenerationException {
|
||||||
|
|
||||||
System.out.println("SETTLING");
|
|
||||||
|
|
||||||
this.world = world;
|
this.world = world;
|
||||||
this.difficultyLevel = DifficultyLevel.NORMAL; //TODO randomize ?
|
this.difficultyLevel = DifficultyLevel.NORMAL; //TODO randomize ?
|
||||||
this.password = "12345678".toCharArray();
|
this.password = "12345678".toCharArray();
|
||||||
|
@ -10,7 +10,7 @@ import org.bson.types.ObjectId;
|
|||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public interface ControllableUnit extends MessageReceiver, Rechargeable, Attackable {
|
public interface ControllableUnit extends MessageReceiver, Rechargeable, Attackable, HardwareHost {
|
||||||
|
|
||||||
ObjectId getObjectId();
|
ObjectId getObjectId();
|
||||||
|
|
||||||
|
@ -138,9 +138,9 @@ public class SocketServer {
|
|||||||
} else {
|
} else {
|
||||||
ControllableUnit unit = user.getUser().getControlledUnit();
|
ControllableUnit unit = user.getUser().getControlledUnit();
|
||||||
|
|
||||||
json.put("c", charArraysToJSON(unit.getConsoleMessagesBuffer()));
|
json.put("console_message_buffer", charArraysToJSON(unit.getConsoleMessagesBuffer()));
|
||||||
json.put("keys", intListToJSON(unit.getKeyboardBuffer()));
|
json.put("keys", intListToJSON(unit.getKeyboardBuffer()));
|
||||||
json.put("cm", unit.getConsoleMode());
|
json.put("console_mode", unit.getConsoleMode());
|
||||||
|
|
||||||
sendJSONObject(user, json);
|
sendJSONObject(user, json);
|
||||||
}
|
}
|
||||||
|
@ -66,12 +66,15 @@ shield_energy_cost=50
|
|||||||
npc_lifetime=1024
|
npc_lifetime=1024
|
||||||
npc_max_factory_distance=3
|
npc_max_factory_distance=3
|
||||||
factory_max_npc_count=16
|
factory_max_npc_count=16
|
||||||
factory_spawn_rate=5
|
factory_program_size=1024
|
||||||
|
settlement_spawn_rate=5
|
||||||
harvester_hp_max=100
|
harvester_hp_max=100
|
||||||
harvester_regen=5
|
harvester_regen=5
|
||||||
harvester_biomass_drop_count=8
|
harvester_biomass_drop_count=8
|
||||||
radio_tower_range=3
|
radio_tower_range=3
|
||||||
hacked_npc_mem_size=5120
|
hacked_npc_mem_size=5120
|
||||||
|
npc_exec_time=5
|
||||||
|
hacked_npc_die_on_no_energy=1
|
||||||
#Vaults
|
#Vaults
|
||||||
vault_door_open_time=4
|
vault_door_open_time=4
|
||||||
min_electric_box_count=1
|
min_electric_box_count=1
|
||||||
|
26
Server/src/main/resources/static/js/mar.js
vendored
26
Server/src/main/resources/static/js/mar.js
vendored
@ -276,6 +276,9 @@ var config = {
|
|||||||
lowEnergy: 100,
|
lowEnergy: 100,
|
||||||
otherCubotAlpha: 0.6,
|
otherCubotAlpha: 0.6,
|
||||||
},
|
},
|
||||||
|
hackedNpc: {
|
||||||
|
tint: 0xE040FB,
|
||||||
|
},
|
||||||
biomass: {
|
biomass: {
|
||||||
tint: 0x63B85F,
|
tint: 0x63B85F,
|
||||||
tintHover: 0x00FF00,
|
tintHover: 0x00FF00,
|
||||||
@ -537,9 +540,9 @@ var TickListener = (function () {
|
|||||||
mar.client.keyboardBuffer.keys = message.keys;
|
mar.client.keyboardBuffer.keys = message.keys;
|
||||||
}
|
}
|
||||||
if (message.c != undefined) {
|
if (message.c != undefined) {
|
||||||
mar.client.consoleScreen.handleConsoleBufferUpdate(message.c, message.cm);
|
mar.client.consoleScreen.handleConsoleBufferUpdate(message.console_message_buffer, message.console_mode);
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
console.log("[MAR] Received " + message.c.length + " console message(s)");
|
console.log("[MAR] Received " + message.console_message_buffer.length + " console message(s)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -921,6 +924,7 @@ var Cubot = (function (_super) {
|
|||||||
_this.direction = json.direction;
|
_this.direction = json.direction;
|
||||||
_this.action = json.action;
|
_this.action = json.action;
|
||||||
_this.energy = _this.getEnergy(json);
|
_this.energy = _this.getEnergy(json);
|
||||||
|
_this.baseTint = config.cubot.tint;
|
||||||
_this.cubotSprite = mar.game.make.sprite(0, 0, "sheet", null);
|
_this.cubotSprite = mar.game.make.sprite(0, 0, "sheet", null);
|
||||||
_this.cubotSprite.anchor.set(0.5, 0);
|
_this.cubotSprite.anchor.set(0.5, 0);
|
||||||
_this.addChild(_this.cubotSprite);
|
_this.addChild(_this.cubotSprite);
|
||||||
@ -952,7 +956,6 @@ var Cubot = (function (_super) {
|
|||||||
_this.setShield(false);
|
_this.setShield(false);
|
||||||
return _this;
|
return _this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Cubot.prototype.getEnergy = function (json) {
|
Cubot.prototype.getEnergy = function (json) {
|
||||||
return json["net.simon987.cubotplugin.CubotBattery"].energy;
|
return json["net.simon987.cubotplugin.CubotBattery"].energy;
|
||||||
};
|
};
|
||||||
@ -963,11 +966,11 @@ var Cubot = (function (_super) {
|
|||||||
Cubot.prototype.onTileHover = function () {
|
Cubot.prototype.onTileHover = function () {
|
||||||
mar.game.add.tween(this).to({ isoZ: 45 }, 200, Phaser.Easing.Quadratic.InOut, true);
|
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);
|
mar.game.add.tween(this.scale).to({ x: 1.2, y: 1.2 }, 200, Phaser.Easing.Linear.None, true);
|
||||||
this.cubotSprite.tint = config.cubot.hoverTint;
|
|
||||||
if (this.text !== undefined) {
|
if (this.text !== undefined) {
|
||||||
this.text.visible = true;
|
this.text.visible = true;
|
||||||
}
|
}
|
||||||
this.hovered = true;
|
this.hovered = true;
|
||||||
|
this.cubotSprite.tint = this.getTint();
|
||||||
};
|
};
|
||||||
Cubot.prototype.onTileExit = function () {
|
Cubot.prototype.onTileExit = function () {
|
||||||
mar.game.add.tween(this).to({ isoZ: 15 }, 400, Phaser.Easing.Bounce.Out, true);
|
mar.game.add.tween(this).to({ isoZ: 15 }, 400, Phaser.Easing.Bounce.Out, true);
|
||||||
@ -1007,7 +1010,7 @@ var Cubot = (function (_super) {
|
|||||||
return config.cubot.lowEnergyTint;
|
return config.cubot.lowEnergyTint;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return config.cubot.tint;
|
return this.baseTint;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -1195,9 +1198,6 @@ var HarvesterNPC = (function (_super) {
|
|||||||
_this.text.visible = false;
|
_this.text.visible = false;
|
||||||
return _this;
|
return _this;
|
||||||
}
|
}
|
||||||
HarvesterNPC.prototype.getTint = function () {
|
|
||||||
return config.cubot.tint;
|
|
||||||
};
|
|
||||||
HarvesterNPC.prototype.updateDirection = function () {
|
HarvesterNPC.prototype.updateDirection = function () {
|
||||||
switch (this.direction) {
|
switch (this.direction) {
|
||||||
case Direction.NORTH:
|
case Direction.NORTH:
|
||||||
@ -1218,7 +1218,7 @@ var HarvesterNPC = (function (_super) {
|
|||||||
if (json.hasOwnProperty("net.simon987.npcplugin.NpcBattery")) {
|
if (json.hasOwnProperty("net.simon987.npcplugin.NpcBattery")) {
|
||||||
return json["net.simon987.npcplugin.NpcBattery"].energy;
|
return json["net.simon987.npcplugin.NpcBattery"].energy;
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 1000;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
HarvesterNPC.prototype.updateObject = function (json) {
|
HarvesterNPC.prototype.updateObject = function (json) {
|
||||||
@ -1242,24 +1242,20 @@ var HarvesterNPC = (function (_super) {
|
|||||||
}(Cubot));
|
}(Cubot));
|
||||||
var HackedNPC = (function (_super) {
|
var HackedNPC = (function (_super) {
|
||||||
__extends(HackedNPC, _super);
|
__extends(HackedNPC, _super);
|
||||||
|
|
||||||
function HackedNPC(json) {
|
function HackedNPC(json) {
|
||||||
var _this = _super.call(this, json) || this;
|
var _this = _super.call(this, json) || this;
|
||||||
_this.updateDirection();
|
_this.updateDirection();
|
||||||
_this.setText("Hacked NPC");
|
_this.setText("Hacked NPC");
|
||||||
_this.text.visible = false;
|
_this.text.visible = false;
|
||||||
_this.tint = 0xE040FB;
|
_this.baseTint = config.hackedNpc.tint;
|
||||||
|
_this.cubotSprite.tint = _this.baseTint;
|
||||||
return _this;
|
return _this;
|
||||||
}
|
}
|
||||||
|
|
||||||
HackedNPC.prototype.updateObject = function (json) {
|
HackedNPC.prototype.updateObject = function (json) {
|
||||||
_super.prototype.updateObject.call(this, json);
|
_super.prototype.updateObject.call(this, json);
|
||||||
var holoHw = json["net.simon987.cubotplugin.CubotHologram"];
|
var holoHw = json["net.simon987.cubotplugin.CubotHologram"];
|
||||||
this.updateHologram(holoHw.mode, holoHw.color, holoHw.value, holoHw.string);
|
this.updateHologram(holoHw.mode, holoHw.color, holoHw.value, holoHw.string);
|
||||||
};
|
};
|
||||||
HackedNPC.prototype.getEnergy = function (json) {
|
|
||||||
return json["net.simon987.npcplugin.NpcBattery"].energy;
|
|
||||||
};
|
|
||||||
return HackedNPC;
|
return HackedNPC;
|
||||||
}(HarvesterNPC));
|
}(HarvesterNPC));
|
||||||
var BiomassBlob = (function (_super) {
|
var BiomassBlob = (function (_super) {
|
||||||
|
@ -85,10 +85,12 @@ class TickListener implements MessageListener {
|
|||||||
|
|
||||||
//Update console screen
|
//Update console screen
|
||||||
if (message.c != undefined) {
|
if (message.c != undefined) {
|
||||||
mar.client.consoleScreen.handleConsoleBufferUpdate(message.c, message.cm as ConsoleMode);
|
mar.client.consoleScreen.handleConsoleBufferUpdate(
|
||||||
|
message.console_message_buffer,
|
||||||
|
message.console_mode as ConsoleMode);
|
||||||
|
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
console.log("[MAR] Received " + message.c.length + " console message(s)")
|
console.log("[MAR] Received " + message.console_message_buffer.length + " console message(s)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -138,6 +138,7 @@ class Cubot extends GameObject {
|
|||||||
protected cubotSprite: Phaser.Sprite;
|
protected cubotSprite: Phaser.Sprite;
|
||||||
private shieldBackSprite: Phaser.Sprite;
|
private shieldBackSprite: Phaser.Sprite;
|
||||||
private shieldFrontSprite: Phaser.Sprite;
|
private shieldFrontSprite: Phaser.Sprite;
|
||||||
|
protected baseTint: number;
|
||||||
|
|
||||||
constructor(json) {
|
constructor(json) {
|
||||||
//workaround for topological sort, needs sprite dimensions
|
//workaround for topological sort, needs sprite dimensions
|
||||||
@ -158,6 +159,7 @@ class Cubot extends GameObject {
|
|||||||
this.direction = json.direction;
|
this.direction = json.direction;
|
||||||
this.action = json.action;
|
this.action = json.action;
|
||||||
this.energy = this.getEnergy(json);
|
this.energy = this.getEnergy(json);
|
||||||
|
this.baseTint = config.cubot.tint;
|
||||||
|
|
||||||
this.cubotSprite = mar.game.make.sprite(0, 0, "sheet", null);
|
this.cubotSprite = mar.game.make.sprite(0, 0, "sheet", null);
|
||||||
this.cubotSprite.anchor.set(0.5, 0);
|
this.cubotSprite.anchor.set(0.5, 0);
|
||||||
@ -213,13 +215,12 @@ class Cubot extends GameObject {
|
|||||||
mar.game.add.tween(this).to({isoZ: 45}, 200, Phaser.Easing.Quadratic.InOut, true);
|
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);
|
mar.game.add.tween(this.scale).to({x: 1.2, y: 1.2}, 200, Phaser.Easing.Linear.None, true);
|
||||||
|
|
||||||
this.cubotSprite.tint = config.cubot.hoverTint;
|
|
||||||
|
|
||||||
if (this.text !== undefined) {
|
if (this.text !== undefined) {
|
||||||
this.text.visible = true;
|
this.text.visible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.hovered = true;
|
this.hovered = true;
|
||||||
|
this.cubotSprite.tint = this.getTint();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -269,7 +270,7 @@ class Cubot extends GameObject {
|
|||||||
if (this.energy <= config.cubot.lowEnergy) {
|
if (this.energy <= config.cubot.lowEnergy) {
|
||||||
return config.cubot.lowEnergyTint;
|
return config.cubot.lowEnergyTint;
|
||||||
} else {
|
} else {
|
||||||
return config.cubot.tint;
|
return this.baseTint;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return config.cubot.hoverTint;
|
return config.cubot.hoverTint;
|
||||||
@ -530,13 +531,6 @@ class HarvesterNPC extends Cubot {
|
|||||||
this.text.visible = false;
|
this.text.visible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Needs to be overridden because Cubot() calls getTint() when initialised
|
|
||||||
*/
|
|
||||||
public getTint() {
|
|
||||||
return config.cubot.tint;
|
|
||||||
}
|
|
||||||
|
|
||||||
public updateDirection() {
|
public updateDirection() {
|
||||||
switch (this.direction) {
|
switch (this.direction) {
|
||||||
case Direction.NORTH:
|
case Direction.NORTH:
|
||||||
@ -558,7 +552,7 @@ class HarvesterNPC extends Cubot {
|
|||||||
if (json.hasOwnProperty("net.simon987.npcplugin.NpcBattery")) {
|
if (json.hasOwnProperty("net.simon987.npcplugin.NpcBattery")) {
|
||||||
return json["net.simon987.npcplugin.NpcBattery"].energy;
|
return json["net.simon987.npcplugin.NpcBattery"].energy;
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 1000; //arbitrary number so that the lowEnergy color thresh doesn't trigger
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -600,7 +594,8 @@ class HackedNPC extends HarvesterNPC {
|
|||||||
this.updateDirection();
|
this.updateDirection();
|
||||||
this.setText("Hacked NPC");
|
this.setText("Hacked NPC");
|
||||||
this.text.visible = false;
|
this.text.visible = false;
|
||||||
this.tint = 0xE040FB;
|
this.baseTint = config.hackedNpc.tint;
|
||||||
|
this.cubotSprite.tint = this.baseTint;
|
||||||
}
|
}
|
||||||
|
|
||||||
updateObject(json) {
|
updateObject(json) {
|
||||||
@ -609,11 +604,6 @@ class HackedNPC extends HarvesterNPC {
|
|||||||
let holoHw = json["net.simon987.cubotplugin.CubotHologram"];
|
let holoHw = json["net.simon987.cubotplugin.CubotHologram"];
|
||||||
this.updateHologram(holoHw.mode, holoHw.color, holoHw.value, holoHw.string);
|
this.updateHologram(holoHw.mode, holoHw.color, holoHw.value, holoHw.string);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected getEnergy(json): number {
|
|
||||||
return json["net.simon987.npcplugin.NpcBattery"].energy
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,6 +18,9 @@ let config = {
|
|||||||
lowEnergy: 100, //Low energy threshold to change color
|
lowEnergy: 100, //Low energy threshold to change color
|
||||||
otherCubotAlpha: 0.6,
|
otherCubotAlpha: 0.6,
|
||||||
},
|
},
|
||||||
|
hackedNpc: {
|
||||||
|
tint: 0xE040FB,
|
||||||
|
},
|
||||||
biomass: {
|
biomass: {
|
||||||
tint: 0x63B85F,
|
tint: 0x63B85F,
|
||||||
tintHover: 0x00FF00,
|
tintHover: 0x00FF00,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user