Hipmunk-0.2.1: A Haskell binding for Chipmunk.

Portabilityportable (needs FFI)




Functionality used by various modules and routines for initialization and change of global variables.



initChipmunk :: IO ()Source

Initilizes the Chipmunk library. This should be called once before using any functions of this library.

Basic data types

type CpFloat = FloatSource

The floating point type used internally in Chipmunk.

infinity :: CpFloatSource

infinity may be used to create bodies with an infinite mass.

type Time = CpFloatSource

Type synonym used to hint that the argument or result represents time.

type Angle = CpFloatSource

Type synonym used to hint that the argument or result represents an angle in radians.

Global variables

Chipmunk tries to maintein a very few number of global variables to allow multiple Physics.Hipmunk.Space.Spaces to be used simultaneously, however there are some.

Shape counter

The shape counter is a global counter used for creating unique hash identifiers to the shapes.

resetShapeCounter :: IO ()Source

resetShapeCounter reset the shape counter to its default value. This is used to add determinism to a simulation. As the ids created with this counter may affect the order in which the collisions happen, there may be very slight differences in different simulations.

However, be careful as you should not use shapes created before a call to resetCounter with shapes created after it as they may have the same id.

Contact persistence

This variable determines how long contacts should persist. It should be small as the cached contacts will only be close for a short time. (default is 3)

Collision slop

The collision slop is the amount that shapes are allowed to penetrate. Setting this to zero will work just fine, but using a small positive amount will help prevent oscillating contacts. (default is 0.1)

Bias coefficient

The amount of penetration to reduce in each step. Values should range from 0 to 1. Using large values will eliminate penetration in fewer steps, but can cause vibration. (default is 0.1)

Joint bias coefficient

Similar to the bias coefficient, but for all joints. In the future, joints might have their own bias coefficient instead. (default is 0.1)


data Vector Source

A two-dimensional vector. It is an instance of Num however the operations signum and '(*)' are not supported.


Vector !CpFloat !CpFloat 

type Position = VectorSource

Type synonym used to hint that the argument or result represents a position.

fromAngle :: Angle -> VectorSource

Constructs an unitary vector pointing to the given angle (in radians).

len :: Vector -> CpFloatSource

The length of a vector.

normalize :: Vector -> VectorSource

Normalizes the vector (i.e. divides it by its length).

scale :: Vector -> CpFloat -> VectorSource

Scales the components of a vector by the same amount.

toAngle :: Vector -> AngleSource

toAngle v is the angle that v has with the vector Vector 1 0 (modulo 2*pi).

dot :: Vector -> Vector -> CpFloatSource

v1 `dot` v2 computes the familiar dot operation.

cross :: Vector -> Vector -> CpFloatSource

v1 `cross` v2 computes the familiar cross operation.

perp :: Vector -> VectorSource

perp v is a vector of same length as v but perpendicular to v (i.e. toAngle (perp v) - toAngle v equals pi/2 modulo 2*pi).

project :: Vector -> Vector -> VectorSource

v1 `project` v2 is the vector projection of v1 onto v2.

rotate :: Vector -> Vector -> VectorSource

v1 `rotate` v2 uses complex multiplication to rotate (and scale) v1 by v2.

unrotate :: Vector -> Vector -> VectorSource

The inverse operation of rotate, such that unrotate (rotate v1 v2) v2 equals v1.