further coal power plant nodes added

This commit is contained in:
Joachim Stolberg 2019-05-05 22:29:00 +02:00
parent 7705374d1c
commit b6e931c86c
17 changed files with 294 additions and 117 deletions

View File

@ -0,0 +1,125 @@
--[[
TechAge
=======
Copyright (C) 2019 Joachim Stolberg
LGPLv2.1+
See LICENSE.txt for more information
TA3 Coal Power Station Boiler Base
]]--
-- for lazy programmers
local S = function(pos) if pos then return minetest.pos_to_string(pos) end end
local P = minetest.string_to_pos
local M = minetest.get_meta
-- Load support for intllib.
local MP = minetest.get_modpath("techage")
local I,_ = dofile(MP.."/intllib.lua")
local POWER_CONSUMPTION = 2
local STANDBY_TICKS = 4
local CYCLE_TIME = 4
local Pipe = techage.SteamPipe
local consumer = techage.consumer
local function valid_power_dir(pos, power_dir, in_dir)
return power_dir == in_dir
end
local function start_node(pos, mem, state)
consumer.turn_power_on(pos, POWER_CONSUMPTION)
end
local function stop_node(pos, mem, state)
consumer.turn_power_on(pos, 0)
end
local State = techage.NodeStates:new({
node_name_passive = "techage:coalboiler_base",
cycle_time = CYCLE_TIME,
standby_ticks = STANDBY_TICKS,
start_node = start_node,
stop_node = stop_node,
})
local function turn_on_clbk(pos, in_dir, sum)
local mem = tubelib2.get_mem(pos)
local state = State:get_state(mem)
if sum > 0 and state == techage.STOPPED then
State:start(pos, mem)
elseif sum <= 0 and state == techage.RUNNING then
State:stop(pos, mem)
end
end
local function node_timer(pos, elapsed)
print("node_timer")
local mem = tubelib2.get_mem(pos)
return State:is_active(mem)
end
minetest.register_node("techage:coalboiler_base", {
description = I("TA3 Boiler Base"),
tiles = {"techage_coal_boiler_mesh_base.png"},
drawtype = "mesh",
mesh = "techage_boiler_large.obj",
selection_box = {
type = "fixed",
fixed = {-13/32, -16/32, -13/32, 13/32, 16/32, 13/32},
},
techage = {
turn_on = turn_on_clbk,
read_power_consumption = consumer.read_power_consumption,
power_network = Pipe,
power_side = "F",
valid_power_dir = valid_power_dir,
},
after_place_node = function(pos, placer)
local mem = consumer.after_place_node(pos, placer)
State:node_init(pos, mem, "")
State:start(pos, mem)
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
State:after_dig_node(pos, oldnode, oldmetadata, digger)
consumer.after_dig_node(pos, oldnode)
end,
after_tube_update = consumer.after_tube_update,
--on_timer = node_timer,
paramtype2 = "facedir",
on_rotate = screwdriver.disallow,
groups = {cracky=2},
is_ground_content = false,
sounds = default.node_sound_stone_defaults(),
})
Pipe:add_secondary_node_names({"techage:coalboiler_base"})
minetest.register_craft({
output = "techage:coalboiler_base",
recipe = {
{"default:stone", "", "default:stone"},
{"techage:iron_ingot", "", "techage:iron_ingot"},
{"default:stone", "default:stone", "default:stone"},
},
})
techage.register_help_page(I("TA3 Boiler Base"),
I([[Part of the Coal Power Station.
Has to be placed on top of the
TA3 Coal Power Station Firebox
and filled with water.
(see TA3 Coal Power Station)]]), "techage:coalboiler_base")

View File

