Reimplement cursor as a query operation

This commit is contained in:
2020-04-10 20:54:58 +01:00
parent bb3ddc4896
commit f3fea83173
5 changed files with 58 additions and 37 deletions

View File

@@ -90,7 +90,8 @@ func registerBuilder(t menus.MenuType, f builderFunc) {
type Driver struct {
Name string
menu *assetstore.Menu
assets *assetstore.AssetStore
menu *assetstore.Menu
// UI elements we need to drive
clickables []clickable
@@ -100,6 +101,8 @@ type Driver struct {
paintables []paintable
valueables []valueable
cursor assetstore.CursorName
// The cursor in two different coordinate spaces: original, and screen-scaled
cursorOrig image.Point
cursorScaled image.Point
@@ -112,10 +115,12 @@ type Driver struct {
tooltip string
}
func NewDriver(menu *assetstore.Menu) (*Driver, error) {
func NewDriver(assets *assetstore.AssetStore, menu *assetstore.Menu) (*Driver, error) {
driver := &Driver{
Name: menu.Name,
menu: menu,
assets: assets,
menu: menu,
}
for _, record := range menu.Records() {
@@ -307,6 +312,20 @@ func (d *Driver) Draw(screen *ebiten.Image) error {
return nil
}
func (d *Driver) Cursor() (*ebiten.Image, *ebiten.DrawImageOptions, error) {
cursor, err := d.assets.Cursor(d.cursor)
if err != nil {
return nil, nil, err
}
op := &ebiten.DrawImageOptions{}
op.GeoM.Translate(float64(d.cursorOrig.X), float64(d.cursorOrig.Y))
op.GeoM.Concat(d.orig2native)
op.GeoM.Translate(float64(-cursor.Hotspot.X), float64(-cursor.Hotspot.Y))
return cursor.Image, op, nil
}
func (d *Driver) addRecord(record *menus.Record) error {
//log.Printf("Adding record: %#+v", record)
children := record.Children