मैं अपने यात्री में बिंदु पर हूं, मैं खेल राज्य में खिलाड़ी-स्वतंत्र अपडेट को संभालने की कोशिश कर रहा हूं। संदर्भ के लिए, परियोजना here है (इस प्रश्न के लिए डेवेल शाखा प्रासंगिक है)।कार्यात्मक केला यात्री - टाइमर और खिलाड़ी स्वतंत्र घटनाक्रम
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
इस सही रास्ते है गठबंधन करने के लिए?
मुझे एहसास हुआ कि अद्यतन जीएस एक समस्या होगी, लेकिन मैं उस प्रश्न को दूसरे दिन के लिए सहेज रहा था। –