For note, if you want to not get HandleKeyPress messages ever it should
actually be:
```elm
filters : Msg -> Model -> ( Msg, States Model Msg )filters msg model =
if model.state == Running then
case msg of
HandleKeyboardDown c ->
case Char.fromCode c ->
'P' -> ( PauseToggle, States.enableAll )
' ' -> ( JumpDown, States.enableAll )
'z' -> ( StartShooting, States.enableAll )
_ -> ( msg, States.disableAll )
HandleKeyboardUp c ->
case Char.fromCode c ->
' ' -> ( JumpUp, States.enableAll )
'z' -> ( StopShooting, States.enableAll )
_ -> ( msg, States.disableAll )
_ -> ( msg, States.enableAll )
else
case msg of
HandleKeyboardUp _ -> ( msg, States.disableAll )
HandleKeyboardDown _ -> ( msg, States.disableAll )
_ -> ( msg, States.enableAll )
```
Though if you are never handling HandleKeyboardUp/Down in your update it
does not matter anyway.
On Wednesday, August 10, 2016 at 10:59:40 AM UTC-6, OvermindDL1 wrote:
>
> > If there are alternatives *with currently available functions* to my
> proposal, very interested to hear it in this thread.
>
> That is why I looked at more options and started thinking about how it
> could also solve other filtering issues that I have, so a singular thing
> that could solve it all would be nice. :-)
>
>
> Given code from the dontfall game, the current top-post suggestion was to
> change subscriptions to be:
> ```elm
>
> subscriptions : GameData -> Sub GameMsgsubscriptions d =
> Sub.batch
> ([ Keyboard.downsSelectively (\c -> if Char.fromCode c == 'P' then
> Just PauseToogle else Nothing) ] ++
> if d.state == Running then
> [ AnimationFrame.diffs Tick
> , Keyboard.downsSelectively (\c -> if Char.fromCode c == ' '
> then Just JumpDown else Nothing)
> , Keyboard.upsSelectively (\c -> if Char.fromCode c == ' '
> then Just JumpUp else Nothing)
> ]
> else
> [])
>
> ```
>
> In the thing I proposed that can handle generic message filtering (not
> just subscription) would turn the above back into a fairly normal and
> readable style of:
> ```elm
>
> subscriptions : GameData -> Sub GameMsgsubscriptions d =
> Sub.batch
> [ Keyboard.downs HandleKeyboardDown
> , Keyboard.ups HandleKeyboardUps
> , if d.state == Running then AnimationFrame.diffs Tick else Sub.none
> ]
>
> ```
> And a new callback (added in the main where init/update/etc are, in my
> package is called 'filters') would be something like this, this is a very
> simple example and `filters` can do a lot more, but for simple keyboard
> filtering:
> ```elm
>
> filters : Msg -> Model -> ( Msg, States Model Msg )filters msg model =
> if model.state == Running then
> case msg of
> HandleKeyboardDown c ->
> case Char.fromCode c ->
> 'P' -> ( PauseToggle, States.enableAll )
> ' ' -> ( JumpDown, States.enableAll )
> _ -> ( msg, States.disableAll )
> HandleKeyboardUp c ->
> case Char.fromCode c ->
> ' ' -> ( JumpUp, States.enableAll )
> _ -> ( msg, States.disableAll )
> _ -> ( msg, States.enableAll )
> else
> ( msg, States.enableAll )
>
> ```
> You could also delegate to other TEA-style modules. You could filter out
> the Tick here instead of subscribing and unsubscribing (I like a simple
> 'subscriptions' callback). Anything with `States.disableAll` will disable
> all callbacks for that msg, so update will not be called, subscriptions
> will not be called, and view will not be called (it returns the cached
> values from last time so an exact match test of === in javascript shows
> they are identical and thus Elm will do nothing).
>
> With the above `filters` you will not ever get
> HandleKeyboardDown/HandleKeyboardUp in your `update` at all, ever, it is
> either translated to another message or entirely canceled. Adding more
> message conversions is as simple as adding another case, so you could add,
> say a shooting state with like:
> ```elm
>
> filters : Msg -> Model -> ( Msg, States Model Msg )filters msg model =
> if model.state == Running then
> case msg of
> HandleKeyboardDown c ->
> case Char<span class="pl-k" style="box-sizing: border-box;
> text-shadow: none !important; box-shadow: none !important; color: rgb(133,
>
>
--
You received this message because you are subscribed to the Google Groups "Elm
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.