/
main.go
101 lines (91 loc) · 2.57 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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package main
import (
"fmt"
"github.com/hajimehoshi/ebiten"
"github.com/hajimehoshi/ebiten/ebitenutil"
"github.com/shnifer/nigiri"
"github.com/shnifer/nigiri/vec2"
"golang.org/x/image/colornames"
"image"
"github.com/shnifer/prof"
)
var C *nigiri.Camera
var Q *nigiri.Queue
var ClipRect *nigiri.Sprite
var Particle *nigiri.Sprite
func mainLoop(win *ebiten.Image, dt float64) error {
if ebiten.IsKeyPressed(ebiten.KeyA) {
C.Translate(vec2.InDir(C.Angle()).Rotate90().Mul(1 / C.Scale()))
}
if ebiten.IsKeyPressed(ebiten.KeyD) {
C.Translate(vec2.InDir(C.Angle()).Rotate90().Mul(-1 / C.Scale()))
}
if ebiten.IsKeyPressed(ebiten.KeyW) {
C.Translate(vec2.InDir(C.Angle()).Mul(1 / C.Scale()))
}
if ebiten.IsKeyPressed(ebiten.KeyS) {
C.Translate(vec2.InDir(C.Angle()).Mul(-1 / C.Scale()))
}
if ebiten.IsKeyPressed(ebiten.KeyQ) {
C.Rotate(1)
}
if ebiten.IsKeyPressed(ebiten.KeyE) {
C.Rotate(-1)
}
if ebiten.IsKeyPressed(ebiten.KeyZ) {
C.MulScale(1.05)
}
if ebiten.IsKeyPressed(ebiten.KeyX) {
C.MulScale(1 / 1.05)
}
if ebiten.IsKeyPressed(ebiten.Key1) {
Particle.ScaleFactor=Particle.ScaleFactor.Mul(1.05)
}
if ebiten.IsKeyPressed(ebiten.Key2) {
Particle.ScaleFactor=Particle.ScaleFactor.Mul(1/1.05)
}
Q.Clear()
const gridBounds= 200
const gridStep = 10
for x := -gridBounds; x <= gridBounds; x += gridStep {
for y := -gridBounds; y <= gridBounds; y += gridStep {
Particle.Position = vec2.V(float64(x), float64(y))
switch ((y+gridBounds)/gridStep)%2 {
case 0: Particle.SetColor(colornames.Yellow)
case 1: Particle.SetColor(colornames.Blue)
}
Q.Add(Particle)
}
}
Q.Add(ClipRect)
Q.Run(win)
ebitenutil.DebugPrint(win, fmt.Sprintf("FPS: %v\nDraws: %v\nScale: %v",
ebiten.CurrentFPS(), Q.Len(),C.Scale()))
return nil
}
func main() {
prof.StartProfile("cam")
defer prof.StopProfile("cam")
Q = nigiri.NewQueue()
nigiri.SetTexLoader(nigiri.FileTexLoader("samples"))
tex, err := nigiri.GetTex("particle.png")
if err != nil {
panic(err)
}
C = nigiri.NewCamera()
C.SetCenter(vec2.V2{X: 500, Y: 500})
C.SetScale(5)
C.SetClipRect(image.Rect(300, 300, 700, 700))
tt, _ := ebiten.NewImage(10, 10, ebiten.FilterDefault)
tt.Fill(colornames.Darkkhaki)
ClipRect = nigiri.NewSprite(nigiri.NewTex(tt), 0, C.Local())
ClipRect.Position = vec2.V(500, 500)
ClipRect.Pivot = vec2.Center
ClipRect.Scaler = nigiri.NewFixedScaler(400, 400)
Particle = nigiri.NewSprite(tex, 1, C.Phys())
Particle.SetSmooth(true)
Particle.Pivot = vec2.Center
Particle.ScaleFactor = vec2.V(0.2, 0.2)
ebiten.SetVsyncEnabled(true)
nigiri.Run(mainLoop, 1000, 1000, 1, "TEST")
}