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