]> git.lizzy.rs Git - crafter_client.git/commitdiff
Fix 2 generals problem with weather handling
authoroilboi <47129783+oilboi@users.noreply.github.com>
Fri, 17 Apr 2020 08:50:04 +0000 (04:50 -0400)
committeroilboi <47129783+oilboi@users.noreply.github.com>
Fri, 17 Apr 2020 08:50:04 +0000 (04:50 -0400)
init.lua
weather_handling.lua

index 8dd290306ac0bde5344fd58a03ae6e53bb7a240a..8823eea845069afc6e41415e30a9d1c25a62171f 100644 (file)
--- a/init.lua
+++ b/init.lua
@@ -1,14 +1,31 @@
---first we join the necessary channels so the mod can "listen" to what the server says
+--first we join the necessary channels so the mod can "listen"  to what the server says and "talk" to it
+weather_intake = minetest.mod_channel_join("weather_intake")
 weather = minetest.mod_channel_join("weather_nodes")
 weather_type = minetest.mod_channel_join("weather_type")
 running_send = minetest.mod_channel_join("running_send")
 player_movement_state = minetest.mod_channel_join("player.player_movement_state")
 
 
---we load everything seperately because it's easier to work on individual files than have everything jammed into one file
---not into seperate mods because that is unnecessary and cumbersome
-local path = minetest.get_modpath("crafter_client")
-dofile(path.."/player_input.lua")
-dofile(path.."/weather_handling.lua")
-dofile(path.."/environment_effects.lua")
+local function initialize_all()
+       --first we tell the server we're ready
+       weather_intake:send_all("READY")
+       weather_intake:leave()
+       weather_intake = nil --leave the channel
+       
+       --next we load everything seperately because it's easier to work on individual files than have everything jammed into one file
+       --not into seperate mods because that is unnecessary and cumbersome
+       local path = minetest.get_modpath("crafter_client")
+       dofile(path.."/player_input.lua")
+       dofile(path.."/weather_handling.lua")
+       dofile(path.."/environment_effects.lua")
+end
 
+--we must delay initialization until the player's camera exists in the world
+--since there does not seem to be any client_loaded function
+local initialize = false
+minetest.register_globalstep(function(dtime)
+       if not initialize and not vector.equals(minetest.camera:get_pos(),vector.new(0,0,0)) then
+               initialize = true
+               initialize_all()
+       end
+end)
index 1aca8e4fcca685870b792cf8338663f64f57e102..5f39c628df70fbefcae698e6055142c033258b43 100644 (file)
@@ -118,6 +118,7 @@ local spawn_rain = function(player)
        end
 end
 
+--client runs through spawning weather particles
 minetest.register_globalstep(function(dtime)
        if do_effects then
                if snow or rain then
@@ -138,10 +139,14 @@ end)
 
 
 minetest.register_on_modchannel_message(function(channel_name, sender, message)
+       --receive the initial packet which tells the client which nodes
+       --to spawn weather columns on
        if channel_name == "weather_nodes" then
                all_nodes = minetest.deserialize(message)
                do_effects = true
+               weather:leave() --leave the channel
        end
+       --receive the weather type
        if channel_name == "weather_type" then
                if message == "1" then
                        rain = false
@@ -154,6 +159,7 @@ minetest.register_on_modchannel_message(function(channel_name, sender, message)
                        snow = false
                end
        end
+       --rain sound effect
        if not rain_sound_handle and rain == true then
                rain_sound_handle = minetest.sound_play("rain", {loop=true,gain=0})
                minetest.sound_fade(rain_sound_handle, 0.5, 0.5)