50 lines
2.4 KiB
GDScript
50 lines
2.4 KiB
GDScript
class_name StatusRegistry
|
|
extends RefCounted
|
|
|
|
#correspondances entre les statuts principaux (PokemonInstance.Status) et leurs effets.
|
|
#les effets de statut n'ont pas d'etat propre (les compteurs sont sur BattleMon) : ils sont partages.
|
|
|
|
static var _effects : Dictionary = {}
|
|
|
|
static func effect_for(status : int) -> BattleEffect:
|
|
if status == PokemonInstance.Status.NONE: return null
|
|
if _effects.is_empty():
|
|
_effects[PokemonInstance.Status.BURN] = BurnEffect.new()
|
|
_effects[PokemonInstance.Status.PARALYSIS] = ParalysisEffect.new()
|
|
_effects[PokemonInstance.Status.POISON] = PoisonEffect.new(false)
|
|
_effects[PokemonInstance.Status.BAD_POISON] = PoisonEffect.new(true)
|
|
_effects[PokemonInstance.Status.SLEEP] = SleepEffect.new()
|
|
_effects[PokemonInstance.Status.FREEZE] = FreezeEffect.new()
|
|
return _effects.get(status)
|
|
|
|
## Nom PokeAPI du statut ("burn", "sleep"...) -> PokemonInstance.Status, ou -1 si ce n'est pas un statut principal.
|
|
static func from_ailment(ailment : String, move : MoveData = null) -> int:
|
|
match ailment:
|
|
"burn": return PokemonInstance.Status.BURN
|
|
"paralysis": return PokemonInstance.Status.PARALYSIS
|
|
"freeze": return PokemonInstance.Status.FREEZE
|
|
"sleep": return PokemonInstance.Status.SLEEP
|
|
"poison":
|
|
#Toxik et Crochet Venin inflige le poison grave
|
|
var severe : bool = move != null and (move.api_name == "toxic" or move.api_name == "poison-fang")
|
|
return PokemonInstance.Status.BAD_POISON if severe else PokemonInstance.Status.POISON
|
|
return -1
|
|
|
|
static func is_immune(types : Array[String], status : int) -> bool:
|
|
match status:
|
|
PokemonInstance.Status.BURN: return types.has("fire")
|
|
PokemonInstance.Status.FREEZE: return types.has("ice")
|
|
PokemonInstance.Status.PARALYSIS: return types.has("electric")
|
|
PokemonInstance.Status.POISON, PokemonInstance.Status.BAD_POISON: return types.has("poison") or types.has("steel")
|
|
return false
|
|
|
|
static func apply_message(status : int, pokemon_name : String) -> String:
|
|
match status:
|
|
PokemonInstance.Status.BURN: return "%s est brûlé !" % pokemon_name
|
|
PokemonInstance.Status.PARALYSIS: return "%s est paralysé ! Il aura du mal à attaquer !" % pokemon_name
|
|
PokemonInstance.Status.FREEZE: return "%s est gelé !" % pokemon_name
|
|
PokemonInstance.Status.SLEEP: return "%s s'endort !" % pokemon_name
|
|
PokemonInstance.Status.POISON: return "%s est empoisonné !" % pokemon_name
|
|
PokemonInstance.Status.BAD_POISON: return "%s est gravement empoisonné !" % pokemon_name
|
|
return ""
|