Respawn hidden ship parrots on ship build+enter
This commit is contained in:
parent
685cf694d6
commit
e7334ffe78
@ -55,8 +55,7 @@ local reset_player = function(player, reset_type)
|
||||
lzr_levels.leave_level(true, false)
|
||||
elseif reset_type == "out_of_bounds_ship" then
|
||||
-- Intentionally no message
|
||||
local spawn = vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_RESPAWN_OFFSET)
|
||||
player:set_pos(spawn)
|
||||
lzr_menu.teleport_player_to_ship(player, "skulls")
|
||||
elseif reset_type == "out_of_bounds" then
|
||||
--~ Message when you move out of the level boundaries. You may be creative in the translation
|
||||
lzr_messages.show_message(player, S("Where yer thinks yar goin’, landlubber?"), 6.0, 0xFF0000)
|
||||
|
@ -1258,8 +1258,7 @@ function lzr_levels.game_completed()
|
||||
lzr_ambience.reduce_ambience(SOUND_TIME_LEVEL_SET_COMPLETE)
|
||||
minetest.sound_play({name = "lzr_levels_level_set_complete", gain = 1.0}, nil, true)
|
||||
lzr_levels.leave_level(nil, false)
|
||||
player:set_pos(vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_WINSPAWN_OFFSET))
|
||||
player:set_look_horizontal(math.pi)
|
||||
lzr_menu.teleport_player_to_ship(player, "victory")
|
||||
core_levels_completed = true
|
||||
minetest.log("action", "[lzr_levels] Game completed!")
|
||||
return true
|
||||
@ -1301,13 +1300,11 @@ function lzr_levels.go_to_menu(fallout)
|
||||
-- Select respawn position
|
||||
if fallout then
|
||||
-- Respawn pos when fallout was triggered (i.e. fell out of level or crushed)
|
||||
player:set_pos(vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_RESPAWN_OFFSET))
|
||||
lzr_menu.teleport_player_to_ship(player, "skulls")
|
||||
else
|
||||
-- Normal player spawn pos in ship
|
||||
player:set_pos(vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_SPAWN_OFFSET))
|
||||
lzr_menu.teleport_player_to_ship(player, "captain")
|
||||
end
|
||||
player:set_look_horizontal(0)
|
||||
player:set_look_vertical(0)
|
||||
lzr_gamestate.set_state(lzr_gamestate.MENU)
|
||||
end
|
||||
|
||||
|
@ -12,19 +12,25 @@ lzr_menu = {}
|
||||
lzr_menu.SHIP_SIZE = nil
|
||||
|
||||
local registered_on_ship_builts = {}
|
||||
-- Regiser callback function that is called when the ship has been built
|
||||
-- Register callback function that is called when the ship has been built
|
||||
-- and is ready for play. Will be called only once for the current game session.
|
||||
function lzr_menu.register_on_ship_built(func)
|
||||
table.insert(registered_on_ship_builts, func)
|
||||
end
|
||||
|
||||
local registered_on_ship_rebuilts = {}
|
||||
-- Regiser callback function that is called when the ship has been built
|
||||
-- OR rebuilt (after an update).
|
||||
-- Register callback function that is called when the ship has been built
|
||||
-- OR rebuilt (after an update).
|
||||
function lzr_menu.register_on_ship_rebuilt(func)
|
||||
table.insert(registered_on_ship_rebuilts, func)
|
||||
end
|
||||
|
||||
local registered_on_player_ship_enters = {}
|
||||
-- Register callback function that is called when the player enters the ship.
|
||||
function lzr_menu.register_on_player_ship_enter(func)
|
||||
table.insert(registered_on_player_ship_enters, func)
|
||||
end
|
||||
|
||||
local place_gold_stash = function(gold_blocks)
|
||||
if gold_blocks <= 0 then
|
||||
return
|
||||
@ -116,7 +122,12 @@ local emerge_callback = function(blockpos, action, calls_remaining, param)
|
||||
-- setting the player pos should guarantee the player
|
||||
-- stands on solid ground
|
||||
local player = minetest.get_player_by_name("singleplayer")
|
||||
player:set_pos(vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_SPAWN_OFFSET))
|
||||
lzr_menu.teleport_player_to_ship(player, "captain")
|
||||
|
||||
-- Call 'built' callbacks
|
||||
for f=1, #registered_on_ship_builts do
|
||||
registered_on_ship_builts[f]()
|
||||
end
|
||||
|
||||
-- Call 'built' callbacks
|
||||
for f=1, #registered_on_ship_builts do
|
||||
@ -141,10 +152,10 @@ end
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
emerge_ship(lzr_globals.MENU_SHIP_POS)
|
||||
-- NOTE: This set_pos happens BEFORE the ship was actually built, so the
|
||||
-- player may fall for a moment. This set_pos is thus not reliable
|
||||
-- NOTE: This teleport happens BEFORE the ship was actually built, so the
|
||||
-- player may fall for a moment. This is thus not reliable
|
||||
-- and is only made in prepatation for the future ship spawn.
|
||||
player:set_pos(vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_SPAWN_OFFSET))
|
||||
lzr_menu.teleport_player_to_ship(player, "captain")
|
||||
player:set_look_horizontal(0)
|
||||
player:set_look_vertical(0)
|
||||
local inv = player:get_inventory()
|
||||
@ -897,6 +908,28 @@ function lzr_menu.spawn_hidden_parrot(parrot_name)
|
||||
ent:_init(parrot_name)
|
||||
end
|
||||
|
||||
function lzr_menu.teleport_player_to_ship(player, location)
|
||||
if location == "captain" then
|
||||
player:set_pos(vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_SPAWN_OFFSET))
|
||||
player:set_look_horizontal(0)
|
||||
player:set_look_vertical(0)
|
||||
elseif location == "skulls" then
|
||||
player:set_pos(vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_RESPAWN_OFFSET))
|
||||
player:set_look_horizontal(0)
|
||||
player:set_look_vertical(0)
|
||||
elseif location == "victory" then
|
||||
player:set_pos(vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_WINSPAWN_OFFSET))
|
||||
player:set_look_horizontal(math.pi)
|
||||
player:set_look_vertical(0)
|
||||
else
|
||||
minetest.log("error", "[lzr_menu] Tried to teleport player to invalid ship location: "..tostring(location))
|
||||
return
|
||||
end
|
||||
for f=1, #registered_on_player_ship_enters do
|
||||
registered_on_player_ship_enters[f](player, location)
|
||||
end
|
||||
end
|
||||
|
||||
function lzr_menu.remove_hidden_parrots()
|
||||
if not lzr_menu.SHIP_SIZE then
|
||||
return
|
||||
|
@ -441,7 +441,12 @@ lzr_menu.register_on_ship_built(function()
|
||||
end)
|
||||
|
||||
lzr_menu.register_on_ship_rebuilt(function()
|
||||
spawn_menu_parrots()
|
||||
if lzr_parrot_npc.were_all_hidden_parrots_found() then
|
||||
lzr_menu.place_painting("parrot_finder")
|
||||
end
|
||||
end)
|
||||
|
||||
lzr_menu.register_on_player_ship_enter(function()
|
||||
spawn_menu_parrots()
|
||||
end)
|
||||
|
Loading…
x
Reference in New Issue
Block a user