]> git.lizzy.rs Git - dragonblocks.git/blob - game/doors/init.js
Map abstraction and World class
[dragonblocks.git] / game / doors / init.js
1 doors = {};
2 doors.registerDoor = function(obj){
3         if(! obj || ! obj.name)
4                 return;
5         obj.desc = obj.desc || dblib.humanFormat(obj.name) + " Door";
6         obj.hardness = obj.hardness || 1;
7         obj.groups = obj.groups || [];
8         let name = "doors:" + "door_" + obj.name;
9         let texture = "doors_" + "door_" + obj.name;
10         let sound = "doors_" + "door_" + obj.name;
11         dragonblocks.registerItem({
12                 name: name,
13                 groups: obj.groups,
14                 desc: obj.desc,
15                 texture: texture + ".png",
16                 onuse: (map, x, y) => {
17                         if(! map.getNode(x, y) || map.getNode(x, y).stable || ! map.getNode(x, y - 1) || map.getNode(x, y - 1).stable)
18                                 return false;
19                         map.setNode(x, y - 1, name + "_front_upper");
20                         map.setNode(x, y, name + "_front_downer");
21                         dragonblocks.items[name].playSound("place");
22                         return true;
23                 },
24                 stacksize: obj.stacksize,
25         });
26         dragonblocks.registerNode({
27                 name: name + "_front_upper",
28                 groups: obj.groups,
29                 stable: true,
30                 mobstable: false,
31                 hardness: obj.hardness,
32                 desc: obj.desc,
33                 texture: texture + "_front_upper.png",
34                 ondig: (map, x, y) => {
35                         if(map.getNode(x, y + 1) && map.getNode(x, y + 1).name == name + "_front_downer")
36                                 map.setNode(x, y + 1, "air");
37                 },
38                 onclick: (map, x, y) => {
39                         if(map.getNode(x, y + 1) && map.getNode(x, y + 1).name == name + "_front_downer")
40                                 map.setNode(x, y + 1, name + "_side_downer");
41                         map.setNode(x, y, name + "_side_upper");
42                         dragonblocks.playSound(sound + "_close.ogg");
43                 },
44                 drops: name,
45                 hidden: true
46         });
47         dragonblocks.registerNode({
48                 name: name + "_front_downer",
49                 groups: obj.groups,
50                 stable: true,
51                 mobstable: false,
52                 hardness: obj.hardness,
53                 desc: obj.desc,
54                 texture: texture + "_front_downer.png",
55                 ondig: (map, x, y) => {
56                         if(map.getNode(x, y - 1) && map.getNode(x, y - 1).name == name + "_front_upper")
57                                 map.setNode(x, y - 1, "air");
58                 },
59                 onclick: (map, x, y) => {
60                         if(map.getNode(x, y - 1) && map.getNode(x, y - 1).name == name + "_front_upper")
61                                 map.setNode(x, y - 1, name + "_side_upper");
62                         map.setNode(x, y, name + "_side_downer");
63                         dragonblocks.playSound(sound + "_close.ogg");
64                 },
65                 drops: name,
66                 hidden: true
67         });
68         dragonblocks.registerNode({
69                 name: name + "_side_upper",
70                 groups: obj.groups,
71                 stable: true,
72                 hardness: obj.hardness,
73                 desc: obj.desc,
74                 texture: texture + "_side.png",
75                 ondig: (map, x, y) => {
76                         if(map.getNode(x, y + 1) && map.getNode(x, y + 1).name == name + "_side_downer")
77                                 map.setNode(x, y + 1, "air");
78                 },
79                 onclick: (map, x, y) => {
80                         if(map.getNode(x, y + 1) && map.getNode(x, y + 1).name == name + "_side_downer")
81                                 map.setNode(x, y + 1, name + "_front_downer");
82                         map.setNode(x, y, name + "_front_upper");
83                         dragonblocks.playSound(sound + "_open.ogg");
84                 },
85                 drops: name,
86                 hidden: true
87         });
88         dragonblocks.registerNode({
89                 name: name + "_side_downer",
90                 groups: obj.groups,
91                 stable: true,
92                 hardness: obj.hardness,
93                 desc: obj.desc,
94                 texture: texture + "_side.png",
95                 ondig: (map, x, y) => {
96                         if(map.getNode(x, y - 1) && map.getNode(x, y - 1).name == name + "_side_upper")
97                                 map.setNode(x, y - 1, "air");
98                 },
99                 onclick: (map, x, y) => {
100                         if(map.getNode(x, y - 1) && map.getNode(x, y - 1).name == name + "_side_upper")
101                                 map.setNode(x, y - 1, name + "_front_upper");
102                         map.setNode(x, y, name + "_front_downer");
103                         dragonblocks.playSound(sound + "_open.ogg");
104                 },
105                 drops: name,
106                 hidden: true
107         });
108         if(obj.material)
109                 dragonblocks.registerRecipe({
110                         result: name,
111                         recipe: [
112                                 [obj.material, obj.material],
113                                 [obj.material, obj.material],
114                                 [obj.material, obj.material],
115                         ],
116                 });
117 }
118 doors.registerTrapdoor = function(obj){
119         if(! obj || ! obj.name)
120                 return;
121         obj.mod = obj.mod || "doors";
122         obj.desc = obj.desc || dblib.humanFormat(obj.name) + " Trapdoor";
123         obj.hardness = obj.hardness || 1;
124         obj.groups = obj.groups || [];
125         let name = obj.mod + ":" + "trapdoor_" + obj.name;
126         let texture = obj.mod + "_" + "trapdoor_" + obj.name;
127         let sound = obj.mod + "_" + "trapdoor_" + obj.name;
128         dragonblocks.registerNode({
129                 name: name,
130                 groups: obj.groups,
131                 stable: true,
132                 mobstable: false,
133                 hardness: obj.hardness,
134                 desc: obj.desc,
135                 texture: texture + ".png",
136                 onclick: (map, x, y) => {
137                         map.setNode(x, y, name + "_closed");
138                         dragonblocks.playSound(sound + "_close.ogg");
139                 },
140                 stacksize: obj.stacksize,
141         });
142         dragonblocks.registerNode({
143                 name: name + "_closed",
144                 groups: obj.groups,
145                 stable: true,
146                 hardness: obj.hardness,
147                 desc: obj.desc,
148                 texture: texture + "_closed.png",
149                 onclick: (map, x, y) => {
150                         map.setNode(x, y, name);
151                         dragonblocks.playSound(sound + "_open.ogg");
152                 },
153                 drops: name,
154                 hidden: true
155         });
156         if(obj.material)
157                 dragonblocks.registerRecipe({
158                         result: name + " 2",
159                         recipe: [
160                                 [obj.material, obj.material, obj.material],
161                                 [obj.material, obj.material, obj.material],
162                         ],
163                 });
164 }