Files
2026-10-12 11:28:19 +02:00

51 lines
2.1 KiB
GDScript

extends Node
## Cycle de vie de l'application, navigation entre scenes et etat general du
## jeu. Porte le contexte transitoire necessaire entre deux changements de
## scene (ex. la mission choisie sur la carte), puisque Godot libere les
## noeuds de la scene precedente a chaque changement.
const SCENE_BOOT := "res://scenes/boot/boot.tscn"
const SCENE_PROFILE_SELECT := "res://scenes/profiles/profile_select.tscn"
const SCENE_PROFILE_CREATE := "res://scenes/profiles/profile_create.tscn"
const SCENE_WORLD_MAP := "res://scenes/world/world_map.tscn"
const SCENE_MISSION_INTRO := "res://scenes/world/mission_intro.tscn"
const SCENE_EXERCISE_HOST := "res://scenes/exercises/exercise_host.tscn"
const SCENE_REWARD := "res://scenes/ui/reward_screen.tscn"
const SCENE_COLLECTION := "res://scenes/ui/collection.tscn"
const SCENE_SETTINGS := "res://scenes/ui/settings.tscn"
const SCENE_ADULT_SPACE := "res://scenes/ui/adult_space.tscn"
## Mission choisie sur la carte, lue par mission_intro puis exercise_host et
## reward_screen. Remise a vide par reward_screen au retour sur la carte.
var pending_mission_id: String = ""
## Resultat de chaque exercice de la mission qui vient de se terminer
## (MissionScoring.OUTCOME_*), transmis par exercise_host a reward_screen.
var last_outcomes: Array[String] = []
## Scene a laquelle l'ecran de reglages rend la main (carte ou selection de
## profil, selon d'ou il a ete ouvert).
var settings_return_scene: String = SCENE_WORLD_MAP
## Dernier tableau consulte sur la carte : on y revient apres une mission.
var map_region_id: String = ""
## Appelee a la sortie du jeu ; remplacable dans les tests (qui ne doivent pas
## arreter l'arbre de scenes).
var quit_hook: Callable = Callable()
## Quitte le jeu apres avoir sauvegarde le profil courant.
func quit_game() -> void:
ProgressManager.save_now()
if quit_hook.is_valid():
quit_hook.call()
else:
get_tree().quit()
func goto(scene_path: String) -> void:
# Differe le changement de scene : l'appeler depuis le _ready() de la
# scene en cours d'ajout a l'arbre echoue sinon ("Parent node is busy").
get_tree().change_scene_to_file.call_deferred(scene_path)