{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# 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, ) where import Geometry.Data import Control.Lens import Data.Aeson import Data.Aeson.TH import qualified Data.Sequence as Seq import Dodge.Data.Hammer import Dodge.Data.Item.HeldUse import Dodge.Data.Item.Use.Consumption import Dodge.Data.Item.Use.Equipment import Dodge.Data.Item.HeldDelay import Dodge.Data.Item.Targeting data ItemUse = HeldUse { _heldUse :: Huse , _heldDelay :: UseDelay , _heldMods :: HeldMod , _heldHammer :: HammerPosition , _heldAim :: AimParams , _heldConsumption :: HeldConsumption , _heldParams :: HeldParams -- , _useTargeting :: Maybe TargetType } | LeftUse { _leftUse :: Luse , _leftDelay :: UseDelay , _leftHammer :: HammerPosition , _equipEffect :: EquipEffect , _leftConsumption :: LeftConsumption } | ConsumeUse { _cUse :: Cuse , _useAmount :: ItAmount } | EquipUse { _equipEffect :: EquipEffect , _equipTargeting :: Maybe TargetType } | CraftUse {_useAmount :: ItAmount} | AttachUse {_attachParams :: AttachParams} --deriving (Eq, Show, Read) --Generic, Flat) data HeldParams = DefaultHeldParams | BulletShooterParams { _muzVel :: Float , _rifling :: Float , _recoil :: Float , _torqueAfter :: Float , _randomOffset :: Float } data AttachParams = ScrollAttachParams {_scrollAttachParams :: ScrollAttachParams} | AmmoAttachParams {_ammoLoadStatus :: InternalAmmo ,_ammoParams :: AmmoParams } | TargetAttachParams data AmmoParams = BulletParams {_ampBullet :: Bullet} data ScrollAttachParams = ZoomScrollParams { -- | a camera offset _opticPos :: Point2 -- this should be relative to the camera rotation -- then when the camera rotates when firing etc, -- this doesn't need to be changed , _opticZoom :: Float , _opticDefaultZoom :: Float } | CharScrollParams { _scrollChar :: Seq.Seq Char} data ItemUse' = ItemHeld HeldUse' | ItemEquip EquipUse' | ItemConsume ConsumeUse' | ItemCraft Int data HeldUse' = HeldUse' data EquipUse' = EquipUse' data ConsumeUse' = ConsumeUse' 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 Muzzle = Muzzle { _mzPos :: V2 Float , _mzRot :: Float , _mzInaccuracy :: Float } data AimStance = TwoHandUnder | TwoHandOver | TwoHandFlat | OneHand -- | LeaveHolstered deriving (Eq) --deriving (Eq, Show, Ord, Enum, 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 ''ScrollAttachParams makeLenses ''AmmoParams deriveJSON defaultOptions ''AmmoParams deriveJSON defaultOptions ''HeldParams deriveJSON defaultOptions ''Muzzle deriveJSON defaultOptions ''AimStance deriveJSON defaultOptions ''ScrollAttachParams deriveJSON defaultOptions ''AttachParams deriveJSON defaultOptions ''ItZoom deriveJSON defaultOptions ''AimParams deriveJSON defaultOptions ''ItemUse