YT-Physics/square.go
2024-05-27 14:31:32 -04:00

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()
}