153 lines
3.9 KiB
Haskell
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
|