summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/character/src/Struct/Weapon.elm')
-rw-r--r-- | src/character/src/Struct/Weapon.elm | 248 |
1 files changed, 0 insertions, 248 deletions
diff --git a/src/character/src/Struct/Weapon.elm b/src/character/src/Struct/Weapon.elm deleted file mode 100644 index d572ed6..0000000 --- a/src/character/src/Struct/Weapon.elm +++ /dev/null @@ -1,248 +0,0 @@ -module Struct.Weapon exposing - ( - Type, - Ref, - RangeType(..), - RangeModifier(..), - DamageType(..), - DamageModifier(..), - new, - get_id, - get_name, - get_range_type, - get_range_modifier, - get_damage_type, - get_damage_modifier, - get_attack_range, - get_defense_range, - get_max_damage, - get_min_damage, - decoder, - none, - apply_to_attributes - ) - --- Elm ------------------------------------------------------------------------- -import Json.Decode -import Json.Decode.Pipeline - --- Map ------------------------------------------------------------------- -import Struct.Attributes - --------------------------------------------------------------------------------- --- TYPES ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -type alias PartiallyDecoded = - { - id : Int, - nam : String, - rt : String, - rm : String, - dt : String, - dm : String, - cf : Float - } - -type alias Type = - { - id : Int, - name : String, - coef : Float, - range_type : RangeType, - range_mod : RangeModifier, - dmg_type : DamageType, - dmg_mod : DamageModifier, - def_range : Int, - atk_range : Int, - dmg_min : Int, - dmg_max : Int - } - -type alias Ref = Int - -type RangeType = Ranged | Melee -type RangeModifier = Long | Short --- Having multiple types at the same time, like Warframe does, would be nice. -type DamageType = Slash | Blunt | Pierce -type DamageModifier = Heavy | Light - -type alias WeaponType = - { - range : RangeType, - range_mod : RangeModifier, - dmg_type : DamageType - } - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -get_ranges : RangeType -> RangeModifier -> (Int, Int) -get_ranges rt rm = - case (rt, rm) of - (Ranged, Long) -> (2, 6) - (Ranged, Short) -> (1, 4) - (Melee, Long) -> (0, 2) - (Melee, Short) -> (0, 1) - -get_damages : Float -> RangeType -> DamageModifier -> (Int, Int) -get_damages coef rt dm = - case (rt, dm) of - (Ranged, Heavy) -> ((ceiling (15.0 * coef)), (ceiling (30.0 * coef))) - (Ranged, Light) -> ((ceiling (10.0 * coef)), (ceiling (25.0 * coef))) - (Melee, Heavy) -> ((ceiling (20.0 * coef)), (ceiling (35.0 * coef))) - (Melee, Light) -> ((ceiling (15.0 * coef)), (ceiling (30.0 * coef))) - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -new : ( - Int -> - String -> - Float -> - RangeType -> - RangeModifier -> - DamageType -> - DamageModifier -> - Type - ) -new - id name coef - range_type range_mod - dmg_type dmg_mod - = - let - (def_range, atk_range) = (get_ranges range_type range_mod) - (dmg_min, dmg_max) = (get_damages coef range_type dmg_mod) - in - { - id = id, - name = name, - coef = coef, - range_type = range_type, - range_mod = range_mod, - dmg_type = dmg_type, - dmg_mod = dmg_mod, - def_range = def_range, - atk_range = atk_range, - dmg_min = dmg_min, - dmg_max = dmg_max - } - -get_id : Type -> Int -get_id wp = wp.id - -get_name : Type -> String -get_name wp = wp.name - -get_range_type : Type -> RangeType -get_range_type wp = wp.range_type - -get_range_modifier : Type -> RangeModifier -get_range_modifier wp = wp.range_mod - -get_damage_type : Type -> DamageType -get_damage_type wp = wp.dmg_type - -get_damage_modifier : Type -> DamageModifier -get_damage_modifier wp = wp.dmg_mod - -get_attack_range : Type -> Int -get_attack_range wp = wp.atk_range - -get_defense_range : Type -> Int -get_defense_range wp = wp.def_range - -get_max_damage : Type -> Int -get_max_damage wp = wp.dmg_max - -get_min_damage : Type -> Int -get_min_damage wp = wp.dmg_min - -apply_to_attributes : Type -> Struct.Attributes.Type -> Struct.Attributes.Type -apply_to_attributes wp atts = - let - impact = (20.0 * wp.coef) - full_impact = (-1 * (ceiling impact)) - quarter_impact = (-1 * (ceiling (impact / 4.0))) - in - case (wp.range_mod, wp.dmg_mod) of - (Long, Heavy) -> - (Struct.Attributes.mod_dexterity - full_impact - (Struct.Attributes.mod_speed full_impact atts) - ) - - (Long, Light) -> - (Struct.Attributes.mod_dexterity - full_impact - (Struct.Attributes.mod_speed quarter_impact atts) - ) - - (Short, Heavy) -> - (Struct.Attributes.mod_dexterity - quarter_impact - (Struct.Attributes.mod_speed full_impact atts) - ) - - (Short, Light) -> - (Struct.Attributes.mod_dexterity - quarter_impact - (Struct.Attributes.mod_speed quarter_impact atts) - ) - -finish_decoding : PartiallyDecoded -> Type -finish_decoding add_weapon = - (new - add_weapon.id - add_weapon.nam - add_weapon.cf - ( - case add_weapon.rt of - "m" -> Melee - _ -> Ranged - ) - ( - case add_weapon.rm of - "l" -> Long - _ -> Short - ) - ( - case add_weapon.dt of - "s" -> Slash - "p" -> Pierce - _ -> Blunt - ) - ( - case add_weapon.dm of - "l" -> Light - _ -> Heavy - ) - ) - -decoder : (Json.Decode.Decoder Type) -decoder = - (Json.Decode.map - (finish_decoding) - (Json.Decode.Pipeline.decode - PartiallyDecoded - |> (Json.Decode.Pipeline.required "id" Json.Decode.int) - |> (Json.Decode.Pipeline.required "nam" Json.Decode.string) - |> (Json.Decode.Pipeline.required "rt" Json.Decode.string) - |> (Json.Decode.Pipeline.required "rm" Json.Decode.string) - |> (Json.Decode.Pipeline.required "dt" Json.Decode.string) - |> (Json.Decode.Pipeline.required "dm" Json.Decode.string) - |> (Json.Decode.Pipeline.required "cf" Json.Decode.float) - ) - ) - -none : Type -none = - (new - 0 - "None" - 0.0 - Melee - Short - Blunt - Light - ) |