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

223 lines
5.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
--import Sound.Data
data ItemUse
= UseHeld
{ _heldDelay :: UseDelay
, _heldAim :: AimParams
, _heldParams :: HeldParams
, _heldTriggerType :: TriggerType
, _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 TriggerType = AutoTrigger | HammerTrigger
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
{ _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
-- , _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 ''AttachParams
deriveJSON defaultOptions ''ItZoom
deriveJSON defaultOptions ''AimParams
deriveJSON defaultOptions ''ItemUse