This commit is contained in:
Josh Deprez 2021-09-05 20:54:43 +10:00
parent d5a141f4b8
commit 03e5e7ca49
3 changed files with 54 additions and 11 deletions

View file

@ -1,10 +0,0 @@
package engine
type HexPrismMap struct {
Map map[Point3]*HexPrism
}
type HexPrism struct {
pos Point3
hpm *HexPrismMap
}

53
engine/prisms.go Normal file
View file

@ -0,0 +1,53 @@
package engine
import (
"image"
"github.com/hajimehoshi/ebiten/v2"
)
type PrismMap struct {
Map map[Point3]*Prism
DrawOrderBias image.Point // dot with (X,Y) = bias
DrawOffset image.Point // offset to apply to whole map
DrawZStride image.Point // (X,Y) draw translation for each unit in Z
PrismSize Point3
Sheet Sheet
}
func (m *PrismMap) Prepare(*Game) error {
for v, p := range m.Map {
p.pos = v
p.pm = m
}
return nil
}
func (m *PrismMap) Transform(pt Transform) (tf Transform) {
tf.Opts.GeoM.Translate(cfloat(m.DrawOffset))
return tf.Concat(pt)
}
type Prism struct {
Cell int
pos Point3
pm *PrismMap
}
func (p *Prism) Draw(screen *ebiten.Image, tf *Transform) {
screen.DrawImage(p.pm.Sheet.SubImage(p.Cell), &tf.Opts)
}
func (p *Prism) DrawOrder() (int, int) {
return p.pos.Z * p.pm.PrismSize.Z,
dot(p.pos.XY(), p.pm.DrawOrderBias)
}
func (p *Prism) Transform(pt Transform) (tf Transform) {
v := p.pos.CMul(p.pm.PrismSize)
tf.Opts.GeoM.Translate(cfloat(
v.XY().Add(p.pm.DrawZStride.Mul(v.Z)),
))
return tf.Concat(pt)
}

View file

@ -1,6 +1,6 @@
package engine package engine
const ( var (
// Oblique projections // Oblique projections
CabinetProjection = ParallelProjection{0.5, 0.5} CabinetProjection = ParallelProjection{0.5, 0.5}
CavalierProjection = ParallelProjection{1, 1} CavalierProjection = ParallelProjection{1, 1}