b6f84ecd42be2c7f20ee76e654e6088c67e14cdb
1 package ru
.deadsoftware
.cavedroid
.game
;
3 import com
.badlogic
.gdx
.Gdx
;
4 import com
.badlogic
.gdx
.graphics
.Texture
;
5 import com
.badlogic
.gdx
.graphics
.g2d
.Sprite
;
6 import com
.badlogic
.gdx
.utils
.ArrayMap
;
7 import com
.badlogic
.gdx
.utils
.JsonValue
;
8 import ru
.deadsoftware
.cavedroid
.game
.objects
.Block
;
9 import ru
.deadsoftware
.cavedroid
.game
.objects
.Item
;
10 import ru
.deadsoftware
.cavedroid
.misc
.Assets
;
12 import java
.util
.HashMap
;
14 public class GameItems
{
16 private static final HashMap
<String
, Integer
> blocksIds
= new HashMap
<>();
17 private static final HashMap
<String
, Integer
> itemsIds
= new HashMap
<>();
19 private static final ArrayMap
<String
, Block
> blocks
= new ArrayMap
<>();
20 private static final ArrayMap
<String
, Item
> items
= new ArrayMap
<>();
22 static boolean isFluid(int id
) {
23 return getBlock(id
).isFluid();
26 static boolean isWater(int id
) {
27 return getBlock(id
).getMeta().equals("water");
30 static boolean isLava(int id
) {
31 return getBlock(id
).getMeta().equals("lava");
34 static boolean isSlab(int id
) {
35 return getBlock(id
).getMeta().equals("slab");
38 static boolean fluidCanFlowThere(int thisId
, int thatId
) {
39 return thatId
== 0 || (!getBlock(thatId
).hasCollision() && !isFluid(thatId
)) ||
40 (isWater(thisId
) && isWater(thatId
) && thisId
< thatId
) ||
41 (isLava(thisId
) && isLava(thatId
) && thisId
< thatId
);
44 static Block
getBlock(int id
) {
45 return blocks
.getValueAt(id
);
48 static Item
getItem(int id
) {
49 return items
.getValueAt(id
);
52 static Block
getBlock(String key
) {
53 return blocks
.getValueAt(blocksIds
.get(key
));
56 static Item
getItem(String key
) {
57 return items
.getValueAt(itemsIds
.get(key
));
60 static int getBlockId(String key
) {
61 return blocksIds
.get(key
);
64 static int getItemId(String key
) {
65 return itemsIds
.get(key
);
68 static String
getBlockKey(int id
) {
69 return blocks
.getKeyAt(id
);
72 static String
getItemKey(int id
) {
73 return items
.getKeyAt(id
);
76 static int getBlockIdByItemId(int id
) {
77 return getBlockId(items
.getKeyAt(id
));
80 static int getBlocksSize() {
84 static int getItemsSize() {
88 static Sprite
getBlockTex(int id
) {
89 return getBlock(id
).getTex();
92 static Sprite
getItemTex(int id
) {
93 if (items
.getValueAt(id
).getType().equals("block")) return getBlockTex(id
);
94 else return getItem(id
).getTex();
97 public static void load() {
98 JsonValue json
= Assets
.jsonReader
.parse(Gdx
.files
.internal("json/game_items.json"));
99 for (JsonValue block
= json
.get("blocks").child(); block
!= null; block
= block
.next()) {
100 String key
= block
.name();
101 int left
= Assets
.getIntFromJson(block
, "left", 0);
102 int right
= Assets
.getIntFromJson(block
, "right", 0);
103 int top
= Assets
.getIntFromJson(block
, "top", 0);
104 int bottom
= Assets
.getIntFromJson(block
, "bottom", 0);
105 int hp
= Assets
.getIntFromJson(block
, "hp", -1);
106 boolean coll
= Assets
.getBooleanFromJson(block
, "collision", true);
107 boolean bg
= Assets
.getBooleanFromJson(block
, "background", false);
108 boolean tp
= Assets
.getBooleanFromJson(block
, "transparent", false);
109 boolean br
= Assets
.getBooleanFromJson(block
, "block_required", false);
110 boolean fluid
= Assets
.getBooleanFromJson(block
, "fluid", false);
111 String drop
= Assets
.getStringFromJson(block
, "drop", key
);
112 String meta
= Assets
.getStringFromJson(block
, "meta", "");
113 String tex
= Assets
.getStringFromJson(block
, "texture", key
);
114 Sprite sprite
= tex
.equals("none") ?
null :
115 new Sprite(new Texture(Gdx
.files
.internal("textures/blocks/" + tex
+ ".png")));
116 Block newBlock
= new Block(left
, top
, right
, bottom
, hp
, drop
, coll
, bg
, tp
, br
, fluid
, meta
, sprite
);
117 blocksIds
.put(key
, blocks
.size
);
118 blocks
.put(key
, newBlock
);
120 for (JsonValue item
= json
.get("items").child(); item
!= null; item
= item
.next()) {
121 String key
= item
.name();
122 String name
= Assets
.getStringFromJson(item
, "name", key
);
123 String type
= Assets
.getStringFromJson(item
, "type", "item");
124 String texture
= Assets
.getStringFromJson(item
, "texture", key
);
125 Sprite sprite
= type
.equals("block") ?
null :
126 new Sprite(new Texture(Gdx
.files
.internal("textures/items/" + texture
+ ".png")));
127 itemsIds
.put(key
, items
.size
);
128 items
.put(key
, new Item(name
, type
, sprite
));