func newBox(width, height float32) *box { var err error box := new(box) // Sound player box.player, err = mandala.NewAudioPlayer() if err != nil { mandala.Fatalf("%s\n", err.Error()) } // Chipmunk body box.physicsShape = chipmunk.NewBox( vect.Vect{0, 0}, vect.Float(width), vect.Float(height), ) box.physicsShape.SetElasticity(BoxElasticity) box.physicsBody = chipmunk.NewBody(vect.Float(BoxMass), box.physicsShape.Moment(float32(BoxMass))) box.physicsBody.AddShape(box.physicsShape) box.physicsBody.CallbackHandler = callbacks{} // OpenGL shape box.openglShape = shapes.NewBox(width, height) return box }
func addRoom(pos vect.Vect, w vect.Float, h vect.Float) { box := chipmunk.NewBox(vect.Vector_Zero, w+0.5, h+0.5) box.SetElasticity(0.5) body := chipmunk.NewBody(1.0, box.Moment(float32(1.0))) body.SetPosition(pos) body.AddShape(box) room := Room{ Color: mgl32.Vec4{.3, .3, 1, .2}, Box: box, } rooms = append(rooms, &room) }
func NewPhysicsShape(static bool, shape *chipmunk.Shape) *Physics { var body *chipmunk.Body if static { body = chipmunk.NewBodyStatic() } else { body = chipmunk.NewBody(1, shape.ShapeClass.Moment(1)) } p := &Physics{BaseComponent: NewComponent(), Body: body, Box: shape.GetAsBox(), Shape: shape} body.AddShape(shape) return p }
func NewPhysicsCircle(static bool) *Physics { var body *chipmunk.Body shape := chipmunk.NewCircle(vect.Vector_Zero, 1) if static { body = chipmunk.NewBodyStatic() } else { body = chipmunk.NewBody(1, shape.ShapeClass.Moment(1)) } p := &Physics{BaseComponent: NewComponent(), Body: body, Box: shape.GetAsBox(), Shape: shape} body.AddShape(shape) return p }
func addBall() { x := rand.Intn(350-115) + 115 ball := chipmunk.NewCircle(vect.Vector_Zero, float32(ballRadius)) ball.SetElasticity(0.95) body := chipmunk.NewBody(vect.Float(ballMass), ball.Moment(float32(ballMass))) body.SetPosition(vect.Vect{vect.Float(x), 600.0}) body.SetAngle(vect.Float(rand.Float32() * 2 * math.Pi)) body.AddShape(ball) space.AddBody(body) balls = append(balls, ball) }
// add a pipe box to the space func addOnePipeBox(pos vect.Vect) { pipeBox := chipmunk.NewBox(vect.Vector_Zero, vect.Float(pipeSide), vect.Float(pipeSide)) pipeBox.SetElasticity(0.6) body := chipmunk.NewBody(chipmunk.Inf, chipmunk.Inf) body.SetPosition(pos) body.SetVelocity(pipeVelX, pipeVelY) body.IgnoreGravity = true body.AddShape(pipeBox) space.AddBody(body) pipe = append(pipe, pipeBox) }
func NewPhysics(static bool) *Physics { var body *chipmunk.Body box := chipmunk.NewBox(vect.Vect{0, 0}, vect.Float(1), vect.Float(1)) if static { body = chipmunk.NewBodyStatic() } else { body = chipmunk.NewBody(1, box.Moment(1)) } p := &Physics{BaseComponent: NewComponent(), Body: body, Box: box.GetAsBox(), Shape: box} body.AddShape(box) return p }
func addFlappy() { flappyBird := chipmunk.NewBox(vect.Vector_Zero, vect.Float(pipeSide), vect.Float(pipeSide)) flappyBird.SetElasticity(0.95) body := chipmunk.NewBody(vect.Float(flappyMass), vect.Float(flappyMoment)) body.SetPosition(vect.Vect{100, vect.Float(winHeight)}) body.SetAngularVelocity(float32(10 * deg2rad)) // hook collision events handlers := collisionHandlers{} body.CallbackHandler = handlers body.AddShape(flappyBird) space.AddBody(body) flappyBirds = append(flappyBirds, flappyBird) }
func NewEnemy(ballRadius, ballMass int32, game *Game) *Enemy { x := rand.Intn(1280) ball := chipmunk.NewCircle(vect.Vector_Zero, float32(ballRadius)) ball.SetElasticity(0.95) ball.SetFriction(1.5) body := chipmunk.NewBody(vect.Float(ballMass), ball.Moment(float32(ballMass))) body.SetPosition(vect.Vect{vect.Float(x), 800.0}) body.SetPosition(vect.Vect{vect.Float(x), 600.0}) body.SetAngle(vect.Float(rand.Float32() * 2 * math.Pi)) body.AddShape(ball) game.Space.AddBody(body) return &Enemy{Body: ball.Body, ball: ball, alive: true, Radius: ballRadius, Mass: ballMass} }
func NewPlayer(ballRadius, ballMass int32, game *Game) *Player { x := rand.Intn(350-115) + 115 ball := chipmunk.NewCircle(vect.Vector_Zero, float32(ballRadius)) ball.SetElasticity(0.95) ball.SetFriction(1.5) body := chipmunk.NewBody(vect.Float(ballMass), ball.Moment(float32(ballMass))) body.SetPosition(vect.Vect{vect.Float(x), 600.0}) body.SetAngle(vect.Float(rand.Float32() * 2 * math.Pi)) body.AddShape(ball) game.Space.AddBody(body) return &Player{Body: ball.Body, ball: ball, Radius: ballRadius, Mass: ballMass, jumpTickStop: 2, jumpTick: 0, jumping: false, speed: 5} }
func NewPhysicsShapes(static bool, shapes []*chipmunk.Shape) *Physics { var body *chipmunk.Body if static { body = chipmunk.NewBodyStatic() } else { moment := vect.Float(0) for _, shape := range shapes { moment += shape.Moment(1) } body = chipmunk.NewBody(1, moment) } p := &Physics{BaseComponent: NewComponent(), Body: body, Box: nil, Shape: nil} for _, shape := range shapes { body.AddShape(shape) } return p }
func newBox(world *World, width, height float32) *Box { box := new(Box) // Chipmunk body box.physicsShape = chipmunk.NewBox( vect.Vect{0, 0}, vect.Float(width), vect.Float(height), ) box.physicsShape.SetElasticity(BoxElasticity) box.physicsBody = chipmunk.NewBody(vect.Float(BoxMass), box.physicsShape.Moment(float32(BoxMass))) box.physicsBody.AddShape(box.physicsShape) box.physicsBody.CallbackHandler = callbacks{} // OpenGL shape box.openglShape = shapes.NewBox(world.boxProgramShader, width, height) return box }
func NewChipmunkBody(mass, i float32) *ChipmunkBody { return &ChipmunkBody{ Body: chipmunk.NewBody(vect.Float(mass), vect.Float(i)), } }