extends Node @export var n_to_generate: int = 5 @export var n_per_row: int = 5 @export var n_mutation_per_plant: int @export var space_between_plants: float @export var randomize_pos: bool @export var random_pos_offset: float @export var start_state: PlantData.State = PlantData.State.MATURE @export var random_state := false @export var end_state: PlantData.State = PlantData.State.MATURE func _ready(): %ZoomLevel.value = %Camera2D.zoom.x %N.value = n_to_generate %NPerRow.value = n_per_row %NMutationsPerPlant.value = n_mutation_per_plant %RandomizePos.button_pressed = randomize_pos %RandomizeOffset.value = random_pos_offset generate_plants(); func _input(_event) -> void: var input_dir = Input.get_vector("move_left", "move_right", "move_up", "move_down") %Camera2D.position += 1 / %Camera2D.zoom.x * 10 * input_dir func generate_plants(): for child in %Plants.get_children(): child.free() for i in n_to_generate: print("Generate plant :") var plant_pos_x = (i % n_per_row) * space_between_plants @warning_ignore("integer_division") var plant_pos_y = (i / n_per_row) * space_between_plants var plant_position := Vector2(plant_pos_x, plant_pos_y) if randomize_pos: plant_position += randf_range(0, random_pos_offset) * Vector2.ONE.rotated(randf_range(0, 2 * PI)) var plant_data: PlantData = PlantData.new(plant_position) var plant_state := start_state if random_state: plant_state = randi_range(start_state, end_state) as PlantData.State if plant_state == PlantData.State.PLANTED: plant_data.day = 0 elif plant_state == PlantData.State.GROWING: plant_data.day = 1 elif plant_state == PlantData.State.MATURE: plant_data.day = plant_data.get_growing_time() elif plant_state == PlantData.State.DEAD: plant_data.day = plant_data.get_lifetime() for j in n_mutation_per_plant: plant_data.mutations.append(plant_data.archetype.available_mutations.pick_random()) var plant: Plant = Plant.new(plant_data) print(plant.data.plant_name) %Plants.add_child(plant) # plant.set_owner(self ) plant.global_position = plant_position func generate_seeds(): for child in %Plants.get_children(): child.free() for i in n_to_generate: print("Generate seed :") var seed_pos_x = (i % n_per_row) * space_between_plants @warning_ignore("integer_division") var seed_pos_y = (i / n_per_row) * space_between_plants var seed_position := Vector2(seed_pos_x, seed_pos_y) if randomize_pos: seed_position += randf_range(0, random_pos_offset) * Vector2.ONE.rotated(randf_range(0, 2 * PI)) var graine := Seed.generate_random() var seedItem := ItemObject.new(graine) %Plants.add_child(seedItem) seedItem.global_position = seed_position func _on_generate_plants_pressed() -> void: generate_plants() func _on_generate_seeds_pressed() -> void: generate_seeds() func _on_zoom_level_value_changed(value: float) -> void: %Camera2D.zoom = Vector2.ONE * value func _on_reset_zoom_pressed() -> void: %Camera2D.zoom = Vector2.ONE %ZoomLevel.value = 1 func _on_n_plants_value_changed(value: float) -> void: n_to_generate = int(value) func _on_n_plants_per_row_value_changed(value: float) -> void: n_per_row = int(value) func _on_n_mutations_per_plant_value_changed(value: float) -> void: n_mutation_per_plant = int(value) func _on_randomize_pos_toggled(toggled_on: bool) -> void: randomize_pos = toggled_on func _on_randomize_offset_value_changed(value: float) -> void: random_pos_offset = value func _on_start_age_value_changed(value: float) -> void: start_state = int(value) as PlantData.State func _on_random_age_toggled(toggled_on: bool) -> void: random_state = toggled_on func _on_end_age_value_changed(value: float) -> void: end_state = int(value) as PlantData.State