DEADSOFTWARE

Code improvements
[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 float getWidthPx() {
20 return WIDTH * 16f;
21 }
23 public float getHeightPx() {
24 return HEIGHT * 16f;
25 }
27 public int[][] getFullForeMap() {
28 return foreMap;
29 }
31 public int[][] getFullBackMap() {
32 return backMap;
33 }
35 private int transformX(int x) {
36 x = x % getWidth();
37 if (x < 0) x = getWidth() - Math.abs(x);
38 return x;
39 }
41 public int getForeMap(int x, int y) {
42 int map = 0;
43 try {
44 x = transformX(x);
45 map = foreMap[x][y];
46 } catch (ArrayIndexOutOfBoundsException e) {
47 //Gdx.app.error("GameWorld",e.toString());
48 }
49 return map;
50 }
52 public void setForeMap(int x, int y, int value) {
53 try {
54 x = transformX(x);
55 foreMap[x][y] = value;
56 } catch (ArrayIndexOutOfBoundsException e) {
57 //Gdx.app.error("GameWorld", e.toString());
58 }
59 }
61 public int getBackMap(int x, int y) {
62 int map = 0;
63 try {
64 x = transformX(x);
65 map = backMap[x][y];
66 } catch (ArrayIndexOutOfBoundsException e) {
67 //Gdx.app.error("GameWorld",e.toString());
68 }
69 return map;
70 }
72 public void setBackMap(int x, int y, int value) {
73 try {
74 x = transformX(x);
75 backMap[x][y] = value;
76 } catch (ArrayIndexOutOfBoundsException e) {
77 //Gdx.app.error("GameWorld", e.toString());
78 }
79 }
81 private void placeSlab(int x, int y, int value) {
82 switch (value) {
83 case 51:
84 setForeMap(x, y, 52);
85 break;
86 case 53:
87 setForeMap(x, y, 21);
88 break;
89 case 54:
90 setForeMap(x, y, 5);
91 break;
92 case 55:
93 setForeMap(x, y, 4);
94 break;
95 case 56:
96 setForeMap(x, y, 28);
97 break;
98 case 58:
99 setForeMap(x, y, 57);
100 break;
104 public void placeToForeground(int x, int y, int value) {
105 if (getForeMap(x, y) == 0 || value == 0 || !GameItems.getBlock(getForeMap(x, y)).hasCollision()) {
106 setForeMap(x, y, value);
107 } else if (GameItems.isSlab(value) && getForeMap(x, y) == value) {
108 placeSlab(x, y, value);
110 GameProc.UPD_X = x - 8;
111 GameProc.UPD_Y = y - 8;
112 GameProc.DO_UPD = true;
115 public void placeToBackground(int x, int y, int value) {
116 if (value == 0 || (getBackMap(x, y) == 0 && GameItems.getBlock(value).hasCollision()) &&
117 (!GameItems.getBlock(value).isTransparent() || value == 18)) {
118 setBackMap(x, y, value);
122 public void destroyForeMap(int x, int y, GameProc gp) {
123 if (GameItems.getBlock(getForeMap(x, y)).getDrop() > 0)
124 gp.drops.add(new Drop(transformX(x) * 16 + 4, y * 16 + 4, GameItems.getBlock(getForeMap(x, y)).getDrop()));
125 placeToForeground(x, y, 0);
128 public void destroyBackMap(int x, int y, GameProc gp) {
129 if (GameItems.getBlock(getBackMap(x, y)).getDrop() > 0)
130 gp.drops.add(new Drop(transformX(x) * 16 + 4, y * 16 + 4, GameItems.getBlock(getBackMap(x, y)).getDrop()));
131 placeToBackground(x, y, 0);
134 public void generate(int w, int h) {
135 WIDTH = w;
136 HEIGHT = h;
137 WorldGen.genWorld(WIDTH, HEIGHT);
138 foreMap = WorldGen.getForeMap();
139 backMap = WorldGen.getBackMap();
140 WorldGen.clear();
143 public void setMaps(int[][] foreMap, int[][] backMap) {
144 this.foreMap = foreMap.clone();
145 this.backMap = backMap.clone();
146 WIDTH = foreMap.length;
147 HEIGHT = foreMap[0].length;