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

@@ -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})