aboutsummaryrefslogtreecommitdiff
path: root/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua84
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")