Files
loop/src/Dodge/Data/Item/Use.hs
T

232 lines
6.2 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.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