This repository has been archived by the owner on Dec 20, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patharbiter.go
59 lines (49 loc) · 1.45 KB
/
arbiter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package cp
/*
#cgo CFLAGS: -DCP_USE_CGPOINTS=0
#cgo LDFLAGS: -lchipmunk
#include <chipmunk/chipmunk.h>
*/
import "C"
type Arbiter struct {
CPArbiter *C.cpArbiter
}
type ContactPoint struct {
Point Vect
Normal Vect
Distance float64
}
func NewArbiter(cparb *C.cpArbiter) *Arbiter {
arbiter := Arbiter{cparb}
return &arbiter
}
func (a *Arbiter) GetShapes() (*Shape, *Shape) {
var shape_a, shape_b *C.cpShape
C.cpArbiterGetShapes(a.CPArbiter, &shape_a, &shape_b)
return LookupShape(shape_a), LookupShape(shape_b)
}
func (a *Arbiter) GetBodies() (*Body, *Body) {
var body_a, body_b *C.cpBody
C.cpArbiterGetBodies(a.CPArbiter, &body_a, &body_b)
return LookupBody(body_a), LookupBody(body_b)
}
func (a *Arbiter) TotalImpulse() Vect {
return Vect{C.cpArbiterTotalImpulse(a.CPArbiter)}
}
func (a *Arbiter) TotalImpulseWithFriction() Vect {
return Vect{C.cpArbiterTotalImpulseWithFriction(a.CPArbiter)}
}
func (a *Arbiter) TotalKineticEnergy() float64 {
return float64(C.cpArbiterTotalKE(a.CPArbiter))
}
func (a *Arbiter) GetContactPointSet() []*ContactPoint {
points := make([]*ContactPoint, 0)
rawSet := C.cpArbiterGetContactPointSet(a.CPArbiter)
for i := 0; i < int(rawSet.count); i++ {
point := ContactPoint{NewVectFromCPVect(rawSet.points[i].point),
NewVectFromCPVect(rawSet.points[i].normal),
float64(rawSet.points[i].dist)}
points = append(points, &point)
}
return points
}