Repos / shark / 4d336f64a2
commit 4d336f64a298976fa0563955ef8040431a0eeec1
Author: Nhân <hi@imnhan.com>
Date: Wed Oct 4 17:54:01 2023 +0700
fix bug when walking against a KDE panel
diff --git a/states.go b/states.go
index 3d2e248..76d0233 100644
--- a/states.go
+++ b/states.go
@@ -133,7 +133,9 @@ func (s *StateDrag) Update(sm *StateMachine) {
}
s.PreviousMousePos = mousePos
}
-func (s *StateDrag) EndAnimHook(sm *StateMachine) {}
+func (s *StateDrag) EndAnimHook(sm *StateMachine) {
+ syncWinPos(sm)
+}
type StateRClick struct{}
@@ -217,7 +219,24 @@ func (s *StateWalk) Update(sm *StateMachine) {
}
}
func (s *StateWalk) EndAnimHook(sm *StateMachine) {
+ // On KDE, our window isn't allowed to walk over a vertical taskbar
+ // ("panel" in KDE parlance), so when gura walks agains a taskbar, the
+ // in-game position (sm.x) will get out of sync with the actual window
+ // position. Therefore, we must run a sync:
+ syncWinPos(sm)
+
if randBool(StopChance) {
sm.SetState(&StateIdle{})
}
}
+
+// Sometimes the sm.x/y doesn't match the window's actual position on screen.
+// Run this at the end of States that might end up in that situation.
+func syncWinPos(sm *StateMachine) {
+ actualX, actualY := ebiten.WindowPosition()
+ if actualX != sm.x || actualY != sm.y {
+ //fmt.Printf("ingame: %d,%d - actual: %d,%d\n", sm.x, sm.y, actualX, actualY)
+ sm.x = actualX
+ sm.y = actualY
+ }
+}