{-# 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.Hammer, module Dodge.Data.Item.Targeting, module Dodge.Data.GenFloat, module Dodge.Data.Item.Scope, module Dodge.Data.Item.BulletMod ) where import Dodge.Data.Item.BulletMod import Dodge.Data.Item.Scope import Control.Lens import Data.Aeson import Data.Aeson.TH import Dodge.Data.GenFloat import Dodge.Data.Hammer import Dodge.Data.Item.HeldDelay import Dodge.Data.Item.HeldUse import Dodge.Data.Item.Targeting import Dodge.Data.Item.Use.Consumption import Dodge.Data.Item.Use.Equipment import Geometry.Data import Sound.Data data ItemUse = UseHeld { _heldDelay :: UseDelay , _heldHammer :: HammerPosition , _heldAim :: AimParams , _heldParams :: HeldParams , _heldTriggerType :: TriggerType , _heldFrame :: Int , _heldUseEffect :: HeldUseEffect } | UseEquip { _uequipEffect :: EquipEffect } | UseAttach {_uaParams :: AttachParams} | UseHammer {_heldHammer :: HammerPosition} | UseNothing | UseScope { _uScope :: Scope } | UseBulletMod { _ubMod :: BulletMod } 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 TriggerType = AutoTrigger | HammerTrigger deriving (Eq, Show, Read) data AttachParams = APLinkProjectile {_apLinkedProjectile :: Maybe Int} | APProjectiles {_apProjectiles :: [Int]} | APInt {_apInt :: Int} | APNothing deriving (Eq, Show, Read) data HeldParams = DefaultHeldParams | GasSprayParams { _gasCreation :: GasCreate , _recoil :: Float , _torqueAfter :: Float , _randomOffset :: Float , _sidePush :: Float , _bulGunSound :: Maybe (SoundID, Int) -- if the int is 0, play sound on new channel -- if >0, continue playing sound for -- given time , _weaponInvLock :: Int , _weaponRepeat :: [Int] } | BeamShooterParams { _bulGunSound :: Maybe (SoundID, Int) -- if the int is 0, play sound on new channel -- TODO remove duplicate } | BulletShooterParams { _muzVel :: GenFloat , _rifling :: GenFloat , _recoil :: Float , _torqueAfter :: Float , _randomOffset :: Float , _sidePush :: Float , _bulGunSound :: Maybe (SoundID, Int) -- if the int is 0, play sound on new channel -- if >0, continue playing sound for -- given time , _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 AimParams = AimParams { _aimWeight :: Int , _aimTurnSpeed :: Float , _aimRange :: Float , _aimZoom :: ItZoom , _aimStance :: AimStance , _aimHandlePos :: V2 Float , _aimMuzzles :: [Muzzle] } deriving (Eq, Ord, 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) data AimStance = TwoHandUnder | TwoHandOver | TwoHandFlat | OneHand deriving (Eq, Ord, Show, Read) --Generic, Flat) data ItZoom = ItZoom { _izMax :: Float , _izMin :: Float , _izFac :: Float } deriving (Eq, Ord, Show, Read) --Generic, Flat) makeLenses ''ItemUse makeLenses ''AimParams makeLenses ''ItZoom 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 ''TriggerType deriveJSON defaultOptions ''AmmoParams deriveJSON defaultOptions ''HeldParams deriveJSON defaultOptions ''AmmoPerShot deriveJSON defaultOptions ''Muzzle deriveJSON defaultOptions ''AimStance --deriveJSON defaultOptions ''ScrollAttachParams deriveJSON defaultOptions ''AttachParams deriveJSON defaultOptions ''ItZoom deriveJSON defaultOptions ''AimParams deriveJSON defaultOptions ''ItemUse