ajout de la porte et équilibrage des mutations

This commit is contained in:
2026-03-06 18:15:10 +01:00
parent 263f6c42a7
commit 2cd16acd6a
92 changed files with 1420 additions and 582 deletions

View File

@@ -34,6 +34,14 @@ func _ready():
influence_zone = generate_influence_zone()
plant_sprite.setup_plant_sprite(data)
if region:
region.data.updated.connect(
func (_d : RegionData):
await get_tree().create_timer(0.05).timeout
update_nearby_plant()
)
await get_tree().create_timer(0.05).timeout
update_nearby_plant()
func pointer_text() -> String:
return data.plant_name
@@ -133,13 +141,21 @@ func disappear():
data.disappear()
queue_free()
func update_nearby_plant():
data.nearby_plants = []
for area in influence_zone.get_overlapping_areas():
if area is Plant and area != self:
data.nearby_plants.append(area.data)
data.nearby_plant_updated.emit()
func save() -> EntityData:
return data
func card_info() -> CardInfo:
var info = CardInfo.new(
data.plant_name,
data.archetype.archetype_name
tr("MATURE") if data.is_mature() else tr("GROWING")# data.archetype.archetype_name
)
info.important_stat_icon = PLANT_POINT_ICON
@@ -176,4 +192,4 @@ func get_card_up_padding() -> float:
return 75
PlantData.State.PLANTED:
return 50
return Pointer.CARD_UP_PADDING
return Pointer.CARD_UP_PADDING

View File

@@ -5,7 +5,7 @@ class_name PlantArchetype
@export var plant_area_radius = 20
@export var plant_influence_radius = 100
@export var growing_time = 2
@export var lifetime = 8
@export var lifetime = 6
@export var base_score = 1
@export var seed_number = 2
@export var seed_random_loose = 1

View File

@@ -3,6 +3,7 @@ class_name PlantData
signal updated(p: PlantData)
signal disappeared(p: PlantData)
signal nearby_plant_updated()
enum State {PLANTED, GROWING, MATURE, DEAD}
@@ -20,6 +21,8 @@ enum State {PLANTED, GROWING, MATURE, DEAD}
# var texture_builder: TextureBuilder = preload("res://entities/plants/scripts/texture_builder/texture_builder.tres")
var nearby_plants : Array[PlantData]
func _init(
_position: Vector2 = Vector2.ZERO,
_archetype: PlantArchetype = PlantArchetype.get_random(),
@@ -57,7 +60,10 @@ func get_lifetime() -> int:
for m in mutations:
lifetime = m.mutate_lifetime(self , lifetime)
for pd in nearby_plants:
lifetime += pd.get_lifetime_buff()
return lifetime
func get_growing_time() -> int:
@@ -84,16 +90,22 @@ func get_state() -> State:
return State.DEAD
elif day == 0:
return State.PLANTED
elif day < archetype.growing_time:
elif day < get_growing_time():
return State.GROWING
return State.MATURE
func is_mature() -> bool:
return get_state() == State.MATURE
func get_seed_number(state = get_state()):
var seed_number = archetype.seed_number if (state == State.MATURE or state == State.DEAD) else 0
for m in mutations:
seed_number = m.mutate_seed_number(self , seed_number)
for pd in nearby_plants:
seed_number += pd.get_seed_buff()
return seed_number
func get_seed_random_loose():
@@ -109,5 +121,21 @@ func get_random_seed_income():
0
)
func get_lifetime_buff() -> int:
var buff = 0
for m in mutations:
buff += m.mutate_lifetime_buff(self)
return buff
func get_seed_buff() -> int:
var buff = 0
for m in mutations:
buff += m.mutate_seed_buff(self)
return buff
func disappear():
disappeared.emit(self )

View File

