Display overlay text in the UI
We still have fonts to do, so this is very ugly, but it at least shows *something* on the screen now.
This commit is contained in:
@@ -66,7 +66,7 @@ func registerMainButton(d *Driver, r *menus.Record) error {
|
||||
baseSpr: sprites[0],
|
||||
clickSpr: sprites[1],
|
||||
frozenSpr: sprites[2],
|
||||
hoverImpl: hoverImpl{text: r.Desc},
|
||||
hoverImpl: hoverImpl{text: r.Text},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@ func registerButton(d *Driver, r *menus.Record, spriteId int) error {
|
||||
baseSpr: sprites[0],
|
||||
clickSpr: sprites[1],
|
||||
frozenSpr: sprites[2],
|
||||
hoverImpl: hoverImpl{text: r.Desc},
|
||||
hoverImpl: hoverImpl{text: r.Text},
|
||||
}
|
||||
|
||||
d.clickables = append(d.clickables, btn)
|
||||
|
@@ -291,7 +291,7 @@ func (d *Driver) Draw(screen *ebiten.Image) error {
|
||||
}
|
||||
|
||||
func (d *Driver) addRecord(record *menus.Record) error {
|
||||
log.Printf("Adding record: %#+v", record)
|
||||
//log.Printf("Adding record: %#+v", record)
|
||||
|
||||
handler, ok := widgetBuilders[record.Type]
|
||||
if !ok {
|
||||
@@ -316,28 +316,28 @@ func (d *Driver) addRecord(record *menus.Record) error {
|
||||
|
||||
func (d *Driver) hoverStartEvent(h hoverable, inBounds bool) {
|
||||
if inBounds && !h.hoverState() {
|
||||
log.Printf("hoverable false -> true")
|
||||
//log.Printf("hoverable false -> true")
|
||||
h.setHoverState(true)
|
||||
}
|
||||
}
|
||||
|
||||
func (d *Driver) hoverEndEvent(h hoverable, inBounds bool) {
|
||||
if !inBounds && h.hoverState() {
|
||||
log.Printf("hoverable true -> false")
|
||||
//log.Printf("hoverable true -> false")
|
||||
h.setHoverState(false)
|
||||
}
|
||||
}
|
||||
|
||||
func (d *Driver) mouseDownEvent(c clickable, inBounds, wasDown, isDown bool) {
|
||||
if inBounds && !wasDown && isDown {
|
||||
log.Printf("mouse down false -> true")
|
||||
//log.Printf("mouse down false -> true")
|
||||
c.setMouseDownState(true)
|
||||
}
|
||||
}
|
||||
|
||||
func (d *Driver) mouseClickEvent(c clickable, inBounds, wasDown, isDown bool) {
|
||||
if inBounds && wasDown && !isDown {
|
||||
log.Printf("mouse click")
|
||||
//log.Printf("mouse click")
|
||||
c.registerMouseClick()
|
||||
}
|
||||
}
|
||||
@@ -345,12 +345,12 @@ func (d *Driver) mouseClickEvent(c clickable, inBounds, wasDown, isDown bool) {
|
||||
func (d *Driver) mouseUpEvent(c clickable, inBounds, wasDown, isDown bool) {
|
||||
if inBounds {
|
||||
if wasDown && !isDown {
|
||||
log.Printf("mouse down true -> false")
|
||||
//log.Printf("mouse down true -> false")
|
||||
c.setMouseDownState(false)
|
||||
}
|
||||
} else {
|
||||
if wasDown {
|
||||
log.Printf("mouse down true -> false")
|
||||
//log.Printf("mouse down true -> false")
|
||||
c.setMouseDownState(false)
|
||||
}
|
||||
}
|
||||
|
@@ -3,13 +3,16 @@ package ui
|
||||
import (
|
||||
"image"
|
||||
|
||||
"github.com/hajimehoshi/ebiten"
|
||||
"github.com/hajimehoshi/ebiten/ebitenutil"
|
||||
|
||||
"code.ur.gs/lupine/ordoor/internal/menus"
|
||||
)
|
||||
|
||||
func init() {
|
||||
registerBuilder(menus.TypeStatic, registerStatic)
|
||||
registerBuilder(menus.TypeHypertext, registerHypertext)
|
||||
registerBuilder(menus.TypeOverlay, registerStatic)
|
||||
registerBuilder(menus.TypeOverlay, registerOverlay)
|
||||
registerBuilder(menus.TypeAnimationSample, registerAnimation)
|
||||
}
|
||||
|
||||
@@ -21,6 +24,9 @@ type noninteractive struct {
|
||||
frames animation
|
||||
rect image.Rectangle
|
||||
|
||||
// Some non-interactives, e.g., overlays, are an image + text to be shown
|
||||
textImg *ebiten.Image
|
||||
|
||||
hoverImpl
|
||||
}
|
||||
|
||||
@@ -38,7 +44,7 @@ func registerStatic(d *Driver, r *menus.Record) error {
|
||||
|
||||
ni := &noninteractive{
|
||||
frames: animation{sprite.Image},
|
||||
hoverImpl: hoverImpl{text: r.Desc},
|
||||
hoverImpl: hoverImpl{text: r.Text},
|
||||
rect: sprite.Rect,
|
||||
}
|
||||
|
||||
@@ -55,8 +61,7 @@ func registerHypertext(d *Driver, r *menus.Record) error {
|
||||
}
|
||||
|
||||
ni := &noninteractive{
|
||||
frames: nil,
|
||||
hoverImpl: hoverImpl{text: r.Desc},
|
||||
hoverImpl: hoverImpl{text: r.Text},
|
||||
rect: sprite.Rect,
|
||||
}
|
||||
|
||||
@@ -65,6 +70,34 @@ func registerHypertext(d *Driver, r *menus.Record) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// An overlay is a static image + some text that needs to be rendered
|
||||
func registerOverlay(d *Driver, r *menus.Record) error {
|
||||
sprite, err := d.menu.Sprite(r.Share)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ni := &noninteractive{
|
||||
frames: animation{sprite.Image},
|
||||
rect: sprite.Rect,
|
||||
}
|
||||
|
||||
if r.Text != "" {
|
||||
// FIXME: we should be rendering the text much more nicely than this
|
||||
textImg, err := ebiten.NewImage(sprite.Rect.Dx(), sprite.Rect.Dy(), ebiten.FilterDefault)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ebitenutil.DebugPrint(textImg, r.Text)
|
||||
ni.textImg = textImg
|
||||
}
|
||||
|
||||
d.paintables = append(d.paintables, ni)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// An animation is a non-interactive element that displays something in a loop
|
||||
func registerAnimation(d *Driver, r *menus.Record) error {
|
||||
sprite, err := d.menu.Sprite(r.SpriteId[0])
|
||||
@@ -79,7 +112,7 @@ func registerAnimation(d *Driver, r *menus.Record) error {
|
||||
|
||||
ani := &noninteractive{
|
||||
frames: animation(frames),
|
||||
hoverImpl: hoverImpl{text: r.Desc},
|
||||
hoverImpl: hoverImpl{text: r.Text},
|
||||
rect: sprite.Rect,
|
||||
}
|
||||
|
||||
@@ -94,5 +127,11 @@ func (n *noninteractive) bounds() image.Rectangle {
|
||||
}
|
||||
|
||||
func (n *noninteractive) regions(tick int) []region {
|
||||
return oneRegion(n.bounds().Min, n.frames.image(tick))
|
||||
out := oneRegion(n.bounds().Min, n.frames.image(tick))
|
||||
|
||||
if n.textImg != nil {
|
||||
out = append(out, oneRegion(n.bounds().Min, n.textImg)...)
|
||||
}
|
||||
|
||||
return out
|
||||
}
|
||||
|
@@ -2,7 +2,6 @@ package ui
|
||||
|
||||
import (
|
||||
"image"
|
||||
"log"
|
||||
"math"
|
||||
"strconv"
|
||||
|
||||
@@ -51,7 +50,7 @@ func registerCheckbox(d *Driver, r *menus.Record) error {
|
||||
baseSpr: sprites[0], // unchecked
|
||||
clickSpr: sprites[2], // checked
|
||||
frozenSpr: sprites[1],
|
||||
hoverImpl: hoverImpl{text: r.Desc},
|
||||
hoverImpl: hoverImpl{text: r.Text},
|
||||
},
|
||||
valueImpl: valueImpl{str: "0"},
|
||||
}
|
||||
@@ -125,8 +124,6 @@ func (s *slider) registerMouseClick() {
|
||||
}
|
||||
|
||||
s.valueImpl.str = strconv.Itoa(value)
|
||||
log.Printf("Slider value: %#v", s.valueImpl.str)
|
||||
log.Printf("%#+v", s.steps)
|
||||
|
||||
s.clickImpl.registerMouseClick()
|
||||
}
|
||||
|
Reference in New Issue
Block a user