Add global tick counter for debugging, fix unclick state errors
This commit is contained in:
parent
b7751507e4
commit
f8fe40c5ef
|
@ -28,6 +28,7 @@ type Doodle struct {
|
|||
|
||||
startTime time.Time
|
||||
running bool
|
||||
ticks uint64
|
||||
events *events.State
|
||||
width int32
|
||||
height int32
|
||||
|
@ -106,6 +107,7 @@ func (d *Doodle) Run() error {
|
|||
// Draw a frame and log how long it took.
|
||||
start := time.Now()
|
||||
err = d.Loop()
|
||||
d.ticks++
|
||||
elapsed := time.Now().Sub(start)
|
||||
|
||||
tmp := elapsed / time.Millisecond
|
||||
|
@ -146,7 +148,7 @@ var pixelHistory []Pixel
|
|||
// Loop runs one loop of the game engine.
|
||||
func (d *Doodle) Loop() error {
|
||||
// Poll for events.
|
||||
ev, err := d.events.Poll()
|
||||
ev, err := d.events.Poll(d.ticks)
|
||||
if err != nil {
|
||||
log.Error("event poll error: %s", err)
|
||||
return err
|
||||
|
@ -166,6 +168,7 @@ func (d *Doodle) Loop() error {
|
|||
dy: ev.CursorY.Last,
|
||||
}
|
||||
|
||||
// Append unique new pixels.
|
||||
if len(pixelHistory) == 0 || pixelHistory[len(pixelHistory)-1] != pixel {
|
||||
pixelHistory = append(pixelHistory, pixel)
|
||||
}
|
||||
|
|
|
@ -10,29 +10,34 @@ import (
|
|||
// State keeps track of event states.
|
||||
type State struct {
|
||||
// Mouse buttons.
|
||||
Button1 BoolFrameState
|
||||
Button2 BoolFrameState
|
||||
Button1 *BoolFrameState
|
||||
Button2 *BoolFrameState
|
||||
|
||||
// Cursor positions.
|
||||
CursorX Int32FrameState
|
||||
CursorY Int32FrameState
|
||||
CursorX *Int32FrameState
|
||||
CursorY *Int32FrameState
|
||||
}
|
||||
|
||||
// New creates a new event state manager.
|
||||
func New() *State {
|
||||
return &State{}
|
||||
return &State{
|
||||
Button1: &BoolFrameState{},
|
||||
Button2: &BoolFrameState{},
|
||||
CursorX: &Int32FrameState{},
|
||||
CursorY: &Int32FrameState{},
|
||||
}
|
||||
}
|
||||
|
||||
// Poll for events.
|
||||
func (s *State) Poll() (*State, error) {
|
||||
func (s *State) Poll(ticks uint64) (*State, error) {
|
||||
for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
|
||||
switch t := event.(type) {
|
||||
case *sdl.QuitEvent:
|
||||
return s, errors.New("quit")
|
||||
case *sdl.MouseMotionEvent:
|
||||
if DebugMouseEvents {
|
||||
log.Debug("[%d ms] MouseMotion type:%d id:%d x:%d y:%d xrel:%d yrel:%d",
|
||||
t.Timestamp, t.Type, t.Which, t.X, t.Y, t.XRel, t.YRel,
|
||||
log.Debug("[%d ms] tick:%d MouseMotion type:%d id:%d x:%d y:%d xrel:%d yrel:%d",
|
||||
t.Timestamp, ticks, t.Type, t.Which, t.X, t.Y, t.XRel, t.YRel,
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -42,8 +47,8 @@ func (s *State) Poll() (*State, error) {
|
|||
s.Button1.Push(t.State == 1)
|
||||
case *sdl.MouseButtonEvent:
|
||||
if DebugClickEvents {
|
||||
log.Debug("[%d ms] MouseButton type:%d id:%d x:%d y:%d button:%d state:%d",
|
||||
t.Timestamp, t.Type, t.Which, t.X, t.Y, t.Button, t.State,
|
||||
log.Debug("[%d ms] tick:%d MouseButton type:%d id:%d x:%d y:%d button:%d state:%d",
|
||||
t.Timestamp, ticks, t.Type, t.Which, t.X, t.Y, t.Button, t.State,
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -53,26 +58,43 @@ func (s *State) Poll() (*State, error) {
|
|||
|
||||
// Is a mouse button pressed down?
|
||||
if t.Button == 1 {
|
||||
var eventName string
|
||||
if DebugClickEvents {
|
||||
if t.State == 1 && s.Button1.Now == false {
|
||||
log.Debug("Mouse Button1 DOWN")
|
||||
eventName = "DOWN"
|
||||
} else if t.State == 0 && s.Button1.Now == true {
|
||||
log.Debug("Mouse Button1 UP")
|
||||
eventName = "UP"
|
||||
}
|
||||
}
|
||||
s.Button1.Push(t.State == 1)
|
||||
|
||||
if eventName != "" {
|
||||
log.Debug("tick:%d Mouse Button1 %s BEFORE: %+v",
|
||||
ticks,
|
||||
eventName,
|
||||
s.Button1,
|
||||
)
|
||||
s.Button1.Push(eventName == "DOWN")
|
||||
log.Debug("tick:%d Mouse Button1 %s AFTER: %+v",
|
||||
ticks,
|
||||
eventName,
|
||||
s.Button1,
|
||||
)
|
||||
|
||||
// Return the event immediately.
|
||||
return s, nil
|
||||
}
|
||||
}
|
||||
|
||||
s.Button2.Push(t.Button == 3 && t.State == 1)
|
||||
// s.Button2.Push(t.Button == 3 && t.State == 1)
|
||||
case *sdl.MouseWheelEvent:
|
||||
if DebugMouseEvents {
|
||||
log.Debug("[%d ms] MouseWheel type:%d id:%d x:%d y:%d",
|
||||
t.Timestamp, t.Type, t.Which, t.X, t.Y,
|
||||
log.Debug("[%d ms] tick:%d MouseWheel type:%d id:%d x:%d y:%d",
|
||||
t.Timestamp, ticks, t.Type, t.Which, t.X, t.Y,
|
||||
)
|
||||
}
|
||||
case *sdl.KeyboardEvent:
|
||||
log.Debug("[%d ms] Keyboard type:%d sym:%c modifiers:%d state:%d repeat:%d\n",
|
||||
t.Timestamp, t.Type, t.Keysym.Sym, t.Keysym.Mod, t.State, t.Repeat,
|
||||
log.Debug("[%d ms] tick:%d Keyboard type:%d sym:%c modifiers:%d state:%d repeat:%d\n",
|
||||
t.Timestamp, ticks, t.Type, t.Keysym.Sym, t.Keysym.Mod, t.State, t.Repeat,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user