@@ -42,12 +42,18 @@ func mutate_lifetime(_plant_data: PlantData, lifetime: int) -> int:
func mutate_growing_time(_plant_data: PlantData, growing_time: int) -> int:
return growing_time
func mutate_seed_number(_plant_data: PlantData, seed_number: int):
func mutate_seed_number(_plant_data: PlantData, seed_number: int) -> int:
return seed_number
func mutate_seed_random_loose(_plant_data: PlantData, seed_random_loose):
func mutate_seed_random_loose(_plant_data: PlantData, seed_random_loose) -> int:
return seed_random_loose
func mutate_lifetime_buff(_plant_data: PlantData) -> int:
return 0
func mutate_seed_buff(_plant_data: PlantData) -> int:
return 0
func _start_planted_effect(_plant: Plant):
pass

View File

@@ -1,14 +1,11 @@
extends PlantMutation
class_name AncientMutation
const DEFAULT_DAY_FACTOR = 3
const DEFAULT_DAY_FACTOR = 4
func get_icon() -> Texture:
return preload("res://common/icons/wood.svg")
func get_base_rarity() -> int:
return 0
func get_mutation_id() -> String:
return "ANCIENT"
@@ -16,10 +13,18 @@ func get_mutation_name() -> String:
return tr("ANCIENT")
func get_mutation_description() -> String:
return tr("ANCIENT_EFFECT_TEXT_LEVEL_%d") % get_day_factor()
return tr("ANCIENT_EFFECT_TEXT_LEVEL").format(
{
"score_increase": get_score_increase(),
"day_factor": get_day_factor()
}
)
func get_day_factor():
return max(1, DEFAULT_DAY_FACTOR - level + 1)
return max(1, DEFAULT_DAY_FACTOR - level)
func get_score_increase():
return max(1, level - DEFAULT_DAY_FACTOR)
func mutate_score(data : PlantData, score) -> int:
if data.get_state() != PlantData.State.MATURE:

View File

@@ -2,10 +2,7 @@ extends PlantMutation
class_name EphemeralMutation
func get_icon() -> Texture:
return preload("res://common/icons/chevrons-up.svg")
func get_base_rarity() -> int:
return 0
return preload("res://common/icons/butterfly.svg")
func get_mutation_id() -> String:
return "EPHEMERAL"
@@ -17,7 +14,7 @@ func get_mutation_description() -> String:
return tr("EPHEMERAL_EFFECT_TEXT_LEVEL").format({"seed_number": level, "lifetime_change": get_lifetime_change()})
func mutate_lifetime(_plant_data: PlantData, lifetime: int) -> int:
return lifetime - get_lifetime_change()
return lifetime + get_lifetime_change()
func mutate_seed_number(_plant_data: PlantData, seed_number: int):
return seed_number + level
@@ -26,4 +23,4 @@ func get_seed_increase() -> int:
return floori((level + 1.0) / 2)
func get_lifetime_change() -> int:
return maxi(0, 6 - get_seed_increase())
return -2

View File

@@ -2,10 +2,7 @@ extends PlantMutation
class_name FertileMutation
func get_icon() -> Texture:
return preload("res://common/icons/chevrons-up.svg")
func get_base_rarity() -> int:
return 0
return preload("res://common/icons/seedling.svg")
func get_mutation_id() -> String:
return "FERTILE"
@@ -16,6 +13,5 @@ func get_mutation_name() -> String:
func get_mutation_description() -> String:
return tr("FERTILE_EFFECT_TEXT_LEVEL_%d") % level
func mutate_lifetime(_plant_data : PlantData, lifetime : int) -> int:
print("TODO:: Implemnt FERTILE lifetime based on plants around")
return lifetime + level
func mutate_seed_buff(_plant_data: PlantData) -> int:
return level

View File

@@ -2,10 +2,7 @@ extends PlantMutation
class_name PrecociousMutation
func get_icon() -> Texture:
return preload("res://common/icons/hourglass-empty.svg")
func get_base_rarity() -> int:
return 0
return preload("res://common/icons/rocket.svg")
func get_mutation_id() -> String:
return "PRECOCIOUS"

View File

