Concept of soldering, tiers of power storage cells
@ -213,9 +213,9 @@ minetest.register_craftitem("elepower_dynamics:soc", {
|
||||
})
|
||||
|
||||
minetest.register_craftitem("elepower_dynamics:capacitor", {
|
||||
description = "Capacitor",
|
||||
description = "Capacitor\nTier 1 Capacitor",
|
||||
inventory_image = "elepower_capacitor.png",
|
||||
groups = {capacitor = 2, component = 1}
|
||||
groups = {capacitor = 1, component = 1}
|
||||
})
|
||||
|
||||
-- Assembled Components
|
||||
|
@ -1,4 +1,4 @@
|
||||
-- A Elepower Mod
|
||||
-- An Elepower Mod
|
||||
-- Copyright 2018 Evert "Diamond" Prants <evert@lunasqu.ee>
|
||||
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
|
@ -51,6 +51,18 @@ minetest.register_node("elepower_dynamics:particle_board", {
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("elepower_dynamics:hardened_glass", {
|
||||
description = "Hardened Obsidian Glass\nDoes not let light through",
|
||||
drawtype = "glasslike_framed_optional",
|
||||
tiles = {"default_obsidian_glass.png", "elepower_hard_glass_detail.png"},
|
||||
paramtype2 = "glasslikeliquidlevel",
|
||||
is_ground_content = false,
|
||||
sunlight_propagates = false,
|
||||
use_texture_alpha = true,
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
groups = {cracky = 3},
|
||||
})
|
||||
|
||||
-- Blocks
|
||||
|
||||
minetest.register_node("elepower_dynamics:viridisium_block", {
|
||||
|
BIN
elepower_dynamics/textures/elepower_hard_glass_detail.png
Normal file
After Width: | Height: | Size: 970 B |
@ -1,4 +1,4 @@
|
||||
-- A Elepower Mod
|
||||
-- An Elepower Mod
|
||||
-- Copyright 2018 Evert "Diamond" Prants <evert@lunasqu.ee>
|
||||
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
|
@ -1,4 +1,4 @@
|
||||
-- A Elepower Mod
|
||||
-- An Elepower Mod
|
||||
-- Copyright 2018 Evert "Diamond" Prants <evert@lunasqu.ee>
|
||||
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
|
@ -38,6 +38,11 @@ local alloy_recipes = {
|
||||
output = "elepower_dynamics:silicon_wafer_doped",
|
||||
time = 8,
|
||||
},
|
||||
{
|
||||
recipe = { "default:obsidian_glass", "elepower_dynamics:lead_ingot 4" },
|
||||
output = "elepower_dynamics:hardened_glass 4",
|
||||
time = 8,
|
||||
},
|
||||
}
|
||||
|
||||
-- Register alloy furnace recipes
|
||||
|
@ -8,3 +8,32 @@ minetest.register_craftitem("elepower_machines:turbine_blades", {
|
||||
description = "Turbine Blades",
|
||||
inventory_image = "elepower_turbine.png"
|
||||
})
|
||||
|
||||
---------------
|
||||
-- Upgrading --
|
||||
---------------
|
||||
|
||||
-- Capacitors
|
||||
minetest.register_craftitem("elepower_machines:hardened_capacitor", {
|
||||
description = "Hardened Capacitor\nTier 2 Capacitor",
|
||||
groups = {capacitor = 2, ele_upgrade_component = 1},
|
||||
inventory_image = "elepower_upgrade_hardened_capacitor.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("elepower_machines:reinforced_capacitor", {
|
||||
description = "Reinforced Capacitor\nIt will probably obliterate you if you touched it while charged\nTier 3 Capacitor",
|
||||
groups = {capacitor = 3, ele_upgrade_component = 1},
|
||||
inventory_image = "elepower_upgrade_reinforced_capacitor.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("elepower_machines:resonant_capacitor", {
|
||||
description = "Resonant Capacitor\nTier 4 Capacitor",
|
||||
groups = {capacitor = 4, ele_upgrade_component = 1},
|
||||
inventory_image = "elepower_upgrade_resonant_capacitor.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("elepower_machines:super_capacitor", {
|
||||
description = "Supercapacitor\nAmazing energy density in a small container! Wow!\nTier 5 Capacitor",
|
||||
groups = {capacitor = 5, ele_upgrade_component = 1},
|
||||
inventory_image = "elepower_upgrade_supercapacitor.png"
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
-- Elepower Mod
|
||||
-- An Elepower Mod
|
||||
-- Copyright 2018 Evert "Diamond" Prants <evert@lunasqu.ee>
|
||||
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
@ -12,6 +12,9 @@ dofile(modpath.."/craft.lua")
|
||||
-- Machines
|
||||
dofile(modpath.."/machines/init.lua")
|
||||
|
||||
-- Upgrading
|
||||
dofile(modpath.."/upgrading.lua")
|
||||
|
||||
-- Other
|
||||
dofile(modpath.."/nodes.lua")
|
||||
dofile(modpath.."/craftitems.lua")
|
||||
|
@ -59,6 +59,134 @@ function ele.formspec.get_crafter_formspec(craft_type, power, percent, pos, stat
|
||||
default.get_hotbar_bg(0, 4.25)
|
||||
end
|
||||
|
||||
-- Don't duplicate function for every single crafter node
|
||||
function crafter_timer (pos, elapsed)
|
||||
local refresh = false
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
-- Specialized for universal crafter node
|
||||
local machine_node = minetest.get_node(pos).name
|
||||
local machine_def = minetest.registered_nodes[machine_node]
|
||||
|
||||
-- If this is an active node, get the inactive version
|
||||
if machine_def.groups['ele_active'] == 1 then
|
||||
machine_node = machine_def.drop -- Reliable
|
||||
machine_def = minetest.registered_nodes[machine_node]
|
||||
end
|
||||
|
||||
local capacity = ele.helpers.get_node_property(meta, pos, "capacity")
|
||||
local usage = ele.helpers.get_node_property(meta, pos, "usage")
|
||||
local storage = ele.helpers.get_node_property(meta, pos, "storage")
|
||||
local speed = ele.helpers.get_node_property(meta, pos, "craft_speed") or 1
|
||||
local time = meta:get_int("src_time")
|
||||
local state = meta:get_int("state")
|
||||
local status = "Idle"
|
||||
|
||||
local is_enabled = ele.helpers.state_enabled(meta, pos, state)
|
||||
local res_time = 0
|
||||
|
||||
local get_formspec = machine_def.get_formspec or ele.formspec.get_crafter_formspec
|
||||
|
||||
local pow_buffer = {capacity = capacity, storage = storage, usage = 0}
|
||||
|
||||
while true do
|
||||
if not is_enabled then
|
||||
time = 0
|
||||
status = "Off"
|
||||
break
|
||||
end
|
||||
|
||||
local result = elepm.get_recipe(machine_def.craft_type, inv:get_list("src"))
|
||||
local power_operation = false
|
||||
|
||||
-- Determine if there is enough power for this action
|
||||
res_time = result.time
|
||||
if result.time ~= 0 and pow_buffer.storage >= usage then
|
||||
power_operation = true
|
||||
pow_buffer.usage = usage
|
||||
end
|
||||
|
||||
if result.time == 0 or not power_operation then
|
||||
ele.helpers.swap_node(pos, machine_node)
|
||||
|
||||
if result.time == 0 then
|
||||
time = 0
|
||||
status = "Idle"
|
||||
else
|
||||
status = "Out of Power!"
|
||||
end
|
||||
|
||||
break
|
||||
end
|
||||
|
||||
refresh = true
|
||||
status = "Active"
|
||||
|
||||
-- One step
|
||||
pow_buffer.storage = pow_buffer.storage - usage
|
||||
time = time + ele.helpers.round(speed * 10)
|
||||
|
||||
if machine_def.ele_active_node then
|
||||
local active_node = machine_node.."_active"
|
||||
if machine_def.ele_active_node ~= true then
|
||||
active_node = machine_def.ele_active_node
|
||||
end
|
||||
|
||||
ele.helpers.swap_node(pos, active_node)
|
||||
end
|
||||
|
||||
if time <= ele.helpers.round(result.time * 10) then
|
||||
break
|
||||
end
|
||||
|
||||
local output = result.output
|
||||
if type(output) ~= "table" then output = { output } end
|
||||
local output_stacks = {}
|
||||
for _, o in ipairs(output) do
|
||||
table.insert(output_stacks, ItemStack(o))
|
||||
end
|
||||
|
||||
local room_for_output = true
|
||||
inv:set_size("dst_tmp", inv:get_size("dst"))
|
||||
inv:set_list("dst_tmp", inv:get_list("dst"))
|
||||
|
||||
for _, o in ipairs(output_stacks) do
|
||||
if not inv:room_for_item("dst_tmp", o) then
|
||||
room_for_output = false
|
||||
break
|
||||
end
|
||||
inv:add_item("dst_tmp", o)
|
||||
end
|
||||
|
||||
if not room_for_output then
|
||||
ele.helpers.swap_node(pos, machine_node)
|
||||
time = ele.helpers.round(res_time*10)
|
||||
status = "Output Full!"
|
||||
break
|
||||
end
|
||||
|
||||
time = 0
|
||||
inv:set_list("src", result.new_input)
|
||||
inv:set_list("dst", inv:get_list("dst_tmp"))
|
||||
break
|
||||
end
|
||||
|
||||
local pct = 0
|
||||
if res_time > 0 and time > 0 then
|
||||
pct = math.floor((time / ele.helpers.round(res_time * 10)) * 100)
|
||||
end
|
||||
|
||||
meta:set_string("formspec", get_formspec(machine_def.craft_type, pow_buffer, pct, pos, state))
|
||||
meta:set_string("infotext", ("%s %s"):format(machine_def.description, status) ..
|
||||
"\n" .. ele.capacity_text(capacity, storage))
|
||||
|
||||
meta:set_int("src_time", time)
|
||||
meta:set_int("storage", pow_buffer.storage)
|
||||
|
||||
return refresh
|
||||
end
|
||||
|
||||
function elepm.register_crafter(nodename, nodedef)
|
||||
local craft_type = nodedef.craft_type
|
||||
if not craft_type or not elepm.craft.types[craft_type] then
|
||||
@ -74,128 +202,12 @@ function elepm.register_crafter(nodename, nodedef)
|
||||
nodedef.groups["tubedevice"] = 1
|
||||
nodedef.groups["tubedevice_receiver"] = 1
|
||||
|
||||
nodedef.on_timer = crafter_timer
|
||||
|
||||
-- Allow for custom formspec
|
||||
local get_formspec = ele.formspec.get_crafter_formspec
|
||||
if nodedef.get_formspec then
|
||||
get_formspec = nodedef.get_formspec
|
||||
nodedef.get_formspec = nil
|
||||
end
|
||||
|
||||
nodedef.on_timer = function (pos, elapsed)
|
||||
local refresh = false
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
local machine_node = nodename
|
||||
local machine_speed = nodedef.craft_speed or 1
|
||||
|
||||
local capacity = ele.helpers.get_node_property(meta, pos, "capacity")
|
||||
local usage = ele.helpers.get_node_property(meta, pos, "usage")
|
||||
local storage = ele.helpers.get_node_property(meta, pos, "storage")
|
||||
local time = meta:get_int("src_time")
|
||||
local state = meta:get_int("state")
|
||||
local status = "Idle"
|
||||
|
||||
local is_enabled = ele.helpers.state_enabled(meta, pos, state)
|
||||
local res_time = 0
|
||||
|
||||
local pow_buffer = {capacity = capacity, storage = storage, usage = 0}
|
||||
|
||||
while true do
|
||||
if not is_enabled then
|
||||
time = 0
|
||||
status = "Off"
|
||||
break
|
||||
end
|
||||
|
||||
local result = elepm.get_recipe(craft_type, inv:get_list("src"))
|
||||
local power_operation = false
|
||||
|
||||
-- Determine if there is enough power for this action
|
||||
res_time = result.time
|
||||
if result.time ~= 0 and pow_buffer.storage >= usage then
|
||||
power_operation = true
|
||||
pow_buffer.usage = usage
|
||||
end
|
||||
|
||||
if result.time == 0 or not power_operation then
|
||||
ele.helpers.swap_node(pos, machine_node)
|
||||
|
||||
if result.time == 0 then
|
||||
time = 0
|
||||
status = "Idle"
|
||||
else
|
||||
status = "Out of Power!"
|
||||
end
|
||||
|
||||
break
|
||||
end
|
||||
|
||||
refresh = true
|
||||
status = "Active"
|
||||
|
||||
-- One step
|
||||
pow_buffer.storage = pow_buffer.storage - usage
|
||||
time = time + ele.helpers.round(machine_speed * 10)
|
||||
|
||||
if nodedef.ele_active_node then
|
||||
local active_node = nodename.."_active"
|
||||
if nodedef.ele_active_node ~= true then
|
||||
active_node = nodedef.ele_active_node
|
||||
end
|
||||
|
||||
ele.helpers.swap_node(pos, active_node)
|
||||
end
|
||||
|
||||
if time <= ele.helpers.round(result.time * 10) then
|
||||
break
|
||||
end
|
||||
|
||||
local output = result.output
|
||||
if type(output) ~= "table" then output = { output } end
|
||||
local output_stacks = {}
|
||||
for _, o in ipairs(output) do
|
||||
table.insert(output_stacks, ItemStack(o))
|
||||
end
|
||||
|
||||
local room_for_output = true
|
||||
inv:set_size("dst_tmp", inv:get_size("dst"))
|
||||
inv:set_list("dst_tmp", inv:get_list("dst"))
|
||||
|
||||
for _, o in ipairs(output_stacks) do
|
||||
if not inv:room_for_item("dst_tmp", o) then
|
||||
room_for_output = false
|
||||
break
|
||||
end
|
||||
inv:add_item("dst_tmp", o)
|
||||
end
|
||||
|
||||
if not room_for_output then
|
||||
ele.helpers.swap_node(pos, machine_node)
|
||||
time = ele.helpers.round(res_time*10)
|
||||
status = "Output Full!"
|
||||
break
|
||||
end
|
||||
|
||||
time = 0
|
||||
inv:set_list("src", result.new_input)
|
||||
inv:set_list("dst", inv:get_list("dst_tmp"))
|
||||
break
|
||||
end
|
||||
|
||||
local pct = 0
|
||||
if res_time > 0 and time > 0 then
|
||||
pct = math.floor((time / ele.helpers.round(res_time * 10)) * 100)
|
||||
end
|
||||
|
||||
meta:set_string("formspec", get_formspec(craft_type, pow_buffer, pct, pos, state))
|
||||
meta:set_string("infotext", ("%s %s"):format(nodedef.description, status) ..
|
||||
"\n" .. ele.capacity_text(capacity, storage))
|
||||
|
||||
meta:set_int("src_time", time)
|
||||
meta:set_int("storage", pow_buffer.storage)
|
||||
|
||||
return refresh
|
||||
end
|
||||
|
||||
local sizes = elepm.craft.types[craft_type]
|
||||
@ -211,5 +223,11 @@ function elepm.register_crafter(nodename, nodedef)
|
||||
meta:set_string("formspec", get_formspec(craft_type, pow_buffer, nil, pos))
|
||||
end
|
||||
|
||||
-- Upgradable
|
||||
nodedef.ele_upgrades = {
|
||||
machine_chip = {"craft_speed", "usage", "inrush"},
|
||||
capacitor = {"capacity"},
|
||||
}
|
||||
|
||||
ele.register_machine(nodename, nodedef)
|
||||
end
|
||||
|
@ -44,7 +44,7 @@ function ele.register_fluid_generator(nodename, nodedef)
|
||||
on_timer = function (pos, elapsed)
|
||||
local refresh = false
|
||||
local meta = minetest.get_meta(pos)
|
||||
local nodename = nodename
|
||||
local nodename = minetest.get_node(pos).name
|
||||
|
||||
local burn_time = meta:get_int("burn_time")
|
||||
local burn_totaltime = meta:get_int("burn_totaltime")
|
||||
|
@ -36,7 +36,8 @@ function elepm.register_fuel_generator(nodename, nodedef)
|
||||
|
||||
nodedef.on_timer = function (pos, elapsed)
|
||||
local refresh = false
|
||||
local meta = minetest.get_meta(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local nodename = minetest.get_node(pos).name
|
||||
|
||||
local burn_time = meta:get_int("burn_time")
|
||||
local burn_totaltime = meta:get_int("burn_totaltime")
|
||||
|
@ -156,6 +156,12 @@ minetest.register_node("elepower_machines:crank", {
|
||||
{-0.03125, -0.5000, -0.03125, 0.03125, -0.1250, 0.03125}
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.2500, -0.5000, -0.2500, 0.2500, 0.000, 0.2500}
|
||||
}
|
||||
},
|
||||
on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
|
||||
local gpos = vector.add(pos, {x = 0, y = -1, z = 0})
|
||||
local gnode = minetest.get_node_or_nil(gpos)
|
||||
|
@ -13,3 +13,63 @@ elepm.register_storage("elepower_machines:power_cell", {
|
||||
},
|
||||
groups = {oddly_breakable_by_hand = 1}
|
||||
})
|
||||
|
||||
elepm.register_storage("elepower_machines:hardened_power_cell", {
|
||||
description = "Hardened Power Cell",
|
||||
ele_capacity = 64000,
|
||||
ele_inrush = 640,
|
||||
tiles = {
|
||||
"elepower_machine_top.png^elepower_overlay_hardened.png",
|
||||
"elepower_machine_base.png^elepower_overlay_hardened.png",
|
||||
"elepower_machine_side.png^elepower_overlay_hardened.png",
|
||||
"elepower_machine_side.png^elepower_overlay_hardened.png",
|
||||
"elepower_machine_side.png^elepower_overlay_hardened.png",
|
||||
"elepower_power_cell.png^elepower_overlay_hardened.png",
|
||||
},
|
||||
groups = {oddly_breakable_by_hand = 1}
|
||||
})
|
||||
|
||||
elepm.register_storage("elepower_machines:reinforced_power_cell", {
|
||||
description = "Reinforced Power Cell",
|
||||
ele_capacity = 128000,
|
||||
ele_inrush = 1024,
|
||||
tiles = {
|
||||
"elepower_machine_top.png^elepower_overlay_reinforced.png",
|
||||
"elepower_machine_base.png^elepower_overlay_reinforced.png",
|
||||
"elepower_machine_side.png^elepower_overlay_reinforced.png",
|
||||
"elepower_machine_side.png^elepower_overlay_reinforced.png",
|
||||
"elepower_machine_side.png^elepower_overlay_reinforced.png",
|
||||
"elepower_power_cell.png^elepower_overlay_reinforced.png",
|
||||
},
|
||||
groups = {oddly_breakable_by_hand = 1}
|
||||
})
|
||||
|
||||
elepm.register_storage("elepower_machines:resonant_power_cell", {
|
||||
description = "Resonant Power Cell",
|
||||
ele_capacity = 640000,
|
||||
ele_inrush = 2048,
|
||||
tiles = {
|
||||
"elepower_machine_top.png^elepower_overlay_resonant.png",
|
||||
"elepower_machine_base.png^elepower_overlay_resonant.png",
|
||||
"elepower_machine_side.png^elepower_overlay_resonant.png",
|
||||
"elepower_machine_side.png^elepower_overlay_resonant.png",
|
||||
"elepower_machine_side.png^elepower_overlay_resonant.png",
|
||||
"elepower_power_cell.png^elepower_overlay_resonant.png",
|
||||
},
|
||||
groups = {oddly_breakable_by_hand = 1}
|
||||
})
|
||||
|
||||
elepm.register_storage("elepower_machines:super_power_cell", {
|
||||
description = "Supercapacitor Cell",
|
||||
ele_capacity = 1280000,
|
||||
ele_inrush = 4096,
|
||||
tiles = {
|
||||
"elepower_machine_top.png^elepower_overlay_super.png",
|
||||
"elepower_machine_base.png^elepower_overlay_super.png",
|
||||
"elepower_machine_side.png^elepower_overlay_super.png",
|
||||
"elepower_machine_side.png^elepower_overlay_super.png",
|
||||
"elepower_machine_side.png^elepower_overlay_super.png",
|
||||
"elepower_power_cell.png^elepower_overlay_super.png",
|
||||
},
|
||||
groups = {oddly_breakable_by_hand = 1}
|
||||
})
|
||||
|
BIN
elepower_machines/textures/elepower_overlay_hardened.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
BIN
elepower_machines/textures/elepower_overlay_reinforced.png
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
elepower_machines/textures/elepower_overlay_resonant.png
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
elepower_machines/textures/elepower_overlay_super.png
Normal file
After Width: | Height: | Size: 6.8 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.8 KiB |
BIN
elepower_machines/textures/elepower_upgrade_supercapacitor.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
59
elepower_machines/upgrading.lua
Normal file
@ -0,0 +1,59 @@
|
||||
|
||||
local metasets = {
|
||||
"capacity", "usage", "craft_speed", "inrush", "output"
|
||||
}
|
||||
|
||||
function elepm.handle_machine_upgrades (pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local comps = meta:get_string("components")
|
||||
|
||||
local node = minetest.get_node(pos)
|
||||
local nodedef = minetest.registered_nodes[node.name]
|
||||
|
||||
-- Deserialize component list
|
||||
if comps ~= "" then
|
||||
comps = minetest.deserialize(comps)
|
||||
else
|
||||
comps = {}
|
||||
end
|
||||
|
||||
if nodedef.ele_upgrades then
|
||||
for comp, vars in pairs(nodedef.ele_upgrades) do
|
||||
for _,c in pairs(vars) do
|
||||
if not comps[comp] then
|
||||
-- If we're resetting capacity, set storage to max initial capacity
|
||||
if c == "capacity" then
|
||||
local abscap = nodedef.ele_capacity
|
||||
local storage = meta:get_int("storage")
|
||||
if storage > abscap then
|
||||
storage = abscap
|
||||
meta:set_int("storage", storage)
|
||||
end
|
||||
end
|
||||
|
||||
-- Set variable to zero in metadata
|
||||
if meta:get_int(c) ~= 0 then
|
||||
meta:set_int(c, 0)
|
||||
end
|
||||
elseif nodedef["ele_" .. c] ~= nil then
|
||||
-- Set updated value in metadata
|
||||
local default = nodedef["ele_" .. c]
|
||||
local ulevel = minetest.get_item_group(comps[comp], comp) - 1
|
||||
local multiplier = 1
|
||||
|
||||
-- Capacitor value is multiplied
|
||||
if comp == "capacitor" then
|
||||
multiplier = math.pow(10, ulevel)
|
||||
end
|
||||
|
||||
meta:set_int(c, math.abs(default + (default * ulevel * multiplier)))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local t = minetest.get_node_timer(pos)
|
||||
if not t:is_started() then
|
||||
t:start(1.0)
|
||||
end
|
||||
end
|
@ -1,4 +1,4 @@
|
||||
-- A Elepower Mod
|
||||
-- An Elepower Mod
|
||||
-- Copyright 2018 Evert "Diamond" Prants <evert@lunasqu.ee>
|
||||
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
|
@ -1,4 +1,4 @@
|
||||
-- Elepower Mod
|
||||
-- An Elepower Mod
|
||||
-- Copyright 2018 Evert "Diamond" Prants <evert@lunasqu.ee>
|
||||
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
|
@ -96,19 +96,28 @@ ele.default.states = {
|
||||
-- Preserve power storage in the item stack dropped
|
||||
local function preserve_metadata(pos, oldnode, oldmeta, drops)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local capacity = ele.helpers.get_node_property(meta, pos, "capacity")
|
||||
local storage = ele.helpers.get_node_property(meta, pos, "storage")
|
||||
local capacity = ele.helpers.get_node_property(meta, pos, "capacity")
|
||||
|
||||
local nodedesc = minetest.registered_nodes[oldnode.name].description
|
||||
local nodedesc = minetest.registered_nodes[oldnode.name].description
|
||||
local partsstr = meta:get_string("components")
|
||||
|
||||
if storage == 0 then
|
||||
if storage == 0 and partsstr == "" then
|
||||
return drops
|
||||
end
|
||||
|
||||
for i,stack in pairs(drops) do
|
||||
local stack_meta = stack:get_meta()
|
||||
stack_meta:set_int("storage", storage)
|
||||
stack_meta:set_string("description", nodedesc .. "\n" .. ele.capacity_text(capacity, storage))
|
||||
|
||||
local desc = ele.capacity_text(capacity, storage)
|
||||
|
||||
if partsstr ~= "" then
|
||||
stack_meta:set_string("components", partsstr)
|
||||
desc = desc .. "\n" .. minetest.colorize("#9647ff", "Modified Device")
|
||||
end
|
||||
|
||||
stack_meta:set_string("description", nodedesc .. "\n" .. desc)
|
||||
drops[i] = stack
|
||||
end
|
||||
|
||||
@ -119,11 +128,24 @@ end
|
||||
local function retrieve_metadata(pos, placer, itemstack, pointed_thing)
|
||||
local item_meta = itemstack:get_meta()
|
||||
local storage = item_meta:get_int("storage")
|
||||
local partsstr = item_meta:get_string("components")
|
||||
|
||||
if storage and storage > 0 then
|
||||
if storage > 0 or partsstr ~= "" then
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
meta:set_int("storage", storage)
|
||||
minetest.get_node_timer(pos):start(1.0)
|
||||
if partsstr ~= "" then
|
||||
meta:set_string("components", partsstr)
|
||||
|
||||
if elepm then
|
||||
elepm.handle_machine_upgrades(pos)
|
||||
end
|
||||
else
|
||||
local t = minetest.get_node_timer(pos)
|
||||
if not t:is_started() then
|
||||
t:start(1.0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
@ -219,6 +241,17 @@ local function switch_state(pos, state_def)
|
||||
end
|
||||
end
|
||||
|
||||
-- Patch a table
|
||||
local function apply_patches (table, patches)
|
||||
for k,v in pairs(patches) do
|
||||
if table[k] and type(table[k]) == "table" then
|
||||
apply_patches(table[k], v)
|
||||
else
|
||||
table[k] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Register a base device
|
||||
function ele.register_base_device(nodename, nodedef)
|
||||
local tlsupp = tl and nodedef.groups and (nodedef.groups["tubedevice"] or nodedef.groups["tube"])
|
||||
@ -396,20 +429,28 @@ function ele.register_base_device(nodename, nodedef)
|
||||
|
||||
if nodedef.ele_active_node ~= true then
|
||||
active_name = nodedef.ele_active_node
|
||||
|
||||
if i ~= 1 then
|
||||
active_name = active_name .. "_" .. i
|
||||
end
|
||||
end
|
||||
|
||||
if nodedef.ele_active_nodedef then
|
||||
for k,v in pairs(nodedef.ele_active_nodedef) do
|
||||
active_nodedef[k] = v
|
||||
end
|
||||
apply_patches(active_nodedef, nodedef.ele_active_nodedef)
|
||||
|
||||
nodedef.ele_active_nodedef = nil
|
||||
active_nodedef.ele_active_nodedef = nil
|
||||
end
|
||||
|
||||
-- Remove formspec functions from active nodedefs
|
||||
if active_nodedef.get_formspec then
|
||||
active_nodedef.get_formspec = nil
|
||||
end
|
||||
|
||||
active_nodedef.groups["ele_active"] = 1
|
||||
active_nodedef.groups["not_in_creative_inventory"] = 1
|
||||
active_nodedef.drop = nodename
|
||||
|
||||
minetest.register_node(active_name, active_nodedef)
|
||||
end
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
-- A Elepower Mod
|
||||
-- An Elepower Mod
|
||||
-- Copyright 2018 Evert "Diamond" Prants <evert@lunasqu.ee>
|
||||
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
|
@ -35,3 +35,13 @@ minetest.register_craft({
|
||||
{"elepower_dynamics:motor", "elepower_dynamics:capacitor", ""},
|
||||
}
|
||||
})
|
||||
|
||||
-- Soldering Iron
|
||||
minetest.register_craft({
|
||||
output = "elepower_tools:soldering_iron",
|
||||
recipe = {
|
||||
{"", "elepower_dynamics:battery", "default:steel_ingot"},
|
||||
{"", "elepower_dynamics:wound_silver_coil", ""},
|
||||
{"elepower_dynamics:wound_silver_coil", "", ""},
|
||||
}
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
-- A Elepower Mod
|
||||
-- An Elepower Mod
|
||||
-- Copyright 2018 Evert "Diamond" Prants <evert@lunasqu.ee>
|
||||
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
@ -6,6 +6,12 @@ local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
eletool = rawget(_G, "eletool") or {}
|
||||
eletool.modpath = modpath
|
||||
|
||||
-- Simple tools
|
||||
dofile(modpath .. "/tools.lua")
|
||||
|
||||
-- Complex tools
|
||||
dofile(modpath .. "/soldering.lua")
|
||||
|
||||
-- Crafting
|
||||
dofile(modpath .. "/craftitems.lua")
|
||||
dofile(modpath .. "/crafting.lua")
|
||||
|
172
elepower_tools/soldering.lua
Normal file
@ -0,0 +1,172 @@
|
||||
|
||||
-- Convenience for i18n later on
|
||||
local dict = {
|
||||
machine_chip = "Machine Chip",
|
||||
capacitor = "Capacitor",
|
||||
}
|
||||
|
||||
local function upgrade_formspec (upgrades, desc)
|
||||
local posY = 0.5
|
||||
local fspec = ""
|
||||
|
||||
for k in pairs(upgrades) do
|
||||
fspec = fspec .. "label[1,"..(posY + 0.25)..";"..dict[k].."]"
|
||||
fspec = fspec .. "list[detached:soldering;"..k..";7,"..posY..";1,1;]"
|
||||
posY = posY + 1
|
||||
end
|
||||
|
||||
return "size[8,8.5]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
default.gui_slots..
|
||||
"label[0,0;Modifying "..desc.."]"..
|
||||
fspec..
|
||||
"list[current_player;main;0,4.25;8,1;]"..
|
||||
"list[current_player;main;0,5.5;8,3;8]"..
|
||||
"listring[current_player;main]"..
|
||||
default.get_hotbar_bg(0, 4.25)
|
||||
end
|
||||
|
||||
local function set_component_list (pos, list)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local len = 0
|
||||
for _,v in pairs(list) do
|
||||
if v ~= nil then
|
||||
len = len + 1
|
||||
end
|
||||
end
|
||||
|
||||
if len == 0 and meta:get_string("components") ~= "" then
|
||||
meta:set_string("components", "")
|
||||
else
|
||||
meta:set_string("components", minetest.serialize(list))
|
||||
end
|
||||
|
||||
if elepm then
|
||||
elepm.handle_machine_upgrades(pos)
|
||||
end
|
||||
end
|
||||
|
||||
local function machine_modify (pos, node, user)
|
||||
local nodedef = minetest.registered_nodes[node.name]
|
||||
|
||||
if not nodedef.ele_upgrades then
|
||||
return minetest.chat_send_player(user:get_player_name(), "This machine cannot be modified.")
|
||||
end
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
local comps = meta:get_string("components")
|
||||
|
||||
-- Prevent the node from being dug
|
||||
-- It is recommended to have this check in can_dig callback.
|
||||
meta:set_int("drop_lock", 1)
|
||||
|
||||
-- Save the soldered machine as an attribute on the player
|
||||
local umeta = user:get_meta()
|
||||
umeta:set_string("soldering", minetest.pos_to_string(pos))
|
||||
|
||||
-- Deserialize component list
|
||||
if comps ~= "" then
|
||||
comps = minetest.deserialize(comps)
|
||||
else
|
||||
comps = {}
|
||||
end
|
||||
|
||||
-- Create detached inventory for upgrades
|
||||
local inv = minetest.create_detached_inventory("soldering", {
|
||||
allow_move = function (inv, from_list, from_index, to_list, to_index, count, player)
|
||||
return 0
|
||||
end,
|
||||
|
||||
allow_put = function (inv, listname, index, stack, player)
|
||||
if minetest.get_item_group(stack:get_name(), "ele_upgrade_component") == 0 or
|
||||
minetest.get_item_group(stack:get_name(), listname) < 2 then
|
||||
return 0
|
||||
end
|
||||
|
||||
return 1
|
||||
end,
|
||||
|
||||
allow_take = function (inv, listname, index, stack, player)
|
||||
return stack:get_count()
|
||||
end,
|
||||
|
||||
on_put = function (inv, listname, index, stack, player)
|
||||
comps[listname] = stack:get_name()
|
||||
set_component_list(pos, comps)
|
||||
end,
|
||||
|
||||
on_take = function (inv, listname, index, stack, player)
|
||||
comps[listname] = nil
|
||||
set_component_list(pos, comps)
|
||||
end,
|
||||
}, user:get_player_name())
|
||||
|
||||
-- Add lists
|
||||
for k in pairs(nodedef.ele_upgrades) do
|
||||
inv:set_size(k, 1)
|
||||
|
||||
if comps[k] then
|
||||
inv:set_stack(k, 1, ItemStack(comps[k]))
|
||||
end
|
||||
end
|
||||
|
||||
-- Open the formspec
|
||||
minetest.show_formspec(user:get_player_name(), "elepower_tools:soldering_iron",
|
||||
upgrade_formspec(nodedef.ele_upgrades, nodedef.description))
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function (player, formname, fields)
|
||||
if formname ~= "elepower_tools:soldering_iron" or not player then return false end
|
||||
|
||||
local umeta = player:get_meta()
|
||||
local pos = umeta:get_string("soldering")
|
||||
if not pos then return false end
|
||||
|
||||
pos = minetest.string_to_pos(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
if fields["quit"] then
|
||||
meta:set_int("drop_lock", 0)
|
||||
umeta:set_string("soldering", "")
|
||||
end
|
||||
|
||||
return true
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function (player)
|
||||
local umeta = player:get_meta()
|
||||
local soldering = umeta:get_string("soldering")
|
||||
if soldering == "" then return end
|
||||
local pos = minetest.string_to_pos(soldering)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta:get_int("drop_lock") == 1 then
|
||||
meta:set_int("drop_lock", 0)
|
||||
end
|
||||
umeta:set_string("soldering", "")
|
||||
end)
|
||||
|
||||
ele.register_tool("elepower_tools:soldering_iron", {
|
||||
description = "Soldering Iron\nUsed to replace components in machines",
|
||||
inventory_image = "eletools_soldering_iron.png",
|
||||
wield_image = "eletools_soldering_iron.png^[transformR270",
|
||||
ele_capacity = 8000,
|
||||
ele_usage = 64,
|
||||
on_use = function (itemstack, user, pointed_thing)
|
||||
if not user or user:get_player_name() == "" then return itemstack end
|
||||
if pointed_thing and pointed_thing.type == "node" then
|
||||
local pos = pointed_thing.under
|
||||
local node = minetest.get_node_or_nil(pos)
|
||||
|
||||
if not node or node.name == "air" or minetest.is_protected(pos, user:get_player_name()) then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
if ele.helpers.get_item_group(node.name, "ele_machine") then
|
||||
machine_modify(pos, node, user)
|
||||
end
|
||||
end
|
||||
|
||||
return itemstack
|
||||
end
|
||||
})
|
BIN
elepower_tools/textures/eletools_soldering_iron.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
@ -1,6 +1,6 @@
|
||||
|
||||
ele.register_tool("elepower_tools:hand_drill", {
|
||||
description = "Hand Drill",
|
||||
description = "Electric Hand Drill",
|
||||
inventory_image = "eletools_hand_drill.png",
|
||||
wield_image = "eletools_hand_drill.png^[transformFX",
|
||||
tool_capabilities = {
|
||||
@ -15,7 +15,7 @@ ele.register_tool("elepower_tools:hand_drill", {
|
||||
})
|
||||
|
||||
ele.register_tool("elepower_tools:chainsaw", {
|
||||
description = "Chainsaw",
|
||||
description = "Electric Chainsaw",
|
||||
inventory_image = "eletools_chainsaw.png",
|
||||
wield_image = "eletools_chainsaw.png^[transformFX",
|
||||
ele_capacity = 8000,
|
||||
|
@ -1,4 +1,4 @@
|
||||
-- Elepower Mod
|
||||
-- An Elepower Mod
|
||||
-- Copyright 2018 Evert "Diamond" Prants <evert@lunasqu.ee>
|
||||
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
|