mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 21:56:50 -04:00
68 lines
1.7 KiB
Go
68 lines
1.7 KiB
Go
// Copyright 2017 Team 254. All Rights Reserved.
|
|
// Author: pat@patfairbank.com (Patrick Fairbank)
|
|
//
|
|
// Scoring logic for the 2017 touchpad element.
|
|
|
|
package game
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
NotTriggered = iota
|
|
Triggered
|
|
Held
|
|
)
|
|
|
|
type Touchpad struct {
|
|
lastTriggered bool
|
|
triggeredTime *time.Time
|
|
untriggeredTime *time.Time
|
|
}
|
|
|
|
// Updates the internal timing state of the touchpad given the current state of the sensor.
|
|
func (touchpad *Touchpad) UpdateState(triggered bool, currentTime time.Time) {
|
|
if triggered && !touchpad.lastTriggered {
|
|
touchpad.triggeredTime = ¤tTime
|
|
touchpad.untriggeredTime = nil
|
|
} else if !triggered && touchpad.lastTriggered {
|
|
touchpad.untriggeredTime = ¤tTime
|
|
}
|
|
touchpad.lastTriggered = triggered
|
|
}
|
|
|
|
// Determines the scoring status of the touchpad. Returns 0 if not triggered, 1 if triggered but not yet for a full
|
|
// second, and 2 if triggered and counting for points.
|
|
func (touchpad *Touchpad) GetState(matchStartTime, currentTime time.Time) int {
|
|
matchEndTime := GetMatchEndTime(matchStartTime)
|
|
|
|
if touchpad.triggeredTime != nil && touchpad.triggeredTime.Before(matchEndTime) {
|
|
if touchpad.untriggeredTime == nil {
|
|
if currentTime.Sub(*touchpad.triggeredTime) >= time.Second {
|
|
return Held
|
|
} else {
|
|
return Triggered
|
|
}
|
|
} else if touchpad.untriggeredTime.Sub(*touchpad.triggeredTime) >= time.Second &&
|
|
touchpad.untriggeredTime.After(matchEndTime) {
|
|
return Held
|
|
}
|
|
}
|
|
|
|
return NotTriggered
|
|
}
|
|
|
|
func CountTouchpads(touchpads *[3]Touchpad, matchStartTime, currentTime time.Time) int {
|
|
matchEndTime := GetMatchEndTime(matchStartTime)
|
|
|
|
count := 0
|
|
for _, touchpad := range touchpads {
|
|
if touchpad.GetState(matchEndTime, currentTime) == 2 {
|
|
count++
|
|
}
|
|
}
|
|
|
|
return count
|
|
}
|