Files
loop/src/Dodge/Data/Item/Use.hs
T
2025-06-04 09:50:18 +01:00

183 lines
4.8 KiB
Haskell

{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Data.Item.Use (
module Dodge.Data.Item.Use,
module Dodge.Data.Item.Use.Equipment,
module Dodge.Data.Item.HeldUse,
module Dodge.Data.Item.HeldDelay,
module Dodge.Data.Item.Use.Consumption,
module Dodge.Data.Item.Targeting,
module Dodge.Data.GenFloat,
module Dodge.Data.Item.Scope,
module Dodge.Data.Item.BulletMod,
) where
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import qualified Data.Set as S
import Dodge.Data.GenFloat
import Dodge.Data.Item.BulletMod
import Dodge.Data.Item.HeldDelay
import Dodge.Data.Item.HeldUse
import Dodge.Data.Item.Scope
import Dodge.Data.Item.Targeting
import Dodge.Data.Item.Use.Consumption
import Dodge.Data.Item.Use.Equipment
import Geometry.Data
data ItemUse
= UseHeld
{ _heldDelay :: UseDelay
, _heldMuzzles :: [Muzzle]
, _heldParams :: HeldParams
, _heldFrame :: Int
, _heldUseEffect :: HeldUseEffect
}
| UseEquip {_uequipEffect :: EquipEffect}
| UseAttach {_uaParams :: AttachParams}
| UseInt {_uInt :: Int}
| UseNothing
| UseValue {_uValue :: Either Int String}
| UseScope {_uScope :: Scope}
| UseBulletMod {_ubMod :: BulletMod}
| UseToggle {_useToggle :: Bool}
| UseMapper
{ _useMapperLines :: S.Set (Point2, Point2)
, _useMapperPoints :: S.Set Point2
}
deriving (Eq, Show, Read)
data HeldUseEffect
= NoHeldUseEffect
| RandomiseMuzzleFrames Int
| SwitchAlteRifle
deriving (Eq, Show, Read)
data UseFocus
= UseFromRoot
| UseFromLocation
deriving (Eq, Show, Read)
data UseCondition
= UseableWhenAimed
| UseableAnytime
deriving (Eq, Show, Read)
data AttachParams
= APProjectiles {_apProjectiles :: [Int]}
| APInt {_apInt :: Int}
| APNothing
deriving (Eq, Show, Read)
data HeldParams
= DefaultHeldParams
| GasSprayParams
{ _gasCreation :: GasCreate
, _torqueAfter :: Float
, _randomOffset :: Float
, _sidePush :: Float
, _weaponInvLock :: Int
, _weaponRepeat :: [Int]
}
| BeamShooterParams
| BulletShooterParams
{ _torqueAfter :: Float
, _randomOffset :: Float
, _sidePush :: Float
, _weaponInvLock :: Int
, _weaponRepeat :: [Int]
}
deriving (Eq, Show, Read) --Generic, Flat)
data AmmoParams
= BulletParams {_ampBullet :: Bullet}
| ProjectileParams {_ampPayload :: Payload}
| GasParams {_ampCreateGas :: GasFuel}
| NoAmmoParams
deriving (Eq, Show, Read) --Generic, Flat)
data FlareType
= NoFlare
| BasicFlare
| NoLightFlare
| MiniGunFlare
| HeavySmokeFlare
| LasGunFlare
| TeslaGunFlare
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data MuzzleEffect
= MuzzleShootBullet
| MuzzleLaser
| MuzzleTesla
| MuzzleTractor
| MuzzleRLauncher
| MuzzleGLauncher
| MuzzleNozzle
{ _nzPressure :: GenFloat
, _nzMaxWalkAngle :: Float
, _nzCurrentWalkAngle :: Float
, _nzWalkSpeed :: Float
}
| MuzzleShatter
| MuzzleDetector
| MuzzleBlink
| MuzzleUnsafeBlink
| MuzzleRewind
| MuzzleStopper
| MuzzleScroller
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data AmmoPerShot
= UseExactly {_useExactly :: Int}
| UseUpTo {_useUpTo :: Int}
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data Muzzle = Muzzle
{ _mzPos :: V2 Float
, _mzRot :: Float
, _mzInaccuracy :: Float
, _mzAmmoSlot :: Int
, _mzFlareType :: FlareType
, _mzEffect :: MuzzleEffect
, _mzAmmoPerShot :: AmmoPerShot
, _mzFrame :: Int
-- , _mzChargeRequirement :: Maybe Int
-- , _mzRecoil :: Float
-- , _mzTorque :: Float
-- , _mzSidePush :: Float
-- , _mzRandomOffset :: Float
-- , _mzVel :: Float
-- , _mzRifling :: Float
-- , _mzAmmoSlot :: Either Int
-- , _mzAmmoPerShot :: Int
}
deriving (Eq, Ord, Show, Read) --Generic, Flat)
makeLenses ''ItemUse
--makeLenses ''AimParams
makeLenses ''Muzzle
makeLenses ''HeldParams
makeLenses ''AttachParams
makeLenses ''AmmoParams
makeLenses ''MuzzleEffect
makeLenses ''AmmoPerShot
makeLenses ''UseCondition
makeLenses ''UseFocus
makeLenses ''HeldUseEffect
deriveJSON defaultOptions ''HeldUseEffect
deriveJSON defaultOptions ''UseFocus
deriveJSON defaultOptions ''UseCondition
deriveJSON defaultOptions ''MuzzleEffect
deriveJSON defaultOptions ''FlareType
deriveJSON defaultOptions ''AmmoParams
deriveJSON defaultOptions ''HeldParams
deriveJSON defaultOptions ''AmmoPerShot
deriveJSON defaultOptions ''Muzzle
deriveJSON defaultOptions ''AttachParams
--deriveJSON defaultOptions ''AimParams
deriveJSON defaultOptions ''ItemUse