Files
seeding-planets/entities/plants/scripts/texture_builder/part_assembler.gd
2026-02-24 18:05:38 +01:00

114 lines
4.0 KiB
GDScript

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