Vanessa Ezekowitz
2015-01-19 ec73a8508fc8458e10be6a93bbc3be2eba26595f
commit | author | age
ee0765 1 -- API for the technic CNC machine
S 2 -- Again code is adapted from the NonCubic Blocks MOD v1.4 by yves_de_beck
3
be2f30 4 local S = technic.getter
S 5
6 technic.cnc = {}
ee0765 7
S 8 -- REGISTER NONCUBIC FORMS, CREATE MODELS AND RECIPES:
9 ------------------------------------------------------
10
11 -- Define slope boxes for the various nodes
12 -------------------------------------------
13 technic.cnc.programs = {
ec73a8 14     { suffix  = "technic_cnc_stick",
VE 15         model = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15},
16         desc  = S("Stick")
17     },
ee0765 18
ec73a8 19     { suffix  = "technic_cnc_element_end_double",
VE 20         model = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5},
21         desc  = S("Element End Double")
22     },
ee0765 23
ec73a8 24     { suffix  = "technic_cnc_element_cross_double",
VE 25         model = {
26             {0.3, -0.5, -0.3, 0.5, 0.5, 0.3},
27             {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
28             {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}},
29         desc  = S("Element Cross Double")
30     },
ee0765 31
ec73a8 32     { suffix  = "technic_cnc_element_t_double",
VE 33         model = {
34             {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
35             {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3},
36             {0.3, -0.5, -0.3, 0.5, 0.5, 0.3}},
37         desc  = S("Element T Double")
38     },
ee0765 39
ec73a8 40     { suffix  = "technic_cnc_element_edge_double",
VE 41         model = {
42             {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3},
43             {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}},
44         desc  = S("Element Edge Double")
45     },
ee0765 46
ec73a8 47     { suffix  = "technic_cnc_element_straight_double",
VE 48         model = {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5},
49         desc  = S("Element Straight Double")
50     },
ee0765 51
ec73a8 52     { suffix  = "technic_cnc_element_end",
VE 53         model = {-0.3, -0.5, -0.3, 0.3, 0, 0.5},
54         desc  = S("Element End")
55     },
ee0765 56
ec73a8 57     { suffix  = "technic_cnc_element_cross",
VE 58         model = {
59             {0.3, -0.5, -0.3, 0.5, 0, 0.3},
60             {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
61             {-0.5, -0.5, -0.3, -0.3, 0, 0.3}},
62         desc  = S("Element Cross")
63     },
ee0765 64
ec73a8 65     { suffix  = "technic_cnc_element_t",
VE 66         model = {
67             {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
68             {-0.5, -0.5, -0.3, -0.3, 0, 0.3},
69             {0.3, -0.5, -0.3, 0.5, 0, 0.3}},
70         desc  = S("Element T")
71     },
ee0765 72
ec73a8 73     { suffix  = "technic_cnc_element_edge",
VE 74         model = {
75             {-0.3, -0.5, -0.5, 0.3, 0, 0.3},
76             {-0.5, -0.5, -0.3, -0.3, 0, 0.3}},
77         desc  = S("Element Edge")
78     },
ee0765 79
ec73a8 80     { suffix  = "technic_cnc_element_straight",
VE 81         model = {-0.3, -0.5, -0.5, 0.3, 0, 0.5},
82         desc  = S("Element Straight")
83     },
ee0765 84
ec73a8 85     { suffix  = "technic_cnc_sphere",
VE 86         model = "technic_oblatesphere.obj",
87         desc  = S("Oblate Sphere"),
88         cbox  = {
89             type = "fixed",
90             fixed = {
91                 { -6/16,  4/16, -6/16, 6/16,  8/16, 6/16 },
92                 { -8/16, -4/16, -8/16, 8/16,  4/16, 8/16 },
93                 { -6/16, -8/16, -6/16, 6/16, -4/16, 6/16 }
94             }
95         }
96     },
ee0765 97
ec73a8 98     { suffix  = "technic_cnc_cylinder_horizontal",
VE 99         model = "technic_cylinder_horizontal.obj",
100         desc  = S("Horizontal Cylinder")
101     },
ee0765 102
ec73a8 103     { suffix  = "technic_cnc_cylinder",
VE 104         model = "technic_cylinder.obj",
105         desc  = S("Cylinder")
106     },
ee0765 107
ec73a8 108     { suffix  = "technic_cnc_twocurvededge",
VE 109         model = "technic_two_curved_edge.obj",
110         desc  = S("Two Curved Edge/Corner Block")
111     },
ee0765 112
ec73a8 113     { suffix  = "technic_cnc_onecurvededge",
VE 114         model = "technic_one_curved_edge.obj",
115         desc  = S("One Curved Edge Block")
116     },
ee0765 117
ec73a8 118     { suffix  = "technic_cnc_spike",
VE 119         model = "technic_pyramid_spike.obj",
120         desc  = S("Spike"),
121         cbox    = {
122             type = "fixed",
123             fixed = {
124                 { -2/16,  4/16, -2/16, 2/16,  8/16, 2/16 },
125                 { -4/16,     0, -4/16, 4/16,  4/16, 4/16 },
126                 { -6/16, -4/16, -6/16, 6/16,     0, 6/16 },
127                 { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 }
128             }
129         }
130     },
ee0765 131
ec73a8 132     { suffix  = "technic_cnc_pyramid",
VE 133         model = "technic_pyramid.obj",
134         desc  = S("Pyramid"),
135         cbox  = {
136             type = "fixed",
137             fixed = {
138                 { -2/16, -2/16, -2/16, 2/16,     0, 2/16 },
139                 { -4/16, -4/16, -4/16, 4/16, -2/16, 4/16 },
140                 { -6/16, -6/16, -6/16, 6/16, -4/16, 6/16 },
141                 { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }
142             }
143         }
144     },
ee0765 145
ec73a8 146     { suffix  = "technic_cnc_slope_inner_edge_upsdown",
VE 147         model = "technic_innercorner_upsdown.obj",
148         desc  = S("Slope Upside Down Inner Edge/Corner"),
149         sbox  = {
150             type = "fixed",
151             fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }
152         },
153         cbox  = {
154             type = "fixed",
155             fixed = {
156                 {  0.25, -0.25, -0.5,  0.5, -0.5,   0.5  },
157                 { -0.5,  -0.25,  0.25, 0.5, -0.5,   0.5  },
158                 {  0,     0,    -0.5,  0.5, -0.25,  0.5  },
159                 { -0.5,   0,     0,    0.5, -0.25,  0.5  },
160                 { -0.25,  0.25, -0.5,  0.5,  0,    -0.25 },
161                 { -0.5,   0.25, -0.25, 0.5,  0,     0.5  },
162                 { -0.5,   0.5,  -0.5,  0.5,  0.25,  0.5  }
163             }
164         }
165     },
ee0765 166
ec73a8 167     { suffix  = "technic_cnc_slope_edge_upsdown",
VE 168         model = "technic_outercorner_upsdown.obj",
169         desc  = S("Slope Upside Down Outer Edge/Corner"),
170         cbox  = {
171             type = "fixed",
172             fixed = {
173                 { -8/16,  8/16, -8/16, 8/16,  4/16, 8/16 },
174                 { -4/16,  4/16, -4/16, 8/16,     0, 8/16 },
175                 {     0,     0,     0, 8/16, -4/16, 8/16 },
176                 {  4/16, -4/16,  4/16, 8/16, -8/16, 8/16 }
177             }
178         }
179     },
ee0765 180
ec73a8 181     { suffix  = "technic_cnc_slope_inner_edge",
VE 182         model = "technic_innercorner.obj",
183         desc  = S("Slope Inner Edge/Corner"),
184         sbox  = {
185             type = "fixed",
186             fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }
187         },
188         cbox  = {
189             type = "fixed",
190             fixed = {
191                 { -0.5,  -0.5,  -0.5,  0.5, -0.25,  0.5  },
192                 { -0.5,  -0.25, -0.25, 0.5,  0,     0.5  },
193                 { -0.25, -0.25, -0.5,  0.5,  0,    -0.25 },
194                 { -0.5,   0,     0,    0.5,  0.25,  0.5  },
195                 {  0,     0,    -0.5,  0.5,  0.25,  0.5  },
196                 { -0.5,   0.25,  0.25, 0.5,  0.5,   0.5  },
197                 {  0.25,  0.25, -0.5,  0.5,  0.5,   0.5  }
198             }
199         }
200     },
ee0765 201
ec73a8 202     { suffix  = "technic_cnc_slope_edge",
VE 203         model = "technic_outercorner.obj",
204         desc  = S("Slope Outer Edge/Corner"),
205         cbox  = {
206             type = "fixed",
207             fixed = {
208                 {  4/16,  4/16,  4/16, 8/16,  8/16, 8/16 },
209                 {     0,     0,     0, 8/16,  4/16, 8/16 },
210                 { -4/16, -4/16, -4/16, 8/16,     0, 8/16 },
211                 { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 }
212             }
213         }
214     },
ee0765 215
ec73a8 216     { suffix  = "technic_cnc_slope_upsdown",
VE 217         model = "technic_slope_upsdown.obj",
218         desc  = S("Slope Upside Down"),
219         cbox  = {
220             type = "fixed",
221             fixed = {
222                 { -8/16,  8/16, -8/16, 8/16,  4/16, 8/16 },
223                 { -8/16,  4/16, -4/16, 8/16,     0, 8/16 },
224                 { -8/16,     0,     0, 8/16, -4/16, 8/16 },
225                 { -8/16, -4/16,  4/16, 8/16, -8/16, 8/16 }
226             }
227         }
228     },
ee0765 229
ec73a8 230     { suffix  = "technic_cnc_slope_lying",
VE 231         model = "technic_slope_horizontal.obj",
232         desc  = S("Slope Lying"),
233         cbox  = {
234             type = "fixed",
235             fixed = {
236                 {  4/16, -8/16,  4/16,  8/16, 8/16, 8/16 },
237                 {     0, -8/16,     0,  4/16, 8/16, 8/16 },                
238                 { -4/16, -8/16, -4/16,     0, 8/16, 8/16 },
239                 { -8/16, -8/16, -8/16, -4/16, 8/16, 8/16 }
240             }
241         }
242     },
ee0765 243
ec73a8 244     { suffix  = "technic_cnc_slope",
VE 245         model = "technic_slope.obj",
246         desc  = S("Slope"),
247         cbox  = {
248             type = "fixed",
249             fixed = {
250                 { -8/16,  4/16,  4/16, 8/16,  8/16, 8/16 },
251                 { -8/16,     0,     0, 8/16,  4/16, 8/16 },
252                 { -8/16, -4/16, -4/16, 8/16,     0, 8/16 },
253                 { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 }
254             }
255         }
256     },
257     
ee0765 258 }
S 259
260 -- Allow disabling certain programs for some node. Default is allowing all types for all nodes
261 technic.cnc.programs_disable = {
262     -- ["default:brick"] = {"technic_cnc_stick"}, -- Example: Disallow the stick for brick
263     -- ...
264     ["default:dirt"] = {"technic_cnc_sphere", "technic_cnc_slope_upsdown", "technic_cnc_edge",
265                         "technic_cnc_inner_edge", "technic_cnc_slope_edge_upsdown",
266                         "technic_cnc_slope_inner_edge_upsdown", "technic_cnc_stick",
267                         "technic_cnc_cylinder_horizontal"}
268 }
269
270 -- Generic function for registering all the different node types
ec73a8 271 function technic.cnc.register_program(recipeitem, suffix, model, groups, images, description, cbox, sbox)
80cb6a 272
VE 273     local dtype
274     local nodeboxdef
275     local meshdef
276
277     if type(model) ~= "string" then -- assume a nodebox if it's a table or function call
278         dtype = "nodebox"
279         nodeboxdef = {
280             type  = "fixed",
281             fixed = model
282         }
283     else
284         dtype = "mesh"
285         meshdef = model
286     end
287
ec73a8 288     if cbox and not sbox then sbox = cbox end
VE 289
ee0765 290     minetest.register_node(":"..recipeitem.."_"..suffix, {
S 291         description   = description,
80cb6a 292         drawtype      = dtype,
VE 293         node_box      = nodeboxdef,
294         mesh          = meshdef,
ee0765 295         tiles         = images,
S 296         paramtype     = "light",
297         paramtype2    = "facedir",
298         walkable      = true,
299         groups        = groups,
ec73a8 300         selection_box = sbox,
VE 301         collision_box = cbox
ee0765 302     })
S 303 end
304
305 -- function to iterate over all the programs the CNC machine knows
306 function technic.cnc.register_all(recipeitem, groups, images, description)
307     for _, data in ipairs(technic.cnc.programs) do
308         -- Disable node creation for disabled node types for some material
309         local do_register = true
310         if technic.cnc.programs_disable[recipeitem] ~= nil then
311             for __, disable in ipairs(technic.cnc.programs_disable[recipeitem]) do
312                 if disable == data.suffix then
313                     do_register = false
314                 end
315             end
316         end
317         -- Create the node if it passes the test
318         if do_register then
ec73a8 319             technic.cnc.register_program(recipeitem, data.suffix, data.model,
VE 320                 groups, images, description.." "..data.desc, data.cbox, data.sbox)
ee0765 321         end
S 322     end
323 end
324
325
326 -- REGISTER NEW TECHNIC_CNC_API's PART 2: technic.cnc..register_element_end(subname, recipeitem, groups, images, desc_element_xyz)
327 -----------------------------------------------------------------------------------------------------------------------
328 function technic.cnc.register_slope_edge_etc(recipeitem, groups, images, desc_slope, desc_slope_lying, desc_slope_upsdown, desc_slope_edge, desc_slope_inner_edge, desc_slope_upsdwn_edge, desc_slope_upsdwn_inner_edge, desc_pyramid, desc_spike, desc_onecurvededge, desc_twocurvededge, desc_cylinder, desc_cylinder_horizontal, desc_sphere, desc_element_straight, desc_element_edge, desc_element_t, desc_element_cross, desc_element_end)
329
330          technic.cnc.register_slope(recipeitem, groups, images, desc_slope)
331          technic.cnc.register_slope_lying(recipeitem, groups, images, desc_slope_lying)
332          technic.cnc.register_slope_upsdown(recipeitem, groups, images, desc_slope_upsdown)
333          technic.cnc.register_slope_edge(recipeitem, groups, images, desc_slope_edge)
334          technic.cnc.register_slope_inner_edge(recipeitem, groups, images, desc_slope_inner_edge)
335          technic.cnc.register_slope_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_edge)
336          technic.cnc.register_slope_inner_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_inner_edge)
337          technic.cnc.register_pyramid(recipeitem, groups, images, desc_pyramid)
338          technic.cnc.register_spike(recipeitem, groups, images, desc_spike)
339          technic.cnc.register_onecurvededge(recipeitem, groups, images, desc_onecurvededge)
340          technic.cnc.register_twocurvededge(recipeitem, groups, images, desc_twocurvededge)
341          technic.cnc.register_cylinder(recipeitem, groups, images, desc_cylinder)
342          technic.cnc.register_cylinder_horizontal(recipeitem, groups, images, desc_cylinder_horizontal)
343          technic.cnc.register_sphere(recipeitem, groups, images, desc_sphere)
344          technic.cnc.register_element_straight(recipeitem, groups, images, desc_element_straight)
345          technic.cnc.register_element_edge(recipeitem, groups, images, desc_element_edge)
346          technic.cnc.register_element_t(recipeitem, groups, images, desc_element_t)
347          technic.cnc.register_element_cross(recipeitem, groups, images, desc_element_cross)
348          technic.cnc.register_element_end(recipeitem, groups, images, desc_element_end)
349 end
350
351 -- REGISTER STICKS: noncubic.register_xyz(recipeitem, groups, images, desc_element_xyz)
352 ------------------------------------------------------------------------------------------------------------
353 function technic.cnc.register_stick_etc(recipeitem, groups, images, desc_stick)
354          technic.cnc.register_stick(recipeitem, groups, images, desc_stick)
355 end
356
357 function technic.cnc.register_elements(recipeitem, groups, images, desc_element_straight_double, desc_element_edge_double, desc_element_t_double, desc_element_cross_double, desc_element_end_double)
358          technic.cnc.register_element_straight_double(recipeitem, groups, images, desc_element_straight_double)
359          technic.cnc.register_element_edge_double(recipeitem, groups, images, desc_element_edge_double)
360          technic.cnc.register_element_t_double(recipeitem, groups, images, desc_element_t_double)
361          technic.cnc.register_element_cross_double(recipeitem, groups, images, desc_element_cross_double)
362          technic.cnc.register_element_end_double(recipeitem, groups, images, desc_element_end_double)
363 end
364