Files
2006Scape/2006Redone Server/src/redone/world/TileControl.java
T
2019-06-18 15:04:35 -04:00

161 lines
4.1 KiB
Java

package redone.world;
import redone.game.npcs.Npc;
import redone.game.npcs.NpcSize;
import redone.game.players.Client;
public class TileControl {
public static Tile generate(int x, int y, int z) {
return new Tile(x, y, z);
}
public static Tile[] getTiles(Client client) {
int size = 1, tileCount = 0;
Tile[] tiles = new Tile[size * size];
if (tiles.length == 1)
tiles[0] = generate(client.absX, client.absY, client.heightLevel);
else {
for (int x = 0; x < size; x++)
for (int y = 0; y < size; y++)
tiles[tileCount++] = generate(client.absX + x, client.absY + y, client.heightLevel);
}
return tiles;
}
public static Tile[] getTiles(Npc npc) {
int size = 1, tileCount = 0;
size = NpcSize.getNPCSize(npc.npcType);
Tile[] tiles = new Tile[size * size];
if (tiles.length == 1)
tiles[0] = generate(npc.absX, npc.absY, npc.heightLevel);
else {
for (int x = 0; x < size; x++)
for (int y = 0; y < size; y++)
tiles[tileCount++] = generate(npc.absX + x, npc.absY + y, npc.heightLevel);
}
return tiles;
}
public static int calculateDistance(Client client, Client following) {
Tile[] tiles = getTiles(client);
int[] location = currentLocation(client);
int[] pointer = new int[tiles.length];
int lowestCount = 20, count = 0;
for (Tile newTiles : tiles) {
if (newTiles.getTile() == location)
pointer[count++] = 0;
else
pointer[count++] = calculateDistance(newTiles, following);
}
for (int i = 0; i < pointer.length; i++)
if (pointer[i] < lowestCount)
lowestCount = pointer[i];
return lowestCount;
}
public static int calculateDistance(Npc npc, Client following) {
Tile[] tiles = getTiles(npc);
int[] location = currentLocation(npc);
int[] pointer = new int[tiles.length];
int lowestCount = 20, count = 0;
for (Tile newTiles : tiles) {
if (newTiles.getTile() == location)
pointer[count++] = 0;
else
pointer[count++] = calculateDistance(newTiles, following);
}
for (int i = 0; i < pointer.length; i++)
if (pointer[i] < lowestCount)
lowestCount = pointer[i];
return lowestCount;
}
public static int calculateDistance(Client client, Npc npc) {
Tile[] tiles = getTiles(client);
int[] location = currentLocation(client);
int[] pointer = new int[tiles.length];
int lowestCount = 20, count = 0;
for (Tile newTiles : tiles) {
if (newTiles.getTile() == location)
pointer[count++] = 0;
else
pointer[count++] = calculateDistance(newTiles, npc);
}
for (int i = 0; i < pointer.length; i++)
if (pointer[i] < lowestCount)
lowestCount = pointer[i];
return lowestCount;
}
public static int calculateDistance(Tile location, Client other) {
int X = Math.abs(location.getTile()[0] - other.absX);
int Y = Math.abs(location.getTile()[1] - other.absY);
return X > Y ? X : Y;
}
public static int calculateDistance(Tile location, Npc other) {
int X = Math.abs(location.getTile()[0] - other.absX);
int Y = Math.abs(location.getTile()[1] - other.absY);
return X > Y ? X : Y;
}
public static int calculateDistance(int[] location, int[] other) {
int X = Math.abs(location[0] - other[0]);
int Y = Math.abs(location[1] - other[1]);
return X > Y ? X : Y;
}
public static int[] currentLocation(Client client) {
int[] currentLocation = new int[3];
if (client != null) {
currentLocation[0] = client.absX;
currentLocation[1] = client.absY;
currentLocation[2] = client.heightLevel;
}
return currentLocation;
}
public static int[] currentLocation(Npc npc) {
int[] currentLocation = new int[3];
if (npc != null) {
currentLocation[0] = npc.absX;
currentLocation[1] = npc.absY;
currentLocation[2] = npc.heightLevel;
}
return currentLocation;
}
public static int[] currentLocation(Tile tileLocation) {
int[] currentLocation = new int[3];
if (tileLocation != null) {
currentLocation[0] = tileLocation.getTile()[0];
currentLocation[1] = tileLocation.getTile()[1];
currentLocation[2] = tileLocation.getTile()[2];
}
return currentLocation;
}
}