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 8693776..a32a01a 100644 --- a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java @@ -44,6 +44,8 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr private int energy; private int maxEnergy; + private int jumpDistance; + private static final float SOLAR_PANEL_MULTIPLIER = 1; private static final int CONSOLE_BUFFER_MAX_SIZE = 40; @@ -63,13 +65,22 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr if (currentAction == Action.WALKING) { if (spendEnergy(100)) { - if (!incrementLocation()) { + if (!incrementLocation(1)) { //Couldn't walk currentAction = Action.IDLE; } } else { currentAction = Action.IDLE; } + } else if (currentAction == Action.JUMPING) { + if (spendEnergy(jumpDistance * 300)) { + if (!incrementLocation(jumpDistance)) { + //Couldn't jump + currentAction = Action.IDLE; + } + } else { + currentAction = Action.IDLE; + } } /* @@ -165,6 +176,10 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr return heldItem; } + public void setJumpDistance(int jumpDistance) { + this.jumpDistance = jumpDistance; + } + @Override public void setKeyboardBuffer(ArrayList kbBuffer) { keyboardBuffer = kbBuffer; diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotLeg.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotLeg.java index bb2f760..3667d4f 100644 --- a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotLeg.java +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotLeg.java @@ -18,6 +18,7 @@ public class CubotLeg extends CpuHardware implements JSONSerialisable { private static final int LEGS_SET_DIR = 1; private static final int LEGS_SET_DIR_AND_WALK = 2; + private static final int LEGS_JUMP = 3; /** * Hardware ID (Should be unique) @@ -72,6 +73,15 @@ public class CubotLeg extends CpuHardware implements JSONSerialisable { cubot.setCurrentAction(Action.WALKING); } } + } else if (a == LEGS_JUMP) { + // jump up to 3 spaces, each space costs 300 + if (b < 4 && cubot.getMaxEnergy() >= b * 300) { + cubot.setJumpDistance(b); + cubot.setCurrentAction(Action.JUMPING); + status.setErrorFlag(false); + } else { + status.setErrorFlag(true); + } } } diff --git a/Plugin NPC/src/main/java/net/simon987/npcplugin/NonPlayerCharacter.java b/Plugin NPC/src/main/java/net/simon987/npcplugin/NonPlayerCharacter.java index c35c4be..75f208a 100644 --- a/Plugin NPC/src/main/java/net/simon987/npcplugin/NonPlayerCharacter.java +++ b/Plugin NPC/src/main/java/net/simon987/npcplugin/NonPlayerCharacter.java @@ -108,7 +108,7 @@ public abstract class NonPlayerCharacter extends GameObject implements Updatable LogManager.LOGGER.severe("FIXME: moveTo:NonPlayerCharacter, Direction is null"); } - if (incrementLocation()) { + if (incrementLocation(1)) { lastAction = Action.WALKING; return true; } @@ -131,7 +131,7 @@ public abstract class NonPlayerCharacter extends GameObject implements Updatable getWorld().getX(), getWorld().getY() - 1) <= MAX_FACTORY_DISTANCE) { if (!moveTo(8, 0, 0)) { setDirection(Direction.NORTH); - incrementLocation(); + incrementLocation(1); } return true; } else { @@ -143,7 +143,7 @@ public abstract class NonPlayerCharacter extends GameObject implements Updatable getWorld().getX() + 1, getWorld().getY()) <= MAX_FACTORY_DISTANCE) { if (!moveTo(15, 7, 0)) { setDirection(Direction.EAST); - incrementLocation(); + incrementLocation(1); } return true; } else { @@ -154,7 +154,7 @@ public abstract class NonPlayerCharacter extends GameObject implements Updatable getWorld().getX(), getWorld().getY() + 1) <= MAX_FACTORY_DISTANCE) { if (!moveTo(8, 15, 0)) { setDirection(Direction.SOUTH); - incrementLocation(); + incrementLocation(1); } return true; } else { @@ -165,7 +165,7 @@ public abstract class NonPlayerCharacter extends GameObject implements Updatable getWorld().getX() - 1, getWorld().getY()) <= MAX_FACTORY_DISTANCE) { if (!moveTo(0, 7, 0)) { setDirection(Direction.WEST); - incrementLocation(); + incrementLocation(1); } return true; } else { diff --git a/Server/src/main/java/net/simon987/server/game/Action.java b/Server/src/main/java/net/simon987/server/game/Action.java index f9f037f..eb70465 100644 --- a/Server/src/main/java/net/simon987/server/game/Action.java +++ b/Server/src/main/java/net/simon987/server/game/Action.java @@ -6,6 +6,7 @@ public enum Action { WALKING, WITHDRAWING, DEPOSITING, - LISTENING + LISTENING, + JUMPING } diff --git a/Server/src/main/java/net/simon987/server/game/GameObject.java b/Server/src/main/java/net/simon987/server/game/GameObject.java index d7d958e..d1e28d3 100755 --- a/Server/src/main/java/net/simon987/server/game/GameObject.java +++ b/Server/src/main/java/net/simon987/server/game/GameObject.java @@ -49,24 +49,24 @@ public abstract class GameObject implements JSONSerialisable, MongoSerialisable * Increment the location of the game object by 1 tile * Collision checks happen here */ - public boolean incrementLocation() { + public boolean incrementLocation(int distance) { int newX = 0, newY = 0; if (direction == Direction.NORTH) { newX = x; - newY = (y - 1); + newY = (y - distance); } else if (direction == Direction.EAST) { - newX = (x + 1); + newX = (x + distance); newY = y; } else if (direction == Direction.SOUTH) { newX = x; - newY = (y + 1); + newY = (y + distance); } else if (direction == Direction.WEST) { - newX = (x - 1); + newX = (x - distance); newY = y; } @@ -84,13 +84,17 @@ public abstract class GameObject implements JSONSerialisable, MongoSerialisable } if (leftWorld != null) { - world.getGameObjects().remove(this); - world.decUpdatable(); - leftWorld.getGameObjects().add(this); - leftWorld.incUpdatable(); - setWorld(leftWorld); + if(!leftWorld.isTileBlocked(World.WORLD_SIZE+newX, newY)) { + world.getGameObjects().remove(this); + world.decUpdatable(); + leftWorld.getGameObjects().add(this); + leftWorld.incUpdatable(); + setWorld(leftWorld); - x = World.WORLD_SIZE - 1; + x = World.WORLD_SIZE + newX; + } else if (distance > 1) { + return incrementLocation(distance-1); + } } } else if (newX >= World.WORLD_SIZE) { //Move object to adjacent World (right) @@ -103,13 +107,17 @@ public abstract class GameObject implements JSONSerialisable, MongoSerialisable } if (rightWorld != null) { - world.getGameObjects().remove(this); - world.decUpdatable(); - rightWorld.getGameObjects().add(this); - rightWorld.incUpdatable(); - setWorld(rightWorld); + if(!rightWorld.isTileBlocked(newX-World.WORLD_SIZE, y)) { + world.getGameObjects().remove(this); + world.decUpdatable(); + rightWorld.getGameObjects().add(this); + rightWorld.incUpdatable(); + setWorld(rightWorld); - x = 0; + x = newX - World.WORLD_SIZE; + } else if (distance > 1) { + return incrementLocation(distance-1); + } } } else if (newY < 0) { //Move object to adjacent World (up) @@ -123,13 +131,17 @@ public abstract class GameObject implements JSONSerialisable, MongoSerialisable } if (upWorld != null) { - world.getGameObjects().remove(this); - world.decUpdatable(); - upWorld.getGameObjects().add(this); - upWorld.incUpdatable(); - setWorld(upWorld); + if (!upWorld.isTileBlocked(x, World.WORLD_SIZE+newY)) { + world.getGameObjects().remove(this); + world.decUpdatable(); + upWorld.getGameObjects().add(this); + upWorld.incUpdatable(); + setWorld(upWorld); - y = World.WORLD_SIZE - 1; + y = World.WORLD_SIZE + newY; + } else if (distance > 1) { + return incrementLocation(distance-1); + } } } else if (newY >= World.WORLD_SIZE) { //Move object to adjacent World (down) @@ -143,13 +155,17 @@ public abstract class GameObject implements JSONSerialisable, MongoSerialisable if (downWorld != null) { - world.getGameObjects().remove(this); - world.decUpdatable(); - downWorld.getGameObjects().add(this); - downWorld.incUpdatable(); - setWorld(downWorld); + if (!downWorld.isTileBlocked(x,newY-World.WORLD_SIZE)) { + world.getGameObjects().remove(this); + world.decUpdatable(); + downWorld.getGameObjects().add(this); + downWorld.incUpdatable(); + setWorld(downWorld); - y = 0; + y = newY - World.WORLD_SIZE; + } else if (distance > 1) { + return incrementLocation(distance-1); + } } } //Check collision @@ -157,7 +173,9 @@ public abstract class GameObject implements JSONSerialisable, MongoSerialisable //Tile is passable x = newX; y = newY; - } else { + } else if (distance > 1) { + return incrementLocation(distance-1); + }else { return false; }