Update radiation.lua

Api added with the help of Copilot AI.
This commit is contained in:
DustyDave961 2024-09-28 00:45:09 -05:00 committed by GitHub
parent 18df2813a0
commit 3e9eb08c24
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -28,9 +28,26 @@ or complex internal structure should show no radiation resistance.
Fractional resistance values are permitted. Fractional resistance values are permitted.
--]] --]]
local rad_resistance_node = {}
local rad_resistance_group = {}
local cache_radiation_resistance = {}
-- Function to register node-specific resistance
function technic.register_rad_resistance(node_name, resistance)
rad_resistance_node[node_name] = resistance
cache_radiation_resistance[node_name] = nil -- Invalidate cache
end
-- Function to register multiple node resistances at once
function technic.register_multiple_resistances(resistances)
for node_name, resistance in pairs(resistances) do
technic.register_rad_resistance(node_name, resistance)
end
end
local S = technic.getter local S = technic.getter
local rad_resistance_node = { local node_resistances = {
["default:brick"] = 13, ["default:brick"] = 13,
["default:bronzeblock"] = 45, ["default:bronzeblock"] = 45,
["default:clay"] = 15, ["default:clay"] = 15,
@ -165,14 +182,28 @@ local rad_resistance_node = {
["tnt:tnt"] = 11, ["tnt:tnt"] = 11,
["tnt:tnt_burning"] = 11, ["tnt:tnt_burning"] = 11,
} }
local rad_resistance_group = {
concrete = 16, -- Register all node resistances at once
tree = 3.4, technic.register_multiple_resistances(node_resistances)
uranium_block = 500,
wood = 1.7, -- Function to register group-specific resistance
} function technic.register_group_resistance(group_name, resistance)
local cache_radiation_resistance = {} rad_resistance_group[group_name] = resistance
local function node_radiation_resistance(node_name) -- Invalidate cache for all nodes in this group
for node_name, def in pairs(minetest.registered_nodes) do
if def.groups[group_name] then
cache_radiation_resistance[node_name] = nil
end
end
end
technic.register_group_resistance("concrete", 16)
technic.register_group_resistance("tree", 3.4)
technic.register_group_resistance("uranium_block", 500)
technic.register_group_resistance("wood", 1.7)
-- Function to calculate radiation resistance
function node_radiation_resistance(node_name)
local resistance = cache_radiation_resistance[node_name] local resistance = cache_radiation_resistance[node_name]
if resistance then if resistance then
return resistance return resistance
@ -182,22 +213,32 @@ local function node_radiation_resistance(node_name)
cache_radiation_resistance[node_name] = 0 cache_radiation_resistance[node_name] = 0
return 0 return 0
end end
resistance = def.radiation_resistance or
rad_resistance_node[node_name] -- Check for rad_resistance group in node definition
if not resistance then
resistance = 0 resistance = 0
for g, v in pairs(def.groups) do
if g == "rad_resistance" then
resistance = resistance + v
end
end
-- If no rad_resistance group, use registered node-specific resistance
if resistance == 0 then
resistance = rad_resistance_node[node_name] or 0
end
-- Add group-specific resistance if applicable
for g, v in pairs(def.groups) do for g, v in pairs(def.groups) do
if v > 0 and rad_resistance_group[g] then if v > 0 and rad_resistance_group[g] then
resistance = resistance + rad_resistance_group[g] resistance = resistance + rad_resistance_group[g]
end end
end end
end
resistance = math.sqrt(resistance) resistance = math.sqrt(resistance)
cache_radiation_resistance[node_name] = resistance cache_radiation_resistance[node_name] = resistance
return resistance return resistance
end end
--[[ --[[
Radioactive nodes cause damage to nearby players. The damage Radioactive nodes cause damage to nearby players. The damage
effect depends on the intrinsic strength of the radiation source, effect depends on the intrinsic strength of the radiation source,