| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ElmModule/Init.elm | 12 | ||||
| -rw-r--r-- | src/ElmModule/Update.elm | 12 | ||||
| -rw-r--r-- | src/Struct/Flags.elm | 22 | ||||
| -rw-r--r-- | src/Struct/Model.elm | 9 | ||||
| -rw-r--r-- | src/Tonkadur/Execute.elm | 34 | ||||
| -rw-r--r-- | src/Update/Story.elm | 14 | 
6 files changed, 81 insertions, 22 deletions
| diff --git a/src/ElmModule/Init.elm b/src/ElmModule/Init.elm index 08c2540..28a82e0 100644 --- a/src/ElmModule/Init.elm +++ b/src/ElmModule/Init.elm @@ -16,5 +16,13 @@ import Comm.LoadStory  --------------------------------------------------------------------------------  init : Struct.Flags.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type))  init flags = -   -- TODO: read flags and request story. -   ((Struct.Model.new), (Comm.LoadStory.request "/story/0.json")) +   ( +      (Struct.Model.new flags), +      (Comm.LoadStory.request +         ( +            "/story/" +            ++ (Struct.Flags.force_get_parameter flags "story") +            ++ ".json" +         ) +      ) +   ) diff --git a/src/ElmModule/Update.elm b/src/ElmModule/Update.elm index 9e45fde..9fc9a93 100644 --- a/src/ElmModule/Update.elm +++ b/src/ElmModule/Update.elm @@ -30,7 +30,17 @@ update event model =        (Struct.Event.LoadStory http_result) ->           case http_result of              (Ok story) -> -               ((Update.Story.start {model | tonkadur = story}), Cmd.none) +               ( +                  (Update.Story.start +                     {model | +                        tonkadur = +                           {story | +                              random_seed = model.tonkadur.random_seed +                           } +                     } +                  ), +                     Cmd.none +               )              (Err error) ->                 ( diff --git a/src/Struct/Flags.elm b/src/Struct/Flags.elm index 3614469..b44b79e 100644 --- a/src/Struct/Flags.elm +++ b/src/Struct/Flags.elm @@ -14,7 +14,7 @@ import List  type alias Type =     {        url_parameters : (List (List String)), -      random_number : Int +      random_seed : Int     }  -------------------------------------------------------------------------------- @@ -26,12 +26,26 @@ parameter_as_url parameter =        [name, value] -> (name ++ "=" ++ value)        _ -> "" +get_first : (a -> Bool) -> (List a) -> (Maybe a) +get_first fun list = +   (List.head (List.filter fun list)) +  --------------------------------------------------------------------------------  -- EXPORTED --------------------------------------------------------------------  -------------------------------------------------------------------------------- -force_get_parameter : String -> Type -> String -force_get_parameter parameter flags = "" -   -- TODO: implement using Tactician Online's, but without Shared.Util.List +force_get_parameter : Type -> String -> String +force_get_parameter flags parameter = +   case +      (get_first +         (\e -> ((List.head e) == (Just parameter))) +         flags.url_parameters +      ) +   of +      Nothing -> "" +      (Just a) -> +         case (List.tail a) of +            (Just (h :: t)) -> h +            _ -> ""  get_parameters_as_url : Type -> String  get_parameters_as_url flags = diff --git a/src/Struct/Model.elm b/src/Struct/Model.elm index cf4d475..50acf92 100644 --- a/src/Struct/Model.elm +++ b/src/Struct/Model.elm @@ -11,6 +11,7 @@ import Tonkadur.Types  -- Local Module ----------------------------------------------------------------  import Struct.UI +import Struct.Flags  --------------------------------------------------------------------------------  -- TYPES ----------------------------------------------------------------------- @@ -18,6 +19,7 @@ import Struct.UI  type alias Type =     {        tonkadur : Tonkadur.Types.State, +      flags : Struct.Flags.Type,        ui : Struct.UI.Type     } @@ -28,9 +30,10 @@ type alias Type =  --------------------------------------------------------------------------------  -- EXPORTED --------------------------------------------------------------------  -------------------------------------------------------------------------------- -new : Type -new = +new : Struct.Flags.Type -> Type +new flags =     { -      tonkadur = (Tonkadur.Types.new_state 42), +      tonkadur = (Tonkadur.Types.new_state flags.random_seed), +      flags = flags,        ui = (Struct.UI.new)     } diff --git a/src/Tonkadur/Execute.elm b/src/Tonkadur/Execute.elm index 4a94701..cf10833 100644 --- a/src/Tonkadur/Execute.elm +++ b/src/Tonkadur/Execute.elm @@ -61,9 +61,14 @@ assert : (  assert condition label state =     if (Tonkadur.Types.value_to_bool (Tonkadur.Compute.compute state condition))     then -      -- TODO: some special error report        state -   else state +   else +      {state | +         last_instruction_effect = +            (Tonkadur.Types.MustDisplayError +               (Tonkadur.Compute.compute state label) +            ) +      }  display : (        Tonkadur.Types.Computation -> @@ -71,13 +76,13 @@ display : (        Tonkadur.Types.State     )  display label state = -   -- TODO: where do we put displayed values? -   state +   {state | +      last_instruction_effect = +         (Tonkadur.Types.MustDisplay (Tonkadur.Compute.compute state label)) +   }  end : Tonkadur.Types.State -> Tonkadur.Types.State -end state = -   -- TODO: what do we do with this? -   state +end state = {state | last_instruction_effect = Tonkadur.Types.MustEnd }  extra_instruction : (        String -> @@ -86,9 +91,18 @@ extra_instruction : (        Tonkadur.Types.State     )  extra_instruction name parameters state = -   -- No extra instruction supported. -   -- TODO: error report. -   state +   {state | +      last_instruction_effect = +         (Tonkadur.Types.MustDisplayError +            (Tonkadur.Types.StringValue +               ( +                  "No such extra instruction \"" +                  ++ name +                  ++ "\"." +               ) +            ) +         ) +   }  initialize : (        String -> diff --git a/src/Update/Story.elm b/src/Update/Story.elm index d2fc75f..3c9d041 100644 --- a/src/Update/Story.elm +++ b/src/Update/Story.elm @@ -42,9 +42,19 @@ step model =                    }                 ) -            Nothing -> model -- TODO: error +            Nothing -> +               {model | +                  ui = +                     (Struct.UI.display_string_error +                        ( +                           "[Programming error] Cannot 'step' Tonkadur story:" +                           ++ " Not in MustContinue state." +                        ) +                        model.ui +                     ) +               } -      Tonkadur.Types.MustEnd -> model -- TODO +      Tonkadur.Types.MustEnd -> model -- TODO, although that might be right.        (Tonkadur.Types.MustPromptCommand min max label) ->           {model | | 


