From b04ac93aaa788e750b79ae35526aab16434a9727 Mon Sep 17 00:00:00 2001
From: Sergio Vera Castellano <severa@magento.com>
Date: Sun, 31 Dec 2017 17:56:58 +0100
Subject: [PATCH] First commit

---
 examples/community/isometric-basics/README.md |  11 ++
 .../community/isometric-basics/castle.png     | Bin 0 -> 26296 bytes
 examples/community/isometric-basics/main.go   | 102 ++++++++++++++++++
 3 files changed, 113 insertions(+)
 create mode 100644 examples/community/isometric-basics/README.md
 create mode 100644 examples/community/isometric-basics/castle.png
 create mode 100644 examples/community/isometric-basics/main.go

diff --git a/examples/community/isometric-basics/README.md b/examples/community/isometric-basics/README.md
new file mode 100644
index 0000000..77625bd
--- /dev/null
+++ b/examples/community/isometric-basics/README.md
@@ -0,0 +1,11 @@
+# Isometric view basics
+
+Created by [Sergio Vera](https://github.com/svera).
+
+Isometric view is a display method used to create an illusion of 3D for an otherwise 2D game - sometimes referred to as pseudo 3D or 2.5D.
+
+Implementing an isometric view can be done in many ways, but for the sake of simplicity I'll focus on a tile-based approach, which is the most efficient and widely used method.
+
+In the tile-based approach, each visual element is broken down into smaller pieces, called tiles, of a standard size. These tiles will be arranged to form the game world according to pre-determined level data - usually a 2D array.
+
+For a detailed explanation about the maths behind this, read [http://clintbellanger.net/articles/isometric_math/](http://clintbellanger.net/articles/isometric_math/).
diff --git a/examples/community/isometric-basics/castle.png b/examples/community/isometric-basics/castle.png
new file mode 100644
index 0000000000000000000000000000000000000000..190fd9ee1e7b6b6c6af13352916164eb93d9a913
GIT binary patch
literal 26296
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
DMRaI9

literal 0
HcmV?d00001

diff --git a/examples/community/isometric-basics/main.go b/examples/community/isometric-basics/main.go
new file mode 100644
index 0000000..246f9e4
--- /dev/null
+++ b/examples/community/isometric-basics/main.go
@@ -0,0 +1,102 @@
+package main
+
+import (
+	"image"
+	"os"
+
+	"github.com/faiface/pixel"
+	"github.com/faiface/pixel/pixelgl"
+
+	_ "image/png"
+)
+
+const (
+	windowWidth  = 800
+	windowHeight = 800
+	// sprite tiles are squared, 64x64 size
+	tileSize = 64
+	f        = 0 // floor identifier
+	w        = 1 // wall identifier
+)
+
+var levelData = [][]uint{
+	{f, f, f, f, f, f}, // This row will be rendered in the lower left part of the screen (closer to the viewer)
+	{w, f, f, f, f, w},
+	{w, f, f, f, f, w},
+	{w, f, f, f, f, w},
+	{w, f, f, f, f, w},
+	{w, w, w, w, w, w}, // And this in the upper right
+}
+var win *pixelgl.Window
+var offset = pixel.V(400, 325)
+var floorTile, wallTile *pixel.Sprite
+
+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() {
+	var err error
+
+	cfg := pixelgl.WindowConfig{
+		Title:  "Isometric demo",
+		Bounds: pixel.R(0, 0, windowWidth, windowHeight),
+		VSync:  true,
+	}
+	win, err = pixelgl.NewWindow(cfg)
+	if err != nil {
+		panic(err)
+	}
+
+	pic, err := loadPicture("castle.png")
+	if err != nil {
+		panic(err)
+	}
+
+	wallTile = pixel.NewSprite(pic, pixel.R(0, 448, tileSize, 512))
+	floorTile = pixel.NewSprite(pic, pixel.R(0, 128, tileSize, 192))
+
+	depthSort()
+
+	for !win.Closed() {
+		win.Update()
+	}
+}
+
+// Draw level data tiles to window, from farthest to closest.
+// In order to achieve the depth effect, we need to render tiles up to down, being lower
+// closer to the viewer (see painter's algorithm). To do that, we need to process levelData in reverse order,
+// so its first row is rendered last, as OpenGL considers its origin to be in the lower left corner of the display.
+func depthSort() {
+	for x := len(levelData) - 1; x >= 0; x-- {
+		for y := len(levelData[x]) - 1; y >= 0; y-- {
+			isoCoords := cartesianToIso(pixel.V(float64(x), float64(y)))
+			mat := pixel.IM.Moved(offset.Add(isoCoords))
+			// Not really needed, just put to show bigger blocks
+			mat = mat.ScaledXY(win.Bounds().Center(), pixel.V(2, 2))
+			tileType := levelData[x][y]
+			if tileType == f {
+				floorTile.Draw(win, mat)
+			} else {
+				wallTile.Draw(win, mat)
+			}
+		}
+	}
+}
+
+func cartesianToIso(pt pixel.Vec) pixel.Vec {
+	return pixel.V((pt.X-pt.Y)*(tileSize/2), (pt.X+pt.Y)*(tileSize/4))
+}
+
+func main() {
+	pixelgl.Run(run)
+}
-- 
GitLab