This makes menus display more correctly, and also fixes trees and other objects on the main map, although it messes up bounds clipping (sigh).
60 lines
1.1 KiB
Go
60 lines
1.1 KiB
Go
package conv
|
|
|
|
import (
|
|
"github.com/hajimehoshi/ebiten"
|
|
|
|
"code.ur.gs/lupine/ordoor/internal/data"
|
|
)
|
|
|
|
// Important conversions:
|
|
//
|
|
// * Width & height now stored using int
|
|
// * Colour data is now 32-bit rather than using a palette
|
|
type Sprite struct {
|
|
XOffset int
|
|
YOffset int
|
|
Width int
|
|
Height int
|
|
|
|
Image *ebiten.Image
|
|
}
|
|
|
|
type Object struct {
|
|
Name string
|
|
Sprites []*Sprite
|
|
}
|
|
|
|
func MapByName(objects []*Object) map[string]*Object {
|
|
out := make(map[string]*Object, len(objects))
|
|
|
|
for _, obj := range objects {
|
|
out[obj.Name] = obj
|
|
}
|
|
|
|
return out
|
|
}
|
|
|
|
func ConvertObject(rawObj *data.Object, name string) (*Object, error) {
|
|
out := &Object{
|
|
Name: name,
|
|
Sprites: make([]*Sprite, len(rawObj.Sprites)),
|
|
}
|
|
|
|
for i, rawSpr := range rawObj.Sprites {
|
|
ebitenImage, err := ebiten.NewImageFromImage(rawSpr.ToImage(), ebiten.FilterDefault)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
out.Sprites[i] = &Sprite{
|
|
XOffset: int(rawSpr.XOffset),
|
|
YOffset: int(rawSpr.YOffset),
|
|
Width: int(rawSpr.Width),
|
|
Height: int(rawSpr.Height),
|
|
Image: ebitenImage,
|
|
}
|
|
}
|
|
|
|
return out, nil
|
|
}
|