{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
module Apecs.Physics.Types where
import Apecs
import Apecs.Core
import Data.Bits
import Data.Char (intToDigit)
import qualified Data.IntMap as M
import qualified Data.IntSet as S
import Data.IORef
import qualified Data.Map as Map
import Data.Monoid ((<>))
import qualified Foreign.C.Types as C
import Foreign.ForeignPtr
import Foreign.Ptr
import Language.C.Inline
import Language.C.Inline.Context
import qualified Language.C.Types as C
import qualified Language.Haskell.TH as TH
import Linear.V2
import Numeric (showIntAtBase)
phycsCtx :: Context
phycsCtx :: Context
phycsCtx = Context
baseCtx forall a. Semigroup a => a -> a -> a
<> Context
funCtx forall a. Semigroup a => a -> a -> a
<> Context
ctx
where ctx :: Context
ctx = forall a. Monoid a => a
mempty { ctxTypesTable :: TypesTable
ctxTypesTable = TypesTable
phycsTypesTable }
phycsTypesTable :: Map.Map C.TypeSpecifier TH.TypeQ
phycsTypesTable :: TypesTable
phycsTypesTable = forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
[ (CIdentifier -> TypeSpecifier
C.TypeName CIdentifier
"cpArbiter", [t| Collision |])
, (CIdentifier -> TypeSpecifier
C.TypeName CIdentifier
"cpBody", [t| Body |])
, (CIdentifier -> TypeSpecifier
C.TypeName CIdentifier
"cpCollisionHandler", [t| CollisionHandler |])
, (CIdentifier -> TypeSpecifier
C.TypeName CIdentifier
"cpConstraint", [t| Constraint |])
, (CIdentifier -> TypeSpecifier
C.TypeName CIdentifier
"cpDataPointer", [t| C.CUInt |])
, (CIdentifier -> TypeSpecifier
C.TypeName CIdentifier
"cpShape", [t| Shape |])
, (CIdentifier -> TypeSpecifier
C.TypeName CIdentifier
"cpPointQueryInfo", [t| PointQueryResult |])
, (CIdentifier -> TypeSpecifier
C.TypeName CIdentifier
"cpVect", [t| V2 C.CDouble |])
, (CIdentifier -> TypeSpecifier
C.TypeName CIdentifier
"cpSpace", [t| FrnSpace |])
]
data Physics
type Vec = V2 Double
type BVec = Vec
type WVec = Vec
data Body = DynamicBody | KinematicBody | StaticBody deriving (Body -> Body -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Body -> Body -> Bool
$c/= :: Body -> Body -> Bool
== :: Body -> Body -> Bool
$c== :: Body -> Body -> Bool
Eq, Eq Body
Body -> Body -> Bool
Body -> Body -> Ordering
Body -> Body -> Body
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Body -> Body -> Body
$cmin :: Body -> Body -> Body
max :: Body -> Body -> Body
$cmax :: Body -> Body -> Body
>= :: Body -> Body -> Bool
$c>= :: Body -> Body -> Bool
> :: Body -> Body -> Bool
$c> :: Body -> Body -> Bool
<= :: Body -> Body -> Bool
$c<= :: Body -> Body -> Bool
< :: Body -> Body -> Bool
$c< :: Body -> Body -> Bool
compare :: Body -> Body -> Ordering
$ccompare :: Body -> Body -> Ordering
Ord, Int -> Body
Body -> Int
Body -> [Body]
Body -> Body
Body -> Body -> [Body]
Body -> Body -> Body -> [Body]
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: Body -> Body -> Body -> [Body]
$cenumFromThenTo :: Body -> Body -> Body -> [Body]
enumFromTo :: Body -> Body -> [Body]
$cenumFromTo :: Body -> Body -> [Body]
enumFromThen :: Body -> Body -> [Body]
$cenumFromThen :: Body -> Body -> [Body]
enumFrom :: Body -> [Body]
$cenumFrom :: Body -> [Body]
fromEnum :: Body -> Int
$cfromEnum :: Body -> Int
toEnum :: Int -> Body
$ctoEnum :: Int -> Body
pred :: Body -> Body
$cpred :: Body -> Body
succ :: Body -> Body
$csucc :: Body -> Body
Enum)
newtype Position = Position WVec
newtype Velocity = Velocity WVec
newtype Force = Force Vec
newtype Torque = Torque Double
newtype BodyMass = BodyMass Double deriving (BodyMass -> BodyMass -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BodyMass -> BodyMass -> Bool
$c/= :: BodyMass -> BodyMass -> Bool
== :: BodyMass -> BodyMass -> Bool
$c== :: BodyMass -> BodyMass -> Bool
Eq, Int -> BodyMass -> ShowS
[BodyMass] -> ShowS
BodyMass -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [BodyMass] -> ShowS
$cshowList :: [BodyMass] -> ShowS
show :: BodyMass -> [Char]
$cshow :: BodyMass -> [Char]
showsPrec :: Int -> BodyMass -> ShowS
$cshowsPrec :: Int -> BodyMass -> ShowS
Show)
newtype Moment = Moment Double deriving (Moment -> Moment -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Moment -> Moment -> Bool
$c/= :: Moment -> Moment -> Bool
== :: Moment -> Moment -> Bool
$c== :: Moment -> Moment -> Bool
Eq, Int -> Moment -> ShowS
[Moment] -> ShowS
Moment -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Moment] -> ShowS
$cshowList :: [Moment] -> ShowS
show :: Moment -> [Char]
$cshow :: Moment -> [Char]
showsPrec :: Int -> Moment -> ShowS
$cshowsPrec :: Int -> Moment -> ShowS
Show)
newtype Angle = Angle Double deriving (Angle -> Angle -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Angle -> Angle -> Bool
$c/= :: Angle -> Angle -> Bool
== :: Angle -> Angle -> Bool
$c== :: Angle -> Angle -> Bool
Eq, Int -> Angle -> ShowS
[Angle] -> ShowS
Angle -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Angle] -> ShowS
$cshowList :: [Angle] -> ShowS
show :: Angle -> [Char]
$cshow :: Angle -> [Char]
showsPrec :: Int -> Angle -> ShowS
$cshowsPrec :: Int -> Angle -> ShowS
Show)
newtype AngularVelocity = AngularVelocity Double
newtype CenterOfGravity = CenterOfGravity BVec
newtype ShapeList = ShapeList [Entity]
newtype ConstraintList = ConstraintList [Entity]
data Shape = Shape Entity Convex
data Convex = Convex [BVec] Double deriving (Convex -> Convex -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Convex -> Convex -> Bool
$c/= :: Convex -> Convex -> Bool
== :: Convex -> Convex -> Bool
$c== :: Convex -> Convex -> Bool
Eq, Int -> Convex -> ShowS
[Convex] -> ShowS
Convex -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Convex] -> ShowS
$cshowList :: [Convex] -> ShowS
show :: Convex -> [Char]
$cshow :: Convex -> [Char]
showsPrec :: Int -> Convex -> ShowS
$cshowsPrec :: Int -> Convex -> ShowS
Show)
newtype Sensor = Sensor Bool deriving (Sensor -> Sensor -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Sensor -> Sensor -> Bool
$c/= :: Sensor -> Sensor -> Bool
== :: Sensor -> Sensor -> Bool
$c== :: Sensor -> Sensor -> Bool
Eq, Int -> Sensor -> ShowS
[Sensor] -> ShowS
Sensor -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Sensor] -> ShowS
$cshowList :: [Sensor] -> ShowS
show :: Sensor -> [Char]
$cshow :: Sensor -> [Char]
showsPrec :: Int -> Sensor -> ShowS
$cshowsPrec :: Int -> Sensor -> ShowS
Show)
newtype Elasticity = Elasticity Double deriving (Elasticity -> Elasticity -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Elasticity -> Elasticity -> Bool
$c/= :: Elasticity -> Elasticity -> Bool
== :: Elasticity -> Elasticity -> Bool
$c== :: Elasticity -> Elasticity -> Bool
Eq, Int -> Elasticity -> ShowS
[Elasticity] -> ShowS
Elasticity -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Elasticity] -> ShowS
$cshowList :: [Elasticity] -> ShowS
show :: Elasticity -> [Char]
$cshow :: Elasticity -> [Char]
showsPrec :: Int -> Elasticity -> ShowS
$cshowsPrec :: Int -> Elasticity -> ShowS
Show)
newtype Mass = Mass Double deriving (Mass -> Mass -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Mass -> Mass -> Bool
$c/= :: Mass -> Mass -> Bool
== :: Mass -> Mass -> Bool
$c== :: Mass -> Mass -> Bool
Eq, Int -> Mass -> ShowS
[Mass] -> ShowS
Mass -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Mass] -> ShowS
$cshowList :: [Mass] -> ShowS
show :: Mass -> [Char]
$cshow :: Mass -> [Char]
showsPrec :: Int -> Mass -> ShowS
$cshowsPrec :: Int -> Mass -> ShowS
Show)
newtype Density = Density Double deriving (Density -> Density -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Density -> Density -> Bool
$c/= :: Density -> Density -> Bool
== :: Density -> Density -> Bool
$c== :: Density -> Density -> Bool
Eq, Int -> Density -> ShowS
[Density] -> ShowS
Density -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Density] -> ShowS
$cshowList :: [Density] -> ShowS
show :: Density -> [Char]
$cshow :: Density -> [Char]
showsPrec :: Int -> Density -> ShowS
$cshowsPrec :: Int -> Density -> ShowS
Show)
newtype Friction = Friction Double deriving (Friction -> Friction -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Friction -> Friction -> Bool
$c/= :: Friction -> Friction -> Bool
== :: Friction -> Friction -> Bool
$c== :: Friction -> Friction -> Bool
Eq, Int -> Friction -> ShowS
[Friction] -> ShowS
Friction -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Friction] -> ShowS
$cshowList :: [Friction] -> ShowS
show :: Friction -> [Char]
$cshow :: Friction -> [Char]
showsPrec :: Int -> Friction -> ShowS
$cshowsPrec :: Int -> Friction -> ShowS
Show)
newtype SurfaceVelocity = SurfaceVelocity Vec deriving (SurfaceVelocity -> SurfaceVelocity -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SurfaceVelocity -> SurfaceVelocity -> Bool
$c/= :: SurfaceVelocity -> SurfaceVelocity -> Bool
== :: SurfaceVelocity -> SurfaceVelocity -> Bool
$c== :: SurfaceVelocity -> SurfaceVelocity -> Bool
Eq, Int -> SurfaceVelocity -> ShowS
[SurfaceVelocity] -> ShowS
SurfaceVelocity -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [SurfaceVelocity] -> ShowS
$cshowList :: [SurfaceVelocity] -> ShowS
show :: SurfaceVelocity -> [Char]
$cshow :: SurfaceVelocity -> [Char]
showsPrec :: Int -> SurfaceVelocity -> ShowS
$cshowsPrec :: Int -> SurfaceVelocity -> ShowS
Show)
type CollisionGroup = CUInt
data CollisionFilter = CollisionFilter
{ CollisionFilter -> CollisionGroup
filterGroup :: CollisionGroup
, CollisionFilter -> Bitmask
filterCategories :: Bitmask
, CollisionFilter -> Bitmask
filterMask :: Bitmask
} deriving (CollisionFilter -> CollisionFilter -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CollisionFilter -> CollisionFilter -> Bool
$c/= :: CollisionFilter -> CollisionFilter -> Bool
== :: CollisionFilter -> CollisionFilter -> Bool
$c== :: CollisionFilter -> CollisionFilter -> Bool
Eq, Int -> CollisionFilter -> ShowS
[CollisionFilter] -> ShowS
CollisionFilter -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [CollisionFilter] -> ShowS
$cshowList :: [CollisionFilter] -> ShowS
show :: CollisionFilter -> [Char]
$cshow :: CollisionFilter -> [Char]
showsPrec :: Int -> CollisionFilter -> ShowS
$cshowsPrec :: Int -> CollisionFilter -> ShowS
Show)
newtype Bitmask = Bitmask CUInt deriving (Bitmask -> Bitmask -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Bitmask -> Bitmask -> Bool
$c/= :: Bitmask -> Bitmask -> Bool
== :: Bitmask -> Bitmask -> Bool
$c== :: Bitmask -> Bitmask -> Bool
Eq, Eq Bitmask
Bitmask
Int -> Bitmask
Bitmask -> Bool
Bitmask -> Int
Bitmask -> Maybe Int
Bitmask -> Bitmask
Bitmask -> Int -> Bool
Bitmask -> Int -> Bitmask
Bitmask -> Bitmask -> Bitmask
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: Bitmask -> Int
$cpopCount :: Bitmask -> Int
rotateR :: Bitmask -> Int -> Bitmask
$crotateR :: Bitmask -> Int -> Bitmask
rotateL :: Bitmask -> Int -> Bitmask
$crotateL :: Bitmask -> Int -> Bitmask
unsafeShiftR :: Bitmask -> Int -> Bitmask
$cunsafeShiftR :: Bitmask -> Int -> Bitmask
shiftR :: Bitmask -> Int -> Bitmask
$cshiftR :: Bitmask -> Int -> Bitmask
unsafeShiftL :: Bitmask -> Int -> Bitmask
$cunsafeShiftL :: Bitmask -> Int -> Bitmask
shiftL :: Bitmask -> Int -> Bitmask
$cshiftL :: Bitmask -> Int -> Bitmask
isSigned :: Bitmask -> Bool
$cisSigned :: Bitmask -> Bool
bitSize :: Bitmask -> Int
$cbitSize :: Bitmask -> Int
bitSizeMaybe :: Bitmask -> Maybe Int
$cbitSizeMaybe :: Bitmask -> Maybe Int
testBit :: Bitmask -> Int -> Bool
$ctestBit :: Bitmask -> Int -> Bool
complementBit :: Bitmask -> Int -> Bitmask
$ccomplementBit :: Bitmask -> Int -> Bitmask
clearBit :: Bitmask -> Int -> Bitmask
$cclearBit :: Bitmask -> Int -> Bitmask
setBit :: Bitmask -> Int -> Bitmask
$csetBit :: Bitmask -> Int -> Bitmask
bit :: Int -> Bitmask
$cbit :: Int -> Bitmask
zeroBits :: Bitmask
$czeroBits :: Bitmask
rotate :: Bitmask -> Int -> Bitmask
$crotate :: Bitmask -> Int -> Bitmask
shift :: Bitmask -> Int -> Bitmask
$cshift :: Bitmask -> Int -> Bitmask
complement :: Bitmask -> Bitmask
$ccomplement :: Bitmask -> Bitmask
xor :: Bitmask -> Bitmask -> Bitmask
$cxor :: Bitmask -> Bitmask -> Bitmask
.|. :: Bitmask -> Bitmask -> Bitmask
$c.|. :: Bitmask -> Bitmask -> Bitmask
.&. :: Bitmask -> Bitmask -> Bitmask
$c.&. :: Bitmask -> Bitmask -> Bitmask
Bits)
instance Show Bitmask where
show :: Bitmask -> [Char]
show (Bitmask CollisionGroup
mask) = [Char]
"Bitmask 0b" forall a. [a] -> [a] -> [a]
++ forall a. (Integral a, Show a) => a -> (Int -> Char) -> a -> ShowS
showIntAtBase CollisionGroup
2 Int -> Char
intToDigit CollisionGroup
mask [Char]
""
data FrnSpace
data FrnVec
data Space c = Space
{ forall c. Space c -> IOMap BodyRecord
spBodies :: IOMap BodyRecord
, forall c. Space c -> IOMap (Record Shape)
spShapes :: IOMap (Record Shape)
, forall c. Space c -> IOMap (Record Constraint)
spConstraints :: IOMap (Record Constraint)
, forall c. Space c -> IOMap (Record CollisionHandler)
spHandlers :: IOMap (Record CollisionHandler)
, forall c. Space c -> SpacePtr
spacePtr :: SpacePtr
}
type instance Elem (Space a) = a
data BodyRecord = BodyRecord
{ BodyRecord -> Ptr Body
brPtr :: Ptr Body
, BodyRecord -> Body
brBody :: Body
, BodyRecord -> IORef IntSet
brShapes :: IORef S.IntSet
, BodyRecord -> IORef IntSet
brConstraints :: IORef S.IntSet
}
data Record a = Record
{ forall a. Record a -> Ptr a
recPtr :: Ptr a
, forall a. Record a -> a
recVal :: a
}
type IOMap a = IORef (M.IntMap a)
type PtrMap a = IOMap (Ptr a)
type SpacePtr = ForeignPtr FrnSpace
newtype Iterations = Iterations Int deriving (Iterations -> Iterations -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Iterations -> Iterations -> Bool
$c/= :: Iterations -> Iterations -> Bool
== :: Iterations -> Iterations -> Bool
$c== :: Iterations -> Iterations -> Bool
Eq, Int -> Iterations -> ShowS
[Iterations] -> ShowS
Iterations -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Iterations] -> ShowS
$cshowList :: [Iterations] -> ShowS
show :: Iterations -> [Char]
$cshow :: Iterations -> [Char]
showsPrec :: Int -> Iterations -> ShowS
$cshowsPrec :: Int -> Iterations -> ShowS
Show)
newtype Gravity = Gravity Vec deriving (Gravity -> Gravity -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Gravity -> Gravity -> Bool
$c/= :: Gravity -> Gravity -> Bool
== :: Gravity -> Gravity -> Bool
$c== :: Gravity -> Gravity -> Bool
Eq, Int -> Gravity -> ShowS
[Gravity] -> ShowS
Gravity -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Gravity] -> ShowS
$cshowList :: [Gravity] -> ShowS
show :: Gravity -> [Char]
$cshow :: Gravity -> [Char]
showsPrec :: Int -> Gravity -> ShowS
$cshowsPrec :: Int -> Gravity -> ShowS
Show)
newtype Damping = Damping Double deriving (Damping -> Damping -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Damping -> Damping -> Bool
$c/= :: Damping -> Damping -> Bool
== :: Damping -> Damping -> Bool
$c== :: Damping -> Damping -> Bool
Eq, Int -> Damping -> ShowS
[Damping] -> ShowS
Damping -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Damping] -> ShowS
$cshowList :: [Damping] -> ShowS
show :: Damping -> [Char]
$cshow :: Damping -> [Char]
showsPrec :: Int -> Damping -> ShowS
$cshowsPrec :: Int -> Damping -> ShowS
Show)
newtype IdleSpeedThreshold = IdleSpeedThreshold Double deriving (IdleSpeedThreshold -> IdleSpeedThreshold -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: IdleSpeedThreshold -> IdleSpeedThreshold -> Bool
$c/= :: IdleSpeedThreshold -> IdleSpeedThreshold -> Bool
== :: IdleSpeedThreshold -> IdleSpeedThreshold -> Bool
$c== :: IdleSpeedThreshold -> IdleSpeedThreshold -> Bool
Eq, Int -> IdleSpeedThreshold -> ShowS
[IdleSpeedThreshold] -> ShowS
IdleSpeedThreshold -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [IdleSpeedThreshold] -> ShowS
$cshowList :: [IdleSpeedThreshold] -> ShowS
show :: IdleSpeedThreshold -> [Char]
$cshow :: IdleSpeedThreshold -> [Char]
showsPrec :: Int -> IdleSpeedThreshold -> ShowS
$cshowsPrec :: Int -> IdleSpeedThreshold -> ShowS
Show)
newtype SleepIdleTime = SleepIdleTime Double deriving (SleepIdleTime -> SleepIdleTime -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SleepIdleTime -> SleepIdleTime -> Bool
$c/= :: SleepIdleTime -> SleepIdleTime -> Bool
== :: SleepIdleTime -> SleepIdleTime -> Bool
$c== :: SleepIdleTime -> SleepIdleTime -> Bool
Eq, Int -> SleepIdleTime -> ShowS
[SleepIdleTime] -> ShowS
SleepIdleTime -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [SleepIdleTime] -> ShowS
$cshowList :: [SleepIdleTime] -> ShowS
show :: SleepIdleTime -> [Char]
$cshow :: SleepIdleTime -> [Char]
showsPrec :: Int -> SleepIdleTime -> ShowS
$cshowsPrec :: Int -> SleepIdleTime -> ShowS
Show)
newtype CollisionSlop = CollisionSlop Double deriving (CollisionSlop -> CollisionSlop -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CollisionSlop -> CollisionSlop -> Bool
$c/= :: CollisionSlop -> CollisionSlop -> Bool
== :: CollisionSlop -> CollisionSlop -> Bool
$c== :: CollisionSlop -> CollisionSlop -> Bool
Eq, Int -> CollisionSlop -> ShowS
[CollisionSlop] -> ShowS
CollisionSlop -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [CollisionSlop] -> ShowS
$cshowList :: [CollisionSlop] -> ShowS
show :: CollisionSlop -> [Char]
$cshow :: CollisionSlop -> [Char]
showsPrec :: Int -> CollisionSlop -> ShowS
$cshowsPrec :: Int -> CollisionSlop -> ShowS
Show)
newtype CollisionBias = CollisionBias Double deriving (CollisionBias -> CollisionBias -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CollisionBias -> CollisionBias -> Bool
$c/= :: CollisionBias -> CollisionBias -> Bool
== :: CollisionBias -> CollisionBias -> Bool
$c== :: CollisionBias -> CollisionBias -> Bool
Eq, Int -> CollisionBias -> ShowS
[CollisionBias] -> ShowS
CollisionBias -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [CollisionBias] -> ShowS
$cshowList :: [CollisionBias] -> ShowS
show :: CollisionBias -> [Char]
$cshow :: CollisionBias -> [Char]
showsPrec :: Int -> CollisionBias -> ShowS
$cshowsPrec :: Int -> CollisionBias -> ShowS
Show)
cast :: Space a -> Space b
cast :: forall a b. Space a -> Space b
cast (Space IOMap BodyRecord
b IOMap (Record Shape)
s IOMap (Record Constraint)
c IOMap (Record CollisionHandler)
h SpacePtr
w) = forall c.
IOMap BodyRecord
-> IOMap (Record Shape)
-> IOMap (Record Constraint)
-> IOMap (Record CollisionHandler)
-> SpacePtr
-> Space c
Space IOMap BodyRecord
b IOMap (Record Shape)
s IOMap (Record Constraint)
c IOMap (Record CollisionHandler)
h SpacePtr
w
newtype MaxForce = MaxForce Double deriving (MaxForce -> MaxForce -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MaxForce -> MaxForce -> Bool
$c/= :: MaxForce -> MaxForce -> Bool
== :: MaxForce -> MaxForce -> Bool
$c== :: MaxForce -> MaxForce -> Bool
Eq, Int -> MaxForce -> ShowS
[MaxForce] -> ShowS
MaxForce -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [MaxForce] -> ShowS
$cshowList :: [MaxForce] -> ShowS
show :: MaxForce -> [Char]
$cshow :: MaxForce -> [Char]
showsPrec :: Int -> MaxForce -> ShowS
$cshowsPrec :: Int -> MaxForce -> ShowS
Show)
newtype MaxBias = MaxBias Double deriving (MaxBias -> MaxBias -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MaxBias -> MaxBias -> Bool
$c/= :: MaxBias -> MaxBias -> Bool
== :: MaxBias -> MaxBias -> Bool
$c== :: MaxBias -> MaxBias -> Bool
Eq, Int -> MaxBias -> ShowS
[MaxBias] -> ShowS
MaxBias -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [MaxBias] -> ShowS
$cshowList :: [MaxBias] -> ShowS
show :: MaxBias -> [Char]
$cshow :: MaxBias -> [Char]
showsPrec :: Int -> MaxBias -> ShowS
$cshowsPrec :: Int -> MaxBias -> ShowS
Show)
newtype ErrorBias = ErrorBias Double deriving (ErrorBias -> ErrorBias -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ErrorBias -> ErrorBias -> Bool
$c/= :: ErrorBias -> ErrorBias -> Bool
== :: ErrorBias -> ErrorBias -> Bool
$c== :: ErrorBias -> ErrorBias -> Bool
Eq, Int -> ErrorBias -> ShowS
[ErrorBias] -> ShowS
ErrorBias -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [ErrorBias] -> ShowS
$cshowList :: [ErrorBias] -> ShowS
show :: ErrorBias -> [Char]
$cshow :: ErrorBias -> [Char]
showsPrec :: Int -> ErrorBias -> ShowS
$cshowsPrec :: Int -> ErrorBias -> ShowS
Show)
newtype CollideBodies = CollideBodies Bool deriving (CollideBodies -> CollideBodies -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CollideBodies -> CollideBodies -> Bool
$c/= :: CollideBodies -> CollideBodies -> Bool
== :: CollideBodies -> CollideBodies -> Bool
$c== :: CollideBodies -> CollideBodies -> Bool
Eq, Int -> CollideBodies -> ShowS
[CollideBodies] -> ShowS
CollideBodies -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [CollideBodies] -> ShowS
$cshowList :: [CollideBodies] -> ShowS
show :: CollideBodies -> [Char]
$cshow :: CollideBodies -> [Char]
showsPrec :: Int -> CollideBodies -> ShowS
$cshowsPrec :: Int -> CollideBodies -> ShowS
Show)
newtype Impulse = Impulse Double deriving (Impulse -> Impulse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Impulse -> Impulse -> Bool
$c/= :: Impulse -> Impulse -> Bool
== :: Impulse -> Impulse -> Bool
$c== :: Impulse -> Impulse -> Bool
Eq, Int -> Impulse -> ShowS
[Impulse] -> ShowS
Impulse -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Impulse] -> ShowS
$cshowList :: [Impulse] -> ShowS
show :: Impulse -> [Char]
$cshow :: Impulse -> [Char]
showsPrec :: Int -> Impulse -> ShowS
$cshowsPrec :: Int -> Impulse -> ShowS
Show)
data Constraint = Constraint Entity Entity ConstraintType deriving (Constraint -> Constraint -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Constraint -> Constraint -> Bool
$c/= :: Constraint -> Constraint -> Bool
== :: Constraint -> Constraint -> Bool
$c== :: Constraint -> Constraint -> Bool
Eq, Int -> Constraint -> ShowS
[Constraint] -> ShowS
Constraint -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Constraint] -> ShowS
$cshowList :: [Constraint] -> ShowS
show :: Constraint -> [Char]
$cshow :: Constraint -> [Char]
showsPrec :: Int -> Constraint -> ShowS
$cshowsPrec :: Int -> Constraint -> ShowS
Show)
data ConstraintType
= PinJoint BVec BVec
| SlideJoint BVec BVec Double Double
| PivotJoint WVec
| PivotJoint2 BVec BVec
| GrooveJoint BVec BVec BVec
| DampedSpring BVec BVec Double Double Double
| DampedRotarySpring Double Double Double
| RotaryLimitJoint Double Double
| RatchetJoint Double Double
| GearJoint Double Double
| SimpleMotor Double
deriving (ConstraintType -> ConstraintType -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ConstraintType -> ConstraintType -> Bool
$c/= :: ConstraintType -> ConstraintType -> Bool
== :: ConstraintType -> ConstraintType -> Bool
$c== :: ConstraintType -> ConstraintType -> Bool
Eq, Int -> ConstraintType -> ShowS
[ConstraintType] -> ShowS
ConstraintType -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [ConstraintType] -> ShowS
$cshowList :: [ConstraintType] -> ShowS
show :: ConstraintType -> [Char]
$cshow :: ConstraintType -> [Char]
showsPrec :: Int -> ConstraintType -> ShowS
$cshowsPrec :: Int -> ConstraintType -> ShowS
Show)
newtype BeginCB = BeginCB BeginFunc
newtype SeparateCB = SeparateCB SeparateFunc
newtype PreSolveCB = PreSolveCB PreSolveFunc
newtype PostSolveCB = PostSolveCB PostSolveFunc
type BeginFunc = Ptr Collision -> Ptr FrnSpace -> C.CUInt -> IO C.CUChar
type SeparateFunc = Ptr Collision -> Ptr FrnSpace -> C.CUInt -> IO ()
type PreSolveFunc = Ptr Collision -> Ptr FrnSpace -> C.CUInt -> IO C.CUChar
type PostSolveFunc = Ptr Collision -> Ptr FrnSpace -> C.CUInt -> IO ()
data CollisionHandler = CollisionHandler
{ CollisionHandler -> CollisionSource
source :: CollisionSource
, CollisionHandler -> Maybe BeginCB
beginCB :: Maybe BeginCB
, CollisionHandler -> Maybe SeparateCB
separateCB :: Maybe SeparateCB
, CollisionHandler -> Maybe PreSolveCB
preSolveCB :: Maybe PreSolveCB
, CollisionHandler -> Maybe PostSolveCB
postSolveCB :: Maybe PostSolveCB
}
newtype CollisionType = CollisionType C.CUIntPtr
deriving (Integer -> CollisionType
CollisionType -> CollisionType
CollisionType -> CollisionType -> CollisionType
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
fromInteger :: Integer -> CollisionType
$cfromInteger :: Integer -> CollisionType
signum :: CollisionType -> CollisionType
$csignum :: CollisionType -> CollisionType
abs :: CollisionType -> CollisionType
$cabs :: CollisionType -> CollisionType
negate :: CollisionType -> CollisionType
$cnegate :: CollisionType -> CollisionType
* :: CollisionType -> CollisionType -> CollisionType
$c* :: CollisionType -> CollisionType -> CollisionType
- :: CollisionType -> CollisionType -> CollisionType
$c- :: CollisionType -> CollisionType -> CollisionType
+ :: CollisionType -> CollisionType -> CollisionType
$c+ :: CollisionType -> CollisionType -> CollisionType
Num, CollisionType -> CollisionType -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CollisionType -> CollisionType -> Bool
$c/= :: CollisionType -> CollisionType -> Bool
== :: CollisionType -> CollisionType -> Bool
$c== :: CollisionType -> CollisionType -> Bool
Eq, Int -> CollisionType -> ShowS
[CollisionType] -> ShowS
CollisionType -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [CollisionType] -> ShowS
$cshowList :: [CollisionType] -> ShowS
show :: CollisionType -> [Char]
$cshow :: CollisionType -> [Char]
showsPrec :: Int -> CollisionType -> ShowS
$cshowsPrec :: Int -> CollisionType -> ShowS
Show)
data CollisionSource
= Wildcard CollisionType
| Between CollisionType CollisionType
data Collision = Collision
{ Collision -> BVec
collisionNormal :: Vec
, Collision -> Entity
collisionBodyA :: Entity
, Collision -> Entity
collisionBodyB :: Entity
, Collision -> Entity
collisionShapeA :: Entity
, Collision -> Entity
collisionShapeB :: Entity
} deriving (Collision -> Collision -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Collision -> Collision -> Bool
$c/= :: Collision -> Collision -> Bool
== :: Collision -> Collision -> Bool
$c== :: Collision -> Collision -> Bool
Eq, Int -> Collision -> ShowS
[Collision] -> ShowS
Collision -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Collision] -> ShowS
$cshowList :: [Collision] -> ShowS
show :: Collision -> [Char]
$cshow :: Collision -> [Char]
showsPrec :: Int -> Collision -> ShowS
$cshowsPrec :: Int -> Collision -> ShowS
Show)
data CollisionProperties = CollisionProperties
{ CollisionProperties -> Double
collisionElasticity :: Double
, CollisionProperties -> Double
collisionFriction :: Double
, CollisionProperties -> BVec
collisionSurfaceVelocity :: Vec
} deriving (CollisionProperties -> CollisionProperties -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CollisionProperties -> CollisionProperties -> Bool
$c/= :: CollisionProperties -> CollisionProperties -> Bool
== :: CollisionProperties -> CollisionProperties -> Bool
$c== :: CollisionProperties -> CollisionProperties -> Bool
Eq, Int -> CollisionProperties -> ShowS
[CollisionProperties] -> ShowS
CollisionProperties -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [CollisionProperties] -> ShowS
$cshowList :: [CollisionProperties] -> ShowS
show :: CollisionProperties -> [Char]
$cshow :: CollisionProperties -> [Char]
showsPrec :: Int -> CollisionProperties -> ShowS
$cshowsPrec :: Int -> CollisionProperties -> ShowS
Show)
data SegmentQueryResult = SegmentQueryResult
{ SegmentQueryResult -> Entity
sqShape :: Entity
, SegmentQueryResult -> BVec
sqImpactPoint :: Vec
, SegmentQueryResult -> BVec
sqImpactNormal :: Vec
, SegmentQueryResult -> Double
sqImpactAlpha :: Double
} deriving (SegmentQueryResult -> SegmentQueryResult -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SegmentQueryResult -> SegmentQueryResult -> Bool
$c/= :: SegmentQueryResult -> SegmentQueryResult -> Bool
== :: SegmentQueryResult -> SegmentQueryResult -> Bool
$c== :: SegmentQueryResult -> SegmentQueryResult -> Bool
Eq, Int -> SegmentQueryResult -> ShowS
[SegmentQueryResult] -> ShowS
SegmentQueryResult -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [SegmentQueryResult] -> ShowS
$cshowList :: [SegmentQueryResult] -> ShowS
show :: SegmentQueryResult -> [Char]
$cshow :: SegmentQueryResult -> [Char]
showsPrec :: Int -> SegmentQueryResult -> ShowS
$cshowsPrec :: Int -> SegmentQueryResult -> ShowS
Show)
data PointQueryResult = PointQueryResult
{ PointQueryResult -> Entity
pqShape :: Entity
, PointQueryResult -> BVec
pqPoint :: WVec
, PointQueryResult -> Double
pqDistance :: Double
, PointQueryResult -> BVec
pqGradient :: Vec
} deriving (PointQueryResult -> PointQueryResult -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PointQueryResult -> PointQueryResult -> Bool
$c/= :: PointQueryResult -> PointQueryResult -> Bool
== :: PointQueryResult -> PointQueryResult -> Bool
$c== :: PointQueryResult -> PointQueryResult -> Bool
Eq, Int -> PointQueryResult -> ShowS
[PointQueryResult] -> ShowS
PointQueryResult -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [PointQueryResult] -> ShowS
$cshowList :: [PointQueryResult] -> ShowS
show :: PointQueryResult -> [Char]
$cshow :: PointQueryResult -> [Char]
showsPrec :: Int -> PointQueryResult -> ShowS
$cshowsPrec :: Int -> PointQueryResult -> ShowS
Show)