new mutations + plant part data structure simplified
This commit is contained in:
4
entities/plants/scripts/texture_builder/part_group.gd
Normal file
4
entities/plants/scripts/texture_builder/part_group.gd
Normal file
@@ -0,0 +1,4 @@
|
||||
extends Resource
|
||||
class_name PartGroup
|
||||
|
||||
@export var parts: Array[PlantPart]
|
||||
@@ -0,0 +1 @@
|
||||
uid://u2j7hn5her8i
|
||||
@@ -1,5 +0,0 @@
|
||||
extends Resource
|
||||
class_name PartMutationAssociation
|
||||
|
||||
@export var parts: Array[PlantPart]
|
||||
@export var part_amount: int = 1
|
||||
@@ -1 +0,0 @@
|
||||
uid://cfjd8jelpm8dt
|
||||
@@ -3,6 +3,7 @@ extends Sprite2D
|
||||
class_name PlantPartBuilder
|
||||
|
||||
@export var part_name: String
|
||||
@export var part_index: int
|
||||
|
||||
@export_tool_button("Load resource") var load_resource_button = load_resource
|
||||
|
||||
@@ -12,11 +13,15 @@ class_name PlantPartBuilder
|
||||
|
||||
@export_tool_button("Save as resource") var save_as_resource_button = save_as_resource
|
||||
|
||||
|
||||
func load_resource():
|
||||
var destination := "res://entities/plants/resources/plant_parts/" + part_name + ".tres"
|
||||
print("Loading: ", part_name, " at: ", destination)
|
||||
var plant_part: PlantPart = ResourceLoader.load(destination) as PlantPart
|
||||
print("Loading: ", part_name, " n°: ", part_index, " at: ", destination)
|
||||
var part_group: PartGroup = ResourceLoader.load(destination) as PartGroup
|
||||
if part_group.parts.size() <= part_index:
|
||||
printerr("No part at ", part_index)
|
||||
return
|
||||
|
||||
var plant_part := part_group.parts[part_index]
|
||||
if plant_part:
|
||||
texture = plant_part.texture
|
||||
type = plant_part.type
|
||||
@@ -34,7 +39,7 @@ func load_resource():
|
||||
new_child.position = plant_part.attaches[i].position
|
||||
new_child.attach_types = plant_part.attaches[i].attach_types
|
||||
attaches.add_child(new_child)
|
||||
new_child.set_owner(self )
|
||||
new_child.set_owner(self)
|
||||
elif i >= plant_part.attaches.size():
|
||||
attaches_children[i].free()
|
||||
else:
|
||||
@@ -42,16 +47,23 @@ func load_resource():
|
||||
|
||||
func save_as_resource():
|
||||
var destination := "res://entities/plants/resources/plant_parts/" + part_name + ".tres"
|
||||
print("Saving: ", part_name, " at: ", destination)
|
||||
print("Saving: ", part_name, " n°: ", part_index, " at: ", destination)
|
||||
var part_group: PartGroup = ResourceLoader.load(destination) as PartGroup
|
||||
if not part_group:
|
||||
part_group = PartGroup.new()
|
||||
if part_group.parts.size() <= part_index:
|
||||
part_group.parts.resize(part_index + 1)
|
||||
|
||||
var attaches_vec2: Array[PlantAttach]
|
||||
for attach in attaches.get_children():
|
||||
attaches_vec2.append(PlantAttachBuilder.to_plant_attach(attach))
|
||||
|
||||
var plant_part = PlantPart.new()
|
||||
plant_part.init(texture, type, PlantAttachBuilder.to_plant_attach(root), attaches_vec2)
|
||||
plant_part.resource_name = part_name
|
||||
var err := ResourceSaver.save(plant_part, destination, ResourceSaver.FLAG_REPLACE_SUBRESOURCE_PATHS)
|
||||
var plantPart := PlantPart.new()
|
||||
plantPart.init(texture, type, PlantAttachBuilder.to_plant_attach(root), attaches_vec2)
|
||||
plantPart.resource_name = part_name
|
||||
part_group.parts[part_index] = plantPart.duplicate_deep()
|
||||
var err := ResourceSaver.save(part_group, destination, ResourceSaver.FLAG_REPLACE_SUBRESOURCE_PATHS)
|
||||
if err != OK:
|
||||
printerr("Error saving resource: ", error_string(err))
|
||||
else:
|
||||
plant_part.take_over_path(destination)
|
||||
part_group.take_over_path(destination)
|
||||
|
||||
@@ -20,12 +20,11 @@ const PLACEHOLDER_GROWING_TEXTURE: Texture = preload("res://entities/plants/asse
|
||||
enum OriginType {BRANCH_ORIGIN, MUTATION_ORIGIN, BASE_LEAF_ORIGIN}
|
||||
|
||||
# @export var parts_archetype_associations: Dictionary[PlantArchetype, PartArchetypeAssociation] TODO:: have the archetypes
|
||||
@export var bases: Array[PlantPart]
|
||||
@export var baby_bases: Array[PlantPart]
|
||||
@export var branches: Array[PlantPart]
|
||||
@export var n_branches: int = 2
|
||||
@export var base_leaves: Array[PlantPart]
|
||||
@export var parts_mutation_associations: Dictionary[String, PartMutationAssociation] # Array[PlantPart]
|
||||
@export var all_bases: PartGroup
|
||||
@export var baby_bases_start_ind: int
|
||||
@export var branches: PartGroup
|
||||
@export var base_leaves: PartGroup
|
||||
@export var part_group: Dictionary[String, PartGroup]
|
||||
|
||||
@export var chance_to_have_part := 0.75;
|
||||
|
||||
@@ -45,6 +44,18 @@ var rng := RandomNumberGenerator.new()
|
||||
var image: Image = Image.create_empty(IMAGE_WIDTH, IMAGE_HEIGHT, false, Image.FORMAT_RGBA8)
|
||||
var image_center: Vector2i = Vector2(0.5, 1) * Vector2(image.get_size())
|
||||
|
||||
var bases: Array[PlantPart]
|
||||
var baby_bases: Array[PlantPart]
|
||||
|
||||
func _ready() -> void:
|
||||
bases.resize(baby_bases_start_ind)
|
||||
baby_bases.resize(all_bases.parts.size() - baby_bases_start_ind)
|
||||
for i in range(all_bases.parts.size()):
|
||||
if i < baby_bases_start_ind:
|
||||
bases[i] = all_bases.parts[i]
|
||||
else:
|
||||
baby_bases[i - baby_bases_start_ind] = all_bases.parts[i]
|
||||
|
||||
func random_ind(array: Array) -> int:
|
||||
return rng.randi_range(0, array.size() - 1)
|
||||
|
||||
@@ -126,13 +137,13 @@ func build_plant_texture(plant_data: PlantData) -> Texture:
|
||||
var weight_per_origin_type: Array[int] = origin_weights_base.values().duplicate()
|
||||
|
||||
var parts_to_place: Dictionary[OriginType, Array] # BRANCH_ORIGIN : Array[PlantPart], MUTATION_ORIGIN : Array[Array[PlantPart]], BASE_LEAF_ORIGIN : Array[PlantPart]
|
||||
parts_to_place[OriginType.BRANCH_ORIGIN] = branches.duplicate()
|
||||
parts_to_place[OriginType.BRANCH_ORIGIN] = branches.parts.duplicate()
|
||||
parts_to_place[OriginType.MUTATION_ORIGIN] = []
|
||||
parts_to_place[OriginType.BASE_LEAF_ORIGIN] = base_leaves.duplicate()
|
||||
parts_to_place[OriginType.BASE_LEAF_ORIGIN] = base_leaves.parts.duplicate()
|
||||
var mutation_weights: Array[int] = []
|
||||
for mutation in plant_data.mutations:
|
||||
if mutation.id in parts_mutation_associations:
|
||||
var mutation_parts := parts_mutation_associations[mutation.id].parts
|
||||
if mutation.id in part_group:
|
||||
var mutation_parts := part_group[mutation.id].parts.duplicate()
|
||||
parts_to_place[OriginType.MUTATION_ORIGIN].append(mutation_parts)
|
||||
var mutation_weight := get_mutation_weight(mutation.level)
|
||||
mutation_weights.append(mutation_weight)
|
||||
|
||||
Reference in New Issue
Block a user