Show tooltips when hovering

This commit is contained in:
2020-03-22 15:37:48 +00:00
parent bfe9fbdf7d
commit ba7c06e5fd
6 changed files with 58 additions and 19 deletions

View File

@@ -47,18 +47,10 @@ func main() {
log.Fatalf("Couldn't load menu %s: %v", *menuName, err)
}
/* TODO: move i18n, fonts into assetstore
if i18n, err := data.LoadI18n(filepath.Join(*gamePath, "Data", data.I18nFile)); err != nil {
log.Printf("Failed to load i18n data, skipping internationalization: %v", err)
} else {
menu.Internationalize(i18n)
}
// loadedFonts, err := loadFonts(menu.FontNames...)
// if err != nil {
// log.Fatalf("Failed to load font: %v", err)
// }
*/
iface, err := ui.NewInterface(menu)
if err != nil {

View File

@@ -6,6 +6,8 @@ import (
"os"
"path/filepath"
"strings"
"code.ur.gs/lupine/ordoor/internal/data"
)
const (
@@ -37,6 +39,7 @@ type AssetStore struct {
objs map[string]*Object
sets map[string]*Set
sounds map[string]*Sound
strings *data.I18n
}
// New returns a new AssetStore
@@ -86,6 +89,7 @@ func (a *AssetStore) Refresh() error {
a.objs = make(map[string]*Object)
a.sets = make(map[string]*Set)
a.sounds = make(map[string]*Sound)
a.strings = nil
return nil
}

View File

@@ -0,0 +1,29 @@
package assetstore
import (
"code.ur.gs/lupine/ordoor/internal/data"
)
// Internationalisation is completely hidden inside the asset store. Everything
// comes out already converted.
//
// FIXME: Allow the language to be set. Right now, it's hardcoded to USEng
// because that's the only copy of Chaos Gate I have.
func (a *AssetStore) i18n() (*data.I18n, error) {
if a.strings != nil {
return a.strings, nil
}
filename, err := a.lookup(data.I18nFile, "", "Data")
if err != nil {
return nil, err
}
i18n, err := data.LoadI18n(filename)
if err != nil {
return nil, err
}
a.strings = i18n
return i18n, nil
}

View File

@@ -54,6 +54,13 @@ func (a *AssetStore) Menu(name string) (*Menu, error) {
return nil, err
}
i18n, err := a.i18n()
if err != nil {
return nil, err
}
raw.Internationalize(i18n)
obj, err := a.loadMenuObject(raw) // TODO: multiple objects
if err != nil {
return nil, err

View File

@@ -6,6 +6,7 @@ import (
"reflect" // For DeepEqual
"github.com/hajimehoshi/ebiten"
"github.com/hajimehoshi/ebiten/ebitenutil"
"code.ur.gs/lupine/ordoor/internal/assetstore"
"code.ur.gs/lupine/ordoor/internal/menus"
@@ -93,6 +94,11 @@ func (i *Interface) Draw(screen *ebiten.Image) error {
return err
}
do.GeoM = geo
if widget.hoverState && widget.Tooltip != "" {
mouseX, mouseY := ebiten.CursorPosition()
ebitenutil.DebugPrintAt(screen, widget.Tooltip, mouseX+16, mouseY-16)
}
}
return nil
@@ -168,6 +174,7 @@ func (i *Interface) widgetFromRecord(record *menus.Record) (*Widget, error) {
widget := &Widget{
Bounds: sprite.Rect,
Tooltip: record.Desc,
path: path,
record: record,
sprite: sprite,

View File

@@ -14,7 +14,7 @@ import (
type Widget struct {
// Position on the screen in original (i.e., unscaled) coordinates
Bounds image.Rectangle
// Tooltip string // TODO: show the tooltip when hovering?
Tooltip string
OnHoverEnter func()
OnHoverLeave func()