summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ElmModule/Init.elm12
-rw-r--r--src/ElmModule/Update.elm12
-rw-r--r--src/Struct/Flags.elm22
-rw-r--r--src/Struct/Model.elm9
-rw-r--r--src/Tonkadur/Execute.elm34
-rw-r--r--src/Update/Story.elm14
-rw-r--r--www/index.html5
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")
}