From b320a735c123297368a854c39e17daa455ce953e Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Thu, 28 Jun 2018 18:30:31 +0200 Subject: More banners, starting work on victory/defeat... --- src/asset/www/characters.css | 1 + src/asset/www/svg/icon/commander_banner.svg | 12 +- src/asset/www/svg/icon/target_banner.svg | 123 +++++++++++++++++++++ src/battlemap/src/Struct/Character.elm | 21 ++++ src/battlemap/src/Struct/Tile.elm | 4 + src/battlemap/src/Struct/TurnResult.elm | 90 +++++++++++++++ src/battlemap/src/View/Battlemap/Character.elm | 36 +++--- src/battlemap/src/View/SubMenu/Status/TileInfo.elm | 35 +++--- src/battlemap/src/View/SubMenu/Timeline.elm | 12 ++ .../src/View/SubMenu/Timeline/PlayerDefeat.elm | 38 +++++++ .../src/View/SubMenu/Timeline/PlayerTurnStart.elm | 38 +++++++ .../src/View/SubMenu/Timeline/PlayerVictory.elm | 38 +++++++ 12 files changed, 414 insertions(+), 34 deletions(-) create mode 100644 src/asset/www/svg/icon/target_banner.svg create mode 100644 src/battlemap/src/View/SubMenu/Timeline/PlayerDefeat.elm create mode 100644 src/battlemap/src/View/SubMenu/Timeline/PlayerTurnStart.elm create mode 100644 src/battlemap/src/View/SubMenu/Timeline/PlayerVictory.elm diff --git a/src/asset/www/characters.css b/src/asset/www/characters.css index 5833ca6..dedb226 100644 --- a/src/asset/www/characters.css +++ b/src/asset/www/characters.css @@ -56,3 +56,4 @@ .asset-character-team-body-7{background-image: url(/asset/svg/icon/body_team_7.svg);} .asset-character-icon-commander-banner{background-image: url(/asset/svg/icon/commander_banner.svg);} +.asset-character-icon-target-banner{background-image: url(/asset/svg/icon/target_banner.svg);} diff --git a/src/asset/www/svg/icon/commander_banner.svg b/src/asset/www/svg/icon/commander_banner.svg index be05534..572b241 100644 --- a/src/asset/www/svg/icon/commander_banner.svg +++ b/src/asset/www/svg/icon/commander_banner.svg @@ -15,7 +15,7 @@ version="1.1" id="svg8" inkscape:version="0.92.2 5c3e80d, 2017-08-06" - sodipodi:docname="commander_banner.svg"> + sodipodi:docname="commander_banner2.svg"> + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/src/battlemap/src/Struct/Character.elm b/src/battlemap/src/Struct/Character.elm index bb6d850..eab7b62 100644 --- a/src/battlemap/src/Struct/Character.elm +++ b/src/battlemap/src/Struct/Character.elm @@ -1,9 +1,11 @@ module Struct.Character exposing ( Type, + Rank(..), get_index, get_player_id, get_name, + get_rank, get_icon_id, get_portrait_id, get_armor, @@ -43,6 +45,7 @@ type alias PartiallyDecoded = { ix : Int, nam : String, + rnk : String, ico : String, prt : String, lc : Struct.Location.Type, @@ -55,10 +58,16 @@ type alias PartiallyDecoded = ar : Int } +type Rank = + Optional + | Target + | Commander + type alias Type = { ix : Int, name : String, + rank : Rank, icon : String, portrait : String, location : Struct.Location.Type, @@ -74,6 +83,13 @@ type alias Type = -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- +str_to_rank : String -> Rank +str_to_rank str = + case str of + "t" -> Target + "c" -> Commander + _ -> Optional + finish_decoding : PartiallyDecoded -> (Type, Int, Int, Int) finish_decoding add_char = let @@ -83,6 +99,7 @@ finish_decoding add_char = { ix = add_char.ix, name = add_char.nam, + rank = (str_to_rank add_char.rnk), icon = add_char.ico, portrait = add_char.prt, location = add_char.lc, @@ -106,6 +123,9 @@ get_index c = c.ix get_name : Type -> String get_name c = c.name +get_rank : Type -> Rank +get_rank c = c.rank + get_player_id : Type -> String get_player_id c = c.player_id @@ -174,6 +194,7 @@ decoder = PartiallyDecoded |> (Json.Decode.Pipeline.required "ix" Json.Decode.int) |> (Json.Decode.Pipeline.required "nam" Json.Decode.string) + |> (Json.Decode.Pipeline.required "rnk" Json.Decode.string) |> (Json.Decode.Pipeline.required "ico" Json.Decode.string) |> (Json.Decode.Pipeline.required "prt" Json.Decode.string) |> (Json.Decode.Pipeline.required "lc" (Struct.Location.decoder)) diff --git a/src/battlemap/src/Struct/Tile.elm b/src/battlemap/src/Struct/Tile.elm index 399c368..a683be3 100644 --- a/src/battlemap/src/Struct/Tile.elm +++ b/src/battlemap/src/Struct/Tile.elm @@ -14,6 +14,7 @@ module Struct.Tile exposing get_instance_cost, get_location, get_icon_id, + get_type_id, get_variant_id, solve_tile_instance, decoder @@ -154,6 +155,9 @@ get_location tile_inst = tile_inst.location get_icon_id : Instance -> String get_icon_id tile_inst = (toString tile_inst.icon_id) +get_type_id: Instance -> Int +get_type_id tile_inst = tile_inst.type_id + get_variant_id : Instance -> Int get_variant_id tile_inst = ( diff --git a/src/battlemap/src/Struct/TurnResult.elm b/src/battlemap/src/Struct/TurnResult.elm index 9ee8c79..f122e0b 100644 --- a/src/battlemap/src/Struct/TurnResult.elm +++ b/src/battlemap/src/Struct/TurnResult.elm @@ -4,6 +4,9 @@ module Struct.TurnResult exposing Attack, Movement, WeaponSwitch, + PlayerVictory, + PlayerDefeat, + PlayerTurnStart, get_next_movement_dir, get_actor_index, get_attack_defender_index, @@ -49,10 +52,28 @@ type alias WeaponSwitch = character_index : Int } +type alias PlayerVictory = + { + player_index : Int + } + +type alias PlayerDefeat = + { + player_index : Int + } + +type alias PlayerTurnStart = + { + player_index : Int + } + type Type = Moved Movement | Attacked Attack | SwitchedWeapon WeaponSwitch + | PlayerWon PlayerVictory + | PlayerLost PlayerDefeat + | PlayerTurnStarted PlayerTurnStart -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- @@ -188,6 +209,27 @@ weapon_switch_decoder = (Json.Decode.field "ix" Json.Decode.int) ) +player_won_decoder : (Json.Decode.Decoder PlayerVictory) +player_won_decoder = + (Json.Decode.map + PlayerVictory + (Json.Decode.field "ix" Json.Decode.int) + ) + +player_lost_decoder : (Json.Decode.Decoder PlayerDefeat) +player_lost_decoder = + (Json.Decode.map + PlayerDefeat + (Json.Decode.field "ix" Json.Decode.int) + ) + +player_turn_started_decoder : (Json.Decode.Decoder PlayerTurnStart) +player_turn_started_decoder = + (Json.Decode.map + PlayerTurnStart + (Json.Decode.field "ix" Json.Decode.int) + ) + internal_decoder : String -> (Json.Decode.Decoder Type) internal_decoder kind = case kind of @@ -209,6 +251,24 @@ internal_decoder kind = (attack_decoder) ) + "pwo" -> + (Json.Decode.map + (\x -> (PlayerWon x)) + (player_won_decoder) + ) + + "plo" -> + (Json.Decode.map + (\x -> (PlayerLost x)) + (player_lost_decoder) + ) + + "pts" -> + (Json.Decode.map + (\x -> (PlayerTurnStarted x)) + (player_turn_started_decoder) + ) + other -> (Json.Decode.fail ( @@ -281,6 +341,14 @@ apply_to_characters turn_result characters = (Attacked attack) -> (apply_attack_to_characters attack characters) + (PlayerWon pvict) -> characters + + (PlayerLost pdefeat) -> + -- TODO: Their characters are supposed to disappear. + characters + + (PlayerTurnStarted pturns) -> characters + apply_step_to_characters : ( Type -> (Array.Array Struct.Character.Type) -> @@ -315,6 +383,12 @@ apply_step_to_characters turn_result characters = (Attacked attack) -> (apply_attack_step_to_characters attack characters) + (PlayerWon pvict) -> characters + + (PlayerLost pdefeat) -> characters + + (PlayerTurnStarted pturns) -> characters + apply_inverse_to_characters : ( Type -> (Array.Array Struct.Character.Type) -> @@ -349,6 +423,16 @@ apply_inverse_to_characters turn_result characters = (Attacked attack) -> (apply_inverse_attack_to_characters attack characters) + (PlayerWon pvict) -> characters + + (PlayerLost pdefeat) -> + -- TODO + -- Their characters are supposed to have disappeared, so we have to + -- make them visible again. + characters + + (PlayerTurnStarted pturns) -> characters + decoder : (Json.Decode.Decoder Type) decoder = (Json.Decode.field "t" Json.Decode.string) @@ -360,6 +444,9 @@ maybe_remove_step turn_result = (Moved movement) -> (maybe_remove_movement_step movement) (SwitchedWeapon _) -> Nothing (Attacked attack) -> (maybe_remove_attack_step attack) + (PlayerWon pvict) -> Nothing + (PlayerLost pdefeat) -> Nothing + (PlayerTurnStarted pturns) -> Nothing get_next_movement_dir : Movement -> Struct.Direction.Type get_next_movement_dir movement = @@ -379,3 +466,6 @@ get_actor_index turn_result = (Moved movement) -> movement.character_index (SwitchedWeapon weapon_switch) -> weapon_switch.character_index (Attacked attack) -> attack.attacker_index + (PlayerWon pvict) -> pvict.player_index + (PlayerLost pdefeat) -> pdefeat.player_index + (PlayerTurnStarted pturns) -> pturns.player_index diff --git a/src/battlemap/src/View/Battlemap/Character.elm b/src/battlemap/src/View/Battlemap/Character.elm index 5e1b509..68b6137 100644 --- a/src/battlemap/src/View/Battlemap/Character.elm +++ b/src/battlemap/src/View/Battlemap/Character.elm @@ -148,20 +148,30 @@ get_head_html char = ] ) -get_banner_html: Struct.Character.Type -> (Html.Html Struct.Event.Type) +get_banner_html : Struct.Character.Type -> (Html.Html Struct.Event.Type) get_banner_html char = - if ((Struct.Character.get_index char) % 8 == 0) - then - (Html.div - [ - (Html.Attributes.class "battlemap-character-icon-banner"), - (Html.Attributes.class "asset-character-icon-commander-banner") - ] - [ - ] - ) - else - (Util.Html.nothing) + case (Struct.Character.get_rank char) of + Struct.Character.Commander -> + (Html.div + [ + (Html.Attributes.class "battlemap-character-icon-banner"), + (Html.Attributes.class "asset-character-icon-commander-banner") + ] + [ + ] + ) + + Struct.Character.Target -> + (Html.div + [ + (Html.Attributes.class "battlemap-character-icon-banner"), + (Html.Attributes.class "asset-character-icon-target-banner") + ] + [ + ] + ) + + Struct.Character.Optional -> (Util.Html.nothing) get_actual_html : ( Struct.Model.Type -> diff --git a/src/battlemap/src/View/SubMenu/Status/TileInfo.elm b/src/battlemap/src/View/SubMenu/Status/TileInfo.elm index a478231..a009bc3 100644 --- a/src/battlemap/src/View/SubMenu/Status/TileInfo.elm +++ b/src/battlemap/src/View/SubMenu/Status/TileInfo.elm @@ -1,6 +1,8 @@ module View.SubMenu.Status.TileInfo exposing (get_html) -- Elm ------------------------------------------------------------------------- +import Dict + import Html import Html.Attributes @@ -14,6 +16,7 @@ import Struct.Location import Struct.Model import Struct.Tile +import Util.Html -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- @@ -46,21 +49,23 @@ get_icon tile = ] ) -get_name : (Struct.Tile.Instance -> (Html.Html Struct.Event.Type)) -get_name tile = - (Html.div - [ - (Html.Attributes.class "battlemap-tile-card-name") - ] - [ - (Html.text - ( - "Tile.Instance " - ++ (Struct.Tile.get_icon_id tile) - ) - ) - ] +get_name : ( + Struct.Model.Type -> + Struct.Tile.Instance -> + (Html.Html Struct.Event.Type) ) +get_name model tile = + case (Dict.get (Struct.Tile.get_type_id tile) model.tiles) of + Nothing -> (Util.Html.nothing) + (Just tile_type) -> + (Html.div + [ + (Html.Attributes.class "battlemap-tile-card-name") + ] + [ + (Html.text (Struct.Tile.get_name tile_type)) + ] + ) get_cost : (Struct.Tile.Instance -> (Html.Html Struct.Event.Type)) get_cost tile = @@ -120,7 +125,7 @@ get_html model loc = (Html.Attributes.class "battlemap-tile-card") ] [ - (get_name tile), + (get_name model tile), (Html.div [ (Html.Attributes.class "battlemap-tile-card-top") diff --git a/src/battlemap/src/View/SubMenu/Timeline.elm b/src/battlemap/src/View/SubMenu/Timeline.elm index d7e5393..5677da7 100644 --- a/src/battlemap/src/View/SubMenu/Timeline.elm +++ b/src/battlemap/src/View/SubMenu/Timeline.elm @@ -17,6 +17,9 @@ import Struct.Model import View.SubMenu.Timeline.Attack import View.SubMenu.Timeline.Movement import View.SubMenu.Timeline.WeaponSwitch +import View.SubMenu.Timeline.PlayerVictory +import View.SubMenu.Timeline.PlayerDefeat +import View.SubMenu.Timeline.PlayerTurnStart -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- @@ -50,6 +53,15 @@ get_turn_result_html characters player_id turn_result = weapon_switch ) + (Struct.TurnResult.PlayerWon pvict) -> + (View.SubMenu.Timeline.PlayerVictory.get_html pvict) + + (Struct.TurnResult.PlayerLost pdefeat) -> + (View.SubMenu.Timeline.PlayerDefeat.get_html pdefeat) + + (Struct.TurnResult.PlayerTurnStarted pturns) -> + (View.SubMenu.Timeline.PlayerTurnStart.get_html pturns) + true_get_html : ( (Array.Array Struct.Character.Type) -> String -> diff --git a/src/battlemap/src/View/SubMenu/Timeline/PlayerDefeat.elm b/src/battlemap/src/View/SubMenu/Timeline/PlayerDefeat.elm new file mode 100644 index 0000000..7bbff11 --- /dev/null +++ b/src/battlemap/src/View/SubMenu/Timeline/PlayerDefeat.elm @@ -0,0 +1,38 @@ +module View.SubMenu.Timeline.PlayerDefeat exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Html +import Html.Attributes +--import Html.Events + +-- Battlemap ------------------------------------------------------------------- +import Struct.Event +import Struct.TurnResult + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : ( + Struct.TurnResult.PlayerDefeat -> + (Html.Html Struct.Event.Type) + ) +get_html pdefeat = + (Html.div + [ + (Html.Attributes.class "battlemap-timeline-element"), + (Html.Attributes.class "battlemap-timeline-player-defeat") + ] + [ + (Html.text + ( + "Player " + ++ (toString pdefeat.player_index) + ++ " has been eliminated." + ) + ) + ] + ) diff --git a/src/battlemap/src/View/SubMenu/Timeline/PlayerTurnStart.elm b/src/battlemap/src/View/SubMenu/Timeline/PlayerTurnStart.elm new file mode 100644 index 0000000..11f639e --- /dev/null +++ b/src/battlemap/src/View/SubMenu/Timeline/PlayerTurnStart.elm @@ -0,0 +1,38 @@ +module View.SubMenu.Timeline.PlayerTurnStart exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Html +import Html.Attributes +--import Html.Events + +-- Battlemap ------------------------------------------------------------------- +import Struct.Event +import Struct.TurnResult + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : ( + Struct.TurnResult.PlayerTurnStart -> + (Html.Html Struct.Event.Type) + ) +get_html pturns = + (Html.div + [ + (Html.Attributes.class "battlemap-timeline-element"), + (Html.Attributes.class "battlemap-timeline-turn-start") + ] + [ + (Html.text + ( + "Player " + ++ (toString pturns.player_index) + ++ "'s turn has started." + ) + ) + ] + ) diff --git a/src/battlemap/src/View/SubMenu/Timeline/PlayerVictory.elm b/src/battlemap/src/View/SubMenu/Timeline/PlayerVictory.elm new file mode 100644 index 0000000..77494b6 --- /dev/null +++ b/src/battlemap/src/View/SubMenu/Timeline/PlayerVictory.elm @@ -0,0 +1,38 @@ +module View.SubMenu.Timeline.PlayerVictory exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Html +import Html.Attributes +--import Html.Events + +-- Battlemap ------------------------------------------------------------------- +import Struct.Event +import Struct.TurnResult + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : ( + Struct.TurnResult.PlayerVictory -> + (Html.Html Struct.Event.Type) + ) +get_html pvict = + (Html.div + [ + (Html.Attributes.class "battlemap-timeline-element"), + (Html.Attributes.class "battlemap-timeline-player-victory") + ] + [ + (Html.text + ( + "Player " + ++ (toString pvict.player_index) + ++ " has won the battle." + ) + ) + ] + ) -- cgit v1.2.3-70-g09d2