summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2019-08-10 18:23:48 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2019-08-10 18:23:48 +0200
commit120b0b7f6df0c8978aac9a423cbf8364feac4779 (patch)
tree9fd0b29790de37c8f3f6c786391a543d79b74164 /src/shared/battle/Battle/Struct/Attributes.elm
parent69611b72a28333c129ad25c3daae92b4215ac5d4 (diff)
Statistics -> Attributes.
Diffstat (limited to 'src/shared/battle/Battle/Struct/Attributes.elm')
-rw-r--r--src/shared/battle/Battle/Struct/Attributes.elm162
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))