]> git.lizzy.rs Git - crafter_client.git/commitdiff
Add in rain
authoroilboi <47129783+oilboi@users.noreply.github.com>
Thu, 9 Apr 2020 00:48:52 +0000 (20:48 -0400)
committeroilboi <47129783+oilboi@users.noreply.github.com>
Thu, 9 Apr 2020 00:48:52 +0000 (20:48 -0400)
README.md
init.lua

index 6b89eebbaa54c0e9fdcde7f621e0f87b3b2146df..074a73224c21edd405375ffe347288176390b299 100644 (file)
--- a/README.md
+++ b/README.md
@@ -19,3 +19,8 @@ load_mod_crafter_client = true
 to the mods.conf file
 
 The Crafter game has clientside mods enabled by default so no further steps are needed
+
+
+Current features:
+
+1.) Weather effects
index bb0c85bc788017da96df66f983721003c8df5960..461af9479e393ea09c17323d1a348aca130c3d5a 100644 (file)
--- a/init.lua
+++ b/init.lua
@@ -1,4 +1,3 @@
-print("weather client go")
 local weather = minetest.mod_channel_join("weather_nodes")
 local weather_type = minetest.mod_channel_join("weather_type")
 local server = minetest.mod_channel_join("server")
@@ -6,10 +5,11 @@ local server = minetest.mod_channel_join("server")
 local all_nodes = {}
 local do_effects = false
 local snow = false
+local rain = false
 local weather_update_timer = 0
 local id_table = {}
 
-local spawn_weather = function(player)
+local spawn_snow = function(player)
        local pos = player:get_pos()
        local radius = 10
        local particle_table = {}
@@ -67,14 +67,77 @@ local spawn_weather = function(player)
        end
 end
 
+local spawn_rain = function(player)
+       local pos = player:get_pos()
+       local radius = 10
+       local particle_table = {}
+       
+       local area = vector.new(10,10,10)
+       
+       local min = vector.subtract(pos, area)
+       local max = vector.add(pos, area)
+       
+       
+       local area_index = minetest.find_nodes_in_area_under_air(min, max, all_nodes)
+       
+       local spawn_table = {}
+       --find the highest y value
+       for _,index in pairs(area_index) do
+               if not spawn_table[index.x] then spawn_table[index.x] = {} end
+               if not spawn_table[index.x][index.z] then
+                       spawn_table[index.x][index.z] = index.y
+               elseif spawn_table[index.x][index.z] < index.y then
+                       spawn_table[index.x][index.z] = index.y
+               end
+       end
+       
+       for x,x_index in pairs(spawn_table) do
+               for z,y in pairs(x_index) do
+                       if minetest.get_node_or_nil(vector.new(x,y+1,z)) ~= nil then
+                               --print("got to this spointa")
+                               local pos = vector.new(x,y+1,z)
+                               local lightlevel = 14
+                               --local lightlevel = minetest.get_node_light(pos, 0.5)
+                               --print("but not here")
+                               if lightlevel >= 14 then
+                                       minetest.add_particlespawner({
+                                               amount = 1,
+                                               time = 0.5,
+                                               minpos = vector.new(x-0.5,y,z-0.5),
+                                               maxpos = vector.new(x+0.5,y+20,z+0.5),
+                                               minvel = {x=0, y=-9.81, z=0},
+                                               maxvel = {x=0, y=-9.81, z=0},
+                                               minacc = {x=0, y=0, z=0},
+                                               maxacc = {x=0, y=0, z=0},
+                                               minexptime = 1,
+                                               maxexptime = 2,
+                                               minsize = 1,
+                                               maxsize = 1,
+                                               collisiondetection = true,
+                                               collision_removal = true,
+                                               object_collision = false,
+                                               vertical = true,
+                                               texture = "raindrop.png",
+                                               playername = player:get_name(),
+                                       })
+                               end
+                       end
+               end
+       end
+end
+
 minetest.register_globalstep(function(dtime)
        if do_effects then
-               if snow then
+               if snow or rain then
                        weather_update_timer = weather_update_timer + dtime
                        if weather_update_timer >= 0.5 then
                                weather_update_timer = 0
                                local player = minetest.localplayer
-                               spawn_weather(minetest.localplayer)
+                               if snow == true then
+                                       spawn_snow(minetest.localplayer)
+                               elseif rain == true then
+                                       spawn_rain(minetest.localplayer)
+                               end
                        end
                end
        end
@@ -89,10 +152,13 @@ minetest.register_on_modchannel_message(function(channel_name, sender, message)
        end
        if channel_name == "weather_type" then
                if message == "1" then
-                       print("snowing")
+                       rain = false
                        snow = true
+               elseif message == "2" then
+                       rain = true
+                       snow = false
                else
-                       print("not snowing")
+                       rain = false
                        snow = false
                end
        end