package org.moparscape.msc.gs.model; import java.util.ArrayList; import java.util.List; import org.moparscape.msc.gs.Instance; import org.moparscape.msc.gs.model.landscape.ActiveTile; public class ViewArea { private static World world = Instance.getWorld(); private Mob mob; public ViewArea(Mob mob) { this.mob = mob; } public List getGameObjectsInView() { List objects = new ArrayList(); ActiveTile[][] viewArea = getViewedArea(21, 21, 21, 21); for (int x = 0; x < viewArea.length; x++) { for (int y = 0; y < viewArea[x].length; y++) { ActiveTile t = viewArea[x][y]; if (t != null) { if (t.hasGameObject()) { objects.add(t.getGameObject()); } } } } return objects; } public List getItemsInView() { List items = new ArrayList(); ActiveTile[][] viewArea = getViewedArea(21, 21, 21, 21); for (int x = 0; x < viewArea.length; x++) { for (int y = 0; y < viewArea[x].length; y++) { ActiveTile t = viewArea[x][y]; if (t != null) { items.addAll(t.getItems()); } } } return items; } public List getNpcsInView() { List npcs = new ArrayList(); ActiveTile[][] viewArea = getViewedArea(15, 15, 16, 16); for (int x = 0; x < viewArea.length; x++) for (int y = 0; y < viewArea[x].length; y++) { ActiveTile t = viewArea[x][y]; if (t != null) { List temp = t.getNpcs(); if (temp != null) { npcs.addAll(temp); } } } return npcs; } public List getPlayersInView() { List players = new ArrayList(); ActiveTile[][] viewArea = getViewedArea(15, 15, 16, 16); for (int x = 0; x < viewArea.length; x++) for (int y = 0; y < viewArea[x].length; y++) { ActiveTile t = viewArea[x][y]; if (t != null) { List temp = t.getPlayers(); if (temp != null) { players.addAll(temp); } } } return players; } public ActiveTile[][] getViewedArea(int x1, int y1, int x2, int y2) { int mobX = mob.getX(); int mobY = mob.getY(); int startX, startY, endX, endY; startX = mobX - x1; if (startX < 0) { startX = 0; } startY = mobY - y1; if (startY < 0) { startY = 0; } endX = mobX + x2; if (endX >= World.MAX_WIDTH) { endX = World.MAX_WIDTH - 1; } endY = mobY + y2; if (endY >= World.MAX_HEIGHT) { endY = World.MAX_HEIGHT - 1; } int xWidth; int yWidth; if (startX > endX) { xWidth = startX - endX; } else { xWidth = endX - startX; } if (startY > endY) { yWidth = startY - endY; } else { yWidth = endY - startY; } ActiveTile[][] temp = new ActiveTile[xWidth][yWidth]; for (int x = 0; (x + startX) < endX; x++) { for (int y = 0; (y + startY) < endY; y++) { temp[x][y] = world.tiles[x + startX][y + startY]; } } return temp; } }