DEADSOFTWARE

Drop magnets to player
[cavedroid.git] / core / src / ru / deadsoftware / cavecraft / game / GameWorld.java
1 package ru.deadsoftware.cavecraft.game;
3 import com.badlogic.gdx.math.Vector2;
4 import ru.deadsoftware.cavecraft.game.objects.Drop;
6 public class GameWorld {
8 private int WIDTH, HEIGHT;
9 private int[][] foreMap;
10 private int[][] backMap;
12 public int getWidth() {
13 return WIDTH;
14 }
16 public int getHeight() {
17 return HEIGHT;
18 }
20 public int[][] getFullForeMap() {
21 return foreMap;
22 }
24 public int[][] getFullBackMap() {
25 return backMap;
26 }
28 private int transformX(int x) {
29 x = x % getWidth();
30 if (x < 0) x = getWidth() - Math.abs(x);
31 return x;
32 }
34 public int getForeMap(int x, int y) {
35 int map = 0;
36 try {
37 x = transformX(x);
38 map = foreMap[x][y];
39 } catch (ArrayIndexOutOfBoundsException e) {
40 //Gdx.app.error("GameWorld",e.toString());
41 }
42 return map;
43 }
45 public void setForeMap(int x, int y, int value) {
46 try {
47 x = transformX(x);
48 foreMap[x][y] = value;
49 } catch (ArrayIndexOutOfBoundsException e) {
50 //Gdx.app.error("GameWorld", e.toString());
51 }
52 }
54 public int getBackMap(int x, int y) {
55 int map = 0;
56 try {
57 x = transformX(x);
58 map = backMap[x][y];
59 } catch (ArrayIndexOutOfBoundsException e) {
60 //Gdx.app.error("GameWorld",e.toString());
61 }
62 return map;
63 }
65 public void setBackMap(int x, int y, int value) {
66 try {
67 x = transformX(x);
68 backMap[x][y] = value;
69 } catch (ArrayIndexOutOfBoundsException e) {
70 //Gdx.app.error("GameWorld", e.toString());
71 }
72 }
74 private void placeSlab(int x, int y, int value) {
75 switch (value) {
76 case 51:
77 setForeMap(x, y, 52);
78 break;
79 case 53:
80 setForeMap(x, y, 21);
81 break;
82 case 54:
83 setForeMap(x, y, 5);
84 break;
85 case 55:
86 setForeMap(x, y, 4);
87 break;
88 case 56:
89 setForeMap(x, y, 28);
90 break;
91 case 58:
92 setForeMap(x, y, 57);
93 break;
94 }
95 }
97 public void placeToForeground(int x, int y, int value) {
98 if (getForeMap(x, y) == 0 || value == 0 || !GameItems.getBlock(getForeMap(x, y)).coll) {
99 setForeMap(x, y, value);
100 } else if (GameItems.isSlab(value) && getForeMap(x, y) == value) {
101 placeSlab(x, y, value);
103 GameProc.UPD_X = x - 8;
104 GameProc.UPD_Y = y - 8;
105 GameProc.DO_UPD = true;
108 public void placeToBackground(int x, int y, int value) {
109 if (value == 0 || (getBackMap(x, y) == 0 && GameItems.getBlock(value).coll) &&
110 (!GameItems.getBlock(value).tp || value == 18)) {
111 setBackMap(x, y, value);
115 public void destroyForeMap(int x, int y, GameProc gp) {
116 if (GameItems.getBlock(getForeMap(x, y)).getDrop() > 0)
117 gp.drops.add(new Drop(transformX(x) * 16 + 4, y * 16 + 4, GameItems.getBlock(getForeMap(x, y)).getDrop()));
118 placeToForeground(x, y, 0);
121 public void destroyBackMap(int x, int y, GameProc gp) {
122 if (GameItems.getBlock(getBackMap(x, y)).getDrop() > 0)
123 gp.drops.add(new Drop(transformX(x) * 16 + 4, y * 16 + 4, GameItems.getBlock(getBackMap(x, y)).getDrop()));
124 placeToBackground(x, y, 0);
127 public Vector2 getSpawnPoint() {
128 int x = 0, y = 0;
129 while (true) {
130 y++;
131 if (getForeMap(x, y) > 0 && GameItems.getBlock(getForeMap(x, y)).coll) break;
133 x = x * 16 + 4;
134 y = y * 16 - 32;
135 return new Vector2(x, y);
138 public void generate(int w, int h) {
139 WIDTH = w;
140 HEIGHT = h;
141 WorldGen.genWorld(WIDTH, HEIGHT);
142 foreMap = WorldGen.getForeMap();
143 backMap = WorldGen.getBackMap();
144 WorldGen.clear();
147 public void setMaps(int[][] foreMap, int[][] backMap) {
148 this.foreMap = foreMap.clone();
149 this.backMap = backMap.clone();
150 WIDTH = foreMap.length;
151 HEIGHT = foreMap[0].length;