go-susapp/mousehandler.go

80 lines
2.6 KiB
Go
Raw Normal View History

2021-09-12 00:25:10 +01:00
package main
import (
"time"
"codehub.onpointcoding.net/sean/go-susapp/enum"
"codehub.onpointcoding.net/sean/go-susapp/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
}