summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-06-28 18:30:31 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-06-28 18:30:31 +0200
commitb320a735c123297368a854c39e17daa455ce953e (patch)
treed5d9929893d179870ec4ee117b666d8cd776308d /src/battlemap
parentefadf0457d43945d836ac323f5e6c039838df659 (diff)
More banners, starting work on victory/defeat...
Diffstat (limited to 'src/battlemap')
-rw-r--r--src/battlemap/src/Struct/Character.elm21
-rw-r--r--src/battlemap/src/Struct/Tile.elm4
-rw-r--r--src/battlemap/src/Struct/TurnResult.elm90
-rw-r--r--src/battlemap/src/View/Battlemap/Character.elm36
-rw-r--r--src/battlemap/src/View/SubMenu/Status/TileInfo.elm35
-rw-r--r--src/battlemap/src/View/SubMenu/Timeline.elm12
-rw-r--r--src/battlemap/src/View/SubMenu/Timeline/PlayerDefeat.elm38
-rw-r--r--src/battlemap/src/View/SubMenu/Timeline/PlayerTurnStart.elm38
-rw-r--r--src/battlemap/src/View/SubMenu/Timeline/PlayerVictory.elm38
9 files changed, 284 insertions, 28 deletions
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."
+ )
+ )
+ ]
+ )