diff options
Diffstat (limited to 'src/Game/Internal/Types.hs')
| -rw-r--r-- | src/Game/Internal/Types.hs | 172 |
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 |
