Documentation ¶
Index ¶
- Variables
- type ApiServer
- type CardModification
- type CardOperation
- type CardType
- type Engine
- func (e *Engine) AddGameEvent(gameEvent *GameEvent)
- func (e *Engine) BallPlacementPos() *Location
- func (e *Engine) CardNumberIncremented(team Team) *GameEvent
- func (e *Engine) CommandForEvent(event *GameEvent) (command RefCommand, forTeam Team, err error)
- func (e *Engine) Continue()
- func (e *Engine) FindMatchingRecentGameEvent(event *GameEvent) *GameEvent
- func (e *Engine) FoulCounterIncremented(team Team) *GameEvent
- func (e *Engine) IsRecentGameEvent(event *GameEvent) bool
- func (e *Engine) LogCard(card *EventCard, prevState *State)
- func (e *Engine) LogCommand(command RefCommand, commandFor Team, prevState *State)
- func (e *Engine) LogGameEvent(event *GameEvent, prevState *State)
- func (e *Engine) LogGameEventQueued(event *GameEvent, prevState *State)
- func (e *Engine) LogHint(hint string, description string, team Team)
- func (e *Engine) LogIgnoredGameEvent(event *GameEvent)
- func (e *Engine) LogModify(m EventModifyValue)
- func (e *Engine) LogStage(stage Stage, prevState *State)
- func (e *Engine) LogTeamBotSubstitutionChange(forTeam Team, substituteBot bool)
- func (e *Engine) LogTeamGoalkeeperChange(forTeam Team, oldGoalkeeperId int, newGoalkeeperId int)
- func (e *Engine) LogTime(description string, forTeam Team)
- func (e *Engine) PlacementFailuresIncremented(team Team) *GameEvent
- func (e *Engine) Process(event Event) error
- func (e *Engine) QueueGameEvent(gameEvent *GameEvent)
- func (e *Engine) ResetGame()
- func (e *Engine) SendCommand(command RefCommand, forTeam Team)
- func (e *Engine) Update() (timeChanged bool, eventTriggered bool)
- type Event
- type EventCard
- type EventCommand
- type EventConsumer
- type EventModifyCardTime
- type EventModifyGameEventBehavior
- type EventModifyValue
- type EventStage
- type EventTrigger
- type GameController
- func (c *GameController) OnNewEvent(event Event)
- func (c *GameController) ProcessAutoRefRequests(id string, request refproto.AutoRefToController) error
- func (c *GameController) ProcessGeometry(data *sslproto.SSL_GeometryData)
- func (c *GameController) ProcessTeamRequests(teamName string, request refproto.TeamToController) error
- func (c *GameController) Run()
- type GameControllerState
- type GameEvent
- func (e GameEvent) AddsRedCard() bool
- func (e GameEvent) AddsYellowCard() bool
- func (e GameEvent) ByTeam() Team
- func (e GameEvent) IncrementsFoulCounter() bool
- func (e GameEvent) IsSecondary() bool
- func (e GameEvent) IsSkipped() bool
- func (e GameEvent) Occurred() time.Time
- func (e *GameEvent) SetOccurred(occurred time.Time)
- func (e GameEvent) String() string
- func (e GameEvent) ToProto() *refproto.GameEvent
- type GameEventBehavior
- type GameEventDetails
- type GameEventProposal
- type GameEventType
- type GameState
- type Location
- type MessageWrapper
- type PersistentState
- type ProtocolEntry
- type Publisher
- type RefCommand
- type RefMessage
- type Stage
- type StageOperation
- type State
- func (s State) BotSubstitutionIntend() Team
- func (s *State) DeepCopy() (c *State)
- func (s State) GameState() GameState
- func (s *State) GetFirstGameEvent(gameEventType GameEventType) *GameEvent
- func (s *State) PrimaryGameEvent() *GameEvent
- func (s State) String() string
- func (s *State) TeamByName(teamName string) Team
- type StatePreserver
- type Team
- type TeamChoice
- type TeamInfo
- type TriggerType
- type UiProtocolType
Constants ¶
This section is empty.
Variables ¶
var GameEventBehaviors = []GameEventBehavior{GameEventBehaviorOn, GameEventBehaviorMajority, GameEventBehaviorOff}
GameEventBehaviors contain all known command enum constants
var GameEventTypes = []GameEventType{ GameEventNone, GameEventAll, GameEventPrepared, GameEventNoProgressInGame, GameEventPlacementFailed, GameEventPlacementSucceeded, GameEventBotSubstitution, GameEventTooManyRobots, GameEventBallLeftFieldTouchLine, GameEventBallLeftFieldGoalLine, GameEventPossibleGoal, GameEventGoal, GameEventIndirectGoal, GameEventChippedGoal, GameEventAimlessKick, GameEventKickTimeout, GameEventKeeperHeldBall, GameEventAttackerDoubleTouchedBall, GameEventAttackerTouchedBallInDefenseArea, GameEventAttackerTouchedOpponentInDefenseArea, GameEventAttackerTouchedOpponentInDefenseAreaSkipped, GameEventBotDribbledBallTooFar, GameEventBotKickedBallTooFast, GameEventAttackerTooCloseToDefenseArea, GameEventBotInterferedPlacement, GameEventBotCrashDrawn, GameEventBotCrashUnique, GameEventBotCrashUniqueSkipped, GameEventBotPushedBot, GameEventBotPushedBotSkipped, GameEventBotHeldBallDeliberately, GameEventBotTippedOver, GameEventBotTooFastInStop, GameEventDefenderTooCloseToKickPoint, GameEventDefenderInDefenseAreaPartially, GameEventDefenderInDefenseArea, GameEventMultipleCards, GameEventMultiplePlacementFailures, GameEventMultipleFouls, GameEventUnsportingBehaviorMinor, GameEventUnsportingBehaviorMajor, }
GameStates contain all known command enum constants
var GameStates = []GameState{ GameStateHalted, GameStateStopped, GameStateRunning, GameStatePreKickoff, GameStatePrePenalty, GameStateTimeout, GameStateBallPlacement, }
GameStates contain all known command enum constants
var RefCommands = []RefCommand{ CommandUnknown, CommandHalt, CommandStop, CommandNormalStart, CommandForceStart, CommandDirect, CommandIndirect, CommandKickoff, CommandPenalty, CommandTimeout, CommandBallPlacement, }
Commands contain all known command enum constants
var Stages = []Stage{ StagePreGame, StageFirstHalf, StageHalfTime, StageSecondHalfPre, StageSecondHalf, StageOvertimeBreak, StageOvertimeFirstHalfPre, StageOvertimeFirstHalf, StageOvertimeHalfTime, StageOvertimeSecondHalfPre, StageOvertimeSecondHalf, StageShootoutBreak, StageShootout, StagePostGame, }
Stages include all available stages, ordered
var Teams = []Team{TeamYellow, TeamBlue, TeamBoth, TeamUnknown}
Teams contain all known team enum constants
Functions ¶
This section is empty.
Types ¶
type ApiServer ¶
type ApiServer struct { Consumer EventConsumer // contains filtered or unexported fields }
func (*ApiServer) PublishState ¶
func (a *ApiServer) PublishState(gcState *GameControllerState)
func (*ApiServer) PublishUiProtocol ¶ added in v0.16.0
func (a *ApiServer) PublishUiProtocol(protocol []*ProtocolEntry)
type CardModification ¶
type CardModification struct { CardID int `json:"cardId" yaml:"cardId"` TimeLeft time.Duration `json:"timeLeft" yaml:"timeLeft"` }
CardModification to apply to a card
type CardOperation ¶
type CardOperation string
CardOperation on a card
const ( // CardOperationAdd add a card CardOperationAdd CardOperation = "add" // CardOperationRevoke revoke a card CardOperationRevoke CardOperation = "revoke" // CardOperationModify modify a card CardOperationModify CardOperation = "modify" )
type Engine ¶
type Engine struct { State *State GcState *GameControllerState StageTimes map[Stage]time.Duration TimeProvider timer.TimeProvider LastTimeUpdate time.Time PersistentState *PersistentState Geometry config.Geometry Rand *rand.Rand // contains filtered or unexported fields }
func (*Engine) AddGameEvent ¶ added in v0.8.0
func (*Engine) BallPlacementPos ¶ added in v0.8.0
BallPlacementPos determines the ball placement position based on the primary game event
func (*Engine) CardNumberIncremented ¶ added in v0.9.0
func (*Engine) CommandForEvent ¶ added in v0.9.0
func (e *Engine) CommandForEvent(event *GameEvent) (command RefCommand, forTeam Team, err error)
func (*Engine) FindMatchingRecentGameEvent ¶ added in v1.1.4
func (*Engine) FoulCounterIncremented ¶ added in v0.9.0
func (*Engine) IsRecentGameEvent ¶ added in v1.1.4
func (*Engine) LogCommand ¶ added in v0.3.0
func (e *Engine) LogCommand(command RefCommand, commandFor Team, prevState *State)
LogCommand adds a command to the protocol
func (*Engine) LogGameEvent ¶ added in v0.3.0
LogGameEvent adds a game event to the protocol
func (*Engine) LogGameEventQueued ¶ added in v1.0.0
LogGameEvent adds a game event to the protocol
func (*Engine) LogHint ¶ added in v0.28.0
LogHint adds a hint for the game-controller operator to the protocol
func (*Engine) LogIgnoredGameEvent ¶ added in v0.10.0
LogIgnoredGameEvent adds an ignored game event to the protocol
func (*Engine) LogModify ¶ added in v0.9.0
func (e *Engine) LogModify(m EventModifyValue)
LogModify adds a modification to the protocol
func (*Engine) LogTeamBotSubstitutionChange ¶ added in v0.17.0
LogTeamBotSubstitutionChange adds a bot substitution intend change from a team to the protocol
func (*Engine) LogTeamGoalkeeperChange ¶ added in v0.17.0
LogTeamGoalkeeperChange adds a goalkeeper change from a team to the protocol
func (*Engine) LogTime ¶ added in v0.6.0
LogTime adds a time event (like stage time ends or card time ends) to the protocol
func (*Engine) PlacementFailuresIncremented ¶ added in v0.9.0
func (*Engine) QueueGameEvent ¶ added in v1.0.0
func (*Engine) SendCommand ¶ added in v0.4.0
func (e *Engine) SendCommand(command RefCommand, forTeam Team)
type Event ¶
type Event struct { Card *EventCard `json:"card" yaml:"card"` Command *EventCommand `json:"command" yaml:"command"` Modify *EventModifyValue `json:"modify" yaml:"modify"` Stage *EventStage `json:"stage" yaml:"stage"` Trigger *EventTrigger `json:"trigger" yaml:"trigger"` GameEvent *GameEvent `json:"gameEvent" yaml:"gameEvent"` RevertProtocolEntry *string `json:"revertProtocolEntry,omitempty" yaml:"revertProtocolEntry"` }
Event holds all possible events. Only one at a time can be applied
type EventCard ¶
type EventCard struct { ForTeam Team `json:"forTeam" yaml:"forTeam"` Type CardType `json:"cardType" yaml:"type"` Operation CardOperation `json:"operation" yaml:"operation"` Modification CardModification `json:"modification" yaml:"modification"` }
EventCard is an event that can be applied
type EventCommand ¶
type EventCommand struct { ForTeam *Team `json:"forTeam" yaml:"forTeam"` Type RefCommand `json:"commandType" yaml:"type"` Location *Location `json:"location" yaml:"location"` }
EventCommand is an event that can be applied
func (EventCommand) String ¶
func (c EventCommand) String() string
type EventConsumer ¶
type EventConsumer interface {
OnNewEvent(event Event)
}
type EventModifyCardTime ¶
type EventModifyCardTime struct { CardID int `json:"cardId" yaml:"cardId"` Duration string `json:"duration" yaml:"duration"` }
EventModifyCardTime holds the duration for a certain yellow card duration
type EventModifyGameEventBehavior ¶ added in v0.10.0
type EventModifyGameEventBehavior struct { GameEventType GameEventType `json:"gameEventType" yaml:"gameEventType"` GameEventBehavior GameEventBehavior `json:"gameEventBehavior" yaml:"gameEventBehavior"` }
EventModifyGameEventBehavior holds the type to behavior mapping
type EventModifyValue ¶
type EventModifyValue struct { ForTeam Team `json:"forTeam,omitempty"` Goals *int `json:"goals,omitempty" yaml:"goals"` Goalkeeper *int `json:"goalkeeper,omitempty" yaml:"goalkeeper"` YellowCards *int `json:"yellowCards,omitempty" yaml:"yellowCards"` YellowCardTime *EventModifyCardTime `json:"yellowCardTime,omitempty" yaml:"yellowCardTime"` RedCards *int `json:"redCards,omitempty" yaml:"redCards"` TimeoutsLeft *int `json:"timeoutsLeft,omitempty" yaml:"timeoutsLeft"` TimeoutTimeLeft *string `json:"timeoutTimeLeft,omitempty" yaml:"timeoutTimeLeft"` OnPositiveHalf *bool `json:"onPositiveHalf,omitempty" yaml:"onPositiveHalf"` TeamName *string `json:"teamName,omitempty" yaml:"teamName"` FoulCounter *int `json:"foulCounter,omitempty" yaml:"foulCounter"` BallPlacementFailures *int `json:"ballPlacementFailures,omitempty" yaml:"ballPlacementFailures"` CanPlaceBall *bool `json:"canPlaceBall,omitempty" yaml:"canPlaceBall"` Division *config.Division `json:"division,omitempty" yaml:"division"` AutoContinue *bool `json:"autoContinue,omitempty" yaml:"autoContinue"` FirstKickoffTeam *string `json:"firstKickoffTeam,omitempty" yaml:"firstKickoffTeam"` GameEventBehavior *EventModifyGameEventBehavior `json:"gameEventBehavior,omitempty" yaml:"gameEventBehavior"` BotSubstitutionIntend *bool `json:"botSubstitutionIntend,omitempty" yaml:"botSubstitutionIntend"` RemoveGameEvent *int `json:"removeGameEvent,omitempty" yaml:"removeGameEvent"` }
EventModifyValue is an event that can be applied
func (EventModifyValue) String ¶
func (m EventModifyValue) String() string
func (EventModifyValue) Type ¶ added in v0.11.1
func (m EventModifyValue) Type() string
func (EventModifyValue) Value ¶ added in v0.11.1
func (m EventModifyValue) Value() string
type EventStage ¶
type EventStage struct {
StageOperation StageOperation `json:"stageOperation" yaml:"stageOperation"`
}
EventStage is an event that can be applied
type EventTrigger ¶
type EventTrigger struct {
Type TriggerType `json:"triggerType" yaml:"type"`
}
EventTrigger is an event that can be applied
type GameController ¶
type GameController struct { Config config.Controller Publisher Publisher ApiServer ApiServer AutoRefServer *rcon.AutoRefServer TeamServer *rcon.TeamServer CiServer rcon.CiServer Engine Engine ConnectionMutex sync.Mutex PublishMutex sync.Mutex StateMutex sync.Mutex VisionReceiver *vision.Receiver // contains filtered or unexported fields }
GameController controls a game
func NewGameController ¶
func NewGameController(cfg config.Controller) (c *GameController)
NewGameController creates a new GameController
func (*GameController) OnNewEvent ¶
func (c *GameController) OnNewEvent(event Event)
OnNewEvent processes the given event
func (*GameController) ProcessAutoRefRequests ¶ added in v0.8.0
func (c *GameController) ProcessAutoRefRequests(id string, request refproto.AutoRefToController) error
func (*GameController) ProcessGeometry ¶ added in v0.9.0
func (c *GameController) ProcessGeometry(data *sslproto.SSL_GeometryData)
func (*GameController) ProcessTeamRequests ¶ added in v0.8.0
func (c *GameController) ProcessTeamRequests(teamName string, request refproto.TeamToController) error
func (*GameController) Run ¶
func (c *GameController) Run()
Run the GameController by starting several go-routines. This method will not block.
type GameControllerState ¶ added in v1.0.0
type GameControllerState struct { Division config.Division `json:"division" yaml:"division"` AutoContinue bool `json:"autoContinue" yaml:"autoContinue"` FirstKickoffTeam Team `json:"firstKickoffTeam" yaml:"firstKickoffTeam"` GameEventBehavior map[GameEventType]GameEventBehavior `json:"gameEventBehavior" yaml:"gameEventBehavior"` GameEventProposals []*GameEventProposal `json:"gameEventProposals" yaml:"gameEventProposals"` AutoRefsConnected []string `json:"autoRefsConnected" yaml:"autoRefsConnected"` TeamConnected map[Team]bool `json:"teamConnected" yaml:"teamConnected"` TeamConnectionVerified map[Team]bool `json:"teamConnectionVerified" yaml:"teamConnectionVerified"` MatchState *State `json:"matchState" yaml:"matchState"` }
func NewGameControllerState ¶ added in v1.0.0
func NewGameControllerState() (s *GameControllerState)
func (GameControllerState) DeepCopy ¶ added in v1.0.0
func (s GameControllerState) DeepCopy() (c GameControllerState)
type GameEvent ¶ added in v0.8.0
type GameEvent struct { Type GameEventType `json:"type"` Details GameEventDetails `json:"details"` Origins []string `json:"origins"` // contains filtered or unexported fields }
GameEvent combines the type of a game event with the corresponding detail structures
func (GameEvent) AddsRedCard ¶ added in v0.8.0
AddsRedCard checks if this game event causes a red card
func (GameEvent) AddsYellowCard ¶ added in v0.8.0
AddsYellowCard checks if this game event causes a yellow card
func (GameEvent) ByTeam ¶ added in v0.8.0
ByTeam extracts the `ByTeam` attribute from the game event details
func (GameEvent) IncrementsFoulCounter ¶ added in v0.8.0
IncrementsFoulCounter checks if the game event increments the foul counter
func (GameEvent) IsSecondary ¶ added in v0.8.0
IsSecondary checks if this game event is a secondary one that does not influence the next referee command
func (GameEvent) IsSkipped ¶ added in v0.11.0
IsSkipped checks if the game event is a skipped one (one for which the game was not stopped based on the decision of a team)
func (*GameEvent) SetOccurred ¶ added in v0.30.0
type GameEventBehavior ¶ added in v0.10.0
type GameEventBehavior string
const ( GameEventBehaviorOn GameEventBehavior = "on" GameEventBehaviorMajority GameEventBehavior = "majority" GameEventBehaviorOff GameEventBehavior = "off" )
func (GameEventBehavior) Valid ¶ added in v0.19.0
func (b GameEventBehavior) Valid() bool
Valid checks if the GameEventBehavior enum value is among the known values
type GameEventDetails ¶ added in v0.8.0
type GameEventDetails struct { BallLeftFieldTouchLine *refproto.GameEvent_BallLeftField `json:"ballLeftFieldTouchLine,omitempty"` BallLeftFieldGoalLine *refproto.GameEvent_BallLeftField `json:"ballLeftFieldGoalLine,omitempty"` AimlessKick *refproto.GameEvent_AimlessKick `json:"aimlessKick,omitempty"` PossibleGoal *refproto.GameEvent_Goal `json:"possibleGoal,omitempty"` Goal *refproto.GameEvent_Goal `json:"goal,omitempty"` IndirectGoal *refproto.GameEvent_IndirectGoal `json:"indirectGoal,omitempty"` ChippedGoal *refproto.GameEvent_ChippedGoal `json:"chippedGoal,omitempty"` BotTooFastInStop *refproto.GameEvent_BotTooFastInStop `json:"botTooFastInStop,omitempty"` BotTippedOver *refproto.GameEvent_BotTippedOver `json:"botTippedOver,omitempty"` BotInterferedPlacement *refproto.GameEvent_BotInterferedPlacement `json:"botInterferedPlacement,omitempty"` BotCrashDrawn *refproto.GameEvent_BotCrashDrawn `json:"botCrashDrawn,omitempty"` BotKickedBallTooFast *refproto.GameEvent_BotKickedBallTooFast `json:"botKickedBallTooFast,omitempty"` BotDribbledBallTooFar *refproto.GameEvent_BotDribbledBallTooFar `json:"botDribbledBallTooFar,omitempty"` BotCrashUnique *refproto.GameEvent_BotCrashUnique `json:"botCrashUnique,omitempty"` BotCrashUniqueSkipped *refproto.GameEvent_BotCrashUnique `json:"botCrashUniqueSkipped,omitempty"` BotPushedBot *refproto.GameEvent_BotPushedBot `json:"botPushedBot,omitempty"` BotPushedBotSkipped *refproto.GameEvent_BotPushedBot `json:"botPushedBotSkipped,omitempty"` BotHeldBallDeliberately *refproto.GameEvent_BotHeldBallDeliberately `json:"botHeldBallDeliberately,omitempty"` AttackerDoubleTouchedBall *refproto.GameEvent_AttackerDoubleTouchedBall `json:"attackerDoubleTouchedBall,omitempty"` AttackerTooCloseToDefenseArea *refproto.GameEvent_AttackerTooCloseToDefenseArea `json:"attackerTooCloseToDefenseArea,omitempty"` AttackerTouchedBallInDefenseArea *refproto.GameEvent_AttackerTouchedBallInDefenseArea `json:"attackerTouchedBallInDefenseArea,omitempty"` AttackerTouchedOpponentInDefenseArea *refproto.GameEvent_AttackerTouchedOpponentInDefenseArea `json:"attackerTouchedOpponentInDefenseArea,omitempty"` AttackerTouchedOpponentInDefenseAreaSkipped *refproto.GameEvent_AttackerTouchedOpponentInDefenseArea `json:"attackerTouchedOpponentInDefenseAreaSkipped,omitempty"` DefenderTooCloseToKickPoint *refproto.GameEvent_DefenderTooCloseToKickPoint `json:"defenderTooCloseToKickPoint,omitempty"` DefenderInDefenseAreaPartially *refproto.GameEvent_DefenderInDefenseAreaPartially `json:"defenderInDefenseAreaPartially,omitempty"` DefenderInDefenseArea *refproto.GameEvent_DefenderInDefenseArea `json:"defenderInDefenseArea,omitempty"` KeeperHeldBall *refproto.GameEvent_KeeperHeldBall `json:"keeperHeldBall,omitempty"` UnsportingBehaviorMinor *refproto.GameEvent_UnsportingBehaviorMinor `json:"unsportingBehaviorMinor,omitempty"` UnsportingBehaviorMajor *refproto.GameEvent_UnsportingBehaviorMajor `json:"unsportingBehaviorMajor,omitempty"` MultipleCards *refproto.GameEvent_MultipleCards `json:"multipleCards,omitempty"` MultipleFouls *refproto.GameEvent_MultipleFouls `json:"multipleFouls,omitempty"` MultiplePlacementFailures *refproto.GameEvent_MultiplePlacementFailures `json:"multiplePlacementFailures,omitempty"` KickTimeout *refproto.GameEvent_KickTimeout `json:"kickTimeout,omitempty"` NoProgressInGame *refproto.GameEvent_NoProgressInGame `json:"noProgressInGame,omitempty"` PlacementFailed *refproto.GameEvent_PlacementFailed `json:"placementFailed,omitempty"` PlacementSucceeded *refproto.GameEvent_PlacementSucceeded `json:"placementSucceeded,omitempty"` Prepared *refproto.GameEvent_Prepared `json:"prepared,omitempty"` BotSubstitution *refproto.GameEvent_BotSubstitution `json:"botSubstitution,omitempty"` TooManyRobots *refproto.GameEvent_TooManyRobots `json:"tooManyRobots,omitempty"` }
GameEventDetails holds details of a game event. Only one field should be non-nil
func GameEventDetailsFromProto ¶ added in v0.16.0
func GameEventDetailsFromProto(event refproto.GameEvent) (d GameEventDetails)
GameEventDetailsFromProto converts a protobuf game event into internal details
func (GameEventDetails) EventType ¶ added in v0.8.0
func (d GameEventDetails) EventType() GameEventType
EventType returns the internal game event type of game event details
func (GameEventDetails) String ¶ added in v0.16.0
func (d GameEventDetails) String() string
String converts the game event details to a string
type GameEventProposal ¶ added in v0.10.0
type GameEventProposal struct { ProposerId string `json:"proposerId"` GameEvent GameEvent `json:"gameEvent"` ValidUntil time.Time `json:"validUntil"` }
GameEventProposal holds a proposal for a game event from an autoRef
type GameEventType ¶ added in v0.3.0
type GameEventType string
const ( GameEventNone GameEventType = "" GameEventAll GameEventType = "all" GameEventPrepared GameEventType = "prepared" GameEventNoProgressInGame GameEventType = "noProgressInGame" GameEventPlacementFailed GameEventType = "placementFailed" GameEventPlacementSucceeded GameEventType = "placementSucceeded" GameEventBotSubstitution GameEventType = "botSubstitution" GameEventTooManyRobots GameEventType = "tooManyRobots" GameEventBallLeftFieldTouchLine GameEventType = "ballLeftFieldTouchLine" GameEventBallLeftFieldGoalLine GameEventType = "ballLeftFieldGoalLine" GameEventPossibleGoal GameEventType = "possibleGoal" GameEventGoal GameEventType = "goal" GameEventIndirectGoal GameEventType = "indirectGoal" GameEventChippedGoal GameEventType = "chippedGoal" GameEventAimlessKick GameEventType = "aimlessKick" GameEventKickTimeout GameEventType = "kickTimeout" GameEventKeeperHeldBall GameEventType = "keeperHeldBall" GameEventAttackerDoubleTouchedBall GameEventType = "attackerDoubleTouchedBall" GameEventAttackerTouchedBallInDefenseArea GameEventType = "attackerTouchedBallInDefenseArea" GameEventAttackerTouchedOpponentInDefenseArea GameEventType = "attackerTouchedOpponentInDefenseArea" GameEventAttackerTouchedOpponentInDefenseAreaSkipped GameEventType = "attackerTouchedOpponentInDefenseAreaSkipped" GameEventBotDribbledBallTooFar GameEventType = "botDribbledBallTooFar" GameEventBotKickedBallTooFast GameEventType = "botKickedBallTooFast" GameEventAttackerTooCloseToDefenseArea GameEventType = "attackerTooCloseToDefenseArea" GameEventBotInterferedPlacement GameEventType = "botInterferedPlacement" GameEventBotCrashDrawn GameEventType = "botCrashDrawn" GameEventBotCrashUnique GameEventType = "botCrashUnique" GameEventBotCrashUniqueSkipped GameEventType = "botCrashUniqueSkipped" GameEventBotPushedBot GameEventType = "botPushedBot" GameEventBotPushedBotSkipped GameEventType = "botPushedBotSkipped" GameEventBotHeldBallDeliberately GameEventType = "botHeldBallDeliberately" GameEventBotTippedOver GameEventType = "botTippedOver" GameEventBotTooFastInStop GameEventType = "botTooFastInStop" GameEventDefenderTooCloseToKickPoint GameEventType = "defenderTooCloseToKickPoint" GameEventDefenderInDefenseAreaPartially GameEventType = "defenderInDefenseAreaPartially" GameEventDefenderInDefenseArea GameEventType = "defenderInDefenseArea" GameEventMultipleCards GameEventType = "multipleCards" GameEventMultiplePlacementFailures GameEventType = "multiplePlacementFailures" GameEventMultipleFouls GameEventType = "multipleFouls" GameEventUnsportingBehaviorMinor GameEventType = "unsportingBehaviorMinor" GameEventUnsportingBehaviorMajor GameEventType = "unsportingBehaviorMajor" )
func AllGameEvents ¶ added in v0.10.0
func AllGameEvents() []GameEventType
AllGameEvents returns a list of all known game events
func (GameEventType) Valid ¶ added in v0.19.0
func (g GameEventType) Valid() bool
Valid checks if the GameEventType enum value is among the known values
type GameState ¶
type GameState string
GameState of a game
const ( // GameStateHalted halted GameStateHalted GameState = "Halted" // GameStateStopped stopped GameStateStopped GameState = "Stopped" // GameStateRunning running GameStateRunning GameState = "Running" // GameStatePreKickoff kickoff GameStatePreKickoff GameState = "Prepare Kickoff" // GameStatePrePenalty penalty GameStatePrePenalty GameState = "Prepare Penalty" // GameStateTimeout timeout GameStateTimeout GameState = "Timeout" // GameStateBallPlacement ball placement GameStateBallPlacement GameState = "Ball Placement" )
type MessageWrapper ¶ added in v0.3.0
type MessageWrapper struct { UiProtocol *[]*ProtocolEntry `json:"protocol"` GcState *GameControllerState `json:"gcState"` }
type PersistentState ¶ added in v1.0.0
type PersistentState struct { CurrentState *GameControllerState `json:"currentState"` Protocol []*ProtocolEntry `json:"protocol"` }
func (*PersistentState) Add ¶ added in v1.0.0
func (s *PersistentState) Add(entry *ProtocolEntry)
Add adds the entry and prunes the protocol afterwards, if a new previous state was added
func (*PersistentState) GetProtocolEntry ¶ added in v1.0.0
func (s *PersistentState) GetProtocolEntry(id string) *ProtocolEntry
GetProtocolEntry returns the protocol entry with given id
func (*PersistentState) Prune ¶ added in v1.0.0
func (s *PersistentState) Prune()
Prune removes all except 20 latest previous states from protocol
func (*PersistentState) RevertProtocolEntry ¶ added in v1.0.0
func (s *PersistentState) RevertProtocolEntry(id string) error
GetProtocolEntry returns the protocol entry with given id
type ProtocolEntry ¶ added in v1.0.0
type ProtocolEntry struct { Id string `json:"id"` Timestamp int64 `json:"timestamp"` StageTime time.Duration `json:"stageTime"` Type UiProtocolType `json:"type"` Name string `json:"name"` Team Team `json:"team"` Description string `json:"description"` PreviousState *State `json:"previousState"` }
ProtocolEntry represents a single protocol entry as should be displayed in the UI table
type Publisher ¶
type Publisher struct { Message RefMessage // contains filtered or unexported fields }
Publisher can publish state and commands to the teams
func NewPublisher ¶
NewPublisher creates a new publisher that publishes referee messages via UDP to the teams
func (*Publisher) Publish ¶
func (p *Publisher) Publish(gcState *GameControllerState)
Publish the state and command
type RefCommand ¶
type RefCommand string
RefCommand is a command to be send to the teams
const ( // CommandUnknown not set CommandUnknown RefCommand = "" // CommandHalt HALT CommandHalt RefCommand = "halt" // CommandStop STOP CommandStop RefCommand = "stop" // CommandNormalStart NORMAL_START CommandNormalStart RefCommand = "normalStart" // CommandForceStart FORCE_START CommandForceStart RefCommand = "forceStart" // CommandDirect DIRECT CommandDirect RefCommand = "direct" // CommandIndirect INDIRECT CommandIndirect RefCommand = "indirect" // CommandKickoff KICKOFF CommandKickoff RefCommand = "kickoff" // CommandPenalty PENALTY CommandPenalty RefCommand = "penalty" // CommandTimeout TIMEOUT CommandTimeout RefCommand = "timeout" // CommandBallPlacement BALL_PLACEMENT CommandBallPlacement RefCommand = "ballPlacement" )
func (RefCommand) ContinuesGame ¶ added in v0.9.0
func (c RefCommand) ContinuesGame() bool
func (RefCommand) IsFreeKick ¶ added in v0.19.0
func (c RefCommand) IsFreeKick() bool
func (RefCommand) IsPrepare ¶ added in v0.30.0
func (c RefCommand) IsPrepare() bool
func (RefCommand) NeedsTeam ¶ added in v0.19.0
func (c RefCommand) NeedsTeam() bool
func (RefCommand) Valid ¶ added in v0.19.0
func (c RefCommand) Valid() bool
Valid checks if the RefCommand enum value is among the known values
type RefMessage ¶ added in v0.8.0
type RefMessage struct { ProtoMsg *refproto.Referee Send func() // contains filtered or unexported fields }
func (*RefMessage) Publish ¶ added in v0.8.0
func (p *RefMessage) Publish(gcState *GameControllerState)
Publish the state and command
type Stage ¶
type Stage string
Stage represents the different stages of a game
const ( // StagePreGame before game has started StagePreGame Stage = "Pre-First Half" // StageFirstHalf in first half StageFirstHalf Stage = "First Half" // StageHalfTime in half time StageHalfTime Stage = "Half Time" // StageSecondHalfPre before second half StageSecondHalfPre Stage = "Pre-Second Half" // StageSecondHalf in second half StageSecondHalf Stage = "Second Half" // StageOvertimeBreak in break to overtime StageOvertimeBreak Stage = "Overtime Break" // StageOvertimeFirstHalfPre before first overtime half StageOvertimeFirstHalfPre Stage = "Pre-Overtime First Half" // StageOvertimeFirstHalf in first overtime half StageOvertimeFirstHalf Stage = "Overtime First Half" // StageOvertimeHalfTime in overtime half time StageOvertimeHalfTime Stage = "Overtime Half Time" // StageOvertimeSecondHalfPre before second overtime half StageOvertimeSecondHalfPre Stage = "Pre-Overtime Second Half" // StageOvertimeSecondHalf in second overtime half StageOvertimeSecondHalf Stage = "Overtime Second Half" // StageShootoutBreak in break to shootout StageShootoutBreak Stage = "Shootout Break" // StageShootout in Shootout StageShootout Stage = "Shootout" // StagePostGame after game ended StagePostGame Stage = "End of Game" )
func (Stage) IsPausedStage ¶ added in v0.6.0
func (Stage) IsPreStage ¶
type StageOperation ¶
type StageOperation string
StageOperation to apply on the current stage
const ( // StageNext next stage StageNext StageOperation = "next" // StagePrevious previous stage StagePrevious StageOperation = "previous" // StageEndGame ends the game StageEndGame StageOperation = "endGame" )
type State ¶
type State struct { Stage Stage `json:"stage" yaml:"stage"` Command RefCommand `json:"command" yaml:"command"` CommandFor Team `json:"commandForTeam" yaml:"commandForTeam"` GameEvents []*GameEvent `json:"gameEvents" yaml:"gameEvents"` GameEventsQueued []*GameEvent `json:"gameEventsQueued" yaml:"gameEvents"` StageTimeElapsed time.Duration `json:"stageTimeElapsed" yaml:"stageTimeElapsed"` StageTimeLeft time.Duration `json:"stageTimeLeft" yaml:"stageTimeLeft"` MatchTimeStart time.Time `json:"matchTimeStart" yaml:"matchTimeStart"` MatchDuration time.Duration `json:"matchDuration" yaml:"matchDuration"` // MatchDuration contains the updated match duration based on MatchTimeStart for the UI TeamState map[Team]*TeamInfo `json:"teamState" yaml:"teamState"` PlacementPos *Location `json:"placementPos" yaml:"placementPos"` NextCommand RefCommand `json:"nextCommand" yaml:"nextCommand"` NextCommandFor Team `json:"nextCommandFor" yaml:"nextCommandFor"` PrevCommands []RefCommand `json:"prevCommands" yaml:"prevCommands"` PrevCommandsFor []Team `json:"prevCommandsFor" yaml:"prevCommandsFor"` CurrentActionDeadline time.Time `json:"currentActionDeadline" yaml:"currentActionDeadline"` CurrentActionTimeRemaining time.Duration `json:"currentActionTimeRemaining" yaml:"currentActionTimeRemaining"` // CurrentActionTimeRemaining contains the updated remaining lack of progress time for the UI }
State of the game
func NewState ¶
func NewState() (s *State)
NewState creates a new state, initialized for the start of a new game
func (State) BotSubstitutionIntend ¶ added in v0.11.0
func (*State) GetFirstGameEvent ¶ added in v0.19.0
func (s *State) GetFirstGameEvent(gameEventType GameEventType) *GameEvent
func (*State) PrimaryGameEvent ¶ added in v0.14.0
func (*State) TeamByName ¶ added in v0.8.0
type StatePreserver ¶ added in v1.0.0
type StatePreserver struct {
// contains filtered or unexported fields
}
func (*StatePreserver) Close ¶ added in v1.0.0
func (r *StatePreserver) Close()
Close closes the state and backup file
func (*StatePreserver) CloseOnExit ¶ added in v1.0.0
func (r *StatePreserver) CloseOnExit()
CloseOnExit makes sure to close the file when program exists
func (*StatePreserver) Load ¶ added in v1.0.0
func (r *StatePreserver) Load() (*PersistentState, error)
Load loads the state from the filesystem
func (*StatePreserver) Open ¶ added in v1.0.0
func (r *StatePreserver) Open() error
Open opens the state and backup file
func (*StatePreserver) Save ¶ added in v1.0.0
func (r *StatePreserver) Save(state *PersistentState)
Save writes the current state into a file
type Team ¶
type Team string
Team is one of Yellow or Blue
func NewTeam ¶ added in v0.8.0
NewTeam creates a team from a protobuf team. Its either a single team or unknown. Not both.
func (Team) Is ¶ added in v0.23.1
Is returns true, if the team is equal to given team, respecting unknown and both accordingly
func (Team) Opposite ¶
Opposite returns the other team if the team is not Yellow or Blue, return the same team
type TeamChoice ¶ added in v0.8.0
TeamChoice represents an outstanding team choice request
type TeamInfo ¶
type TeamInfo struct { Name string `json:"name" yaml:"name"` Goals int `json:"goals" yaml:"goals"` Goalkeeper int `json:"goalkeeper" yaml:"goalkeeper"` YellowCards int `json:"yellowCards" yaml:"yellowCards"` YellowCardTimes []time.Duration `json:"yellowCardTimes" yaml:"yellowCardTimes"` RedCards int `json:"redCards" yaml:"redCards"` TimeoutsLeft int `json:"timeoutsLeft" yaml:"timeoutsLeft"` TimeoutTimeLeft time.Duration `json:"timeoutTimeLeft" yaml:"timeoutTimeLeft"` OnPositiveHalf bool `json:"onPositiveHalf" yaml:"onPositiveHalf"` FoulCounter int `json:"foulCounter" yaml:"foulCounter"` BallPlacementFailures int `json:"ballPlacementFailures" yaml:"ballPlacementFailures"` CanPlaceBall bool `json:"canPlaceBall" yaml:"canPlaceBall"` MaxAllowedBots int `json:"maxAllowedBots" yaml:"maxAllowedBots"` BotSubstitutionIntend bool `json:"botSubstitutionIntend" yaml:"botSubstitutionIntend"` }
TeamInfo about a team
type TriggerType ¶
type TriggerType string
TriggerType is something that can be triggered
const ( // TriggerResetMatch reset match TriggerResetMatch TriggerType = "resetMatch" // TriggerSwitchColor switch color TriggerSwitchColor TriggerType = "switchColor" // TriggerSwitchSides switch sides/goals (onPositiveHalf) TriggerSwitchSides TriggerType = "switchSides" // TriggerContinue continues based on the current game event TriggerContinue TriggerType = "continue" )
type UiProtocolType ¶ added in v0.16.0
type UiProtocolType string
UiProtocolType represents the type of a protocol entry
const ( // UiProtocolCommand represents an issued referee command UiProtocolCommand UiProtocolType = "command" // UiProtocolStage represents a changed stage UiProtocolStage UiProtocolType = "stage" // UiProtocolCard represents an issued card UiProtocolCard UiProtocolType = "card" // UiProtocolTime represents an elapsed time, like stage time or card time UiProtocolTime UiProtocolType = "time" // UiProtocolGameEvent represents an issued game event UiProtocolGameEvent UiProtocolType = "gameEvent" // UiProtocolGameEvent represents an issued game event UiProtocolGameEventQueued UiProtocolType = "gameEventQueued" // UiProtocolGameEventIgnored represents a detected game event that was not issued UiProtocolGameEventIgnored UiProtocolType = "ignoredGameEvent" // UiProtocolModify represents a manual modification on the state UiProtocolModify UiProtocolType = "modify" // UiProtocolTeamAction represents an action from a team UiProtocolTeamAction UiProtocolType = "teamAction" // UiProtocolHint represents a hint to the human game-controller operator UiProtocolHint UiProtocolType = "hint" )