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