weather_pack/thunder.lua

91 lines
2.1 KiB
Lua

----------------------------------------------------------------
-- Happy Weather: Thunder
-- License: MIT
-- Credits: xeranas
-- See also: lightning mod for actual lightning effect, sounds.
----------------------------------------------------------------
local thunder = {}
thunder.last_check = 0
thunder.check_interval = 100
thunder.chance = 0.8
-- Weather identification code
thunder.code = "thunder"
local thunder_target_weather_code = "heavy_rain"
-- Manual triggers flags
local manual_trigger_start = false
local manual_trigger_end = false
-- Thunder weather appearance control
local thunder_weather_chance = 5 -- 5 percent appearance during heavy rain
local thunder_weather_next_check = 0
local thunder_weather_check_delay = 600 -- to avoid checks continuously
thunder.is_starting = function(dtime)
thunder.next_strike = 0
thunder.min_delay = 5
thunder.max_delay = math.random(5, 45)
if thunder.last_check + thunder.check_interval < os.time() then
thunder.last_check = os.time()
if math.random() < thunder.chance and happy_weather.is_weather_active("heavy_rain") then
return true
end
end
if manual_trigger_start then
manual_trigger_start = false
return true
end
return false
end
thunder.is_ending = function(dtime)
if thunder.last_check + thunder.check_interval < os.time() then
thunder.last_check = os.time()
if math.random() < 0.4 or happy_weather.is_weather_active("heavy_rain") == false then
return true
end
end
if manual_trigger_end then
manual_trigger_end = false
return true
end
return false
end
local calculate_thunder_strike_delay = function()
local delay = math.random(thunder.min_delay, thunder.max_delay)
thunder.next_strike = os.time() + delay
end
thunder.render = function(dtime, player)
local player_name = player:get_player_name()
if happy_weather.is_player_in_weather_area(player_name, "heavy_rain") == false then
return
end
if thunder.next_strike <= os.time() then
lightning.strike()
calculate_thunder_strike_delay()
end
end
thunder.start = function()
manual_trigger_start = true
end
thunder.stop = function()
manual_trigger_end = true
end
happy_weather.register_weather(thunder)