{-# 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