53 lines
1.2 KiB
Haskell
53 lines
1.2 KiB
Haskell
module Types where
|
|
|
|
import qualified Graphics.Rendering.OpenGL as GL
|
|
import qualified Graphics.GLUtil as GLU
|
|
|
|
import Linear as L
|
|
|
|
import SpatialMath
|
|
|
|
import Physics.Bullet.Raw as Bullet
|
|
|
|
data StateData = StateData
|
|
{ ships :: [Ship]
|
|
, planet :: Ship
|
|
, camera :: Camera
|
|
, proj :: M44 Float
|
|
, program :: GLU.ShaderProgram
|
|
, physics :: Physics
|
|
, physicsObjects :: PhysicsObjects
|
|
}
|
|
|
|
data Ship = Ship
|
|
{ shipVao :: GL.VertexArrayObject
|
|
, shipVaoLen :: Int
|
|
, shipPos :: V3 Float
|
|
, shipRot :: Quaternion Float
|
|
}
|
|
|
|
data Camera = Camera
|
|
{ cameraFocus :: V3 Float
|
|
, cameraRot :: Euler Float
|
|
, cameraDist :: Float
|
|
}
|
|
|
|
data Physics = Physics
|
|
{ pBroadphase :: DbvtBroadphase
|
|
, pConfig :: DefaultCollisionConfiguration
|
|
, pDispatcher :: CollisionDispatcher
|
|
, pSolver :: SequentialImpulseConstraintSolver
|
|
, pWorld :: DiscreteDynamicsWorld
|
|
}
|
|
|
|
data PhysicsObjects = PhysicsObjects
|
|
{ poBigBall :: PhysBody SphereShape
|
|
, poSmallBalls :: [PhysBody SphereShape]
|
|
}
|
|
|
|
data PhysBody a = PhysBody
|
|
{ bodyShape :: a
|
|
, bodyMotionState :: MotionState
|
|
, bodyRigidBody :: RigidBody
|
|
, bodyMass :: Double
|
|
} deriving (Eq)
|