| summaryrefslogtreecommitdiff |
diff options
| -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 | ||||
| -rw-r--r-- | www/index.html | 5 |
7 files changed, 85 insertions, 23 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 | diff --git a/www/index.html b/www/index.html index 76ce02c..c8155fc 100644 --- a/www/index.html +++ b/www/index.html @@ -15,7 +15,10 @@ { flags: { - url_parameters: tonkadur.urlparams.get_parameters() + url_parameters: tonkadur.urlparams.get_parameters(), + random_seed: Math.floor( + (Math.random() * Number.MAX_SAFE_INTEGER) + ) }, node: document.getElementById("elm-page") } |


