Make aiming speed be gouverned by strength
This commit is contained in:
@@ -179,7 +179,7 @@ testInventory = IM.fromList $ zip [0..]
|
||||
, magShield
|
||||
, frontArmour
|
||||
, flameShield
|
||||
, powerLegs
|
||||
, makeTypeCraftNum 1 MOTOR
|
||||
, speedLegs
|
||||
, jumpLegs
|
||||
, makeModule INCENDIARYMODULE
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -65,7 +65,7 @@ data CurseStatus
|
||||
| UndroppableIdentified
|
||||
| UndroppableUnidentified
|
||||
data AimParams = AimParams
|
||||
{ _aimSpeed :: Float
|
||||
{ _aimWeight :: Int
|
||||
, _aimRange :: Float
|
||||
, _aimZoom :: ItZoom
|
||||
, _aimStance :: AimStance
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -42,7 +42,7 @@ sonicGun = defaultAutoGun
|
||||
, useTimeCheck
|
||||
, useAmmoAmount 1
|
||||
]
|
||||
& useAim . aimSpeed .~ 0.4
|
||||
& useAim . aimWeight .~ 6
|
||||
& useAim . aimRange .~ 1
|
||||
& useAim . aimStance .~ TwoHandTwist
|
||||
, _itParams = NoParams
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user