extends Node class_name RunDataPlantInfo const DEFAULT_GROWING_TIME = 2 const DEFAULT_LIFETIME = 6 const DEFAULT_BASE_SCORE = 1 const DEFAULT_SEED_NUMBER = 2 const DEFAULT_SEED_RANDOM_LOOSE = 1 const DEFAULT_PLANT_INFLUENCE_RADIUS = 100 const DEFAULT_MUTATION_PROBABILITY = 0.3 const DEFAULT_MUTATION_MAX_NUMBER = 2 var run_data : RunData func _init( _run_data : RunData ): run_data = _run_data var region_modifiers : Array[RegionModifier] func get_growing_time() -> int: var growing_time = DEFAULT_GROWING_TIME for rm in get_region_modifiers(): growing_time = rm.modify_plant_growing_time(growing_time) for a in run_data.artefacts: growing_time = a.modify_plant_growing_time(growing_time) return max(0, growing_time) func get_lifetime() -> int: var lifetime = DEFAULT_LIFETIME for rm in get_region_modifiers(): lifetime = rm.modify_plant_lifetime(lifetime) for a in run_data.artefacts: lifetime = a.modify_plant_lifetime(lifetime) return max(0, lifetime) func get_base_score() -> int: var base_score = DEFAULT_BASE_SCORE for rm in get_region_modifiers(): base_score = rm.modify_plant_base_score(base_score) for a in run_data.artefacts: base_score = a.modify_plant_base_score(base_score) return max(0, base_score) func get_seed_number() -> int: var seed_number = DEFAULT_SEED_NUMBER for rm in get_region_modifiers(): seed_number = rm.modify_plant_seed_number(seed_number) for a in run_data.artefacts: seed_number = a.modify_plant_seed_number(seed_number) return max(0, seed_number) func get_seed_random_loose() -> int: var seed_random_loose = DEFAULT_SEED_RANDOM_LOOSE for rm in get_region_modifiers(): seed_random_loose = rm.modify_plant_seed_random_loose(seed_random_loose) for a in run_data.artefacts: seed_random_loose = a.modify_plant_seed_random_loose(seed_random_loose) return min(max(0, seed_random_loose),get_seed_number()) func get_influence_radius() -> int: var influence_radius = DEFAULT_PLANT_INFLUENCE_RADIUS for rm in get_region_modifiers(): influence_radius = rm.modify_plant_influence_radius(influence_radius) for a in run_data.artefacts: influence_radius = a.modify_plant_influence_radius(influence_radius) return max(0, influence_radius) func get_mutation_probability() -> float: var mutation_probability = DEFAULT_MUTATION_PROBABILITY for rm in get_region_modifiers(): mutation_probability = rm.modify_mutation_probability(mutation_probability) for a in run_data.artefacts: mutation_probability = a.modify_mutation_probability(mutation_probability) return max(0., mutation_probability) func get_mutation_max_number() -> int: var mutation_max_number = DEFAULT_MUTATION_MAX_NUMBER for rm in get_region_modifiers(): mutation_max_number = rm.modify_mutation_max_number(mutation_max_number) for a in run_data.artefacts: mutation_max_number = a.modify_mutation_max_number(mutation_max_number) return max(0., mutation_max_number) func get_region_modifiers() -> Array[RegionModifier]: if run_data.current_run_point and run_data.current_run_point.region_parameter: return run_data.current_run_point.region_parameter.modifiers return []