Initial commit

This commit is contained in:
Milan Nikolic 2017-01-27 09:35:30 +01:00
commit d7ff68b487
196 changed files with 286314 additions and 0 deletions

5
physics/README.md Normal file
View file

@ -0,0 +1,5 @@
## physics [![GoDoc](https://godoc.org/github.com/gen2brain/raylib-go/physics?status.svg)](https://godoc.org/github.com/gen2brain/raylib-go/physics)
2D Physics library for videogames.
A port of Victor Fisac's [physac engine](https://github.com/raysan5/raylib/blob/master/src/physac.h).

130
physics/physics.go Normal file
View file

@ -0,0 +1,130 @@
// 2D Physics library for videogames
//
// A port of Victor Fisac's physac engine (https://github.com/raysan5/raylib/blob/master/src/physac.h)
package physics
import (
"github.com/gen2brain/raylib-go/raylib"
)
// Defines
const (
PhysacMaxBodies = 64
PhysacMaxManifolds = 4096
PhysacMaxVertices = 24
PhysacCircleVertices = 24
PhysacDesiredDeltatime = 1.0 / 60.0
PhysacMaxTimestep = 0.02
PhysacCollisionIterations = 100
PhysacPenetrationAllowance = 0.05
PhysacPenetrationCorrection = 0.4
)
// Physics shape type
const (
PhysicsCircle = iota
PhysicsPolygon
)
// Mat2 type (used for polygon shape rotation matrix)
type Mat2 struct {
M00 float32
M01 float32
M10 float32
M11 float32
}
type PolygonData struct {
// Current used vertex and normals count
VertexCount uint32
// Polygon vertex positions vectors
Vertices [24]raylib.Vector2
// Polygon vertex normals vectors
Normals [24]raylib.Vector2
// Vertices transform matrix 2x2
Transform Mat2
}
type PhysicsShape struct {
// Physics shape type (circle or polygon)
Type uint32
// Padding
_ [4]byte
// Shape physics body reference
Body *PhysicsBodyData
// Circle shape radius (used for circle shapes)
Radius float32
// Polygon shape vertices position and normals data (just used for polygon shapes)
VertexData PolygonData
}
type PhysicsBodyData struct {
// Reference unique identifier
Id uint32
// Enabled dynamics state (collisions are calculated anyway)
Enabled uint32
// Physics body shape pivot
Position raylib.Vector2
// Current linear velocity applied to position
Velocity raylib.Vector2
// Current linear force (reset to 0 every step)
Force raylib.Vector2
// Current angular velocity applied to orient
AngularVelocity float32
// Current angular force (reset to 0 every step)
Torque float32
// Rotation in radians
Orient float32
// Moment of inertia
Inertia float32
// Inverse value of inertia
InverseInertia float32
// Physics body mass
Mass float32
// Inverse value of mass
InverseMass float32
// Friction when the body has not movement (0 to 1)
StaticFriction float32
// Friction when the body has movement (0 to 1)
DynamicFriction float32
// Restitution coefficient of the body (0 to 1)
Restitution float32
// Apply gravity force to dynamics
UseGravity uint32
// Physics grounded on other body state
IsGrounded uint32
// Physics rotation constraint
FreezeOrient uint32
// Padding
_ [4]byte
// Physics body shape information (type, radius, vertices, normals)
Shape PhysicsShape
}
type PhysicsManifoldData struct {
// Reference unique identifier
Id uint32
// Paddin
_ [4]byte
// Manifold first physics body reference
BodyA *PhysicsBodyData
// Manifold second physics body reference
BodyB *PhysicsBodyData
// Depth of penetration from collision
Penetration float32
// Normal direction vector from 'a' to 'b'
Normal raylib.Vector2
// Points of contact during collision
Contacts [2]raylib.Vector2
// Current collision number of contacts
ContactsCount uint32
// Mixed restitution during collision
Restitution float32
// Mixed dynamic friction during collision
DynamicFriction float32
// Mixed static friction during collision
StaticFriction float32
// Padding
_ [4]byte
}