seeding-planets/entities/plants/scripts/plant_effect.gd
Zacharie Guet ef392595de ajout des mutation et refonte de l'inspecteur
* ajout des mutations #86
* changement de l'objectif #85
* refonte de l'inspecteur #71
* changement léger de la plantation
* les plantes ne donnent que des graines de leurs espèces
* refonte partielle du code, refacto
2025-10-12 01:03:08 +02:00

89 lines
2.4 KiB
GDScript

# Classe abstraite permettant de développer divers effets de plantes
extends Resource
class_name PlantEffect
const HARVEST_EFFECT_ICON = preload("res://common/icons/shovel.svg")
const MATURE_EFFECT_ICON = preload("res://common/icons/chevrons-up.svg")
const CYCLIC_EFFECT_ICON = preload("res://common/icons/rotate-rectangle.svg")
@export var level : int
func _init(_level : int = 1):
level = _level
func get_effect_name() -> String:
printerr("Classe abstraite PlantEffect appelée")
return ""
func get_effect_description() -> String:
printerr("Classe abstraite PlantEffect appelée")
return ""
func effect(plant):
printerr("Classe abstraite PlantEffect appelée")
static func get_framed_info_from_effects(
effects : Array[PlantEffect],
trigger_text = "",
trigger_icon: Texture = null
) -> Array[Inspector.FramedInfo]:
if len(effects) == 0 : return []
var desc = "%s %s" % [PlantEffect.get_framed_info_effect_name(effects[0]), effects[0].get_effect_description()]
for i in range(1, len(effects)):
if effects[i]:
desc += "\n%s %s" % [PlantEffect.get_framed_info_effect_name(effects[i]), effects[i].get_effect_description()]
return [Inspector.FramedInfo.new(
trigger_text,
desc,
trigger_icon
)]
static func get_framed_info_effect_name(e : PlantEffect):
var levels_bbcode = [
"[color=#ffffff][b]%s[/b][/color]",
"[color=#FFBE0B][b]%s %d[/b][/color]",
"[color=#FB5607][b]%s %d[/b][/color]",
"[color=#3A86FF][b]%s %d[/b][/color]",
"[color=#8338EC][b]%s %d[/b][/color]",
"[color=#FF006E][b]%s %d[/b][/color]",
"[rainbow][b]%s %d[/b][/rainbow]"
]
if e.level == 1:
return levels_bbcode[0] % e.get_effect_name()
else :
return levels_bbcode[min(e.level - 1, len(levels_bbcode) - 1)] % [e.get_effect_name(), e.level]
static func get_framed_info_from_all_trigger_effects(
mature_effects : Array[PlantEffect],
harvest_effects : Array[PlantEffect],
cyclic_effects : Array[PlantEffect],
) -> Array[Inspector.FramedInfo] :
var framed_infos : Array[Inspector.FramedInfo] = []
framed_infos.append_array(
PlantEffect.get_framed_info_from_effects(
mature_effects,
"On maturation",
MATURE_EFFECT_ICON
)
)
framed_infos.append_array(
PlantEffect.get_framed_info_from_effects(
harvest_effects,
"When harvested",
HARVEST_EFFECT_ICON
)
)
framed_infos.append_array(
PlantEffect.get_framed_info_from_effects(
cyclic_effects,
"Each days",
CYCLIC_EFFECT_ICON
)
)
return framed_infos