45 lines
1.4 KiB
Go
45 lines
1.4 KiB
Go
package pncdsl
|
|
|
|
import (
|
|
"github.com/hajimehoshi/ebiten/v2"
|
|
"github.com/hajimehoshi/ebiten/v2/inpututil"
|
|
)
|
|
|
|
// Input is read once per Update() and exposes a tiny "consume on use" API
|
|
// so that one click can be authoritative — e.g. clicking on a hotspot
|
|
// while a Say is active should only skip the Say, not also fire the
|
|
// hotspot underneath.
|
|
type Input struct {
|
|
mouseX, mouseY int
|
|
leftPressed bool
|
|
leftConsumed bool
|
|
rightPressed bool
|
|
rightConsumed bool
|
|
}
|
|
|
|
func newInput() *Input { return &Input{} }
|
|
|
|
func (i *Input) poll() {
|
|
i.mouseX, i.mouseY = ebiten.CursorPosition()
|
|
i.leftPressed = inpututil.IsMouseButtonJustPressed(ebiten.MouseButtonLeft)
|
|
i.leftConsumed = false
|
|
i.rightPressed = inpututil.IsMouseButtonJustPressed(ebiten.MouseButtonRight)
|
|
i.rightConsumed = false
|
|
}
|
|
|
|
func (i *Input) Pos() (int, int) { return i.mouseX, i.mouseY }
|
|
func (i *Input) Point() Point { return Point{X: float64(i.mouseX), Y: float64(i.mouseY)} }
|
|
func (i *Input) LeftClicked() bool { return i.leftPressed && !i.leftConsumed }
|
|
func (i *Input) RightClicked() bool { return i.rightPressed && !i.rightConsumed }
|
|
func (i *Input) ConsumeLeft() { i.leftConsumed = true }
|
|
func (i *Input) ConsumeRight() { i.rightConsumed = true }
|
|
|
|
// consumedClick is the Say-style "did the user click to skip?" probe.
|
|
func (i *Input) consumedClick() bool {
|
|
if i.LeftClicked() {
|
|
i.ConsumeLeft()
|
|
return true
|
|
}
|
|
return false
|
|
}
|