summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle')
-rw-r--r--src/battle/src/ElmModule/Update.elm13
-rw-r--r--src/battle/src/Struct/Event.elm3
-rw-r--r--src/battle/src/Struct/Puppeteer.elm24
-rw-r--r--src/battle/src/Update/Puppeteer.elm28
-rw-r--r--src/battle/src/Update/Puppeteer/Play.elm33
-rw-r--r--src/battle/src/Update/Puppeteer/SkipTo.elm72
-rw-r--r--src/battle/src/Update/Puppeteer/TogglePause.elm28
-rw-r--r--src/battle/src/View/Controlled.elm6
-rw-r--r--src/battle/src/View/SubMenu/Timeline.elm96
9 files changed, 281 insertions, 22 deletions
diff --git a/src/battle/src/ElmModule/Update.elm b/src/battle/src/ElmModule/Update.elm
index 5e9d4ca..46940b4 100644
--- a/src/battle/src/ElmModule/Update.elm
+++ b/src/battle/src/ElmModule/Update.elm
@@ -16,6 +16,10 @@ import Update.SelectCharacterOrTile
import Update.SelectTile
import Update.SetRequestedHelp
+import Update.Puppeteer.Play
+import Update.Puppeteer.TogglePause
+import Update.Puppeteer.SkipTo
+
import Update.Character.ScrollTo
import Update.Character.DisplayNavigator
@@ -70,6 +74,15 @@ update event model =
Struct.Event.AnimationEnded ->
(Update.Puppeteer.apply_to model)
+ (Struct.Event.PuppeteerPlay forward) ->
+ (Update.Puppeteer.Play.apply_to forward model)
+
+ (Struct.Event.PuppeteerSkipTo forward) ->
+ (Update.Puppeteer.SkipTo.apply_to forward model)
+
+ Struct.Event.PuppeteerTogglePause ->
+ (Update.Puppeteer.TogglePause.apply_to model)
+
(Struct.Event.DirectionRequested d) ->
(Update.CharacterTurn.RequestDirection.apply_to d model)
diff --git a/src/battle/src/Struct/Event.elm b/src/battle/src/Struct/Event.elm
index 7b91ae9..0e6de21 100644
--- a/src/battle/src/Struct/Event.elm
+++ b/src/battle/src/Struct/Event.elm
@@ -23,6 +23,9 @@ type Type =
| SkillRequest
| SkipRequest
| MoveRequest
+ | PuppeteerPlay Bool
+ | PuppeteerSkipTo Bool
+ | PuppeteerTogglePause
| CharacterOrTileSelected BattleMap.Struct.Location.Ref
| CharacterSelected Int
| CharacterCardSelected Int
diff --git a/src/battle/src/Struct/Puppeteer.elm b/src/battle/src/Struct/Puppeteer.elm
index 60e554c..3460546 100644
--- a/src/battle/src/Struct/Puppeteer.elm
+++ b/src/battle/src/Struct/Puppeteer.elm
@@ -9,6 +9,10 @@ module Struct.Puppeteer exposing
step,
get_is_playing_forward,
set_is_playing_forward,
+ get_is_paused,
+ set_is_paused,
+ get_is_ignoring_time,
+ set_is_ignoring_time,
maybe_get_current_action
)
@@ -29,7 +33,9 @@ type alias Type =
{
forward_actions : (List Struct.PuppeteerAction.Type),
backward_actions : (List Struct.PuppeteerAction.Type),
- is_playing_forward : Bool
+ is_ignoring_time : Bool,
+ is_playing_forward : Bool,
+ is_paused : Bool
}
--------------------------------------------------------------------------------
@@ -44,7 +50,9 @@ new =
{
forward_actions = [],
backward_actions = [],
- is_playing_forward = True
+ is_ignoring_time = False,
+ is_playing_forward = True,
+ is_paused = False
}
append_forward : (List Struct.PuppeteerAction.Type) -> Type -> Type
@@ -93,6 +101,18 @@ get_is_playing_forward puppeteer = puppeteer.is_playing_forward
set_is_playing_forward : Bool -> Type -> Type
set_is_playing_forward val puppeteer = {puppeteer | is_playing_forward = val}
+get_is_paused : Type -> Bool
+get_is_paused puppeteer = puppeteer.is_paused
+
+set_is_paused : Bool -> Type -> Type
+set_is_paused val puppeteer = {puppeteer | is_paused = val}
+
+get_is_ignoring_time : Type -> Bool
+get_is_ignoring_time puppeteer = puppeteer.is_ignoring_time
+
+set_is_ignoring_time : Bool -> Type -> Type
+set_is_ignoring_time val puppeteer = {puppeteer | is_ignoring_time = val}
+
maybe_get_current_action : Type -> (Maybe (Struct.PuppeteerAction.Type))
maybe_get_current_action puppeteer =
if (puppeteer.is_playing_forward)
diff --git a/src/battle/src/Update/Puppeteer.elm b/src/battle/src/Update/Puppeteer.elm
index b79cddb..b21584f 100644
--- a/src/battle/src/Update/Puppeteer.elm
+++ b/src/battle/src/Update/Puppeteer.elm
@@ -199,22 +199,28 @@ apply_to_rec model cmds =
else (apply_effects_backward effects model)
)
in
- (
- new_model,
- (Cmd.batch
- (
- (Delay.after
- time
- Delay.Second
- Struct.Event.AnimationEnded
+ if (Struct.Puppeteer.get_is_ignoring_time model.puppeteer)
+ then (apply_to_rec new_model (new_cmds ++ cmds))
+ else
+ (
+ new_model,
+ (Cmd.batch
+ (
+ (Delay.after
+ time
+ Delay.Second
+ Struct.Event.AnimationEnded
+ )
+ :: (new_cmds ++ cmds)
)
- :: (new_cmds ++ cmds)
)
)
- )
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type))
-apply_to model = (apply_to_rec model [])
+apply_to model =
+ if (Struct.Puppeteer.get_is_paused model.puppeteer)
+ then (model, Cmd.none)
+ else (apply_to_rec model [])
diff --git a/src/battle/src/Update/Puppeteer/Play.elm b/src/battle/src/Update/Puppeteer/Play.elm
new file mode 100644
index 0000000..6df2347
--- /dev/null
+++ b/src/battle/src/Update/Puppeteer/Play.elm
@@ -0,0 +1,33 @@
+module Update.Puppeteer.Play exposing (apply_to)
+
+-- Elm -------------------------------------------------------------------------
+
+-- Local module ----------------------------------------------------------------
+import Struct.Event
+import Struct.Model
+import Struct.Puppeteer
+
+import Update.Puppeteer
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+apply_to : (
+ Bool ->
+ Struct.Model.Type ->
+ (Struct.Model.Type, (Cmd Struct.Event.Type))
+ )
+apply_to play_forward model =
+ (Update.Puppeteer.apply_to
+ {model|
+ puppeteer =
+ (Struct.Puppeteer.set_is_playing_forward
+ play_forward
+ model.puppeteer
+ )
+ }
+ )
diff --git a/src/battle/src/Update/Puppeteer/SkipTo.elm b/src/battle/src/Update/Puppeteer/SkipTo.elm
new file mode 100644
index 0000000..d3b20aa
--- /dev/null
+++ b/src/battle/src/Update/Puppeteer/SkipTo.elm
@@ -0,0 +1,72 @@
+module Update.Puppeteer.SkipTo exposing (apply_to)
+
+-- Elm -------------------------------------------------------------------------
+
+-- Shared ----------------------------------------------------------------------
+import Shared.Update.Sequence
+
+-- Local module ----------------------------------------------------------------
+import Struct.Event
+import Struct.Model
+import Struct.Puppeteer
+
+import Update.Puppeteer
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+restore_puppeteer : (
+ Bool ->
+ Bool ->
+ Struct.Model.Type ->
+ (Struct.Model.Type, (Cmd Struct.Event.Type))
+ )
+restore_puppeteer is_paused play_forward model =
+ (
+ {model |
+ puppeteer =
+ (Struct.Puppeteer.set_is_ignoring_time
+ False
+ (Struct.Puppeteer.set_is_paused
+ is_paused
+ (Struct.Puppeteer.set_is_playing_forward
+ play_forward
+ model.puppeteer
+ )
+ )
+ )
+ },
+ Cmd.none
+ )
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+apply_to : (
+ Bool ->
+ Struct.Model.Type ->
+ (Struct.Model.Type, (Cmd Struct.Event.Type))
+ )
+apply_to skip_forward model =
+ (Shared.Update.Sequence.sequence
+ [
+ (Update.Puppeteer.apply_to),
+ (restore_puppeteer
+ (Struct.Puppeteer.get_is_paused model.puppeteer)
+ (Struct.Puppeteer.get_is_playing_forward model.puppeteer)
+ )
+ ]
+ {model |
+ puppeteer =
+ (Struct.Puppeteer.set_is_ignoring_time
+ True
+ (Struct.Puppeteer.set_is_paused
+ False
+ (Struct.Puppeteer.set_is_playing_forward
+ skip_forward
+ model.puppeteer
+ )
+ )
+ )
+ }
+ )
diff --git a/src/battle/src/Update/Puppeteer/TogglePause.elm b/src/battle/src/Update/Puppeteer/TogglePause.elm
new file mode 100644
index 0000000..a093483
--- /dev/null
+++ b/src/battle/src/Update/Puppeteer/TogglePause.elm
@@ -0,0 +1,28 @@
+module Update.Puppeteer.TogglePause exposing (apply_to)
+
+-- Elm -------------------------------------------------------------------------
+
+-- Local module ----------------------------------------------------------------
+import Struct.Event
+import Struct.Model
+import Struct.Puppeteer
+
+import Update.Puppeteer
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type))
+apply_to model =
+ (Update.Puppeteer.apply_to
+ {model|
+ puppeteer =
+ (Struct.Puppeteer.set_is_paused
+ (not (Struct.Puppeteer.get_is_paused model.puppeteer))
+ model.puppeteer
+ )
+ }
+ )
diff --git a/src/battle/src/View/Controlled.elm b/src/battle/src/View/Controlled.elm
index 8f78fd9..aa34b48 100644
--- a/src/battle/src/View/Controlled.elm
+++ b/src/battle/src/View/Controlled.elm
@@ -58,7 +58,7 @@ action_or_undo_button current_action relevant_action event =
(Html.Attributes.class "action-button"),
(action_to_class relevant_action),
(Html.Events.onClick Struct.Event.UndoActionRequest),
- (Html.Attributes.class "undo")
+ (Html.Attributes.class "active")
]
else
[
@@ -147,7 +147,7 @@ path_button char_turn =
(Html.Attributes.class "action-button"),
(Html.Attributes.class "path-button"),
(Html.Events.onClick Struct.Event.UndoActionRequest),
- (Html.Attributes.class "undo")
+ (Html.Attributes.class "active")
]
else
[
@@ -158,7 +158,7 @@ path_button char_turn =
(
if ((Struct.CharacterTurn.get_path char_turn) == [])
then ""
- else "undo"
+ else "active"
)
)
]
diff --git a/src/battle/src/View/SubMenu/Timeline.elm b/src/battle/src/View/SubMenu/Timeline.elm
index 2c1818e..0af85fe 100644
--- a/src/battle/src/View/SubMenu/Timeline.elm
+++ b/src/battle/src/View/SubMenu/Timeline.elm
@@ -5,6 +5,7 @@ import Array
import Html
import Html.Attributes
+import Html.Events
import Html.Lazy
-- Shared ----------------------------------------------------------------------
@@ -14,8 +15,9 @@ import Shared.Util.Html
import Struct.Battle
import Struct.Character
import Struct.Event
-import Struct.TurnResult
import Struct.Model
+import Struct.Puppeteer
+import Struct.TurnResult
import View.SubMenu.Timeline.Attack
import View.SubMenu.Timeline.Movement
@@ -66,12 +68,11 @@ get_turn_result_html characters player_ix turn_result =
(Struct.TurnResult.PlayerTurnStarted pturns) ->
(View.SubMenu.Timeline.PlayerTurnStart.get_html pturns)
-true_get_html : Struct.Battle.Type -> (Html.Html Struct.Event.Type)
-true_get_html battle =
+get_events_html : Struct.Battle.Type -> (Html.Html Struct.Event.Type)
+get_events_html battle =
(Html.div
[
- (Html.Attributes.class "tabmenu-content"),
- (Html.Attributes.class "tabmenu-timeline-tab")
+ (Html.Attributes.class "tabmenu-timeline-events")
]
(Array.toList
(Array.map
@@ -84,9 +85,92 @@ true_get_html battle =
)
)
+get_skip_to_button : Bool -> (Html.Html Struct.Event.Type)
+get_skip_to_button skip_forward =
+ (Html.button
+ [
+ (Html.Attributes.class
+ (
+ if (skip_forward)
+ then "skip_forward"
+ else "skip_backward"
+ )
+ ),
+ (Html.Events.onClick (Struct.Event.PuppeteerSkipTo skip_forward))
+ ]
+ [
+ ]
+ )
+
+get_play_button : Bool -> Bool -> (Html.Html Struct.Event.Type)
+get_play_button play_forward current_dir =
+ (Html.button
+ [
+ (Html.Attributes.class
+ (
+ if (play_forward)
+ then "play_forward"
+ else "play_backward"
+ )
+ ),
+ (
+ if (play_forward == current_dir)
+ then (Html.Attributes.class "active")
+ else (Html.Events.onClick (Struct.Event.PuppeteerPlay play_forward))
+ )
+ ]
+ [
+ ]
+ )
+
+get_pause_button : Bool -> (Html.Html Struct.Event.Type)
+get_pause_button is_paused =
+ (Html.button
+ [
+ (Html.Attributes.class "pause"),
+ (Html.Events.onClick Struct.Event.PuppeteerTogglePause),
+ (Html.Attributes.class
+ (
+ if (is_paused)
+ then "active"
+ else ""
+ )
+ )
+ ]
+ [
+ ]
+ )
+
+get_controls_html : Struct.Puppeteer.Type -> (Html.Html Struct.Event.Type)
+get_controls_html puppeteer =
+ let
+ is_playing_forward = (Struct.Puppeteer.get_is_playing_forward puppeteer)
+ is_paused = (Struct.Puppeteer.get_is_paused puppeteer)
+ in
+ (Html.div
+ [
+ (Html.Attributes.class "tabmenu-timeline-controls")
+ ]
+ [
+ (get_skip_to_button False),
+ (get_play_button False is_playing_forward),
+ (get_pause_button is_paused),
+ (get_play_button True is_playing_forward),
+ (get_skip_to_button True)
+ ]
+ )
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
get_html : Struct.Model.Type -> (Html.Html Struct.Event.Type)
get_html model =
- (Html.Lazy.lazy (true_get_html) model.battle)
+ (Html.div
+ [
+ (Html.Attributes.class "tabmenu-content"),
+ (Html.Attributes.class "tabmenu-timeline-tab")
+ ]
+ [
+ (get_controls_html model.puppeteer),
+ (Html.Lazy.lazy (get_events_html) model.battle)
+ ]
+ )