From 00f61dfb81100094b64de06ca4e1ef73ef8bcd47 Mon Sep 17 00:00:00 2001 From: Tim <t4im@users.noreply.github.com> Date: Fri, 30 Jan 2015 05:09:20 +0100 Subject: [PATCH] rewrite extractor dye recipes, adding a few dyes and making it work better with the dye mod also preventing any issues if it is being run in a game without it --- technic/machines/LV/cnc_api.lua | 488 +++++++++++++++++++++++++++-------------------------- 1 files changed, 249 insertions(+), 239 deletions(-) diff --git a/technic/machines/LV/cnc_api.lua b/technic/machines/LV/cnc_api.lua index d7f4d18..cc54271 100644 --- a/technic/machines/LV/cnc_api.lua +++ b/technic/machines/LV/cnc_api.lua @@ -1,269 +1,260 @@ -- API for the technic CNC machine -- Again code is adapted from the NonCubic Blocks MOD v1.4 by yves_de_beck + +local S = technic.getter + technic.cnc = {} - - -technic.cnc.detail_level = 16 -- REGISTER NONCUBIC FORMS, CREATE MODELS AND RECIPES: ------------------------------------------------------ -local function cnc_sphere() - local nodebox = {} - local detail = technic.cnc.detail_level - local sehne - for i = 1, detail - 1 do - sehne = math.sqrt(0.25 - (((i / detail) - 0.5) ^ 2)) - nodebox[i]={-sehne, (i/detail) - 0.5, -sehne, sehne, (i/detail)+(1/detail)-0.5, sehne} - end - return nodebox -end - -local function cnc_cylinder_horizontal() - local nodebox = {} - local detail = technic.cnc.detail_level - local sehne - for i = 1, detail - 1 do - sehne = math.sqrt(0.25 - (((i / detail) - 0.5) ^ 2)) - nodebox[i]={-0.5, (i/detail)-0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, sehne} - end - return nodebox -end - -local function cnc_cylinder() - local nodebox = {} - local detail = technic.cnc.detail_level - local sehne - for i = 1, detail - 1 do - sehne = math.sqrt(0.25 - (((i / detail) - 0.5) ^ 2)) - nodebox[i]={(i/detail) - 0.5, -0.5, -sehne, (i/detail)+(1/detail)-0.5, 0.5, sehne} - end - return nodebox -end - -local function cnc_twocurvededge() - local nodebox = {} - local detail = technic.cnc.detail_level * 2 - local sehne - for i = (detail / 2) - 1, detail - 1 do - sehne = math.sqrt(0.25 - (((i / detail) - 0.5) ^ 2)) - nodebox[i]={-sehne, -0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, 0.5} - end - return nodebox -end - -local function cnc_onecurvededge() - local nodebox = {} - local detail = technic.cnc.detail_level * 2 - local sehne - for i = (detail / 2) - 1, detail - 1 do - sehne = math.sqrt(0.25 - (((i / detail) - 0.5) ^ 2)) - nodebox[i]={-0.5, -0.5, -sehne, 0.5, (i/detail)+(1/detail)-0.5, 0.5} - end - return nodebox -end - -local function cnc_spike() - local nodebox = {} - local detail = technic.cnc.detail_level - for i = 0, detail - 1 do - nodebox[i+1] = {(i/detail/2)-0.5, (i/detail/2)-0.5, (i/detail/2)-0.5, - 0.5-(i/detail/2), (i/detail)-0.5+(1/detail), 0.5-(i/detail/2)} - end - return nodebox -end - -local function cnc_pyramid() - local nodebox = {} - local detail = technic.cnc.detail_level / 2 - for i = 0, detail - 1 do - nodebox[i+1] = {(i/detail/2)-0.5, (i/detail/2)-0.5, (i/detail/2)-0.5, 0.5-(i/detail/2), (i/detail/2)-0.5+(1/detail), 0.5-(i/detail/2)} - end - return nodebox -end - -local function cnc_slope_inner_edge_upsdown() - local nodebox = {} - local detail = technic.cnc.detail_level - for i = 0, detail-1 do - nodebox[i+1] = {0.5-(i/detail)-(1/detail), (i/detail)-0.5, -0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5} - nodebox[i+detail+1] = {-0.5, (i/detail)-0.5, 0.5-(i/detail)-(1/detail), 0.5, (i/detail)-0.5+(1/detail), 0.5} - end - return nodebox -end - -local function cnc_slope_edge_upsdown() - local nodebox = {} - local detail = technic.cnc.detail_level - for i = 0, detail-1 do - nodebox[i+1] = {(-1*(i/detail))+0.5-(1/detail), (i/detail)-0.5, (-1*(i/detail))+0.5-(1/detail), 0.5, (i/detail)-0.5+(1/detail), 0.5} - end - return nodebox -end - -local function cnc_slope_inner_edge() - local nodebox = {} - local detail = technic.cnc.detail_level - for i = 0, detail-1 do - nodebox[i+1] = {(i/detail)-0.5, -0.5, -0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5} - nodebox[i+detail+1] = {-0.5, -0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5} - end - return nodebox -end - -local function cnc_slope_edge() - local nodebox = {} - local detail = technic.cnc.detail_level - for i = 0, detail-1 do - nodebox[i+1] = {(i/detail)-0.5, -0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5} - end - return nodebox -end - -local function cnc_slope_upsdown() - local nodebox = {} - local detail = technic.cnc.detail_level - for i = 0, detail-1 do - nodebox[i+1] = {-0.5, (i/detail)-0.5, (-1*(i/detail))+0.5-(1/detail), 0.5, (i/detail)-0.5+(1/detail), 0.5} - end - return nodebox -end - -local function cnc_slope_lying() - local nodebox = {} - local detail = technic.cnc.detail_level - for i = 0, detail-1 do - nodebox[i+1] = {(i/detail)-0.5, -0.5, (i/detail)-0.5, (i/detail)-0.5+(1/detail), 0.5 , 0.5} - end - return nodebox -end - -local function cnc_slope() - local nodebox = {} - local detail = technic.cnc.detail_level - for i = 0, detail-1 do - nodebox[i+1] = {-0.5, (i/detail)-0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1/detail), 0.5} - end - return nodebox -end -- Define slope boxes for the various nodes ------------------------------------------- technic.cnc.programs = { - {suffix = "technic_cnc_stick", - nodebox = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}, - desc = "Stick"}, + { suffix = "technic_cnc_stick", + model = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}, + desc = S("Stick") + }, - {suffix = "technic_cnc_element_end_double", - nodebox = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5}, - desc = "Element End Double"}, + { suffix = "technic_cnc_element_end_double", + model = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.5}, + desc = S("Element End Double") + }, - {suffix = "technic_cnc_element_cross_double", - nodebox = { - {0.3, -0.5, -0.3, 0.5, 0.5, 0.3}, - {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5}, - {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}}, - desc = "Element Cross Double"}, + { suffix = "technic_cnc_element_cross_double", + model = { + {0.3, -0.5, -0.3, 0.5, 0.5, 0.3}, + {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5}, + {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}}, + desc = S("Element Cross Double") + }, - {suffix = "technic_cnc_element_t_double", - nodebox = { - {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3}, - {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}, - {0.3, -0.5, -0.3, 0.5, 0.5, 0.3}}, - desc = "Element T Double"}, + { suffix = "technic_cnc_element_t_double", + model = { + {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3}, + {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}, + {0.3, -0.5, -0.3, 0.5, 0.5, 0.3}}, + desc = S("Element T Double") + }, - {suffix = "technic_cnc_element_edge_double", - nodebox = { - {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3}, - {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}}, - desc = "Element Edge Double"}, + { suffix = "technic_cnc_element_edge_double", + model = { + {-0.3, -0.5, -0.5, 0.3, 0.5, 0.3}, + {-0.5, -0.5, -0.3, -0.3, 0.5, 0.3}}, + desc = S("Element Edge Double") + }, - {suffix = "technic_cnc_element_straight_double", - nodebox = {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5}, - desc = "Element Straight Double"}, + { suffix = "technic_cnc_element_straight_double", + model = {-0.3, -0.5, -0.5, 0.3, 0.5, 0.5}, + desc = S("Element Straight Double") + }, - {suffix = "technic_cnc_element_end", - nodebox = {-0.3, -0.5, -0.3, 0.3, 0, 0.5}, - desc = "Element End"}, + { suffix = "technic_cnc_element_end", + model = {-0.3, -0.5, -0.3, 0.3, 0, 0.5}, + desc = S("Element End") + }, - {suffix = "technic_cnc_element_cross", - nodebox = { - {0.3, -0.5, -0.3, 0.5, 0, 0.3}, - {-0.3, -0.5, -0.5, 0.3, 0, 0.5}, - {-0.5, -0.5, -0.3, -0.3, 0, 0.3}}, - desc = "Element Cross"}, + { suffix = "technic_cnc_element_cross", + model = { + {0.3, -0.5, -0.3, 0.5, 0, 0.3}, + {-0.3, -0.5, -0.5, 0.3, 0, 0.5}, + {-0.5, -0.5, -0.3, -0.3, 0, 0.3}}, + desc = S("Element Cross") + }, - {suffix = "technic_cnc_element_t", - nodebox = { - {-0.3, -0.5, -0.5, 0.3, 0, 0.3}, - {-0.5, -0.5, -0.3, -0.3, 0, 0.3}, - {0.3, -0.5, -0.3, 0.5, 0, 0.3}}, - desc = "Element T"}, + { suffix = "technic_cnc_element_t", + model = { + {-0.3, -0.5, -0.5, 0.3, 0, 0.3}, + {-0.5, -0.5, -0.3, -0.3, 0, 0.3}, + {0.3, -0.5, -0.3, 0.5, 0, 0.3}}, + desc = S("Element T") + }, - {suffix = "technic_cnc_element_edge", - nodebox = { - {-0.3, -0.5, -0.5, 0.3, 0, 0.3}, - {-0.5, -0.5, -0.3, -0.3, 0, 0.3}}, - desc = "Element Edge"}, + { suffix = "technic_cnc_element_edge", + model = { + {-0.3, -0.5, -0.5, 0.3, 0, 0.3}, + {-0.5, -0.5, -0.3, -0.3, 0, 0.3}}, + desc = S("Element Edge") + }, - {suffix = "technic_cnc_element_straight", - nodebox = {-0.3, -0.5, -0.5, 0.3, 0, 0.5}, - desc = "Element Straight"}, + { suffix = "technic_cnc_element_straight", + model = {-0.3, -0.5, -0.5, 0.3, 0, 0.5}, + desc = S("Element Straight") + }, - {suffix = "technic_cnc_sphere", - nodebox = cnc_sphere(), - desc = "Sphere"}, + { suffix = "technic_cnc_sphere", + model = "technic_oblatesphere.obj", + desc = S("Oblate Sphere"), + cbox = { + type = "fixed", + fixed = { + { -6/16, 4/16, -6/16, 6/16, 8/16, 6/16 }, + { -8/16, -4/16, -8/16, 8/16, 4/16, 8/16 }, + { -6/16, -8/16, -6/16, 6/16, -4/16, 6/16 } + } + } + }, - {suffix = "technic_cnc_cylinder_horizontal", - nodebox = cnc_cylinder_horizontal(), - desc = "Cylinder Horizontal"}, + { suffix = "technic_cnc_cylinder_horizontal", + model = "technic_cylinder_horizontal.obj", + desc = S("Horizontal Cylinder") + }, - {suffix = "technic_cnc_cylinder", - nodebox = cnc_cylinder(), - desc = ""}, + { suffix = "technic_cnc_cylinder", + model = "technic_cylinder.obj", + desc = S("Cylinder") + }, - {suffix = "technic_cnc_twocurvededge", - nodebox = cnc_twocurvededge(), - desc = "One Curved Edge Block"}, + { suffix = "technic_cnc_twocurvededge", + model = "technic_two_curved_edge.obj", + desc = S("Two Curved Edge/Corner Block") + }, - {suffix = "technic_cnc_onecurvededge", - nodebox = cnc_onecurvededge(), - desc = "Two Curved Edge Block"}, + { suffix = "technic_cnc_onecurvededge", + model = "technic_one_curved_edge.obj", + desc = S("One Curved Edge Block") + }, - {suffix = "technic_cnc_spike", - nodebox = cnc_spike(), - desc = "Spike"}, + { suffix = "technic_cnc_spike", + model = "technic_pyramid_spike.obj", + desc = S("Spike"), + cbox = { + type = "fixed", + fixed = { + { -2/16, 4/16, -2/16, 2/16, 8/16, 2/16 }, + { -4/16, 0, -4/16, 4/16, 4/16, 4/16 }, + { -6/16, -4/16, -6/16, 6/16, 0, 6/16 }, + { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } + } + } + }, - {suffix = "technic_cnc_pyramid", - nodebox = cnc_pyramid(), - desc = "Pyramid"}, + { suffix = "technic_cnc_pyramid", + model = "technic_pyramid.obj", + desc = S("Pyramid"), + cbox = { + type = "fixed", + fixed = { + { -2/16, -2/16, -2/16, 2/16, 0, 2/16 }, + { -4/16, -4/16, -4/16, 4/16, -2/16, 4/16 }, + { -6/16, -6/16, -6/16, 6/16, -4/16, 6/16 }, + { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 } + } + } + }, - {suffix = "technic_cnc_slope_inner_edge_upsdown", - nodebox = cnc_slope_inner_edge_upsdown(), - desc = "Slope Upside Down Inner Edge"}, + { suffix = "technic_cnc_slope_inner_edge_upsdown", + model = "technic_innercorner_upsdown.obj", + desc = S("Slope Upside Down Inner Edge/Corner"), + sbox = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } + }, + cbox = { + type = "fixed", + fixed = { + { 0.25, -0.25, -0.5, 0.5, -0.5, 0.5 }, + { -0.5, -0.25, 0.25, 0.5, -0.5, 0.5 }, + { 0, 0, -0.5, 0.5, -0.25, 0.5 }, + { -0.5, 0, 0, 0.5, -0.25, 0.5 }, + { -0.25, 0.25, -0.5, 0.5, 0, -0.25 }, + { -0.5, 0.25, -0.25, 0.5, 0, 0.5 }, + { -0.5, 0.5, -0.5, 0.5, 0.25, 0.5 } + } + } + }, - {suffix = "technic_cnc_slope_edge_upsdown", - nodebox = cnc_slope_edge_upsdown(), - desc = "Slope Upside Down Edge"}, + { suffix = "technic_cnc_slope_edge_upsdown", + model = "technic_outercorner_upsdown.obj", + desc = S("Slope Upside Down Outer Edge/Corner"), + cbox = { + type = "fixed", + fixed = { + { -8/16, 8/16, -8/16, 8/16, 4/16, 8/16 }, + { -4/16, 4/16, -4/16, 8/16, 0, 8/16 }, + { 0, 0, 0, 8/16, -4/16, 8/16 }, + { 4/16, -4/16, 4/16, 8/16, -8/16, 8/16 } + } + } + }, - {suffix = "technic_cnc_slope_inner_edge", - nodebox = cnc_slope_inner_edge(), - desc = "Slope Inner Edge"}, + { suffix = "technic_cnc_slope_inner_edge", + model = "technic_innercorner.obj", + desc = S("Slope Inner Edge/Corner"), + sbox = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } + }, + cbox = { + type = "fixed", + fixed = { + { -0.5, -0.5, -0.5, 0.5, -0.25, 0.5 }, + { -0.5, -0.25, -0.25, 0.5, 0, 0.5 }, + { -0.25, -0.25, -0.5, 0.5, 0, -0.25 }, + { -0.5, 0, 0, 0.5, 0.25, 0.5 }, + { 0, 0, -0.5, 0.5, 0.25, 0.5 }, + { -0.5, 0.25, 0.25, 0.5, 0.5, 0.5 }, + { 0.25, 0.25, -0.5, 0.5, 0.5, 0.5 } + } + } + }, - {suffix = "technic_cnc_slope_edge", - nodebox = cnc_slope_edge(), - desc = "Slope Edge"}, + { suffix = "technic_cnc_slope_edge", + model = "technic_outercorner.obj", + desc = S("Slope Outer Edge/Corner"), + cbox = { + type = "fixed", + fixed = { + { 4/16, 4/16, 4/16, 8/16, 8/16, 8/16 }, + { 0, 0, 0, 8/16, 4/16, 8/16 }, + { -4/16, -4/16, -4/16, 8/16, 0, 8/16 }, + { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } + } + } + }, - {suffix = "technic_cnc_slope_upsdown", - nodebox = cnc_slope_upsdown(), - desc = "Slope Upside Down"}, + { suffix = "technic_cnc_slope_upsdown", + model = "technic_slope_upsdown.obj", + desc = S("Slope Upside Down"), + cbox = { + type = "fixed", + fixed = { + { -8/16, 8/16, -8/16, 8/16, 4/16, 8/16 }, + { -8/16, 4/16, -4/16, 8/16, 0, 8/16 }, + { -8/16, 0, 0, 8/16, -4/16, 8/16 }, + { -8/16, -4/16, 4/16, 8/16, -8/16, 8/16 } + } + } + }, - {suffix = "technic_cnc_slope_lying", - nodebox = cnc_slope_lying(), - desc = "Slope Lying"}, + { suffix = "technic_cnc_slope_lying", + model = "technic_slope_horizontal.obj", + desc = S("Slope Lying"), + cbox = { + type = "fixed", + fixed = { + { 4/16, -8/16, 4/16, 8/16, 8/16, 8/16 }, + { 0, -8/16, 0, 4/16, 8/16, 8/16 }, + { -4/16, -8/16, -4/16, 0, 8/16, 8/16 }, + { -8/16, -8/16, -8/16, -4/16, 8/16, 8/16 } + } + } + }, - {suffix = "technic_cnc_slope", - nodebox = cnc_slope(), - desc = "Slope"}, + { suffix = "technic_cnc_slope", + model = "technic_slope.obj", + desc = S("Slope"), + cbox = { + type = "fixed", + fixed = { + { -8/16, 4/16, 4/16, 8/16, 8/16, 8/16 }, + { -8/16, 0, 0, 8/16, 4/16, 8/16 }, + { -8/16, -4/16, -4/16, 8/16, 0, 8/16 }, + { -8/16, -8/16, -8/16, 8/16, -4/16, 8/16 } + } + } + }, + } -- Allow disabling certain programs for some node. Default is allowing all types for all nodes @@ -277,19 +268,37 @@ } -- Generic function for registering all the different node types -function technic.cnc.register_program(recipeitem, suffix, nodebox, groups, images, description) +function technic.cnc.register_program(recipeitem, suffix, model, groups, images, description, cbox, sbox) + + local dtype + local nodeboxdef + local meshdef + + if type(model) ~= "string" then -- assume a nodebox if it's a table or function call + dtype = "nodebox" + nodeboxdef = { + type = "fixed", + fixed = model + } + else + dtype = "mesh" + meshdef = model + end + + if cbox and not sbox then sbox = cbox end + minetest.register_node(":"..recipeitem.."_"..suffix, { description = description, - drawtype = "nodebox", + drawtype = dtype, + node_box = nodeboxdef, + mesh = meshdef, tiles = images, paramtype = "light", paramtype2 = "facedir", walkable = true, - node_box = { - type = "fixed", - fixed = nodebox - }, groups = groups, + selection_box = sbox, + collision_box = cbox }) end @@ -307,7 +316,8 @@ end -- Create the node if it passes the test if do_register then - technic.cnc.register_program(recipeitem, data.suffix, data.nodebox, groups, images, description.." "..data.desc) + technic.cnc.register_program(recipeitem, data.suffix, data.model, + groups, images, description.." "..data.desc, data.cbox, data.sbox) end end end -- Gitblit v1.8.0