1 package ru
.deadsoftware
.cavedroid
.game
;
3 import ru
.deadsoftware
.cavedroid
.game
.objects
.Drop
;
5 public class GameWorld
{
7 private int WIDTH
, HEIGHT
;
8 private int[][] foreMap
;
9 private int[][] backMap
;
11 public int getWidth() {
15 public int getHeight() {
19 public float getWidthPx() {
23 public float getHeightPx() {
27 public int[][] getFullForeMap() {
31 public int[][] getFullBackMap() {
35 private int transformX(int x
) {
37 if (x
< 0) x
= getWidth() - Math
.abs(x
);
41 private int getMap(int x
, int y
, int layer
) {
45 map
= (layer
== 0) ? foreMap
[x
][y
] : backMap
[x
][y
];
46 } catch (ArrayIndexOutOfBoundsException e
) {
51 private void setMap(int x
, int y
, int layer
, int value
) {
54 if (layer
== 0) foreMap
[x
][y
] = value
;
55 else backMap
[x
][y
] = value
;
56 } catch (ArrayIndexOutOfBoundsException e
) {
60 public int getForeMap(int x
, int y
) {
61 return getMap(x
, y
, 0);
64 public void setForeMap(int x
, int y
, int value
) {
65 setMap(x
, y
, 0, value
);
68 public int getBackMap(int x
, int y
) {
69 return getMap(x
, y
, 1);
72 public void setBackMap(int x
, int y
, int value
) {
73 setMap(x
, y
, 1, value
);
76 private void placeSlab(int x
, int y
, int value
) {
99 public void placeToForeground(int x
, int y
, int value
) {
100 if (getForeMap(x
, y
) == 0 || value
== 0 || !GameItems
.getBlock(getForeMap(x
, y
)).hasCollision()) {
101 setForeMap(x
, y
, value
);
102 } else if (GameItems
.isSlab(value
) && getForeMap(x
, y
) == value
) {
103 placeSlab(x
, y
, value
);
105 GameProc
.UPD_X
= x
- 8;
106 GameProc
.UPD_Y
= y
- 8;
107 GameProc
.DO_UPD
= true;
110 public void placeToBackground(int x
, int y
, int value
) {
111 if (value
== 0 || (getBackMap(x
, y
) == 0 && GameItems
.getBlock(value
).hasCollision()) &&
112 (!GameItems
.getBlock(value
).isTransparent() || value
== 18)) {
113 setBackMap(x
, y
, value
);
117 public void destroyForeMap(int x
, int y
, GameProc gp
) {
118 if (GameItems
.getBlock(getForeMap(x
, y
)).getDrop() > 0)
119 gp
.drops
.add(new Drop(transformX(x
) * 16 + 4, y
* 16 + 4, GameItems
.getBlock(getForeMap(x
, y
)).getDrop()));
120 placeToForeground(x
, y
, 0);
123 public void destroyBackMap(int x
, int y
, GameProc gp
) {
124 if (GameItems
.getBlock(getBackMap(x
, y
)).getDrop() > 0)
125 gp
.drops
.add(new Drop(transformX(x
) * 16 + 4, y
* 16 + 4, GameItems
.getBlock(getBackMap(x
, y
)).getDrop()));
126 placeToBackground(x
, y
, 0);
129 public void generate(int w
, int h
) {
132 WorldGen
.genWorld(WIDTH
, HEIGHT
);
133 foreMap
= WorldGen
.getForeMap();
134 backMap
= WorldGen
.getBackMap();
138 public void setMaps(int[][] foreMap
, int[][] backMap
) {
139 this.foreMap
= foreMap
.clone();
140 this.backMap
= backMap
.clone();
141 WIDTH
= foreMap
.length
;
142 HEIGHT
= foreMap
[0].length
;