Work on cleaning up item effects/attachments etc

This commit is contained in:
2022-07-27 16:39:58 +01:00
parent 8d17ce66e9
commit b52adddd5d
39 changed files with 696 additions and 844 deletions
+1 -1
View File
@@ -71,7 +71,7 @@ data CWorld = CWorld
, _creatures :: IM.IntMap Creature
, _crZoning :: IM.IntMap (IM.IntMap IS.IntSet)
, _creatureGroups :: IM.IntMap CrGroupParams
, _itemPositions :: IM.IntMap ItemPos
, _itemLocations :: IM.IntMap ItemLocation
, _clouds :: [Cloud]
, _clZoning :: IM.IntMap (IM.IntMap [Cloud])
, _gusts :: IM.IntMap Gust
+3 -4
View File
@@ -9,7 +9,7 @@ module Dodge.Data.Item (
module Dodge.Data.Item.Params,
module Dodge.Data.Item.Use,
module Dodge.Data.Item.CurseStatus,
module Dodge.Data.Item.Attachment,
module Dodge.Data.Item.Scope,
module Dodge.Data.Item.Combine,
module Dodge.Data.Item.Targeting,
) where
@@ -20,7 +20,7 @@ import Data.Aeson
import Data.Aeson.TH
import Dodge.Data.Item.Combine
import Dodge.Data.Item.Effect
import Dodge.Data.Item.Attachment
import Dodge.Data.Item.Scope
import Dodge.Data.Item.CurseStatus
import Dodge.Data.Item.Misc
import Dodge.Data.Item.Params
@@ -31,9 +31,8 @@ import Dodge.Data.Item.Targeting
data Item = Item
{ _itUse :: ItemUse
, _itType :: ItemType
, _itAttachment :: ItAttachment
, _itID :: Maybe Int
, _itPos :: ItemPos
, _itLocation :: ItemLocation
, _itIsHeld :: Bool
, _itEffect :: ItEffect
, _itInvSize :: Float
+9 -21
View File
@@ -1,14 +1,14 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Data.Item.Combine where
import Dodge.Data.Item.Use.Consumption
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import qualified Data.Map.Strict as M
import Dodge.Data.Equipment.Misc
import Dodge.Data.Item.Use.Consumption
data ItemType = ItemType
{ _iyBase :: ItemBaseType
@@ -79,6 +79,7 @@ data ItemBaseType
data ConsumableItemType
= MEDKIT Int
| EXPLOSIVES
deriving (Eq, Ord, Show, Read)
data EquipItemType
@@ -90,7 +91,6 @@ data EquipItemType
| BRAINHAT
| HAT
| HEADLAMP
| HEADLAMP1
| POWERLEGS
| SPEEDLEGS
| JUMPLEGS
@@ -118,17 +118,13 @@ data HeldItemType
| BANGCONE
| BLUNDERBUSS
| GRAPECANNON {_xNum :: Int}
| -- | GRENADELAUNCHER Int -- number of chambers that can be reloaded
-- | MORTARCONE / HANDMORTAR
MINIGUNX {_xNum :: Int}
| MINIGUNX {_xNum :: Int}
| VOLLEYGUN {_xNum :: Int}
| RIFLE
| REPEATER
| AUTORIFLE
| BURSTRIFLE
| -- | FASTBURSTRIFLE
-- | COMPLETEBURSTRIFLE
BANGROD
| BANGROD
| ELEPHANTGUN
| AMR
| AUTOAMR
@@ -143,20 +139,12 @@ data HeldItemType
| TESLAGUN
| LASGUN
| LASCIRCLE
| -- | LASPULSE
DUALBEAM
| -- | LASGUNSWING
-- | LASGUNSWAY
-- | LASGUNWIDEPULSE
LASWIDE {_xNum :: Int}
| -- | LASGUNFOCUS Int
-- | SONICGUN
TRACTORGUN
| DUALBEAM
| LASWIDE {_xNum :: Int}
| TRACTORGUN
| LAUNCHER
| LAUNCHERX {_xNum :: Int}
| -- | TRACKINGLAUNCHER
REMOTELAUNCHER
| REMOTELAUNCHER
| POISONSPRAYER
| DRONELAUNCHER
| SHATTERGUN
+9 -25
View File
@@ -7,39 +7,23 @@ import Control.Lens
import Data.Aeson
import Data.Aeson.TH
data ItEffect
= NoItEffect
| ItInvEffect
{ _ieInv :: ItInvEffect --Item -> Creature -> World -> World
, _ieCounter :: Int
}
| ItRewindEffect
{ _ieInv :: ItInvEffect --Item -> Creature -> World -> World
}
| ItEffect
{ _ieInv :: ItInvEffect --Item -> Creature -> World -> World
, _ieFloor :: ItFloorEffect --Int -> World -> World
, _ieCounter :: Int
}
| ItInvEffectID
{ _ieInv :: ItInvEffect --Item -> Creature -> World -> World
, _ieMID :: Maybe Int
} -- the duplication of ieMID may cause errors...
| ItInvEffectDrop
{ _ieInv :: ItInvEffect --Item -> Creature -> World -> World
, _ieDrop :: ItDropEffect --Item -> Creature -> World -> World
, _ieMID :: Maybe Int
}
data ItEffect = ItEffect
{ _ieInv :: ItInvEffect --Item -> Creature -> World -> World
, _ieOnInsert :: ItInvEffect
, _ieOnDrop :: ItInvEffect --Item -> Creature -> World -> World
, _ieOnHeld :: ItInvEffect
, _ieOnStash :: ItInvEffect
}
deriving (Eq, Ord, Show, Read)
data ItInvEffect
= NoInvEffect
| RewindEffect
| ResetAttachmentEffect
| OnOffHeldEffect ItInvEffect ItInvEffect
| EffectIfHeld ItInvEffect ItInvEffect
| CreateHeldLight
| CreateShieldWall
| RemoveShieldWall
| EffectWhileHeld ItInvEffect
deriving (Eq, Ord, Show, Read)
data ItFloorEffect = NoFloorEffect
+30 -33
View File
@@ -1,53 +1,50 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Data.Item.Misc where
import GHC.Generics
import Data.Aeson
import Geometry.Data
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import Geometry.Data
data ItemDimension = ItemDimension
{ _dimRad :: Float
, _dimCenter :: Point3
{ _dimRad :: Float
, _dimCenter :: Point3
, _dimAttachPos :: Point3
}
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON ItemDimension where
toEncoding = genericToEncoding defaultOptions
instance FromJSON ItemDimension
data ItemPortage
deriving (Eq, Show, Read)
data ItemPortage
= HeldItem
{ _handlePos :: Float
, _muzPos :: Float
, _muzPos :: Float
}
| WornItem
| NoPortage
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON ItemPortage where
toEncoding = genericToEncoding defaultOptions
instance FromJSON ItemPortage
deriving (Eq, Show, Read)
data ItemValue = ItemValue
{ _ivInt :: Int
, _ivType :: ItemValueType
}
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON ItemValue where
toEncoding = genericToEncoding defaultOptions
instance FromJSON ItemValue
deriving (Eq, Show, Read)
data ItemValueType = MundaneItem | ArtefactItem
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON ItemValueType where
toEncoding = genericToEncoding defaultOptions
instance FromJSON ItemValueType
data ItemPos
= InInv { _ipCrID :: Int , _ipInvID :: Int }
| OnFloor { _ipFlID :: Int }
deriving (Eq, Show, Read)
data ItemLocation
= InInv {_ipCrID :: Int, _ipInvID :: Int}
| OnFloor {_ipFlID :: Int}
| VoidItm
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON ItemPos where
toEncoding = genericToEncoding defaultOptions
instance FromJSON ItemPos
deriving (Eq, Show, Read)
makeLenses ''ItemDimension
makeLenses ''ItemPortage
makeLenses ''ItemValue
makeLenses ''ItemPos
makeLenses ''ItemLocation
deriveJSON defaultOptions ''ItemDimension
deriveJSON defaultOptions ''ItemPortage
deriveJSON defaultOptions ''ItemValue
deriveJSON defaultOptions ''ItemValueType
deriveJSON defaultOptions ''ItemLocation
+9 -9
View File
@@ -13,6 +13,12 @@ import Geometry.Data
data ItemParams
= NoParams
| MagShieldParams
{_magShieldMgMIX :: Maybe Int}
| ShrinkGunParams
{_shrinkGunStatus :: ShrinkGunStatus}
| FlatShieldParams
{_flatShieldWlMIX :: Maybe Int}
| ShellLauncher
{ _shellSpinDrag :: Int
, _shellSpinAmount :: Int
@@ -62,13 +68,12 @@ data ItemParams
| BoostPropIX {_boostPropIX :: Maybe Int}
deriving (Eq, Ord, Show, Read)
data ShrinkGunStatus = FullSize | Shrunk
deriving (Eq, Ord, Show, Read)
data PreviousArcEffect = NoPreviousArcEffect | PerturbTillBreakPreviousArc
deriving (Eq, Ord, Show, Read)
data GunBarrels
= MultiBarrel
{ _brlSpread :: BarrelSpread
@@ -82,8 +87,6 @@ data GunBarrels
| SingleBarrel {_brlInaccuracy :: Float}
deriving (Eq, Ord, Show, Read)
data Nozzle = Nozzle
{ _nzPressure :: Float
, _nzDir :: Float
@@ -94,21 +97,18 @@ data Nozzle = Nozzle
}
deriving (Eq, Ord, Show, Read)
data BarrelSpread
= AlignedBarrels
| SpreadBarrels {_spreadAngle :: Float}
| RotatingBarrels {_rotatingBarrelInaccuracy :: Float}
deriving (Eq, Ord, Show, Read)
makeLenses ''BarrelSpread
makeLenses ''ItemParams
makeLenses ''Nozzle
makeLenses ''GunBarrels
deriveJSON defaultOptions ''ItemParams
deriveJSON defaultOptions ''ShrinkGunStatus
deriveJSON defaultOptions ''PreviousArcEffect
deriveJSON defaultOptions ''GunBarrels
deriveJSON defaultOptions ''Nozzle
@@ -1,23 +1,13 @@
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Data.Item.Attachment where
module Dodge.Data.Item.Scope where
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import Geometry.Data
data ItAttachment
= AttachFuse {_atFuseTime :: Int}
| AttachTargetPos {_atTargetPos :: Point2}
| AttachInt {_atInt :: Int}
| AttachMInt {_atMInt :: Maybe Int}
| AttachFloat {_atFloat :: Float}
| AttachBool {_atBool :: Bool}
| NoItAttachment
deriving (Eq, Ord, Show, Read)
data Scope
= NoScope
| RemoteScope
@@ -36,9 +26,7 @@ data Scope
, -- | if the camera offset is also the center of vision
_scopeIsCamera :: Bool
}
deriving (Eq, Ord, Show, Read)
deriving (Eq, Show, Read)
makeLenses ''ItAttachment
makeLenses ''Scope
deriveJSON defaultOptions ''ItAttachment
deriveJSON defaultOptions ''Scope
+21 -21
View File
@@ -1,37 +1,37 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Data.Item.Tweak where
import GHC.Generics
import Data.Aeson
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import qualified IntMapHelp as IM
data ItemTweaks
= NoTweaks
| Tweakable
{ _tweakParams :: IM.IntMap TweakParam
}
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON ItemTweaks where
toEncoding = genericToEncoding defaultOptions
instance FromJSON ItemTweaks
data TweakType = TweakPhaseV
deriving (Eq, Show, Read)
data TweakType
= TweakPhaseV
| TweakTractionPower
| TweakSpinDrag
| TweakSpinAmount
| TweakThrustDelay
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON TweakType where
toEncoding = genericToEncoding defaultOptions
instance FromJSON TweakType
deriving (Eq, Show, Read)
data TweakParam = TweakParam
{ _tweakType :: TweakType -- Int -> Item -> Item
, _tweakVal :: Int
, _tweakMax :: Int
}
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON TweakParam where
toEncoding = genericToEncoding defaultOptions
instance FromJSON TweakParam
{ _tweakType :: TweakType -- Int -> Item -> Item
, _tweakVal :: Int
, _tweakMax :: Int
}
deriving (Eq, Show, Read)
makeLenses ''TweakParam
makeLenses ''ItemTweaks
deriveJSON defaultOptions ''ItemTweaks
deriveJSON defaultOptions ''TweakType
deriveJSON defaultOptions ''TweakParam
+19 -19
View File
@@ -1,30 +1,30 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Data.Magnet where
import GHC.Generics
import Data.Aeson
import Geometry.Data
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import Geometry.Data
newtype MagnetUpdate = MagnetUpdateTimer Int
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON MagnetUpdate where
toEncoding = genericToEncoding defaultOptions
instance FromJSON MagnetUpdate
data MagnetBuBu = MagnetBuId
deriving (Eq, Ord, Show, Read)
data MagnetBuBu
= MagnetBuId
| MagnetBuBuCurveAroundField Float Float
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON MagnetBuBu where
toEncoding = genericToEncoding defaultOptions
instance FromJSON MagnetBuBu
deriving (Eq, Ord, Show, Read)
data Magnet = Magnet
{ _mgID :: Int
, _mgUpdate :: MagnetUpdate
, _mgPos :: Point2
, _mgField :: MagnetBuBu
, _mgField :: MagnetBuBu
}
deriving (Eq,Ord,Show,Read,Generic)
instance ToJSON Magnet where
toEncoding = genericToEncoding defaultOptions
instance FromJSON Magnet
deriving (Eq, Ord, Show, Read)
makeLenses ''Magnet
deriveJSON defaultOptions ''MagnetUpdate
deriveJSON defaultOptions ''MagnetBuBu
deriveJSON defaultOptions ''Magnet