private void lateralMove(int direction, GameInit gameInit) { if (direction == 0) { Vector2 start = gameInit.getPlayer().getLocation() + new Vector2(0, -2); int level = gameInit.getPlayer().getLevel(); if (start.Y >= 0) { int hits = 0; for (int i = 0; i < gameInit.getPlayer().getWalkingSize().X; i++) { Tile tile = gameInit.getCurrentZone().getTile(((int)start.X + i) / 30, (int)start.Y / 30, level); if (!tile.checkAvailability(((int)start.X + i) % 30, (int)start.Y % 30, level)) { hits++; } } if (hits == 0) { start += new Vector2(0, -2); if (start.Y < 0) { movePlayerUp(2, gameInit); } else { for (int i = 0; i < gameInit.getPlayer().getWalkingSize().X; i++) { Tile tile = gameInit.getCurrentZone().getTile(((int)start.X + i) / 30, (int)start.Y / 30, level); if (!tile.checkAvailability(((int)start.X + i) % 30, (int)start.Y % 30, level)) { hits++; movePlayerUp(2, gameInit); } } if (hits == 0) { movePlayerUp(4, gameInit); } } } } } else if (direction == 1) { Vector2 start = gameInit.getPlayer().getLocation() + new Vector2(0, 2 + gameInit.getPlayer().getWalkingSize().Y - 1); int level = gameInit.getPlayer().getLevel(); if (start.Y < gameInit.getCurrentZone().getPixelHeight()) { int hits = 0; for (int i = 0; i < gameInit.getPlayer().getWalkingSize().X; i++) { Tile tile = gameInit.getCurrentZone().getTile(((int)start.X + i) / 30, (int)start.Y / 30, level); if (!tile.checkAvailability(((int)start.X + i) % 30, (int)start.Y % 30, level)) { hits++; } } if (hits == 0) { start += new Vector2(0, 2); if (start.Y >= gameInit.getCurrentZone().getPixelHeight()) { movePlayerDown(2, gameInit); } else { for (int i = 0; i < gameInit.getPlayer().getWalkingSize().X; i++) { Tile tile = gameInit.getCurrentZone().getTile(((int)start.X + i) / 30, (int)start.Y / 30, level); if (!tile.checkAvailability(((int)start.X + i) % 30, (int)start.Y % 30, level)) { hits++; movePlayerDown(2, gameInit); } } if (hits == 0) { movePlayerDown(4, gameInit); } } } } } else if (direction == 2) { Vector2 start = gameInit.getPlayer().getLocation() + new Vector2(2 + gameInit.getPlayer().getWalkingSize().X - 1, 0); int level = gameInit.getPlayer().getLevel(); if (start.X < gameInit.getCurrentZone().getPixelWidth()) { int hits = 0; for (int i = 0; i < gameInit.getPlayer().getWalkingSize().Y; i++) { Tile tile = gameInit.getCurrentZone().getTile((int)start.X / 30, ((int)start.Y + i) / 30, level); if (!tile.checkAvailability(((int)start.X) % 30, ((int)start.Y + i) % 30, level)) { hits++; } } if (hits == 0) { start += new Vector2(2, 0); if (start.X >= gameInit.getCurrentZone().getPixelWidth()) { movePlayerRight(2, gameInit); } else { for (int i = 0; i < gameInit.getPlayer().getWalkingSize().Y; i++) { Tile tile = gameInit.getCurrentZone().getTile(((int)start.X) / 30, ((int)start.Y + i) / 30, level); if (!tile.checkAvailability(((int)start.X) % 30, ((int)start.Y + i) % 30, level)) { hits++; movePlayerRight(2, gameInit); } } if (hits == 0) { movePlayerRight(4, gameInit); } } } } } else if (direction == 3) { Vector2 start = gameInit.getPlayer().getLocation() + new Vector2(-2, 0); int level = gameInit.getPlayer().getLevel(); if (start.X >= 0) { int hits = 0; for (int i = 0; i < gameInit.getPlayer().getWalkingSize().Y; i++) { Tile tile = gameInit.getCurrentZone().getTile((int)start.X / 30, ((int)start.Y + i) / 30, level); if (!tile.checkAvailability(((int)start.X) % 30, ((int)start.Y + i) % 30, level)) { hits++; } } if (hits == 0) { start += new Vector2(-2, 0); if (start.X < 0) { movePlayerLeft(2, gameInit); } else { for (int i = 0; i < gameInit.getPlayer().getWalkingSize().Y; i++) { Tile tile = gameInit.getCurrentZone().getTile(((int)start.X) / 30, ((int)start.Y + i) / 30, level); if (!tile.checkAvailability(((int)start.X) % 30, ((int)start.Y + i) % 30, level)) { hits++; movePlayerLeft(2, gameInit); } } if (hits == 0) { movePlayerLeft(4, gameInit); } } } } } }
// check for npcs somewhere before move private void checkMove(int direction, GameInit gameInit) { if (direction == 0) { Vector2 start = gameInit.getPlayer().getLocation() + new Vector2(0, -2); int level = gameInit.getPlayer().getLevel(); if (start.Y >= 0) { int leftBump = 0; int rightBump = 0; int centerBump = 0; int hits = 0; for (int i = 0; i < gameInit.getPlayer().getWalkingSize().X; i++) { Tile tile = gameInit.getCurrentZone().getTile(((int)start.X + i) / 30, (int)start.Y / 30, level); if (!tile.checkAvailability(((int)start.X + i) % 30, (int)start.Y % 30, level)) { hits++; if (i < BUMP_RIGHT) { rightBump++; } else if (i >= BUMP_LEFT) { leftBump++; } else { centerBump++; } } } if (hits != 0) { if (centerBump == 0) { if (leftBump > 0) { movePlayerLeft(2, gameInit); } else if (rightBump > 0) { movePlayerRight(2, gameInit); } } } else { start += new Vector2(0, -2); if (start.Y < 0) { movePlayerUp(2, gameInit); } else { for (int i = 0; i < gameInit.getPlayer().getWalkingSize().X; i++) { Tile tile = gameInit.getCurrentZone().getTile(((int)start.X + i) / 30, (int)start.Y / 30, level); if (!tile.checkAvailability(((int)start.X + i) % 30, (int)start.Y % 30, level)) { hits++; movePlayerUp(2, gameInit); } } if (hits == 0) { movePlayerUp(4, gameInit); } } } } } else if (direction == 1) { Vector2 start = gameInit.getPlayer().getLocation() + new Vector2(0, 2 - 1 + gameInit.getPlayer().getWalkingSize().Y); int level = gameInit.getPlayer().getLevel(); if (start.Y < gameInit.getCurrentZone().getPixelHeight()) { int leftBump = 0; int rightBump = 0; int centerBump = 0; int hits = 0; for (int i = 0; i < gameInit.getPlayer().getWalkingSize().X; i++) { Tile tile = gameInit.getCurrentZone().getTile(((int)start.X + i) / 30, (int)start.Y / 30, level); if (!tile.checkAvailability(((int)start.X + i) % 30, (int)start.Y % 30, level)) { hits++; if (i < BUMP_RIGHT) { rightBump++; } else if (i >= BUMP_LEFT) { leftBump++; } else { centerBump++; } } } if (hits != 0) { if (centerBump == 0) { if (leftBump > 0) { movePlayerLeft(2, gameInit); } else if (rightBump > 0) { movePlayerRight(2, gameInit); } } } else { start += new Vector2(0, 2); if (start.Y >= gameInit.getCurrentZone().getPixelHeight()) { movePlayerDown(2, gameInit); } else { for (int i = 0; i < gameInit.getPlayer().getWalkingSize().X; i++) { Tile tile = gameInit.getCurrentZone().getTile(((int)start.X + i) / 30, (int)start.Y / 30, level); if (!tile.checkAvailability(((int)start.X + i) % 30, (int)start.Y % 30, level)) { hits++; movePlayerDown(2, gameInit); } } if (hits == 0) { movePlayerDown(4, gameInit); } } } } } else if (direction == 2) { Vector2 start = gameInit.getPlayer().getLocation() + new Vector2(2 - 1 + gameInit.getPlayer().getWalkingSize().X, 0); int level = gameInit.getPlayer().getLevel(); if (start.X < gameInit.getCurrentZone().getPixelWidth()) { int rightBump = 0; int leftBump = 0; int centerBump = 0; int hits = 0; for (int i = 0; i < gameInit.getPlayer().getWalkingSize().Y; i++) { Tile tile = gameInit.getCurrentZone().getTile(((int)start.X) / 30, ((int)start.Y + i) / 30, level); if (!tile.checkAvailability(((int)start.X) % 30, ((int)start.Y + i) % 30, level)) { hits++; if (i < BUMP_RIGHT) { rightBump++; } else if (i >= BUMP_LEFT) { leftBump++; } else { centerBump++; } } } if (hits != 0) { if (centerBump == 0) { if (leftBump > 0) { movePlayerDown(2, gameInit); } else if (rightBump > 0) { movePlayerUp(2, gameInit); } } } else { start += new Vector2(2, 0); if (start.X >= gameInit.getCurrentZone().getPixelWidth()) { movePlayerRight(2, gameInit); } else { for (int i = 0; i < gameInit.getPlayer().getWalkingSize().Y; i++) { Tile tile = gameInit.getCurrentZone().getTile(((int)start.X) / 30, ((int)start.Y + i) / 30, level); if (!tile.checkAvailability(((int)start.X) % 30, ((int)start.Y + i) % 30, level)) { hits++; movePlayerRight(2, gameInit); } } if (hits == 0) { movePlayerRight(4, gameInit); } } } } } else if (direction == 3) { Vector2 start = gameInit.getPlayer().getLocation() + new Vector2(-2, 0); int level = gameInit.getPlayer().getLevel(); if (start.X >= 0) { int rightBump = 0; int leftBump = 0; int centerBump = 0; int hits = 0; for (int i = 0; i < gameInit.getPlayer().getWalkingSize().Y; i++) { Tile tile = gameInit.getCurrentZone().getTile(((int)start.X) / 30, ((int)start.Y + i) / 30, level); if (!tile.checkAvailability(((int)start.X) % 30, ((int)start.Y + i) % 30, level)) { hits++; if (i < BUMP_RIGHT) { rightBump++; } else if (i >= BUMP_LEFT) { leftBump++; } else { centerBump++; } } } if (hits != 0) { if (centerBump == 0) { if (leftBump > 0) { movePlayerDown(2, gameInit); } else if (rightBump > 0) { movePlayerUp(2, gameInit); } } } else { start += new Vector2(-2, 0); if (start.X < 0) { movePlayerLeft(2, gameInit); } else { for (int i = 0; i < gameInit.getPlayer().getWalkingSize().Y; i++) { Tile tile = gameInit.getCurrentZone().getTile(((int)start.X) / 30, ((int)start.Y + i) / 30, level); if (!tile.checkAvailability(((int)start.X) % 30, ((int)start.Y + i) % 30, level)) { hits++; movePlayerLeft(2, gameInit); } } if (hits == 0) { movePlayerLeft(4, gameInit); } } } } } }