diff --git a/ROADMAP.md b/ROADMAP.md index a612687..bef6808 100644 --- a/ROADMAP.md +++ b/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 diff --git a/ca_effects/particles.lua b/ca_effects/particles.lua index 6375cb8..f0e7898 100644 --- a/ca_effects/particles.lua +++ b/ca_effects/particles.lua @@ -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() }) diff --git a/ca_effects/skybox.lua b/ca_effects/skybox.lua index a2692d4..08e9e5c 100644 --- a/ca_effects/skybox.lua +++ b/ca_effects/skybox.lua @@ -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) diff --git a/ca_effects/sound.lua b/ca_effects/sound.lua index 9b37792..04a42c1 100644 --- a/ca_effects/sound.lua +++ b/ca_effects/sound.lua @@ -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) diff --git a/lib/api.lua b/lib/api.lua index 4a88e88..afc4b16 100644 --- a/lib/api.lua +++ b/lib/api.lua @@ -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 diff --git a/lib/commands.lua b/lib/commands.lua index 9a92d2b..c8f80ad 100644 --- a/lib/commands.lua +++ b/lib/commands.lua @@ -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 +}) \ No newline at end of file diff --git a/lib/influences.lua b/lib/influences.lua index cbe3f9b..f1f8634 100644 --- a/lib/influences.lua +++ b/lib/influences.lua @@ -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) \ No newline at end of file diff --git a/lib/trigger.lua b/lib/trigger.lua index 02afafd..3304bda 100644 --- a/lib/trigger.lua +++ b/lib/trigger.lua @@ -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 diff --git a/textures/climate_hud.png b/textures/climate_hud.png deleted file mode 100644 index c569792..0000000 Binary files a/textures/climate_hud.png and /dev/null differ