183 lines
4.8 KiB
Haskell
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
|