Alpha version and WIP
parent
39c5f48b38
commit
f078dc0a6e
|
@ -0,0 +1 @@
|
|||
|
|
@ -0,0 +1,89 @@
|
|||
-- ENERGY LIB WRITTEN BY Andrey01.
|
||||
|
||||
|
||||
-- THE UNITS CONCERNING TO THE ENERGY.
|
||||
|
||||
-- The energy amount is throughout measured in *kilojoules* (kj).
|
||||
-- The velocity of energy emitting/energizement measured in *kilojoules per a second* (kj/s).
|
||||
|
||||
|
||||
--Initial heat emitting values of just put-in world nodes (first field) and velocities of their emitting & energizing (second field).
|
||||
|
||||
heat = {}
|
||||
heat.default_nodes_heat_data = {
|
||||
["default:lava_source"] = {40, 0.003},
|
||||
["default:lava_flowing"] = {50, 0.010},
|
||||
["default:water_flowing"] = {1.5, 0.0002},
|
||||
["default:furnace_active"] = {25, 0.05},
|
||||
["default:meselamp"] = {5, 0.4},
|
||||
["default:mese_post_light"] = {2.5, 0.8},
|
||||
["default:torch"] = {13, 0.0008},
|
||||
["fire:basic_flame"] = {22, 2},
|
||||
["fire:permanent_flame"] = {22, 2},
|
||||
["default:mese"] = {3, 0.2},
|
||||
["default:stone"] = {0, 0.0005},
|
||||
["default:cobble"] = {0, 0.0013},
|
||||
["default:stonebrick"] = {0, 0.001},
|
||||
["default:stone_block"] = {0, 0.0002},
|
||||
["default:mossycobble"] = {0, 0.001},
|
||||
["default:desert_stone"] = {0, 0.0012},
|
||||
["default:desert_stonebrick"] = {0, 0.0007},
|
||||
["default:desert_stone_block"] = {0, 0.001},
|
||||
["default:dirt"] = {0, 0.0002},
|
||||
["default:dirt_with_grass"] = {0, 0.0005},
|
||||
["air"] = {0, 0.5}
|
||||
}
|
||||
|
||||
-- Runs node defs of all nodes listed in default_nodes_heat_data and overrides them with new params 'init_heat_emit' and 'heat_vel'.
|
||||
for name, def in pairs(minetest.registered_nodes) do
|
||||
if heat.default_nodes_heat_data[name] then
|
||||
def.init_heat_emit = heat.default_nodes_heat_data[name][1]
|
||||
def.heat_vel = heat.default_nodes_heat_data[name][2]
|
||||
end
|
||||
|
||||
def.on_construct = function (pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("cur_heat_amount", (heat.default_nodes_heat_data[name] or 0) or heat.default_nodes_heat_data[name][1])
|
||||
end
|
||||
minetest.register_node(":"..name, def)
|
||||
|
||||
end
|
||||
|
||||
--[[A node that wanted to be energized is finding out neighbour nodes with a heat value > 0 around itself in radius 1 node.
|
||||
*e_node is energizing node.
|
||||
*e_nodepos is position of energizing node.]]
|
||||
heat.find_nodes_with_heat = function (e_node, e_nodepos)
|
||||
local surround_nodes = minetest.find_nodes_with_meta({x=e_nodepos.x-1, y=e_nodepos.y-1, z=e_nodepos.z-1}, {x=e_nodepos.x+1, y=e_nodepos.y+1, z=e_nodepos.z+1})
|
||||
local surround_nodes_with_energy = {}
|
||||
for i, pos in pairs(surround_nodes) do
|
||||
-- *t_node is transmitting an energy node.
|
||||
local t_node = minetest.get_node(pos)
|
||||
local meta = minetest.get_meta()
|
||||
local name = t_node.name
|
||||
if minetest.registered_node[name].heat_vel and meta:get_string("cur_heat_amount") > 0 then
|
||||
surround_nodes_with_energy[i] = pos
|
||||
end
|
||||
end
|
||||
return surround_nodes_with_energy
|
||||
end
|
||||
|
||||
-- Increases a heat value of *e_node and takes away it from *t_node. Amount of transmitted energy depends on heat energizement velocity of *e_node.
|
||||
heat.energize = function (e_node, e_nodepos)
|
||||
local name = e_node.name
|
||||
local heat_vel = minetest.registered_nodes[name].heat_vel
|
||||
if not heat_vel then
|
||||
return
|
||||
end
|
||||
|
||||
local surround_nodes = heat.find_nodes_with_heat(e_node, e_nodepos)
|
||||
for i, pos in pairs(surround_nodes) do
|
||||
local node = minetest.get_node(pos)
|
||||
local t_node_meta, e_node_meta = minetest.get_meta(pos), minetest.get_meta(e_nodepos)
|
||||
local t_node_heat, e_node_heat = t_node_meta:get_string("cur_heat_amount"), e_node_meta:get_string("cur_heat_amount")
|
||||
local rand_energy_trans = math.random(t_node_heat/2, t_node_heat)
|
||||
t_node_meta:set_string("cur_heat_amount", t_node_heat-rand_energy_trans)
|
||||
e_node_meta:set_string("cur_heat_amount", e_node_heat+rand_energy_trans)
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue