extends Resource class_name GameData enum Mode {STORY, INFINITE} signal current_run_updated(r : RunData) signal current_region_data_updated(p : RegionData) func _init( _game_mode : Mode = Mode.STORY ): game_mode = _game_mode if game_mode == Mode.STORY: progression_data = StoryProgressionData.new() elif game_mode == Mode.INFINITE: progression_data = InfiniteProgressionData.new() @export var game_mode : Mode = GameData.Mode.STORY @export var player_data : PlayerData = PlayerData.new() @export var progression_data : ProgressionData @export var current_run : RunData : set(v): current_run = v current_run_updated.emit(v) @export var current_region_data : RegionData = null : set(v): current_region_data = v current_region_data_updated.emit(v) @export var last_game_scene : Scene = null @export var ship_in_space = false @export var incubator_used = [] @export var dead_orchid_position : Vector3 @export var dead_orchid_rotation : Vector3 @export var item_announced = [] @export var dialogs_done : Array[String] = [] #Chemin des dialogues terminés @export var tutorials_done : Array[String] = [] func start_run() -> RunData: player_data.clear_inventory() player_data.update_with_artefacts([]) current_run = RunData.new() current_run.story_step = progression_data.get_story_step().duplicate_deep() current_run.generate_next_run_points() current_run.current_run_point_changed.connect( func(rp : RunPoint): start_region(rp.region_parameter) ) ship_in_space = false return current_run func reset_player(): player_data = PlayerData.new() func reset_all(): start_run() reset_player() func start_region(region_param : RegionParameter): current_region_data = RegionData.new(region_param) func give_up(): progression_data.finish_run(current_run) current_region_data = null current_run = null start_run() SceneManager.change_to_scene(progression_data.get_story_step().get_respawn_scene()) func finish_story_step(): progression_data.finish_run(current_run) progression_data.next_story_step() current_region_data = null start_run()