80 lines
2.6 KiB
Go
80 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"time"
|
|
|
|
"tea.melonie54.xyz/sean/go-susapp/src/enum"
|
|
"tea.melonie54.xyz/sean/go-susapp/src/util"
|
|
"github.com/gotk3/gotk3/gdk"
|
|
"github.com/gotk3/gotk3/gtk"
|
|
)
|
|
|
|
type MouseInputHandler struct {
|
|
state *State
|
|
renderer *Renderer
|
|
playGame func()
|
|
openSettings func()
|
|
disconnectFromGame func()
|
|
prevTime int64
|
|
}
|
|
|
|
func NewMouseInputHandler(state *State, renderer *Renderer, playGame func(), openSettings func(), disconnectFromGame func()) *MouseInputHandler {
|
|
return &MouseInputHandler{state, renderer, playGame, openSettings, disconnectFromGame, time.Now().UnixMilli()}
|
|
}
|
|
|
|
/*func (input *MouseInputHandler) pollingEvent(delta int64) {
|
|
|
|
}*/
|
|
|
|
func (input *MouseInputHandler) motionEvent(da *gtk.DrawingArea, event *gdk.Event) bool {
|
|
eventMotion := gdk.EventMotionNewFromEvent(event)
|
|
input.renderer.mouseX, input.renderer.mouseY = eventMotion.MotionVal()
|
|
return false
|
|
}
|
|
|
|
func (input *MouseInputHandler) buttonPressEvent(window *gtk.ApplicationWindow, ev *gdk.Event) bool {
|
|
btn := gdk.EventButtonNewFromEvent(ev)
|
|
switch btn.Button() {
|
|
case gdk.BUTTON_PRIMARY:
|
|
w := input.renderer.w
|
|
h := input.renderer.h
|
|
if input.state.Screen == enum.SCREEN_TITLE {
|
|
if util.CollisionIntersectCenter(input.renderer.mouseX, input.renderer.mouseY, w/2, h/2, 200, 40) {
|
|
input.playGame()
|
|
} else if util.CollisionIntersectCenter(input.renderer.mouseX, input.renderer.mouseY, w-40, h-40, 40, 40) {
|
|
input.openSettings()
|
|
} else {
|
|
if util.CollisionIntersectCenter(input.renderer.mouseX, input.renderer.mouseY, w/2, h/2-60, 200, 40) {
|
|
input.state.IsTypingReady = true
|
|
} else {
|
|
input.state.IsTypingReady = false
|
|
}
|
|
}
|
|
} else if input.state.Screen == enum.SCREEN_LOBBY {
|
|
if input.state.IsLobbyMenuOpen {
|
|
mw := w / 2
|
|
mh := h / 2
|
|
overlayBottom := mh + 200
|
|
if util.CollisionIntersectCenter(input.renderer.mouseX, input.renderer.mouseY, mw, overlayBottom-40, 200, 40) {
|
|
input.state.IsLobbyMenuOpen = false
|
|
} else if util.CollisionIntersectCenter(input.renderer.mouseX, input.renderer.mouseY, mw, overlayBottom-100, 200, 40) {
|
|
input.disconnectFromGame()
|
|
}
|
|
} else {
|
|
if util.CollisionIntersectCenter(input.renderer.mouseX, input.renderer.mouseY, w-40, 40, 40, 40) {
|
|
input.state.IsLobbyMenuOpen = true
|
|
}
|
|
}
|
|
} else if input.state.Screen == enum.SCREEN_ERROR {
|
|
mw := w / 2
|
|
mh := h / 2
|
|
if util.CollisionIntersectCenter(input.renderer.mouseX, input.renderer.mouseY, mw+190, mh-190, 40, 40) {
|
|
input.state.Screen = enum.SCREEN_TITLE
|
|
input.state.IsLobbyMenuOpen = false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
return false
|
|
}
|