balloon_bop/minigame_manager/on_time_tick.lua

79 lines
4.2 KiB
Lua

local rand = PcgRandom(os.time())
arena_lib.on_time_tick("balloon_bop", function(arena)
arena.score = arena.score+1
arena.current_round_time = arena.current_round_time - 1
if arena.current_round_time == 0 then
arena.current_round_time = arena.round_time
arena.num_balloons = arena.num_balloons + 1
arena_lib.HUD_send_msg_all("broadcast", arena, arena.num_balloons .. " balloons!", 1, nil, "0xB6D53C")
end
-- handle player "fall death"
for pl_name,stats in pairs(arena.players) do -- it is a good convention to use "pl_name" in for loops and "p_name" elsewhere
local player = minetest.get_player_by_name( pl_name )
if player then
local pos = player:get_pos()
if pos.y < arena.player_die_level then
player:set_pos(arena_lib.get_random_spawner(arena))
end
player:hud_change(balloon_bop.infohuds[pl_name],"text",arena.score)
end
end
--handle balloons falling out or touching smth
local bal_c = 0
for _,obj in pairs(minetest.get_objects_inside_radius(arena.balloon_spawner, arena.arena_radius)) do
if obj and not( obj:is_player()) and obj:get_luaentity().name == "balloon_bop:balloon" then
bal_c = bal_c + 1
if obj:get_luaentity()._touching_ground == true or obj:get_pos().y <= arena.player_die_level then
-- minetest.chat_send_all(arena.arena_lives)
minetest.sound_play("lose", {
gain = 1.0, -- default
loop = false,
pos = obj:get_pos()
})
obj:remove()
arena.score = arena.score - 20
if arena.score < 0 then arena.score = 0 end
arena.arena_lives = arena.arena_lives - 1
if arena.arena_lives == 0 then
-- arena_lib.load_celebration(mod, arena, winner_name)
for pl_name,stats in pairs(arena.players) do -- it is a good convention to use "pl_name" in for loops and "p_name" elsewhere
if balloon_bop.infohuds[pl_name] then
player = minetest.get_player_by_name(pl_name)
if player then
player:hud_remove(balloon_bop.infohuds[pl_name])
balloon_bop.infohuds[pl_name] = nil
end
end
minetest.chat_send_player(pl_name,"Game Over! Your score is ".. arena.score .."!")
end
for _,obj in pairs(minetest.get_objects_inside_radius(arena.balloon_spawner, arena.arena_radius)) do
if not( obj:is_player()) and obj:get_luaentity().name == "balloon_bop:balloon" then
obj:remove()
end
end
arena_lib.force_arena_ending('balloon_bop', arena,'Game')
return
end
end
end
end
if bal_c < arena.num_balloons then
balloon_bop.spawn(arena)
end
end)
arena_lib.on_quit("balloon_bop", function(arena, p_name, is_spectator)
player = minetest.get_player_by_name(p_name)
if player then
player:hud_remove(balloon_bop.infohuds[pl_name])
balloon_bop.infohuds[p_name] = nil
end
end)