Implement the main menu for the ordoor binary

In this commit, we also remove code that doesn't properly belong in
view-menu
This commit is contained in:
2020-03-22 19:12:44 +00:00
parent d4d8a50ce4
commit cfa56a0e12
6 changed files with 225 additions and 78 deletions

View File

@@ -20,6 +20,7 @@ import (
// mind. The interface transparently scales them all to the current screen size
// to compensate.
type Interface struct {
Name string
menu *assetstore.Menu
static []*assetstore.Sprite // Static elements in the interface
ticks int
@@ -28,6 +29,8 @@ type Interface struct {
func NewInterface(menu *assetstore.Menu) (*Interface, error) {
iface := &Interface{
Name: menu.Name,
menu: menu,
}
@@ -59,6 +62,10 @@ func (i *Interface) Update(screenX, screenY int) error {
// Iterate through all widgets, update mouse state
for _, widget := range i.widgets {
if widget.disabled {
continue // No activity for disabled widgets
}
mouseIsOver := mousePos.In(widget.Bounds)
widget.hovering(mouseIsOver)
widget.mouseButton(mouseIsOver && ebiten.IsMouseButtonPressed(ebiten.MouseButtonLeft))
@@ -188,11 +195,17 @@ func (i *Interface) widgetFromRecord(record *menus.Record) (*Widget, error) {
}
widget.hoverAnimation = hovers
sprite, err := i.menu.Sprite(record.Share + 1)
pressed, err := i.menu.Sprite(record.Share + 1)
if err != nil {
return nil, err
}
widget.mouseButtonDownImage = sprite.Image
widget.mouseButtonDownImage = pressed.Image
disabled, err := i.menu.Sprite(record.Share + 2)
if err != nil {
return nil, err
}
widget.disabledImage = disabled.Image
}
return widget, nil