summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/character/src/Struct/Weapon.elm')
-rw-r--r--src/character/src/Struct/Weapon.elm248
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
- )