Commit before changing module system to Map
This commit is contained in:
@@ -72,15 +72,16 @@ addModules (ps,it) = (is , ) <$> [ (it & itModules .~ themodules,s) | (themodule
|
|||||||
g ims (ims',s) = map (second (s++)) $ combineModules ims ims'
|
g ims (ims',s) = map (second (s++)) $ combineModules ims ims'
|
||||||
|
|
||||||
combineModules :: ItemModules -> ItemModules -> [(ItemModules,[String])]
|
combineModules :: ItemModules -> ItemModules -> [(ItemModules,[String])]
|
||||||
combineModules (ItemModules a1) (ItemModules a2)
|
combineModules (ItemModules a1 b1) (ItemModules a2 b2)
|
||||||
= [(ItemModules a,ss) | (a,ss) <- combineModule a1 a2]
|
= [(ItemModules a b,as++bs) | (a,as) <- combineModule a1 a2
|
||||||
|
, (b,bs) <- combineModule b1 b2]
|
||||||
|
|
||||||
combineModule :: ItemModule a -> ItemModule a -> [(ItemModule a,[String])]
|
combineModule :: ItemModule a -> ItemModule a -> [(ItemModule a,[String])]
|
||||||
combineModule (ItemModule _ ss _) BlockedModule = [(BlockedModule, "WARNING:REMOVES":ss)]
|
combineModule ItemModule{_modName=ss} BlockedModule = [(BlockedModule, "WARNING:REMOVES":ss)]
|
||||||
combineModule _ BlockedModule = [(BlockedModule, [])]
|
combineModule _ BlockedModule = [(BlockedModule, [])]
|
||||||
combineModule BlockedModule m = [(m,[])]
|
combineModule BlockedModule m = [(m,[])]
|
||||||
combineModule DefaultModule m = [(m,[])]
|
combineModule DefaultModule m = [(m,[])]
|
||||||
combineModule (ItemModule _ ss _) m@ItemModule{} = [(m,"WARNING:REMOVES":ss)]
|
combineModule ItemModule{_modName=ss} m@ItemModule{} = [(m,"WARNING:REMOVES":ss)]
|
||||||
combineModule m _ = [(m,[])]
|
combineModule m _ = [(m,[])]
|
||||||
|
|
||||||
toggleCombineInv :: World -> World
|
toggleCombineInv :: World -> World
|
||||||
|
|||||||
@@ -70,17 +70,49 @@ itemCombinations =
|
|||||||
++ [ po [itype,mtype] $ it & itModules . modHitEffect .~ m
|
++ [ po [itype,mtype] $ it & itModules . modHitEffect .~ m
|
||||||
| (itype,it) <- firearmTypes , (mtype,m) <- bulletModules
|
| (itype,it) <- firearmTypes , (mtype,m) <- bulletModules
|
||||||
]
|
]
|
||||||
|
++ [ po (itype : ctypes) $ it & itModules . modRifleMag .~ m
|
||||||
|
| (itype,it) <- rifleMagTypes , (ctypes,m) <- rifleMagModules
|
||||||
|
]
|
||||||
where
|
where
|
||||||
p = (,)
|
p = (,)
|
||||||
po xs it = (map o xs,it)
|
po xs it = (map o xs,it)
|
||||||
o = (1,)
|
o = (1,)
|
||||||
|
|
||||||
|
rifleMagTypes :: [(CombineType,Item)]
|
||||||
|
rifleMagTypes
|
||||||
|
= [(REPEATER,repeater)
|
||||||
|
,(AUTORIFLE,autoRifle)
|
||||||
|
,(BURSTRIFLE,burstRifle)
|
||||||
|
,(FASTBURSTRIFLE,fastBurstRifle)
|
||||||
|
]
|
||||||
|
rifleMagModules :: [([CombineType],ItemModule RifleMag)]
|
||||||
|
rifleMagModules =
|
||||||
|
[([DRUM,HARDWARE], ItemModule DrumMag ["+DRUM MAGAZINE"] 1 id)
|
||||||
|
,([MOTOR,HARDWARE], ItemModule BeltMag ["+BELT MAGAZINE"] 1 id)
|
||||||
|
,([MAGNET,HARDWARE],ItemModule MagnetMag ["+MAGNET MAGAZINE"] 1 id)
|
||||||
|
]
|
||||||
|
|
||||||
firearmTypes :: [(CombineType,Item)]
|
firearmTypes :: [(CombineType,Item)]
|
||||||
firearmTypes
|
firearmTypes
|
||||||
= [(BANGSTICK i,bangStick i) | i <- [1..9] ]
|
= [(BANGSTICK i,bangStick i) | i <- [1..9] ]
|
||||||
++ [(BANGCANEX i,bangCaneX i) | i <- [1..6] ]
|
++ [(BANGCANEX i,bangCaneX i) | i <- [1..6] ]
|
||||||
|
++ [(REVOLVERX i,revolverX i) | i <- [1..5] ]
|
||||||
|
++ [(MINIGUNX i,miniGunX i) | i <- [3..16] ]
|
||||||
|
++ [(BANGCANE,bangCane)
|
||||||
|
,(PISTOL,pistol)
|
||||||
|
,(AUTOPISTOL,autoPistol)
|
||||||
|
,(SMG,smg)
|
||||||
|
,(MACHINEPISTOL,machinePistol)
|
||||||
|
,(REVOLVER,revolver)
|
||||||
|
,(RIFLE,rifle)
|
||||||
|
,(REPEATER,repeater)
|
||||||
|
,(AUTORIFLE,autoRifle)
|
||||||
|
,(BURSTRIFLE,burstRifle)
|
||||||
|
,(FASTBURSTRIFLE,fastBurstRifle)
|
||||||
|
,(COMPLETEBURSTRIFLE,completeBurstRifle)
|
||||||
|
]
|
||||||
bulletModules :: [(CombineType,ItemModule HitEffect)]
|
bulletModules :: [(CombineType,ItemModule HitEffect)]
|
||||||
bulletModules =
|
bulletModules =
|
||||||
[(INCENDIARYMODULE, ItemModule (destroyOnImpact bulIncCr bulIncWall) ["+INCENDIARY"] 1 )
|
[(INCENDIARYMODULE, ItemModule (destroyOnImpact bulIncCr bulIncWall) ["+INCENDIARY"] 1 id)
|
||||||
,(BOUNCEMODULE, ItemModule (destroyOnImpact bulBounceArmCr' bulBounceWall) ["+BOUNCE"] 1 )
|
,(BOUNCEMODULE, ItemModule (destroyOnImpact bulBounceArmCr' bulBounceWall) ["+BOUNCE"] 1 id)
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ data CombineType
|
|||||||
| FUELCELL
|
| FUELCELL
|
||||||
| PORTABLEFUSION
|
| PORTABLEFUSION
|
||||||
-- Modules
|
-- Modules
|
||||||
|
-- bullet
|
||||||
| INCENDIARYMODULE
|
| INCENDIARYMODULE
|
||||||
| BOUNCEMODULE
|
| BOUNCEMODULE
|
||||||
| NoCombineType
|
| NoCombineType
|
||||||
|
|||||||
+8
-1
@@ -342,7 +342,7 @@ _itUseAimStance = _aimStance . _useAim . _itUse
|
|||||||
data ItemConsumption
|
data ItemConsumption
|
||||||
= LoadableAmmo
|
= LoadableAmmo
|
||||||
{ _aoType :: AmmoType
|
{ _aoType :: AmmoType
|
||||||
, _ammoMax :: Int
|
, _ammoBaseMax :: Int
|
||||||
, _ammoLoaded :: Int
|
, _ammoLoaded :: Int
|
||||||
, _reloadTime :: Int
|
, _reloadTime :: Int
|
||||||
, _reloadState :: Maybe' Int
|
, _reloadState :: Maybe' Int
|
||||||
@@ -380,7 +380,13 @@ data Item
|
|||||||
|
|
||||||
data ItemModules = ItemModules
|
data ItemModules = ItemModules
|
||||||
{ _modHitEffect :: ItemModule HitEffect
|
{ _modHitEffect :: ItemModule HitEffect
|
||||||
|
, _modRifleMag :: ItemModule RifleMag
|
||||||
}
|
}
|
||||||
|
data RifleMag = DrumMag | BeltMag | MagnetMag
|
||||||
|
|
||||||
|
data ModuleSlot
|
||||||
|
= ModBullet
|
||||||
|
| ModRifleMag
|
||||||
|
|
||||||
data ItemModule a
|
data ItemModule a
|
||||||
= BlockedModule
|
= BlockedModule
|
||||||
@@ -389,6 +395,7 @@ data ItemModule a
|
|||||||
{ _theModule :: a
|
{ _theModule :: a
|
||||||
, _modName :: [String]
|
, _modName :: [String]
|
||||||
, _modSize :: Int
|
, _modSize :: Int
|
||||||
|
, _modModification :: Item -> Item
|
||||||
}
|
}
|
||||||
|
|
||||||
data ItemDimension = ItemDimension
|
data ItemDimension = ItemDimension
|
||||||
|
|||||||
@@ -154,7 +154,10 @@ defaultEquipment = Item
|
|||||||
, _itParams = NoParams
|
, _itParams = NoParams
|
||||||
, _itTweaks = NoTweaks
|
, _itTweaks = NoTweaks
|
||||||
, _itTargeting = Nothing
|
, _itTargeting = Nothing
|
||||||
, _itModules = ItemModules BlockedModule
|
, _itModules = ItemModules
|
||||||
|
{ _modHitEffect = BlockedModule
|
||||||
|
, _modRifleMag = BlockedModule
|
||||||
|
}
|
||||||
}
|
}
|
||||||
defaultItZoom :: ItZoom
|
defaultItZoom :: ItZoom
|
||||||
defaultItZoom = ItZoom 20 0.2 1
|
defaultItZoom = ItZoom 20 0.2 1
|
||||||
@@ -178,7 +181,10 @@ defaultConsumable = Item
|
|||||||
, _itParams = NoParams
|
, _itParams = NoParams
|
||||||
, _itDimension = defItDimCol blue
|
, _itDimension = defItDimCol blue
|
||||||
, _itTweaks = NoTweaks
|
, _itTweaks = NoTweaks
|
||||||
, _itModules = ItemModules BlockedModule
|
, _itModules = ItemModules
|
||||||
|
{ _modHitEffect = BlockedModule
|
||||||
|
, _modRifleMag = BlockedModule
|
||||||
|
}
|
||||||
}
|
}
|
||||||
defaultApplyDamage :: [DamageType] -> Creature -> (World -> World, Creature)
|
defaultApplyDamage :: [DamageType] -> Creature -> (World -> World, Creature)
|
||||||
defaultApplyDamage ds cr = (id, doPoisonDam $ foldl' (flip $ \d c -> snd $ applyIndividualDamage d c) cr ds')
|
defaultApplyDamage ds cr = (id, doPoisonDam $ foldl' (flip $ \d c -> snd $ applyIndividualDamage d c) cr ds')
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import Control.Lens
|
|||||||
defaultAmmo :: ItemConsumption
|
defaultAmmo :: ItemConsumption
|
||||||
defaultAmmo = LoadableAmmo
|
defaultAmmo = LoadableAmmo
|
||||||
{ _aoType = GenericAmmo
|
{ _aoType = GenericAmmo
|
||||||
, _ammoMax = 15
|
, _ammoBaseMax = 15
|
||||||
, _ammoLoaded = 0
|
, _ammoLoaded = 0
|
||||||
, _reloadTime = 40
|
, _reloadTime = 40
|
||||||
, _reloadState = Nothing'
|
, _reloadState = Nothing'
|
||||||
@@ -102,6 +102,7 @@ defaultGun = Item
|
|||||||
, _itTweaks = NoTweaks
|
, _itTweaks = NoTweaks
|
||||||
, _itModules = ItemModules
|
, _itModules = ItemModules
|
||||||
{ _modHitEffect = DefaultModule
|
{ _modHitEffect = DefaultModule
|
||||||
|
, _modRifleMag = BlockedModule
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
defaultCraftable :: Item
|
defaultCraftable :: Item
|
||||||
@@ -125,7 +126,10 @@ defaultCraftable = Item
|
|||||||
, _itParams = NoParams
|
, _itParams = NoParams
|
||||||
, _itDimension = defItDimCol green
|
, _itDimension = defItDimCol green
|
||||||
, _itTweaks = NoTweaks
|
, _itTweaks = NoTweaks
|
||||||
, _itModules = ItemModules BlockedModule
|
, _itModules = ItemModules
|
||||||
|
{ _modHitEffect = BlockedModule
|
||||||
|
, _modRifleMag = BlockedModule
|
||||||
|
}
|
||||||
}
|
}
|
||||||
defItDim :: ItemDimension
|
defItDim :: ItemDimension
|
||||||
defItDim = ItemDimension
|
defItDim = ItemDimension
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
module Dodge.Item.MaxAmmo where
|
||||||
|
import Dodge.Data
|
||||||
|
|
||||||
|
import Control.Lens
|
||||||
|
|
||||||
|
itMaxAmmo :: Item -> Int
|
||||||
|
itMaxAmmo it = _ammoBaseMax (_itConsumption it)
|
||||||
|
+ maybe 0 f (it ^? itModules . modRifleMag . theModule)
|
||||||
|
where
|
||||||
|
f DrumMag = 45
|
||||||
|
f BeltMag = 135
|
||||||
|
f MagnetMag = 0
|
||||||
@@ -7,6 +7,7 @@ module Dodge.Item.Weapon.AmmoParams
|
|||||||
, fractionLoadedAmmo2
|
, fractionLoadedAmmo2
|
||||||
) where
|
) where
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
|
import Dodge.Item.MaxAmmo
|
||||||
import Dodge.Particle.Bullet.Spawn
|
import Dodge.Particle.Bullet.Spawn
|
||||||
import Dodge.Creature.HandPos
|
import Dodge.Creature.HandPos
|
||||||
import Dodge.WorldEvent.HitEffect
|
import Dodge.WorldEvent.HitEffect
|
||||||
@@ -54,9 +55,13 @@ useAmmoParams it cr = withVelWthHiteff
|
|||||||
|
|
||||||
useAmmoParamsVelMod :: Float -> Item -> Creature -> World -> World
|
useAmmoParamsVelMod :: Float -> Item -> Creature -> World -> World
|
||||||
useAmmoParamsVelMod vfact it = withDelayedVelWthHiteff vfact (_amBulVel b) (_rifling $ _itParams it)
|
useAmmoParamsVelMod vfact it = withDelayedVelWthHiteff vfact (_amBulVel b) (_rifling $ _itParams it)
|
||||||
(_amBulWth b) (_amBulEff b)
|
(_amBulWth b)
|
||||||
|
-- (_amBulEff b)
|
||||||
|
bulHitEff
|
||||||
where
|
where
|
||||||
b = _aoType $ _itConsumption it
|
b = _aoType $ _itConsumption it
|
||||||
|
bulHitEff = fromMaybe (destroyOnImpact bulHitCr bulHitWall)
|
||||||
|
$ it ^? itModules . modHitEffect . theModule
|
||||||
|
|
||||||
{- | Creates a bullet with a given velocity, width, and 'HitEffect' -}
|
{- | Creates a bullet with a given velocity, width, and 'HitEffect' -}
|
||||||
withVelWthHiteff
|
withVelWthHiteff
|
||||||
@@ -98,7 +103,8 @@ loadedAmmo it
|
|||||||
| otherwise = 0
|
| otherwise = 0
|
||||||
|
|
||||||
fractionLoadedAmmo :: Item -> Float
|
fractionLoadedAmmo :: Item -> Float
|
||||||
fractionLoadedAmmo it = fromIntegral (loadedAmmo it) / fromIntegral (_ammoMax (_itConsumption it))
|
fractionLoadedAmmo it = fromIntegral (loadedAmmo it) / fromIntegral (itMaxAmmo it)
|
||||||
|
|
||||||
fractionLoadedAmmo2 :: Item -> Float
|
fractionLoadedAmmo2 :: Item -> Float
|
||||||
fractionLoadedAmmo2 it = 1 - (1 - fromIntegral (loadedAmmo it) / fromIntegral (_ammoMax (_itConsumption it)))**2
|
fractionLoadedAmmo2 it = 1 -
|
||||||
|
(1 - fromIntegral (loadedAmmo it) / fromIntegral (itMaxAmmo it))**2
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ teslaGun = defaultGun
|
|||||||
{ _itName = "TESLA"
|
{ _itName = "TESLA"
|
||||||
, _itType = TESLAGUN
|
, _itType = TESLAGUN
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _ammoMax = 200
|
{ _ammoBaseMax = 200
|
||||||
, _ammoLoaded = 200
|
, _ammoLoaded = 200
|
||||||
, _reloadTime = 80
|
, _reloadTime = 80
|
||||||
}
|
}
|
||||||
@@ -69,7 +69,7 @@ lasGun = defaultAutoGun
|
|||||||
{ _itName = "LASGUN"
|
{ _itName = "LASGUN"
|
||||||
, _itType = LASGUN
|
, _itType = LASGUN
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _ammoMax = 200
|
{ _ammoBaseMax = 200
|
||||||
, _ammoLoaded = 200
|
, _ammoLoaded = 200
|
||||||
, _reloadTime = 80
|
, _reloadTime = 80
|
||||||
}
|
}
|
||||||
@@ -129,7 +129,7 @@ tractorGun = lasGun
|
|||||||
{ _itName = "TRACTORGUN"
|
{ _itName = "TRACTORGUN"
|
||||||
, _itType = TRACTORGUN
|
, _itType = TRACTORGUN
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _ammoMax = 10000
|
{ _ammoBaseMax = 10000
|
||||||
, _ammoLoaded = 10000
|
, _ammoLoaded = 10000
|
||||||
, _reloadTime = 40
|
, _reloadTime = 40
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ bezierGun = defaultGun
|
|||||||
, _itEffect = rbSetTarget
|
, _itEffect = rbSetTarget
|
||||||
-- , _itZoom = defaultItZoom
|
-- , _itZoom = defaultItZoom
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _ammoMax = 50
|
{ _ammoBaseMax = 50
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ boosterGun = defaultGun
|
|||||||
, _itType = BOOSTER
|
, _itType = BOOSTER
|
||||||
, _itInvColor = cyan
|
, _itInvColor = cyan
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _ammoMax = 100
|
{ _ammoBaseMax = 100
|
||||||
, _ammoLoaded = 100
|
, _ammoLoaded = 100
|
||||||
, _reloadTime = 20
|
, _reloadTime = 20
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ bangCane = defaultGun
|
|||||||
}
|
}
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _aoType = basicBullet
|
{ _aoType = basicBullet
|
||||||
, _ammoMax = 1
|
, _ammoBaseMax = 1
|
||||||
, _reloadTime = 20
|
, _reloadTime = 20
|
||||||
, _reloadType = ActivePartial 1
|
, _reloadType = ActivePartial 1
|
||||||
}
|
}
|
||||||
@@ -115,7 +115,7 @@ bangCaneX i = bangCane
|
|||||||
& 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}
|
||||||
& itConsumption . ammoMax .~ i
|
& itConsumption . ammoBaseMax .~ i
|
||||||
& itParams . gunBarrels .~ MultiBarrel
|
& itParams . gunBarrels .~ MultiBarrel
|
||||||
{_brlSpread = AlignedBarrels
|
{_brlSpread = AlignedBarrels
|
||||||
,_brlNum = i
|
,_brlNum = i
|
||||||
@@ -145,21 +145,23 @@ rifle = bangCane
|
|||||||
, _dimSPic = \it -> noPic $ baseRifleShape
|
, _dimSPic = \it -> noPic $ baseRifleShape
|
||||||
<> makeSingleClipAt (V3 5 0 3) it
|
<> makeSingleClipAt (V3 5 0 3) it
|
||||||
}
|
}
|
||||||
, _itModules = ItemModules
|
|
||||||
{ _modHitEffect = DefaultModule }
|
|
||||||
}
|
}
|
||||||
& itUse . useAim . aimStance .~ TwoHandTwist
|
& itUse . useAim . aimStance .~ TwoHandTwist
|
||||||
& itName .~ "RIFLE"
|
& itName .~ "RIFLE"
|
||||||
& itType .~ RIFLE
|
& itType .~ RIFLE
|
||||||
& itConsumption . ammoMax .~ 1
|
& itConsumption . ammoBaseMax .~ 1
|
||||||
|
|
||||||
repeater :: Item
|
repeater :: Item
|
||||||
repeater = rifle
|
repeater = rifle
|
||||||
|
& itModules .~ ItemModules
|
||||||
|
{ _modHitEffect = DefaultModule
|
||||||
|
, _modRifleMag = DefaultModule
|
||||||
|
}
|
||||||
& itName .~ "REPEATER"
|
& itName .~ "REPEATER"
|
||||||
& itType .~ REPEATER
|
& itType .~ REPEATER
|
||||||
& itConsumption . reloadType .~ ActiveClear
|
& itConsumption . reloadType .~ ActiveClear
|
||||||
& itConsumption . reloadTime .~ 80
|
& itConsumption . reloadTime .~ 80
|
||||||
& itConsumption . ammoMax .~ 15
|
& itConsumption . ammoBaseMax .~ 15
|
||||||
& itDimension . dimSPic .~ (\it -> noPic $ baseRifleShape
|
& itDimension . dimSPic .~ (\it -> noPic $ baseRifleShape
|
||||||
<> makeTinClipAt 0 (V3 10 (-2) 0) it
|
<> makeTinClipAt 0 (V3 10 (-2) 0) it
|
||||||
)
|
)
|
||||||
@@ -216,6 +218,7 @@ completeBurstRifle :: Item
|
|||||||
completeBurstRifle = repeater
|
completeBurstRifle = repeater
|
||||||
& itName .~ "COMPLETEBURSTRIFLE"
|
& itName .~ "COMPLETEBURSTRIFLE"
|
||||||
& itType .~ COMPLETEBURSTRIFLE
|
& itType .~ COMPLETEBURSTRIFLE
|
||||||
|
& itModules . modRifleMag .~ BlockedModule
|
||||||
& itParams . gunBarrels . brlInaccuracy .~ 0.1
|
& itParams . gunBarrels . brlInaccuracy .~ 0.1
|
||||||
& itUse . useDelay . rateMax .~ 28
|
& itUse . useDelay . rateMax .~ 28
|
||||||
& itUse . useMods .~
|
& itUse . useMods .~
|
||||||
@@ -263,7 +266,7 @@ miniGunX i = defaultAutoGun
|
|||||||
, _itType = MINIGUNX i
|
, _itType = MINIGUNX i
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _aoType = basicBullet
|
{ _aoType = basicBullet
|
||||||
, _ammoMax = 1500
|
, _ammoBaseMax = 1500
|
||||||
, _ammoLoaded = 1500
|
, _ammoLoaded = 1500
|
||||||
, _reloadTime = 200
|
, _reloadTime = 200
|
||||||
}
|
}
|
||||||
@@ -291,6 +294,7 @@ miniGunX i = defaultAutoGun
|
|||||||
["*" ++ replicate 13 ' ' ++ "*"
|
["*" ++ replicate 13 ' ' ++ "*"
|
||||||
,"* " ++ fromMaybe " " (maybeWarmupStatus it) ++ " *"
|
,"* " ++ fromMaybe " " (maybeWarmupStatus it) ++ " *"
|
||||||
,"*" ++ replicate 13 ' ' ++ "*" ]
|
,"*" ++ replicate 13 ' ' ++ "*" ]
|
||||||
|
++ moduleStrings it
|
||||||
, _itDimension = ItemDimension
|
, _itDimension = ItemDimension
|
||||||
{ _dimRad = 20
|
{ _dimRad = 20
|
||||||
, _dimCenter = V3 5 0 0
|
, _dimCenter = V3 5 0 0
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ bangRod = defaultGun
|
|||||||
}
|
}
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _aoType = basicBullet
|
{ _aoType = basicBullet
|
||||||
, _ammoMax = 1
|
, _ammoBaseMax = 1
|
||||||
, _reloadTime = 20
|
, _reloadTime = 20
|
||||||
, _reloadType = ActiveClear
|
, _reloadType = ActiveClear
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,7 @@ amr :: Item
|
|||||||
amr = elephantGun
|
amr = elephantGun
|
||||||
& itName .~ "AMR"
|
& itName .~ "AMR"
|
||||||
& itType .~ AMR
|
& itType .~ AMR
|
||||||
& itConsumption . ammoMax .~ 15
|
& itConsumption . ammoBaseMax .~ 15
|
||||||
& itDimension . dimSPic .~ (\it -> noPic $ baseAMRShape
|
& itDimension . dimSPic .~ (\it -> noPic $ baseAMRShape
|
||||||
<> makeTinClipAt 0 (V3 10 (-2) 0) it
|
<> makeTinClipAt 0 (V3 10 (-2) 0) it
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ bangStick i = defaultGun
|
|||||||
, _itType = BANGSTICK i
|
, _itType = BANGSTICK i
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _aoType = basicBullet
|
{ _aoType = basicBullet
|
||||||
, _ammoMax = i
|
, _ammoBaseMax = i
|
||||||
, _reloadTime = 15
|
, _reloadTime = 15
|
||||||
, _reloadType = ActivePartial 1
|
, _reloadType = ActivePartial 1
|
||||||
}
|
}
|
||||||
@@ -119,7 +119,7 @@ revolver = pistol
|
|||||||
, _itType = REVOLVER
|
, _itType = REVOLVER
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _aoType = basicBullet
|
{ _aoType = basicBullet
|
||||||
, _ammoMax = 6
|
, _ammoBaseMax = 6
|
||||||
, _ammoLoaded = 0
|
, _ammoLoaded = 0
|
||||||
, _reloadTime = 15
|
, _reloadTime = 15
|
||||||
, _reloadType = ActivePartial 1
|
, _reloadType = ActivePartial 1
|
||||||
@@ -174,7 +174,7 @@ pistol = (bangStick 1)
|
|||||||
, _itType = PISTOL
|
, _itType = PISTOL
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _aoType = basicBullet
|
{ _aoType = basicBullet
|
||||||
, _ammoMax = 15
|
, _ammoBaseMax = 15
|
||||||
, _ammoLoaded = 0
|
, _ammoLoaded = 0
|
||||||
, _reloadTime = 70
|
, _reloadTime = 70
|
||||||
, _reloadType = ActiveClear
|
, _reloadType = ActiveClear
|
||||||
@@ -233,4 +233,4 @@ revolverX i = revolver
|
|||||||
, torqueAfterI 0.2
|
, torqueAfterI 0.2
|
||||||
, withRecoilI 10
|
, withRecoilI 10
|
||||||
]
|
]
|
||||||
} & itConsumption . ammoMax .~ i * 6
|
} & itConsumption . ammoBaseMax .~ i * 6
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ autoGun = defaultAutoGun
|
|||||||
, _itType = AUTOGUN
|
, _itType = AUTOGUN
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _aoType = basicBullet
|
{ _aoType = basicBullet
|
||||||
, _ammoMax = 30
|
, _ammoBaseMax = 30
|
||||||
, _ammoLoaded = 30
|
, _ammoLoaded = 30
|
||||||
, _reloadTime = 80
|
, _reloadTime = 80
|
||||||
}
|
}
|
||||||
@@ -109,7 +109,7 @@ bangCone = defaultGun
|
|||||||
, _itType = BANGCONE
|
, _itType = BANGCONE
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _aoType = basicBullet
|
{ _aoType = basicBullet
|
||||||
, _ammoMax = 5
|
, _ammoBaseMax = 5
|
||||||
, _reloadTime = 25
|
, _reloadTime = 25
|
||||||
, _reloadType = ActiveClear
|
, _reloadType = ActiveClear
|
||||||
}
|
}
|
||||||
@@ -194,7 +194,7 @@ blunderbuss = bangCone
|
|||||||
<> upperPrismPoly 6 (rectNSEW 4 (-4) 30 20)
|
<> upperPrismPoly 6 (rectNSEW 4 (-4) 30 20)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
& itConsumption . ammoMax .~ 25
|
& itConsumption . ammoBaseMax .~ 25
|
||||||
& itConsumption . reloadTime .~ 30
|
& itConsumption . reloadTime .~ 30
|
||||||
bigBlunderbuss :: Item
|
bigBlunderbuss :: Item
|
||||||
bigBlunderbuss = blunderbuss
|
bigBlunderbuss = blunderbuss
|
||||||
@@ -218,7 +218,7 @@ bigBlunderbuss = blunderbuss
|
|||||||
& useAim . aimStance .~ TwoHandTwist
|
& useAim . aimStance .~ TwoHandTwist
|
||||||
& useAim . aimSpeed .~ 0.4
|
& useAim . aimSpeed .~ 0.4
|
||||||
}
|
}
|
||||||
& itConsumption . ammoMax .~ 50
|
& itConsumption . ammoBaseMax .~ 50
|
||||||
& itConsumption . reloadTime .~ 36
|
& itConsumption . reloadTime .~ 36
|
||||||
biggerBlunderbuss :: Item
|
biggerBlunderbuss :: Item
|
||||||
biggerBlunderbuss = bigBlunderbuss
|
biggerBlunderbuss = bigBlunderbuss
|
||||||
@@ -242,7 +242,7 @@ biggerBlunderbuss = bigBlunderbuss
|
|||||||
& useAim . aimStance .~ TwoHandTwist
|
& useAim . aimStance .~ TwoHandTwist
|
||||||
& useAim . aimSpeed .~ 0.4
|
& useAim . aimSpeed .~ 0.4
|
||||||
}
|
}
|
||||||
& itConsumption . ammoMax .~ 75
|
& itConsumption . ammoBaseMax .~ 75
|
||||||
& itConsumption . reloadTime .~ 43
|
& itConsumption . reloadTime .~ 43
|
||||||
biggestBlunderbuss :: Item
|
biggestBlunderbuss :: Item
|
||||||
biggestBlunderbuss = biggerBlunderbuss
|
biggestBlunderbuss = biggerBlunderbuss
|
||||||
@@ -266,7 +266,7 @@ biggestBlunderbuss = biggerBlunderbuss
|
|||||||
& useAim . aimStance .~ TwoHandTwist
|
& useAim . aimStance .~ TwoHandTwist
|
||||||
& useAim . aimSpeed .~ 0.4
|
& useAim . aimSpeed .~ 0.4
|
||||||
}
|
}
|
||||||
& itConsumption . ammoMax .~ 100
|
& itConsumption . ammoBaseMax .~ 100
|
||||||
& itConsumption . reloadTime .~ 50
|
& itConsumption . reloadTime .~ 50
|
||||||
|
|
||||||
grapeShotCannon :: Item
|
grapeShotCannon :: Item
|
||||||
@@ -291,7 +291,7 @@ grapeShotCannon = blunderbuss
|
|||||||
& useAim . aimStance .~ TwoHandTwist
|
& useAim . aimStance .~ TwoHandTwist
|
||||||
& useAim . aimSpeed .~ 0.4
|
& useAim . aimSpeed .~ 0.4
|
||||||
}
|
}
|
||||||
& itConsumption . ammoMax .~ 15
|
& itConsumption . ammoBaseMax .~ 15
|
||||||
& itConsumption . reloadTime .~ 30
|
& itConsumption . reloadTime .~ 30
|
||||||
|
|
||||||
grenadeLauncher :: Int -> Item
|
grenadeLauncher :: Int -> Item
|
||||||
@@ -305,7 +305,7 @@ hvAutoGun = defaultAutoGun
|
|||||||
, _itType = HVAUTOGUN
|
, _itType = HVAUTOGUN
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _aoType = hvBullet
|
{ _aoType = hvBullet
|
||||||
, _ammoMax = 100
|
, _ammoBaseMax = 100
|
||||||
, _ammoLoaded = 100
|
, _ammoLoaded = 100
|
||||||
, _reloadTime = 200
|
, _reloadTime = 200
|
||||||
}
|
}
|
||||||
@@ -334,7 +334,7 @@ ltAutoGun = defaultAutoGun
|
|||||||
, _itType = LTAUTOGUN
|
, _itType = LTAUTOGUN
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _aoType = basicBullet
|
{ _aoType = basicBullet
|
||||||
, _ammoMax = 15
|
, _ammoBaseMax = 15
|
||||||
, _ammoLoaded = 0
|
, _ammoLoaded = 0
|
||||||
, _reloadTime = 90
|
, _reloadTime = 90
|
||||||
}
|
}
|
||||||
@@ -363,7 +363,7 @@ spreadGun = defaultGun
|
|||||||
, _itType = SPREADGUN
|
, _itType = SPREADGUN
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _aoType = basicBullet
|
{ _aoType = basicBullet
|
||||||
, _ammoMax = 5
|
, _ammoBaseMax = 5
|
||||||
, _ammoLoaded = 5
|
, _ammoLoaded = 5
|
||||||
, _reloadTime = 80
|
, _reloadTime = 80
|
||||||
}
|
}
|
||||||
@@ -396,7 +396,7 @@ multGun = defaultGun
|
|||||||
, _itType = MULTGUN
|
, _itType = MULTGUN
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _aoType = basicBullet
|
{ _aoType = basicBullet
|
||||||
, _ammoMax = 5
|
, _ammoBaseMax = 5
|
||||||
, _ammoLoaded = 2
|
, _ammoLoaded = 2
|
||||||
, _reloadTime = 10
|
, _reloadTime = 10
|
||||||
, _reloadType = ActivePartial 1
|
, _reloadType = ActivePartial 1
|
||||||
@@ -434,7 +434,7 @@ longGun = defaultGun
|
|||||||
, _itType = LONGGUN
|
, _itType = LONGGUN
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _aoType = hvBullet
|
{ _aoType = hvBullet
|
||||||
, _ammoMax = 1
|
, _ammoBaseMax = 1
|
||||||
, _ammoLoaded = 1
|
, _ammoLoaded = 1
|
||||||
, _reloadTime = 100
|
, _reloadTime = 100
|
||||||
, _reloadType = PassiveReload skwareFadeTwoSecS
|
, _reloadType = PassiveReload skwareFadeTwoSecS
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ lasDrones = defaultGun
|
|||||||
, _itType = DRONELAUNCHER
|
, _itType = DRONELAUNCHER
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _aoType = DroneAmmo { _amString = "LASDRONE" }
|
{ _aoType = DroneAmmo { _amString = "LASDRONE" }
|
||||||
, _ammoMax = 2
|
, _ammoBaseMax = 2
|
||||||
, _ammoLoaded = 2
|
, _ammoLoaded = 2
|
||||||
, _reloadTime = 80
|
, _reloadTime = 80
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ module Dodge.Item.Weapon.InventoryDisplay
|
|||||||
( basicItemDisplay
|
( basicItemDisplay
|
||||||
, maybeWarmupStatus
|
, maybeWarmupStatus
|
||||||
, maybeRateStatus
|
, maybeRateStatus
|
||||||
|
, moduleStrings
|
||||||
) where
|
) where
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
import Padding
|
import Padding
|
||||||
@@ -17,9 +18,8 @@ import Control.Lens
|
|||||||
basicItemDisplay :: Item -> [String]
|
basicItemDisplay :: Item -> [String]
|
||||||
basicItemDisplay it = Prelude.take (itSlotsTaken it) $
|
basicItemDisplay it = Prelude.take (itSlotsTaken it) $
|
||||||
(midPadL 15 ' ' thename (' ' : thenumber) ++ theparam)
|
(midPadL 15 ' ' thename (' ' : thenumber) ++ theparam)
|
||||||
: moduleStrings ++ repeat "*"
|
: moduleStrings it ++ repeat "*"
|
||||||
where
|
where
|
||||||
moduleStrings = fromMaybe [] $ it ^? itModules . modHitEffect . modName
|
|
||||||
thename = _itName it
|
thename = _itName it
|
||||||
thenumber = case it ^? itConsumption of
|
thenumber = case it ^? itConsumption of
|
||||||
Just am@LoadableAmmo{} -> case _reloadState am of
|
Just am@LoadableAmmo{} -> case _reloadState am of
|
||||||
@@ -37,6 +37,11 @@ basicItemDisplay it = Prelude.take (itSlotsTaken it) $
|
|||||||
-- , maybeRateStatus
|
-- , maybeRateStatus
|
||||||
]
|
]
|
||||||
|
|
||||||
|
moduleStrings :: Item -> [String]
|
||||||
|
moduleStrings it = map (" " ++)
|
||||||
|
$ (fromMaybe [] $ it ^? itModules . modHitEffect . modName)
|
||||||
|
++ (fromMaybe [] $ it ^? itModules . modRifleMag . modName)
|
||||||
|
|
||||||
maybeModeStatus :: Item -> Maybe String
|
maybeModeStatus :: Item -> Maybe String
|
||||||
maybeModeStatus it = case it ^? itAttachment of
|
maybeModeStatus it = case it ^? itAttachment of
|
||||||
Just ItCharMode {_itCharMode = (c :<| _)} -> Just [' ',c]
|
Just ItCharMode {_itCharMode = (c :<| _)} -> Just [' ',c]
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ launcher = defaultGun
|
|||||||
, _amString = "EXPLOSIVE SHELL"
|
, _amString = "EXPLOSIVE SHELL"
|
||||||
, _amPjDraw = shellPic
|
, _amPjDraw = shellPic
|
||||||
}
|
}
|
||||||
, _ammoMax = 30
|
, _ammoBaseMax = 30
|
||||||
, _ammoLoaded = 30
|
, _ammoLoaded = 30
|
||||||
, _reloadTime = 80
|
, _reloadTime = 80
|
||||||
}
|
}
|
||||||
@@ -271,7 +271,7 @@ remoteLauncher = launcher
|
|||||||
, _amString = ""
|
, _amString = ""
|
||||||
, _amPjDraw = shellPic
|
, _amPjDraw = shellPic
|
||||||
}
|
}
|
||||||
, _ammoMax = 30
|
, _ammoBaseMax = 30
|
||||||
, _ammoLoaded = 30
|
, _ammoLoaded = 30
|
||||||
, _reloadTime = 80
|
, _reloadTime = 80
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ radar = defaultGun
|
|||||||
{ _itName = "RADAR"
|
{ _itName = "RADAR"
|
||||||
, _itType = RADAR
|
, _itType = RADAR
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _ammoMax = 100
|
{ _ammoBaseMax = 100
|
||||||
, _ammoLoaded = 100
|
, _ammoLoaded = 100
|
||||||
, _reloadTime = 200
|
, _reloadTime = 200
|
||||||
}
|
}
|
||||||
@@ -41,7 +41,7 @@ sonar = defaultGun
|
|||||||
{ _itName = "SONAR"
|
{ _itName = "SONAR"
|
||||||
, _itType = RADAR
|
, _itType = RADAR
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _ammoMax = 100
|
{ _ammoBaseMax = 100
|
||||||
, _ammoLoaded = 100
|
, _ammoLoaded = 100
|
||||||
, _reloadTime = 200
|
, _reloadTime = 200
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ sonicGun = defaultAutoGun
|
|||||||
{ _itName = "SONICGUN"
|
{ _itName = "SONICGUN"
|
||||||
, _itType = SONICGUN
|
, _itType = SONICGUN
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _ammoMax = 10
|
{ _ammoBaseMax = 10
|
||||||
, _ammoLoaded = 10
|
, _ammoLoaded = 10
|
||||||
, _reloadTime = 80
|
, _reloadTime = 80
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spawnGun :: Creature -> Item
|
|||||||
spawnGun cr = defaultGun
|
spawnGun cr = defaultGun
|
||||||
{ _itName = "SPAWNER"
|
{ _itName = "SPAWNER"
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _ammoMax = 1
|
{ _ammoBaseMax = 1
|
||||||
, _ammoLoaded = 1
|
, _ammoLoaded = 1
|
||||||
, _reloadTime = 80
|
, _reloadTime = 80
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ poisonSprayer = defaultAutoGun
|
|||||||
{ _itName = "POISON"
|
{ _itName = "POISON"
|
||||||
, _itType = SPRAYER
|
, _itType = SPRAYER
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _ammoMax = 500
|
{ _ammoBaseMax = 500
|
||||||
, _ammoLoaded = 500
|
, _ammoLoaded = 500
|
||||||
, _reloadTime = 100
|
, _reloadTime = 100
|
||||||
}
|
}
|
||||||
@@ -92,7 +92,7 @@ flamer = defaultAutoGun
|
|||||||
{ _itName = "FLAMER"
|
{ _itName = "FLAMER"
|
||||||
, _itType = SQUIRTER
|
, _itType = SQUIRTER
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _ammoMax = 250
|
{ _ammoBaseMax = 250
|
||||||
, _ammoLoaded = 250
|
, _ammoLoaded = 250
|
||||||
, _reloadTime = 100
|
, _reloadTime = 100
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ shrinkGun = defaultGun
|
|||||||
{ _itName = "SHRINKER"
|
{ _itName = "SHRINKER"
|
||||||
, _itType = SHRINKER
|
, _itType = SHRINKER
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _ammoMax = 100
|
{ _ammoBaseMax = 100
|
||||||
, _ammoLoaded = 100
|
, _ammoLoaded = 100
|
||||||
, _reloadTime = 20
|
, _reloadTime = 20
|
||||||
}
|
}
|
||||||
@@ -91,7 +91,7 @@ blinkGun = defaultGun
|
|||||||
, _itType = BLINKER
|
, _itType = BLINKER
|
||||||
, _itInvColor = cyan
|
, _itInvColor = cyan
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _ammoMax = 100
|
{ _ammoBaseMax = 100
|
||||||
, _ammoLoaded = 100
|
, _ammoLoaded = 100
|
||||||
, _reloadTime = 20
|
, _reloadTime = 20
|
||||||
}
|
}
|
||||||
@@ -123,7 +123,7 @@ forceFieldGun = defaultGun
|
|||||||
{ _itName = "FORCEFIELD"
|
{ _itName = "FORCEFIELD"
|
||||||
, _itType = FORCEFIELD
|
, _itType = FORCEFIELD
|
||||||
, _itConsumption = defaultAmmo
|
, _itConsumption = defaultAmmo
|
||||||
{ _ammoMax = 100
|
{ _ammoBaseMax = 100
|
||||||
, _ammoLoaded = 100
|
, _ammoLoaded = 100
|
||||||
, _reloadTime = 40
|
, _reloadTime = 40
|
||||||
, _reloadState = Nothing'
|
, _reloadState = Nothing'
|
||||||
|
|||||||
+2
-1
@@ -6,4 +6,5 @@ import Control.Lens
|
|||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
|
|
||||||
moduleSizes :: Item -> Int
|
moduleSizes :: Item -> Int
|
||||||
moduleSizes it = fromMaybe 0 $ it ^? itModules . modHitEffect . modSize
|
moduleSizes it = (fromMaybe 0 $ it ^? itModules . modHitEffect . modSize)
|
||||||
|
+ (fromMaybe 0 $ it ^? itModules . modRifleMag . modSize)
|
||||||
|
|||||||
+33
-27
@@ -1,21 +1,25 @@
|
|||||||
module Dodge.Reloading where
|
module Dodge.Reloading where
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
import Dodge.Base
|
import Dodge.Base
|
||||||
|
import Dodge.Item.MaxAmmo
|
||||||
--import qualified Data.IntMap.Strict as IM
|
--import qualified Data.IntMap.Strict as IM
|
||||||
|
|
||||||
import Data.Maybe
|
--import Data.Maybe
|
||||||
import Control.Lens
|
import Control.Lens
|
||||||
|
|
||||||
|
|
||||||
startReloadingWeapon :: Creature -> World -> Maybe World
|
startReloadingWeapon :: Creature -> World -> Maybe World
|
||||||
startReloadingWeapon cr = (creatures . ix (_crID cr) . crInv . ix (_crInvSel cr) . itConsumption)
|
startReloadingWeapon cr = (creatures . ix (_crID cr) . crInv . ix (_crInvSel cr))
|
||||||
icTryStartReloading
|
icTryStartReloading
|
||||||
|
|
||||||
icTryStartReloading :: ItemConsumption -> Maybe ItemConsumption
|
icTryStartReloading :: Item -> Maybe Item
|
||||||
icTryStartReloading am
|
icTryStartReloading it
|
||||||
| _ammoLoaded am < _ammoMax am && _reloadState am == Nothing'
|
| _ammoLoaded am < itMaxAmmo it && _reloadState am == Nothing'
|
||||||
= Just $ am & reloadState .~ Just' (_reloadTime am)
|
= Just $ it & itConsumption . reloadState .~ Just' (_reloadTime am)
|
||||||
& if _reloadType am == ActiveClear then ammoLoaded .~ 0 else id
|
& if _reloadType am == ActiveClear then itConsumption . ammoLoaded .~ 0 else id
|
||||||
| otherwise = Nothing
|
| otherwise = Nothing
|
||||||
|
where
|
||||||
|
am = _itConsumption it
|
||||||
|
|
||||||
crStopReloading :: Creature -> Creature
|
crStopReloading :: Creature -> Creature
|
||||||
crStopReloading cr = cr & crInv . ix (_crInvSel cr) . itConsumption . reloadState .~ Nothing'
|
crStopReloading cr = cr & crInv . ix (_crInvSel cr) . itConsumption . reloadState .~ Nothing'
|
||||||
@@ -25,29 +29,31 @@ crUpCrUp f cr = creatures . ix (_crID cr) %~ f
|
|||||||
|
|
||||||
stepReloading :: Creature -> Creature
|
stepReloading :: Creature -> Creature
|
||||||
stepReloading cr = case cr ^? crInv . ix isel . itConsumption . reloadState . _Just' of
|
stepReloading cr = case cr ^? crInv . ix isel . itConsumption . reloadState . _Just' of
|
||||||
Just 0 -> cr & crInv . ix isel . itConsumption %~ doload
|
Just 0 -> cr & crInv . ix isel %~ doload
|
||||||
Just _ -> cr & crInv . ix isel . itConsumption . reloadState . _Just' %~ decreaseToZero
|
Just _ -> cr & crInv . ix isel . itConsumption . reloadState . _Just' %~ decreaseToZero
|
||||||
Nothing -> cr
|
Nothing -> cr
|
||||||
where
|
where
|
||||||
isel = _crInvSel cr
|
isel = _crInvSel cr
|
||||||
doload itcon = case _reloadType itcon of
|
doload it = case _reloadType itcon of
|
||||||
ActivePartial x
|
ActivePartial x
|
||||||
| x + _ammoLoaded itcon < _ammoMax itcon -> itcon & ammoLoaded %~ (+ x)
|
| x + _ammoLoaded itcon < itMaxAmmo it -> it & itConsumption . ammoLoaded %~ (+ x)
|
||||||
& reloadState .~ Just' (_reloadTime itcon)
|
& itConsumption . reloadState .~ Just' (_reloadTime itcon)
|
||||||
| otherwise -> itcon & ammoLoaded .~ _ammoMax itcon
|
| otherwise -> it & itConsumption . ammoLoaded .~ itMaxAmmo it
|
||||||
& reloadState .~ Nothing'
|
& itConsumption . reloadState .~ Nothing'
|
||||||
_ -> itcon & ammoLoaded .~ _ammoMax itcon
|
_ -> it & itConsumption . ammoLoaded .~ itMaxAmmo it
|
||||||
& reloadState .~ Nothing'
|
& itConsumption . reloadState .~ Nothing'
|
||||||
|
|
||||||
{- | Start reloading if clip is empty. -}
|
|
||||||
crAutoReload :: Creature -> Creature
|
|
||||||
crAutoReload cr = case cr ^? ptrItConsumption' . ammoLoaded of
|
|
||||||
Just 0 | _posture (_crStance cr) /= Aiming
|
|
||||||
-> cr & ptrItConsumption . reloadState .~ strictify reloadT
|
|
||||||
& ptrItConsumption . ammoLoaded %~ (`fromMaybe` maxA)
|
|
||||||
_ -> cr
|
|
||||||
where
|
where
|
||||||
ptrItConsumption = crInv . ix (_crInvSel cr) . itConsumption
|
itcon = _itConsumption it
|
||||||
ptrItConsumption' = crInv . ix (_crInvSel cr) . itConsumption
|
|
||||||
reloadT = cr ^? ptrItConsumption' . reloadTime
|
--{- | Start reloading if clip is empty. -}
|
||||||
maxA = cr ^? ptrItConsumption' . ammoMax
|
--crAutoReload :: Creature -> Creature
|
||||||
|
--crAutoReload cr = case cr ^? ptrItConsumption' . ammoLoaded of
|
||||||
|
-- Just 0 | _posture (_crStance cr) /= Aiming
|
||||||
|
-- -> cr & ptrItConsumption . reloadState .~ strictify reloadT
|
||||||
|
-- & ptrItConsumption . ammoLoaded %~ (`fromMaybe` maxA)
|
||||||
|
-- _ -> cr
|
||||||
|
-- where
|
||||||
|
-- ptrItConsumption = crInv . ix (_crInvSel cr) . itConsumption
|
||||||
|
-- ptrItConsumption' = crInv . ix (_crInvSel cr) . itConsumption
|
||||||
|
-- reloadT = cr ^? ptrItConsumption' . reloadTime
|
||||||
|
-- maxA = fmap itMaxAmmo $ cr ^? crInv . ix (_crInvSel cr)
|
||||||
|
|||||||
Reference in New Issue
Block a user