Files
seeding-planets/entities/plants/scripts/texture_builder/part_assembler.gd
T
zacharie ffe6f50ba6 Dev 0.2.0
* Equilibrage de la difficulté (suite)
* Correction du timing des dialogues de Demeter
* Dev de la base astra (avec les logs)
* Fix de bug de duplication d'objets
* Fix de la mutation ancien
* Ajout d'une mention de la propagation des mutations dans le tuto
2026-07-25 20:09:54 +02:00

183 lines
6.6 KiB
GDScript

extends Node
@export var n_to_generate: int = 40
@export var n_per_row: int = 10
@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
@export var min_level := 1
@export var max_level := 1
@export var camera_speed := 1000.0
var test_progression_data: TestProgressionData
var input_dir := Vector2.ZERO
var checkBoxes: Dictionary[String, CheckBox]
func _ready():
%Speed.value = camera_speed
%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
%toAgeLabel.visible = random_state
%EndAge.visible = random_state
%MinLvl.value = min_level
%MaxLvl.value = max_level
test_progression_data = TestProgressionData.new()
GameInfo.game_data.progression_data = test_progression_data
for m in test_progression_data.get_all_mutations():
var lineContainer := HBoxContainer.new()
var checkBox := CheckBox.new()
checkBox.button_pressed = true
checkBox.toggled.connect(func(toggled_on): toggle_mutation_available(m, toggled_on))
checkBoxes[m.id] = checkBox
lineContainer.add_child(checkBox)
var label := Label.new()
label.text = m.id
lineContainer.add_child(label)
%PossibleMutationContainer.add_child(lineContainer)
generate_plants();
func _unhandled_key_input(_event) -> void:
input_dir = Input.get_vector("move_left", "move_right", "move_up", "move_down")
func _process(delta):
%Camera2D.position += 1 / %Camera2D.zoom.x * camera_speed * delta * input_dir
func generate_plants():
for child in %Plants.get_children():
child.free()
for i in n_to_generate:
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:
var picked_mutation: PlantMutation = GameInfo.game_data.progression_data.get_available_mutations().pick_random().duplicate()
picked_mutation.level = randi_range(min_level, max_level)
plant_data.mutations.append(picked_mutation)
var plant: Plant = Plant.new(plant_data)
%Plants.add_child(plant)
plant.global_position = plant_position
func generate_seeds():
for child in %Plants.get_children():
child.free()
for i in n_to_generate:
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
%toAgeLabel.visible = toggled_on
%EndAge.visible = toggled_on
func _on_end_age_value_changed(value: float) -> void:
end_state = int(value) as PlantData.State
func _on_speed_value_changed(value: float) -> void:
camera_speed = value
func _on_reset_speed_pressed() -> void:
camera_speed = 1000
func _on_min_lvl_value_changed(value: float) -> void:
min_level = int(value)
func _on_max_lvl_value_changed(value: float) -> void:
max_level = int(value)
func toggle_mutation_available(mutation: PlantMutation, toggled_on: bool):
if toggled_on:
test_progression_data.discover_mutation(mutation)
else:
test_progression_data.lock_mutation(mutation)
checkBoxes[mutation.id].set_pressed_no_signal(toggled_on)
func _on_toggle_on_all() -> void:
for m in test_progression_data.get_all_mutations():
test_progression_data.discover_mutation(m)
checkBoxes[m.id].set_pressed_no_signal(true)
func _on_toggle_off_all() -> void:
for m in test_progression_data.get_all_mutations():
test_progression_data.lock_mutation(m)
checkBoxes[m.id].set_pressed_no_signal(false)
func _on_toggle_all() -> void:
for m in test_progression_data.get_all_mutations():
if test_progression_data.mutations_available.has(m.id):
test_progression_data.lock_mutation(m)
checkBoxes[m.id].set_pressed_no_signal(false)
else:
test_progression_data.discover_mutation(m)
checkBoxes[m.id].set_pressed_no_signal(true)
func update_checkboxes() -> void:
for key in checkBoxes:
checkBoxes[key].set_pressed_no_signal(test_progression_data.mutations_available.has(key))