Files
seeding-planets/entities/plants/scripts/plant_data.gd
Zacharie Guet 908878dff4 Dev de la démo
* Modification de l'apparence de l'UI des dialogues
* Changement de l'ordre de déblocage des mutations
* Ajout d'une confirmation pour l'abandon
* Ajout de la scène de fin avec la base Boréa, en tant que fin de démo
* Modification des icône de durée de vie, temps de pousse, et de mort
* Ajout d'un icône au dessus du joueur quand il n'a plus d'énergie
* Amélioration des dialogues du jeu
* Changement du modèle du téléphone
* Ajout de cellule d'énergie et de cellule de talion trouvable sur la carte
* Il est à nouveau possible de se recharger après la fin d'une région
* Buff des mutations ancien sociale et solide
* Modification de la mutation fertile (ne donne de gain de graine qu'à la maturation)
* Ajout d'une récupération automatique des graines
* Ajout de deux cartons de tutoriel ainsi qu'une option pour les revoir dans l'aide de jeu
* Amélioration générale du tutoriel
* Ajout d'un écran titre digne de ce nom
* Lors de l'arrivée à destination, ne téléporte plus le joueur sur une map vide, mais directement dans les lieux de cinématique
* Ajout graphique de plus de pattern de mousse et de roche
* Le talion apparait maintenant sur toute la carte
* La roche peut désormais apparaitre sur la zone de départ
* Ajout dud modificateur de région Canyon
* Equilibrage général
* Fix de bugs en tout genre
2026-05-27 19:13:32 +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 max(1,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 ceili(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 )