From d3e190fd03ef7363d72152fa55c79ed46547d695 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Wed, 25 Jun 2025 17:13:27 -0500 Subject: prevent targeting the same object multiple times --- go/game/targets.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/go/game/targets.go b/go/game/targets.go index 02f63378..2e29d64e 100644 --- a/go/game/targets.go +++ b/go/game/targets.go @@ -1,6 +1,7 @@ package game import ( + "errors" "fmt" "log" "strconv" @@ -183,7 +184,18 @@ func (d *TargetDesc) requirement() TargetRequirement { } } -func (t *Target) AddSelection(sel interface{}) (err error) { +var ( + ErrAlreadySelected = errors.New("already selected") +) + +// AddSelection adds an object as selection to the target. +// If the provided object does not satisfy the target contraint err != nil is returned. +// Selecting the same object multiple times reaul%s in an error. +func (t *Target) AddSelection(sel any) (err error) { + if slices.Contains(t.sel, sel) { + return ErrAlreadySelected + } + if err = t.constraint(sel); err == nil { t.sel = append(t.sel, sel) } @@ -227,7 +239,8 @@ func (t *Target) CheckSelection(s *LocalState) error { return nil } -func (t *Targets) AddSelection(sel interface{}) error { return t.ts[t.idx].AddSelection(sel) } +// AddSelection adds an object as selection to the current target. +func (t *Targets) AddSelection(sel any) error { return t.ts[t.idx].AddSelection(sel) } func (t *Targets) HasSelections() bool { for _, t := range t.ts { -- cgit v1.2.3