diff options
Diffstat (limited to 'init.lua')
-rw-r--r-- | init.lua | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..d24e0da --- /dev/null +++ b/init.lua @@ -0,0 +1,84 @@ +-- Copyright (C) 2021 Gabriel PĂ©rez-Cerezo + +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. + +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. + +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <https://www.gnu.org/licenses/>. + + +local S = minetest.get_translator("technictrain") + +local function charger_step(wgn,dtime, data, train) + local max_charge = 200000 + local discharge_rate = 80000 + local charge_step = 2000 + local charge_rate = 600 + if not data.charge then + data.charge = 0 + end + if data.burn_time and data.burn_time > 0 and data.charge < max_charge then + data.charge = math.min( data.charge + dtime*charge_rate, max_charge) + data.burn_time = data.burn_time - dtime + elseif data.charge < max_charge then + local inv = wgn:get_inventory() + if not inv:is_empty("fuel") then + local fuellist = inv:get_list("fuel") + local fuel, afterfuel = minetest.get_craft_result( + {method = "fuel", width = 1, + items = fuellist}) + if fuel and fuel.time > 0 then + data.burn_time = fuel.time + inv:set_stack("fuel", 1, afterfuel.items[1]) + end + end + end + local size = math.floor(data.charge * 15 / max_charge +0.5) + data.charge, _ = technic.charge_tools(wgn, data.charge, dtime*charge_step) + wgn.object:set_properties({ + textures={"[combine:256x256:0,0=technictrain_wagon_charger.png:121,"..43+15-size.."=technictrain_charger_indicator.png\\^\\[resize\\:5x"..size..""} + }) + +end + + +advtrains.register_wagon("technictrain_wagon_charger", { + mesh="moretrains_wagon_box.b3d", + textures = {"technictrain_wagon_charger.png"}, + seats = {}, + drives_on={default=true}, + max_speed=20, + visual_size = {x=1, y=1}, + wagon_span=2.672, + collisionbox = {-1.0,-0.5,-1.0, 1.0,2.5,1.0}, + drops={"default:steelblock"}, + has_inventory = true, + get_inventory = function (self) return minetest.get_inventory({type="detached", name="advtrains_wgn_"..self.id}) end, + get_inventory_formspec = function(self, pname, invname) + local data = advtrains.wagons[self.id] + return "size[8,11]".. + "list["..invname..";src;3,1;1,1;]".. + "image[4,1;1,1;technic_battery_reload.png]".. + "label[0,0;"..S("Battery / Generator car").."]".. + "label[3,0;"..S("Charge").."]".. + "label[5,0;"..S("Generator Fuel").."]".. + "list[current_player;main;0,5;8,4;]".. + "listring["..invname..";src]".. + "listring[current_player;main]".. + "list["..invname..";fuel;5,1;1,1;]" + + + end, + inventory_list_sizes = { + fuel = 1, + src = 1, + }, + custom_on_step = charger_step, +}, S("Charger Wagon"), "technictrain_wagon_charger_inv.png") |