我在我的旅行者處我正試圖處理與遊戲狀態無關的玩家獨立更新。作爲參考,該項目是here(devel分支是這個問題的相關問題)。功能性香蕉旅行者 - 計時器和玩家獨立活動
Libraries/Universe/GameState.hs
有一個功能,updateGS
處理所有玩家更新的遊戲狀態。 EventNetwork
看起來像現在這樣。
makeNetworkDescription :: AddHandler PlayerCommand ->
AddHandler() ->
TChan GameState ->
IO EventNetwork
makeNetworkDescription addCommandEvent tickHandler gsChannel = compile $ do
eInput <- fromAddHandler addCommandEvent
eTick <- fromAddHandler tickHandler
let bGameState = accumB initialGS $ updateGS <$> eInput
eGameState <- changes bGameState
reactimate $ (\n -> (atomically $ writeTChan gsChannel n)) <$> eGameState
實現此計時器的問題是,我所看到的所有示例都有一個不同於我的物理模擬的用例。這場比賽沒有物理參與。我正在嘗試使用計時器來獨立於玩家動作來評估遊戲狀態。目前,我想管理的唯一事情就是超空間旅行。當完全實現時,從一個星球移動到另一個星球會將Agent
的location
更改爲Right Hyperspace
。現在需要發生的是,當tick
發生時,distanceTraversed
遞增1。然後如果distanceTraversed
等於totalDistance
Agent
的位置變成Left Planet
。
那麼EventNetwork
的觀點會是什麼樣子呢?
let bHyperspace = accumB initialGS $ foo <$> eTick
現在的行爲
let bBaz = (++) <$> bGameState <*> bHyperspace
這是在正確的軌道相結合?
我已經意識到updateGS會成爲一個問題,但我將這個問題保存了一天。 – 2013-05-19 17:06:51