mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 13:46:44 -04:00
89 lines
2.4 KiB
Go
89 lines
2.4 KiB
Go
// Copyright 2018 Team 254. All Rights Reserved.
|
|
// Author: pat@patfairbank.com (Patrick Fairbank)
|
|
//
|
|
// Scoring logic for the 2018 vault element.
|
|
|
|
package game
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
type Vault struct {
|
|
Alliance
|
|
ForceCubes int
|
|
ForceCubesPlayed int
|
|
LevitateCubes int
|
|
LevitatePlayed bool
|
|
BoostCubes int
|
|
BoostCubesPlayed int
|
|
ForcePowerUp *PowerUp
|
|
BoostPowerUp *PowerUp
|
|
newlyPlayedPowerUp string
|
|
}
|
|
|
|
// Updates the state of the vault given the state of the individual power cube sensors.
|
|
func (vault *Vault) UpdateCubes(forceDistance, levitateDistance, boostDistance uint16) {
|
|
vault.ForceCubes = countCubes(forceDistance)
|
|
vault.LevitateCubes = countCubes(levitateDistance)
|
|
vault.BoostCubes = countCubes(boostDistance)
|
|
}
|
|
|
|
// Updates the state of the vault given the state of the power up buttons.
|
|
func (vault *Vault) UpdateButtons(forceButton, levitateButton, boostButton bool, currentTime time.Time) {
|
|
if levitateButton && vault.LevitateCubes == 3 && !vault.LevitatePlayed {
|
|
vault.LevitatePlayed = true
|
|
vault.newlyPlayedPowerUp = "levitate"
|
|
}
|
|
|
|
if forceButton && vault.ForceCubes > 0 && vault.ForcePowerUp == nil {
|
|
vault.ForcePowerUp = maybeActivatePowerUp(&PowerUp{Effect: Force, Alliance: vault.Alliance,
|
|
Level: vault.ForceCubes}, currentTime)
|
|
if vault.ForcePowerUp != nil {
|
|
vault.ForceCubesPlayed = vault.ForceCubes
|
|
vault.newlyPlayedPowerUp = "force"
|
|
}
|
|
}
|
|
|
|
if boostButton && vault.BoostCubes > 0 && vault.BoostPowerUp == nil {
|
|
vault.BoostPowerUp = maybeActivatePowerUp(&PowerUp{Effect: Boost, Alliance: vault.Alliance,
|
|
Level: vault.BoostCubes}, currentTime)
|
|
if vault.BoostPowerUp != nil {
|
|
vault.BoostCubesPlayed = vault.BoostCubes
|
|
vault.newlyPlayedPowerUp = "boost"
|
|
}
|
|
}
|
|
}
|
|
|
|
// Returns the name of the newly-played power up if there is one, or an empty string otherwise, and resets the state.
|
|
func (vault *Vault) CheckForNewlyPlayedPowerUp() string {
|
|
powerUp := vault.newlyPlayedPowerUp
|
|
vault.newlyPlayedPowerUp = ""
|
|
return powerUp
|
|
}
|
|
|
|
func countCubes(distance uint16) int {
|
|
// Ed Jordan's measurements:
|
|
// Empty 125
|
|
// 1 Short 98
|
|
// 1 Tall 92
|
|
// 2 Short 68
|
|
// 2 Tall 58
|
|
// 3 Short 43
|
|
// 3 Tall 26
|
|
if distance <= 15 {
|
|
// The sensor is probably disconnected or obstructed; this is too tall to be a cube stack.
|
|
return 0
|
|
}
|
|
if distance <= 50 {
|
|
return 3
|
|
}
|
|
if distance <= 75 {
|
|
return 2
|
|
}
|
|
if distance <= 105 {
|
|
return 1
|
|
}
|
|
return 0
|
|
}
|