Move some item datatypes into dedicated module

This commit is contained in:
2021-11-29 16:50:44 +00:00
parent f40d486d68
commit 89a80a0c77
15 changed files with 90 additions and 124 deletions
+4 -44
View File
@@ -294,22 +294,6 @@ data FloorItem = FlIt { _flIt :: Item , _flItPos :: Point2 , _flItRot :: Float,
data ItemPos data ItemPos
= InInv { _itCrId :: Int , _itInvId :: Int } = InInv { _itCrId :: Int , _itInvId :: Int }
| OnFloor { _itFlID :: Int } | OnFloor { _itFlID :: Int }
data UseDelay -- should just be Delay
= NoDelay
| FixedRate
{_rateMax :: Int
,_rateTime :: Int
}
| VariableRate
{_rateMax :: Int
,_rateTime :: Int
,_rateMaxMax :: Int
,_rateMinMax :: Int
}
| WarmUpNoDelay
{_warmTime :: Int
,_warmMax :: Int
}
data ItemUse data ItemUse
= RightUse = RightUse
{ _rUse :: Item -> Creature -> World -> World { _rUse :: Item -> Creature -> World -> World
@@ -324,12 +308,6 @@ data ItemUse
, _useHammer :: HammerType , _useHammer :: HammerType
} }
| NoUse | NoUse
data AimParams = AimParams
{ _aimSpeed :: Float
, _aimRange :: Float
, _aimZoom :: ItZoom
, _aimStance :: AimStance
}
_itUseAimStance :: Item -> AimStance _itUseAimStance :: Item -> AimStance
_itUseAimStance = _aimStance . _useAim . _itUse _itUseAimStance = _aimStance . _useAim . _itUse
data ItemConsumption data ItemConsumption
@@ -349,21 +327,13 @@ data ItemConsumption
{ _itMaxStack' :: Int { _itMaxStack' :: Int
, _itAmount' :: Int , _itAmount' :: Int
} }
data ItemType
= Weapon'
{ _wpSpread :: Float
, _wpRange :: Float
, _wpNumBarrels :: Int
}
| UtilityItem
| ConsumableItem
data Item data Item
= Weapon = Weapon
{ _itName :: String { _itName :: String
, _itConsumption :: ItemConsumption , _itConsumption :: ItemConsumption
, _itUse :: ItemUse , _itUse :: ItemUse
, _itFloorPict :: Item -> SPic , _itFloorPict :: Item -> SPic
, _itZoom :: ItZoom -- , _itZoom :: ItZoom
, _itEquipPict :: Creature -> Int -> SPic , _itEquipPict :: Creature -> Int -> SPic
, _itScroll :: Float -> Creature -> Item -> Item , _itScroll :: Float -> Creature -> Item -> Item
, _itIdentity :: ItemIdentity , _itIdentity :: ItemIdentity
@@ -373,7 +343,6 @@ data Item
, _itInvDisplay :: Item -> String , _itInvDisplay :: Item -> String
, _itInvColor :: Color , _itInvColor :: Color
, _itTargeting :: Maybe (World -> Maybe Point2, Int -> Item -> Creature -> World -> Picture) , _itTargeting :: Maybe (World -> Maybe Point2, Int -> Item -> Creature -> World -> Picture)
, _itWorldTrigger :: Maybe (Int -> World -> Bool)
, _itDimension :: ItemDimension , _itDimension :: ItemDimension
, _itCurseStatus :: CurseStatus , _itCurseStatus :: CurseStatus
, _itType :: ItemType , _itType :: ItemType
@@ -427,7 +396,7 @@ data Item
, _twMaxRange :: Float , _twMaxRange :: Float
, _twAccuracy :: Float , _twAccuracy :: Float
, _itUse :: ItemUse , _itUse :: ItemUse
, _itZoom :: ItZoom -- , _itZoom :: ItZoom
, _itEquipPict :: Creature -> Int -> SPic , _itEquipPict :: Creature -> Int -> SPic
, _itIdentity :: ItemIdentity , _itIdentity :: ItemIdentity
, _itID :: Maybe Int , _itID :: Maybe Int
@@ -440,7 +409,6 @@ data Item
, _itDimension :: ItemDimension , _itDimension :: ItemDimension
} }
| NoItem | NoItem
data CurseStatus = Uncursed | UndroppableIdentified | UndroppableUnidentified
data ItemDimension = ItemDimension data ItemDimension = ItemDimension
{ _itDim :: Point3 -- length width height { _itDim :: Point3 -- length width height
@@ -453,7 +421,8 @@ data ItemDimension = ItemDimension
data ReloadType = ActiveReload | PassiveReload SoundID data ReloadType = ActiveReload | PassiveReload SoundID
-- I believe this is called every frame, not sure when though -- I believe this is called every frame, not sure when though
data ItEffect = NoItEffect data ItEffect
= NoItEffect
| ItSimpleInvEffect | ItSimpleInvEffect
{_itInvEffect :: ItEffect -> Creature -> Int -> World -> World {_itInvEffect :: ItEffect -> Creature -> Int -> World -> World
-- the Int is the items inventory position -- the Int is the items inventory position
@@ -477,11 +446,6 @@ data ItEffect = NoItEffect
-- the Int is the items inventory position -- the Int is the items inventory position
,_itEffectID :: Maybe Int ,_itEffectID :: Maybe Int
} }
data ItZoom = ItZoom
{ _itZoomMax :: Float
, _itZoomMin :: Float
, _itZoomFac :: Float
}
data IntID a = IntID Int a data IntID a = IntID Int a
{- Objects without ids. {- Objects without ids.
Update themselves, perhaps with side effects. -} Update themselves, perhaps with side effects. -}
@@ -888,7 +852,6 @@ makeLenses ''Item
makeLenses ''ItemUse makeLenses ''ItemUse
makeLenses ''ItemPos makeLenses ''ItemPos
makeLenses ''ItEffect makeLenses ''ItEffect
makeLenses ''ItZoom
makeLenses ''FloorItem makeLenses ''FloorItem
makeLenses ''ItemConsumption makeLenses ''ItemConsumption
makeLenses ''AmmoType makeLenses ''AmmoType
@@ -913,8 +876,5 @@ makeLenses ''MachineType
makeLenses ''Zone makeLenses ''Zone
makeLenses ''ItemDimension makeLenses ''ItemDimension
makeLenses ''Vocalization makeLenses ''Vocalization
makeLenses ''UseDelay
makeLenses ''AimParams
makeLenses ''Universe makeLenses ''Universe
makeLenses ''LSParam makeLenses ''LSParam
makeLenses ''ItemType
+6 -5
View File
@@ -86,13 +86,11 @@ defaultGun = Weapon
, _itIdentity = Pistol , _itIdentity = Pistol
, _itConsumption = defaultAmmo , _itConsumption = defaultAmmo
, _itUse = defaultrUse , _itUse = defaultrUse
, _wpSpread = 0.02
, _wpRange = 20
, _itFloorPict = const $ noPic $ colorSH green (prismPoly , _itFloorPict = const $ noPic $ colorSH green (prismPoly
(map (addZ 3) $ rectNESW 3 3 (-3) (-3)) (map (addZ 3) $ rectNESW 3 3 (-3) (-3))
(map (addZ 0) $ rectNESW 5 3 (-5) (-7)) (map (addZ 0) $ rectNESW 5 3 (-5) (-7))
) )
, _itZoom = ItZoom 20 0.2 1 -- , _itZoom = ItZoom 20 0.2 1
, _itEquipPict = pictureWeaponOnAim , _itEquipPict = pictureWeaponOnAim
, _itScroll = \_ _ -> id , _itScroll = \_ _ -> id
, _itAttachment = NoItAttachment , _itAttachment = NoItAttachment
@@ -101,8 +99,11 @@ defaultGun = Weapon
, _itInvDisplay = basicWeaponDisplay , _itInvDisplay = basicWeaponDisplay
, _itInvColor = white , _itInvColor = white
, _itTargeting = Nothing , _itTargeting = Nothing
, _itWorldTrigger = Nothing , _itType = Weapon'
, _wpNumBarrels = 1 { _wpSpread = 0.02
, _wpRange = 20
, _wpNumBarrels = 1
}
, _itDimension = defaultItemDimension , _itDimension = defaultItemDimension
} }
defaultItemDimension :: ItemDimension defaultItemDimension :: ItemDimension
+2 -2
View File
@@ -18,7 +18,7 @@ keyToken n = defaultEquipment
, _itEquipPict = \_ _ -> (,) emptySH $ setDepth 0 $ translate (-5) (-5) $ rotate (pi/2.5) keyPic , _itEquipPict = \_ _ -> (,) emptySH $ setDepth 0 $ translate (-5) (-5) $ rotate (pi/2.5) keyPic
, _itEffect = NoItEffect , _itEffect = NoItEffect
, _itID = Nothing , _itID = Nothing
, _itZoom = defaultItZoom -- , _itZoom = defaultItZoom
, _itInvColor = yellow , _itInvColor = yellow
, _itInvDisplay = _itName , _itInvDisplay = _itName
} }
@@ -39,7 +39,7 @@ latchkey n = defaultEquipment
, _itEquipPict = \_ _ -> (,) emptySH $ setDepth 0 $ translate (-5) (-5) $ rotate (pi/2.5) latchkeyPic , _itEquipPict = \_ _ -> (,) emptySH $ setDepth 0 $ translate (-5) (-5) $ rotate (pi/2.5) latchkeyPic
, _itEffect = NoItEffect , _itEffect = NoItEffect
, _itID = Nothing , _itID = Nothing
, _itZoom = defaultItZoom -- , _itZoom = defaultItZoom
, _itInvColor = yellow , _itInvColor = yellow
, _itInvDisplay = _itName , _itInvDisplay = _itName
} }
+40
View File
@@ -54,4 +54,44 @@ data AimStance
| LeaveHolstered | LeaveHolstered
deriving deriving
(Eq,Show,Ord,Enum) (Eq,Show,Ord,Enum)
data ItZoom = ItZoom
{ _itZoomMax :: Float
, _itZoomMin :: Float
, _itZoomFac :: Float
}
data CurseStatus = Uncursed | UndroppableIdentified | UndroppableUnidentified
data AimParams = AimParams
{ _aimSpeed :: Float
, _aimRange :: Float
, _aimZoom :: ItZoom
, _aimStance :: AimStance
}
data UseDelay -- should just be Delay
= NoDelay
| FixedRate
{_rateMax :: Int
,_rateTime :: Int
}
| VariableRate
{_rateMax :: Int
,_rateTime :: Int
,_rateMaxMax :: Int
,_rateMinMax :: Int
}
| WarmUpNoDelay
{_warmTime :: Int
,_warmMax :: Int
}
data ItemType
= Weapon'
{ _wpSpread :: Float
, _wpRange :: Float
, _wpNumBarrels :: Int
}
| UtilityItem
| ConsumableItem
makeLenses ''HammerType makeLenses ''HammerType
makeLenses ''ItZoom
makeLenses ''AimParams
makeLenses ''UseDelay
makeLenses ''ItemType
+3 -9
View File
@@ -10,7 +10,7 @@ import Dodge.Particle.TeslaArc
import Dodge.SoundLogic.LoadSound import Dodge.SoundLogic.LoadSound
import Dodge.WorldEvent import Dodge.WorldEvent
import Dodge.WorldEvent.Damage import Dodge.WorldEvent.Damage
import Dodge.Default --import Dodge.Default
import Dodge.Item.Weapon.InventoryDisplay import Dodge.Item.Weapon.InventoryDisplay
import Dodge.Item.Weapon.TriggerType import Dodge.Item.Weapon.TriggerType
import Dodge.Item.Weapon.AmmoParams import Dodge.Item.Weapon.AmmoParams
@@ -50,11 +50,9 @@ teslaGun = defaultGun
] ]
& useAim . aimSpeed .~ 0.4 & useAim . aimSpeed .~ 0.4
& useAim . aimStance .~ TwoHandFlat & useAim . aimStance .~ TwoHandFlat
, _wpSpread = 0.001
, _wpRange = 20
, _itFloorPict = teslaGunPic , _itFloorPict = teslaGunPic
, _itZoom = defaultItZoom -- , _itZoom = defaultItZoom
} } & itType . wpSpread .~ 0.001
teslaGunPic :: Item -> SPic teslaGunPic :: Item -> SPic
teslaGunPic _ = noPic $ colorSH blue $ teslaGunPic _ = noPic $ colorSH blue $
upperPrismPoly 5 (rectNESW xb y xa (-y)) upperPrismPoly 5 (rectNESW xb y xa (-y))
@@ -81,8 +79,6 @@ lasGun = defaultAutoGun
& useAim . aimSpeed .~ 0.4 & useAim . aimSpeed .~ 0.4
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
, _wpSpread = 0.001
, _wpRange = 20
, _itFloorPict = lasGunPic , _itFloorPict = lasGunPic
, _itAttachment = ItCharMode $ Seq.fromList "/VZ" , _itAttachment = ItCharMode $ Seq.fromList "/VZ"
, _itScroll = scrollCharMode , _itScroll = scrollCharMode
@@ -116,8 +112,6 @@ tractorGun = defaultAutoGun
& useAim . aimSpeed .~ 0.4 & useAim . aimSpeed .~ 0.4
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
, _wpSpread = 0.00001
, _wpRange = 20
, _itFloorPict = tractorGunSPic , _itFloorPict = tractorGunSPic
} }
-- TODO own picture for tractor gun -- TODO own picture for tractor gun
+2 -2
View File
@@ -8,7 +8,7 @@ import Dodge.Item.Weapon.Targeting
import Dodge.Item.Weapon.BulletGuns import Dodge.Item.Weapon.BulletGuns
import Dodge.Item.Weapon.TriggerType import Dodge.Item.Weapon.TriggerType
import Dodge.Item.Weapon.ExtraEffect import Dodge.Item.Weapon.ExtraEffect
import Dodge.Default --import Dodge.Default
import Dodge.Particle.Bullet.Spawn import Dodge.Particle.Bullet.Spawn
import Dodge.Particle.Bullet.HitEffect import Dodge.Particle.Bullet.HitEffect
import Dodge.WorldEvent.HitEffect import Dodge.WorldEvent.HitEffect
@@ -41,7 +41,7 @@ bezierGun = defaultGun
, _itAttachment = NoItAttachment , _itAttachment = NoItAttachment
, _itScroll = \_ _ -> removeItTarget , _itScroll = \_ _ -> removeItTarget
, _itEffect = rbSetTarget , _itEffect = rbSetTarget
, _itZoom = defaultItZoom -- , _itZoom = defaultItZoom
, _itConsumption = defaultAmmo , _itConsumption = defaultAmmo
{ _wpMaxAmmo = 50 { _wpMaxAmmo = 50
} }
+1 -2
View File
@@ -119,10 +119,9 @@ boosterGun = defaultGun
, _wpReloadTime = 20 , _wpReloadTime = 20
} }
, _itUse = luseInstantNoH $ boostSelfL 10 , _itUse = luseInstantNoH $ boostSelfL 10
, _wpSpread = 0.05
, _wpRange = 20
, _itFloorPict = \_ -> (,) emptySH $ onLayer FlItLayer $ polygon $ map toV2 [(-2,-2),(-2,2),(2,2),(2,0),(0,0),(0,-2)] , _itFloorPict = \_ -> (,) emptySH $ onLayer FlItLayer $ polygon $ map toV2 [(-2,-2),(-2,2),(2,2),(2,0),(0,0),(0,-2)]
, _itEffect = resetAttachmentID , _itEffect = resetAttachmentID
, _itType = UtilityItem
} }
resetAttachmentID :: ItEffect resetAttachmentID :: ItEffect
resetAttachmentID = ItInvEffect f 0 resetAttachmentID = ItInvEffect f 0
+11 -25
View File
@@ -61,15 +61,13 @@ autoGun = defaultAutoGun
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
& useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5} & useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5}
, _wpSpread = autogunSpread
, _wpRange = 20
, _itFloorPict = autoGunPic , _itFloorPict = autoGunPic
, _itZoom = defaultItZoom -- , _itZoom = defaultItZoom
, _itEquipPict = pictureWeaponOnAim , _itEquipPict = pictureWeaponOnAim
, _itAttachment = ItCharMode $ Seq.fromList "MS" , _itAttachment = ItCharMode $ Seq.fromList "MS"
, _itScroll = scrollCharMode , _itScroll = scrollCharMode
, _itInvDisplay = basicWeaponDisplay , _itInvDisplay = basicWeaponDisplay
} } & itType . wpSpread .~ autogunSpread
autoGunPic :: Item -> SPic autoGunPic :: Item -> SPic
autoGunPic it = noPic $ autoGunPic it = noPic $
colorSH red (prismPoly colorSH red (prismPoly
@@ -99,16 +97,13 @@ pistol = defaultGun
, randSpreadDir , randSpreadDir
, withMuzFlareI , withMuzFlareI
] ]
, _wpSpread = 0.02
, _wpRange = 20
, _itFloorPict = pistolPic , _itFloorPict = pistolPic
, _itZoom = defaultItZoom -- , _itZoom = defaultItZoom
, _itEquipPict = pictureWeaponAim pistolPic , _itEquipPict = pictureWeaponAim pistolPic
, _itID = Nothing , _itID = Nothing
, _itInvDisplay = basicWeaponDisplay , _itInvDisplay = basicWeaponDisplay
, _itInvColor = white , _itInvColor = white
, _itTargeting = Nothing , _itTargeting = Nothing
, _itWorldTrigger = Nothing
} }
pistolPic :: Item -> SPic pistolPic :: Item -> SPic
pistolPic it = noPic $ colorSH green (prismPoly pistolPic it = noPic $ colorSH green (prismPoly
@@ -146,7 +141,6 @@ hvAutoGun = defaultAutoGun
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
& useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5} & useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5}
& useDelay .~ VariableRate {_rateMax = 25, _rateMaxMax = 24, _rateMinMax = 7, _rateTime = 0} & useDelay .~ VariableRate {_rateMax = 25, _rateMaxMax = 24, _rateMinMax = 7, _rateTime = 0}
, _wpRange = 20
, _itFloorPict = hvAutoGunPic , _itFloorPict = hvAutoGunPic
} }
hvAutoGunPic :: Item -> SPic hvAutoGunPic :: Item -> SPic
@@ -180,12 +174,11 @@ ltAutoGun = defaultAutoGun
, withSidePushI 50 , withSidePushI 50
, modClock 2 withMuzFlareI , modClock 2 withMuzFlareI
] ]
, _wpSpread = 0.5
, _wpRange = 20
, _itFloorPict = ltAutoGunPic , _itFloorPict = ltAutoGunPic
, _itZoom = defaultItZoom -- , _itZoom = defaultItZoom
} }
& itDimension . muzzleLength .~ 10 & itDimension . muzzleLength .~ 10
& itType . wpSpread .~ 0.5
ltAutoGunPic :: Item -> SPic ltAutoGunPic :: Item -> SPic
ltAutoGunPic it = ltAutoGunPic it =
( colorSH green $ prismPoly ( colorSH green $ prismPoly
@@ -243,7 +236,6 @@ miniGun = defaultAutoGun
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
& useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5} & useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5}
, _wpRange = 20
, _itFloorPict = miniGunPictItem , _itFloorPict = miniGunPictItem
, _itEquipPict = pictureWeaponAim miniGunPictItem , _itEquipPict = pictureWeaponAim miniGunPictItem
} & itDimension . muzzleLength .~ 15 } & itDimension . muzzleLength .~ 15
@@ -306,11 +298,9 @@ spreadGun = defaultGun
, withMuzFlareI , withMuzFlareI
, spreadNumI , spreadNumI
] ]
, _wpSpread = spreadGunSpread
, _wpRange = 20
, _itFloorPict = spreadGunPic , _itFloorPict = spreadGunPic
, _wpNumBarrels = 50 } & itType . wpSpread .~ spreadGunSpread
} & itType . wpNumBarrels .~ 50
spreadGunPic :: Item -> SPic spreadGunPic :: Item -> SPic
spreadGunPic it = spreadGunPic it =
( colorSH green (upperPrismPoly 5 $ map toV2[(-3,0),(3,6),(3,-6)]) ( colorSH green (upperPrismPoly 5 $ map toV2[(-3,0),(3,6),(3,-6)])
@@ -343,12 +333,9 @@ multGun = defaultGun
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
& useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5} & useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5}
, _wpSpread = spreadGunSpread
, _wpRange = 20
, _itFloorPict = multGunSPic , _itFloorPict = multGunSPic
, _itZoom = defaultItZoom -- , _itZoom = defaultItZoom
, _wpNumBarrels = 5 } & itType . wpNumBarrels .~ 5
}
multGunSPic :: Item -> SPic multGunSPic :: Item -> SPic
multGunSPic it = multGunSPic it =
( colorSH red ( ( colorSH red (
@@ -389,13 +376,12 @@ longGun = defaultGun
& 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}
, _wpRange = 200
, _itFloorPict = longGunSPic , _itFloorPict = longGunSPic
, _itZoom = defaultItZoom -- , _itZoom = defaultItZoom
, _itScroll = zoomLongGun , _itScroll = zoomLongGun
, _itAttachment = ItScope (V2 0 0) 0 1 False , _itAttachment = ItScope (V2 0 0) 0 1 False
, _itEffect = itemLaserScopeEffect , _itEffect = itemLaserScopeEffect
} } & itType . wpRange .~ 200
longGunSPic :: Item -> SPic longGunSPic :: Item -> SPic
longGunSPic _ = longGunSPic _ =
( colorSH orange $ upperPrismPoly 5 $ rectWH 12 2 ( colorSH orange $ upperPrismPoly 5 $ rectWH 12 2
-2
View File
@@ -37,8 +37,6 @@ lasDrones = defaultGun
& useAim . aimSpeed .~ 0.2 & useAim . aimSpeed .~ 0.2
& useAim . aimRange .~ 0.5 & useAim . aimRange .~ 0.5
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
, _wpSpread = 0.02
, _wpRange = 20
, _itFloorPict = lasDronesPic , _itFloorPict = lasDronesPic
, _itEffect = NoItEffect , _itEffect = NoItEffect
} }
+1 -1
View File
@@ -37,7 +37,7 @@ grenade = Throwable
[ useTimeCheck [ useTimeCheck
] ]
& useAim . aimZoom .~ defaultItZoom {_itZoomMax = f fuseTime, _itZoomMin = f fuseTime} & useAim . aimZoom .~ defaultItZoom {_itZoomMax = f fuseTime, _itZoomMin = f fuseTime}
, _itZoom = defaultItZoom -- , _itZoom = defaultItZoom
, _itEquipPict = pictureWeaponOnAim' $ \_ -> grenadePic fuseTime , _itEquipPict = pictureWeaponOnAim' $ \_ -> grenadePic fuseTime
, _itID = Nothing , _itID = Nothing
, _itAttachment = ItFuse fuseTime , _itAttachment = ItFuse fuseTime
-4
View File
@@ -57,8 +57,6 @@ launcher = defaultGun
& useAim . aimSpeed .~ 0.2 & useAim . aimSpeed .~ 0.2
& useAim . aimRange .~ 0.5 & useAim . aimRange .~ 0.5
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
, _wpSpread = 0.02
, _wpRange = 20
, _itFloorPict = launcherPic , _itFloorPict = launcherPic
, _itEffect = NoItEffect , _itEffect = NoItEffect
} }
@@ -258,8 +256,6 @@ remoteLauncher = defaultGun
& useAim . aimSpeed .~ 0.2 & useAim . aimSpeed .~ 0.2
& useAim . aimRange .~ 0.5 & useAim . aimRange .~ 0.5
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
, _wpSpread = 0.02
, _wpRange = 20
, _itFloorPict = launcherPic , _itFloorPict = launcherPic
, _itAttachment = ItScope (V2 0 0) 0 1 True , _itAttachment = ItScope (V2 0 0) 0 1 True
} }
+4 -8
View File
@@ -3,7 +3,6 @@ import Dodge.Data
import Dodge.Picture.Layer import Dodge.Picture.Layer
import Dodge.Default import Dodge.Default
import Dodge.Item.Draw import Dodge.Item.Draw
import Dodge.Item.Weapon.BulletGuns
import Dodge.Item.Weapon.TriggerType import Dodge.Item.Weapon.TriggerType
import Dodge.Item.Weapon.ExtraEffect import Dodge.Item.Weapon.ExtraEffect
import Dodge.Item.Weapon.UseEffect import Dodge.Item.Weapon.UseEffect
@@ -32,10 +31,8 @@ radar = defaultGun
] ]
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1} & useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1}
, _wpSpread = autogunSpread
, _wpRange = 20
, _itFloorPict = \_ -> (,) emptySH $ onLayer FlItLayer $ color blue $ polygon $ rectNESW 5 5 (-5) (-5) , _itFloorPict = \_ -> (,) emptySH $ onLayer FlItLayer $ color blue $ polygon $ rectNESW 5 5 (-5) (-5)
, _itZoom = defaultItZoom { _itZoomMax = 1} -- , _itZoom = defaultItZoom { _itZoomMax = 1}
, _itEquipPict = pictureWeaponOnAim' $ \_ -> (,) emptySH $ color blue $ polygon $ rectNESW 5 5 (-5) (-5) , _itEquipPict = pictureWeaponOnAim' $ \_ -> (,) emptySH $ color blue $ polygon $ rectNESW 5 5 (-5) (-5)
} }
{- | {- |
@@ -54,9 +51,8 @@ sonar = defaultGun
] ]
& useAim . aimRange .~ 1 & useAim . aimRange .~ 1
& useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1} & useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1}
, _wpRange = 20
, _itFloorPict = \_ -> (,) emptySH $ onLayer FlItLayer $ color blue $ polygon $ rectNESW 5 5 (-5) (-5) , _itFloorPict = \_ -> (,) emptySH $ onLayer FlItLayer $ color blue $ polygon $ rectNESW 5 5 (-5) (-5)
, _itZoom = defaultItZoom {_itZoomMax = 1} -- , _itZoom = defaultItZoom {_itZoomMax = 1}
, _itEquipPict = pictureWeaponOnAim' $ \_ -> (,) emptySH $ color blue $ polygon $ rectNESW 5 5 (-5) (-5) , _itEquipPict = pictureWeaponOnAim' $ \_ -> (,) emptySH $ color blue $ polygon $ rectNESW 5 5 (-5) (-5)
} }
{- | {- |
@@ -71,7 +67,7 @@ autoSonar = defaultEquipment
, _itEquipPict = \_ _ -> (,) emptySH blank , _itEquipPict = \_ _ -> (,) emptySH blank
, _itEffect = autoSonarEffect , _itEffect = autoSonarEffect
, _itID = Nothing , _itID = Nothing
, _itZoom = defaultItZoom {_itZoomMax = 1} -- , _itZoom = defaultItZoom {_itZoomMax = 1}
} }
{- | {- |
Automatically sends out pulses that display walls. -} Automatically sends out pulses that display walls. -}
@@ -85,5 +81,5 @@ autoRadar = defaultEquipment
, _itEquipPict = \_ _ -> (,) emptySH blank , _itEquipPict = \_ _ -> (,) emptySH blank
, _itEffect = autoRadarEffect , _itEffect = autoRadarEffect
, _itID = Nothing , _itID = Nothing
, _itZoom = defaultItZoom {_itZoomMax = 1} -- , _itZoom = defaultItZoom {_itZoomMax = 1}
} }
+8 -8
View File
@@ -48,11 +48,13 @@ poisonSprayer = defaultAutoGun
& useAim . aimSpeed .~ 0.2 & useAim . aimSpeed .~ 0.2
& useAim . aimRange .~ 0 & useAim . aimRange .~ 0
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
, _wpRange = 8 , _itType = Weapon'
{ _wpRange = 8
, _wpSpread = 0.1
, _wpNumBarrels = 3
}
, _itFloorPict = flamerPic , _itFloorPict = flamerPic
, _itZoom = defaultItZoom -- , _itZoom = defaultItZoom
, _wpSpread = 0.1
, _wpNumBarrels = 3
} }
flamer :: Item flamer :: Item
flamer = defaultAutoGun flamer = defaultAutoGun
@@ -73,12 +75,10 @@ flamer = defaultAutoGun
& useAim . aimSpeed .~ 0.5 & useAim . aimSpeed .~ 0.5
& useAim . aimZoom .~ defaultItZoom {_itZoomMax = 5, _itZoomMin = 1.5} & useAim . aimZoom .~ defaultItZoom {_itZoomMax = 5, _itZoomMin = 1.5}
& useAim . aimStance .~ TwoHandTwist & useAim . aimStance .~ TwoHandTwist
, _wpSpread = 0
, _wpRange = 8
, _itFloorPict = flamerPic , _itFloorPict = flamerPic
, _itZoom = defaultItZoom -- , _itZoom = defaultItZoom
, _itAttachment = NoItAttachment , _itAttachment = NoItAttachment
} } & itType . wpRange .~ 8
flamerPic :: Item -> SPic flamerPic :: Item -> SPic
flamerPic it = flamerPic it =
( colorSH yellow $ ( colorSH yellow $
+6 -6
View File
@@ -320,7 +320,7 @@ withMuzFlareI f it cr w = makeTlsTimeRadColPos 3 100 (V3 1 1 0.5) flashPos
randSpreadDir :: ChainEffect randSpreadDir :: ChainEffect
randSpreadDir f it cr w = f it (cr & crDir +~ a) $ set randGen g w randSpreadDir f it cr w = f it (cr & crDir +~ a) $ set randGen g w
where where
acc = _wpSpread it acc = _wpSpread $ _itType it
(a, g) = randomR (-acc,acc) $ _randGen w (a, g) = randomR (-acc,acc) $ _randGen w
{- | Applies the effect to a randomly rotated creature. -} {- | Applies the effect to a randomly rotated creature. -}
withRandomDirI withRandomDirI
@@ -391,8 +391,8 @@ spreadNumI eff item cr w = foldr f w dirs
[-spread,-spread+(2*spread/fromIntegral numBul)..spread] [-spread,-spread+(2*spread/fromIntegral numBul)..spread]
(randomRs (0,spread/fromIntegral numBul) (_randGen w)) (randomRs (0,spread/fromIntegral numBul) (_randGen w))
f dir = eff item (cr & crDir +~ dir) f dir = eff item (cr & crDir +~ dir)
spread = _wpSpread item spread = _wpSpread $ _itType item
numBul = _wpNumBarrels item numBul = _wpNumBarrels $ _itType item
numI :: ChainEffect numI :: ChainEffect
numI eff item cr w = foldr f w poss numI eff item cr w = foldr f w poss
where where
@@ -401,7 +401,7 @@ numI eff item cr w = foldr f w poss
poss :: [V2 Float] poss :: [V2 Float]
poss = map (rotateV (_crDir cr) . V2 0 . (*5) . (+ cp) . fromIntegral) [0 .. numBul - 1] poss = map (rotateV (_crDir cr) . V2 0 . (*5) . (+ cp) . fromIntegral) [0 .. numBul - 1]
f pos = eff item (cr & crPos %~ (+.+ pos)) f pos = eff item (cr & crPos %~ (+.+ pos))
numBul = _wpNumBarrels item numBul = _wpNumBarrels $ _itType item
{- | Uses '_wpSpread' as a parameter for the current offset angle. -} {- | Uses '_wpSpread' as a parameter for the current offset angle. -}
randWalkAngle randWalkAngle
:: Float -- ^ Max offset angle :: Float -- ^ Max offset angle
@@ -412,10 +412,10 @@ randWalkAngle
-> World -> World
randWalkAngle ma aspeed f cr w = w randWalkAngle ma aspeed f cr w = w
& f (cr & crDir +~ a) & f (cr & crDir +~ a)
& creatures . ix cid . crInv . ix i . wpSpread .~ newa & creatures . ix cid . crInv . ix i . itType . wpSpread .~ newa
where where
cid = _crID cr cid = _crID cr
a = _wpSpread $ _crInv (_creatures w IM.! cid) IM.! i a = _wpSpread $ _itType $ _crInv (_creatures w IM.! cid) IM.! i
(walka, _) = randomR (-aspeed,aspeed) (_randGen w) (walka, _) = randomR (-aspeed,aspeed) (_randGen w)
newa = min ma $ max (negate ma) (a + walka) newa = min ma $ max (negate ma) (a + walka)
i = _crInvSel $ _creatures w IM.! cid i = _crInvSel $ _creatures w IM.! cid
+2 -6
View File
@@ -63,8 +63,7 @@ shrinkGun = defaultGun
} }
, _itUse = defaultlUse {_lUse = hammerCheckL useShrinkGun} , _itUse = defaultlUse {_lUse = hammerCheckL useShrinkGun}
& useHammer .~ upHammer & useHammer .~ upHammer
, _wpSpread = 0.05 , _itType = UtilityItem
, _wpRange = 20
, _itFloorPict = shrinkGunPic , _itFloorPict = shrinkGunPic
, _itAttachment = ItBool True , _itAttachment = ItBool True
} }
@@ -96,8 +95,7 @@ blinkGun = defaultGun
, _itUse = defaultlUse , _itUse = defaultlUse
{_lUse = hammerCheckL $ shootL aSelfL {_lUse = hammerCheckL $ shootL aSelfL
} & useHammer .~ upHammer } & useHammer .~ upHammer
, _wpSpread = 0.05 , _itType = UtilityItem
, _wpRange = 20
, _itFloorPict = const . noPic . colorSH chartreuse $ upperPrismPoly 2 $ square 2 , _itFloorPict = const . noPic . colorSH chartreuse $ upperPrismPoly 2 $ square 2
} }
@@ -129,8 +127,6 @@ forceFieldGun = defaultGun
, _wpReloadState = 0 , _wpReloadState = 0
} }
, _itUse = undefined , _itUse = undefined
, _wpSpread = 0.02
, _wpRange = 20
, _itFloorPict = \_ -> (,) emptySH $ onLayer FlItLayer $ polygon $ map toV2 [(-4,-4),(-4,4),(4,4),(4,0),(0,0),(0,-4)] , _itFloorPict = \_ -> (,) emptySH $ onLayer FlItLayer $ polygon $ map toV2 [(-4,-4),(-4,4),(4,4),(4,0),(0,0),(0,-4)]
} }
-- grapGun = defaultGun -- grapGun = defaultGun