* Ajout des achievement Steam * Ajout d'une annonce à la récupération d'un artefact et ajout de textes axplicatifs sur les annonces d'artefacts et de mutation * Fix du léger glitch des tooltips * Ajout de clarté sur la machine de respawn dans le vaisseau
97 lines
3.2 KiB
GDScript
97 lines
3.2 KiB
GDScript
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()
|
|
)
|
|
)
|