85 lines
1.2 KiB
Go
85 lines
1.2 KiB
Go
// Package
|
|
package main
|
|
|
|
// Libraries
|
|
import (
|
|
"math/rand"
|
|
|
|
"github.com/go-gl/gl/v2.1/gl"
|
|
)
|
|
|
|
// Structures
|
|
type Square struct {
|
|
x, y float32
|
|
vx, vy float32
|
|
r, g, b float32
|
|
cTrigger bool
|
|
}
|
|
|
|
// Interfaces
|
|
func (c *Square) Init() {
|
|
c.x = 0
|
|
c.y = 0
|
|
c.vx = 0.005
|
|
c.vy = 0.005
|
|
|
|
c.r = rand.Float32()
|
|
c.g = rand.Float32()
|
|
c.b = rand.Float32()
|
|
}
|
|
func (c *Square) Update(onCollide func(s *Square)) {
|
|
// Movement
|
|
c.x += c.vx
|
|
c.y += c.vy
|
|
|
|
// STAY INSIDE BOUNDS!
|
|
if c.x > 1 {
|
|
c.x = 0.9
|
|
c.vx *= -1
|
|
} else if c.x < -1 {
|
|
c.x = -0.9
|
|
c.vx *= -1
|
|
} else if c.y > 1 {
|
|
c.y = 0.9
|
|
c.vy *= -1
|
|
} else if c.y < -1 {
|
|
c.y = -0.9
|
|
c.vy *= -1
|
|
}
|
|
|
|
// Can we trigger a collision?
|
|
if c.cTrigger {
|
|
// Collision Detection
|
|
if c.x+0.05 > 1 || c.x-0.05 < -1 {
|
|
c.vx *= -1
|
|
|
|
go onCollide(c)
|
|
}
|
|
if c.y+0.1 > 1 || c.y-0.1 < -1 {
|
|
c.vy *= -1
|
|
|
|
go onCollide(c)
|
|
}
|
|
} else {
|
|
if (c.x < 0.9 && c.x > -0.9) && (c.y < 0.9 && c.y > -0.9) {
|
|
c.cTrigger = true
|
|
}
|
|
}
|
|
}
|
|
func (c *Square) Draw() {
|
|
gl.LoadIdentity()
|
|
|
|
gl.Translatef(c.x, c.y, 0)
|
|
gl.Color3f(c.r, c.g, c.b)
|
|
|
|
gl.Translatef(-0.05, -0.05, 0)
|
|
|
|
gl.Begin(gl.QUADS)
|
|
|
|
gl.Vertex2f(0, 0)
|
|
gl.Vertex2f(0.1, 0)
|
|
gl.Vertex2f(0.1, 0.1)
|
|
gl.Vertex2f(0, 0.1)
|
|
|
|
gl.End()
|
|
}
|