Skip to content

Commit f76b614

Browse files
committed
[feature] Implement multiple placement failure event
1 parent 7d714d3 commit f76b614

File tree

4 files changed

+217
-116
lines changed

4 files changed

+217
-116
lines changed

internal/app/controller/engine.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,11 @@ func (e *Engine) processModify(m *EventModifyValue) error {
366366
e.FoulCounterIncremented(m.ForTeam)
367367
}
368368
} else if m.BallPlacementFailures != nil {
369+
incremented := *m.BallPlacementFailures > teamState.BallPlacementFailures
369370
teamState.BallPlacementFailures = *m.BallPlacementFailures
371+
if incremented {
372+
e.PlacementFailuresIncremented(m.ForTeam)
373+
}
370374
} else if m.YellowCardTime != nil {
371375
cardId := m.YellowCardTime.CardID
372376
if cardId < 0 || cardId >= len(teamState.YellowCardTimes) {
@@ -599,6 +603,17 @@ func (e *Engine) CardNumberIncremented(team Team) {
599603
}
600604
}
601605

606+
func (e *Engine) PlacementFailuresIncremented(team Team) {
607+
if e.State.TeamState[team].BallPlacementFailures >= 5 {
608+
teamProto := team.toProto()
609+
event := GameEvent{Type: GameEventMultiplePlacementFailures,
610+
Details: GameEventDetails{MultiplePlacementFailures: &refproto.GameEvent_MultiplePlacementFailures{ByTeam: &teamProto}}}
611+
if err := e.processGameEvent(&event); err != nil {
612+
log.Print("Could not process new secondary game event: ", err)
613+
}
614+
}
615+
}
616+
602617
func revokeCard(card *EventCard, teamState *TeamInfo) error {
603618
if card.Type == CardTypeYellow {
604619
if teamState.YellowCards > 0 {

internal/app/controller/gameEvent.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ const (
4040
GameEventUnsportiveBehaviorMajor GameEventType = "unsportiveBehaviorMajor"
4141
GameEventMultipleCards GameEventType = "multipleCards"
4242
GameEventMultipleFouls GameEventType = "multipleFouls"
43+
GameEventMultiplePlacementFailures GameEventType = "multiplePlacementFailures"
4344
GameEventKickTimeout GameEventType = "kickTimeout"
4445
GameEventNoProgressInGame GameEventType = "noProgressInGame"
4546
GameEventPlacementFailedByTeamInFavor GameEventType = "placementFailedByTeamInFavor"
@@ -193,6 +194,8 @@ func (e GameEvent) ToProto() *refproto.GameEvent {
193194
protoEvent.Event = &refproto.GameEvent_MultipleCards_{MultipleCards: e.Details.MultipleCards}
194195
case GameEventMultipleFouls:
195196
protoEvent.Event = &refproto.GameEvent_MultipleFouls_{MultipleFouls: e.Details.MultipleFouls}
197+
case GameEventMultiplePlacementFailures:
198+
protoEvent.Event = &refproto.GameEvent_MultiplePlacementFailures_{MultiplePlacementFailures: e.Details.MultiplePlacementFailures}
196199
case GameEventKickTimeout:
197200
protoEvent.Event = &refproto.GameEvent_KickTimeout_{KickTimeout: e.Details.KickTimeout}
198201
case GameEventNoProgressInGame:
@@ -239,6 +242,7 @@ type GameEventDetails struct {
239242
UnsportiveBehaviorMajor *refproto.GameEvent_UnsportiveBehaviorMajor `json:"unsportiveBehaviorMajor,omitempty"`
240243
MultipleCards *refproto.GameEvent_MultipleCards `json:"multiple,omitempty"`
241244
MultipleFouls *refproto.GameEvent_MultipleFouls `json:"multipleFouls,omitempty"`
245+
MultiplePlacementFailures *refproto.GameEvent_MultiplePlacementFailures `json:"multiplePlacementFailures,omitempty"`
242246
KickTimeout *refproto.GameEvent_KickTimeout `json:"kickTimeout,omitempty"`
243247
NoProgressInGame *refproto.GameEvent_NoProgressInGame `json:"noProgressInGame,omitempty"`
244248
PlacementFailedByTeamInFavor *refproto.GameEvent_PlacementFailedByTeamInFavor `json:"placementFailedByTeamInFavor,omitempty"`

0 commit comments

Comments
 (0)