76 lines
1.4 KiB
Go
76 lines
1.4 KiB
Go
package land
|
|
|
|
import (
|
|
"github.com/veandco/go-sdl2/sdl"
|
|
"time"
|
|
)
|
|
|
|
type RootObject struct {
|
|
BaseObject
|
|
|
|
Analyzer *PerformanceAnalyzer
|
|
}
|
|
|
|
func NewRootObject() *RootObject {
|
|
in := &RootObject{
|
|
Analyzer: &PerformanceAnalyzer{},
|
|
}
|
|
|
|
go in.Analyzer.RunResetter(1 * time.Second)
|
|
|
|
return in
|
|
}
|
|
|
|
func (p *RootObject) RunEventLoop(tickDuration time.Duration) {
|
|
for {
|
|
startTime := time.Now()
|
|
|
|
p.Update()
|
|
|
|
elapsed := time.Since(startTime)
|
|
hangDuration := tickDuration - elapsed
|
|
if hangDuration > 0 {
|
|
time.Sleep(hangDuration)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (p *RootObject) Update() {
|
|
p.BaseObject.Update()
|
|
|
|
// Check collision
|
|
for _, child := range p.Children {
|
|
for _, other := range p.Children {
|
|
collidableChild, ok := child.(CollidableObject)
|
|
if !ok {
|
|
continue
|
|
}
|
|
collidableOther, ok := other.(CollidableObject)
|
|
if !ok {
|
|
continue
|
|
}
|
|
if child != other && checkCollisionBetweenObject(collidableChild, collidableOther) {
|
|
collidableChild.OnCollide(collidableOther)
|
|
collidableOther.OnCollide(collidableChild)
|
|
}
|
|
}
|
|
}
|
|
|
|
p.Analyzer.Tick()
|
|
}
|
|
|
|
func (p *RootObject) Draw(pen *sdl.Renderer) {
|
|
// Render background and clear previous state
|
|
pen.SetDrawColor(77, 77, 77, 255)
|
|
pen.Clear()
|
|
|
|
// Render each child
|
|
for _, child := range p.Children {
|
|
if drawableChild, ok := child.(DrawableObject); ok {
|
|
drawableChild.Draw(pen)
|
|
}
|
|
}
|
|
|
|
p.Analyzer.Draw()
|
|
}
|