mirror of
https://gitlab.com/rautars/weather_pack.git
synced 2024-11-13 05:40:19 +01:00
Initial upload
This commit is contained in:
commit
cb0719b7dd
0
modpack.txt
Normal file
0
modpack.txt
Normal file
15
weather/command.lua
Normal file
15
weather/command.lua
Normal file
|
@ -0,0 +1,15 @@
|
|||
minetest.register_privilege("weather", {
|
||||
description = "Change the weather",
|
||||
give_to_singleplayer = false
|
||||
})
|
||||
|
||||
-- Set weather
|
||||
minetest.register_chatcommand("setweather", {
|
||||
params = "<weather>",
|
||||
description = "Set weather to rain, snow or none", -- full description
|
||||
privs = {weather = true},
|
||||
func = function(name, param)
|
||||
weather = param
|
||||
save_weather()
|
||||
end
|
||||
})
|
50
weather/init.lua
Normal file
50
weather/init.lua
Normal file
|
@ -0,0 +1,50 @@
|
|||
-- Weather:
|
||||
-- * rain
|
||||
-- * snow
|
||||
-- * wind (not implemented)
|
||||
|
||||
assert(minetest.add_particlespawner, "I told you to run the latest GitHub!")
|
||||
|
||||
addvectors = function (v1, v2)
|
||||
return {x=v1.x+v2.x, y=v1.y+v2.y, z=v1.z+v2.z}
|
||||
end
|
||||
|
||||
save_weather = function ()
|
||||
local file = io.open(minetest.get_worldpath().."/weather", "w+")
|
||||
file:write(weather)
|
||||
file:close()
|
||||
end
|
||||
|
||||
read_weather = function ()
|
||||
local file = io.open(minetest.get_worldpath().."/weather", "r")
|
||||
if not file then return end
|
||||
local readweather = file:read()
|
||||
file:close()
|
||||
return readweather
|
||||
end
|
||||
|
||||
weather = read_weather()
|
||||
|
||||
minetest.register_globalstep(function(dtime)
|
||||
if weather == "rain" or weather == "snow" then
|
||||
if math.random(1, 10000) == 1 then
|
||||
weather = "none"
|
||||
save_weather()
|
||||
end
|
||||
else
|
||||
if math.random(1, 50000) == 1 then
|
||||
weather = "rain"
|
||||
save_weather()
|
||||
end
|
||||
if math.random(1, 50000) == 2 then
|
||||
weather = "snow"
|
||||
save_weather()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
dofile(minetest.get_modpath("weather").."/rain.lua")
|
||||
dofile(minetest.get_modpath("weather").."/snow.lua")
|
||||
dofile(minetest.get_modpath("weather").."/command.lua")
|
||||
|
||||
|
24
weather/rain.lua
Normal file
24
weather/rain.lua
Normal file
|
@ -0,0 +1,24 @@
|
|||
-- Rain
|
||||
minetest.register_globalstep(function(dtime)
|
||||
if weather ~= "rain" then return end
|
||||
for _, player in ipairs(minetest.get_connected_players()) do
|
||||
local ppos = player:getpos()
|
||||
|
||||
-- Make sure player is not in a cave/house...
|
||||
if minetest.env:get_node_light(ppos, 0.5) ~= 15 then return end
|
||||
|
||||
local minp = addvectors(ppos, {x=-9, y=7, z=-9})
|
||||
local maxp = addvectors(ppos, {x= 9, y=7, z= 9})
|
||||
|
||||
local vel = {x=0, y= -4, z=0}
|
||||
local acc = {x=0, y=-9.81, z=0}
|
||||
|
||||
minetest.add_particlespawner(25, 0.5,
|
||||
minp, maxp,
|
||||
vel, vel,
|
||||
acc, acc,
|
||||
0.8, 0.8,
|
||||
25, 25,
|
||||
false, "weather_rain.png", player:get_player_name())
|
||||
end
|
||||
end)
|
72
weather/snow.lua
Normal file
72
weather/snow.lua
Normal file
|
@ -0,0 +1,72 @@
|
|||
-- Snow
|
||||
minetest.register_globalstep(function(dtime)
|
||||
if weather ~= "snow" then return end
|
||||
for _, player in ipairs(minetest.get_connected_players()) do
|
||||
local ppos = player:getpos()
|
||||
|
||||
-- Make sure player is not in a cave/house...
|
||||
if minetest.env:get_node_light(ppos, 0.5) ~= 15 then return end
|
||||
|
||||
local minp = addvectors(ppos, {x=-9, y=7, z=-9})
|
||||
local maxp = addvectors(ppos, {x= 9, y=7, z= 9})
|
||||
|
||||
local minp_deep = addvectors(ppos, {x=-10, y=3.2, z=-10})
|
||||
local maxp_deep = addvectors(ppos, {x= 10, y=2.6, z= 10})
|
||||
|
||||
local vel = {x=0, y= -0.5, z=0}
|
||||
local acc = {x=0, y= -0.5, z=0}
|
||||
|
||||
minetest.add_particlespawner(5, 0.5,
|
||||
minp, maxp,
|
||||
vel, vel,
|
||||
acc, acc,
|
||||
5, 5,
|
||||
25, 25,
|
||||
false, "weather_snow.png", player:get_player_name())
|
||||
|
||||
minetest.add_particlespawner(4, 0.5,
|
||||
minp_deep, maxp_deep,
|
||||
vel, vel,
|
||||
acc, acc,
|
||||
4, 4,
|
||||
25, 25,
|
||||
false, "weather_snow.png", player:get_player_name())
|
||||
end
|
||||
end)
|
||||
|
||||
local snow_box =
|
||||
{
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5}
|
||||
}
|
||||
|
||||
-- Snow cover
|
||||
minetest.register_node("weather:snow_cover", {
|
||||
tiles = {"weather_snow_cover.png"},
|
||||
drawtype = "nodebox",
|
||||
paramtype = "light",
|
||||
node_box = snow_box,
|
||||
selection_box = snow_box,
|
||||
groups = {not_in_creative_inventory = 1, crumbly = 3, attached_node = 1},
|
||||
drop = {}
|
||||
})
|
||||
|
||||
--[[ Enable this section if you have a very fast PC
|
||||
minetest.register_abm({
|
||||
nodenames = {"group:crumbly", "group:snappy", "group:cracky", "group:choppy"},
|
||||
neighbors = {"default:air"},
|
||||
interval = 10.0,
|
||||
chance = 80,
|
||||
action = function (pos, node, active_object_count, active_object_count_wider)
|
||||
if weather == "snow" then
|
||||
if minetest.registered_nodes[node.name].drawtype == "normal"
|
||||
or minetest.registered_nodes[node.name].drawtype == "allfaces_optional" then
|
||||
local np = addvectors(pos, {x=0, y=1, z=0})
|
||||
if minetest.env:get_node_light(np, 0.5) == 15 then
|
||||
minetest.env:add_node(np, {name="weather:snow_cover"})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
]]
|
BIN
weather/textures/weather_rain.png
Normal file
BIN
weather/textures/weather_rain.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
BIN
weather/textures/weather_snow.png
Normal file
BIN
weather/textures/weather_snow.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
BIN
weather/textures/weather_snow_cover.png
Normal file
BIN
weather/textures/weather_snow_cover.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 647 B |
Loading…
Reference in New Issue
Block a user