From 1c4bd6eed29ccc12b89898fd89024b647a92701e Mon Sep 17 00:00:00 2001 From: Joachim Stolberg Date: Thu, 20 Jun 2019 23:44:04 +0200 Subject: [PATCH] Tiny Generator added Generator burning times modified --- basic_machines/generator.lua | 236 ++++++++++++++++++ coal_power_station/boiler_top.lua | 20 +- coal_power_station/firebox.lua | 6 +- coal_power_station/generator.lua | 2 +- coal_power_station/help.lua | 18 +- init.lua | 1 + power/power.lua | 1 + sounds/techage_generator.ogg | Bin 0 -> 18919 bytes steam_engine/firebox.lua | 3 +- textures/techage_appl_electric_gen_front.png | Bin 0 -> 382 bytes textures/techage_appl_electric_gen_front4.png | Bin 0 -> 572 bytes textures/techage_appl_electric_gen_side.png | Bin 0 -> 279 bytes textures/techage_appl_electric_gen_top.png | Bin 0 -> 251 bytes textures/techage_appl_electric_power.png | Bin 542 -> 0 bytes textures/techage_electric_power.png | Bin 311 -> 0 bytes 15 files changed, 273 insertions(+), 14 deletions(-) create mode 100644 basic_machines/generator.lua create mode 100644 sounds/techage_generator.ogg create mode 100644 textures/techage_appl_electric_gen_front.png create mode 100644 textures/techage_appl_electric_gen_front4.png create mode 100644 textures/techage_appl_electric_gen_side.png create mode 100644 textures/techage_appl_electric_gen_top.png delete mode 100644 textures/techage_appl_electric_power.png delete mode 100644 textures/techage_electric_power.png diff --git a/basic_machines/generator.lua b/basic_machines/generator.lua new file mode 100644 index 0000000..6b14378 --- /dev/null +++ b/basic_machines/generator.lua @@ -0,0 +1,236 @@ +--[[ + + TechAge + ======= + + Copyright (C) 2019 Joachim Stolberg + + LGPLv2.1+ + See LICENSE.txt for more information + + TA3 Tiny Oil Power Generator + +]]-- + +-- 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 = techage.ElectricCable +local provide_power = techage.power.provide_power +local power_switched = techage.power.power_switched +local firebox = techage.firebox + +local CYCLE_TIME = 2 +local PWR_CAPA = 12 +local BURN_CYCLE_FACTOR = 2.5 + +local function formspec(self, pos, mem) + local fuel_percent = 0 + if mem.generating then + fuel_percent = ((mem.burn_cycles or 1) * 100) / (mem.burn_cycles_total or 1) + end + return "size[8,7]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + "list[current_name;fuel;0.5,1;1,1;]".. + "image[1.5,1;1,1;default_furnace_fire_bg.png^[lowpart:".. + fuel_percent..":default_furnace_fire_fg.png]".. + "button[3,1;1.8,1;update;"..I("Update").."]".. + "image_button[5.5,1;1,1;".. self:get_state_button_image(mem) ..";state_button;]".. + "image[6.5,0.5;1,2;"..techage.power.formspec_power_bar(PWR_CAPA, mem.provided).."]".. + "list[current_player;main;0,3;8,4;]".. + default.get_hotbar_bg(0, 3) +end + +local function can_start(pos, mem, state) + if mem.burn_cycles > 0 then return true end + local inv = M(pos):get_inventory() + return not inv:is_empty("fuel") +end + +local function start_node(pos, mem, state) + mem.generating = true + power_switched(pos) + minetest.sound_play("techage_generator", { + pos = pos, + gain = 1, + max_hear_distance = 7}) +end + +local function stop_node(pos, mem, state) + mem.generating = false + mem.provided = 0 + power_switched(pos) +end + +local State = techage.NodeStates:new({ + node_name_passive = "techage:tiny_generator", + node_name_active = "techage:tiny_generator_on", + cycle_time = CYCLE_TIME, + standby_ticks = 0, + formspec_func = formspec, + can_start = can_start, + start_node = start_node, + stop_node = stop_node, +}) + +local function burning(pos, mem) + local ratio = math.max((mem.provided or PWR_CAPA) / PWR_CAPA, 0.02) + + mem.burn_cycles = (mem.burn_cycles or 0) - ratio + if mem.burn_cycles <= 0 then + local taken = firebox.get_fuel(pos) + if taken then + mem.burn_cycles = firebox.Burntime[taken:get_name()] / CYCLE_TIME * BURN_CYCLE_FACTOR + mem.burn_cycles_total = mem.burn_cycles + return true + else + State:fault(pos, mem) + return false + end + else + return true + end +end + +local function node_timer(pos, elapsed) + local mem = tubelib2.get_mem(pos) + if mem.generating and burning(pos, mem) then + mem.provided = provide_power(pos, PWR_CAPA) + minetest.sound_play("techage_generator", { + pos = pos, + gain = 1, + max_hear_distance = 7}) + return true + else + mem.provided = 0 + end + return false +end + +local function on_receive_fields(pos, formname, fields, player) + if minetest.is_protected(pos, player:get_player_name()) then + return + end + local mem = tubelib2.get_mem(pos) + State:state_button_event(pos, mem, fields) + + if fields.update then + M(pos):set_string("formspec", formspec(State, pos, mem)) + end +end + +local function allow_metadata_inventory(pos, listname, index, stack, player) + if minetest.is_protected(pos, player:get_player_name()) then + return 0 + end + if stack:get_name() == "techage:oil_source" then + return stack:get_count() + end + return 0 +end + +local function on_rightclick(pos) + local mem = tubelib2.get_mem(pos) + M(pos):set_string("formspec", formspec(State, pos, mem)) +end + +minetest.register_node("techage:tiny_generator", { + description = "Tiny Power Generator", + tiles = { + -- up, down, right, left, back, front + "techage_appl_electric_gen_top.png^techage_frame_ta3_top.png", + "techage_appl_electric_gen_top.png^techage_frame_ta3.png", + "techage_appl_electric_gen_side.png^techage_appl_hole_electric.png^techage_frame_ta3.png", + "techage_appl_electric_gen_side.png^techage_frame_ta3.png", + "techage_appl_electric_gen_front.png^[transformFX]^techage_frame_ta3.png", + "techage_appl_electric_gen_front.png^techage_frame_ta3.png", + }, + paramtype2 = "facedir", + groups = {cracky=2, crumbly=2, choppy=2}, + on_rotate = screwdriver.disallow, + is_ground_content = false, + + on_construct = function(pos) + local mem = tubelib2.init_mem(pos) + mem.generating = false + mem.burn_cycles = 0 + local meta = M(pos) + meta:set_string("formspec", formspec(State, pos, mem)) + local inv = meta:get_inventory() + inv:set_size('fuel', 1) + end, + + 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_timer = node_timer, + can_dig = techage.firebox.can_dig, +}) + +minetest.register_node("techage:tiny_generator_on", { + description = "Tiny Power Generator", + tiles = { + -- up, down, right, left, back, front + "techage_appl_electric_gen_top.png^techage_frame_ta3_top.png", + "techage_appl_electric_gen_top.png^techage_frame_ta3.png", + "techage_appl_electric_gen_side.png^techage_appl_hole_electric.png^techage_frame_ta3.png", + "techage_appl_electric_gen_side.png^techage_frame_ta3.png", + { + image = "techage_appl_electric_gen_front4.png^[transformFX]^techage_frame4_ta3.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 32, + aspect_h = 32, + length = 0.8, + }, + }, + { + image = "techage_appl_electric_gen_front4.png^techage_frame4_ta3.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 32, + aspect_h = 32, + length = 0.8, + }, + }, + }, + paramtype = "light", + paramtype2 = "facedir", + groups = {not_in_creative_inventory=1}, + diggable = false, + light_source = 4, + on_rotate = screwdriver.disallow, + is_ground_content = false, + + 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_timer = node_timer, + can_dig = techage.firebox.can_dig, +}) + +techage.power.register_node({"techage:tiny_generator", "techage:tiny_generator_on"}, { + conn_sides = {"R"}, + power_network = Power, +}) + +minetest.register_craft({ + output = "techage:tiny_generator", + recipe = { + {'default:steel_ingot', 'techage:usmium_nuggets', 'default:steel_ingot'}, + {'dye:red', 'basic_materials:gear_steel', 'techage:electric_cableS'}, + {'default:steel_ingot', 'techage:vacuum_tube', 'default:steel_ingot'}, + }, +}) diff --git a/coal_power_station/boiler_top.lua b/coal_power_station/boiler_top.lua index c8d4635..5912355 100644 --- a/coal_power_station/boiler_top.lua +++ b/coal_power_station/boiler_top.lua @@ -23,7 +23,7 @@ local I,_ = dofile(MP.."/intllib.lua") local CYCLE_TIME = 4 local STANDBY_TICKS = 2 -local COUNTDOWN_TICKS = 2 +local COUNTDOWN_TICKS = 20 local HEAT_STEP = 10 local WATER_CONSUMPTION = 0.1 local MAX_WATER = 10 @@ -66,16 +66,18 @@ local function formspec(self, pos, mem) end local function can_start(pos, mem, state) - return mem.temperature and mem.temperature > 80 + return mem.temperature and mem.temperature >= 80 end local function start_node(pos, mem, state) mem.running = transfer(pos, "start", nil) + mem.power_ratio = 0 end local function stop_node(pos, mem, state) transfer(pos, "stop", nil) mem.running = false + mem.power_ratio = 0 end local State = techage.NodeStates:new({ @@ -123,15 +125,15 @@ local function steaming(pos, mem, temp) local wc = WATER_CONSUMPTION * (mem.power_ratio or 1) mem.water_level = math.max((mem.water_level or 0) - wc, 0) mem.running = transfer(pos, "running", nil) - if temp >= 80 then - if mem.running then - State:keep_running(pos, mem, COUNTDOWN_TICKS) + if not mem.running then + State:fault(pos, mem) + elseif temp > 20 then + if temp < 80 then + State:stop(pos, mem) + minetest.get_node_timer(pos):start(CYCLE_TIME) else - State:fault(pos, mem) + State:keep_running(pos, mem, COUNTDOWN_TICKS) end - else - State:stop(pos, mem) - minetest.get_node_timer(pos):start(CYCLE_TIME) end end diff --git a/coal_power_station/firebox.lua b/coal_power_station/firebox.lua index b118cb5..184c607 100644 --- a/coal_power_station/firebox.lua +++ b/coal_power_station/firebox.lua @@ -24,6 +24,7 @@ local I,_ = dofile(MP.."/intllib.lua") local firebox = techage.firebox local CYCLE_TIME = 2 +local BURN_CYCLE_FACTOR = 0.5 local function firehole(pos, on) local param2 = minetest.get_node(pos).param2 @@ -50,11 +51,12 @@ local function node_timer(pos, elapsed) nil, -- network {"techage:coalboiler_top"} -- nodenames ) - mem.burn_cycles = (mem.burn_cycles or 0) - math.max((ratio or 0.02), 0.02) + ratio = math.max((ratio or 0.02), 0.02) + mem.burn_cycles = (mem.burn_cycles or 0) - ratio if mem.burn_cycles <= 0 then local taken = firebox.get_fuel(pos) if taken then - mem.burn_cycles = firebox.Burntime[taken:get_name()] / CYCLE_TIME + mem.burn_cycles = firebox.Burntime[taken:get_name()] / CYCLE_TIME * BURN_CYCLE_FACTOR mem.burn_cycles_total = mem.burn_cycles else mem.running = false diff --git a/coal_power_station/generator.lua b/coal_power_station/generator.lua index 43493f1..240c91c 100644 --- a/coal_power_station/generator.lua +++ b/coal_power_station/generator.lua @@ -208,7 +208,7 @@ techage.register_node({"techage:generator", "techage:generator_on"}, { mem.triggered = 2 mem.power_level = payload if mem.generating then - return math.max((mem.provided or PWR_CAPA) / PWR_CAPA, 0.1) + return math.max((mem.provided or PWR_CAPA) / PWR_CAPA, 0.02) else return 0 end diff --git a/coal_power_station/help.lua b/coal_power_station/help.lua index dae3a7f..51bbf76 100644 --- a/coal_power_station/help.lua +++ b/coal_power_station/help.lua @@ -50,7 +50,8 @@ techage.register_help_page("Coal Power Station", HelpText, nil, Images) local PowerConsumption = S([[ Power consumption and supply: -- TA3 Generator: 80 +- TA3 Power Station: 80 +- TA3 Tiny Generator: 12 - TA3 Akku Box: 10 (in both dirs) - TA3 Oil Drill Box: 16 - TA3 Oil Pumpjack: 16 @@ -67,6 +68,21 @@ Power consumption and supply: techage.register_help_page("Power Consumption", PowerConsumption, "techage:t3_source", nil) +local BurnCycles = S([[ +Burning times with one oil item for +Stream Engine / Power Station / Tiny Generator: + +Power max. : 25 / 80 / 12 +Oil burn time/s : 32 / 20 / 100 + +burn time at power 2 : 400 / 800 / 600 +burn time at power 10 : 80 / 160 / 120 +burn time at power 20 : 40 / 80 / -- +]]) + +techage.register_help_page("Oil Burning Times", BurnCycles, "techage:t3_source", nil) + + techage.register_help_page(S("TA3 Electronic Fab"), S([[Used to produce WLAN Chips, needed for TA4 machines.]]), "techage:ta3_electronic_fab_pas") diff --git a/init.lua b/init.lua index 5568998..1509a4d 100644 --- a/init.lua +++ b/init.lua @@ -89,6 +89,7 @@ else dofile(MP.."/basic_machines/autocrafter.lua") dofile(MP.."/basic_machines/forceload.lua") dofile(MP.."/basic_machines/electronic_fab.lua") + dofile(MP.."/basic_machines/generator.lua") -- Coal power station dofile(MP.."/coal_power_station/help.lua") diff --git a/power/power.lua b/power/power.lua index d44fb98..72337f6 100644 --- a/power/power.lua +++ b/power/power.lua @@ -390,6 +390,7 @@ end function techage.power.formspec_power_bar(max_power, current_power) local percent = techage.power.percent(max_power, current_power) + percent = (percent + 5) / 1.22 -- texture correction return "techage_form_level_bg.png^[lowpart:"..percent..":techage_form_level_fg.png" end diff --git a/sounds/techage_generator.ogg b/sounds/techage_generator.ogg new file mode 100644 index 0000000000000000000000000000000000000000..52c6014d13114e47cd9ba5053873f3e434bb88a9 GIT binary patch literal 18919 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 YVTVH1#Qm4Fok8K}>FVdQ&MBb@04v^&@&Et; literal 0 HcmV?d00001 diff --git a/textures/techage_appl_electric_gen_front4.png b/textures/techage_appl_electric_gen_front4.png new file mode 100644 index 0000000000000000000000000000000000000000..63dcf72976aaa8b5a534b182f3328383b0a0cfa4 GIT binary patch literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^3P9Yz!3HF=(z2z16kC$Fy9>jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_%qGIG!22fb~djv*Dd-p)4kKI|ZJJbto+ zq7_G2`SMG?(|Jl?syOX)Nh|yy?XlmH{h;aO`wMn=`!(HF2`&%R5Mtsp`P-VKZ*VK{;u_>$E_VJ7JOUddw+xc>rVSU^V`-G-mIT7y{78Sxg)c0|L8xg zTUh@nsQyuyT=}hYjQzI{KCg|d-V?@{Zg%z8G?kK7`GA8EfIq`>SJ&!H& z+!$wmUbSTNx`s2A+Lj5q`UY!THa(fVQaQ{io2x_H!PMm1_oh{%2e*me@bkKH%~naA z?+d#;gZzVO6%+b0CiHEa!N2G2z6O36oYCqqB_Qqfrl{x4tNO3!)Ht{^irFowVl=Z` zFq`@AW9D64FqH=mup`4=$JsB~H~eG#!oQ%Np#}`u>@G;!HGJp(P{;U#0Sp@oIZzZW c(7b=Y`^vAf-1Ar00OOg#)78&qol`;+0HFB!vH$=8 literal 0 HcmV?d00001 diff --git a/textures/techage_appl_electric_gen_side.png b/textures/techage_appl_electric_gen_side.png new file mode 100644 index 0000000000000000000000000000000000000000..b021d626e06b0c7578786bbab71ec107561ce4b5 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7lv;P*BBVK8;1i07&r?& zB8wRqxP?KOkzv*x37{Z*iKnkC`(ri{K6Axe=d)XYLQ6bd977@wzn%7$lUb3cZF14< z9j&`}%&0f+dLZ^*=jD2tr!NBEzKqO}6A+&I}@ejY5wna8ZYcIIGs3ghrSe&T!Ic@*k WGePryCzdsXJm%@@=d#Wzp$Pz-=4uWA literal 0 HcmV?d00001 diff --git a/textures/techage_appl_electric_gen_top.png b/textures/techage_appl_electric_gen_top.png new file mode 100644 index 0000000000000000000000000000000000000000..77354eae1a821aaab0111b2ef0cf6a30da242ac2 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7lvaDiVW(^lkIl^MK}vQ zB8wRqxP?KOkzv*x37{Z*iKnkC`(ri{el8`AHxk={LLHtijv*0;lM^IZm1PYUamxgU z{P*|fUi3!D=U$R21?U%`=Ow`_%a20ap7$I|Npzopr00S*lg#Z8m literal 0 HcmV?d00001 diff --git a/textures/techage_appl_electric_power.png b/textures/techage_appl_electric_power.png deleted file mode 100644 index bb49b7eac1207b16c5251ab8d5228fd3ade064a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542 zcmV+(0^$9MP)WFU8GbZ8()Nlj2>E@cM*00DwYL_t(o!|j((O2a@D z#=mLWNleGKAc&h(5d@*+3NE{>?mU5uUcsdcPvKfG;05#oT@*L2nkqX-l#i8|&$ozvEyxw%@#7e~6CK>%2LQ0f9wyue5dj94 zmC%YZTR(u!0|a6Q?g;>Z4-ZioVmuzh@xKzX-!I_Di2&Ey56luA%F4XUQe zIRkMV=hp@E(${N0Px#07*qoM6N<$f=1QY(f|Me diff --git a/textures/techage_electric_power.png b/textures/techage_electric_power.png deleted file mode 100644 index f5a7a2bb8073155113aad6466b10cea5fff4519c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;VE0C6xmo?Os*VWawwzYEi za0~RX%XE{CjR;&8&YqK(eWif^e2eabCjJl8q;AiM|9NGK_L8_Lpf<*mAirP+hi5m^ zK%69RcNc~ZR#^`qhqJ&VvY3H^TNs2H8D`Cq01C2~c>21sKW5_M6XQRB;Oh~fkZfj1 zM2T~LZfuIRwY!*CSTRjH9W5IHve?tr&t;ucLK6Uiuv(!2