gore-and-ash-demo-1.0.0.0: src/client/Game/Bullet.hs
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Game.Bullet(
module ReExport
, bulletActor
) where
import Control.Wire
import Prelude hiding (id, (.))
import Game.Bullet.Data as ReExport
import Game.Core
import Game.Data
import Game.GoreAndAsh
import Game.GoreAndAsh.Sync
import Game.GoreAndAsh.Actor
import Game.GoreAndAsh.Network
import Graphics.Bullet
instance RemoteActor BulletId Bullet where
type RemoteActorState BulletId = Bullet
type RemoteActorId Bullet = BulletId
bulletActor :: Peer -> BulletId -> AppActor BulletId Game Bullet
bulletActor peer i = makeFixedActor i $ stateWire initalBullet mainController
where
initalBullet = Bullet {
bulletId = i
, bulletPos = 0
, bulletVel = 0
, bulletOwner = fromCounter (-1)
}
mainController :: AppWire (Game, Bullet) Bullet
mainController = proc (g, b) -> do
liftGameMonad3 renderBullet -< (bulletPos b, bulletVel b, gameCamera g)
forceNF . clientSync bulletSync peer i -< b
bulletSync :: FullSync AppMonad BulletId Bullet
bulletSync = Bullet
<$> pure i
<*> serverSide 0 bulletPos
<*> serverSide 1 bulletVel
<*> serverSide 2 bulletOwner