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

153 lines
3.9 KiB
Haskell

{-# 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