| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2019-02-11 19:04:04 +0100 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2019-02-11 19:04:04 +0100 | 
| commit | eb794a602d9a0b3be8bd126267bb4c15ea4ba119 (patch) | |
| tree | 65e4a86b3226eabbb4da7372bb6dcd0ec90e7086 /src | |
| parent | 7b7c639047ea3ad4c755f745cb89f9ef7e04b755 (diff) | |
Untested attempt at adding players.
Diffstat (limited to 'src')
| -rw-r--r-- | src/battle/src/Struct/Model.elm | 52 | ||||
| -rw-r--r-- | src/battle/src/Struct/TurnResult.elm | 471 | 
2 files changed, 277 insertions, 246 deletions
| diff --git a/src/battle/src/Struct/Model.elm b/src/battle/src/Struct/Model.elm index 278c900..b45c445 100644 --- a/src/battle/src/Struct/Model.elm +++ b/src/battle/src/Struct/Model.elm @@ -57,11 +57,11 @@ type alias Type =        animator: (Maybe Struct.TurnResultAnimator.Type),        map: Struct.Map.Type,        characters: (Array.Array Struct.Character.Type), +      players: (Array.Array Struct.Player.Type),        weapons: (Dict.Dict Struct.Weapon.Ref Struct.Weapon.Type),        armors: (Dict.Dict Struct.Armor.Ref Struct.Armor.Type),        portraits: (Dict.Dict Struct.Portrait.Ref Struct.Portrait.Type),        tiles: (Dict.Dict Struct.Tile.Ref Struct.Tile.Type), -      players: (Dict.Dict Struct.Player.Ref Struct.Player.Type),        error: (Maybe Struct.Error.Type),        player_id: String,        battle_id: String, @@ -98,7 +98,7 @@ new flags =              armors = (Dict.empty),              portraits = (Dict.empty),              tiles = (Dict.empty), -            players = (Dict.empty), +            players = (Array.empty),              error = Nothing,              battle_id = "",              player_id = @@ -173,8 +173,7 @@ add_player : Struct.Player.Type -> Type -> Type  add_player pl model =     {model |        players = -         (Dict.insert -            (Struct.Player.get_index pl) +         (Array.push              pl              model.players           ) @@ -224,6 +223,19 @@ initialize_animator : Type -> Type  initialize_animator model =     let        timeline_list = (Array.toList model.timeline) +      (characters, players) = +         (List.foldr +            (\event (pcharacters, pplayers) -> +               (Struct.TurnResult.apply_inverse_step +                  (tile_omnimods_fun model) +                  event +                  pcharacters +                  pplayers +               ) +            ) +            (model.characters, model.players) +            timeline_list +         )     in        {model |           animator = @@ -232,14 +244,8 @@ initialize_animator model =                 True              ),           ui = (Struct.UI.default), -         characters = -            (List.foldr -               (Struct.TurnResult.apply_inverse_to_characters -                  (tile_omnimods_fun model) -               ) -               model.characters -               timeline_list -            ) +         characters = characters, +         players = players        }  move_animator_to_next_step : Type -> Type @@ -257,20 +263,22 @@ apply_animator_step model =     case model.animator of        Nothing -> model        (Just animator) -> -         {model | -            characters = -               case -                  (Struct.TurnResultAnimator.get_current_animation animator) -               of -                  (Struct.TurnResultAnimator.TurnResult turn_result) -> -                     (Struct.TurnResult.apply_step_to_characters +         case (Struct.TurnResultAnimator.get_current_animation animator) of +            (Struct.TurnResultAnimator.TurnResult turn_result) -> +               let +                  (characters, players) = +                     (Struct.TurnResult.apply_step                          (tile_omnimods_fun model)                          turn_result                          model.characters +                        model.players                       ) - -                  _ -> model.characters -         } +               in +                  {model | +                     characters = characters, +                     players = players +                  } +            _ -> model  update_character : Int -> Struct.Character.Type -> Type -> Type  update_character ix new_val model = diff --git a/src/battle/src/Struct/TurnResult.elm b/src/battle/src/Struct/TurnResult.elm index 90d9420..36bf730 100644 --- a/src/battle/src/Struct/TurnResult.elm +++ b/src/battle/src/Struct/TurnResult.elm @@ -11,9 +11,8 @@ module Struct.TurnResult exposing        get_actor_index,        get_attack_defender_index,        maybe_get_attack_next_step, -      apply_to_characters, -      apply_inverse_to_characters, -      apply_step_to_characters, +      apply_inverse_step, +      apply_step,        maybe_remove_step,        decoder     ) @@ -23,12 +22,16 @@ import Array  import Json.Decode +-- Shared ---------------------------------------------------------------------- +import Util.Array +  -- Battle ----------------------------------------------------------------------  import Struct.Attack  import Struct.Character  import Struct.Direction  import Struct.Location  import Struct.Omnimods +import Struct.Player  import Struct.WeaponSet  -------------------------------------------------------------------------------- @@ -45,7 +48,9 @@ type alias Attack =     {        attacker_index : Int,        defender_index : Int, -      sequence : (List Struct.Attack.Type) +      sequence : (List Struct.Attack.Type), +      attacker_luck : Int, +      defender_luck : Int     }  type alias WeaponSwitch = @@ -79,149 +84,205 @@ type Type =  --------------------------------------------------------------------------------  -- LOCAL -----------------------------------------------------------------------  -------------------------------------------------------------------------------- -apply_movement_to_character : ( -      Movement -> +apply_movement_step : (        (Struct.Location.Type -> Struct.Omnimods.Type) -> -      Struct.Character.Type -> -      Struct.Character.Type -   ) -apply_movement_to_character movement tile_omnimods char = -   (Struct.Character.refresh_omnimods -      (tile_omnimods) -      (Struct.Character.set_location movement.destination char) -   ) - -apply_movement_step_to_character : (        Movement -> -      (Struct.Location.Type -> Struct.Omnimods.Type) -> -      Struct.Character.Type -> -      Struct.Character.Type +      (Array.Array Struct.Character.Type) -> +      (Array.Array Struct.Player.Type) -> +      ( +         (Array.Array Struct.Character.Type), +         (Array.Array Struct.Player.Type) +      )     ) -apply_movement_step_to_character movement tile_omnimods char = -   case (List.head movement.path) of -      (Just dir) -> -         (Struct.Character.set_location -            (Struct.Location.neighbor dir (Struct.Character.get_location char)) -            char -         ) - -      Nothing -> -         (Struct.Character.refresh_omnimods (tile_omnimods) char) +apply_movement_step tile_omnimods movement characters players = +   ( +      (Util.Array.update_unsafe +         movement.character_index +         (\char -> +            case (List.head movement.path) of +               (Just dir) -> +                  (Struct.Character.set_location +                     (Struct.Location.neighbor +                        dir +                        (Struct.Character.get_location char) +                     ) +                     char +                  ) -apply_inverse_movement_to_character : ( -      Movement -> -      (Struct.Location.Type -> Struct.Omnimods.Type) -> -      Struct.Character.Type -> -      Struct.Character.Type -   ) -apply_inverse_movement_to_character movement tile_omnimods char = -   (Struct.Character.refresh_omnimods -      (tile_omnimods) -      (Struct.Character.set_location -         (List.foldr -            (Struct.Location.neighbor) -            (movement.destination) -            (List.map (Struct.Direction.opposite_of) movement.path) +               Nothing -> +                  (Struct.Character.refresh_omnimods (tile_omnimods) char)           ) -         char -      ) +         characters +      ), +      players     ) -apply_weapon_switch_to_character : ( +apply_inverse_movement_step : (        (Struct.Location.Type -> Struct.Omnimods.Type) -> -      Struct.Character.Type -> -      Struct.Character.Type +      Movement -> +      (Array.Array Struct.Character.Type) -> +      (Array.Array Struct.Player.Type) -> +      ( +         (Array.Array Struct.Character.Type), +         (Array.Array Struct.Player.Type) +      )     ) -apply_weapon_switch_to_character tile_omnimods char = -   (Struct.Character.refresh_omnimods -      (tile_omnimods) -      (Struct.Character.set_weapons -         (Struct.WeaponSet.switch_weapons -            (Struct.Character.get_weapons char) +apply_inverse_movement_step tile_omnimods movement characters players = +   ( +      (Util.Array.update_unsafe +         movement.character_index +         (\char -> +            (Struct.Character.refresh_omnimods +               (tile_omnimods) +               (Struct.Character.set_location +                  (List.foldr +                     (Struct.Location.neighbor) +                     (movement.destination) +                     (List.map (Struct.Direction.opposite_of) movement.path) +                  ) +                  char +               ) +            )           ) -         char -      ) +         characters +      ), +      players     ) -apply_attack_to_characters : ( -      Attack -> +apply_switched_weapon : ( +      (Struct.Location.Type -> Struct.Omnimods.Type) -> +      WeaponSwitch ->        (Array.Array Struct.Character.Type) -> -      (Array.Array Struct.Character.Type) -   ) -apply_attack_to_characters attack characters = -   (List.foldl -      (Struct.Attack.apply_to_characters -         attack.attacker_index -         attack.defender_index +      (Array.Array Struct.Player.Type) -> +      ( +         (Array.Array Struct.Character.Type), +         (Array.Array Struct.Player.Type)        ) -      characters -      attack.sequence +   ) +apply_switched_weapon tile_omnimods weapon_switch characters players = +   ( +      (Util.Array.update_unsafe +         weapon_switch.character_index +         (\char -> +            (Struct.Character.refresh_omnimods +               (tile_omnimods) +               (Struct.Character.set_weapons +                  (Struct.WeaponSet.switch_weapons +                     (Struct.Character.get_weapons char) +                  ) +                  char +               ) +            ) +         ) +         characters +      ), +      players     ) -apply_player_defeat_to_characters : ( +apply_player_defeat : (        PlayerDefeat ->        (Array.Array Struct.Character.Type) -> -      (Array.Array Struct.Character.Type) +      (Array.Array Struct.Player.Type) -> +      ( +         (Array.Array Struct.Character.Type), +         (Array.Array Struct.Player.Type) +      )     ) -apply_player_defeat_to_characters pdefeat characters = -   (Array.map -      (\c -> -         ( -            if ((Struct.Character.get_player_ix c) == pdefeat.player_index) -            then (Struct.Character.set_defeated True c) -            else c +apply_player_defeat pdefeat characters players = +   ( +      (Array.map +         (\c -> +            ( +               if ((Struct.Character.get_player_ix c) == pdefeat.player_index) +               then (Struct.Character.set_defeated True c) +               else c +            )           ) -      ) -      characters +         characters +      ), +      players     ) -apply_inverse_player_defeat_to_characters : ( +apply_inverse_player_defeat : (        PlayerDefeat ->        (Array.Array Struct.Character.Type) -> -      (Array.Array Struct.Character.Type) +      (Array.Array Struct.Player.Type) -> +      ( +         (Array.Array Struct.Character.Type), +         (Array.Array Struct.Player.Type) +      )     ) -apply_inverse_player_defeat_to_characters pdefeat characters = -   (Array.map -      (\c -> -         ( -            if ((Struct.Character.get_player_ix c) == pdefeat.player_index) -            then (Struct.Character.set_defeated False c) -            else c +apply_inverse_player_defeat pdefeat characters players = +   ( +      (Array.map +         (\c -> +            ( +               if ((Struct.Character.get_player_ix c) == pdefeat.player_index) +               then (Struct.Character.set_defeated False c) +               else c +            )           ) -      ) -      characters +         characters +      ), +      players     ) -apply_attack_step_to_characters : ( +apply_attack_step : (        Attack ->        (Array.Array Struct.Character.Type) -> -      (Array.Array Struct.Character.Type) +      (Array.Array Struct.Player.Type) -> +      ( +         (Array.Array Struct.Character.Type), +         (Array.Array Struct.Player.Type) +      )     ) -apply_attack_step_to_characters attack characters = +apply_attack_step attack characters players =     case (List.head attack.sequence) of        (Just attack_step) -> -         (Struct.Attack.apply_to_characters -            attack.attacker_index -            attack.defender_index -            attack_step -            characters +         ( +            (Struct.Attack.apply_to_characters +               attack.attacker_index +               attack.defender_index +               attack_step +               characters +            ), +            players           ) -      Nothing -> characters +      Nothing -> +         ( +            characters, +            (Util.Array.update_unsafe +               attack.attacker_index +               (Struct.Player.set_luck attack.attacker_luck) +               (Util.Array.update_unsafe +                  attack.defender_index +                  (Struct.Player.set_luck attack.defender_luck) +                  players +               ) +            ) +         ) -apply_inverse_attack_to_characters : ( +apply_inverse_attack : (        Attack ->        (Array.Array Struct.Character.Type) -> -      (Array.Array Struct.Character.Type) -   ) -apply_inverse_attack_to_characters attack characters = -   (List.foldr -      (Struct.Attack.apply_inverse_to_characters -         attack.attacker_index -         attack.defender_index +      (Array.Array Struct.Player.Type) -> +      ( +         (Array.Array Struct.Character.Type), +         (Array.Array Struct.Player.Type)        ) -      characters -      attack.sequence +   ) +apply_inverse_attack attack characters players = +   ( +      (List.foldr +         (Struct.Attack.apply_inverse_to_characters +            attack.attacker_index +            attack.defender_index +         ) +         characters +         attack.sequence +      ), +      players     )  movement_decoder : (Json.Decode.Decoder Movement) @@ -229,26 +290,19 @@ movement_decoder =     (Json.Decode.map3        Movement        (Json.Decode.field "ix" Json.Decode.int) -      (Json.Decode.field -         "p" -         (Json.Decode.list (Struct.Direction.decoder)) -      ) -      (Json.Decode.field -         "nlc" -         (Struct.Location.decoder) -      ) +      (Json.Decode.field "p" (Json.Decode.list (Struct.Direction.decoder))) +      (Json.Decode.field "nlc" (Struct.Location.decoder))     )  attack_decoder : (Json.Decode.Decoder Attack)  attack_decoder = -   (Json.Decode.map3 +   (Json.Decode.map5        Attack        (Json.Decode.field "aix" Json.Decode.int)        (Json.Decode.field "dix" Json.Decode.int) -      (Json.Decode.field -         "seq" -         (Json.Decode.list (Struct.Attack.decoder)) -      ) +      (Json.Decode.field "seq" (Json.Decode.list (Struct.Attack.decoder))) +      (Json.Decode.field "alk" Json.Decode.int) +      (Json.Decode.field "dlk" Json.Decode.int)     )  weapon_switch_decoder : (Json.Decode.Decoder WeaponSwitch) @@ -353,142 +407,111 @@ maybe_remove_attack_step attack =              )           ) --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -apply_to_characters : ( -      (Struct.Location.Type -> Struct.Omnimods.Type) -> -      Type -> +apply_player_victory : ( +      PlayerVictory ->        (Array.Array Struct.Character.Type) -> -      (Array.Array Struct.Character.Type) +      (Array.Array Struct.Player.Type) -> +      ( +         (Array.Array Struct.Character.Type), +         (Array.Array Struct.Player.Type) +      ) +   ) +apply_player_victory player_victory characters players = +   ( +      characters, +      players     ) -apply_to_characters tile_omnimods turn_result characters = -   case turn_result of -      (Moved movement) -> -         case (Array.get movement.character_index characters) of -            (Just char) -> -               (Array.set -                  movement.character_index -                  (apply_movement_to_character movement (tile_omnimods) char) -                  characters -               ) - -            Nothing -> -               characters - -      (SwitchedWeapon weapon_switch) -> -         case (Array.get weapon_switch.character_index characters) of -            (Just char) -> -               (Array.set -                  weapon_switch.character_index -                  (apply_weapon_switch_to_character (tile_omnimods) char) -                  characters -               ) - -            Nothing -> -               characters - -      (Attacked attack) -> -         (apply_attack_to_characters attack characters) - -      (PlayerWon pvict) -> characters - -      (PlayerLost pdefeat) -> -         (apply_player_defeat_to_characters pdefeat characters) -      (PlayerTurnStarted pturns) -> characters +apply_player_turn_started : ( +      PlayerTurnStart -> +      (Array.Array Struct.Character.Type) -> +      (Array.Array Struct.Player.Type) -> +      ( +         (Array.Array Struct.Character.Type), +         (Array.Array Struct.Player.Type) +      ) +   ) +apply_player_turn_started player_defeat characters players = +   ( +      characters, +      players +   ) -apply_step_to_characters : ( +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_step : (        (Struct.Location.Type -> Struct.Omnimods.Type) ->        Type ->        (Array.Array Struct.Character.Type) -> -      (Array.Array Struct.Character.Type) +      (Array.Array Struct.Player.Type) -> +      ( +         (Array.Array Struct.Character.Type), +         (Array.Array Struct.Player.Type) +      )     ) -apply_step_to_characters tile_omnimods turn_result characters = +apply_step tile_omnimods turn_result characters players =     case turn_result of        (Moved movement) -> -         case (Array.get movement.character_index characters) of -            (Just char) -> -               (Array.set -                  movement.character_index -                  (apply_movement_step_to_character -                     movement -                     (tile_omnimods) -                     char -                  ) -                  characters -               ) - -            Nothing -> -               characters +         (apply_movement_step (tile_omnimods) movement characters players)        (SwitchedWeapon weapon_switch) -> -         case (Array.get weapon_switch.character_index characters) of -            (Just char) -> -               (Array.set -                  weapon_switch.character_index -                  (apply_weapon_switch_to_character (tile_omnimods) char) -                  characters -               ) - -            Nothing -> -               characters +         (apply_switched_weapon +            (tile_omnimods) +            weapon_switch +            characters +            players +         )        (Attacked attack) -> -         (apply_attack_step_to_characters attack characters) +         (apply_attack_step attack characters players) -      (PlayerWon pvict) -> characters +      (PlayerWon pvict) -> +         (apply_player_victory pvict characters players)        (PlayerLost pdefeat) -> -         (apply_player_defeat_to_characters pdefeat characters) +         (apply_player_defeat pdefeat characters players) -      (PlayerTurnStarted pturns) -> characters +      (PlayerTurnStarted pturns) -> +         (apply_player_turn_started pturns characters players) -apply_inverse_to_characters : ( +apply_inverse_step : (        (Struct.Location.Type -> Struct.Omnimods.Type) ->        Type ->        (Array.Array Struct.Character.Type) -> -      (Array.Array Struct.Character.Type) +      (Array.Array Struct.Player.Type) -> +      ( +         (Array.Array Struct.Character.Type), +         (Array.Array Struct.Player.Type) +      )     ) -apply_inverse_to_characters tile_omnimods turn_result characters = +apply_inverse_step tile_omnimods turn_result characters players =     case turn_result of        (Moved movement) -> -         case (Array.get movement.character_index characters) of -            (Just char) -> -               (Array.set -                  movement.character_index -                  (apply_inverse_movement_to_character -                     movement -                     (tile_omnimods) -                     char -                  ) -                  characters -               ) - -            Nothing -> -               characters +         (apply_inverse_movement_step +            (tile_omnimods) +            movement +            characters +            players +         )        (SwitchedWeapon weapon_switch) -> -         case (Array.get weapon_switch.character_index characters) of -            (Just char) -> -               (Array.set -                  weapon_switch.character_index -                  (apply_weapon_switch_to_character (tile_omnimods) char) -                  characters -               ) - -            Nothing -> -               characters +         (apply_switched_weapon +            (tile_omnimods) +            weapon_switch +            characters +            players +         )        (Attacked attack) -> -         (apply_inverse_attack_to_characters attack characters) +         (apply_inverse_attack attack characters players) -      (PlayerWon pvict) -> characters +      (PlayerWon pvict) -> (characters, players)        (PlayerLost pdefeat) -> -         (apply_inverse_player_defeat_to_characters pdefeat characters) +         (apply_inverse_player_defeat pdefeat characters players) -      (PlayerTurnStarted pturns) -> characters +      (PlayerTurnStarted pturns) -> (characters, players)  decoder : (Json.Decode.Decoder Type)  decoder = | 


