Code cleanup for TouchScreenMode

This commit is contained in:
Noah 2024-04-19 23:13:32 -07:00
parent b8665c8b8d
commit 21847f5e57
4 changed files with 24 additions and 6 deletions

View File

@ -44,6 +44,11 @@ Some minor changes:
* The game window maximizes on startup to fill the screen. * The game window maximizes on startup to fill the screen.
* Fixed a few places where the old "Load Level" menu was being called instead * Fixed a few places where the old "Load Level" menu was being called instead
of the fancy new one with the listbox. of the fancy new one with the listbox.
* Fixed a touch screen detection bug that was causing the mouse cursor to hide
on Macbooks when using their touchpad.
* Add a `--touch` command line flag to the game binary, which forces touch screen
mode to always be on (which hides the mouse cursor), in case of touch screen
detection errors or annoyances.
Some code cleanup and architecture changes: Some code cleanup and architecture changes:

View File

@ -19,6 +19,7 @@ import (
"git.kirsle.net/SketchyMaze/doodle/pkg/chatbot" "git.kirsle.net/SketchyMaze/doodle/pkg/chatbot"
"git.kirsle.net/SketchyMaze/doodle/pkg/gamepad" "git.kirsle.net/SketchyMaze/doodle/pkg/gamepad"
"git.kirsle.net/SketchyMaze/doodle/pkg/log" "git.kirsle.net/SketchyMaze/doodle/pkg/log"
"git.kirsle.net/SketchyMaze/doodle/pkg/native"
"git.kirsle.net/SketchyMaze/doodle/pkg/plus/bootstrap" "git.kirsle.net/SketchyMaze/doodle/pkg/plus/bootstrap"
"git.kirsle.net/SketchyMaze/doodle/pkg/plus/dpp" "git.kirsle.net/SketchyMaze/doodle/pkg/plus/dpp"
"git.kirsle.net/SketchyMaze/doodle/pkg/shmem" "git.kirsle.net/SketchyMaze/doodle/pkg/shmem"
@ -101,6 +102,11 @@ func main() {
Aliases: []string{"w"}, Aliases: []string{"w"},
Usage: "set the window size (e.g. -w 1024x768) or special value: desktop, mobile, landscape, maximized", Usage: "set the window size (e.g. -w 1024x768) or special value: desktop, mobile, landscape, maximized",
}, },
&cli.BoolFlag{
Name: "touch",
Aliases: []string{"t"},
Usage: "force TouchScreenMode to be on at all times, which hides the mouse cursor",
},
&cli.BoolFlag{ &cli.BoolFlag{
Name: "guitest", Name: "guitest",
Usage: "enter the GUI Test scene on startup", Usage: "enter the GUI Test scene on startup",
@ -167,10 +173,9 @@ func main() {
balance.FeaturesOn() balance.FeaturesOn()
} }
// Offline mode? // Set other program flags.
if c.Bool("offline") { shmem.OfflineMode = c.Bool("offline")
shmem.OfflineMode = true native.ForceTouchScreenModeAlwaysOn = c.Bool("touch")
}
// SDL engine. // SDL engine.
engine := sdl.New( engine := sdl.New(

View File

@ -31,6 +31,10 @@ var (
Y: 60, Y: 60,
} }
// Threshold of how many ticks should pass between the last Fingers Up
// event and a mouse movement, to indicate that TouchScreenMode should end.
TouchScreenModeLastFingerDownTicks uint64 = 10
// Player speeds, gravity and movement physics. // Player speeds, gravity and movement physics.
PlayerMaxVelocity float64 = 7 PlayerMaxVelocity float64 = 7
PlayerJumpVelocity float64 = -15 PlayerJumpVelocity float64 = -15

View File

@ -1,6 +1,7 @@
package native package native
import ( import (
"git.kirsle.net/SketchyMaze/doodle/pkg/balance"
"git.kirsle.net/SketchyMaze/doodle/pkg/log" "git.kirsle.net/SketchyMaze/doodle/pkg/log"
"git.kirsle.net/SketchyMaze/doodle/pkg/shmem" "git.kirsle.net/SketchyMaze/doodle/pkg/shmem"
"git.kirsle.net/go/render/event" "git.kirsle.net/go/render/event"
@ -9,13 +10,16 @@ import (
// Common code to handle basic touch screen detection. // Common code to handle basic touch screen detection.
var ( var (
// Force the TouchScreenMode to always be enabled.
ForceTouchScreenModeAlwaysOn bool
isTouchScreenMode bool isTouchScreenMode bool
lastFingerDownTick uint64 lastFingerDownTick uint64
) )
// IsTouchScreenMode is activated when the user has touched the screen, and false when the mouse is moved. // IsTouchScreenMode is activated when the user has touched the screen, and false when the mouse is moved.
func IsTouchScreenMode() bool { func IsTouchScreenMode() bool {
return isTouchScreenMode return ForceTouchScreenModeAlwaysOn || isTouchScreenMode
} }
/* /*
@ -51,7 +55,7 @@ func UpdateTouchScreenMode(ev *event.State) {
// If we have registered a mouse event a few ticks after the finger was // If we have registered a mouse event a few ticks after the finger was
// removed, it is a real mouse cursor and we exit touch screen mode. // removed, it is a real mouse cursor and we exit touch screen mode.
if ev.IsMouseEvent && shmem.Tick-lastFingerDownTick > 5 { if ev.IsMouseEvent && shmem.Tick-lastFingerDownTick > balance.TouchScreenModeLastFingerDownTicks {
log.Info("TouchScreenMode OFF") log.Info("TouchScreenMode OFF")
isTouchScreenMode = false isTouchScreenMode = false
} }