Make aiming speed be gouverned by strength

This commit is contained in:
2022-05-22 14:33:34 +01:00
parent 6891bd7541
commit fd40da2d4a
15 changed files with 35 additions and 37 deletions
+1 -1
View File
@@ -179,7 +179,7 @@ testInventory = IM.fromList $ zip [0..]
, magShield , magShield
, frontArmour , frontArmour
, flameShield , flameShield
, powerLegs , makeTypeCraftNum 1 MOTOR
, speedLegs , speedLegs
, jumpLegs , jumpLegs
, makeModule INCENDIARYMODULE , makeModule INCENDIARYMODULE
+2 -11
View File
@@ -3,7 +3,7 @@ import Dodge.Data
import Dodge.Creature.Statistics import Dodge.Creature.Statistics
import Geometry import Geometry
import Data.Maybe --import Data.Maybe
--import qualified Data.IntMap.Strict as IM --import qualified Data.IntMap.Strict as IM
import Control.Lens import Control.Lens
{- | Creature attempts to moves under its own steam. {- | Creature attempts to moves under its own steam.
@@ -23,16 +23,7 @@ crMvAbsolute p' cr = advanceStepCounter (magV p) cr
& crPos %~ (+.+ p) & crPos %~ (+.+ p)
& crMvDir .~ argV p & crMvDir .~ argV p
where where
--p = (equipFactor * aimingFactor) *.* p' p = strengthFactor (getCrStrength cr) *.* p'
p = (strengthFactor (getCrStrength cr) * aimingFactor) *.* p'
isAiming = _posture (_crStance cr) == Aiming || _posture (_crStance cr) == Reloading
invItSpeed
| isAiming = equipAimSpeed
| otherwise = equipSpeed
equipFactor = product $ invItSpeed <$> _crInv cr
aimingFactor
| isAiming = fromMaybe 1 $ cr ^? crInv . ix (_crInvSel cr) . itUse . useAim . aimSpeed
| otherwise = 1
strengthFactor :: Int -> Float strengthFactor :: Int -> Float
strengthFactor i strengthFactor i
+9 -2
View File
@@ -3,18 +3,20 @@ module Dodge.Creature.Statistics
) where ) where
import Dodge.Data import Dodge.Data
import qualified IntMapHelp as IM import qualified IntMapHelp as IM
import LensHelp
import Data.Maybe
import Data.IntMap.Merge.Strict import Data.IntMap.Merge.Strict
getCrStrength :: Creature -> Int getCrStrength :: Creature -> Int
getCrStrength cr = strFromEquipment cr + _crStrength (_crStatistics cr) getCrStrength cr = strFromHeldItem cr + strFromEquipment cr + _crStrength (_crStatistics cr)
strFromEquipment :: Creature -> Int strFromEquipment :: Creature -> Int
strFromEquipment = sum . fmap equipmentStrValue . crCurrentEquipment strFromEquipment = sum . fmap equipmentStrValue . crCurrentEquipment
equipmentStrValue :: Item -> Int equipmentStrValue :: Item -> Int
equipmentStrValue itm = case _itType itm of equipmentStrValue itm = case _itType itm of
FRONTARMOUR -> negate 2 FRONTARMOUR -> negate 1
POWERLEGS -> 3 POWERLEGS -> 3
_ -> 0 _ -> 0
@@ -23,3 +25,8 @@ crCurrentEquipment cr = merge dropMissing dropMissing (zipWithMatched (\_ _ itm
(_crInvEquipped cr) (_crInvEquipped cr)
(_crInv cr) (_crInv cr)
strFromHeldItem :: Creature -> Int
strFromHeldItem cr
| _posture (_crStance cr) == Aiming || _posture (_crStance cr) == Reloading
= negate $ fromMaybe 0 $ cr ^? crInv . ix (_crInvSel cr) . itUse . useAim . aimWeight
| otherwise = 0
+1 -1
View File
@@ -75,7 +75,7 @@ luseInstantNoH f = LeftUse
} }
defaultAimParams :: AimParams defaultAimParams :: AimParams
defaultAimParams = AimParams defaultAimParams = AimParams
{ _aimSpeed = 1 { _aimWeight = 0
, _aimRange = 0 , _aimRange = 0
, _aimZoom = ItZoom 20 0.2 1 , _aimZoom = ItZoom 20 0.2 1
, _aimStance = OneHand , _aimStance = OneHand
+1 -1
View File
@@ -65,7 +65,7 @@ data CurseStatus
| UndroppableIdentified | UndroppableIdentified
| UndroppableUnidentified | UndroppableUnidentified
data AimParams = AimParams data AimParams = AimParams
{ _aimSpeed :: Float { _aimWeight :: Int
, _aimRange :: Float , _aimRange :: Float
, _aimZoom :: ItZoom , _aimZoom :: ItZoom
, _aimStance :: AimStance , _aimStance :: AimStance
+1 -1
View File
@@ -84,7 +84,7 @@ flatShield = defaultEquipment
, _useMods = [] , _useMods = []
, _useHammer = NoHammer , _useHammer = NoHammer
, _useAim = AimParams , _useAim = AimParams
{ _aimSpeed = 0.5 { _aimWeight = 5
, _aimRange = 0 , _aimRange = 0
, _aimZoom = ItZoom 20 0.2 1 , _aimZoom = ItZoom 20 0.2 1
, _aimStance = TwoHandFlat , _aimStance = TwoHandFlat
+1 -1
View File
@@ -28,7 +28,7 @@ ruseAmmoParamsRate rate ht usemods = RightUse
} }
defaultAimParams :: AimParams defaultAimParams :: AimParams
defaultAimParams = AimParams defaultAimParams = AimParams
{ _aimSpeed = 1 { _aimWeight = 0
, _aimRange = 0 , _aimRange = 0
, _aimZoom = ItZoom 20 0.2 1 , _aimZoom = ItZoom 20 0.2 1
, _aimStance = OneHand , _aimStance = OneHand
+7 -7
View File
@@ -84,7 +84,7 @@ teslaGun = defaultBatteryGun
, withSoundForI elecCrackleS 1 , withSoundForI elecCrackleS 1
, useAmmoAmount 1 , useAmmoAmount 1
] ]
& useAim . aimSpeed .~ 0.4 & useAim . aimWeight .~ 6
& useAim . aimStance .~ TwoHandFlat & useAim . aimStance .~ TwoHandFlat
, _itDimension = ItemDimension , _itDimension = ItemDimension
{ _dimRad = 9 { _dimRad = 9
@@ -146,7 +146,7 @@ lasGunWide n = lasGun
, useAmmoAmount 1 , useAmmoAmount 1
, duplicateOffsets xs , duplicateOffsets xs
] ]
& useAim . aimSpeed .~ 0.4 & useAim . aimWeight .~ 6
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
) )
@@ -168,7 +168,7 @@ lasGunWidePulse = lasGun
, useAmmoAmount 1 , useAmmoAmount 1
, withItemUpdate itup $ \it -> duplicateOffsets (xs it) , withItemUpdate itup $ \it -> duplicateOffsets (xs it)
] ]
& useAim . aimSpeed .~ 0.4 & useAim . aimWeight .~ 6
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
) )
@@ -195,7 +195,7 @@ lasGunSway = lasGun
, useAmmoAmount 1 , useAmmoAmount 1
, withItemUpdate itup $ \it -> duplicateOffsets (x it) , withItemUpdate itup $ \it -> duplicateOffsets (x it)
] ]
& useAim . aimSpeed .~ 0.4 & useAim . aimWeight .~ 6
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
) )
@@ -242,7 +242,7 @@ lasGunDual = lasGun
, withSoundForI tone440sawtoothquietS 2 , withSoundForI tone440sawtoothquietS 2
, useAmmoAmount 1 , useAmmoAmount 1
] ]
& useAim . aimSpeed .~ 0.4 & useAim . aimWeight .~ 6
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
) )
@@ -282,7 +282,7 @@ lasGun = defaultAutoBatteryGun
, withItem $ \it -> withMuzPos $ flareCircleAt (_lasColor $ _itParams it) 0.8 , withItem $ \it -> withMuzPos $ flareCircleAt (_lasColor $ _itParams it) 0.8
, useAmmoAmount 1 , useAmmoAmount 1
] ]
& useAim . aimSpeed .~ 0.4 & useAim . aimWeight .~ 6
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
, _itParams = Refracting , _itParams = Refracting
@@ -345,7 +345,7 @@ tractorGun = lasGun
, _itUse = ruseInstant aTractorBeam NoHammer , _itUse = ruseInstant aTractorBeam NoHammer
[ ammoCheckI [ ammoCheckI
] ]
& useAim . aimSpeed .~ 0.4 & useAim . aimWeight .~ 6
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
, _itDimension = ItemDimension , _itDimension = ItemDimension
+3 -3
View File
@@ -110,7 +110,7 @@ bangCaneX i = bangCane
. (\k -> fromIntegral k * 5 - ((fromIntegral i - 1) * 2.5))) [0..i-1] . (\k -> fromIntegral k * 5 - ((fromIntegral i - 1) * 2.5))) [0..i-1]
) <> caneClipX i it ) <> caneClipX i it
} }
} & itUse . useAim . aimSpeed .~ 0.4 } & itUse . useAim . aimWeight .~ 6
& itUse . useAim . aimRange .~ 1 & itUse . useAim . aimRange .~ 1
& itUse . useAim . aimStance .~ TwoHandFlat & itUse . useAim . aimStance .~ TwoHandFlat
& itUse . useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5} & itUse . useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5}
@@ -149,7 +149,7 @@ rifle = bangCane
& itName .~ "RIFLE" & itName .~ "RIFLE"
& itType .~ RIFLE & itType .~ RIFLE
& itConsumption . ammoBaseMax .~ 1 & itConsumption . ammoBaseMax .~ 1
& itUse . useAim . aimSpeed .~ 0.4 & itUse . useAim . aimWeight .~ 6
& itUse . useAim . aimRange .~ 1 & itUse . useAim . aimRange .~ 1
& itUse . useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5} & itUse . useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5}
repeater :: Item repeater :: Item
@@ -271,7 +271,7 @@ miniGunX i = defaultAutoGun
} }
, _itUse = miniGunUse i , _itUse = miniGunUse i
& useDelay .~ WarmUpNoDelay {_warmTime = 0,_warmMax = 200} & useDelay .~ WarmUpNoDelay {_warmTime = 0,_warmMax = 200}
& useAim . aimSpeed .~ 0.4 & useAim . aimWeight .~ 6
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
& useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5} & useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5}
+1 -1
View File
@@ -77,7 +77,7 @@ bangRod = defaultGun
, _reloadType = ActiveClear , _reloadType = ActiveClear
} }
} }
& itUse . useAim . aimSpeed .~ 0.2 & itUse . useAim . aimWeight .~ 8
& itUse . useAim . aimRange .~ 1 & itUse . useAim . aimRange .~ 1
& itUse . useAim . aimStance .~ OneHand & itUse . useAim . aimStance .~ OneHand
& itUse . useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5} & itUse . useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5}
+4 -4
View File
@@ -72,7 +72,7 @@ autoGun = defaultAutoGun
, withMuzFlareI , withMuzFlareI
, withSmoke 1 black 20 200 5 , withSmoke 1 black 20 200 5
] ]
& useAim . aimSpeed .~ 0.4 & useAim . aimWeight .~ 6
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
& useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5} & useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5}
@@ -177,7 +177,7 @@ blunderbuss = bangCone
& itConsumption . ammoBaseMax .~ 25 & itConsumption . ammoBaseMax .~ 25
& itConsumption . reloadTime .~ 30 & itConsumption . reloadTime .~ 30
& itUse . useAim . aimStance .~ TwoHandTwist & itUse . useAim . aimStance .~ TwoHandTwist
& itUse . useAim . aimSpeed .~ 0.4 & itUse . useAim . aimWeight .~ 6
bigBlunderbuss :: Item bigBlunderbuss :: Item
bigBlunderbuss = blunderbuss bigBlunderbuss = blunderbuss
{_itName = "BIGBLUNDERBUSS" {_itName = "BIGBLUNDERBUSS"
@@ -229,7 +229,7 @@ hvAutoGun = defaultAutoGun
, withThinSmokeI , withThinSmokeI
, withMuzFlareI , withMuzFlareI
] ]
& useAim . aimSpeed .~ 0.2 & useAim . aimWeight .~ 8
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
& useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5} & useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5}
@@ -291,7 +291,7 @@ longGun = defaultGun
, withTorqueAfter , withTorqueAfter
, withMuzFlareI , withMuzFlareI
] ]
& useAim . aimSpeed .~ 0.2 & useAim . aimWeight .~ 8
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
& useAim . aimZoom .~ defaultItZoom {_itZoomMax = 0.5, _itZoomMin = 0.5} & useAim . aimZoom .~ defaultItZoom {_itZoomMax = 0.5, _itZoomMin = 0.5}
+1 -1
View File
@@ -34,7 +34,7 @@ lasDrones = defaultGun
, withSoundStart tap4S , withSoundStart tap4S
, useAmmoAmount 1 , useAmmoAmount 1
] ]
& useAim . aimSpeed .~ 0.2 & useAim . aimWeight .~ 8
& useAim . aimRange .~ 0.5 & useAim . aimRange .~ 0.5
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
, _itEffect = NoItEffect , _itEffect = NoItEffect
+1 -1
View File
@@ -58,7 +58,7 @@ launcher = defaultGun
, withSoundStart tap4S , withSoundStart tap4S
, useAmmoAmount 1 , useAmmoAmount 1
] ]
& useAim . aimSpeed .~ 0.2 & useAim . aimWeight .~ 8
& useAim . aimRange .~ 0.5 & useAim . aimRange .~ 0.5
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
, _itParams = ShellLauncher , _itParams = ShellLauncher
+1 -1
View File
@@ -42,7 +42,7 @@ sonicGun = defaultAutoGun
, useTimeCheck , useTimeCheck
, useAmmoAmount 1 , useAmmoAmount 1
] ]
& useAim . aimSpeed .~ 0.4 & useAim . aimWeight .~ 6
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
, _itParams = NoParams , _itParams = NoParams
+1 -1
View File
@@ -140,7 +140,7 @@ flameThrower = defaultAutoGun
--, withTempLight 1 100 (V3 1 0 0) --, withTempLight 1 100 (V3 1 0 0)
, withSidePushAfterI 20 , withSidePushAfterI 20
] ]
& useAim . aimSpeed .~ 0.5 & useAim . aimWeight .~ 5
& useAim . aimZoom .~ defaultItZoom {_itZoomMax = 5, _itZoomMin = 1.5} & useAim . aimZoom .~ defaultItZoom {_itZoomMax = 5, _itZoomMin = 1.5}
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
-- , _itFloorPict = flamerPic -- , _itFloorPict = flamerPic