| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/shared/battle/Battle/Struct/Attributes.elm')
| -rw-r--r-- | src/shared/battle/Battle/Struct/Attributes.elm | 162 | 
1 files changed, 162 insertions, 0 deletions
| diff --git a/src/shared/battle/Battle/Struct/Attributes.elm b/src/shared/battle/Battle/Struct/Attributes.elm new file mode 100644 index 0000000..159404e --- /dev/null +++ b/src/shared/battle/Battle/Struct/Attributes.elm @@ -0,0 +1,162 @@ +module Battle.Struct.Attributes exposing +   ( +      Type, +      Category(..), +      get_movement_points, +      get_max_health, +      get_dodges, +      get_parries, +      get_accuracy, +      get_double_hits, +      get_critical_hits, +      get_damage_modifier, +      get_damage_multiplier, +      decode_category, +      encode_category, +      mod, +      default, +      is_percent +   ) + +-- Elm ------------------------------------------------------------------------- +import List + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type Category = +   MovementPoints +   | MaxHealth +   | Dodges +   | Parries +   | Accuracy +   | DoubleHits +   | CriticalHits +   | DamageModifier + +type alias Type = +   { +      movement_points : Int, +      max_health : Int, +      dodges : Int, +      parries : Int, +      accuracy : Int, +      double_hits : Int, +      critical_hits : Int, +      damage_modifier : Int +   } + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +mod_movement_points : Int -> Type -> Type +mod_movement_points v t = +   {t | +      movement_points = (t.movement_points + v) +   } + +mod_max_health : Int -> Type -> Type +mod_max_health v t = +   {t | +      max_health = (t.max_health + v) +   } + +mod_dodges : Int -> Type -> Type +mod_dodges v t = {t | dodges = (t.dodges + v)} + +mod_parries : Int -> Type -> Type +mod_parries v t = {t | parries = (t.parries + v)} + +mod_accuracy : Int -> Type -> Type +mod_accuracy v t = {t | accuracy = (t.accuracy + v)} + +mod_double_hits : Int -> Type -> Type +mod_double_hits v t = {t | double_hits = (t.double_hits + v)} + +mod_critical_hits : Int -> Type -> Type +mod_critical_hits v t = {t | critical_hits = (t.critical_hits + v)} + +mod_damage_modifier : Int -> Type -> Type +mod_damage_modifier v t = {t | damage_modifier = (t.damage_modifier + v)} + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_movement_points : Type -> Int +get_movement_points t = (max 0 t.movement_points) + +get_max_health : Type -> Int +get_max_health t = (max 1 t.max_health) + +get_dodges : Type -> Int +get_dodges t = (max 0 t.dodges) + +get_parries : Type -> Int +get_parries t = (max 0 t.parries) + +get_accuracy : Type -> Int +get_accuracy t = (max 0 t.accuracy) + +get_double_hits : Type -> Int +get_double_hits t = (max 0 t.double_hits) + +get_critical_hits : Type -> Int +get_critical_hits t = (max 0 t.critical_hits) + +get_damage_modifier : Type -> Int +get_damage_modifier t = (max 0 t.damage_modifier) + +get_damage_multiplier : Type -> Float +get_damage_multiplier t = ((toFloat (max 0 t.damage_modifier)) / 100.0) + +mod : Category -> Int -> Type -> Type +mod cat v t = +   case cat of +      MaxHealth -> (mod_max_health v t) +      MovementPoints -> (mod_movement_points v t) +      Dodges -> (mod_dodges v t) +      Parries -> (mod_parries v t) +      Accuracy -> (mod_accuracy v t) +      DoubleHits -> (mod_double_hits v t) +      CriticalHits -> (mod_critical_hits v t) +      DamageModifier -> (mod_damage_modifier v t) + +default : Type +default = +   { +      movement_points = 0, +      max_health = 1, +      dodges = 0, +      parries = 0, +      accuracy = 0, +      double_hits = 0, +      critical_hits = 0, +      damage_modifier = 100 +   } + +decode_category : String -> Category +decode_category str = +   case str of +      "mheal" -> MaxHealth +      "mpts" -> MovementPoints +      "dodg" -> Dodges +      "pary" -> Parries +      "accu" -> Accuracy +      "dhit" -> DoubleHits +      "dmgm" -> DamageModifier +      _  -> CriticalHits + +encode_category : Category -> String +encode_category cat = +   case cat of +      MaxHealth -> "mheal" +      MovementPoints -> "mpts" +      Dodges -> "dodg" +      Parries -> "pary" +      Accuracy -> "accu" +      DoubleHits -> "dhit" +      CriticalHits -> "crit" +      DamageModifier -> "dmgm" + +is_percent : Category -> Bool +is_percent cat = ((cat /= MaxHealth) && (cat /= MovementPoints)) | 


