extends Resource class_name RunData enum State {STARTED, IN_PROGRESS, FINISHED} const RUN_POINT_POSITION_DERIVATION = 100 const DIFFICULTY_INCREASE_BY_LEVEL = 3 const RUN_POINTS_NEXT_NUMBER : int = 2 const RUN_POINT_MAX_LEVEL = 2 # TODO signal current_run_point_changed var run_seed = randi() @export var next_run_points : Array[RunPoint] = generate_next_run_points() @export var current_run_point : RunPoint = null : set(v): current_run_point = v current_run_point_changed.emit(v) @export var visited_run_points : Array[RunPoint] = [] #region ------------------ Generation ------------------ func generate_next_run_points(level = 0) -> Array[RunPoint]: next_run_points = [] for i in range(RUN_POINTS_NEXT_NUMBER): next_run_points.append( generate_next_run_point(level) ) return next_run_points func generate_next_run_point(level = 0) -> RunPoint: var region_parameter = RegionParameter.new() region_parameter.level = level region_parameter.region_flags = get_region_flags(region_parameter) return RunPoint.new( level, region_parameter ) #endregion func get_state() -> State: if not current_run_point: return State.STARTED elif current_run_point.level == RUN_POINT_MAX_LEVEL: return State.FINISHED else : return State.IN_PROGRESS func get_next_run_points() -> Array[RunPoint]: if current_run_point and current_run_point.level == RUN_POINT_MAX_LEVEL: return [] return next_run_points func choose_next_run_point(run_point : RunPoint) -> RunPoint: if current_run_point: visited_run_points.append(current_run_point) current_run_point = run_point GameInfo.game_data.start_region(run_point.region_parameter) next_run_points = generate_next_run_points(current_run_point.level + 1) return current_run_point func get_region_flags(region_parameter : RegionParameter) -> Array[String]: var flags : Array[String] = [] if region_parameter.level == RUN_POINT_MAX_LEVEL: flags.append("borea") return flags