나는 여행자의 시점에 있습니다. 게임 상태에 대한 플레이어 독립적 인 업데이트를 처리하려고합니다. 참고로이 프로젝트는 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
이 하나씩 증가합니다. 그런 다음 distanceTraversed
이 totalDistance
과 일치하면 Agent
의 위치는 Left Planet
이됩니다.
그렇다면 EventNetwork
의 관점에서 볼 때 무엇입니까?
let bHyperspace = accumB initialGS $ foo <$> eTick
지금 행동
let bBaz = (++) <$> bGameState <*> bHyperspace
이 바른 길인가
을 결합?
나는 updateGS가 문제가 될 것이라는 것을 깨달았지만 다른 날은 그 질문을 저축하고있었습니다. –