DEADSOFTWARE

a58a73bb1991fb4a485f806ff61c5df26d118de7
[cavedroid.git] / core / src / ru / deadsoftware / cavecraft / game / GameWorld.java
1 package ru.deadsoftware.cavecraft.game;
3 import ru.deadsoftware.cavecraft.game.objects.Drop;
5 public class GameWorld {
7 private int WIDTH, HEIGHT;
8 private int[][] foreMap;
9 private int[][] backMap;
11 public int getWidth() {
12 return WIDTH;
13 }
15 public int getHeight() {
16 return HEIGHT;
17 }
19 public int[][] getFullForeMap() {
20 return foreMap;
21 }
23 public int[][] getFullBackMap() {
24 return backMap;
25 }
27 private int transformX(int x) {
28 x = x % getWidth();
29 if (x < 0) x = getWidth() - Math.abs(x);
30 return x;
31 }
33 public int getForeMap(int x, int y) {
34 int map = 0;
35 try {
36 x = transformX(x);
37 map = foreMap[x][y];
38 } catch (ArrayIndexOutOfBoundsException e) {
39 //Gdx.app.error("GameWorld",e.toString());
40 }
41 return map;
42 }
44 public void setForeMap(int x, int y, int value) {
45 try {
46 x = transformX(x);
47 foreMap[x][y] = value;
48 } catch (ArrayIndexOutOfBoundsException e) {
49 //Gdx.app.error("GameWorld", e.toString());
50 }
51 }
53 public int getBackMap(int x, int y) {
54 int map = 0;
55 try {
56 x = transformX(x);
57 map = backMap[x][y];
58 } catch (ArrayIndexOutOfBoundsException e) {
59 //Gdx.app.error("GameWorld",e.toString());
60 }
61 return map;
62 }
64 public void setBackMap(int x, int y, int value) {
65 try {
66 x = transformX(x);
67 backMap[x][y] = value;
68 } catch (ArrayIndexOutOfBoundsException e) {
69 //Gdx.app.error("GameWorld", e.toString());
70 }
71 }
73 private void placeSlab(int x, int y, int value) {
74 switch (value) {
75 case 51:
76 setForeMap(x, y, 52);
77 break;
78 case 53:
79 setForeMap(x, y, 21);
80 break;
81 case 54:
82 setForeMap(x, y, 5);
83 break;
84 case 55:
85 setForeMap(x, y, 4);
86 break;
87 case 56:
88 setForeMap(x, y, 28);
89 break;
90 case 58:
91 setForeMap(x, y, 57);
92 break;
93 }
94 }
96 public void placeToForeground(int x, int y, int value) {
97 if (getForeMap(x, y) == 0 || value == 0 || !GameItems.getBlock(getForeMap(x, y)).coll) {
98 setForeMap(x, y, value);
99 } else if (GameItems.isSlab(value) && getForeMap(x, y) == value) {
100 placeSlab(x, y, value);
102 GameProc.UPD_X = x - 8;
103 GameProc.UPD_Y = y - 8;
104 GameProc.DO_UPD = true;
107 public void placeToBackground(int x, int y, int value) {
108 if (value == 0 || (getBackMap(x, y) == 0 && GameItems.getBlock(value).coll) &&
109 (!GameItems.getBlock(value).tp || value == 18)) {
110 setBackMap(x, y, value);
114 public void destroyForeMap(int x, int y, GameProc gp) {
115 if (GameItems.getBlock(getForeMap(x, y)).getDrop() > 0)
116 gp.drops.add(new Drop(transformX(x) * 16 + 4, y * 16 + 4, GameItems.getBlock(getForeMap(x, y)).getDrop()));
117 placeToForeground(x, y, 0);
120 public void destroyBackMap(int x, int y, GameProc gp) {
121 if (GameItems.getBlock(getBackMap(x, y)).getDrop() > 0)
122 gp.drops.add(new Drop(transformX(x) * 16 + 4, y * 16 + 4, GameItems.getBlock(getBackMap(x, y)).getDrop()));
123 placeToBackground(x, y, 0);
126 public void generate(int w, int h) {
127 WIDTH = w;
128 HEIGHT = h;
129 WorldGen.genWorld(WIDTH, HEIGHT);
130 foreMap = WorldGen.getForeMap();
131 backMap = WorldGen.getBackMap();
132 WorldGen.clear();
135 public void setMaps(int[][] foreMap, int[][] backMap) {
136 this.foreMap = foreMap.clone();
137 this.backMap = backMap.clone();
138 WIDTH = foreMap.length;
139 HEIGHT = foreMap[0].length;