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