@@ -2,10 +2,7 @@ extends PlantMutation
class_name PurificationMutation
func get_icon() -> Texture:
return preload("res://common/icons/chevrons-up.svg")
func get_base_rarity() -> int:
return 0
return preload("res://common/icons/droplet.svg")
func get_mutation_id() -> String:
return "PURIFICATION"
@@ -16,9 +13,12 @@ func get_mutation_name() -> String:
func get_mutation_description() -> String:
return tr("PURIFICATION_EFFECT_TEXT_LEVEL_%d") % get_purification_radius()
func _start_maturation_effect(_plant : Plant):
print("Implement purification maturation effect")
pass
func _start_maturation_effect(plant : Plant):
plant.region.decontaminate(Math.get_tiles_in_circle(
plant.global_position,
get_purification_radius() * (Region.TILE_SIZE + Region.TILE_SIZE/2.)
))
func get_purification_radius() -> int:
return level

View File

@@ -2,10 +2,7 @@ extends PlantMutation
class_name QuickMutation
func get_icon() -> Texture:
return preload("res://common/icons/chevrons-up.svg")
func get_base_rarity() -> int:
return 0
return preload("res://common/icons/hourglass-empty.svg")
func get_mutation_id() -> String:
return "QUICK"
@@ -16,14 +13,17 @@ func get_mutation_name() -> String:
func get_mutation_description() -> String:
return tr("QUICK_EFFECT_TEXT_LEVEL").format({"score_increase": get_score_increase(), "lifetime_decrease": get_lifetime_decrease()})
func mutate_score(_plant_data: PlantData, score: int) -> int:
func mutate_score(plant_data: PlantData, score: int) -> int:
if not plant_data.is_mature():
return score
return score + level
func mutate_lifetime(_plant_data: PlantData, lifetime: int) -> int:
return max(lifetime - level, 1)
return max(1, lifetime-get_lifetime_decrease())
func get_score_increase() -> int:
return floori((level + 1.0) / 2)
return level * 2
func get_lifetime_decrease() -> int:
return maxi(0, 6 - get_score_increase())
return 3

View File

@@ -1,11 +1,10 @@
extends PlantMutation
class_name SocialMutation
func get_icon() -> Texture:
return preload("res://common/icons/chevrons-up.svg")
const DEFAULT_PLANT_BY_POINT = 4
func get_base_rarity() -> int:
return 0
func get_icon() -> Texture:
return preload("res://common/icons/users-group.svg")
func get_mutation_id() -> String:
return "SOCIABLE"
@@ -14,11 +13,21 @@ func get_mutation_name() -> String:
return tr("SOCIABLE")
func get_mutation_description() -> String:
return tr("SOCIABLE_EFFECT_TEXT_LEVEL").format({"near_amount": get_near_plants_around()})
return tr("SOCIABLE_EFFECT_TEXT_LEVEL").format(
{
"near_amount": get_near_plants_around(),
"score_increase": get_score_increase()
}
)
func mutate_score(_plant_data: PlantData, score: int) -> int:
printerr("TODO:: implement SOCIABLE score based on plants around")
return score + level
func mutate_score(plant_data: PlantData, score: int) -> int:
if plant_data.get_state() != PlantData.State.MATURE:
return score
return score + get_score_increase() * floori(len(plant_data.nearby_plants)/get_near_plants_around())
func get_near_plants_around():
return 5 - level
return max(DEFAULT_PLANT_BY_POINT - level,1)
func get_score_increase():
return max(level - DEFAULT_PLANT_BY_POINT,1)

View File

@@ -2,10 +2,7 @@ extends PlantMutation
class_name ToughMutation
func get_icon() -> Texture:
return preload("res://common/icons/chevrons-up.svg")
func get_base_rarity() -> int:
return 0
return preload("res://common/icons/shield.svg")
func get_mutation_id() -> String:
return "TOUGH"
@@ -20,7 +17,7 @@ func mutate_score_multiplier(_plant_data: PlantData, multiplier: int) -> int:
return multiplier * 2
func mutate_growing_time(_plant_data: PlantData, growing_time: int) -> int:
return growing_time + get_growing_time_increase()
return maxi(0, growing_time + get_growing_time_increase())
func get_growing_time_increase()->int:
return maxi(0, 3 - level)
return 4 - level