Tôi đang ở điểm trong Khách du lịch của mình Tôi đang cố xử lý các cập nhật độc lập với người chơi đối với trạng thái trò chơi. Để tham khảo, dự án là here (nhánh devel là một liên quan cho câu hỏi này).Chức năng Banana Traveler - Sự kiện độc lập về Timer và người chơi
Libraries/Universe/GameState.hs
có chức năng, updateGS
xử lý tất cả cập nhật trình phát cho trạng thái trò chơi. EventNetwork
trông giống như thế này ngay bây giờ.
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
Vấn đề trong việc thực hiện hẹn giờ này là tất cả các ví dụ tôi đã xem có trường hợp sử dụng khác với mô phỏng vật lý của tôi. Không có vật lý nào tham gia vào trò chơi này. Tôi đang cố gắng sử dụng bộ hẹn giờ để trạng thái trò chơi được đánh giá độc lập với các hành động của người chơi. Bây giờ, điều duy nhất tôi muốn quản lý là du lịch không gian. Khi được triển khai hoàn toàn, di chuyển từ hành tinh này sang hành tinh khác sẽ thay đổi số củathành Right Hyperspace
. Những gì cần phải xảy ra bây giờ, là khi một số tick
xảy ra, số tiền tăng thêm là distanceTraversed
. Sau đó, nếu distanceTraversed
bằng địa chỉ totalDistance
Agent
của trở thành Left Planet
.
Vì vậy, điều đó sẽ trông như thế nào từ quan điểm của EventNetwork
?
let bHyperspace = accumB initialGS $ foo <$> eTick
tại để kết hợp hành vi
let bBaz = (++) <$> bGameState <*> bHyperspace
Đây có phải là đi đúng hướng?
Tôi đã nhận ra rằng updateGS sẽ là một vấn đề, nhưng tôi đã lưu câu hỏi đó cho một ngày khác. –