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 ""