The example he put above is fine:  :)
```
subscriptions : Model -> Sub Msg
subscriptions model =
  if (gameIsNotFinished model && model.turn == AIToMove) then
    Time.every second AIMove
  else
    Sub.none
```
Though if you want it in another function you can do that too (useful to 
batch functionality together):
```
subAITick : Model -> Sub Msg
subAITick model =
  if (gameIsNotFinished model && model.turn == AIToMove) then
    Time.every second AIMove
  else
    Sub.none

subscriptions : Model -> Sub Msg
subscriptions model =
  subAITick
```
Or if you have other subscriptions too, batching them together:
```

subscriptions : Model -> Sub Msg
subscriptions model =
  Sub.batch
    [ subAITick
    ; otherSubscriptionsHere
    ]
```


On Monday, October 10, 2016 at 10:48:34 AM UTC-6, [email protected] wrote:
>
> Can you show code example :D I'm quite new to Elm and javascript. 
>
> Vào 23:45:45 UTC+7 Thứ Hai, ngày 10 tháng 10 năm 2016, OvermindDL1 đã viết:
>>
>> Yep, just call it from the subscriptions callback then.
>>
>>
>> On Monday, October 10, 2016 at 10:36:58 AM UTC-6, [email protected] 
>> wrote:
>>>
>>> This is quite a good idea. But can we define our own function that can 
>>> return a Sub Msg?
>>>
>>> Vào 20:41:40 UTC+7 Thứ Hai, ngày 10 tháng 10 năm 2016, Wouter In t Velt 
>>> đã viết:
>>>>
>>>> (disclaimer: I am also quite new to Elm) 
>>>> I always try to avoid creating my own Cmd: there is usually a better, 
>>>> less bug-prone way to achieve this (e.g. with resursive update calls).
>>>>
>>>> That said: I can see the logic in having a Msg originating from a 
>>>> "real" player, and another Msg from your AI player.
>>>>
>>>> What you could do, is make a subscription to Time, that is only active 
>>>> if it is the AI's turn to move.
>>>> That way, you get a) a delay before the AI makes a move + b) you do not 
>>>> need to create your own command
>>>> Whenever it is the user's turn, or as soon as the game is over, the 
>>>> subscription is turned off.
>>>>
>>>> Something like this:
>>>>
>>>> subscriptions : Model -> Sub Msg
>>>> subscriptions model =
>>>>   if (gameIsNotFinished model && model.turn == AIToMove) then
>>>>     Time.every second AIMove
>>>>   else
>>>>     Sub.none
>>>>
>>>> You would of course have to define your own functions to check if the 
>>>> game is still playing (no winner and no draw) and if it is the AI's turn 
>>>> to 
>>>> play.
>>>>
>>>

-- 
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.

Reply via email to