diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2025-06-25 17:13:27 -0500 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-08-20 15:57:21 +0200 |
| commit | 2a155fd111d8de5bd3317fb146271d2237f7bd16 (patch) | |
| tree | 71c08b564840a631d7e388903529e06654606030 | |
| parent | 0f78406cde7890f3f9b16cd0ba55afac4c9065cf (diff) | |
| download | muhqs-game-2a155fd111d8de5bd3317fb146271d2237f7bd16.tar.gz muhqs-game-2a155fd111d8de5bd3317fb146271d2237f7bd16.zip | |
prevent targeting the same object multiple times
| -rw-r--r-- | go/game/targets.go | 17 |
1 files 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 { |
