mirror of
https://github.com/t-affeldt/climate_api.git
synced 2024-12-22 08:50:37 +01:00
Enable more options for particles, fix skybox reset, add new debug command, fix daylight influence
This commit is contained in:
parent
d1bdf92937
commit
c9d0cfca21
17
ROADMAP.md
17
ROADMAP.md
@ -1,24 +1,25 @@
|
||||
# TODO
|
||||
|
||||
## Required for MVP
|
||||
- Find good values for weather conditions
|
||||
- Make sure all weather presets are working
|
||||
## Required for Beta
|
||||
- Write helpful README
|
||||
- Refactor skybox effect and implement ranking system
|
||||
- Rework Moon Phases mod to be compatible and to include varying sky brightness
|
||||
|
||||
## Planned for first release
|
||||
- Write helpful README
|
||||
- Set effects on player join
|
||||
- Improve value structures of particle and skybox effects
|
||||
- Improve value structures of particle effects
|
||||
- Make sounds adjust to changes by weather presets
|
||||
- Find good values for weather conditions
|
||||
- Write documentation on how to add weathers and effects
|
||||
- Ability to register global influences that are the same for any position
|
||||
|
||||
## Nice to have
|
||||
- Write documentation on how to add weathers and effects
|
||||
- Assign meta data (like "downfall", "wind", etc.) to weather presets
|
||||
- Fog effects
|
||||
- Optimize performance by replacing some particles with animated texture planes
|
||||
- Make switches between effects more smooth
|
||||
- Adjust size of particle boxes based on player speed
|
||||
- Create conditions for time of day, annual progression, biome filters
|
||||
- Generate wind based on speed and yaw instead of x and z values
|
||||
- A flag indicating wind direction
|
||||
|
||||
## Future Plans & Ideas
|
||||
- Complete season system
|
||||
|
@ -21,7 +21,10 @@ local function spawn_particles(player, particles)
|
||||
y = -particles.falling_speed,
|
||||
z = wind.z
|
||||
})
|
||||
local acc = vector.new({x=0, y=0, z=0})
|
||||
|
||||
if particles.acceleration == nil then
|
||||
particles.acceleration = vector.new({x=0, y=0, z=0})
|
||||
end
|
||||
|
||||
local wind_pos = vector.multiply(
|
||||
vector.normalize(vel),
|
||||
@ -31,25 +34,35 @@ local function spawn_particles(player, particles)
|
||||
local minp = vector.add(vector.add(ppos, particles.min_pos), wind_pos)
|
||||
local maxp = vector.add(vector.add(ppos, particles.max_pos), wind_pos)
|
||||
|
||||
local exp = particles.exptime
|
||||
local vertical = math.abs(vector.normalize(vel).y) >= 0.6
|
||||
if particles.time == nil then
|
||||
particles.time = 0.5
|
||||
end
|
||||
|
||||
if particles.vertical == nil then
|
||||
particles.vertical = math.abs(vector.normalize(vel).y) >= 0.6
|
||||
end
|
||||
|
||||
if particles.size ~= nil then
|
||||
particles.min_size = particles.size
|
||||
particles.max_size = particles.size
|
||||
end
|
||||
|
||||
minetest.add_particlespawner({
|
||||
amount = amount,
|
||||
time = 0.5,
|
||||
time = particles.time,
|
||||
minpos = minp,
|
||||
maxpos = maxp,
|
||||
minvel = vel,
|
||||
maxvel = vel,
|
||||
minacc = acc,
|
||||
maxacc = acc,
|
||||
minexptime = exp,
|
||||
maxexptime = exp,
|
||||
minsize = particles.size,
|
||||
maxsize = particles.size,
|
||||
minacc = particles.acceleration,
|
||||
maxacc = particles.acceleration,
|
||||
minexptime = particles.exptime,
|
||||
maxexptime = particles.exptime,
|
||||
minsize = particles.min_size,
|
||||
maxsize = particles.max_size,
|
||||
collisiondetection = true,
|
||||
collision_removal = true,
|
||||
vertical = vertical,
|
||||
vertical = particles.vertical,
|
||||
texture = texture,
|
||||
player = player:get_player_name()
|
||||
})
|
||||
|
@ -15,7 +15,11 @@ end
|
||||
|
||||
local function remove_skybox(player)
|
||||
if not player.get_stars then return end
|
||||
player:set_sky({ type = "regular", clouds = true })
|
||||
player:set_sky(sky_defaults.sky_data)
|
||||
player:set_clouds(sky_defaults.cloud_data)
|
||||
player:set_moon(sky_defaults.moon_data)
|
||||
player:set_sun(sky_defaults.sun_data)
|
||||
player:set_stars(sky_defaults.star_data)
|
||||
end
|
||||
|
||||
local function handle_effect(player_data)
|
||||
|
@ -41,7 +41,6 @@ local function handle_effect(player_data, prev_data)
|
||||
end
|
||||
|
||||
local function stop_effect(prev_data)
|
||||
minetest.log(dump2(prev_data, "stop_effect"))
|
||||
for playername, data in pairs(prev_data) do
|
||||
for weather, value in pairs(data) do
|
||||
stop_sound(playername, value)
|
||||
|
@ -17,7 +17,7 @@ end
|
||||
function api.register_effect(name, handler, htype)
|
||||
-- check for valid handler types
|
||||
if htype ~= "start" and htype ~= "tick" and htype ~= "stop" then
|
||||
minetest.log("warning", "[Climate API] Invalid effect handler type: " .. htype)
|
||||
minetest.log("warning", "[Climate API] Effect " .. dump(name) .. " uses invalid callback type: " .. dump(htype))
|
||||
return
|
||||
end
|
||||
-- create effect handler registry if not existent yet
|
||||
|
@ -156,3 +156,15 @@ minetest.register_chatcommand("weather_status", {
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_chatcommand("weather_influences", {
|
||||
description = "Prints which weather influences cause your current weather",
|
||||
func = function(playername)
|
||||
minetest.chat_send_player(playername, "Current influences rules:\n================")
|
||||
local player = minetest.get_player_by_name(playername)
|
||||
local influences = climate_mod.trigger.get_player_environment(player)
|
||||
for influence, value in pairs(influences) do
|
||||
minetest.chat_send_player(playername, dump2(value, influence))
|
||||
end
|
||||
end
|
||||
})
|
@ -36,13 +36,19 @@ climate_api.register_influence("height", function(pos)
|
||||
end)
|
||||
|
||||
climate_api.register_influence("light", function(pos)
|
||||
pos = vector.add(pos, {x = 0, y = 1, z = 0})
|
||||
return minetest.env:get_node_light(pos)
|
||||
end)
|
||||
|
||||
climate_api.register_influence("daylight", function(pos)
|
||||
pos = vector.add(pos, {x = 0, y = 1, z = 0})
|
||||
return minetest.env:get_node_light(pos, 0.5)
|
||||
end)
|
||||
|
||||
climate_api.register_influence("time", function(_)
|
||||
return minetest.get_timeofday()
|
||||
end)
|
||||
|
||||
climate_api.register_influence("day_count", function(_)
|
||||
return minetest.get_day_count()
|
||||
end)
|
@ -155,7 +155,6 @@ function trigger.call_handlers(name, effect, prev_effect)
|
||||
|
||||
-- remaining table lists ending effects
|
||||
if has_stops then
|
||||
minetest.log(dump2(name, "AAAAAAAAAAA"))
|
||||
for _, handler in ipairs(climate_mod.effects[name]["stop"]) do
|
||||
handler(stops)
|
||||
end
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 2.2 MiB |
Loading…
Reference in New Issue
Block a user