-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdraw.go
78 lines (64 loc) · 1.87 KB
/
draw.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package main
import (
"image"
"github.com/hajimehoshi/ebiten/v2"
"github.com/jcgraybill/ship-shape/ui"
)
var dt [5]uint64
var dm [5]uint64
func (g *Game) Draw(screen *ebiten.Image) {
g.viewport = image.Rect(-g.offsetX, -g.offsetY, -g.offsetX+g.windowW, -g.offsetY+g.windowH)
screen.DrawImage(g.starfieldLayer.SubImage(g.viewport).(*ebiten.Image), nil)
dt[0], dm[0] = g.measure(g.drawTrails)
screen.DrawImage(g.trailsLayer.SubImage(g.viewport).(*ebiten.Image), nil)
if g.redrawPSLayer {
g.planetsAndStructuresLayer.Clear()
ui.ShaderOpts.Uniforms["Light"] = []float32{-float32(g.offsetX), -float32(g.offsetY)}
dt[1], dm[1] = g.measure(g.drawStructures)
dt[2], dm[2] = g.measure(g.drawPlanets)
g.redrawPSLayer = false
} else {
dt[1], dm[1], dt[2], dm[2] = 0, 0, 0, 0
}
screen.DrawImage(g.planetsAndStructuresLayer.SubImage(g.viewport).(*ebiten.Image), nil)
dt[3], dm[3] = g.measure(g.drawShips)
screen.DrawImage(g.shipsLayer.SubImage(g.viewport).(*ebiten.Image), nil)
g.panelLayer.Clear()
dt[4], dm[4] = g.measure(g.drawPanel)
screen.DrawImage(g.panelLayer, nil)
DrawTimeLogger.Println(g.count, ",", g.csv(dt[:]))
DrawMemLogger.Println(g.count, ",", g.csv(dm[:]))
}
func (g *Game) drawTrails() {
g.trailsLayer.Clear()
for _, s := range g.player.Ships() {
if g.viewport.Overlaps(s.Bounds) {
s.DrawCourse(g.trailsLayer)
}
}
}
func (g *Game) drawStructures() {
for _, s := range g.player.Structures() {
if g.viewport.Overlaps(s.Bounds) {
s.Draw(g.planetsAndStructuresLayer)
}
}
}
func (g *Game) drawPlanets() {
for _, p := range g.level.Planets() {
if g.viewport.Overlaps(p.Bounds) {
p.Draw(g.planetsAndStructuresLayer)
}
}
}
func (g *Game) drawShips() {
g.shipsLayer.Clear()
for _, s := range g.player.Ships() {
if g.viewport.Overlaps(s.Bounds) {
s.Draw(g.shipsLayer)
}
}
}
func (g *Game) drawPanel() {
g.panel.Draw(g.panelLayer)
}