2023-04-30 23:18:53 +02:00
|
|
|
-- Tree Growth
|
|
|
|
-- TODO: Use better spawning behavior and wood api when wood api is finished.
|
|
|
|
function mcl_cherry_blossom.generate_cherry_tree(pos)
|
|
|
|
local pr = PseudoRandom(pos.x+pos.y+pos.z)
|
|
|
|
local r = pr:next(1,3)
|
|
|
|
local modpath = minetest.get_modpath("mcl_cherry_blossom")
|
|
|
|
local path = modpath.."/schematics/mcl_cherry_blossom_tree_"..tostring(r)..".mts"
|
|
|
|
if mcl_core.check_growth_width(pos,7,8) then
|
|
|
|
minetest.set_node(pos, {name = "air"})
|
|
|
|
if r == 1 then
|
2023-06-17 18:01:45 +02:00
|
|
|
minetest.place_schematic(vector.offset(pos, -2, 0, -2), path, "random", nil, false)
|
2023-04-30 23:18:53 +02:00
|
|
|
elseif r == 2 then
|
2023-06-17 18:01:45 +02:00
|
|
|
minetest.place_schematic(vector.offset(pos, -2, 0, -2), path, nil, nil, false)
|
2023-04-30 23:18:53 +02:00
|
|
|
elseif r == 3 then
|
2023-06-17 18:01:45 +02:00
|
|
|
minetest.place_schematic(vector.offset(pos, -3, 0, -3), path, nil, nil, false)
|
2023-04-30 23:18:53 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
minetest.register_abm({
|
|
|
|
label = "Cherry Tree Growth",
|
|
|
|
nodenames = "mcl_cherry_blossom:cherrysapling",
|
|
|
|
interval = 30,
|
|
|
|
chance = 5,
|
|
|
|
action = function(pos,node)
|
|
|
|
mcl_cherry_blossom.generate_cherry_tree(pos)
|
|
|
|
end,
|
|
|
|
})
|
2023-05-01 02:58:10 +02:00
|
|
|
|
|
|
|
local cherry_particle = {
|
2023-06-17 18:01:45 +02:00
|
|
|
velocity = vector.zero(),
|
|
|
|
acceleration = vector.new(0,-1,0),
|
2023-05-01 02:58:10 +02:00
|
|
|
size = math.random(1.3,2.5),
|
2024-05-22 07:18:27 +02:00
|
|
|
texture = "mcl_cherry_blossom_particle_" .. math.random(1, 12) .. ".png",
|
|
|
|
animation = {
|
|
|
|
type = "vertical_frames",
|
|
|
|
aspect_w = 3,
|
|
|
|
aspect_h = 3,
|
|
|
|
length = 0.8,
|
|
|
|
},
|
2023-05-01 02:58:10 +02:00
|
|
|
collision_removal = false,
|
2023-06-17 18:01:45 +02:00
|
|
|
collisiondetection = false,
|
2023-05-01 02:58:10 +02:00
|
|
|
}
|
|
|
|
|
2024-05-22 07:18:27 +02:00
|
|
|
local wind_direction -- vector
|
|
|
|
local time_changed -- 0 - afternoon; 1 - evening; 2 - morning
|
|
|
|
local function change_wind_direction()
|
|
|
|
local east_west = math.random(-0.5,0.5)
|
|
|
|
local north_south = math.random(-0.5,0.5)
|
|
|
|
wind_direction = vector.new(east_west, 0, north_south)
|
|
|
|
end
|
|
|
|
change_wind_direction()
|
2023-05-01 02:58:10 +02:00
|
|
|
|
|
|
|
minetest.register_abm({
|
|
|
|
label = "Cherry Blossom Particles",
|
|
|
|
nodenames = {"mcl_cherry_blossom:cherryleaves"},
|
|
|
|
interval = 5,
|
|
|
|
chance = 10,
|
|
|
|
action = function(pos, node)
|
|
|
|
minetest.after(math.random(0.1,1.5),function()
|
|
|
|
local pt = table.copy(cherry_particle)
|
|
|
|
pt.pos = vector.offset(pos,math.random(-0.5,0.5),-0.51,math.random(-0.5,0.5))
|
2023-06-17 18:01:45 +02:00
|
|
|
pt.expirationtime = math.random(1.2,4.5)
|
2024-05-22 07:18:27 +02:00
|
|
|
pt.texture = "mcl_cherry_blossom_particle_" .. math.random(1, 12) .. ".png"
|
|
|
|
local time = minetest.get_timeofday()
|
|
|
|
if time_changed ~= 0 and time > 0.6 and time < 0.605 then
|
|
|
|
time_changed = 0
|
|
|
|
change_wind_direction()
|
|
|
|
elseif (time_changed ~= 1 and time > 0.8 and time < 0.805) then
|
|
|
|
time_changed = 1
|
|
|
|
change_wind_direction()
|
|
|
|
elseif (time_changed ~= 2 and time > 0.3 and time < 0.305) then
|
|
|
|
time_changed = 2
|
|
|
|
change_wind_direction()
|
|
|
|
end
|
|
|
|
pt.acceleration = pt.acceleration + wind_direction
|
|
|
|
|
2023-05-01 02:58:10 +02:00
|
|
|
minetest.add_particle(pt)
|
|
|
|
end)
|
|
|
|
end
|
|
|
|
})
|