From ae8b4bb3e2713afc8a690dd581e8a5feb7608b42 Mon Sep 17 00:00:00 2001 From: dhunt Date: Mon, 14 Oct 2013 18:46:45 -0700 Subject: [PATCH] increment --- generators.lua | 42 +++++++++++ pipes.lua | 186 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 228 insertions(+) create mode 100644 generators.lua create mode 100644 pipes.lua diff --git a/generators.lua b/generators.lua new file mode 100644 index 0000000..b55c96c --- /dev/null +++ b/generators.lua @@ -0,0 +1,42 @@ + + +--[[ + LV, MV, HV. + different fuels for different outputs/etc. + + need nice craft sequences to make them. + engine blocks, pistons, crankshafts, ecu, control panel + + need transmission + gears for crafting + + + generator section + electric motor + + + need enough air blocks nearby to work + + need motor sounds + + animated crankshafts + +]] + + + + + + + + + + + + + + + + + + diff --git a/pipes.lua b/pipes.lua new file mode 100644 index 0000000..2929d03 --- /dev/null +++ b/pipes.lua @@ -0,0 +1,186 @@ + + +--[[ + +most of this code is blatantly stolen from the technic wires system. +tiers represent the type of fluid in the pipe. pipes can change type +but machines cannot. the sources determines the type of fluid in a system. + + + + +]] + + +bitumen.pipes = {} + + +function bitumen.register_pipe(tier, size) + local ltier = string.lower(tier) + + for x1 = 0, 1 do + for x2 = 0, 1 do + for y1 = 0, 1 do + for y2 = 0, 1 do + for z1 = 0, 1 do + for z2 = 0, 1 do + local id = bitumen.get_pipe_id({x1, x2, y1, y2, z1, z2}) + + bitumen.pipes["bitumen:"..ltier.."_pipe"..id] = tier + + local groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2} + if id ~= 0 then + groups.not_in_creative_inventory = 1 + end + + minetest.register_node("bitumen:"..ltier.."_pipe"..id, { + description = tier.." Cable", + tiles = {"bitumen_"..ltier.."_pipe.png"}, + inventory_image = "bitumen_"..ltier.."_pipe_wield.png", + wield_image = "bitumen_"..ltier.."_pipe_wield.png", + groups = groups, + sounds = default.node_sound_wood_defaults(), + drop = "bitumen:"..ltier.."_pipe0", + paramtype = "light", + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = bitumen.gen_pipe_nodebox(x1, y1, z1, x2, y2, z2, size) + }, + after_place_node = function(pos) + local node = minetest.get_node(pos) + bitumen.update_pipes(pos, bitumen.get_pipe_tier(node.name)) + end, + after_dig_node = function(pos, oldnode) + local tier = bitumen.get_pipe_tier(oldnode.name) + bitumen.update_pipes(pos, tier, true) + end + }) + end + end + end + end + end + end +end + + +minetest.register_on_placenode(function(pos, node) + for tier, machine_list in pairs(bitumen.machines) do + for machine_name, _ in pairs(machine_list) do + if node.name == machine_name then + bitumen.update_pipes(pos, tier, true) + end + end + end +end) + + +minetest.register_on_dignode(function(pos, node) + for tier, machine_list in pairs(bitumen.machines) do + for machine_name, _ in pairs(machine_list) do + if node.name == machine_name then + bitumen.update_pipes(pos, tier, true) + end + end + end +end) + + +function bitumen.get_pipe_id(links) + return (links[6] * 1) + (links[5] * 2) + + (links[4] * 4) + (links[3] * 8) + + (links[2] * 16) + (links[1] * 32) +end + + + + +function bitumen.update_pipes(pos, tier, no_set, secondrun) + local link_positions = { + {x=pos.x+1, y=pos.y, z=pos.z}, + {x=pos.x-1, y=pos.y, z=pos.z}, + {x=pos.x, y=pos.y+1, z=pos.z}, + {x=pos.x, y=pos.y-1, z=pos.z}, + {x=pos.x, y=pos.y, z=pos.z+1}, + {x=pos.x, y=pos.y, z=pos.z-1}} + + local links = {0, 0, 0, 0, 0, 0} + + for i, link_pos in pairs(link_positions) do + local connect_type = bitumen.pipes_should_connect(pos, link_pos, tier) + if connect_type then + links[i] = 1 + -- Have pipes next to us update theirselves, + -- but only once. (We don't want to update the entire + -- network or start an infinite loop of updates) + if not secondrun and connect_type == "pipe" then + bitumen.update_pipes(link_pos, tier, false, true) + end + end + end + -- We don't want to set ourselves if we have been removed or we are + -- updating a machine + if not no_set then + minetest.set_node(pos, {name="bitumen:"..string.lower(tier) + .."_pipe"..bitumen.get_pipe_id(links)}) + + end +end + + +function bitumen.is_tier_pipe(name, tier) + return bitumen.pipes[name] and bitumen.pipes[name] == tier +end + + +function bitumen.get_pipe_tier(name) + return bitumen.pipes[name] +end + + +function bitumen.pipes_should_connect(pos1, pos2, tier) + local name = minetest.get_node(pos2).name + + if bitumen.is_tier_pipe(name, tier) then + return "pipe" + elseif bitumen.machines[tier][name] then + return "machine" + end + return false +end + + +function bitumen.gen_pipe_nodebox(x1, y1, z1, x2, y2, z2, size) + --rounded Nodeboxes + + local box_center = {-size, -size, -size, size, size, size} + local box_y1 = {-size, -size, -size, size, 0.5, size} -- y+ + local box_x1 = {-size, -size, -size, 0.5, size, size} -- x+ + local box_z1 = {-size, -size, size, size, size, 0.5} -- z+ + local box_z2 = {-size, -size, -0.5, size, size, size} -- z- + local box_y2 = {-size, -0.5, -size, size, size, size} -- y- + local box_x2 = {-0.5, -size, -size, size, size, size} -- x- + + local box = {box_center} + if x1 == 1 then + table.insert(box, box_x1) + end + if y1 == 1 then + table.insert(box, box_y1) + end + if z1 == 1 then + table.insert(box, box_z1) + end + if x2 == 1 then + table.insert(box, box_x2) + end + if y2 == 1 then + table.insert(box, box_y2) + end + if z2 == 1 then + table.insert(box, box_z2) + end + return box +end \ No newline at end of file