@ -8,7 +8,7 @@
LGPLv2.1+
See LICENSE.txt for more information
TA3 Coal Power Station Boiler
TA3 Coal Power Station Boiler Top
]]--
@ -62,6 +62,10 @@ local function formspec(self, pos, mem)
default.get_hotbar_bg(0, 3)
end
local function valid_power_dir(pos, power_dir, in_dir)
return power_dir == in_dir
end
local function start_node(pos, mem, state)
generator.turn_power_on(pos, POWER_CAPACITY)
end
@ -71,7 +75,7 @@ local function stop_node(pos, mem, state)
end
local State = techage.NodeStates:new({
node_name_passive = "techage:coalboiler1",
node_name_passive = "techage:coalboiler_top",
cycle_time = CYCLE_TIME,
standby_ticks = STANDBY_TICKS,
has_item_meter = false,
@ -216,72 +220,14 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player
return 0
end
minetest.register_node("techage:coalboiler2", {
paramtype2 = "facedir",
groups = {cracky=1},
on_rotate = screwdriver.disallow,
is_ground_content = false,
sounds = default.node_sound_metal_defaults(),
})
minetest.register_node("techage:coalboiler1", {
description = I("TA3 Coal Power Station Firebox"),
inventory_image = "techage_coal_boiler_inv.png",
tiles = {"techage_coal_boiler_mesh.png"},
drawtype = "mesh",
mesh = "techage_boiler_large.obj",
selection_box = {
type = "fixed",
fixed = {-14/32, -16/32, -14/32, 14/32, 16/32, 14/32},
},
paramtype2 = "facedir",
on_rotate = screwdriver.disallow,
groups = {cracky=2},
is_ground_content = false,
sounds = default.node_sound_stone_defaults(),
on_timer = node_timer,
can_dig = can_dig,
allow_metadata_inventory_put = allow_metadata_inventory,
allow_metadata_inventory_take = allow_metadata_inventory,
on_receive_fields = on_receive_fields,
on_rightclick = on_rightclick,
on_construct = function(pos)
local mem = tubelib2.init_mem(pos)
mem.running = false
mem.burn_cycles = 0
local meta = M(pos)
meta:set_string("formspec", formspec(mem))
local inv = meta:get_inventory()
inv:set_size('fuel', 1)
end,
on_metadata_inventory_put = function(pos)
local mem = tubelib2.init_mem(pos)
mem.running = true
-- activate the formspec fire temporarily
mem.burn_cycles = BURN_CYCLES
M(pos):set_string("formspec", formspec(mem))
mem.burn_cycles = 0
swap_node(pos, "techage:firebox_on")
minetest.get_node_timer(pos):start(CYCLE_TIME)
end,
})
-- boiler2: Main part, needed as generator
minetest.register_node("techage:boiler2", {
minetest.register_node("techage:coalboiler_top", {
description = I("TA3 Boiler Top"),
tiles = {"techage_coal_boiler.png"},
tiles = {"techage_coal_boiler_mesh_top.png"},
drawtype = "mesh",
mesh = "techage_boiler_large.obj",
selection_box = {
type = "fixed",
fixed = {-10/32, -48/32, -10/32, 10/32, 16/32, 10/32},
fixed = {-13/32, -48/32, -13/32, 13/32, 16/32, 13/32},
},
can_dig = can_dig,
@ -302,7 +248,8 @@ minetest.register_node("techage:boiler2", {
minetest.get_node_timer(pos):start(CYCLE_TIME)
end
end,
power_side = "U",
power_side = "F",
valid_power_dir = valid_power_dir,
},
on_construct = function(pos)
@ -315,7 +262,7 @@ minetest.register_node("techage:boiler2", {
local mem = generator.after_place_node(pos)
State:node_init(pos, mem, "")
local node = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z})
if node.name == "techage:boiler1" then
if node.name == "techage:coalboiler_base" then
on_rightclick(pos)
end
end,
@ -331,10 +278,26 @@ minetest.register_node("techage:boiler2", {
minetest.after(0.5, move_to_water, pos)
end,
--paramtype2 = "facedir",
paramtype2 = "facedir",
groups = {cracky=1},
on_rotate = screwdriver.disallow,
is_ground_content = false,
sounds = default.node_sound_metal_defaults(),
})
Pipe:add_secondary_node_names({"techage:coalboiler_top"})
minetest.register_craft({
output = "techage:coalboiler_top",
recipe = {
{"default:stone", "default:stone", "default:stone"},
{"techage:iron_ingot", "", "techage:iron_ingot"},
{"default:stone", "", "default:stone"},
},
})
techage.register_help_page(I("TA3 Boiler Top"),
I([[Part of the Coal Power Station.
Has to be placed on top of TA3 Power Station Boiler Base.
(see TA3 Coal Power Station)]]), "techage:coalboiler_top")

View File

@ -176,3 +176,24 @@ minetest.register_node("techage:coalfirehole_on", {
groups = {not_in_creative_inventory=1},
})
minetest.register_craft({
output = "techage:coalfirebox",
recipe = {
{'default:stone', 'default:stone', 'default:stone'},
{'default:steel_ingot', '', 'default:steel_ingot'},
{'default:stone', 'default:stone', 'default:stone'},
},
})
techage.register_node("techage:firebox", {"techage:firebox_on"}, {
on_push_item = function(pos, in_dir, stack)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if inv:room_for_item("fuel", stack) then
inv:add_item("fuel", stack)
minetest.get_node_timer(pos):start(CYCLE_TIME)
return true
end
return false
end,
})

View File

@ -8,7 +8,7 @@
LGPLv2.1+
See LICENSE.txt for more information
TA2 Steam Engine Flywheel
TA3 Power Station Generator
]]--
@ -26,9 +26,9 @@ local I,_ = dofile(MP.."/intllib.lua")
local STANDBY_TICKS = 4
local COUNTDOWN_TICKS = 4
local CYCLE_TIME = 8
local POWER_CAPACITY = 8
local POWER_CAPACITY = 50
local Axle = techage.Axle
local Cable = techage.ElectricCable
local generator = techage.generator
local function formspec(self, pos, mem)
@ -43,31 +43,51 @@ local function formspec(self, pos, mem)
default.get_hotbar_bg(0, 3)
end
local function start_cylinder(pos, on)
local function start_turbine(pos, on, mem)
if not on then
if mem.handle then
minetest.sound_stop(mem.handle)
mem.handle = nil
end
end
local pos2 = techage.get_pos(pos, 'L')
local trd = TRD(pos2)
if trd and trd.start_cylinder then
return trd.start_cylinder(pos2, on)
if trd and trd.start_turbine then
return trd.start_turbine(pos2, on, mem)
end
return false
end
local function can_start(pos, mem, state)
return start_cylinder(pos, true)
return start_turbine(pos, true, mem)
end
local function play_sound(pos)
local mem = tubelib2.get_mem(pos)
if mem.techage_state == techage.RUNNING then
mem.handle = minetest.sound_play("techage_turbine", {
pos = pos,
gain = 1,
max_hear_distance = 15})
minetest.after(2, play_sound, pos)
end
end
local function start_node(pos, mem, state)
generator.turn_power_on(pos, POWER_CAPACITY)
mem.techage_state = techage.RUNNING
play_sound(pos)
end
local function stop_node(pos, mem, state)
start_cylinder(pos, false)
mem.techage_state = techage.STOPPED
start_turbine(pos, false, mem)
generator.turn_power_on(pos, 0)
end
local State = techage.NodeStates:new({
node_name_passive = "techage:flywheel",
node_name_active = "techage:flywheel_on",
node_name_passive = "techage:generator",
node_name_active = "techage:generator_on",
cycle_time = CYCLE_TIME,
standby_ticks = STANDBY_TICKS,
formspec_func = formspec,
@ -81,20 +101,19 @@ local function distibuting(pos, mem)
State:keep_running(pos, mem, COUNTDOWN_TICKS)
else
State:fault(pos, mem)
start_cylinder(pos, false)
start_turbine(pos, false, mem)
generator.turn_power_on(pos, 0)
end
end
local function node_timer(pos, elapsed)
local mem = tubelib2.get_mem(pos)
print("flywheel node_timer")
local pos2 = techage.get_pos(pos, 'L')
if minetest.get_node(pos2).name == "techage:cylinder_on" and tubelib2.get_mem(pos2).running then
if minetest.get_node(pos2).name == "techage:turbine_on" and tubelib2.get_mem(pos2).running then
distibuting(pos, mem)
else
State:fault(pos, mem)
start_cylinder(pos, false)
start_turbine(pos, false, mem)
generator.turn_power_on(pos, 0)
end
return State:is_active(mem)
@ -110,7 +129,7 @@ local function turn_power_on(pos, in_dir, sum)
mem.power_result = sum
if State:is_active(mem) and sum <= 0 then
State:fault(pos, mem)
start_cylinder(pos, false)
start_turbine(pos, false, mem)
-- No automatic turn on
mem.power_capacity = 0
end
@ -134,21 +153,22 @@ local function on_rightclick(pos)
M(pos):set_string("formspec", formspec(State, pos, mem))
end
minetest.register_node("techage:flywheel", {
description = I("TA2 Flywheel"),
minetest.register_node("techage:generator", {
description = I("TA3 Generator"),
tiles = {
-- up, down, right, left, back, front
"techage_filling_ta2.png^techage_frame_ta2.png",
"techage_filling_ta2.png^techage_frame_ta2.png",
"techage_filling_ta2.png^techage_axle_clutch.png^techage_frame_ta2.png",
"techage_filling_ta2.png^techage_appl_open.png^techage_frame_ta2.png",
"techage_filling_ta2.png^techage_frame_ta2.png^techage_flywheel.png",
"techage_filling_ta2.png^techage_frame_ta2.png^techage_flywheel.png^[transformFX]",
"techage_filling_ta3.png^techage_frame_ta3.png",
"techage_filling_ta3.png^techage_frame_ta3.png",
"techage_filling_ta3.png^techage_appl_hole_electric.png^techage_frame_ta3.png",
"techage_filling_ta3.png^techage_appl_open.png^techage_frame_ta3.png",
"techage_filling_ta3.png^techage_frame_ta3.png^techage_appl_generator.png",
"techage_filling_ta3.png^techage_frame_ta3.png^techage_appl_generator.png^[transformFX]",
},
techage = {
turn_on = turn_power_on,
read_power_consumption = generator.read_power_consumption,
power_network = Axle,
power_network = Cable,
power_side = "R",
animated_power_network = true,
},
@ -175,8 +195,8 @@ minetest.register_node("techage:flywheel", {
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("techage:flywheel_on", {
description = I("TA2 Flywheel"),
minetest.register_node("techage:generator_on", {
description = I("TA3 Generator"),
tiles = {
-- up, down, right, left, back, front
"techage_filling_ta2.png^techage_frame_ta2.png",
@ -216,7 +236,8 @@ minetest.register_node("techage:flywheel_on", {
techage = {
turn_on = turn_power_on,
read_power_consumption = generator.read_power_consumption,
power_network = Axle,
power_network = Cable,
power_side = "R",
animated_power_network = true,
},
@ -237,3 +258,30 @@ minetest.register_node("techage:flywheel_on", {
is_ground_content = false,
sounds = default.node_sound_wood_defaults(),
})
minetest.register_craft({
output = "techage:generator",
recipe = {
{"basic_materials:steel_bar", "dye:red", "default:wood"},
{"", "basic_materials:gear_steel", "techage:axle"},
{"default:wood", "techage:iron_ingot", "basic_materials:steel_bar"},
},
})
minetest.register_lbm({
label = "[techage] Generator sound",
name = "techage:power_station",
nodenames = {"techage:generator_on"},
run_at_every_load = true,
action = function(pos, node)
play_sound(pos)
end
})
techage.register_help_page(I("TA3 Generator"),
I([[Part of the Coal Power Station.
Has to be placed side by side
with the TA3 Turbine.
Connect the Generator with your TA3 machines
by means of Electric Cables and Junction Boxes
(see TA3 Coal Power Station)]]), "techage:generator")

View File

@ -8,7 +8,7 @@
LGPLv2.1+
See LICENSE.txt for more information
TA2 Steam Engine Cylinder
TA3 Power Station Turbine
]]--
@ -52,26 +52,26 @@ local function start_cylinder(pos, on)
local mem = tubelib2.get_mem(pos)
if on and mem.running then
consumer.turn_power_on(pos, POWER_CONSUMPTION)
swap_node(pos, "techage:cylinder_on")
swap_node(pos, "techage:turbine_on")
return true
else
consumer.turn_power_on(pos, 0)
swap_node(pos, "techage:cylinder")
swap_node(pos, "techage:turbine")
end
return false
end
minetest.register_node("techage:cylinder", {
description = I("TA2 Cylinder"),
minetest.register_node("techage:turbine", {
description = I("TA3 Turbine"),
tiles = {
-- up, down, right, left, back, front
"techage_filling_ta2.png^techage_frame_ta2.png",
"techage_filling_ta2.png^techage_frame_ta2.png",
"techage_filling_ta2.png^techage_appl_open.png^techage_frame_ta2.png",
"techage_filling_ta2.png^techage_frame_ta2.png^techage_steam_hole.png",
"techage_filling_ta2.png^techage_cylinder.png^techage_frame_ta2.png",
"techage_filling_ta2.png^techage_cylinder.png^techage_frame_ta2.png",
"techage_filling_ta3.png^techage_frame_ta3.png^techage_steam_hole.png",
"techage_filling_ta3.png^techage_frame_ta3.png",
"techage_filling_ta3.png^techage_appl_open.png^techage_frame_ta3.png",
"techage_filling_ta3.png^techage_frame_ta3.png^techage_steam_hole.png",
"techage_filling_ta3.png^techage_appl_turbine.png^techage_frame_ta3.png",
"techage_filling_ta3.png^techage_appl_turbine.png^techage_frame_ta3.png",
},
techage = {
turn_on = turn_power_on_clbk,
@ -98,14 +98,14 @@ minetest.register_node("techage:cylinder", {
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("techage:cylinder_on", {
description = I("TA2 Cylinder"),
minetest.register_node("techage:turbine_on", {
description = I("TA3 Turbine"),
tiles = {
-- up, down, right, left, back, front
"techage_filling_ta2.png^techage_frame_ta2.png",
"techage_filling_ta2.png^techage_frame_ta2.png",
"techage_filling_ta2.png^techage_appl_open.png^techage_frame_ta2.png",
"techage_filling_ta2.png^techage_frame_ta2.png^techage_steam_hole.png",
"techage_filling_ta3.png^techage_frame_ta3.png^techage_steam_hole.png",
"techage_filling_ta3.png^techage_frame_ta3.png",
"techage_filling_ta3.png^techage_appl_open.png^techage_frame_ta3.png",
"techage_filling_ta3.png^techage_frame_ta3.png^techage_steam_hole.png",
{
image = "techage_filling4_ta2.png^techage_cylinder4.png^techage_frame4_ta2.png",
backface_culling = false,
@ -147,3 +147,17 @@ minetest.register_node("techage:cylinder_on", {
sounds = default.node_sound_wood_defaults(),
})
minetest.register_craft({
output = "techage:turbine",
recipe = {
{"basic_materials:steel_bar", "techage:iron_ingot", "default:wood"},
{"techage:steam_pipeS", "basic_materials:gear_steel", ""},
{"default:wood", "techage:iron_ingot", "basic_materials:steel_bar"},
},
})
techage.register_help_page(I("TA3 Turbine"),
I([[Part of the Coal Power Station.
Has to be placed side by side
with the TA3 Generator.
(see TA3 Coal Power Station)]]), "techage:turbine")

View File

@ -87,16 +87,17 @@ else
end
-- Coal power station
dofile(MP.."/coal_power_station/firebox.lua")
--dofile(MP.."/coal_power_station/boiler.lua")
--dofile(MP.."/coal_power_station/firebox.lua")
--dofile(MP.."/coal_power_station/boiler_base.lua")
--dofile(MP.."/coal_power_station/boiler_top.lua")
--dofile(MP.."/coal_power_station/generator.lua")
--dofile(MP.."/coal_power_station/turbine.lua")
--dofile(MP.."/coal_power_station/cooler.lua")
dofile(MP.."/test/battery.lua")
--dofile(MP.."/test/battery.lua")
--dofile(MP.."/test/test.lua")
dofile(MP.."/test/generator.lua")
--dofile(MP.."/test/generator.lua")
--dofile(MP.."/test/consumer.lua")
--dofile(MP.."/test/consumer2.lua")

BIN
sounds/techage_turbine.ogg Normal file

Binary file not shown.

View File

@ -292,6 +292,7 @@ minetest.register_node("techage:boiler2", {
end,
--paramtype2 = "facedir",
drop = "",
groups = {cracky=1},
on_rotate = screwdriver.disallow,
is_ground_content = false,

View File

@ -188,6 +188,7 @@ minetest.register_node("techage:flywheel", {
on_rightclick = on_rightclick,
on_timer = node_timer,
drop = "",
paramtype2 = "facedir",
groups = {cracky=2, crumbly=2, choppy=2},
on_rotate = screwdriver.disallow,
@ -251,6 +252,7 @@ minetest.register_node("techage:flywheel_on", {
on_rightclick = on_rightclick,
on_timer = node_timer,
drop = "",
paramtype2 = "facedir",
groups = {not_in_creative_inventory=1},
diggable = false,

View File

@ -25,7 +25,7 @@ local HelpText = S([[1. Build a steam machine according
to the plan with TA2 Firebox, TA2 Boiler,
Steam Pipes, TA2 Cyclinder and TA2 Flywheel.
2. Heat the Firebox with coal/charcoal
3. Fill the boiler with water (more than on bucket is needed)
3. Fill the boiler with water (more than one bucket is needed)
4. Wait until the water is heated
5. Open the steam ventil
6. Start the Flywheel

View File

@ -12,7 +12,8 @@ local COUNTDOWN_TICKS = 4
local CYCLE_TIME = 16
local POWER_CAPACITY = 8
local Cable = techage.ElectricCable
--local Power = techage.ElectricCable
local Power = techage.SteamPipe
local generator = techage.generator
local function formspec(self, pos, mem)
@ -99,7 +100,7 @@ minetest.register_node("techage:generator", {
techage = {
turn_on = turn_power_on,
read_power_consumption = generator.read_power_consumption,
power_network = Cable,
power_network = Power,
power_side = "R",
},
@ -120,3 +121,4 @@ minetest.register_node("techage:generator", {
on_timer = node_timer,
})
Power:add_secondary_node_names({"techage:generator"})

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB