extends Scene class_name RelayBaseScene @export var base_name : String @export var base_number : String @export var is_spawning : bool const DEAD_ORCHID_SCENE = preload("res://entities/player_3d/dead_orchid.tscn") func _init( _base_name : String = "", _base_number : String = "", _is_spawning : bool = false, ): base_name = _base_name base_number = _base_number is_spawning = _is_spawning func get_scene_path() -> String: return "res://stages/3d_scenes/relay_base/relay_base.tscn" func get_scene_title() -> String: return tr("RELAY_BASE_X") % tr(base_name) func get_scene_icon() -> Texture: return preload("res://common/icons/route.svg") func is_mouse_captured() -> bool: return true func is_needed_to_be_announced() -> bool: return true func _on_generated(generated_scene : Node): var relay_base := generated_scene as RelayBase relay_base.base_name = base_name relay_base.base_number = base_number if is_spawning: AudioManager.play_sfx("Respawn") spawn_player(relay_base) spawn_dead_orchid(relay_base) relay_base.exit_scene = CockpitScene.new() else: # relay_base.exit_scene = RegionScene.new(GameInfo.game_data.current_region_data) handle_orchid_save(relay_base) func spawn_player(relay_base : RelayBase): var incubators := relay_base.get_incubators() var possible_incubators : Array[Incubator] = [] var choosen_incubator : Incubator = null for i in range(len(incubators)): var incubator = incubators[i] if i in GameInfo.game_data.incubator_used: incubator.used = true else: possible_incubators.append(incubator) if len(possible_incubators): choosen_incubator = possible_incubators.pick_random() GameInfo.game_data.incubator_used.append( incubators.find(choosen_incubator) ) else: choosen_incubator = incubators.pick_random() choosen_incubator.used = true relay_base.player.global_position = choosen_incubator.global_position + Vector3.UP relay_base.player.rotation.y = choosen_incubator.rotation.y if base_name == "MERCURY": SteamConnection.unlock_achievement(SteamConnection.ACH_MERCURY_BASE) elif base_name == "VENUS": SteamConnection.unlock_achievement(SteamConnection.ACH_REACH_VENUS_BASE) func spawn_dead_orchid(relay_base : RelayBase): var dead_orchid := DEAD_ORCHID_SCENE.instantiate() as Node3D relay_base.add_child(dead_orchid) if GameInfo.game_data.dead_orchid_position == Vector3.ZERO: dead_orchid.global_position = relay_base.orchid_saver.global_position + Vector3.UP * 0.5 dead_orchid.rotation.y = -90 else: dead_orchid.position = GameInfo.game_data.dead_orchid_position dead_orchid.rotation = GameInfo.game_data.dead_orchid_rotation relay_base.orchid_saver.active = false relay_base.dead_orchid = dead_orchid func handle_orchid_save(relay_base : RelayBase): relay_base.orchid_saved.connect( func (): GameInfo.game_data.finish_story_step() var new_story_step = GameInfo.game_data.progression_data.get_story_step() SceneManager.change_to_scene( new_story_step.get_respawn_scene() ) )