Advertisement
Guest User

Untitled

a guest
May 12th, 2012
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.66 KB | None | 0 0
  1. import org.rsbot.script.Script;
  2. import org.rsbot.script.ScriptManifest;
  3. import org.rsbot.script.internal.event.PaintListener;
  4. import org.rsbot.script.methods.*;
  5. import org.rsbot.script.wrappers.Area;
  6. import org.rsbot.script.wrappers.Tile;
  7.  
  8.  
  9. import java.awt.*;
  10. import java.util.*;
  11.  
  12. @ScriptManifest(name = "Room Generator", authors = {"Zalgo"}, description = "Builds a list of rooms from collision flags")
  13. public class RoomGeneration extends Script implements PaintListener {
  14. private ArrayList<Room> rooms = null;
  15. public enum Flag {
  16. // WALL_NORTHWEST(0x1),
  17. // WALL_NORTH(0x2),
  18. // WALL_NORTHEAST(0x4),
  19. // WALL_EAST(0x8),
  20. // WALL_SOUTHEAST(0x10),
  21. // WALL_SOUTH(0x20),
  22. // WALL_SOUTHWEST(0x40),
  23. // WALL_WEST(0x80),
  24.  
  25. // OBJECT_TILE(0x100),
  26.  
  27. WALL_BLOCK_NORTHWEST(0x200),
  28. WALL_BLOCK_NORTH(0x400),
  29. WALL_BLOCK_NORTHEAST(0x800),
  30. WALL_BLOCK_EAST(0x1000),
  31. WALL_BLOCK_SOUTHEAST(0x2000),
  32. WALL_BLOCK_SOUTH(0x4000),
  33. WALL_BLOCK_SOUTHWEST(0x8000),
  34. WALL_BLOCK_WEST(0x10000),
  35.  
  36. OBJECT_BLOCK(0x20000),
  37. DECORATION_BLOCK(0x40000),
  38.  
  39. WALL_ALLOW_RANGE_NORTHWEST(0x400000),
  40. WALL_ALLOW_RANGE_NORTH(0x800000),
  41. WALL_ALLOW_RANGE_NORTHEAST(0x1000000),
  42. WALL_ALLOW_RANGE_EAST(0x2000000),
  43. WALL_ALLOW_RANGE_SOUTHEAST(0x4000000),
  44. WALL_ALLOW_RANGE_SOUTH(0x8000000),
  45. WALL_ALLOW_RANGE_SOUTHWEST(0x10000000),
  46. WALL_ALLOW_RANGE_WEST(0x20000000),
  47. OBJECT_ALLOW_RANGE(0x40000000),
  48.  
  49. WATER(0x1280100),
  50.  
  51. NULL(0);
  52. private int flag;
  53.  
  54. Flag(int flag){
  55. this.flag = flag;
  56. }
  57.  
  58. public int getFlag() {
  59. return this.flag;
  60. }
  61.  
  62. public String toString() {
  63. return this.name();
  64. }
  65. }
  66.  
  67.  
  68. @Override
  69. protected int loop() {
  70. rooms = generateRooms(Flag.NULL);
  71. return 10000;
  72. }
  73.  
  74. public void onRepaint(Graphics graphics) {
  75. try {
  76. if(rooms != null) {
  77. for(Room room : rooms) {
  78. room.draw(graphics, Color.RED);
  79. }
  80. }
  81. } catch (Exception e) {
  82. e.printStackTrace();
  83. }
  84. }
  85.  
  86. private Flag getFlag(Tile tile) {
  87. Tile offset = Walking.getCollisionOffset(Game.getPlane());
  88. int[][] flags = Walking.getCollisionFlags(Game.getPlane());
  89. int tileFlag = flags[tile.getX() - (Game.getBaseX() + offset.getX())][tile.getY() - (Game.getBaseY() + offset.getY())];
  90. for(int iii = 0; iii < Flag.values().length; iii++) {
  91. int flag = Flag.values()[iii].getFlag();
  92. if((flag & tileFlag) != 0) {
  93. return Flag.values()[iii];
  94. }
  95. }
  96. return Flag.NULL;
  97. }
  98.  
  99. private Tile[] getTilesWithFlags(Flag... flags) {
  100. Tile[] loaded = getLoadedArea();
  101. ArrayList<Tile> filtered = new ArrayList<Tile>();
  102. for(Tile toCheck : loaded) {
  103. for(Flag flag : flags) {
  104. if(getFlag(toCheck) == flag){
  105. filtered.add(toCheck);
  106. break;
  107. }
  108. }
  109. }
  110. return filtered.toArray(new Tile[filtered.size()]);
  111. }
  112.  
  113. private Tile[] getLoadedArea() {
  114. Tile base = Game.getMapBase();
  115. ArrayList<Tile> tiles = new ArrayList<Tile>();
  116. tiles.add(base);
  117. int index = 1;
  118. for(int x = 1; x < 105; x++) {
  119. for(int y = 1; y < 104; y++) {
  120. tiles.add(index, base.derive(x - 1, y));
  121. index++;
  122. }
  123. if(x != 104){
  124. tiles.add(index, base.derive(x, 0));
  125. index++;
  126. }
  127. }
  128. return tiles.toArray(new Tile[tiles.size()]);
  129. }
  130.  
  131. private ArrayList<Room> generateRooms(Flag... flags) {
  132. //BFS SEARCH
  133. ArrayList<Tile> unchecked = new ArrayList<Tile>();
  134. for(Flag flag : flags) {
  135. unchecked.addAll(Arrays.asList(getTilesWithFlags(flag)));
  136. }
  137.  
  138. if(unchecked.size() != 0) {
  139. ArrayList<Room> rooms = new ArrayList<Room>();
  140. while(!unchecked.isEmpty()){
  141. ArrayList<Tile> areaTiles = new ArrayList<Tile>();
  142. Queue<Tile> queue = new LinkedList<Tile>();
  143. areaTiles.add(unchecked.get(0));
  144. queue.add(unchecked.get(0));
  145. unchecked.remove(0);
  146. while(!queue.isEmpty()) {
  147. Tile t = queue.remove();
  148. Tile child = null;
  149. while((child = getUncheckedChild(t, unchecked)) != null) {
  150. areaTiles.add(child);
  151. queue.add(child);
  152. unchecked.remove(child);
  153. }
  154. }
  155. rooms.add(new Room(areaTiles.toArray(new Tile[areaTiles.size()])));
  156. }
  157. return rooms;
  158. }
  159. return null;
  160. }
  161.  
  162. private Tile getUncheckedChild(Tile parent, ArrayList<Tile> unchecked) {
  163. Tile[] children = new Tile[] {parent.derive(1, 0), parent.derive(0, 1),
  164. parent.derive(-1, 0), parent.derive(0, -1)};
  165. for(Tile tile : children) {
  166. if(unchecked.contains(tile))
  167. return tile;
  168. }
  169. return null;
  170. }
  171.  
  172. private class Room {
  173. private Tile[] tiles;
  174.  
  175. public Room(Tile[] tiles) {
  176. this.tiles = tiles;
  177. }
  178.  
  179. public boolean contains(Tile inTile) {
  180. for(Tile tile : tiles) {
  181. if(tile.equals(inTile))
  182. return true;
  183. }
  184. return false;
  185. }
  186.  
  187. public void draw(Graphics graphics, Color color) {
  188. for(Tile tile : tiles) {
  189. if(tile.isOnMap())
  190. tile.draw(graphics, color, 0);
  191. }
  192. }
  193.  
  194. public Area getArea() {
  195. return new Area(tiles);
  196. }
  197. }
  198.  
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement