Improve frontArmour equipment

This commit is contained in:
2022-05-21 19:30:51 +01:00
parent c5818271d8
commit e9cc7e64c9
9 changed files with 37 additions and 49 deletions
+1 -1
View File
@@ -176,7 +176,7 @@ testInventory = IM.fromList $ zip [0..]
[ makeTypeCraftNum 9 PIPE
, autoSonar
, autoRadar
, autoRadar
, magShield
, frontArmour
, flameShield
, powerLegs
+3 -1
View File
@@ -60,6 +60,8 @@ armourChaseCrit = chaseCrit
,(1,medkit 200)
]
, _crMvType = defaultChaseMvType {_mvTurnRad = f}
}
}
& crEquipment . at OnChest .~ Just 0
& crInvEquipped . at 0 .~ Just OnChest
where
f _ = 0.05
+1 -24
View File
@@ -6,7 +6,7 @@ import Dodge.Data
import Dodge.Inventory
import qualified Data.IntMap.Strict as IM
import qualified Data.IntSet as IS
--import qualified Data.IntSet as IS
import Control.Lens
import Data.Maybe
@@ -68,29 +68,6 @@ eqSiteToPos cr es = case es of
Nothing -> OnLeftWrist
_ -> OnRightWrist
removeEquipmentUsingSite :: EquipSite -> Creature -> Creature
removeEquipmentUsingSite esite cr = case esite of
GoesOnSpecial -> cr
_ -> case cr ^? crEquipment . esiteToPoint of
Just invid -> cr & crInvEquipped . at invid .~ Nothing
_ -> cr
where
esiteToPoint = case esite of
GoesOnHead -> ix OnHead
GoesOnChest -> ix OnChest
GoesOnBack -> ix OnBack
GoesOnWrist -> ix OnLeftWrist
GoesOnLegs -> ix OnLegs
setEquipmentSite :: EquipSite -> Maybe Int -> Creature -> Creature
setEquipmentSite esite = case esite of
GoesOnHead -> set (crEquipment . at OnHead)
GoesOnChest -> set (crEquipment . at OnChest)
GoesOnBack -> set (crEquipment . at OnBack)
GoesOnWrist -> set (crEquipment . at OnLeftWrist)
GoesOnLegs -> set (crEquipment . at OnLegs)
GoesOnSpecial -> const id
useLeftItem :: Int -> World -> World
useLeftItem cid w
| _crInvLock cr = w
+9 -1
View File
@@ -6,6 +6,7 @@ module Dodge.Creature.Property
import Dodge.Data
import Geometry
import Data.Maybe
import Control.Lens
-- the use of crOldPos is because the damage position is calculated on the
@@ -14,10 +15,17 @@ import Control.Lens
crIsArmouredFrom :: Point2 -> Creature -> Bool
crIsArmouredFrom p cr
= p /= _crOldPos cr
&& any (\it -> it ^? itType == Just FRONTARMOUR) (_crInv cr)
-- && any (\it -> it ^? itType == Just FRONTARMOUR) (_crInv cr)
&& hasFrontArmour cr
&& angleVV (unitVectorAtAngle $ _crDir cr) (p -.- _crOldPos cr) < pi/2
-- even though angleVV can generate NaN, the comparison seems to deal with it
hasFrontArmour :: Creature -> Bool
hasFrontArmour cr = fromMaybe False $ do
invid <- cr ^? crEquipment . ix OnChest
ittype <- cr ^? crInv . ix invid . itType
return $ FRONTARMOUR == ittype
--crOnSeg :: Point2 -> Point2 -> Creature -> Bool
--crOnSeg p1 p2 cr = circOnSeg p1 p2 (_crPos cr) (_crRad cr)
+1 -1
View File
@@ -22,7 +22,7 @@ import Picture
import qualified IntMapHelp as IM
--import StrictHelp
import qualified Data.IntSet as IS
--import qualified Data.IntSet as IS
--import Data.Maybe
import Data.Function
import Control.Lens
+1 -1
View File
@@ -420,7 +420,7 @@ data Item = Item
{ _itName :: String
, _itConsumption :: ItemConsumption
, _itUse :: ItemUse
, _itEquipPict :: Creature -> Int -> SPic
, _itEquipPict :: Creature -> Int -> SPic
, _itScroll :: Float -> Creature -> Item -> Item
, _itType :: CombineType
, _itAttachment :: ItAttachment
+7 -7
View File
@@ -37,7 +37,7 @@ import qualified IntMapHelp as IM
import ListHelp
import LensHelp
import qualified Data.IntSet as IS
--import qualified Data.IntSet as IS
import Data.Maybe
--import Data.List
--import System.Random
@@ -197,12 +197,12 @@ changeSwapInvSel k w
n = length $ _crInv $ _creatures w IM.! _yourID w
numCO = length $ _closeObjects w
swapIntSetKeys :: Int -> Int -> IS.IntSet -> IS.IntSet
swapIntSetKeys i j is
| i `IS.member` is && j `IS.member` is = is
| i `IS.member` is = j `IS.insert` (i `IS.delete` is)
| j `IS.member` is = i `IS.insert` (j `IS.delete` is)
| otherwise = is
--swapIntSetKeys :: Int -> Int -> IS.IntSet -> IS.IntSet
--swapIntSetKeys i j is
-- | i `IS.member` is && j `IS.member` is = is
-- | i `IS.member` is = j `IS.insert` (i `IS.delete` is)
-- | j `IS.member` is = i `IS.insert` (j `IS.delete` is)
-- | otherwise = is
changeAugInvSel :: Int -> World -> World
changeAugInvSel i w
+7 -6
View File
@@ -58,17 +58,18 @@ frontArmour = defaultEquipment
{_eqUse = \_ _ -> id
,_eqSite = GoesOnChest
}
-- , _itFloorPict = \_ -> (,) emptySH $ onLayer FlItLayer $ translate 0 (-5) $ pictures
-- [color (greyN 0.1) $ thickArc 0 (pi/2) 10 5
-- ,color (greyN 0.1) $ thickArc (3*pi/2) (2*pi) 10 5
-- ]
, _itEquipPict = \_ _ -> (,) emptySH $ setDepth 20 $ pictures
, _itEquipPict = pictureOnEquip (emptySH , setDepth 20 $ pictures
[color (greyN 0.1) $ thickArc 0 (pi/2) 10 5
,color (greyN 0.1) $ thickArc (3*pi/2) (2*pi) 10 5
]
])
, _itEffect = NoItEffect
, _itID = Nothing
}
pictureOnEquip :: SPic -> Creature -> Int -> SPic
pictureOnEquip sp cr i
| isJust (cr ^? crInvEquipped . ix i) = sp
| otherwise = mempty
flatShield :: Item
flatShield = defaultEquipment
{ _itEquipPict = pictureWeaponAim flatShieldEquipSPic
+7 -7
View File
@@ -19,7 +19,7 @@ import ListHelp
import Data.Maybe
import qualified Data.IntMap.Strict as IM
import qualified Data.Set as S
import qualified Data.IntSet as IS
--import qualified Data.IntSet as IS
import Control.Lens
import SDL (MouseButton (..))
--import Data.List
@@ -134,12 +134,12 @@ subInventoryDisplay subinv cfig w = case subinv of
eqPosText :: EquipPosition -> String
eqPosText ep = case ep of
OnHead -> "ON HEAD"
OnChest -> "ON CHEST"
OnBack -> "ON BACK"
OnLeftWrist -> "ON LEFT WRIST"
OnRightWrist -> "ON RIGHT WRIST"
OnLegs -> "ON LEGS"
OnHead -> "HEAD"
OnChest -> "CHEST"
OnBack -> "BACK"
OnLeftWrist -> "L.WRIST"
OnRightWrist -> "R.WRIST"
OnLegs -> "LEGS"
OnSpecial -> "EQUIPPED"
topInvW :: Int