TileMap.java 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package pathgame.tilemap;
  2. import java.util.Iterator;
  3. import java.util.LinkedList;
  4. public class TileMap {
  5. private static class TownConverter {
  6. private int x;
  7. private int y;
  8. private int ticks = 0;
  9. private int index = -1;
  10. }
  11. private int towns = 0;
  12. private final int width;
  13. private final int height;
  14. private final int[][] tiles;
  15. private boolean dirty = true;
  16. private final LinkedList<TownConverter> townConverters = new LinkedList<>();
  17. private int homeX;
  18. private int homeY;
  19. public TileMap(int width, int height) {
  20. this.width = width;
  21. this.height = height;
  22. tiles = new int[width][height];
  23. }
  24. public int getWidth() {
  25. return width;
  26. }
  27. public int getHeight() {
  28. return height;
  29. }
  30. public void setTile(int x, int y, Tile tile) {
  31. dirty = true;
  32. if(tiles[x][y] == Tiles.TOWN.getId()) {
  33. towns--;
  34. }
  35. if(tile == Tiles.TOWN) {
  36. towns++;
  37. }
  38. tiles[x][y] = tile.getId();
  39. }
  40. public Tile getTile(int x, int y) {
  41. return Tile.fromId(tiles[x][y]);
  42. }
  43. public boolean isDirty() {
  44. return dirty;
  45. }
  46. public void clean() {
  47. dirty = false;
  48. }
  49. public void tick() {
  50. Iterator<TownConverter> iter = townConverters.iterator();
  51. while(iter.hasNext()) {
  52. TownConverter tc = iter.next();
  53. tc.ticks++;
  54. if(tc.ticks % 10 == 0) {
  55. tc.index++;
  56. if(tc.index >= Tiles.TOWN_BLOCKED.length) {
  57. iter.remove();
  58. continue;
  59. }
  60. setTile(tc.x, tc.y, Tiles.TOWN_BLOCKED[tc.index]);
  61. }
  62. }
  63. }
  64. public void convertTown(int x, int y) {
  65. TownConverter tc = new TownConverter();
  66. tc.x = x;
  67. tc.y = y;
  68. townConverters.add(tc);
  69. }
  70. public int getNumberOfTowns() {
  71. return towns;
  72. }
  73. public void setHomeTown(int x, int y) {
  74. homeX = x;
  75. homeY = y;
  76. }
  77. public int getHomeX() {
  78. return homeX;
  79. }
  80. public int getHomeY() {
  81. return homeY;
  82. }
  83. }