Files
seeding-planets/entities/plants/scripts/plant_data.gd
Zacharie Guet 8efe8bce36 Dev pour la beta 1.4
* Changements de la texture des cristaux de Talion dans tous les assets 3D pour correspondre aux assets 2D
* Ajout d'un évenement en fin de région, une résurgence de Talion qui décontamine et fait looter les plantes mature aux alentours
* Ajout d'un path finding sur le mouvement du robot
* Modification du flow des actions à la souris : ajout d'un nouveau son, d'un icône à l'emplacement de l'action
* Modification du nombre et de l'ordre de mutation débloquées
* Augmentation de la valeur maximale de zoom
* Modification des scores à atteindre dans les premières régions
* Modification de l'interface du vaisseau, laissant apparaitre une roadmap plus claire, et laissant inspecter l'inventaire actuel
* Modification de l'icône d'action dans les scènes 3D
* Augmentation de la zone d'écart entre les plantes, et augmentation du taux de zone fertile en conséquence
* La station de recharge devient inutilisable après la fin de la région
* Ajout d'une transparence lors de la sélection d'objets derrières d'autres objets
* Les plantes juvéniles donneront toujours une graine si coupées
* Ajout d'un bouclage sur les couleurs des mutations
* Fix des hitbox des plantes pour l'inspection à la souris
* Fix de plusieurs bugs sur la manipulation de l'inventaire
* Ajout de nombreux screenshots d'utilisation des outils lors du tutoriel
* Amélioration mineure de la traduction/wording
2026-05-17 02:29:55 +02:00

152 lines
3.6 KiB
GDScript

extends EntityData
class_name PlantData
signal updated(p: PlantData)
signal disappeared(p: PlantData)
signal nearby_plant_updated()
enum State {PLANTED, GROWING, MATURE, DEAD}
@export var plant_name: String
@export var mutations: Array[PlantMutation]
@export var day: int:
set(v):
day = v
updated.emit(self )
@export var random_seed: int
var decontamination_area_factor = 0.
var nearby_plants : Array[PlantData]
func _init(
_position: Vector2 = Vector2.ZERO,
_plant_name: String = Random.generate_random_word(),
_mutations: Array[PlantMutation] = [],
_day: int = 0,
_random_seed = randi()
):
position = _position
plant_name = _plant_name
mutations = _mutations
day = _day
random_seed = _random_seed
for m in mutations:
m.mutate_plant_data(self )
static func generate_from_seed(plant_seed: Seed, plant_position: Vector2) -> PlantData:
return PlantData.new(
plant_position,
plant_seed.plant_name,
plant_seed.plant_mutations
)
func get_plant_info() -> RunDataPlantInfo:
return GameInfo.game_data.current_run.plant_info
func load_entity() -> Entity:
var plant = Plant.new(
self
)
return plant
func get_lifetime() -> int:
var lifetime = get_plant_info().get_lifetime()
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:
var growing_time = get_plant_info().get_growing_time()
for m in mutations:
growing_time = m.mutate_growing_time(self , growing_time)
return growing_time
func get_score(state: State = get_state()) -> int:
var score = get_plant_info().get_base_score() if state == State.MATURE else 0
var mult := 1
for m in mutations:
score = m.mutate_score(self , score)
mult = m.mutate_score_multiplier(self , mult)
for pd in nearby_plants:
score += pd.get_score_buff()
return max(0,score) * max(0,mult)
func get_state() -> State:
if day >= get_lifetime():
return State.DEAD
elif day == 0:
return State.PLANTED
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 = get_plant_info().get_seed_number() if (state == State.MATURE or state == State.DEAD) else 1
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():
var seed_random_loose = get_plant_info().get_seed_random_loose()
for m in mutations:
seed_random_loose = m.mutate_seed_random_loose(self , seed_random_loose)
return seed_random_loose
func get_influence_radius():
return get_plant_info().get_influence_radius()
# func get_random_seed_income():
# return max(
# get_seed_number() - randi_range(0, get_seed_random_loose()),
# 0
# )
func get_lifetime_buff() -> int:
var buff = 0
for m in mutations:
buff = m.mutate_lifetime_buff(self, buff)
return buff
func get_seed_buff() -> int:
var buff = 0
for m in mutations:
buff = m.mutate_seed_buff(self, buff)
return buff
func get_score_buff() -> int:
var buff = 0
for m in mutations:
buff = m.mutate_score_buff(self, buff)
return buff
func disappear():
disappeared.emit(self )