weather_pack/snow/init.lua

60 lines
1.7 KiB
Lua

snow = {}
snow.particles_count = 25
-- calculates coordinates and draw particles for snow weather
snow.add_rain_particles = function(player, dtime)
rain.last_rp_count = 0
for i=snow.particles_count, 1,-1 do
local random_pos_x, random_pos_y, random_pos_z = get_random_pos_by_player_look_dir(player)
random_pos_y = math.random() + random_pos(player:getpos().y - 1, player:getpos().y + 7)
if minetest.get_node_light({x=random_pos_x, y=random_pos_y, z=random_pos_z}, 0.5) == 15 then
rain.last_rp_count = rain.last_rp_count + 1
minetest.add_particle({
pos = {x=random_pos_x, y=random_pos_y, z=random_pos_z},
velocity = {x = math.random(-1,-0.5), y = math.random(-2,-1), z = math.random(-1,-0.5)},
acceleration = {x = math.random(-1,-0.5), y=-0.5, z = math.random(-1,-0.5)},
expirationtime = 0.6,
size = math.random(0.5, 1),
collisiondetection = true,
vertical = true,
texture = snow.get_texture(),
playername = player:get_player_name()
})
end
end
end
-- Simple random texture getter
snow.get_texture = function()
local texture_name
local random_number = math.random()
if random_number > 0.5 then
texture_name = "snow_snowflake1.png"
else
texture_name = "snow_snowflake2.png"
end
return texture_name;
end
minetest.register_globalstep(function(dtime)
if weather.state ~= "snow" then
return false
end
for _, player in ipairs(minetest.get_connected_players()) do
if (is_underwater(player)) then
return false
end
snow.add_rain_particles(player, dtime)
end
end)
-- register snow weather
if weather.reg_weathers.snow == nil then
weather.reg_weathers.snow = {
chance = 10,
clear = function() end
}
end