summaryrefslogtreecommitdiff
path: root/src/Game/Internal/Types.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Game/Internal/Types.hs')
-rw-r--r--src/Game/Internal/Types.hs172
1 files changed, 99 insertions, 73 deletions
diff --git a/src/Game/Internal/Types.hs b/src/Game/Internal/Types.hs
index 8095cfb..b8e7229 100644
--- a/src/Game/Internal/Types.hs
+++ b/src/Game/Internal/Types.hs
@@ -1,69 +1,80 @@
-{-# LANGUAGE NamedFieldPuns, OverloadedRecordDot #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedRecordDot #-}
-{- |
- - Module : Game.Internal.Types
- - Description :
- - Copyright : 2025 Andromeda
- - License : BSD 3-clause
- - Maintainer : Matrix @Andromeda:tchncs.de
- - Stability : Experimental
- -}
+-- |
+-- - Module : Game.Internal.Types
+-- - Description :
+-- - Copyright : 2025 Andromeda
+-- - License : BSD 3-clause
+-- - Maintainer : Matrix @Andromeda:tchncs.de
+-- - Stability : Experimental
module Game.Internal.Types
- ( Object(..)
- , toGLMatrix
- , Model(camera, objects, cursorDeltaPos, cursorPos, program, keys, wprop)
- , mkModel
- , Camera(camPos, camPitch, camYaw, camReference, mouseSensitivity, camVel, strafeStrength, jumpStrength, hasJumped, airTime)
- , mkCamera
- , WorldProperties(g, friction, up)
- , mkWorldProperties
- ) where
+ ( Object (..),
+ toGLMatrix,
+ Model (camera, objects, cursorDeltaPos, cursorPos, program, keys, wprop),
+ mkModel,
+ Camera (camPos, camPitch, camYaw, camReference, mouseSensitivity, camVel, strafeStrength, jumpStrength, hasJumped, airTime),
+ mkCamera,
+ WorldProperties (g, friction, up),
+ mkWorldProperties,
+ )
+where
import qualified Graphics.Rendering.OpenGL as GL
import qualified Graphics.UI.GLFW as GLFW
-
+import Linear (V3 (..), V4 (..))
import qualified Linear as L
-import Linear (V3, V3(..), V4(..))
-- | represents a single draw call
data Object = Object
- { vao :: GL.VertexArrayObject -- ^ vao of vertex buffer
- , numIndicies :: GL.NumArrayIndices -- ^ number of vertices
- , numComponents :: GL.NumComponents -- ^ dimensionallity; vec3, vec4, etc.
- , primitiveMode :: GL.PrimitiveMode -- ^ primitive mode to be drawn with
- } deriving (Show)
+ { -- | vao of vertex buffer
+ vao :: GL.VertexArrayObject,
+ -- | number of vertices
+ numIndicies :: GL.NumArrayIndices,
+ -- | dimensionallity; vec3, vec4, etc.
+ numComponents :: GL.NumComponents,
+ -- | primitive mode to be drawn with
+ primitiveMode :: GL.PrimitiveMode
+ }
+ deriving (Show)
-- | converts M44 to a 16array for OpenGL
toGLMatrix :: L.M44 GL.GLfloat -> [GL.GLfloat]
toGLMatrix (V4 (V4 c00 c01 c02 c03) (V4 c10 c11 c12 c13) (V4 c20 c21 c22 c23) (V4 c30 c31 c32 c33)) =
- [ c00
- , c01
- , c02
- , c03
- , c10
- , c11
- , c12
- , c13
- , c20
- , c21
- , c22
- , c23
- , c30
- , c31
- , c32
- , c33
+ [ c00,
+ c01,
+ c02,
+ c03,
+ c10,
+ c11,
+ c12,
+ c13,
+ c20,
+ c21,
+ c22,
+ c23,
+ c30,
+ c31,
+ c32,
+ c33
]
-- | gamestate
data Model = Model
- { camera :: Camera
- , cursorDeltaPos :: (Double, Double) -- ^ frame-on-frame delta mouse position
- , cursorPos :: (Double, Double) -- ^ current mouse position
- , keys :: [GLFW.Key] -- ^ currently pressed keys
- , objects :: [Object] -- ^ draw calls
- , program :: GL.Program -- ^ shader program
- , wprop :: WorldProperties
- } deriving (Show)
+ { camera :: Camera,
+ -- | frame-on-frame delta mouse position
+ cursorDeltaPos :: (Double, Double),
+ -- | current mouse position
+ cursorPos :: (Double, Double),
+ -- | currently pressed keys
+ keys :: [GLFW.Key],
+ -- | draw calls
+ objects :: [Object],
+ -- | shader program
+ program :: GL.Program,
+ wprop :: WorldProperties
+ }
+ deriving (Show)
-- | smart constructor for Model
mkModel :: Camera -> [Object] -> GL.Program -> WorldProperties -> Model
@@ -72,29 +83,40 @@ mkModel camera objects program wprop =
-- | camera
data Camera = Camera
- { camPos :: V3 Float -- ^ position in world space
- , camPitch :: Float -- ^ pitch in radians, up positive
- , camYaw :: Float -- ^ yaw in radians, right positive
- , camReference :: V3 Float -- ^ reference direction; orientation applied to
- , camVel :: V3 Float -- ^ velocity in world space
- , mouseSensitivity :: Float -- ^ scale factor for mouse movement
- , strafeStrength :: Float -- ^ scale factor for strafe
- , jumpStrength :: Float -- ^ scale factor for jump initial velocity
- , hasJumped :: Bool -- ^ whether the camera still has jumping state
- , airTime :: Float -- ^ time since jumping state entered in seconds
- } deriving (Show)
+ { -- | position in world space
+ camPos :: V3 Float,
+ -- | pitch in radians, up positive
+ camPitch :: Float,
+ -- | yaw in radians, right positive
+ camYaw :: Float,
+ -- | reference direction; orientation applied to
+ camReference :: V3 Float,
+ -- | velocity in world space
+ camVel :: V3 Float,
+ -- | scale factor for mouse movement
+ mouseSensitivity :: Float,
+ -- | scale factor for strafe
+ strafeStrength :: Float,
+ -- | scale factor for jump initial velocity
+ jumpStrength :: Float,
+ -- | whether the camera still has jumping state
+ hasJumped :: Bool,
+ -- | time since jumping state entered in seconds
+ airTime :: Float
+ }
+ deriving (Show)
-- | smart constructor for Camera
mkCamera ::
- V3 Float
- -> Float
- -> Float
- -> V3 Float
- -> V3 Float
- -> Float
- -> Float
- -> Float
- -> Camera
+ V3 Float ->
+ Float ->
+ Float ->
+ V3 Float ->
+ V3 Float ->
+ Float ->
+ Float ->
+ Float ->
+ Camera
mkCamera camPos camPitch camYaw camReference camVel mouseSensitivity strafeStrength jumpStrength =
Camera
camPos
@@ -110,10 +132,14 @@ mkCamera camPos camPitch camYaw camReference camVel mouseSensitivity strafeStren
-- | physical properties of the world
data WorldProperties = WorldProperties
- { g :: Float -- ^ gravity `g`
- , friction :: Float -- ^ scale factor for floor friction
- , up :: V3 Float -- ^ global up vector
- } deriving (Show)
+ { -- | gravity `g`
+ g :: Float,
+ -- | scale factor for floor friction
+ friction :: Float,
+ -- | global up vector
+ up :: V3 Float
+ }
+ deriving (Show)
-- | smart constructor for WorldProperties
mkWorldProperties :: Float -> Float -> V3 Float -> WorldProperties