Tanmaya Meher
2018-08-25 2e7859c35e55b842752c6533edae2dd19290fabc
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
cf7591 85     { suffix  = "technic_cnc_oblate_spheroid",
VE 86         model = "technic_oblate_spheroid.obj",
87         desc  = S("Oblate spheroid"),
ec73a8 88         cbox  = {
VE 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         }
cf7591 96     },
VE 97
98     { suffix  = "technic_cnc_sphere",
99         model = "technic_sphere.obj",
100         desc  = S("Sphere")
ec73a8 101     },
ee0765 102
ec73a8 103     { suffix  = "technic_cnc_cylinder_horizontal",
VE 104         model = "technic_cylinder_horizontal.obj",
105         desc  = S("Horizontal Cylinder")
106     },
ee0765 107
ec73a8 108     { suffix  = "technic_cnc_cylinder",
VE 109         model = "technic_cylinder.obj",
110         desc  = S("Cylinder")
111     },
ee0765 112
ec73a8 113     { suffix  = "technic_cnc_twocurvededge",
VE 114         model = "technic_two_curved_edge.obj",
115         desc  = S("Two Curved Edge/Corner Block")
116     },
ee0765 117
ec73a8 118     { suffix  = "technic_cnc_onecurvededge",
VE 119         model = "technic_one_curved_edge.obj",
120         desc  = S("One Curved Edge Block")
121     },
ee0765 122
ec73a8 123     { suffix  = "technic_cnc_spike",
VE 124         model = "technic_pyramid_spike.obj",
125         desc  = S("Spike"),
126         cbox    = {
127             type = "fixed",
128             fixed = {
129                 { -2/16,  4/16, -2/16, 2/16,  8/16, 2/16 },
130                 { -4/16,     0, -4/16, 4/16,  4/16, 4/16 },
131                 { -6/16, -4/16, -6/16, 6/16,     0, 6/16 },
132                 { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 }
133             }
134         }
135     },
ee0765 136
ec73a8 137     { suffix  = "technic_cnc_pyramid",
VE 138         model = "technic_pyramid.obj",
139         desc  = S("Pyramid"),
140         cbox  = {
141             type = "fixed",
142             fixed = {
143                 { -2/16, -2/16, -2/16, 2/16,     0, 2/16 },
144                 { -4/16, -4/16, -4/16, 4/16, -2/16, 4/16 },
145                 { -6/16, -6/16, -6/16, 6/16, -4/16, 6/16 },
146                 { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }
147             }
148         }
149     },
ee0765 150
ec73a8 151     { suffix  = "technic_cnc_slope_inner_edge_upsdown",
VE 152         model = "technic_innercorner_upsdown.obj",
153         desc  = S("Slope Upside Down Inner Edge/Corner"),
154         sbox  = {
155             type = "fixed",
156             fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }
157         },
158         cbox  = {
159             type = "fixed",
160             fixed = {
161                 {  0.25, -0.25, -0.5,  0.5, -0.5,   0.5  },
162                 { -0.5,  -0.25,  0.25, 0.5, -0.5,   0.5  },
163                 {  0,     0,    -0.5,  0.5, -0.25,  0.5  },
164                 { -0.5,   0,     0,    0.5, -0.25,  0.5  },
165                 { -0.25,  0.25, -0.5,  0.5,  0,    -0.25 },
166                 { -0.5,   0.25, -0.25, 0.5,  0,     0.5  },
167                 { -0.5,   0.5,  -0.5,  0.5,  0.25,  0.5  }
168             }
169         }
170     },
ee0765 171
ec73a8 172     { suffix  = "technic_cnc_slope_edge_upsdown",
VE 173         model = "technic_outercorner_upsdown.obj",
174         desc  = S("Slope Upside Down Outer Edge/Corner"),
175         cbox  = {
176             type = "fixed",
177             fixed = {
178                 { -8/16,  8/16, -8/16, 8/16,  4/16, 8/16 },
179                 { -4/16,  4/16, -4/16, 8/16,     0, 8/16 },
180                 {     0,     0,     0, 8/16, -4/16, 8/16 },
181                 {  4/16, -4/16,  4/16, 8/16, -8/16, 8/16 }
182             }
183         }
184     },
ee0765 185
ec73a8 186     { suffix  = "technic_cnc_slope_inner_edge",
VE 187         model = "technic_innercorner.obj",
188         desc  = S("Slope Inner Edge/Corner"),
189         sbox  = {
190             type = "fixed",
191             fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }
192         },
193         cbox  = {
194             type = "fixed",
195             fixed = {
196                 { -0.5,  -0.5,  -0.5,  0.5, -0.25,  0.5  },
197                 { -0.5,  -0.25, -0.25, 0.5,  0,     0.5  },
198                 { -0.25, -0.25, -0.5,  0.5,  0,    -0.25 },
199                 { -0.5,   0,     0,    0.5,  0.25,  0.5  },
200                 {  0,     0,    -0.5,  0.5,  0.25,  0.5  },
201                 { -0.5,   0.25,  0.25, 0.5,  0.5,   0.5  },
202                 {  0.25,  0.25, -0.5,  0.5,  0.5,   0.5  }
203             }
204         }
205     },
ee0765 206
ec73a8 207     { suffix  = "technic_cnc_slope_edge",
VE 208         model = "technic_outercorner.obj",
209         desc  = S("Slope Outer Edge/Corner"),
210         cbox  = {
211             type = "fixed",
212             fixed = {
213                 {  4/16,  4/16,  4/16, 8/16,  8/16, 8/16 },
214                 {     0,     0,     0, 8/16,  4/16, 8/16 },
215                 { -4/16, -4/16, -4/16, 8/16,     0, 8/16 },
216                 { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 }
217             }
218         }
219     },
ee0765 220
ec73a8 221     { suffix  = "technic_cnc_slope_upsdown",
VE 222         model = "technic_slope_upsdown.obj",
223         desc  = S("Slope Upside Down"),
224         cbox  = {
225             type = "fixed",
226             fixed = {
227                 { -8/16,  8/16, -8/16, 8/16,  4/16, 8/16 },
228                 { -8/16,  4/16, -4/16, 8/16,     0, 8/16 },
229                 { -8/16,     0,     0, 8/16, -4/16, 8/16 },
230                 { -8/16, -4/16,  4/16, 8/16, -8/16, 8/16 }
231             }
232         }
233     },
ee0765 234
ec73a8 235     { suffix  = "technic_cnc_slope_lying",
VE 236         model = "technic_slope_horizontal.obj",
237         desc  = S("Slope Lying"),
238         cbox  = {
239             type = "fixed",
240             fixed = {
241                 {  4/16, -8/16,  4/16,  8/16, 8/16, 8/16 },
242                 {     0, -8/16,     0,  4/16, 8/16, 8/16 },                
243                 { -4/16, -8/16, -4/16,     0, 8/16, 8/16 },
244                 { -8/16, -8/16, -8/16, -4/16, 8/16, 8/16 }
245             }
246         }
247     },
ee0765 248
ec73a8 249     { suffix  = "technic_cnc_slope",
VE 250         model = "technic_slope.obj",
251         desc  = S("Slope"),
252         cbox  = {
253             type = "fixed",
254             fixed = {
255                 { -8/16,  4/16,  4/16, 8/16,  8/16, 8/16 },
256                 { -8/16,     0,     0, 8/16,  4/16, 8/16 },
257                 { -8/16, -4/16, -4/16, 8/16,     0, 8/16 },
258                 { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 }
259             }
260         }
261     },
262     
ee0765 263 }
S 264
265 -- Allow disabling certain programs for some node. Default is allowing all types for all nodes
266 technic.cnc.programs_disable = {
267     -- ["default:brick"] = {"technic_cnc_stick"}, -- Example: Disallow the stick for brick
268     -- ...
cf7591 269     ["default:dirt"] = {"technic_cnc_oblate_spheroid", "technic_cnc_slope_upsdown", "technic_cnc_edge",
ee0765 270                         "technic_cnc_inner_edge", "technic_cnc_slope_edge_upsdown",
S 271                         "technic_cnc_slope_inner_edge_upsdown", "technic_cnc_stick",
272                         "technic_cnc_cylinder_horizontal"}
273 }
274
275 -- Generic function for registering all the different node types
ec73a8 276 function technic.cnc.register_program(recipeitem, suffix, model, groups, images, description, cbox, sbox)
80cb6a 277
VE 278     local dtype
279     local nodeboxdef
280     local meshdef
281
282     if type(model) ~= "string" then -- assume a nodebox if it's a table or function call
283         dtype = "nodebox"
284         nodeboxdef = {
285             type  = "fixed",
286             fixed = model
287         }
288     else
289         dtype = "mesh"
290         meshdef = model
291     end
292
ec73a8 293     if cbox and not sbox then sbox = cbox end
VE 294
ee0765 295     minetest.register_node(":"..recipeitem.."_"..suffix, {
S 296         description   = description,
80cb6a 297         drawtype      = dtype,
VE 298         node_box      = nodeboxdef,
299         mesh          = meshdef,
ee0765 300         tiles         = images,
S 301         paramtype     = "light",
302         paramtype2    = "facedir",
303         walkable      = true,
304         groups        = groups,
ec73a8 305         selection_box = sbox,
VE 306         collision_box = cbox
ee0765 307     })
S 308 end
309
310 -- function to iterate over all the programs the CNC machine knows
311 function technic.cnc.register_all(recipeitem, groups, images, description)
312     for _, data in ipairs(technic.cnc.programs) do
313         -- Disable node creation for disabled node types for some material
314         local do_register = true
315         if technic.cnc.programs_disable[recipeitem] ~= nil then
316             for __, disable in ipairs(technic.cnc.programs_disable[recipeitem]) do
317                 if disable == data.suffix then
318                     do_register = false
319                 end
320             end
321         end
322         -- Create the node if it passes the test
323         if do_register then
ec73a8 324             technic.cnc.register_program(recipeitem, data.suffix, data.model,
VE 325                 groups, images, description.." "..data.desc, data.cbox, data.sbox)
ee0765 326         end
S 327     end
328 end
329
330
331 -- REGISTER NEW TECHNIC_CNC_API's PART 2: technic.cnc..register_element_end(subname, recipeitem, groups, images, desc_element_xyz)
332 -----------------------------------------------------------------------------------------------------------------------
cf7591 333 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_spheroid, desc_element_straight, desc_element_edge, desc_element_t, desc_element_cross, desc_element_end)
ee0765 334
S 335          technic.cnc.register_slope(recipeitem, groups, images, desc_slope)
336          technic.cnc.register_slope_lying(recipeitem, groups, images, desc_slope_lying)
337          technic.cnc.register_slope_upsdown(recipeitem, groups, images, desc_slope_upsdown)
338          technic.cnc.register_slope_edge(recipeitem, groups, images, desc_slope_edge)
339          technic.cnc.register_slope_inner_edge(recipeitem, groups, images, desc_slope_inner_edge)
340          technic.cnc.register_slope_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_edge)
341          technic.cnc.register_slope_inner_edge_upsdown(recipeitem, groups, images, desc_slope_upsdwn_inner_edge)
342          technic.cnc.register_pyramid(recipeitem, groups, images, desc_pyramid)
343          technic.cnc.register_spike(recipeitem, groups, images, desc_spike)
344          technic.cnc.register_onecurvededge(recipeitem, groups, images, desc_onecurvededge)
345          technic.cnc.register_twocurvededge(recipeitem, groups, images, desc_twocurvededge)
346          technic.cnc.register_cylinder(recipeitem, groups, images, desc_cylinder)
347          technic.cnc.register_cylinder_horizontal(recipeitem, groups, images, desc_cylinder_horizontal)
cf7591 348          technic.cnc.register_spheroid(recipeitem, groups, images, desc_spheroid)
ee0765 349          technic.cnc.register_element_straight(recipeitem, groups, images, desc_element_straight)
S 350          technic.cnc.register_element_edge(recipeitem, groups, images, desc_element_edge)
351          technic.cnc.register_element_t(recipeitem, groups, images, desc_element_t)
352          technic.cnc.register_element_cross(recipeitem, groups, images, desc_element_cross)
353          technic.cnc.register_element_end(recipeitem, groups, images, desc_element_end)
354 end
355
356 -- REGISTER STICKS: noncubic.register_xyz(recipeitem, groups, images, desc_element_xyz)
357 ------------------------------------------------------------------------------------------------------------
358 function technic.cnc.register_stick_etc(recipeitem, groups, images, desc_stick)
359          technic.cnc.register_stick(recipeitem, groups, images, desc_stick)
360 end
361
362 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)
363          technic.cnc.register_element_straight_double(recipeitem, groups, images, desc_element_straight_double)
364          technic.cnc.register_element_edge_double(recipeitem, groups, images, desc_element_edge_double)
365          technic.cnc.register_element_t_double(recipeitem, groups, images, desc_element_t_double)
366          technic.cnc.register_element_cross_double(recipeitem, groups, images, desc_element_cross_double)
367          technic.cnc.register_element_end_double(recipeitem, groups, images, desc_element_end_double)
368 end
369