add iso.go
This commit is contained in:
parent
80f00e8107
commit
cfe850d0da
1 changed files with 29 additions and 0 deletions
29
engine/iso.go
Normal file
29
engine/iso.go
Normal 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
|
||||||
|
}
|
Loading…
Reference in a new issue