-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | 2D physics for apecs
--
-- 2D physics for apecs. Uses Chipmunk physics library under the hood.
@package apecs-physics
@version 0.3.2
-- | apecs-physics prelude
module Apecs.Physics
-- | Uninhabited, should be added to the world as a component to add a
-- physics space.
data Physics
-- | Gravity force vector, global value
newtype Gravity
Gravity :: Vec -> Gravity
-- | Number of iterations per step, global value
newtype Iterations
Iterations :: Int -> Iterations
stepPhysics :: Has w IO Physics => Double -> System w ()
earthGravity :: Gravity
-- | Added to a component to add it to the physics space. Deleting it will
-- also delete all associated shapes and constraints. A body has a number
-- of subcomponents: Position, Velocity,
-- Force, Torque, BodyMass, Moment,
-- Angle, AngularVelocity, and
-- CenterOfGravity. These components cannot be added or removed
-- from an entity, but rather are present as long as the entity has a
-- Body.
data Body
DynamicBody :: Body
KinematicBody :: Body
StaticBody :: Body
-- | A subcomponent of Body representing where it is in world
-- coordinates.
newtype Position
Position :: WVec -> Position
-- | A subcomponent of Body representing where it is going in
-- world coordinates
newtype Velocity
Velocity :: WVec -> Velocity
newtype Angle
Angle :: Double -> Angle
newtype AngularVelocity
AngularVelocity :: Double -> AngularVelocity
-- | A component used to apply a force to a Body. The force is
-- applied to the body's center of gravity. This component is reset to
-- Vec 0 0 after every stimulation step, so it is mainly used
-- to apply a force as opposed to being read.
newtype Force
Force :: Vec -> Force
-- | A component representing the mass of the Body overall.
newtype BodyMass
BodyMass :: Double -> BodyMass
-- | The moment of inertia of the Body. This is basically the
-- body's tendency to resist angular acceleration.
newtype Moment
Moment :: Double -> Moment
-- | Where the Body's center of gravity is, in body-local
-- coordinates. Can be read and written to.
newtype CenterOfGravity
CenterOfGravity :: BVec -> CenterOfGravity
-- | A component used to apply a torque to a Body. The torque is
-- applied to the entire body at once. This component is reset to 0
-- after every simulation step, so it is mainly used to apply a
-- torque as opposed to being read.
newtype Torque
Torque :: Double -> Torque
-- | The Shapes belonging to a body. Read-only.
newtype ShapeList
ShapeList :: [Entity] -> ShapeList
-- | The Constraints belonging to a body. Read-only.
newtype ConstraintList
ConstraintList :: [Entity] -> ConstraintList
-- | A convex polygon. Consists of a list of vertices, and a radius.
data Convex
Convex :: [BVec] -> Double -> Convex
-- | Shape component. Adding a shape to an entity that has no Body
-- is a noop.
data Shape
Shape :: Entity -> Convex -> Shape
-- | The mass of a shape is technically a measure of how much resistance it
-- has to being accelerated, but it's generally easier to understand it
-- as being how "heavy" something is.
--
-- The physics engine lets you set this, and it will calculate the
-- Density and other components for you.
--
-- See https://en.wikipedia.org/wiki/Mass for more information.
newtype Mass
Mass :: Double -> Mass
-- | The density of a shape is a measure of how much mass an object has in
-- a given volume.
--
-- The physics engine lets you set this, and it will calculate the
-- Mass and other components for you.
--
-- See https://en.wikipedia.org/wiki/Density for more information.
newtype Density
Density :: Double -> Density
-- | If a body is a Sensor, it exists only to trigger collision
-- responses. It won't phyiscally interact with other bodies in any way,
-- but it will cause collision handlers to run.
newtype Sensor
Sensor :: Bool -> Sensor
-- | The friction of an object is a measure of how much it resists
-- movement. Shapes with high friction will naturally slow down more
-- quickly over time than objects with low friction.
--
-- See https://en.wikipedia.org/wiki/Friction for more
-- information.
newtype Friction
Friction :: Double -> Friction
-- | The elasticity of a shape. Higher elasticities will create more
-- elastic collisions, IE, will be bouncier.
--
-- See https://en.wikipedia.org/wiki/Elasticity_(physics) for more
-- information.
newtype Elasticity
Elasticity :: Double -> Elasticity
newtype SurfaceVelocity
SurfaceVelocity :: Vec -> SurfaceVelocity
data CollisionFilter
CollisionFilter :: CollisionGroup -> Bitmask -> Bitmask -> CollisionFilter
[filterGroup] :: CollisionFilter -> CollisionGroup
[filterCategories] :: CollisionFilter -> Bitmask
[filterMask] :: CollisionFilter -> Bitmask
-- | A bitmask used for collision handling
newtype Bitmask
Bitmask :: CUInt -> Bitmask
maskAll :: Bitmask
maskNone :: Bitmask
-- | Makes a bitmask from a list of indices
maskList :: [Int] -> Bitmask
defaultFilter :: CollisionFilter
-- | A box with the given height, width, and center point
boxShape :: Double -> Double -> Vec -> Convex
data Constraint
Constraint :: Entity -> Entity -> ConstraintType -> Constraint
data ConstraintType
-- | Maintains a fixed distance between two anchor points
PinJoint :: BVec -> BVec -> ConstraintType
-- | A PinJoint with minimum and maximum distance
SlideJoint :: BVec -> BVec -> Double -> Double -> ConstraintType
-- | Creates a pivot point at the given world coordinate
PivotJoint :: WVec -> ConstraintType
-- | Creates a pivot point at the given body coordinates
PivotJoint2 :: BVec -> BVec -> ConstraintType
-- | The first two vectors are the start and end of the groove on body A,
-- the third argument is the anchor point on body B.
GrooveJoint :: BVec -> BVec -> BVec -> ConstraintType
-- | Spring between two anchor points, with given rest length, stiffness,
-- and damping.
DampedSpring :: BVec -> BVec -> Double -> Double -> Double -> ConstraintType
-- | Rotary sping, with given rest angle, stiffness, and damping.
DampedRotarySpring :: Double -> Double -> Double -> ConstraintType
-- | Joint with minimum and maximum angle
RotaryLimitJoint :: Double -> Double -> ConstraintType
-- | Rathet joint with given phase and ratchet (distance between clicks).
RatchetJoint :: Double -> Double -> ConstraintType
GearJoint :: Double -> Double -> ConstraintType
-- | Keeps relative angular velocity constant
SimpleMotor :: Double -> ConstraintType
newtype MaxForce
MaxForce :: Double -> MaxForce
newtype MaxBias
MaxBias :: Double -> MaxBias
newtype ErrorBias
ErrorBias :: Double -> ErrorBias
newtype CollideBodies
CollideBodies :: Bool -> CollideBodies
data Collision
Collision :: Vec -> Entity -> Entity -> Collision
[collisionNormal] :: Collision -> Vec
[collisionA] :: Collision -> Entity
[collisionB] :: Collision -> Entity
data CollisionHandler
CollisionHandler :: CollisionSource -> Maybe BeginCB -> Maybe SeparateCB -> Maybe PreSolveCB -> Maybe PostSolveCB -> CollisionHandler
[source] :: CollisionHandler -> CollisionSource
-- | A callback called when two bodies start touching for the first time.
-- If it returns True, the physics engine will process the
-- collision normally. If it returns False, the physics engine
-- will ignore the collision entirely.
[beginCB] :: CollisionHandler -> Maybe BeginCB
-- | A callback called when two bodies have just stopped touching. This
-- will always be called if beginCB is, regardless of the
-- return value of beginCB.
[separateCB] :: CollisionHandler -> Maybe SeparateCB
-- | A callback called when two bodies are touching during a physics step.
-- If this function returns True, the collision will be processed
-- normally. If it returns 'False, then the physics engine will stop
-- processing the collision for this step.
[preSolveCB] :: CollisionHandler -> Maybe PreSolveCB
-- | A callback called when two bodies are touching after the
-- response to the collision has been processed. This means that you can
-- determine the collision impulse or kinetic energy in this callback, if
-- you need that for processing.
[postSolveCB] :: CollisionHandler -> Maybe PostSolveCB
defaultHandler :: CollisionHandler
data CollisionSource
Wildcard :: CollisionGroup -> CollisionSource
Between :: CollisionGroup -> CollisionGroup -> CollisionSource
data BeginCB
data SeparateCB
data PreSolveCB
data PostSolveCB
mkBeginCB :: (Collision -> System w Bool) -> System w BeginCB
mkSeparateCB :: (Collision -> System w ()) -> System w SeparateCB
mkPreSolveCB :: (Collision -> System w Bool) -> System w PreSolveCB
mkPostSolveCB :: (Collision -> System w ()) -> System w PostSolveCB
data PointQueryResult
PointQueryResult :: Entity -> WVec -> Double -> Double -> PointQueryResult
-- | What entity did this query connect with?
[pqShape] :: PointQueryResult -> Entity
-- | The closest point on the shape's surface (in world space)
[pqPoint] :: PointQueryResult -> WVec
-- | The distance to the queried point
[pqDistance] :: PointQueryResult -> Double
-- | The gradient of the distance function. This is equal to
-- 'pqPoint'/'pqDistance' but accurate for even very small distances.
[pqGradient] :: PointQueryResult -> Double
pointQuery :: Has w IO Physics => WVec -> Double -> CollisionFilter -> System w (Maybe PointQueryResult)
vertices :: Convex -> [BVec]
-- | Map a function over all vertices
mapVertices :: (BVec -> BVec) -> Convex -> Convex
-- | Translates all vertices. The name shift is to prevent collisions with
-- gloss
shift :: BVec -> Convex -> Convex
getRadius :: Convex -> Double
setRadius :: Double -> Convex -> Convex
cCircle :: Double -> Convex
zCircle :: Double -> Convex
oCircle :: BVec -> Double -> Convex
hLine :: Double -> Convex
vLine :: Double -> Convex
-- | Centered rectangle with a given size
cRectangle :: BVec -> Convex
-- | Rectangle with a given origin and size
oRectangle :: BVec -> BVec -> Convex
-- | Rectangle with origin 0 and given size
zRectangle :: BVec -> Convex
-- | Split a shape into its edges. Will return no edges for points, but
-- returns 2 for a line (in opposite directions)
toEdges :: Convex -> [Convex]
-- | A set of lines forming a grid. Returns (r + c + 2) segments.
gridLines :: Vec -> Int -> Int -> [Convex]
-- | Type synonym indicating that a vector is expected to be in body-space
-- coordinates
type BVec = Vec
-- | Type synonym indicating that a vector is expected to be in world-space
-- coordinates
type WVec = Vec