public void tick(GameObjectManager manager, ActionQueue queue) { /* * CHECK COLLISION WITH EXPLOSIONS */ for (GameObject object : manager.getByType(GameObjectType.EXPLOSION)) { if (checkCollisionWith(object)) { state = BombermanState.DEAD; queue.put(new Action(ActionType.DESTROY, new Object[] {id})); return; } } /* * PICK UP POWERUP */ for (GameObject object : manager.getByType(GameObjectType.POWER_UP)) { if (checkCollisionWith(object)) { switch (((GPowerUp) object).getPowerUpType()) { case BOMB: maxBombs++; break; case POWER: bombPower++; break; case SPEED: speedCooldown = 5 * 30; position.incrementX(position.getX() % 8); position.incrementY(position.getY() % 8); break; default: break; } queue.put(new Action(ActionType.DESTROY, new Object[] {object.getId()})); break; } } /* * SPEED COOLDOWN */ if (speedCooldown > 0) { speedCooldown--; speed = 8; if (speedCooldown == 0) { position.incrementX(position.getX() % 4); position.incrementY(position.getY() % 4); speed = 4; } } /* * BOMB COOLDOWN */ if (--bombCooldown <= 0) { if (bombs < maxBombs) { bombs++; } bombCooldown = 30 * 3; } /* * UPDATE POSITION */ if (w) { Position oldPosition = position.clonePos(); position.decrementY(speed); for (GameObject object : manager.getByType(GameObjectType.SOLID_BLOCK, GameObjectType.DESTROYBALE_BLOCK)) { if (checkCollisionWith(object)) { position = oldPosition; } else { state = BombermanState.UP; updatePosition = true; } } } if (a) { Position oldPosition = position.clonePos(); position.decrementX(speed); for (GameObject object : manager.getByType(GameObjectType.SOLID_BLOCK, GameObjectType.DESTROYBALE_BLOCK)) { if (checkCollisionWith(object)) { position = oldPosition; } else { state = BombermanState.LEFT; updatePosition = true; } } } if (s) { Position oldPosition = position.clonePos(); position.incrementY(speed); for (GameObject object : manager.getByType(GameObjectType.SOLID_BLOCK, GameObjectType.DESTROYBALE_BLOCK)) { if (checkCollisionWith(object)) { position = oldPosition; } else { state = BombermanState.DOWN; updatePosition = true; } } } if (d) { Position oldPosition = position.clonePos(); position.incrementX(speed); for (GameObject object : manager.getByType(GameObjectType.SOLID_BLOCK, GameObjectType.DESTROYBALE_BLOCK)) { if (checkCollisionWith(object)) { position = oldPosition; } else { state = BombermanState.RIGHT; updatePosition = true; } } } if (enter) { if (bombs > 0 && canPlace) { boolean collision = false; for (GameObject object : manager.getByType(GameObjectType.BOMB)) { if (checkCollisionWith(object)) { collision = true; break; } } if (!collision) { Position pos = new Position((position.getX() + 32) / 64 * 64, (position.getY() + 32) / 64 * 64); Action action = new Action( ActionType.CREATE_BOMB, new Object[] {pos, IDGenerator.getId(), bombPower, id}); queue.put(action); bombs--; canPlace = false; System.out.println("placed"); } } } if (updatePosition == false) { switch (state) { case DOWN: state = BombermanState.IDLE_DOWN; updatePosition = true; break; case LEFT: state = BombermanState.IDLE_LEFT; updatePosition = true; break; case RIGHT: state = BombermanState.IDLE_RIGHT; updatePosition = true; break; case UP: state = BombermanState.IDLE_UP; updatePosition = true; break; default: break; } } }