DEADSOFTWARE

Minor enhancements
[cavedroid.git] / core / src / ru / deadsoftware / cavecraft / game / GameWorld.java
1 package ru.deadsoftware.cavecraft.game;
3 import com.badlogic.gdx.Gdx;
4 import com.badlogic.gdx.math.Vector2;
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 || !Items.BLOCKS.getValueAt(getForeMap(x, y)).collision) {
99 setForeMap(x, y, value);
100 } else if (Items.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 && Items.BLOCKS.getValueAt(value).collision) &&
110 (!Items.BLOCKS.getValueAt(value).transparent || value == 18)) {
111 setBackMap(x,y,value);
115 public Vector2 getSpawnPoint() {
116 int x=0,y=0;
117 while (true) {
118 y++;
119 if (getForeMap(x,y)>0 && Items.BLOCKS.getValueAt(getForeMap(x,y)).collision) break;
121 x = x*16 + 4;
122 y = y*16 - 32;
123 return new Vector2(x,y);
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;