28 lines
1,007 B
GDScript
28 lines
1,007 B
GDScript
class_name PokemonNature
|
|
extends RefCounted
|
|
|
|
enum Stat { HP, ATTACK, DEFENSE, SP_ATTACK, SP_DEFENSE, SPEED }
|
|
|
|
#meme ordre que dans les jeux officiels (25 natures)
|
|
enum Nature {
|
|
HARDY, LONELY, BRAVE, ADAMANT, NAUGHTY,
|
|
BOLD, DOCILE, RELAXED, IMPISH, LAX,
|
|
TIMID, HASTY, SERIOUS, JOLLY, NAIVE,
|
|
MODEST, MILD, QUIET, BASHFUL, RASH,
|
|
CALM, GENTLE, SASSY, CAREFUL, QUIRKY,
|
|
}
|
|
|
|
#ordre des stats dans la table des natures : index // 5 = stat augmentee, index % 5 = stat diminuee
|
|
#(si les deux sont identiques, la nature est neutre)
|
|
const _STAT_ORDER : Array[int] = [Stat.ATTACK, Stat.DEFENSE, Stat.SPEED, Stat.SP_ATTACK, Stat.SP_DEFENSE]
|
|
|
|
static func get_multiplier(nature : Nature, stat : Stat) -> float:
|
|
var up_idx : int = floori(int(nature) / 5.0)
|
|
var down_idx : int = int(nature) % 5
|
|
if up_idx == down_idx: return 1.0
|
|
if stat == _STAT_ORDER[up_idx]: return 1.1
|
|
if stat == _STAT_ORDER[down_idx]: return 0.9
|
|
return 1.0
|
|
|
|
static func random_nature() -> Nature:
|
|
return Nature.values().pick_random() as Nature |