Respect sprite X and Y offsets

This makes menus display more correctly, and also fixes trees and other
objects on the main map, although it messes up bounds clipping (sigh).
This commit is contained in:
2020-03-21 00:56:35 +00:00
parent eb5c4430e8
commit 7a8e9dbd97
10 changed files with 109 additions and 55 deletions

View File

@@ -156,7 +156,7 @@ func (e *env) Draw(screen *ebiten.Image) error {
}
func (e *env) renderCell(x, y, z int, screen *ebiten.Image) error {
images, err := e.area.ImagesForCell(x, y, z)
sprites, err := e.area.SpritesForCell(x, y, z)
if err != nil {
return err
}
@@ -177,10 +177,12 @@ func (e *env) renderCell(x, y, z int, screen *ebiten.Image) error {
// TODO: iso.Scale(e.state.zoom, e.state.zoom) // apply current zoom factor
for _, img := range images {
if err := screen.DrawImage(img, &ebiten.DrawImageOptions{GeoM: iso}); err != nil {
for _, spr := range sprites {
iso.Translate(float64(spr.XOffset), float64(spr.YOffset))
if err := screen.DrawImage(spr.Image, &ebiten.DrawImageOptions{GeoM: iso}); err != nil {
return err
}
iso.Translate(float64(-spr.XOffset), float64(-spr.YOffset))
}
return nil

View File

@@ -164,10 +164,11 @@ func (e *env) drawRecord(record *menus.Record, screen *ebiten.Image, offset ebit
x := float64(record.X)
y := float64(record.Y)
// Theory: we either give spriteid, or y,x,spriteId
// Maybe: we either give spriteid, or y,x,spriteId ? Unsure, doesn't seem
// to be needed for now
if len(record.SpriteId) == 3 {
x = x + float64(record.SpriteId[1])
y = y + float64(record.SpriteId[0]*2) // FIXME: *2 works, no idea
// x = x + float64(record.SpriteId[1])
// y = y + float64(record.SpriteId[0])
spriteId = record.SpriteId[2]
}
@@ -184,15 +185,21 @@ func (e *env) drawRecord(record *menus.Record, screen *ebiten.Image, offset ebit
y = 0.0
}
log.Printf(
"Drawing id=%v type=%v spriteid=%v x=%v y=%v desc=%q parent=%p",
record.Id, record.Type, spriteId, record.X, record.Y, record.Desc, record.Parent,
)
// FIXME: Need to handle multiple objects
obj := e.objects[0]
sprite := obj.Sprites[spriteId]
x = x + float64(sprite.XOffset)
y = y + float64(sprite.YOffset)
// Account for scaling
x, y = offset.Apply(x, y)
log.Printf(
"Drawing id=%v type=%v spriteid=%v x=%v(+%v) y=%v(%+v) desc=%q parent=%p",
record.Id, record.Type, spriteId, record.X, record.Y, sprite.XOffset, sprite.YOffset, record.Desc, record.Parent,
)
offset.Translate(x, y)
screen.DrawImage(sprite.Image, &ebiten.DrawImageOptions{GeoM: offset})