From 317cfb17b02db266a2324591a560761010a9164a Mon Sep 17 00:00:00 2001
From: faiface <faiface@ksp.sk>
Date: Sun, 9 Apr 2017 15:32:46 +0200
Subject: [PATCH] add code for 04 guide

---
 .../main.go                                   | 101 ++++++++++++++++++
 .../trees.png                                 | Bin 0 -> 2541 bytes
 2 files changed, 101 insertions(+)
 create mode 100644 examples/guide/04_pressing_keys_and_clicking_mouse/main.go
 create mode 100644 examples/guide/04_pressing_keys_and_clicking_mouse/trees.png

diff --git a/examples/guide/04_pressing_keys_and_clicking_mouse/main.go b/examples/guide/04_pressing_keys_and_clicking_mouse/main.go
new file mode 100644
index 0000000..3c41512
--- /dev/null
+++ b/examples/guide/04_pressing_keys_and_clicking_mouse/main.go
@@ -0,0 +1,101 @@
+package main
+
+import (
+	"image"
+	"math"
+	"math/rand"
+	"os"
+	"time"
+
+	_ "image/png"
+
+	"github.com/faiface/pixel"
+	"github.com/faiface/pixel/pixelgl"
+	"golang.org/x/image/colornames"
+)
+
+func loadPicture(path string) (pixel.Picture, error) {
+	file, err := os.Open(path)
+	if err != nil {
+		return nil, err
+	}
+	defer file.Close()
+	img, _, err := image.Decode(file)
+	if err != nil {
+		return nil, err
+	}
+	return pixel.PictureDataFromImage(img), nil
+}
+
+func run() {
+	cfg := pixelgl.WindowConfig{
+		Title:  "Pixel Rocks!",
+		Bounds: pixel.R(0, 0, 1024, 768),
+		VSync:  true,
+	}
+	win, err := pixelgl.NewWindow(cfg)
+	if err != nil {
+		panic(err)
+	}
+
+	spritesheet, err := loadPicture("trees.png")
+	if err != nil {
+		panic(err)
+	}
+
+	var treesFrames []pixel.Rect
+	for x := spritesheet.Bounds().Min.X(); x < spritesheet.Bounds().Max.X(); x += 32 {
+		for y := spritesheet.Bounds().Min.Y(); y < spritesheet.Bounds().Max.Y(); y += 32 {
+			treesFrames = append(treesFrames, pixel.R(x, y, x+32, y+32))
+		}
+	}
+
+	var (
+		camPos       = pixel.V(0, 0)
+		camSpeed     = 500.0
+		camZoom      = 1.0
+		camZoomSpeed = 1.2
+		trees        []*pixel.Sprite
+	)
+
+	last := time.Now()
+	for !win.Closed() {
+		dt := time.Since(last).Seconds()
+		last = time.Now()
+
+		cam := pixel.IM.Scaled(camPos, camZoom).Moved(win.Bounds().Center() - camPos)
+		win.SetMatrix(cam)
+
+		if win.JustPressed(pixelgl.MouseButtonLeft) {
+			tree := pixel.NewSprite(spritesheet, treesFrames[rand.Intn(len(treesFrames))])
+			mouse := cam.Unproject(win.MousePosition())
+			tree.SetMatrix(pixel.IM.Scaled(0, 4).Moved(mouse))
+			trees = append(trees, tree)
+		}
+		if win.Pressed(pixelgl.KeyLeft) {
+			camPos -= pixel.X(camSpeed * dt)
+		}
+		if win.Pressed(pixelgl.KeyRight) {
+			camPos += pixel.X(camSpeed * dt)
+		}
+		if win.Pressed(pixelgl.KeyDown) {
+			camPos -= pixel.Y(camSpeed * dt)
+		}
+		if win.Pressed(pixelgl.KeyUp) {
+			camPos += pixel.Y(camSpeed * dt)
+		}
+		camZoom *= math.Pow(camZoomSpeed, win.MouseScroll().Y())
+
+		win.Clear(colornames.Forestgreen)
+
+		for _, tree := range trees {
+			tree.Draw(win)
+		}
+
+		win.Update()
+	}
+}
+
+func main() {
+	pixelgl.Run(run)
+}
diff --git a/examples/guide/04_pressing_keys_and_clicking_mouse/trees.png b/examples/guide/04_pressing_keys_and_clicking_mouse/trees.png
new file mode 100644
index 0000000000000000000000000000000000000000..73a6beca00db1b82bf2443eb116873b0414229b9
GIT binary patch
literal 2541
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
D+ivhK

literal 0
HcmV?d00001

-- 
GitLab