add iso.go

This commit is contained in:
Josh Deprez 2021-08-31 15:16:56 +10:00
parent 80f00e8107
commit cfe850d0da

29
engine/iso.go Normal file
View file

@ -0,0 +1,29 @@
package engine
// Box describes an axis-aligned rectangular prism.
type Box struct {
X, Y, Z int // coordinate of the left-top-farthest corner
W, H, D int // width, height, depth
}
// IsoProjection translates an integer 3D coordinate into an integer 2D
// coordinate.
type IsoProjection struct {
ZX, ZY int
}
// Project projects a 3D coordinate into 2D.
// If ZX = 0, x is unchanged; similarly for ZY and y.
// Otherwise, x becomes x + z/ZX and y becomes y + z/ZY.
// This is because there's little reason for an isometric projection in a game
// to exaggerate the Z position.
func (π IsoProjection) Project(x, y, z int) (xp, yp int) {
xp, yp = x, y
if π.ZX != 0 {
xp += z / π.ZX
}
if π.ZY != 0 {
yp += z / π.ZY
}
return xp, yp
}