| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-05-28 12:28:22 +0200 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-05-28 12:28:22 +0200 | 
| commit | 72ffbf106d4ac051419edee91bcf8ce657fd1dc0 (patch) | |
| tree | ba587de6c62036fc0fda4974a5895c4626d9b9dc /src/battle | |
| parent | 65d258b1b2b9bb02e7b4dec3637c5e138e11f0e6 (diff) | |
Adds "movie" controls to the timeline.
Diffstat (limited to 'src/battle')
| -rw-r--r-- | src/battle/src/ElmModule/Update.elm | 13 | ||||
| -rw-r--r-- | src/battle/src/Struct/Event.elm | 3 | ||||
| -rw-r--r-- | src/battle/src/Struct/Puppeteer.elm | 24 | ||||
| -rw-r--r-- | src/battle/src/Update/Puppeteer.elm | 28 | ||||
| -rw-r--r-- | src/battle/src/Update/Puppeteer/Play.elm | 33 | ||||
| -rw-r--r-- | src/battle/src/Update/Puppeteer/SkipTo.elm | 72 | ||||
| -rw-r--r-- | src/battle/src/Update/Puppeteer/TogglePause.elm | 28 | ||||
| -rw-r--r-- | src/battle/src/View/Controlled.elm | 6 | ||||
| -rw-r--r-- | src/battle/src/View/SubMenu/Timeline.elm | 96 | 
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) +      ] +   ) | 


