From 69da0f1dfd035a6963d5fff460b3c365eccd4105 Mon Sep 17 00:00:00 2001 From: Emi Simpson Date: Tue, 5 Dec 2023 19:31:30 -0500 Subject: [PATCH] Move computeStat to GameModel --- src/GameLogic.hs | 1 - src/GameModel.hs | 16 +++++++++++++++- src/Units.hs | 30 ------------------------------ 3 files changed, 15 insertions(+), 32 deletions(-) delete mode 100644 src/Units.hs diff --git a/src/GameLogic.hs b/src/GameLogic.hs index 4be7020..14e0085 100644 --- a/src/GameLogic.hs +++ b/src/GameLogic.hs @@ -18,7 +18,6 @@ module GameLogic ) where import GameModel -import Units (computeStat) import Util (toMaybe, Never, (??), never) import Data.Maybe (fromMaybe, mapMaybe, isJust) diff --git a/src/GameModel.hs b/src/GameModel.hs index 02c5327..2c6729a 100644 --- a/src/GameModel.hs +++ b/src/GameModel.hs @@ -127,6 +127,7 @@ module GameModel , ProtoMovementSpecs(..) , basicMove , forcedMove + , computeStat ) where import Util (toMaybe, dup, secondClassLensNames, (??)) @@ -137,7 +138,7 @@ import Control.Monad (join, mfilter) import Data.Ix (inRange) import Data.List (intersperse, elemIndex) import Data.List.NonEmpty as NonEmpty (cons, NonEmpty, singleton) -import Data.Maybe (mapMaybe, catMaybes) +import Data.Maybe (mapMaybe, catMaybes, fromMaybe) import Numeric.Natural (Natural) import Safe (headMay) import Lens.Micro @@ -681,6 +682,19 @@ untapped = not . _movedThisRound untap :: Character -> Character untap = movedThisRound .~ False +computeStat :: BoardState -> CharacterIdentifier -> Stat a -> a +computeStat board cid stat = case stat of + AttackDice -> 1 + elevationBonus + fromMaybe 0 specialtyBonus + DefenseDice -> 0 + elevationBonus + fromMaybe 0 specialtyBonus + FreeMove -> fromMaybe False specialtyBonus + where + statBonuses = ixCharacter cid . baseStats . statBonusL + specialtyBonus = case board ^? statBonuses of + Just statB -> Just $ statB board cid stat + Nothing -> Nothing + elevationBonus :: Int + elevationBonus = if isElevated board cid then 1 else 0 + instance Show BoardState where show board = join (intersperse "\n" showTiles) ++ '\n':showRound ++ "\n" ++ showCharacters where diff --git a/src/Units.hs b/src/Units.hs deleted file mode 100644 index 4cbbe2f..0000000 --- a/src/Units.hs +++ /dev/null @@ -1,30 +0,0 @@ -module Units - ( computeStat - ) - where - -import GameModel - ( baseStats - , BoardState - , CharacterIdentifier - , isElevated - , Stat(..) - , statBonusL - , ixCharacter - ) - -import Data.Maybe (fromMaybe) -import Lens.Micro - -computeStat :: BoardState -> CharacterIdentifier -> Stat a -> a -computeStat board cid stat = case stat of - AttackDice -> 1 + elevationBonus + fromMaybe 0 specialtyBonus - DefenseDice -> 0 + elevationBonus + fromMaybe 0 specialtyBonus - FreeMove -> fromMaybe False specialtyBonus - where - statBonuses = ixCharacter cid . baseStats . statBonusL - specialtyBonus = case board ^? statBonuses of - Just statB -> Just $ statB board cid stat - Nothing -> Nothing - elevationBonus :: Int - elevationBonus = if isElevated board cid then 1 else 0 \ No newline at end of file