From 3d36d1d0254b8aeecc889a2a49cbcced458cbe9c Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Sat, 25 Feb 2023 23:08:47 +0100 Subject: intermediate commit * Implement move artifact action * Fix widget update memory leak * update the highlights not during on each frame * do not update the unchanged label of a button * Allow to exit the game by pressing 'q' * Implement some cards from the magic set * Improve permanent formatting * Some tweaks to UnitAI code --- go/game/effect.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 go/game/effect.go (limited to 'go/game/effect.go') diff --git a/go/game/effect.go b/go/game/effect.go new file mode 100644 index 00000000..1fc6d5b0 --- /dev/null +++ b/go/game/effect.go @@ -0,0 +1,47 @@ +package game + +type effect interface { + apply(*State) + end(*State) +} + +type dynamicEffect struct { + _apply func(*State) + _end func(*State) +} + +func (e *dynamicEffect) apply(s *State) { + e._apply(s) +} + +func (e *dynamicEffect) end(s *State) { + e._end(s) +} + +func newAdjustmentEffect(adjust func(Permanent, int), u *Unit, delta int) effect { + apply := func(*State) { adjust(u, delta) } + end := func(*State) { adjust(u, -delta) } + return &dynamicEffect{apply, end} +} + +func newMeleeModificationEffect(u *Unit, delta int) effect { + return newAdjustmentEffect(adjustMelee, u, delta) +} + +func newAttackModificationEffect(u *Unit, delta int) effect { + return newAdjustmentEffect(adjustAttack, u, delta) +} + +func newMovementModificationEffect(u *Unit, delta int) effect { + return newAdjustmentEffect(adjustMovement, u, delta) +} + +func newHealthModificationEffect(u *Unit, delta int) effect { + return newAdjustmentEffect(adjustHealth, u, delta) +} + +func newTmpEffect(p Permanent, effect string) effect { + apply := func(*State) { p.addTmpEffect(effect) } + end := func(*State) { p.removeTmpEffect(effect) } + return &dynamicEffect{apply, end} +} -- cgit v1.2.3