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