summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2018-12-30 14:38:33 +0100
committerDimitri Sokolyuk <demon@dim13.org>2018-12-30 14:38:33 +0100
commit4a727347ccda302776e65a1701ddc3716a3ceb2c (patch)
treeafffa4ca34ea83bbd663797ae78a3b798701a471
parentfc5c0803a7ce13c0e8c291515ce489b7b2a89a2a (diff)
...
-rw-r--r--fire/main.go29
1 files changed, 23 insertions, 6 deletions
diff --git a/fire/main.go b/fire/main.go
index 3b68a00..8a1dab5 100644
--- a/fire/main.go
+++ b/fire/main.go
@@ -3,6 +3,7 @@
package main
import (
+ "errors"
"fmt"
"image"
"image/color"
@@ -62,32 +63,47 @@ const (
)
type drawContext struct {
- buf *image.Paletted
+ img *image.Paletted
+ isOn bool
}
func newDrawContext(x, y int) *drawContext {
rand.Seed(time.Now().UnixNano())
img := image.NewPaletted(image.Rect(0, 0, x, y), palette)
+ return &drawContext{img: img}
+}
+
+func (dc *drawContext) toggle() {
+ var c uint8
+ if !dc.isOn {
+ c = uint8(len(palette) - 1)
+ }
for x := 0; x < screenWidth; x++ {
- img.SetColorIndex(x, 0, uint8(len(palette)-1))
+ dc.img.SetColorIndex(x, 0, c)
}
- return &drawContext{buf: img}
+ dc.isOn = !dc.isOn
}
func (dc *drawContext) update(screen *ebiten.Image) error {
+ if ebiten.IsKeyPressed(ebiten.KeyQ) {
+ return errors.New("exit")
+ }
+ if ebiten.IsKeyPressed(ebiten.KeySpace) {
+ dc.toggle()
+ }
r := screen.Bounds()
for x := 0; x < r.Max.X; x++ {
for y := 1; y < r.Max.Y; y++ {
z := rand.Intn(3)
- n := dc.buf.ColorIndexAt(x, y-1)
+ n := dc.img.ColorIndexAt(x, y-1)
if n > 0 && z&1 == 0 {
n--
}
- dc.buf.SetColorIndex(x-z+1, y, n)
+ dc.img.SetColorIndex(x-z+1, y, n)
}
}
if !ebiten.IsDrawingSkipped() {
- screen.ReplacePixels(imaging.FlipV(dc.buf).Pix)
+ screen.ReplacePixels(imaging.FlipV(dc.img).Pix)
ebitenutil.DebugPrint(screen, fmt.Sprintf("TPS: %0.2f", ebiten.CurrentTPS()))
}
return nil
@@ -95,6 +111,7 @@ func (dc *drawContext) update(screen *ebiten.Image) error {
func main() {
dc := newDrawContext(screenWidth, screenHeight)
+ dc.toggle()
ebiten.SetRunnableInBackground(true)
if err := ebiten.Run(dc.update, screenWidth, screenHeight, scale, "Fire"); err != nil {
log.Fatal(err)