2013-07-17 15:34:35 -04:00
|
|
|
-- Technic CNC v1.0 by kpoppel
|
|
|
|
-- Based on the NonCubic Blocks MOD v1.4 by yves_de_beck
|
|
|
|
|
|
|
|
-- Idea:
|
|
|
|
-- Somehow have a tabbed/paged panel if the number of shapes should expand
|
|
|
|
-- beyond what is available in the panel today.
|
|
|
|
-- I could imagine some form of API allowing modders to come with their own node
|
|
|
|
-- box definitions and easily stuff it in the this machine for production.
|
|
|
|
|
2013-10-30 13:45:32 -04:00
|
|
|
local S = technic.getter
|
2013-07-17 15:34:35 -04:00
|
|
|
|
|
|
|
local shape = {}
|
|
|
|
local onesize_products = {
|
|
|
|
slope = 2,
|
|
|
|
slope_edge = 1,
|
|
|
|
slope_inner_edge = 1,
|
|
|
|
pyramid = 2,
|
|
|
|
spike = 1,
|
|
|
|
cylinder = 2,
|
|
|
|
sphere = 1,
|
|
|
|
stick = 8,
|
|
|
|
slope_upsdown = 2,
|
|
|
|
slope_edge_upsdown = 1,
|
|
|
|
slope_inner_edge_upsdown = 1,
|
|
|
|
cylinder_horizontal = 2,
|
|
|
|
slope_lying = 2,
|
|
|
|
onecurvededge = 1,
|
|
|
|
twocurvededge = 1,
|
|
|
|
}
|
|
|
|
local twosize_products = {
|
|
|
|
element_straight = 4,
|
|
|
|
element_end = 2,
|
|
|
|
element_cross = 1,
|
|
|
|
element_t = 1,
|
|
|
|
element_edge = 2,
|
|
|
|
}
|
|
|
|
|
|
|
|
local cnc_formspec =
|
|
|
|
"invsize[9,11;]"..
|
2014-04-16 19:10:00 +02:00
|
|
|
"label[1,0;"..S("Choose Milling Program:").."]"..
|
2013-07-17 15:34:35 -04:00
|
|
|
"image_button[1,0.5;1,1;technic_cnc_slope.png;slope; ]"..
|
|
|
|
"image_button[2,0.5;1,1;technic_cnc_slope_edge.png;slope_edge; ]"..
|
|
|
|
"image_button[3,0.5;1,1;technic_cnc_slope_inner_edge.png;slope_inner_edge; ]"..
|
|
|
|
"image_button[4,0.5;1,1;technic_cnc_pyramid.png;pyramid; ]"..
|
|
|
|
"image_button[5,0.5;1,1;technic_cnc_spike.png;spike; ]"..
|
|
|
|
"image_button[6,0.5;1,1;technic_cnc_cylinder.png;cylinder; ]"..
|
|
|
|
"image_button[7,0.5;1,1;technic_cnc_sphere.png;sphere; ]"..
|
|
|
|
"image_button[8,0.5;1,1;technic_cnc_stick.png;stick; ]"..
|
|
|
|
|
|
|
|
"image_button[1,1.5;1,1;technic_cnc_slope_upsdwn.png;slope_upsdown; ]"..
|
|
|
|
"image_button[2,1.5;1,1;technic_cnc_slope_edge_upsdwn.png;slope_edge_upsdown; ]"..
|
|
|
|
"image_button[3,1.5;1,1;technic_cnc_slope_inner_edge_upsdwn.png;slope_inner_edge_upsdown; ]"..
|
|
|
|
"image_button[4,1.5;1,1;technic_cnc_cylinder_horizontal.png;cylinder_horizontal; ]"..
|
|
|
|
|
|
|
|
"image_button[1,2.5;1,1;technic_cnc_slope_lying.png;slope_lying; ]"..
|
|
|
|
"image_button[2,2.5;1,1;technic_cnc_onecurvededge.png;onecurvededge; ]"..
|
|
|
|
"image_button[3,2.5;1,1;technic_cnc_twocurvededge.png;twocurvededge; ]"..
|
|
|
|
|
2014-04-16 19:10:00 +02:00
|
|
|
"label[1,3.5;"..S("Slim Elements half / normal height:").."]"..
|
2013-07-17 15:34:35 -04:00
|
|
|
|
|
|
|
"image_button[1,4;1,0.5;technic_cnc_full.png;full; ]"..
|
|
|
|
"image_button[1,4.5;1,0.5;technic_cnc_half.png;half; ]"..
|
|
|
|
"image_button[2,4;1,1;technic_cnc_element_straight.png;element_straight; ]"..
|
|
|
|
"image_button[3,4;1,1;technic_cnc_element_end.png;element_end; ]"..
|
|
|
|
"image_button[4,4;1,1;technic_cnc_element_cross.png;element_cross; ]"..
|
|
|
|
"image_button[5,4;1,1;technic_cnc_element_t.png;element_t; ]"..
|
|
|
|
"image_button[6,4;1,1;technic_cnc_element_edge.png;element_edge; ]"..
|
|
|
|
|
2014-04-16 19:10:00 +02:00
|
|
|
"label[0, 5.5;"..S("In:").."]"..
|
2013-07-17 15:34:35 -04:00
|
|
|
"list[current_name;src;0.5,5.5;1,1;]"..
|
2014-04-16 19:10:00 +02:00
|
|
|
"label[4, 5.5;"..S("Out:").."]"..
|
2013-07-17 15:34:35 -04:00
|
|
|
"list[current_name;dst;5,5.5;4,1;]"..
|
|
|
|
|
|
|
|
"list[current_player;main;0,7;8,4;]"
|
|
|
|
|
|
|
|
local size = 1;
|
|
|
|
|
|
|
|
-- The form handler is declared here because we need it in both the inactive and active modes
|
|
|
|
-- in order to be able to change programs wile it is running.
|
|
|
|
local function form_handler(pos, formname, fields, sender)
|
|
|
|
-- REGISTER MILLING PROGRAMS AND OUTPUTS:
|
|
|
|
------------------------------------------
|
|
|
|
-- Program for half/full size
|
|
|
|
if fields["full"] then
|
|
|
|
size = 1
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
if fields["half"] then
|
|
|
|
size = 2
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
-- Resolve the node name and the number of items to make
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
local inv = meta:get_inventory()
|
|
|
|
local inputstack = inv:get_stack("src", 1)
|
|
|
|
local inputname = inputstack:get_name()
|
|
|
|
local multiplier = 0
|
|
|
|
for k, _ in pairs(fields) do
|
|
|
|
-- Set a multipier for the half/full size capable blocks
|
|
|
|
if twosize_products[k] ~= nil then
|
|
|
|
multiplier = size * twosize_products[k]
|
|
|
|
else
|
|
|
|
multiplier = onesize_products[k]
|
|
|
|
end
|
|
|
|
|
|
|
|
if onesize_products[k] ~= nil or twosize_products[k] ~= nil then
|
|
|
|
meta:set_float( "cnc_multiplier", multiplier)
|
|
|
|
meta:set_string("cnc_user", sender:get_player_name())
|
|
|
|
end
|
|
|
|
|
|
|
|
if onesize_products[k] ~= nil or (twosize_products[k] ~= nil and size==2) then
|
|
|
|
meta:set_string("cnc_product", inputname .. "_technic_cnc_" .. k)
|
|
|
|
--print(inputname .. "_technic_cnc_" .. k)
|
|
|
|
break
|
|
|
|
end
|
|
|
|
|
|
|
|
if twosize_products[k] ~= nil and size==1 then
|
|
|
|
meta:set_string("cnc_product", inputname .. "_technic_cnc_" .. k .. "_double")
|
|
|
|
--print(inputname .. "_technic_cnc_" .. k .. "_double")
|
|
|
|
break
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
-- The actual block inactive state
|
|
|
|
minetest.register_node("technic:cnc", {
|
Rationalise machine terminology
All electrically-powered machines now consistently indicate their
tier (supply voltage) in their names. As this implies that they are
electrically powered, the furnaces no longer have "Electric" in their
names. The fuel-fired equivalents of electric machines, which exist
for alloy furnace and furnace, now say "Fuel-Fired" to distinguish them.
(The fuel-fired alloy furnace used to say "Coal", which was inaccurate
because it uses any fuel. The fuel-fired furnace, from the default mod,
used to just be called "Furnace", which is ambiguous.)
Electric power generators now consistently indicate their tier and have
the word "Generator" in their names. This makes their purpose much
clearer, and makes obvious craft guide searches produce useful results.
The fuel-fired generators, previously just (ambiguously) called
"Generator", are now explicitly "Fuel-Fired".
2014-06-20 16:58:52 +01:00
|
|
|
description = S("%s CNC Machine"):format("LV"),
|
2013-07-17 15:34:35 -04:00
|
|
|
tiles = {"technic_cnc_top.png", "technic_cnc_bottom.png", "technic_cnc_side.png",
|
|
|
|
"technic_cnc_side.png", "technic_cnc_side.png", "technic_cnc_front.png"},
|
|
|
|
drawtype = "nodebox",
|
|
|
|
paramtype = "light",
|
|
|
|
paramtype2 = "facedir",
|
|
|
|
node_box = {
|
|
|
|
type = "fixed",
|
|
|
|
fixed = {
|
|
|
|
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
groups = {cracky=2},
|
|
|
|
legacy_facedir_simple = true,
|
|
|
|
on_construct = function(pos)
|
|
|
|
local meta = minetest.get_meta(pos)
|
Rationalise machine terminology
All electrically-powered machines now consistently indicate their
tier (supply voltage) in their names. As this implies that they are
electrically powered, the furnaces no longer have "Electric" in their
names. The fuel-fired equivalents of electric machines, which exist
for alloy furnace and furnace, now say "Fuel-Fired" to distinguish them.
(The fuel-fired alloy furnace used to say "Coal", which was inaccurate
because it uses any fuel. The fuel-fired furnace, from the default mod,
used to just be called "Furnace", which is ambiguous.)
Electric power generators now consistently indicate their tier and have
the word "Generator" in their names. This makes their purpose much
clearer, and makes obvious craft guide searches produce useful results.
The fuel-fired generators, previously just (ambiguously) called
"Generator", are now explicitly "Fuel-Fired".
2014-06-20 16:58:52 +01:00
|
|
|
meta:set_string("infotext", S("%s CNC Machine"):format("LV"))
|
2013-07-17 15:34:35 -04:00
|
|
|
meta:set_float("technic_power_machine", 1)
|
|
|
|
meta:set_string("formspec", cnc_formspec)
|
|
|
|
local inv = meta:get_inventory()
|
|
|
|
inv:set_size("src", 1)
|
|
|
|
inv:set_size("dst", 4)
|
|
|
|
end,
|
2013-11-27 12:28:56 -05:00
|
|
|
can_dig = technic.machine_can_dig,
|
|
|
|
allow_metadata_inventory_put = technic.machine_inventory_put,
|
|
|
|
allow_metadata_inventory_take = technic.machine_inventory_take,
|
|
|
|
allow_metadata_inventory_move = technic.machine_inventory_move,
|
2013-07-17 15:34:35 -04:00
|
|
|
on_receive_fields = form_handler,
|
|
|
|
})
|
|
|
|
|
|
|
|
-- Active state block
|
|
|
|
minetest.register_node("technic:cnc_active", {
|
Rationalise machine terminology
All electrically-powered machines now consistently indicate their
tier (supply voltage) in their names. As this implies that they are
electrically powered, the furnaces no longer have "Electric" in their
names. The fuel-fired equivalents of electric machines, which exist
for alloy furnace and furnace, now say "Fuel-Fired" to distinguish them.
(The fuel-fired alloy furnace used to say "Coal", which was inaccurate
because it uses any fuel. The fuel-fired furnace, from the default mod,
used to just be called "Furnace", which is ambiguous.)
Electric power generators now consistently indicate their tier and have
the word "Generator" in their names. This makes their purpose much
clearer, and makes obvious craft guide searches produce useful results.
The fuel-fired generators, previously just (ambiguously) called
"Generator", are now explicitly "Fuel-Fired".
2014-06-20 16:58:52 +01:00
|
|
|
description = S("%s CNC Machine"):format("LV"),
|
2013-07-17 15:34:35 -04:00
|
|
|
tiles = {"technic_cnc_top_active.png", "technic_cnc_bottom.png", "technic_cnc_side.png",
|
|
|
|
"technic_cnc_side.png", "technic_cnc_side.png", "technic_cnc_front_active.png"},
|
|
|
|
paramtype2 = "facedir",
|
2014-04-26 21:07:05 +01:00
|
|
|
drop = "technic:cnc",
|
2013-07-17 15:34:35 -04:00
|
|
|
groups = {cracky=2, not_in_creative_inventory=1},
|
|
|
|
legacy_facedir_simple = true,
|
2013-11-27 12:28:56 -05:00
|
|
|
can_dig = technic.machine_can_dig,
|
|
|
|
allow_metadata_inventory_put = technic.machine_inventory_put,
|
|
|
|
allow_metadata_inventory_take = technic.machine_inventory_take,
|
|
|
|
allow_metadata_inventory_move = technic.machine_inventory_move,
|
2013-07-17 15:34:35 -04:00
|
|
|
on_receive_fields = form_handler,
|
|
|
|
})
|
|
|
|
|
|
|
|
-- Action code performing the transformation
|
|
|
|
minetest.register_abm({
|
|
|
|
nodenames = {"technic:cnc","technic:cnc_active"},
|
|
|
|
interval = 1,
|
|
|
|
chance = 1,
|
|
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
local inv = meta:get_inventory()
|
|
|
|
local eu_input = meta:get_int("LV_EU_input")
|
Rationalise machine terminology
All electrically-powered machines now consistently indicate their
tier (supply voltage) in their names. As this implies that they are
electrically powered, the furnaces no longer have "Electric" in their
names. The fuel-fired equivalents of electric machines, which exist
for alloy furnace and furnace, now say "Fuel-Fired" to distinguish them.
(The fuel-fired alloy furnace used to say "Coal", which was inaccurate
because it uses any fuel. The fuel-fired furnace, from the default mod,
used to just be called "Furnace", which is ambiguous.)
Electric power generators now consistently indicate their tier and have
the word "Generator" in their names. This makes their purpose much
clearer, and makes obvious craft guide searches produce useful results.
The fuel-fired generators, previously just (ambiguously) called
"Generator", are now explicitly "Fuel-Fired".
2014-06-20 16:58:52 +01:00
|
|
|
local machine_name = S("%s CNC Machine"):format("LV")
|
2013-07-17 15:34:35 -04:00
|
|
|
local machine_node = "technic:cnc"
|
|
|
|
local demand = 450
|
|
|
|
|
|
|
|
-- Power off automatically if no longer connected to a switching station
|
|
|
|
technic.switching_station_timeout_count(pos, "LV")
|
|
|
|
|
|
|
|
local result = meta:get_string("cnc_product")
|
|
|
|
if inv:is_empty("src") or
|
|
|
|
(not minetest.registered_nodes[result]) or
|
|
|
|
(not inv:room_for_item("dst", result)) then
|
2013-12-10 20:14:39 -05:00
|
|
|
technic.swap_node(pos, machine_node)
|
2013-10-30 13:45:32 -04:00
|
|
|
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
2013-07-17 15:34:35 -04:00
|
|
|
meta:set_string("cnc_product", "")
|
2014-03-26 22:34:17 -04:00
|
|
|
meta:set_int("LV_EU_demand", 0)
|
2013-07-17 15:34:35 -04:00
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
if eu_input < demand then
|
2013-12-10 20:14:39 -05:00
|
|
|
technic.swap_node(pos, machine_node)
|
2013-10-30 13:45:32 -04:00
|
|
|
meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
|
2013-07-17 15:34:35 -04:00
|
|
|
elseif eu_input >= demand then
|
2013-12-10 20:14:39 -05:00
|
|
|
technic.swap_node(pos, machine_node.."_active")
|
2013-10-30 13:45:32 -04:00
|
|
|
meta:set_string("infotext", S("%s Active"):format(machine_name))
|
2013-07-17 15:34:35 -04:00
|
|
|
meta:set_int("src_time", meta:get_int("src_time") + 1)
|
|
|
|
if meta:get_int("src_time") >= 3 then -- 3 ticks per output
|
|
|
|
meta:set_int("src_time", 0)
|
|
|
|
srcstack = inv:get_stack("src", 1)
|
|
|
|
srcstack:take_item()
|
|
|
|
inv:set_stack("src", 1, srcstack)
|
|
|
|
inv:add_item("dst", result.." "..meta:get_int("cnc_multiplier"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
meta:set_int("LV_EU_demand", demand)
|
|
|
|
end
|
|
|
|
})
|
|
|
|
|
|
|
|
technic.register_machine("LV", "technic:cnc", technic.receiver)
|
|
|
|
technic.register_machine("LV", "technic:cnc_active", technic.receiver)
|
|
|
|
|
|
|
|
-------------------------
|
|
|
|
-- CNC Machine Recipe
|
|
|
|
-------------------------
|
|
|
|
minetest.register_craft({
|
|
|
|
output = 'technic:cnc',
|
|
|
|
recipe = {
|
|
|
|
{'default:glass', 'technic:diamond_drill_head', 'default:glass'},
|
2014-07-06 17:13:11 +01:00
|
|
|
{'technic:control_logic_unit', 'technic:machine_casing', 'technic:motor'},
|
2014-07-06 18:45:16 +01:00
|
|
|
{'technic:carbon_steel_ingot', 'technic:lv_cable0', 'technic:carbon_steel_ingot'},
|
2013-07-17 15:34:35 -04:00
|
|
|
},
|
|
|
|
})
|
|
|
|
|