aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2025-06-25 17:13:27 -0500
committerFlorian Fischer <florian.fischer@muhq.space>2025-08-20 15:57:21 +0200
commit2a155fd111d8de5bd3317fb146271d2237f7bd16 (patch)
tree71c08b564840a631d7e388903529e06654606030
parent0f78406cde7890f3f9b16cd0ba55afac4c9065cf (diff)
downloadmuhqs-game-2a155fd111d8de5bd3317fb146271d2237f7bd16.tar.gz
muhqs-game-2a155fd111d8de5bd3317fb146271d2237f7bd16.zip
prevent targeting the same object multiple times
-rw-r--r--go/game/targets.go17
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 {