| summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/Tonkadur')
| -rw-r--r-- | src/Tonkadur/Compute.elm | 11 | ||||
| -rw-r--r-- | src/Tonkadur/Execute.elm | 40 | ||||
| -rw-r--r-- | src/Tonkadur/Json.elm | 46 | ||||
| -rw-r--r-- | src/Tonkadur/Types.elm | 24 |
4 files changed, 89 insertions, 32 deletions
diff --git a/src/Tonkadur/Compute.elm b/src/Tonkadur/Compute.elm index 149f37d..a75ef7c 100644 --- a/src/Tonkadur/Compute.elm +++ b/src/Tonkadur/Compute.elm @@ -108,6 +108,7 @@ cast state from to param = ) "float" -> (Tonkadur.Types.FloatValue (toFloat int)) + "bool" -> (Tonkadur.Types.BoolValue (not (int == 0))) "int" -> (Tonkadur.Types.IntValue int) _ -> (unsupported_cast from to) @@ -130,6 +131,11 @@ cast state from to param = Nothing -> (unsupported_cast from to) (Just result) -> (Tonkadur.Types.IntValue result) + "bool" -> + (Tonkadur.Types.BoolValue + ((String.toLower (String.trim as_string)) == "true") + ) + "text" -> (Tonkadur.Types.TextValue text_v) _ -> (unsupported_cast from to) @@ -146,6 +152,11 @@ cast state from to param = Nothing -> (unsupported_cast from to) (Just result) -> (Tonkadur.Types.IntValue result) + "bool" -> + (Tonkadur.Types.BoolValue + ((String.toLower (String.trim string)) == "true") + ) + "text" -> (Tonkadur.Types.TextValue (Tonkadur.Types.StringText string)) diff --git a/src/Tonkadur/Execute.elm b/src/Tonkadur/Execute.elm index cf10833..a65df88 100644 --- a/src/Tonkadur/Execute.elm +++ b/src/Tonkadur/Execute.elm @@ -30,7 +30,7 @@ add_event_option : ( ) add_event_option name parameters state = (Tonkadur.Types.append_option - (Tonkadur.Types.Event + (Tonkadur.Types.EventOption name (List.map (Tonkadur.Compute.compute state) parameters) ) @@ -44,7 +44,7 @@ add_text_option : ( ) add_text_option label state = (Tonkadur.Types.append_option - (Tonkadur.Types.Choice + (Tonkadur.Types.TextOption (Tonkadur.Types.value_to_text_or_string (Tonkadur.Compute.compute state label) ) @@ -60,8 +60,7 @@ assert : ( ) assert condition label state = if (Tonkadur.Types.value_to_bool (Tonkadur.Compute.compute state condition)) - then - state + then state else {state | last_instruction_effect = @@ -168,16 +167,16 @@ prompt_command prompt_data state = ) } -prompt_string : ( +prompt_float : ( Tonkadur.Types.PromptInstructionData -> Tonkadur.Types.State -> Tonkadur.Types.State ) -prompt_string prompt_data state = +prompt_float prompt_data state = {state | memorized_target = (Tonkadur.Compute.compute state prompt_data.address), last_instruction_effect = - (Tonkadur.Types.MustPromptString + (Tonkadur.Types.MustPromptFloat (Tonkadur.Compute.compute state prompt_data.min) (Tonkadur.Compute.compute state prompt_data.max) (Tonkadur.Compute.compute state prompt_data.label) @@ -200,6 +199,22 @@ prompt_integer prompt_data state = ) } +prompt_string : ( + Tonkadur.Types.PromptInstructionData -> + Tonkadur.Types.State -> + Tonkadur.Types.State + ) +prompt_string prompt_data state = + {state | + memorized_target = (Tonkadur.Compute.compute state prompt_data.address), + last_instruction_effect = + (Tonkadur.Types.MustPromptString + (Tonkadur.Compute.compute state prompt_data.min) + (Tonkadur.Compute.compute state prompt_data.max) + (Tonkadur.Compute.compute state prompt_data.label) + ) + } + remove : ( Tonkadur.Types.Computation -> Tonkadur.Types.State -> @@ -286,13 +301,13 @@ set_random address min max state = random_seed = next_random_seed } -set : ( +set_value : ( Tonkadur.Types.Computation -> Tonkadur.Types.Computation -> Tonkadur.Types.State -> Tonkadur.Types.State ) -set address value state = +set_value address value state = {state | memory = (Tonkadur.Types.set_at_address @@ -347,6 +362,9 @@ execute instruction state = (Tonkadur.Types.PromptCommand prompt_data) -> (increment_program_counter (prompt_command prompt_data new_state)) + (Tonkadur.Types.PromptFloat prompt_data) -> + (increment_program_counter (prompt_float prompt_data new_state)) + (Tonkadur.Types.PromptInteger prompt_data) -> (increment_program_counter (prompt_integer prompt_data new_state)) @@ -363,6 +381,6 @@ execute instruction state = (Tonkadur.Types.SetRandom address min max) -> (increment_program_counter (set_random address min max new_state)) - (Tonkadur.Types.Set address value) -> - (increment_program_counter (set address value new_state)) + (Tonkadur.Types.SetValue address value) -> + (increment_program_counter (set_value address value new_state)) diff --git a/src/Tonkadur/Json.elm b/src/Tonkadur/Json.elm index 3860548..d7ae3b3 100644 --- a/src/Tonkadur/Json.elm +++ b/src/Tonkadur/Json.elm @@ -31,13 +31,13 @@ specific_computation_decoder name = (\ename params content -> (Tonkadur.Types.AddTextEffect ename params content) ) - (Json.Decode.field "effect" (Json.Decode.string)) + (Json.Decode.field "name" (Json.Decode.string)) (Json.Decode.field "parameters" (Json.Decode.list (computation_decoder)) ) (Json.Decode.field - "content" + "values" (Json.Decode.list (computation_decoder)) ) ) @@ -45,7 +45,7 @@ specific_computation_decoder name = "address" -> (Json.Decode.map (\address -> (Tonkadur.Types.Address address)) - (Json.Decode.field "address" (computation_decoder)) + (Json.Decode.field "value_or_target" (computation_decoder)) ) "cast" -> @@ -105,15 +105,21 @@ specific_computation_decoder name = "relative_address" -> (Json.Decode.map2 (\base extra -> (Tonkadur.Types.RelativeAddress base extra)) - (Json.Decode.field "base" (computation_decoder)) + (Json.Decode.field "target" (computation_decoder)) (Json.Decode.field "extra" (computation_decoder)) ) + "size" -> + (Json.Decode.map + (\computation -> (Tonkadur.Types.Size computation)) + (Json.Decode.field "target" (computation_decoder)) + ) + "text" -> (Json.Decode.map (\computation -> (Tonkadur.Types.Text computation)) (Json.Decode.field - "content" + "values" (Json.Decode.list (computation_decoder)) ) ) @@ -121,13 +127,13 @@ specific_computation_decoder name = "value_of" -> (Json.Decode.map (\computation -> (Tonkadur.Types.ValueOf computation)) - (Json.Decode.field "reference" (computation_decoder)) + (Json.Decode.field "target" (computation_decoder)) ) _ -> (Json.Decode.map (\params -> (Tonkadur.Types.ExtraComputation name params)) - (Json.Decode.field "params" + (Json.Decode.field "parameters" (Json.Decode.list (computation_decoder)) ) ) @@ -156,7 +162,7 @@ prompt_instruction_data_decoder = |> (Json.Decode.Pipeline.required "target" (computation_decoder)) -- label - |> (Json.Decode.Pipeline.required "label" (computation_decoder)) + |> (Json.Decode.Pipeline.required "message" (computation_decoder)) ) specific_instruction_decoder : ( @@ -167,9 +173,9 @@ specific_instruction_decoder name = "add_event_option" -> (Json.Decode.map2 (\oname params -> (Tonkadur.Types.AddEventOption oname params)) - (Json.Decode.field "event" (Json.Decode.string)) + (Json.Decode.field "name" (Json.Decode.string)) (Json.Decode.field - "reference" + "parameters" (Json.Decode.list (computation_decoder)) ) ) @@ -177,7 +183,7 @@ specific_instruction_decoder name = "add_text_option" -> (Json.Decode.map (\computation -> (Tonkadur.Types.AddTextOption computation)) - (Json.Decode.field "label" (computation_decoder)) + (Json.Decode.field "value" (computation_decoder)) ) "assert" -> @@ -190,7 +196,7 @@ specific_instruction_decoder name = "display" -> (Json.Decode.map (\computation -> (Tonkadur.Types.Display computation)) - (Json.Decode.field "content" (computation_decoder)) + (Json.Decode.field "value" (computation_decoder)) ) "end" -> (Json.Decode.succeed Tonkadur.Types.End) @@ -198,7 +204,7 @@ specific_instruction_decoder name = (Json.Decode.map2 (\type_name ref -> (Tonkadur.Types.Initialize type_name ref)) (Json.Decode.field "type" (Json.Decode.string)) - (Json.Decode.field "reference" (computation_decoder)) + (Json.Decode.field "target" (computation_decoder)) ) "prompt_command" -> @@ -207,6 +213,12 @@ specific_instruction_decoder name = (prompt_instruction_data_decoder) ) + "prompt_float" -> + (Json.Decode.map + (\data -> (Tonkadur.Types.PromptFloat data)) + (prompt_instruction_data_decoder) + ) + "prompt_integer" -> (Json.Decode.map (\data -> (Tonkadur.Types.PromptInteger data)) @@ -222,7 +234,7 @@ specific_instruction_decoder name = "remove" -> (Json.Decode.map (\computation -> (Tonkadur.Types.Remove computation)) - (Json.Decode.field "reference" (computation_decoder)) + (Json.Decode.field "target" (computation_decoder)) ) "resolve_choice" -> (Json.Decode.succeed Tonkadur.Types.ResolveChoice) @@ -242,15 +254,15 @@ specific_instruction_decoder name = "set_value" -> (Json.Decode.map2 - (\target value -> (Tonkadur.Types.Set target value)) - (Json.Decode.field "reference" (computation_decoder)) + (\target value -> (Tonkadur.Types.SetValue target value)) + (Json.Decode.field "target" (computation_decoder)) (Json.Decode.field "value" (computation_decoder)) ) _ -> (Json.Decode.map (\params -> (Tonkadur.Types.ExtraInstruction name params)) - (Json.Decode.field "params" + (Json.Decode.field "parameters" (Json.Decode.list (computation_decoder)) ) ) diff --git a/src/Tonkadur/Types.elm b/src/Tonkadur/Types.elm index 77cd707..2a4df76 100644 --- a/src/Tonkadur/Types.elm +++ b/src/Tonkadur/Types.elm @@ -33,8 +33,8 @@ type Value = | StructureValue (Dict.Dict String Value) type Option = - Choice RichText - | Event String (List Value) + TextOption RichText + | EventOption String (List Value) type Computation = AddTextEffect String (List Computation) (List Computation) @@ -69,24 +69,25 @@ type Instruction = | ExtraInstruction String (List Computation) | Initialize String Computation | PromptCommand PromptInstructionData + | PromptFloat PromptInstructionData | PromptInteger PromptInstructionData | PromptString PromptInstructionData | Remove Computation | ResolveChoice | SetPC Computation | SetRandom Computation Computation Computation - | Set Computation Computation + | SetValue Computation Computation type InstructionEffect = MustContinue | MustEnd | MustPromptCommand Value Value Value + | MustPromptFloat Value Value Value | MustPromptInteger Value Value Value | MustPromptString Value Value Value | MustPromptChoice | MustDisplay Value | MustDisplayError Value - | MustExtraEffect String (List Value) type alias State = { @@ -372,6 +373,9 @@ elm_list_to_wyrd_list elm_value_to_wyrd_value list = set_last_choice_index : Int -> State -> State set_last_choice_index ix state = {state | last_choice_index = ix} +clear_all_options : State -> State +clear_all_options state = {state | available_options = []} + set_target_from_string : String -> State -> State set_target_from_string str state = {state | @@ -383,6 +387,18 @@ set_target_from_string str state = ) } +set_target_from_float : Float -> State -> State +set_target_from_float float state = + {state | + memory = + (set_at_address + (value_to_address state.memorized_target) + (FloatValue float) + state.memory + ) + } + + set_target_from_integer : Int -> State -> State set_target_from_integer int state = {state | |


