Files
loop/src/Dodge/Data/Muzzle.hs
T
2025-08-10 08:09:03 +01:00

70 lines
1.6 KiB
Haskell

{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Data.Muzzle where
import Dodge.Data.GenFloat
import Linear
import Control.Lens
data Muzzle = Muzzle
{ _mzPos :: V2 Float
, _mzRot :: Float
, _mzInaccuracy :: Float
, _mzAmmoSlot :: AmmoExtractPosition
, _mzFlareType :: FlareType
, _mzEffect :: MuzzleEffect
-- , _mzAmmoPerShot :: AmmoPerShot
, _mzRandomOffset :: Float
}
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data AmmoExtractPosition
= MagBelow {_magBelowID :: Int, _aps :: AmmoPerShot}
| CapacitorBelow {_aps :: AmmoPerShot}
| CapacitorSelf {_aps :: AmmoPerShot}
| NoAmmoRequired
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
| MuzzlePulseLaser
| MuzzlePulseBall
| MuzzleTesla
| MuzzleTractor
| MuzzleRLauncher
| MuzzleGLauncher
| MuzzleNozzle
{ _nzPressure :: GenFloat
, _nzMaxWalkAngle :: 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)
makeLenses ''Muzzle
makeLenses ''MuzzleEffect
makeLenses ''AmmoPerShot
makeLenses ''AmmoExtractPosition