mirror of
https://github.com/2006-Scape/2006Scape.git
synced 2026-07-04 08:39:05 +00:00
161 lines
4.1 KiB
Java
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;
|
|
}
|
|
} |