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 }