/
main.go
83 lines (71 loc) · 1.64 KB
/
main.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
79
80
81
82
83
package main
import (
"fmt"
"image"
"image/draw"
"log"
"os"
"strings"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
"github.com/moniquelive/demoscenetuts/internal"
)
var (
ScreenWidth = 320
ScreenHeight = 200
)
type Game struct {
doubleBuffer *image.RGBA
}
var currentDemo demos.Demo
var demosMap map[string]demos.Demo
func init() {
demosMap = demos.FillDemos()
}
func (g *Game) Update() error {
if ebiten.IsKeyPressed(ebiten.KeyEscape) {
return fmt.Errorf("end")
}
draw.Draw(
g.doubleBuffer, g.doubleBuffer.Bounds(),
image.Black, image.Black.Bounds().Min,
draw.Src)
currentDemo.Draw(g.doubleBuffer)
return nil
}
func (g *Game) Draw(screen *ebiten.Image) {
screen.ReplacePixels(g.doubleBuffer.Pix)
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.CurrentTPS()))
}
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {
return ScreenWidth, ScreenHeight
}
func main() {
if len(os.Args) != 2 {
help()
return
}
var ok bool
if currentDemo, ok = demosMap[os.Args[1]]; !ok {
log.Printf("Demo não encontrado: %q\n", os.Args[1])
help()
return
}
var zoom int
ScreenWidth, ScreenHeight, zoom = currentDemo.Setup()
ebiten.SetWindowSize(ScreenWidth*zoom, ScreenHeight*zoom)
ebiten.SetWindowTitle("Ebiten Demoscene")
g := &Game{
doubleBuffer: image.NewRGBA(image.Rect(0, 0, ScreenWidth, ScreenHeight)),
}
if err := ebiten.RunGame(g); err != nil {
log.Fatal(err)
}
}
func help() {
demosList := make([]string, 0, len(demosMap))
for k := range demosMap {
demosList = append(demosList, k)
}
log.Println("Escolha o demo: [", strings.Join(demosList, ", "), "]")
}