Cleanup
This commit is contained in:
+166
-172
@@ -1,115 +1,100 @@
|
|||||||
module Dodge.Creature
|
module Dodge.Creature (
|
||||||
( module Dodge.Creature
|
module Dodge.Creature,
|
||||||
, module Dodge.Creature.ChaseCrit
|
module Dodge.Creature.ChaseCrit,
|
||||||
, module Dodge.Creature.Inanimate
|
module Dodge.Creature.Inanimate,
|
||||||
, launcherCrit
|
launcherCrit,
|
||||||
, pistolCrit
|
pistolCrit,
|
||||||
, ltAutoCrit
|
ltAutoCrit,
|
||||||
, spreadGunCrit
|
spreadGunCrit,
|
||||||
, autoCrit
|
autoCrit,
|
||||||
, armourChaseCrit
|
armourChaseCrit,
|
||||||
) where
|
) where
|
||||||
import Dodge.Creature.State.Data
|
|
||||||
import Dodge.Item.Equipment.Booster
|
import Control.Lens
|
||||||
import Dodge.Item.Weapon.Utility
|
import Dodge.Creature.ArmourChase
|
||||||
--import Dodge.Item.Weapon.Drone
|
|
||||||
import Dodge.Item.Craftable
|
|
||||||
import Dodge.Creature.LauncherCrit
|
|
||||||
import Dodge.Creature.PistolCrit
|
|
||||||
import Dodge.Creature.LtAutoCrit
|
|
||||||
import Dodge.Creature.SpreadGunCrit
|
|
||||||
import Dodge.Creature.AutoCrit
|
import Dodge.Creature.AutoCrit
|
||||||
import Dodge.Creature.ChaseCrit
|
import Dodge.Creature.ChaseCrit
|
||||||
import Dodge.Creature.ArmourChase
|
import Dodge.Creature.Inanimate
|
||||||
|
import Dodge.Creature.LauncherCrit
|
||||||
|
import Dodge.Creature.LtAutoCrit
|
||||||
|
import Dodge.Creature.PistolCrit
|
||||||
|
import Dodge.Creature.SpreadGunCrit
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
import Dodge.Default
|
import Dodge.Default
|
||||||
import Dodge.Item.Weapon
|
|
||||||
import Dodge.Item.Equipment
|
|
||||||
import Dodge.Item.Consumable
|
import Dodge.Item.Consumable
|
||||||
import Dodge.Creature.Inanimate
|
import Dodge.Item.Craftable
|
||||||
import Picture
|
import Dodge.Item.Equipment
|
||||||
|
import Dodge.Item.Weapon
|
||||||
import Geometry.Data
|
import Geometry.Data
|
||||||
import qualified IntMapHelp as IM
|
import qualified IntMapHelp as IM
|
||||||
|
import Picture
|
||||||
--import Data.List
|
|
||||||
--import Data.Char
|
|
||||||
--import Data.Maybe
|
|
||||||
--import Data.Function
|
|
||||||
import Control.Lens
|
|
||||||
--import System.Random
|
|
||||||
--import qualified Data.Set as S
|
|
||||||
--import qualified Data.Map as M
|
|
||||||
|
|
||||||
spawnerCrit :: Creature
|
spawnerCrit :: Creature
|
||||||
spawnerCrit = defaultCreature
|
spawnerCrit =
|
||||||
{ --_crUpdate = stateUpdate $ spawnerAI chaseCrit
|
defaultCreature
|
||||||
_crHP = 300
|
& crHP .~ 300
|
||||||
, _crInv = IM.empty -- IM.fromList [(0,frontArmour)]
|
& crInv .~ IM.empty
|
||||||
}
|
& crType . skinUpper .~ light4 blue
|
||||||
& crType . skinUpper .~ light4 blue
|
|
||||||
|
|
||||||
miniGunCrit :: Creature
|
miniGunCrit :: Creature
|
||||||
miniGunCrit = defaultCreature
|
miniGunCrit =
|
||||||
{ _crInv = IM.fromList [(0,miniGunX 3)]
|
defaultCreature
|
||||||
, _crRad = 10
|
& crInv .~ IM.fromList [(0, miniGunX 3)]
|
||||||
, _crState = defaultState
|
& crType . skinUpper .~ light4 red
|
||||||
, _crHP = 500
|
& crType . humanoidAI .~ MiniGunAI
|
||||||
, _crMvType = defaultAimMvType
|
|
||||||
}
|
|
||||||
& crType . skinUpper .~ light4 red
|
|
||||||
& crType . humanoidAI .~ MiniGunAI
|
|
||||||
longCrit :: Creature
|
longCrit :: Creature
|
||||||
longCrit = defaultCreature
|
longCrit =
|
||||||
{ _crActionPlan = ActionPlan
|
defaultCreature
|
||||||
{ _apImpulse = []
|
& crActionPlan .~
|
||||||
, _apAction = []
|
ActionPlan
|
||||||
, _apStrategy = StrategyActions WatchAndWait [StartSentinelPost]
|
{ _apImpulse = []
|
||||||
, _apGoal = []
|
, _apAction = []
|
||||||
}
|
, _apStrategy = StrategyActions WatchAndWait [StartSentinelPost]
|
||||||
, _crInv = IM.fromList [(0,sniperRifle),(1,medkit 100)]
|
, _apGoal = []
|
||||||
, _crRad = 10
|
}
|
||||||
, _crHP = 150
|
& crInv .~ IM.fromList [(0, sniperRifle), (1, medkit 100)]
|
||||||
}
|
& crType . humanoidAI .~ LongAI
|
||||||
& crType . humanoidAI .~ LongAI
|
& crType . skinUpper .~ light4 red
|
||||||
& crType . skinUpper .~ light4 red
|
|
||||||
multGunCrit :: Creature
|
multGunCrit :: Creature
|
||||||
multGunCrit = defaultCreature
|
multGunCrit =
|
||||||
{ _crInv = IM.fromList [(0,volleyGun 4),(1,medkit 100)]
|
defaultCreature
|
||||||
, _crRad = 10
|
& crInv .~ IM.fromList [(0, volleyGun 4), (1, medkit 100)]
|
||||||
, _crHP = 300
|
& crType . skinUpper .~ light4 red
|
||||||
}
|
& crType . humanoidAI .~ MultGunAI
|
||||||
& crType . skinUpper .~ light4 red
|
|
||||||
& crType . humanoidAI .~ MultGunAI
|
|
||||||
|
|
||||||
addArmour :: Creature -> Creature
|
addArmour :: Creature -> Creature
|
||||||
addArmour = over crInv insarmour
|
addArmour = over crInv insarmour
|
||||||
where
|
where
|
||||||
insarmour xs = IM.insert (IM.newKey xs) frontArmour xs
|
insarmour xs = IM.insert (IM.newKey xs) frontArmour xs
|
||||||
|
|
||||||
{- | The creature you control.
|
{- | The creature you control.
|
||||||
ID 0. -}
|
ID 0.
|
||||||
|
-}
|
||||||
startCr :: Creature
|
startCr :: Creature
|
||||||
startCr = defaultCreature
|
startCr =
|
||||||
{ _crPos = V2 20 0
|
defaultCreature
|
||||||
, _crOldPos = V2 20 0
|
& crPos .~ V2 20 0
|
||||||
, _crDir = pi/2
|
& crOldPos .~ V2 20 0
|
||||||
, _crMvDir = pi/2
|
& crDir .~ pi / 2
|
||||||
, _crID = 0
|
& crMvDir .~ pi / 2
|
||||||
, _crRad = 10
|
& crID .~ 0
|
||||||
, _crMass = 10
|
& crHP .~ 1000
|
||||||
, _crHP = 1000
|
& crMaxHP .~ 1500
|
||||||
, _crMaxHP = 1500
|
& crInv .~ startInventory
|
||||||
, _crInv = startInventory
|
& crCorpse .~ MakeDefaultCorpse
|
||||||
, _crCorpse = MakeDefaultCorpse
|
& crFaction .~ PlayerFaction
|
||||||
, _crFaction = PlayerFaction
|
& crMvType .~ MvWalking yourDefaultSpeed
|
||||||
, _crMvType = MvWalking yourDefaultSpeed
|
& crType . skinUpper .~ light4 black
|
||||||
}
|
& crType . humanoidAI .~ YourAI
|
||||||
& crType . skinUpper .~ light4 black
|
|
||||||
& crType . humanoidAI .~ YourAI
|
-- | Items you start with.
|
||||||
{- | Items you start with. -}
|
|
||||||
startInvList :: [Item]
|
startInvList :: [Item]
|
||||||
startInvList = [ ]
|
startInvList = []
|
||||||
|
|
||||||
startInventory :: IM.IntMap Item
|
startInventory :: IM.IntMap Item
|
||||||
startInventory = IM.fromList $ zip [0..] startInvList
|
startInventory = IM.fromList $ zip [0 ..] startInvList
|
||||||
|
|
||||||
inventoryX :: Char -> [Item]
|
inventoryX :: Char -> [Item]
|
||||||
inventoryX c = case c of
|
inventoryX c = case c of
|
||||||
@@ -143,7 +128,7 @@ inventoryX c = case c of
|
|||||||
[ blinkGun
|
[ blinkGun
|
||||||
, unsafeBlinkGun
|
, unsafeBlinkGun
|
||||||
, autoDetector WALLDETECTOR
|
, autoDetector WALLDETECTOR
|
||||||
-- , effectGun "GIBBER" addCrGibs
|
-- , effectGun "GIBBER" addCrGibs
|
||||||
]
|
]
|
||||||
'E' ->
|
'E' ->
|
||||||
[ makeTypeCraftNum 3 PIPE
|
[ makeTypeCraftNum 3 PIPE
|
||||||
@@ -182,16 +167,18 @@ inventoryX c = case c of
|
|||||||
, makeTypeCraftNum 5 CONCUSSMODULE
|
, makeTypeCraftNum 5 CONCUSSMODULE
|
||||||
, makeTypeCraftNum 5 STATICMODULE
|
, makeTypeCraftNum 5 STATICMODULE
|
||||||
]
|
]
|
||||||
'H' -> [ shatterGun ]
|
'H' -> [shatterGun]
|
||||||
'I' -> [ makeTypeCraft TELEPORTMODULE
|
'I' ->
|
||||||
, makeTypeCraftNum 2 MICROCHIP
|
[ makeTypeCraft TELEPORTMODULE
|
||||||
]
|
, makeTypeCraftNum 2 MICROCHIP
|
||||||
'J' -> [ lasGun
|
]
|
||||||
, lasGun
|
'J' ->
|
||||||
, dualBeam
|
[ lasGun
|
||||||
-- , lasWidePulse
|
, lasGun
|
||||||
, makeTypeCraftNum 10 TRANSFORMER
|
, dualBeam
|
||||||
]
|
, -- , lasWidePulse
|
||||||
|
makeTypeCraftNum 10 TRANSFORMER
|
||||||
|
]
|
||||||
'K' ->
|
'K' ->
|
||||||
[ autoRifle
|
[ autoRifle
|
||||||
, makeTypeCraftNum 7 MICROCHIP
|
, makeTypeCraftNum 7 MICROCHIP
|
||||||
@@ -211,77 +198,84 @@ inventoryX c = case c of
|
|||||||
_ -> []
|
_ -> []
|
||||||
|
|
||||||
testInventory :: IM.IntMap Item
|
testInventory :: IM.IntMap Item
|
||||||
testInventory = IM.fromList $ zip [0..]
|
testInventory =
|
||||||
[ makeTypeCraftNum 9 PIPE
|
IM.fromList $
|
||||||
, autoAmr
|
zip
|
||||||
, brainHat
|
[0 ..]
|
||||||
, headLamp
|
[ makeTypeCraftNum 9 PIPE
|
||||||
, autoDetector WALLDETECTOR
|
, autoAmr
|
||||||
, magShield
|
, brainHat
|
||||||
, frontArmour
|
, headLamp
|
||||||
, wristArmour
|
, autoDetector WALLDETECTOR
|
||||||
, flatShield
|
, magShield
|
||||||
, sniperRifle
|
, frontArmour
|
||||||
, makeTypeCraftNum 1 MOTOR
|
, wristArmour
|
||||||
, makeTypeCraft INCENDIARYMODULE
|
, flatShield
|
||||||
, makeTypeCraft STATICMODULE
|
, sniperRifle
|
||||||
, makeTypeCraft CONCUSSMODULE
|
, makeTypeCraftNum 1 MOTOR
|
||||||
-- , bounceModule
|
, makeTypeCraft INCENDIARYMODULE
|
||||||
-- , medkit 50 & itConsumption . itAmount .~ 3
|
, makeTypeCraft STATICMODULE
|
||||||
, teleportModule
|
, makeTypeCraft CONCUSSMODULE
|
||||||
-- , makeTypeCraftNum 1 LIGHTER
|
, -- , bounceModule
|
||||||
-- , makeTypeCraftNum 15 TUBE
|
-- , medkit 50 & itConsumption . itAmount .~ 3
|
||||||
-- , makeTypeCraftNum 9 TRANSFORMER
|
teleportModule
|
||||||
-- , makeTypeCraftNum 5 CREATURESENSOR
|
, -- , makeTypeCraftNum 1 LIGHTER
|
||||||
-- , makeTypeCraftNum 9 PRISM
|
-- , makeTypeCraftNum 15 TUBE
|
||||||
-- , makeTypeCraftNum 3 DRUM
|
-- , makeTypeCraftNum 9 TRANSFORMER
|
||||||
-- , makeTypeCraftNum 3 PUMP
|
-- , makeTypeCraftNum 5 CREATURESENSOR
|
||||||
-- , makeTypeCraftNum 3 BATTERY
|
-- , makeTypeCraftNum 9 PRISM
|
||||||
-- , makeTypeCraftNum 1 MAGNET
|
-- , makeTypeCraftNum 3 DRUM
|
||||||
-- , makeTypeCraftNum 1 TRANSMITTER
|
-- , makeTypeCraftNum 3 PUMP
|
||||||
, makeTypeCraftNum 10 HARDWARE
|
-- , makeTypeCraftNum 3 BATTERY
|
||||||
, makeTypeCraftNum 3 SPRING
|
-- , makeTypeCraftNum 1 MAGNET
|
||||||
, makeTypeCraftNum 10 CAN
|
-- , makeTypeCraftNum 1 TRANSMITTER
|
||||||
-- , makeTypeCraftNum 3 TIN
|
makeTypeCraftNum 10 HARDWARE
|
||||||
, makeTypeCraftNum 3 PLANK
|
, makeTypeCraftNum 3 SPRING
|
||||||
-- , makeTypeCraftNum 1 MOTOR
|
, makeTypeCraftNum 10 CAN
|
||||||
-- , makeTypeCraftNum 5 MICROCHIP
|
, -- , makeTypeCraftNum 3 TIN
|
||||||
-- , makeTypeCraftNum 5 AIUNIT
|
makeTypeCraftNum 3 PLANK
|
||||||
]
|
-- , makeTypeCraftNum 1 MOTOR
|
||||||
|
-- , makeTypeCraftNum 5 MICROCHIP
|
||||||
|
-- , makeTypeCraftNum 5 AIUNIT
|
||||||
|
]
|
||||||
|
|
||||||
stackedInventory :: IM.IntMap Item
|
stackedInventory :: IM.IntMap Item
|
||||||
stackedInventory = IM.fromList $ zip [0..]
|
stackedInventory =
|
||||||
[--sonicGun
|
IM.fromList $
|
||||||
burstRifle
|
zip
|
||||||
, pipe
|
[0 ..]
|
||||||
,rewindGun
|
[ --sonicGun
|
||||||
,tractorGun
|
burstRifle
|
||||||
,autoPistol
|
, pipe
|
||||||
,pistol
|
, rewindGun
|
||||||
,teslaGun
|
, tractorGun
|
||||||
,blinkGun
|
, autoPistol
|
||||||
,miniGunX 3
|
, pistol
|
||||||
-- ,multGun
|
, teslaGun
|
||||||
,boosterGun
|
, blinkGun
|
||||||
,remoteLauncher
|
, miniGunX 3
|
||||||
,flatShield
|
, -- ,multGun
|
||||||
-- ,grenade
|
boosterGun
|
||||||
,spawnGun (lamp 5)
|
, remoteLauncher
|
||||||
,lasGun
|
, flatShield
|
||||||
,flameThrower
|
, -- ,grenade
|
||||||
,poisonSprayer
|
spawnGun (lamp 5)
|
||||||
,launcher
|
, lasGun
|
||||||
-- ,droneLauncher
|
, flameThrower
|
||||||
--,lasGun
|
, poisonSprayer
|
||||||
--,grenade
|
, launcher
|
||||||
--,ltAutoGun,flamer,multGun,spreadGun,remoteLauncher
|
-- ,droneLauncher
|
||||||
--,longGun
|
--,lasGun
|
||||||
--,hvAutoGun
|
--,grenade
|
||||||
--,teslaGun
|
--,ltAutoGun,flamer,multGun,spreadGun,remoteLauncher
|
||||||
--,latchkey 0
|
--,longGun
|
||||||
--,miniGun
|
--,hvAutoGun
|
||||||
--,medkit 50
|
--,teslaGun
|
||||||
--,bezierGun
|
--,latchkey 0
|
||||||
]
|
--,miniGun
|
||||||
|
--,medkit 50
|
||||||
|
--,bezierGun
|
||||||
|
]
|
||||||
|
|
||||||
--smokeGenGun :: Item
|
--smokeGenGun :: Item
|
||||||
--smokeGenGun = effectGun "smoke" $ const spawnSmokeAtCursor
|
--smokeGenGun = effectGun "smoke" $ const spawnSmokeAtCursor
|
||||||
|
|
||||||
|
|||||||
@@ -1,55 +0,0 @@
|
|||||||
{-# LANGUAGE DeriveGeneric #-}
|
|
||||||
{-# LANGUAGE TemplateHaskell #-}
|
|
||||||
{-# LANGUAGE StrictData #-}
|
|
||||||
module Dodge.Creature.State.Data
|
|
||||||
where
|
|
||||||
import GHC.Generics
|
|
||||||
import Data.Aeson
|
|
||||||
--import Geometry
|
|
||||||
import Geometry.Data
|
|
||||||
import Color
|
|
||||||
|
|
||||||
import Control.Lens
|
|
||||||
import qualified Data.IntSet as IS
|
|
||||||
data CreatureDropType
|
|
||||||
= DropAll
|
|
||||||
| DropAmount Int
|
|
||||||
| DropSpecific [Int]
|
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
|
||||||
instance ToJSON CreatureDropType where
|
|
||||||
toEncoding = genericToEncoding defaultOptions
|
|
||||||
instance FromJSON CreatureDropType
|
|
||||||
data CrSpState
|
|
||||||
= Barrel { _piercedPoints :: [Point2]}
|
|
||||||
| GenCr
|
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
|
||||||
instance ToJSON CrSpState where
|
|
||||||
toEncoding = genericToEncoding defaultOptions
|
|
||||||
instance FromJSON CrSpState
|
|
||||||
data Faction
|
|
||||||
= GenericFaction Int
|
|
||||||
| ZombieFaction
|
|
||||||
| EncircleFlock
|
|
||||||
| ChaseCritters
|
|
||||||
| SpawnedBy Int
|
|
||||||
| NoFaction
|
|
||||||
| ColorFaction Color
|
|
||||||
| PlayerFaction
|
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
|
||||||
instance ToJSON Faction where
|
|
||||||
toEncoding = genericToEncoding defaultOptions
|
|
||||||
instance FromJSON Faction
|
|
||||||
data CrGroup
|
|
||||||
= LoneWolf
|
|
||||||
| Swarm
|
|
||||||
{ _swarm :: IS.IntSet
|
|
||||||
, _crGroupID :: Int
|
|
||||||
}
|
|
||||||
| CrGroupID { _crGroupID :: Int }
|
|
||||||
| ShieldGroup
|
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
|
||||||
instance ToJSON CrGroup where
|
|
||||||
toEncoding = genericToEncoding defaultOptions
|
|
||||||
instance FromJSON CrGroup
|
|
||||||
makeLenses ''CrSpState
|
|
||||||
makeLenses ''CrGroup
|
|
||||||
+378
-370
@@ -1,3 +1,10 @@
|
|||||||
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
|
{-# LANGUAGE DerivingStrategies #-}
|
||||||
|
{-# LANGUAGE FlexibleInstances #-}
|
||||||
|
{-# LANGUAGE StrictData #-}
|
||||||
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
|
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
||||||
|
|
||||||
{- |
|
{- |
|
||||||
Contains base datatypes that cannot be seperated into
|
Contains base datatypes that cannot be seperated into
|
||||||
different modules because they are interdependent;
|
different modules because they are interdependent;
|
||||||
@@ -5,471 +12,468 @@ circular imports are probably not a good idea.
|
|||||||
|
|
||||||
WARNING: orphan instances concerning Aeson classes and SDL datatypes have been introduced.
|
WARNING: orphan instances concerning Aeson classes and SDL datatypes have been introduced.
|
||||||
The warnings have been disabled.
|
The warnings have been disabled.
|
||||||
-}
|
-}
|
||||||
{-# LANGUAGE TemplateHaskell #-}
|
module Dodge.Data (
|
||||||
{-# LANGUAGE StrictData #-}
|
module Dodge.Data,
|
||||||
{-# LANGUAGE FlexibleInstances #-}
|
module Dodge.Data.CrGroupParams,
|
||||||
{-# LANGUAGE DeriveGeneric #-}
|
module Dodge.Data.Corpse,
|
||||||
{-# LANGUAGE DerivingStrategies #-}
|
module Dodge.Data.ActionPlan,
|
||||||
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
module Dodge.Data.CreatureEffect,
|
||||||
module Dodge.Data
|
module Dodge.Data.WorldEffect,
|
||||||
( module Dodge.Data
|
module Dodge.Data.Button,
|
||||||
, module Dodge.Data.CrGroupParams
|
module Dodge.Data.Beam,
|
||||||
, module Dodge.Data.Corpse
|
module Dodge.Data.Targeting,
|
||||||
, module Dodge.Data.ActionPlan
|
module Dodge.Data.ItEffect,
|
||||||
, module Dodge.Data.CreatureEffect
|
module Dodge.Data.Hammer,
|
||||||
, module Dodge.Data.WorldEffect
|
module Dodge.Data.ArcStep,
|
||||||
, module Dodge.Data.Button
|
module Dodge.Data.CrWlID,
|
||||||
, module Dodge.Data.Item.Params
|
module Dodge.Data.Gas,
|
||||||
, module Dodge.Data.Beam
|
module Dodge.Data.Ammo,
|
||||||
, module Dodge.Data.Targeting
|
module Dodge.Data.Payload,
|
||||||
, module Dodge.Data.ItEffect
|
module Dodge.Data.RadarSweep,
|
||||||
, module Dodge.Data.Hammer
|
module Dodge.Data.PosEvent,
|
||||||
, module Dodge.Data.Item.Use
|
module Dodge.Data.EnergyBall,
|
||||||
, module Dodge.Data.Item.UseDelay
|
module Dodge.Data.Flame,
|
||||||
, module Dodge.Data.ArcStep
|
module Dodge.Data.Magnet,
|
||||||
, module Dodge.Data.CrWlID
|
module Dodge.Data.Spark,
|
||||||
, module Dodge.Data.Item.HeldUse
|
module Dodge.Data.Bullet,
|
||||||
, module Dodge.Data.Item.HeldScroll
|
module Dodge.Data.Door,
|
||||||
, module Dodge.Data.Item.Consumption
|
module Dodge.Data.Item,
|
||||||
, module Dodge.Data.Gas
|
module Dodge.Data.HUD,
|
||||||
, module Dodge.Data.Ammo
|
module Dodge.Data.Cloud,
|
||||||
, module Dodge.Data.Payload
|
module Dodge.Data.RightButtonOptions,
|
||||||
, module Dodge.Data.RadarSweep
|
module Dodge.Data.Material,
|
||||||
, module Dodge.Data.PosEvent
|
module Dodge.Data.LightSource,
|
||||||
, module Dodge.Data.EnergyBall
|
module Dodge.Data.Creature,
|
||||||
, module Dodge.Data.Flame
|
module Dodge.Data.Block,
|
||||||
, module Dodge.Data.Magnet
|
module Dodge.Data.Flare,
|
||||||
, module Dodge.Data.Spark
|
module Dodge.Data.LoadAction,
|
||||||
, module Dodge.Data.Bullet
|
module Dodge.Data.ForegroundShape,
|
||||||
, module Dodge.Data.Door
|
module Dodge.Data.Wall,
|
||||||
, module Dodge.Data.Item
|
module Dodge.Data.Object,
|
||||||
, module Dodge.Data.HUD
|
module Dodge.Data.Zoning,
|
||||||
, module Dodge.Data.Cloud
|
module Dodge.Data.Bounds,
|
||||||
, module Dodge.Data.RightButtonOptions
|
module Dodge.Data.Sensor,
|
||||||
, module Dodge.Data.Material
|
module Dodge.Combine.Data,
|
||||||
, module Dodge.Data.LightSource
|
module Dodge.Distortion.Data,
|
||||||
, module Dodge.Data.Creature
|
module Dodge.Data.Damage,
|
||||||
, module Dodge.Data.Block
|
module Dodge.Data.SoundOrigin,
|
||||||
, module Dodge.Data.Flare
|
module Dodge.Creature.Stance.Data,
|
||||||
, module Dodge.Data.LoadAction
|
module Dodge.Creature.Perception.Data,
|
||||||
, module Dodge.Data.ForegroundShape
|
module Dodge.Creature.Memory.Data,
|
||||||
, module Dodge.Data.Wall
|
module Dodge.Config.Data,
|
||||||
, module Dodge.Data.Object
|
module MaybeHelp,
|
||||||
, module Dodge.Data.Zoning
|
module Dodge.Data.ItemAmount,
|
||||||
, module Dodge.Data.Bounds
|
module Dodge.RoomCluster.Data,
|
||||||
, module Dodge.Data.Sensor
|
module Dodge.Data.Room,
|
||||||
, module Dodge.Combine.Data
|
module Dodge.Data.RadarBlip,
|
||||||
, module Dodge.Distortion.Data
|
module Dodge.Data.PathGraph,
|
||||||
, module Dodge.Data.Damage
|
module Dodge.Data.Gust,
|
||||||
, module Dodge.Data.SoundOrigin
|
module Dodge.Data.Projectile,
|
||||||
, module Dodge.Creature.State.Data
|
module Dodge.Data.Modification,
|
||||||
, module Dodge.Creature.Stance.Data
|
module Dodge.Data.PressPlate,
|
||||||
, module Dodge.Creature.Perception.Data
|
module Dodge.Data.Laser,
|
||||||
, module Dodge.Creature.Memory.Data
|
module Dodge.Data.TeslaArc,
|
||||||
, module Dodge.Item.Attachment.Data
|
module Dodge.Data.Shockwave,
|
||||||
, module Dodge.Item.Data
|
module Dodge.Data.Prop,
|
||||||
, module Dodge.Config.Data
|
module Dodge.Data.LinearShockwave,
|
||||||
, module MaybeHelp
|
module Dodge.Data.TractorBeam,
|
||||||
, module Dodge.Data.ItemAmount
|
module Dodge.Data.MountedObject,
|
||||||
, module Dodge.RoomCluster.Data
|
module Dodge.Data.Machine,
|
||||||
, module Dodge.Data.Room
|
module Dodge.Data.GenParams,
|
||||||
, module Dodge.Data.RadarBlip
|
module Dodge.Data.Terminal,
|
||||||
, module Dodge.Data.PathGraph
|
module Dodge.Data.FloorItem,
|
||||||
, module Dodge.Data.Gust
|
) where
|
||||||
, module Dodge.Data.Projectile
|
|
||||||
, module Dodge.Data.Modification
|
import Color
|
||||||
, module Dodge.Data.PressPlate
|
import Control.Lens
|
||||||
, module Dodge.Data.Laser
|
import Control.Monad.State
|
||||||
, module Dodge.Data.TeslaArc
|
|
||||||
, module Dodge.Data.Shockwave
|
|
||||||
, module Dodge.Data.Prop
|
|
||||||
, module Dodge.Data.LinearShockwave
|
|
||||||
, module Dodge.Data.TractorBeam
|
|
||||||
, module Dodge.Data.MountedObject
|
|
||||||
, module Dodge.Data.Machine
|
|
||||||
, module Dodge.Data.GenParams
|
|
||||||
, module Dodge.Data.Terminal
|
|
||||||
, module Dodge.Data.FloorItem
|
|
||||||
) where
|
|
||||||
import Dodge.Data.FloorItem
|
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
import GHC.Generics
|
import Data.Graph.Inductive
|
||||||
import Dodge.Data.Terminal
|
import qualified Data.IntSet as IS
|
||||||
import Dodge.Data.GenParams
|
import qualified Data.Map.Strict as M
|
||||||
import Dodge.Data.Machine
|
import Data.Preload
|
||||||
import Dodge.Data.MountedObject
|
import qualified Data.Set as S
|
||||||
import Dodge.Data.TractorBeam
|
import qualified Data.Text as T
|
||||||
import Dodge.Data.LinearShockwave
|
import Data.Tile
|
||||||
import Dodge.Data.Prop
|
|
||||||
import Dodge.Data.Shockwave
|
|
||||||
import Dodge.Data.TeslaArc
|
|
||||||
import Dodge.Data.Laser
|
|
||||||
import Dodge.Data.PressPlate
|
|
||||||
import Dodge.Data.Modification
|
|
||||||
import Dodge.Data.Projectile
|
|
||||||
import Dodge.Data.Gust
|
|
||||||
import Dodge.Data.CrGroupParams
|
|
||||||
import Dodge.Data.Corpse
|
|
||||||
import Dodge.Data.ActionPlan
|
|
||||||
import Dodge.Data.CreatureEffect
|
|
||||||
import Dodge.Data.WorldEffect
|
|
||||||
import Dodge.Data.Button
|
|
||||||
import Dodge.Data.Item.Params
|
|
||||||
import Dodge.Data.Beam
|
|
||||||
import Dodge.Data.Targeting
|
|
||||||
import Dodge.Data.ItEffect
|
|
||||||
import Dodge.Data.Hammer
|
|
||||||
import Dodge.Data.Item.Use
|
|
||||||
import Dodge.Data.Item.UseDelay
|
|
||||||
import Dodge.Data.CrWlID
|
|
||||||
import Dodge.Data.ArcStep
|
|
||||||
import Dodge.Data.Item.HeldUse
|
|
||||||
import Dodge.Data.Item.HeldScroll
|
|
||||||
import Dodge.Data.Item.Consumption
|
|
||||||
import Dodge.Data.Gas
|
|
||||||
import Dodge.Data.Ammo
|
|
||||||
import Dodge.Data.Payload
|
|
||||||
import Dodge.Data.RadarSweep
|
|
||||||
import Dodge.Data.PosEvent
|
|
||||||
import Dodge.Data.EnergyBall
|
|
||||||
import Dodge.Data.Flame
|
|
||||||
import Dodge.Data.Magnet
|
|
||||||
import Dodge.Data.Spark
|
|
||||||
import Dodge.Data.Bullet
|
|
||||||
import Dodge.Data.Door
|
|
||||||
import Dodge.Data.Item
|
|
||||||
import Dodge.Data.HUD
|
|
||||||
import Dodge.Data.Cloud
|
|
||||||
import Dodge.Data.RadarBlip
|
|
||||||
import Dodge.Data.RightButtonOptions
|
|
||||||
import Dodge.Data.LightSource
|
|
||||||
import Dodge.Data.Creature
|
|
||||||
import Dodge.Data.Room
|
|
||||||
import Dodge.Data.Block
|
|
||||||
import Dodge.Data.Sensor
|
|
||||||
import Dodge.Data.Flare
|
|
||||||
import Dodge.Data.PathGraph
|
|
||||||
import Dodge.Data.Object
|
|
||||||
import Dodge.Data.Zoning
|
|
||||||
import Dodge.Data.ForegroundShape
|
|
||||||
import Dodge.Data.LoadAction
|
|
||||||
import Dodge.Data.Material
|
|
||||||
import Dodge.Data.Wall
|
|
||||||
import Dodge.Data.Bounds
|
|
||||||
import Dodge.RoomCluster.Data
|
|
||||||
import Dodge.Data.ItemAmount
|
|
||||||
import Dodge.Creature.State.Data
|
|
||||||
import Dodge.Creature.Stance.Data
|
|
||||||
import Dodge.Creature.Perception.Data
|
|
||||||
import Dodge.Creature.Memory.Data
|
|
||||||
import Dodge.Distortion.Data
|
|
||||||
import Dodge.Data.SoundOrigin
|
|
||||||
import Dodge.Data.Damage
|
|
||||||
import Dodge.Combine.Data
|
import Dodge.Combine.Data
|
||||||
import Dodge.Config.Data
|
import Dodge.Config.Data
|
||||||
import Dodge.Config.KeyConfig
|
import Dodge.Config.KeyConfig
|
||||||
import Dodge.Item.Attachment.Data
|
import Dodge.Creature.Memory.Data
|
||||||
import Dodge.Item.Data
|
import Dodge.Creature.Perception.Data
|
||||||
import Data.Preload
|
import Dodge.Creature.Stance.Data
|
||||||
import Picture.Data
|
import Dodge.Data.ActionPlan
|
||||||
import Geometry.Data
|
import Dodge.Data.Ammo
|
||||||
import Geometry.ConvexPoly
|
import Dodge.Data.ArcStep
|
||||||
import Sound.Data
|
import Dodge.Data.Beam
|
||||||
|
import Dodge.Data.Block
|
||||||
|
import Dodge.Data.Bounds
|
||||||
|
import Dodge.Data.Bullet
|
||||||
|
import Dodge.Data.Button
|
||||||
|
import Dodge.Data.Cloud
|
||||||
|
import Dodge.Data.Corpse
|
||||||
|
import Dodge.Data.CrGroupParams
|
||||||
|
import Dodge.Data.CrWlID
|
||||||
|
import Dodge.Data.Creature
|
||||||
|
import Dodge.Data.CreatureEffect
|
||||||
|
import Dodge.Data.Damage
|
||||||
|
import Dodge.Data.Door
|
||||||
|
import Dodge.Data.EnergyBall
|
||||||
|
import Dodge.Data.Flame
|
||||||
|
import Dodge.Data.Flare
|
||||||
|
import Dodge.Data.FloorItem
|
||||||
|
import Dodge.Data.ForegroundShape
|
||||||
|
import Dodge.Data.Gas
|
||||||
|
import Dodge.Data.GenParams
|
||||||
|
import Dodge.Data.Gust
|
||||||
|
import Dodge.Data.HUD
|
||||||
|
import Dodge.Data.Hammer
|
||||||
|
import Dodge.Data.ItEffect
|
||||||
|
import Dodge.Data.Item
|
||||||
|
import Dodge.Data.ItemAmount
|
||||||
|
import Dodge.Data.Laser
|
||||||
|
import Dodge.Data.LightSource
|
||||||
|
import Dodge.Data.LinearShockwave
|
||||||
|
import Dodge.Data.LoadAction
|
||||||
|
import Dodge.Data.Machine
|
||||||
|
import Dodge.Data.Magnet
|
||||||
|
import Dodge.Data.Material
|
||||||
|
import Dodge.Data.Modification
|
||||||
|
import Dodge.Data.MountedObject
|
||||||
|
import Dodge.Data.Object
|
||||||
|
import Dodge.Data.PathGraph
|
||||||
|
import Dodge.Data.Payload
|
||||||
|
import Dodge.Data.PosEvent
|
||||||
|
import Dodge.Data.PressPlate
|
||||||
|
import Dodge.Data.Projectile
|
||||||
|
import Dodge.Data.Prop
|
||||||
|
import Dodge.Data.RadarBlip
|
||||||
|
import Dodge.Data.RadarSweep
|
||||||
|
import Dodge.Data.RightButtonOptions
|
||||||
|
import Dodge.Data.Room
|
||||||
|
import Dodge.Data.Sensor
|
||||||
|
import Dodge.Data.Shockwave
|
||||||
|
import Dodge.Data.SoundOrigin
|
||||||
|
import Dodge.Data.Spark
|
||||||
|
import Dodge.Data.Targeting
|
||||||
|
import Dodge.Data.Terminal
|
||||||
|
import Dodge.Data.TeslaArc
|
||||||
|
import Dodge.Data.TractorBeam
|
||||||
|
import Dodge.Data.Wall
|
||||||
|
import Dodge.Data.WorldEffect
|
||||||
|
import Dodge.Data.Zoning
|
||||||
|
import Dodge.Distortion.Data
|
||||||
import Dodge.GameRoom
|
import Dodge.GameRoom
|
||||||
import Color
|
import Dodge.RoomCluster.Data
|
||||||
import Data.Tile
|
import GHC.Generics
|
||||||
import MaybeHelp
|
import Geometry.ConvexPoly
|
||||||
|
import Geometry.Data
|
||||||
import Control.Lens
|
|
||||||
import Control.Monad.State
|
|
||||||
import System.Random
|
|
||||||
import Data.Graph.Inductive
|
|
||||||
import qualified Data.Set as S
|
|
||||||
import qualified Data.IntSet as IS
|
|
||||||
import qualified IntMapHelp as IM
|
import qualified IntMapHelp as IM
|
||||||
import qualified Data.Map.Strict as M
|
import MaybeHelp
|
||||||
import qualified Data.Text as T
|
import Picture.Data
|
||||||
import SDL (Scancode, MouseButton)
|
import SDL (MouseButton, Scancode)
|
||||||
|
import Sound.Data
|
||||||
import Streaming
|
import Streaming
|
||||||
|
import System.Random
|
||||||
|
|
||||||
type CRUpdate = Creature -> World -> (World -> World, Maybe Creature)
|
type CRUpdate = Creature -> World -> (World -> World, Maybe Creature)
|
||||||
|
|
||||||
type CRUpdate' = Creature -> World -> (World -> World, Creature)
|
type CRUpdate' = Creature -> World -> (World -> World, Creature)
|
||||||
|
|
||||||
data Universe = Universe
|
data Universe = Universe
|
||||||
{ _uvWorld :: World
|
{ _uvWorld :: World
|
||||||
, _preloadData :: PreloadData
|
, _preloadData :: PreloadData
|
||||||
, _menuLayers :: [ScreenLayer]
|
, _menuLayers :: [ScreenLayer]
|
||||||
, _savedWorlds :: M.Map SaveSlot World
|
, _savedWorlds :: M.Map SaveSlot World
|
||||||
, _keyConfig :: KeyConfigSDL
|
, _keyConfig :: KeyConfigSDL
|
||||||
, _uvIOEffects :: Universe -> IO Universe
|
, _uvIOEffects :: Universe -> IO Universe
|
||||||
, _uvConfig :: Configuration
|
, _uvConfig :: Configuration
|
||||||
, _uvTestString :: Universe -> [String]
|
, _uvTestString :: Universe -> [String]
|
||||||
}
|
}
|
||||||
|
|
||||||
data GenWorld = GenWorld
|
data GenWorld = GenWorld
|
||||||
{ _gwWorld :: World
|
{ _gwWorld :: World
|
||||||
, _genPlacements :: IM.IntMap [(Placement,Int)]
|
, _genPlacements :: IM.IntMap [(Placement, Int)]
|
||||||
, _genRooms :: IM.IntMap Room
|
, _genRooms :: IM.IntMap Room
|
||||||
}
|
}
|
||||||
|
|
||||||
data World = World
|
data World = World
|
||||||
{ _cWorld :: CWorld
|
{ _cWorld :: CWorld
|
||||||
, _randGen :: StdGen
|
, _randGen :: StdGen
|
||||||
, _toPlaySounds :: M.Map SoundOrigin Sound
|
, _toPlaySounds :: M.Map SoundOrigin Sound
|
||||||
, _playingSounds :: M.Map SoundOrigin Sound
|
, _playingSounds :: M.Map SoundOrigin Sound
|
||||||
, _mousePos :: Point2
|
, _mousePos :: Point2
|
||||||
, _keys :: S.Set Scancode
|
, _keys :: S.Set Scancode
|
||||||
, _mouseButtons :: M.Map MouseButton Bool
|
, _mouseButtons :: M.Map MouseButton Bool
|
||||||
, _hammers :: M.Map WorldHammer HammerPosition
|
, _hammers :: M.Map WorldHammer HammerPosition
|
||||||
}
|
}
|
||||||
|
|
||||||
data CWorld = CWorld
|
data CWorld = CWorld
|
||||||
{ _cameraCenter :: Point2
|
{ _cameraCenter :: Point2
|
||||||
, _cameraRot :: Float
|
, _cameraRot :: Float
|
||||||
, _cameraZoom :: Float -- smaller values zoom out
|
, _cameraZoom :: Float -- smaller values zoom out
|
||||||
, _itemZoom :: Float
|
, _itemZoom :: Float
|
||||||
, _defaultZoom :: Float
|
, _defaultZoom :: Float
|
||||||
, _cameraViewFrom :: Point2
|
, _cameraViewFrom :: Point2
|
||||||
, _viewDistance :: Float
|
, _viewDistance :: Float
|
||||||
, _boundBox :: [Point2]
|
, _boundBox :: [Point2]
|
||||||
, _boundDist :: (Float,Float,Float,Float) -- NSEW, S and W negative
|
, _boundDist :: (Float, Float, Float, Float) -- NSEW, S and W negative
|
||||||
, _creatures :: IM.IntMap Creature
|
, _creatures :: IM.IntMap Creature
|
||||||
, _crZoning :: IM.IntMap (IM.IntMap IS.IntSet) --Zoning IM.IntMap Creature
|
, _crZoning :: IM.IntMap (IM.IntMap IS.IntSet) --Zoning IM.IntMap Creature
|
||||||
, _creatureGroups :: IM.IntMap CrGroupParams
|
, _creatureGroups :: IM.IntMap CrGroupParams
|
||||||
, _itemPositions :: IM.IntMap ItemPos
|
, _itemPositions :: IM.IntMap ItemPos
|
||||||
, _clouds :: [Cloud]
|
, _clouds :: [Cloud]
|
||||||
, _clZoning :: IM.IntMap (IM.IntMap [Cloud]) --Zoning IM.IntMap Creature
|
, _clZoning :: IM.IntMap (IM.IntMap [Cloud]) --Zoning IM.IntMap Creature
|
||||||
, _gusts :: IM.IntMap Gust
|
, _gusts :: IM.IntMap Gust
|
||||||
, _gsZoning :: IM.IntMap (IM.IntMap IS.IntSet)
|
, _gsZoning :: IM.IntMap (IM.IntMap IS.IntSet)
|
||||||
, _props :: IM.IntMap Prop
|
, _props :: IM.IntMap Prop
|
||||||
, _projectiles :: IM.IntMap Proj
|
, _projectiles :: IM.IntMap Proj
|
||||||
, _instantBullets :: [Bullet]
|
, _instantBullets :: [Bullet]
|
||||||
, _bullets :: [Bullet]
|
, _bullets :: [Bullet]
|
||||||
, _radarSweeps :: [RadarSweep]
|
, _radarSweeps :: [RadarSweep]
|
||||||
, _energyBalls :: [EnergyBall]
|
, _energyBalls :: [EnergyBall]
|
||||||
, _posEvents :: [PosEvent]
|
, _posEvents :: [PosEvent]
|
||||||
, _flames :: [Flame]
|
, _flames :: [Flame]
|
||||||
, _sparks :: [Spark]
|
, _sparks :: [Spark]
|
||||||
, _radarBlips :: [RadarBlip]
|
, _radarBlips :: [RadarBlip]
|
||||||
, _flares :: [Flare]
|
, _flares :: [Flare]
|
||||||
, _newBeams :: WorldBeams
|
, _newBeams :: WorldBeams
|
||||||
, _beams :: WorldBeams
|
, _beams :: WorldBeams
|
||||||
, _teslaArcs :: [TeslaArc]
|
, _teslaArcs :: [TeslaArc]
|
||||||
, _shockwaves :: [Shockwave]
|
, _shockwaves :: [Shockwave]
|
||||||
, _lasers :: [LaserStart]
|
, _lasers :: [LaserStart]
|
||||||
, _lasersToDraw :: [Laser]
|
, _lasersToDraw :: [Laser]
|
||||||
, _linearShockwaves :: IM.IntMap LinearShockwave
|
, _linearShockwaves :: IM.IntMap LinearShockwave
|
||||||
, _tractorBeams :: [TractorBeam]
|
, _tractorBeams :: [TractorBeam]
|
||||||
, _walls :: IM.IntMap Wall
|
, _walls :: IM.IntMap Wall
|
||||||
, _wallDamages :: IM.IntMap [Damage]
|
, _wallDamages :: IM.IntMap [Damage]
|
||||||
, _doors :: IM.IntMap Door
|
, _doors :: IM.IntMap Door
|
||||||
, _machines :: IM.IntMap Machine
|
, _machines :: IM.IntMap Machine
|
||||||
, _terminals :: IM.IntMap Terminal
|
, _terminals :: IM.IntMap Terminal
|
||||||
, _magnets :: IM.IntMap Magnet
|
, _magnets :: IM.IntMap Magnet
|
||||||
, _blocks :: IM.IntMap Block
|
, _blocks :: IM.IntMap Block
|
||||||
, _coordinates :: IM.IntMap Point2
|
, _coordinates :: IM.IntMap Point2
|
||||||
, _triggers :: IM.IntMap Bool
|
, _triggers :: IM.IntMap Bool
|
||||||
, _wlZoning :: IM.IntMap (IM.IntMap IS.IntSet) -- Zoning IM.IntMap Wall
|
, _wlZoning :: IM.IntMap (IM.IntMap IS.IntSet) -- Zoning IM.IntMap Wall
|
||||||
, _floorItems :: IM.IntMap FloorItem
|
, _floorItems :: IM.IntMap FloorItem
|
||||||
, _floorTiles :: [(Point3,Point3)]
|
, _floorTiles :: [(Point3, Point3)]
|
||||||
, _modifications :: IM.IntMap Modification
|
, _modifications :: IM.IntMap Modification
|
||||||
, _yourID :: Int
|
, _yourID :: Int
|
||||||
, _worldEvents :: [WdWd]
|
, _worldEvents :: [WdWd]
|
||||||
, _delayedEvents :: [(Int,WdWd)]
|
, _delayedEvents :: [(Int, WdWd)]
|
||||||
, _pressPlates :: IM.IntMap PressPlate
|
, _pressPlates :: IM.IntMap PressPlate
|
||||||
, _buttons :: IM.IntMap Button
|
, _buttons :: IM.IntMap Button
|
||||||
, _decorations :: IM.IntMap Picture
|
, _decorations :: IM.IntMap Picture
|
||||||
, _foregroundShapes :: IM.IntMap ForegroundShape
|
, _foregroundShapes :: IM.IntMap ForegroundShape
|
||||||
, _corpses :: IM.IntMap Corpse
|
, _corpses :: IM.IntMap Corpse
|
||||||
, _clickMousePos :: Point2
|
, _clickMousePos :: Point2
|
||||||
, _pathGraph :: Gr Point2 PathEdge
|
, _pathGraph :: Gr Point2 PathEdge
|
||||||
, _pnZoning :: IM.IntMap (IM.IntMap [(Int,Point2)]) --Zoning IM.IntMap Creature
|
, _pnZoning :: IM.IntMap (IM.IntMap [(Int, Point2)]) --Zoning IM.IntMap Creature
|
||||||
, _peZoning :: IM.IntMap (IM.IntMap [(Int,Int,PathEdge)]) --Zoning IM.IntMap Creature
|
, _peZoning :: IM.IntMap (IM.IntMap [(Int, Int, PathEdge)]) --Zoning IM.IntMap Creature
|
||||||
, _hud :: HUD
|
, _hud :: HUD
|
||||||
, _lightSources :: IM.IntMap LightSource
|
, _lightSources :: IM.IntMap LightSource
|
||||||
, _tempLightSources :: [TempLightSource]
|
, _tempLightSources :: [TempLightSource]
|
||||||
, _closeObjects :: [Either FloorItem Button]
|
, _closeObjects :: [Either FloorItem Button]
|
||||||
, _rbOptions :: RightButtonOptions
|
, _rbOptions :: RightButtonOptions
|
||||||
, _seenLocations :: IM.IntMap (WdP2,String)
|
, _seenLocations :: IM.IntMap (WdP2, String)
|
||||||
, _selLocation :: Int
|
, _selLocation :: Int
|
||||||
, _distortions :: [Distortion]
|
, _distortions :: [Distortion]
|
||||||
, _worldBounds :: Bounds
|
, _worldBounds :: Bounds
|
||||||
, _gameRooms :: [GameRoom] -- consider using an IntMap
|
, _gameRooms :: [GameRoom] -- consider using an IntMap
|
||||||
, _roomClipping :: [ConvexPoly]
|
, _roomClipping :: [ConvexPoly]
|
||||||
, _maybeWorld :: Maybe' CWorld
|
, _maybeWorld :: Maybe' CWorld
|
||||||
, _rewindWorlds :: [CWorld]
|
, _rewindWorlds :: [CWorld]
|
||||||
, _timeFlow :: TimeFlowStatus
|
, _timeFlow :: TimeFlowStatus
|
||||||
, _worldClock :: Int
|
, _worldClock :: Int
|
||||||
, _backspaceTimer :: Int
|
, _backspaceTimer :: Int
|
||||||
, _genParams :: GenParams
|
, _genParams :: GenParams
|
||||||
, _deathDelay :: Maybe Int
|
, _deathDelay :: Maybe Int
|
||||||
, _testFloat :: Float
|
, _testFloat :: Float
|
||||||
, _lLine :: (Point2,Point2)
|
, _lLine :: (Point2, Point2)
|
||||||
, _rLine :: (Point2,Point2)
|
, _rLine :: (Point2, Point2)
|
||||||
, _lSelect :: Point2
|
, _lSelect :: Point2
|
||||||
, _rSelect :: Point2
|
, _rSelect :: Point2
|
||||||
}
|
}
|
||||||
deriving (Eq,Show,Read,Generic)
|
deriving (Eq, Show, Read, Generic)
|
||||||
|
|
||||||
instance ToJSON CWorld where
|
instance ToJSON CWorld where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
|
|
||||||
instance FromJSON CWorld
|
instance FromJSON CWorld
|
||||||
|
|
||||||
instance ToJSON MouseButton where
|
instance ToJSON MouseButton where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
|
|
||||||
instance FromJSON MouseButton
|
instance FromJSON MouseButton
|
||||||
|
|
||||||
instance ToJSONKey MouseButton
|
instance ToJSONKey MouseButton
|
||||||
|
|
||||||
instance FromJSONKey MouseButton
|
instance FromJSONKey MouseButton
|
||||||
|
|
||||||
instance ToJSON Scancode where
|
instance ToJSON Scancode where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
|
|
||||||
instance FromJSON Scancode
|
instance FromJSON Scancode
|
||||||
|
|
||||||
instance ToJSONKey Scancode
|
instance ToJSONKey Scancode
|
||||||
|
|
||||||
instance FromJSONKey Scancode
|
instance FromJSONKey Scancode
|
||||||
|
|
||||||
data TimeFlowStatus
|
data TimeFlowStatus
|
||||||
= RewindingNow
|
= RewindingNow
|
||||||
| RewindingLastFrame
|
| RewindingLastFrame
|
||||||
| NormalTimeFlow
|
| NormalTimeFlow
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
|
|
||||||
instance ToJSON TimeFlowStatus where
|
instance ToJSON TimeFlowStatus where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
|
|
||||||
instance FromJSON TimeFlowStatus
|
instance FromJSON TimeFlowStatus
|
||||||
|
|
||||||
data WorldHammer
|
data WorldHammer
|
||||||
= SubInvHam
|
= SubInvHam
|
||||||
| DoubleMouseHam
|
| DoubleMouseHam
|
||||||
deriving (Eq,Ord,Show,Read,Enum,Bounded,Generic)
|
deriving (Eq, Ord, Show, Read, Enum, Bounded, Generic)
|
||||||
|
|
||||||
instance ToJSON WorldHammer where
|
instance ToJSON WorldHammer where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
|
|
||||||
instance FromJSON WorldHammer
|
instance FromJSON WorldHammer
|
||||||
|
|
||||||
instance ToJSONKey WorldHammer
|
instance ToJSONKey WorldHammer
|
||||||
|
|
||||||
instance FromJSONKey WorldHammer
|
instance FromJSONKey WorldHammer
|
||||||
|
|
||||||
data SaveSlot = QuicksaveSlot | LevelStartSlot
|
data SaveSlot
|
||||||
|
= QuicksaveSlot
|
||||||
|
| LevelStartSlot
|
||||||
| SaveSlotNum Int
|
| SaveSlotNum Int
|
||||||
deriving (Eq,Ord,Show,Read)
|
deriving (Eq, Ord, Show, Read)
|
||||||
|
|
||||||
data OptionScreenFlag = NormalOptions | GameOverOptions
|
data OptionScreenFlag = NormalOptions | GameOverOptions
|
||||||
deriving (Eq,Ord,Show,Read)
|
deriving (Eq, Ord, Show, Read)
|
||||||
|
|
||||||
data ScreenLayer
|
data ScreenLayer
|
||||||
= OptionScreen
|
= OptionScreen
|
||||||
{ _scTitle :: Universe -> String
|
{ _scTitle :: Universe -> String
|
||||||
, _scOptions :: [MenuOption]
|
, _scOptions :: [MenuOption]
|
||||||
, _scDefaultEff :: Universe -> IO (Maybe Universe)
|
, _scDefaultEff :: Universe -> IO (Maybe Universe)
|
||||||
, _scOptionFlag :: OptionScreenFlag
|
, _scOptionFlag :: OptionScreenFlag
|
||||||
, _scOptionsOffset :: Int
|
, _scOptionsOffset :: Int
|
||||||
}
|
}
|
||||||
| ColumnsScreen
|
| ColumnsScreen
|
||||||
{ _scTitle :: Universe -> String
|
{ _scTitle :: Universe -> String
|
||||||
, _scColumns :: [(String,String)]
|
, _scColumns :: [(String, String)]
|
||||||
}
|
}
|
||||||
| InputScreen
|
| InputScreen
|
||||||
{ _scInput :: T.Text
|
{ _scInput :: T.Text
|
||||||
, _scFooter :: String
|
, _scFooter :: String
|
||||||
}
|
}
|
||||||
| WaitScreen
|
| WaitScreen
|
||||||
{ _scWaitMessage :: Universe -> String
|
{ _scWaitMessage :: Universe -> String
|
||||||
, _scWaitTime :: Int
|
, _scWaitTime :: Int
|
||||||
}
|
}
|
||||||
| DisplayScreen
|
| DisplayScreen
|
||||||
{ _scDisplay :: Universe -> Picture
|
{ _scDisplay :: Universe -> Picture
|
||||||
}
|
}
|
||||||
|
|
||||||
data MenuOption
|
data MenuOption
|
||||||
= Toggle
|
= Toggle
|
||||||
{ _moEff :: Universe -> IO (Maybe Universe)
|
{ _moEff :: Universe -> IO (Maybe Universe)
|
||||||
, _moString :: Universe -> Either String (String,String)
|
, _moString :: Universe -> Either String (String, String)
|
||||||
, _moKey :: Scancode
|
, _moKey :: Scancode
|
||||||
}
|
}
|
||||||
| Toggle2
|
| Toggle2
|
||||||
{ _moKey1 :: Scancode
|
{ _moKey1 :: Scancode
|
||||||
, _moEff1 :: Universe -> IO (Maybe Universe)
|
, _moEff1 :: Universe -> IO (Maybe Universe)
|
||||||
, _moKey2 :: Scancode
|
, _moKey2 :: Scancode
|
||||||
, _moEff2 :: Universe -> IO (Maybe Universe)
|
, _moEff2 :: Universe -> IO (Maybe Universe)
|
||||||
, _moString :: Universe -> Either String (String,String)
|
, _moString :: Universe -> Either String (String, String)
|
||||||
}
|
}
|
||||||
| InvisibleToggle
|
| InvisibleToggle
|
||||||
{ _moKey :: Scancode
|
{ _moKey :: Scancode
|
||||||
, _moEff :: Universe -> IO (Maybe Universe)
|
, _moEff :: Universe -> IO (Maybe Universe)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
data IntID a = IntID Int a
|
data IntID a = IntID Int a
|
||||||
|
|
||||||
data WorldBeams = WorldBeams
|
data WorldBeams = WorldBeams
|
||||||
{_blockingBeams :: [Beam]
|
{ _blockingBeams :: [Beam]
|
||||||
,_lightBeams :: [Beam]
|
, _lightBeams :: [Beam]
|
||||||
,_positronBeams :: [Beam]
|
, _positronBeams :: [Beam]
|
||||||
,_electronBeams :: [Beam]
|
, _electronBeams :: [Beam]
|
||||||
}
|
}
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
instance ToJSON WorldBeams where
|
|
||||||
|
instance ToJSON WorldBeams where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
|
|
||||||
instance FromJSON WorldBeams
|
instance FromJSON WorldBeams
|
||||||
|
|
||||||
{- Objects without ids.
|
type HitEffect' =
|
||||||
Update themselves, perhaps with side effects. -}
|
Flame ->
|
||||||
--data Particle = DPart
|
Stream (Of (Point2, Either Creature Wall)) Identity () ->
|
||||||
-- = ShockLine
|
World ->
|
||||||
-- { _ptUpdate :: World -> Particle -> (World, Maybe Particle)
|
(World, Maybe Flame)
|
||||||
-- , _ptPointDirs :: [[(Point2,Float)]]
|
|
||||||
-- , _ptTimer :: Int
|
|
||||||
-- , _ptColor :: Color
|
|
||||||
-- , _ptCenter :: Point2
|
|
||||||
-- }
|
|
||||||
--type HitEffect = Particle
|
|
||||||
-- -> Stream (Of (Point2, Either Creature Wall)) Identity ()
|
|
||||||
-- -> World
|
|
||||||
-- -> (World,Maybe Particle)
|
|
||||||
type HitEffect' = Flame
|
|
||||||
-> Stream (Of (Point2, Either Creature Wall)) Identity ()
|
|
||||||
-> World
|
|
||||||
-> (World,Maybe Flame)
|
|
||||||
|
|
||||||
data Either3 a b c = E3x1 a | E3x2 b | E3x3 c
|
data Either3 a b c = E3x1 a | E3x2 b | E3x3 c
|
||||||
|
|
||||||
---- ROOM DATATYPES
|
---- ROOM DATATYPES
|
||||||
data PSType = PutCrit {_unPutCrit :: Creature}
|
data PSType
|
||||||
| PutMachine { _putMachinePoly :: [Point2], _putMachineMachine :: Machine , _putMachineWall :: Wall}
|
= PutCrit {_unPutCrit :: Creature}
|
||||||
|
| PutMachine {_putMachinePoly :: [Point2], _putMachineMachine :: Machine, _putMachineWall :: Wall}
|
||||||
| PutLS LightSource
|
| PutLS LightSource
|
||||||
| PutButton {_putButton :: Button}
|
| PutButton {_putButton :: Button}
|
||||||
| PutProp Prop
|
| PutProp Prop
|
||||||
| PutTerminal {_unputTerminal :: Terminal}
|
| PutTerminal {_unputTerminal :: Terminal}
|
||||||
| PutFlIt {_putItem :: Item}
|
| PutFlIt {_putItem :: Item}
|
||||||
| PutPPlate PressPlate
|
| PutPPlate PressPlate
|
||||||
| PutBlock {_putBlock :: Block, _putWall :: Wall, _putPoly :: [Point2] }
|
| PutBlock {_putBlock :: Block, _putWall :: Wall, _putPoly :: [Point2]}
|
||||||
| PutCoord Point2
|
| PutCoord Point2
|
||||||
| PutMod Modification
|
| PutMod Modification
|
||||||
| PutTrigger Bool
|
| PutTrigger Bool
|
||||||
| PutLineBlock {_putWall :: Wall , _putWidth :: Float
|
| PutLineBlock
|
||||||
, _putStartPoint :: Point2, _putEndPoint :: Point2}
|
{ _putWall :: Wall
|
||||||
| PutWall { _pwPoly :: [Point2] , _pwWall :: Wall }
|
, _putWidth :: Float
|
||||||
|
, _putStartPoint :: Point2
|
||||||
|
, _putEndPoint :: Point2
|
||||||
|
}
|
||||||
|
| PutWall {_pwPoly :: [Point2], _pwWall :: Wall}
|
||||||
| PutSlideDr Door Wall EdgeObstacle Float Point2 Point2
|
| PutSlideDr Door Wall EdgeObstacle Float Point2 Point2
|
||||||
| PutDoor Color EdgeObstacle WdBl [(Point2,Point2)]
|
| PutDoor Color EdgeObstacle WdBl [(Point2, Point2)]
|
||||||
| RandPS (State StdGen PSType)
|
| RandPS (State StdGen PSType)
|
||||||
| PutForeground ForegroundShape
|
| PutForeground ForegroundShape
|
||||||
| PutDecoration Picture
|
| PutDecoration Picture
|
||||||
| PutWorldUpdate (PlacementSpot -> World -> World)
|
| PutWorldUpdate (PlacementSpot -> World -> World)
|
||||||
| PutNothing
|
| PutNothing
|
||||||
| PutUsingGenParams (World -> (World,PSType))
|
| PutUsingGenParams (World -> (World, PSType))
|
||||||
| PutID { _putID :: Int}
|
| PutID {_putID :: Int}
|
||||||
|
|
||||||
-- maybe there is a monadic implementation of this?
|
-- maybe there is a monadic implementation of this?
|
||||||
-- add room effect for any placement spot?
|
-- add room effect for any placement spot?
|
||||||
data PlacementSpot
|
data PlacementSpot
|
||||||
= PS { _psPos :: Point2 , _psRot :: Float }
|
= PS {_psPos :: Point2, _psRot :: Float}
|
||||||
| PSNoShiftCont { _psPos :: Point2 , _psRot :: Float }
|
| PSNoShiftCont {_psPos :: Point2, _psRot :: Float}
|
||||||
| PSPos
|
| PSPos
|
||||||
{ _psSelect :: RoomPos -> Room -> Maybe (PlacementSpot, RoomPos)
|
{ _psSelect :: RoomPos -> Room -> Maybe (PlacementSpot, RoomPos)
|
||||||
, _psRoomEff :: RoomPos -> Room -> Room
|
, _psRoomEff :: RoomPos -> Room -> Room
|
||||||
, _psFallback :: Maybe Placement
|
, _psFallback :: Maybe Placement
|
||||||
}
|
}
|
||||||
| PSRoomRand
|
| PSRoomRand
|
||||||
{ _psRoomRandPointNum :: Int
|
{ _psRoomRandPointNum :: Int
|
||||||
, _psRandShift :: (Point2,Float) -> PlacementSpot
|
, _psRandShift :: (Point2, Float) -> PlacementSpot
|
||||||
}
|
}
|
||||||
|
|
||||||
-- TODO attempt to unify/simplify this union type
|
-- TODO attempt to unify/simplify this union type
|
||||||
data Placement
|
data Placement
|
||||||
= Placement
|
= Placement
|
||||||
{ _plOrder :: Int
|
{ _plOrder :: Int
|
||||||
, _plSpot :: PlacementSpot
|
, _plSpot :: PlacementSpot
|
||||||
, _plType :: PSType
|
, _plType :: PSType
|
||||||
, _plMID :: Maybe Int
|
, _plMID :: Maybe Int
|
||||||
, _plIDCont :: World -> Placement -> Maybe Placement
|
, _plIDCont :: World -> Placement -> Maybe Placement
|
||||||
}
|
}
|
||||||
| PlacementUsingPos Point3 (Point3 -> Placement) -- allows a placement to use a shifted position
|
| PlacementUsingPos Point3 (Point3 -> Placement) -- allows a placement to use a shifted position
|
||||||
| RandomPlacement {_unRandomPlacement :: State StdGen Placement}
|
| RandomPlacement {_unRandomPlacement :: State StdGen Placement}
|
||||||
| PickOnePlacement Int Placement
|
| PickOnePlacement Int Placement
|
||||||
|
|
||||||
@@ -481,45 +485,49 @@ Placement spots allow things to be put in the room during level generation.
|
|||||||
Room bounds between a new room and previously placed rooms are checked during level generation,
|
Room bounds between a new room and previously placed rooms are checked during level generation,
|
||||||
assigning no bounds will allow rooms to overlap. -}
|
assigning no bounds will allow rooms to overlap. -}
|
||||||
data Room = Room
|
data Room = Room
|
||||||
{ _rmPolys :: [ [Point2] ]
|
{ _rmPolys :: [[Point2]]
|
||||||
, _rmLinks :: [RoomLink]
|
, _rmLinks :: [RoomLink]
|
||||||
-- the Int is the number of previous outlinks that have been assigned
|
, -- the Int is the number of previous outlinks that have been assigned
|
||||||
, _rmLinkEff
|
_rmLinkEff ::
|
||||||
:: RoomLink -- ^ child link
|
RoomLink -> -- child link
|
||||||
-> Room -- ^ child room
|
Room -> -- child room
|
||||||
-> Int -- ^ child number
|
Int -> -- child number
|
||||||
-> RoomLink -- ^ parent link
|
RoomLink -> -- parent link
|
||||||
-> Room -- ^ parent room
|
Room -> -- parent room
|
||||||
-> Room
|
Room
|
||||||
, _rmPos :: [RoomPos]
|
, _rmPos :: [RoomPos]
|
||||||
, _rmPath :: S.Set (Point2, Point2)
|
, _rmPath :: S.Set (Point2, Point2)
|
||||||
, _rmPmnts :: [Placement]
|
, _rmPmnts :: [Placement]
|
||||||
, _rmInPmnt :: [InPlacement]
|
, _rmInPmnt :: [InPlacement]
|
||||||
, _rmOutPmnt :: [OutPlacement]
|
, _rmOutPmnt :: [OutPlacement]
|
||||||
, _rmBound :: [ [Point2] ]
|
, _rmBound :: [[Point2]]
|
||||||
, _rmFloor :: Floor
|
, _rmFloor :: Floor
|
||||||
, _rmName :: String
|
, _rmName :: String
|
||||||
, _rmShift :: (Point2, Float)
|
, _rmShift :: (Point2, Float)
|
||||||
, _rmViewpoints :: [Point2]
|
, _rmViewpoints :: [Point2]
|
||||||
, _rmRandPSs :: [State StdGen (Point2,Float)]
|
, _rmRandPSs :: [State StdGen (Point2, Float)]
|
||||||
, _rmStartWires :: IM.IntMap RoomWire
|
, _rmStartWires :: IM.IntMap RoomWire
|
||||||
, _rmEndWires :: IM.IntMap RoomWire
|
, _rmEndWires :: IM.IntMap RoomWire
|
||||||
, _rmConnectsTo :: S.Set RoomLinkType -> Bool
|
, _rmConnectsTo :: S.Set RoomLinkType -> Bool
|
||||||
, _rmMID :: Maybe Int
|
, _rmMID :: Maybe Int
|
||||||
, _rmMParent :: Maybe Int
|
, _rmMParent :: Maybe Int
|
||||||
, _rmChildren :: [Int]
|
, _rmChildren :: [Int]
|
||||||
, _rmType :: RoomType
|
, _rmType :: RoomType
|
||||||
, _rmClusterStatus :: ClusterStatus
|
, _rmClusterStatus :: ClusterStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
data OutPlacement = OutPlacement
|
data OutPlacement = OutPlacement
|
||||||
{ _opPlacement :: Placement
|
{ _opPlacement :: Placement
|
||||||
, _opPlacementID :: Int
|
, _opPlacementID :: Int
|
||||||
}
|
}
|
||||||
|
|
||||||
data InPlacement = InPlacement
|
data InPlacement = InPlacement
|
||||||
{ _ipPlacement :: [Placement] -> Placement
|
{ _ipPlacement :: [Placement] -> Placement
|
||||||
, _ipPlacementID :: Int
|
, _ipPlacementID :: Int
|
||||||
}
|
}
|
||||||
|
|
||||||
makeLenses ''World
|
makeLenses ''World
|
||||||
|
|
||||||
--makeLenses ''Particle
|
--makeLenses ''Particle
|
||||||
makeLenses ''Universe
|
makeLenses ''Universe
|
||||||
makeLenses ''ScreenLayer
|
makeLenses ''ScreenLayer
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import Dodge.Data.Hammer
|
|||||||
import Dodge.Creature.Perception.Data
|
import Dodge.Creature.Perception.Data
|
||||||
import Dodge.Creature.Memory.Data
|
import Dodge.Creature.Memory.Data
|
||||||
import Dodge.Creature.Stance.Data
|
import Dodge.Creature.Stance.Data
|
||||||
import Dodge.Creature.State.Data
|
|
||||||
import Geometry.Data
|
import Geometry.Data
|
||||||
import qualified IntMapHelp as IM
|
import qualified IntMapHelp as IM
|
||||||
import qualified Data.Map.Strict as M
|
import qualified Data.Map.Strict as M
|
||||||
|
|||||||
@@ -1,19 +1,81 @@
|
|||||||
{-# LANGUAGE DeriveGeneric #-}
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
{-# LANGUAGE TemplateHaskell #-}
|
|
||||||
{-# LANGUAGE StrictData #-}
|
{-# LANGUAGE StrictData #-}
|
||||||
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
|
|
||||||
module Dodge.Data.Creature.State where
|
module Dodge.Data.Creature.State where
|
||||||
import GHC.Generics
|
|
||||||
import Data.Aeson
|
import Color
|
||||||
import Dodge.Data.Damage
|
|
||||||
import Dodge.Creature.State.Data
|
|
||||||
import Control.Lens
|
import Control.Lens
|
||||||
|
import Data.Aeson
|
||||||
|
import qualified Data.IntSet as IS
|
||||||
|
import Dodge.Data.Damage
|
||||||
|
import GHC.Generics
|
||||||
|
import Geometry.Data
|
||||||
|
|
||||||
data CreatureState = CrSt
|
data CreatureState = CrSt
|
||||||
{ _csDamage :: [Damage]
|
{ _csDamage :: [Damage]
|
||||||
, _csSpState :: CrSpState
|
, _csSpState :: CrSpState
|
||||||
, _csDropsOnDeath :: CreatureDropType
|
, _csDropsOnDeath :: CreatureDropType
|
||||||
}
|
}
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
instance ToJSON CreatureState where
|
|
||||||
|
instance ToJSON CreatureState where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
|
|
||||||
instance FromJSON CreatureState
|
instance FromJSON CreatureState
|
||||||
|
|
||||||
|
data CreatureDropType
|
||||||
|
= DropAll
|
||||||
|
| DropAmount Int
|
||||||
|
| DropSpecific [Int]
|
||||||
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
|
|
||||||
|
instance ToJSON CreatureDropType where
|
||||||
|
toEncoding = genericToEncoding defaultOptions
|
||||||
|
|
||||||
|
instance FromJSON CreatureDropType
|
||||||
|
|
||||||
|
data CrSpState
|
||||||
|
= Barrel {_piercedPoints :: [Point2]}
|
||||||
|
| GenCr
|
||||||
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
|
|
||||||
|
instance ToJSON CrSpState where
|
||||||
|
toEncoding = genericToEncoding defaultOptions
|
||||||
|
|
||||||
|
instance FromJSON CrSpState
|
||||||
|
|
||||||
|
data Faction
|
||||||
|
= GenericFaction Int
|
||||||
|
| ZombieFaction
|
||||||
|
| EncircleFlock
|
||||||
|
| ChaseCritters
|
||||||
|
| SpawnedBy Int
|
||||||
|
| NoFaction
|
||||||
|
| ColorFaction Color
|
||||||
|
| PlayerFaction
|
||||||
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
|
|
||||||
|
instance ToJSON Faction where
|
||||||
|
toEncoding = genericToEncoding defaultOptions
|
||||||
|
|
||||||
|
instance FromJSON Faction
|
||||||
|
|
||||||
|
data CrGroup
|
||||||
|
= LoneWolf
|
||||||
|
| Swarm
|
||||||
|
{ _swarm :: IS.IntSet
|
||||||
|
, _crGroupID :: Int
|
||||||
|
}
|
||||||
|
| CrGroupID {_crGroupID :: Int}
|
||||||
|
| ShieldGroup
|
||||||
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
|
|
||||||
|
instance ToJSON CrGroup where
|
||||||
|
toEncoding = genericToEncoding defaultOptions
|
||||||
|
|
||||||
|
instance FromJSON CrGroup
|
||||||
|
|
||||||
makeLenses ''CreatureState
|
makeLenses ''CreatureState
|
||||||
|
makeLenses ''CrSpState
|
||||||
|
makeLenses ''CrGroup
|
||||||
|
|||||||
+5
-15
@@ -7,10 +7,14 @@ module Dodge.Data.Item
|
|||||||
, module Dodge.Data.Item.Tweak
|
, module Dodge.Data.Item.Tweak
|
||||||
, module Dodge.Data.Item.Params
|
, module Dodge.Data.Item.Params
|
||||||
, module Dodge.Data.Item.Use
|
, module Dodge.Data.Item.Use
|
||||||
|
, module Dodge.Data.Item.Consumption
|
||||||
|
, module Dodge.Data.Item.CurseStatus
|
||||||
|
, module Dodge.Data.Item.Attachment
|
||||||
) where
|
) where
|
||||||
import GHC.Generics
|
import GHC.Generics
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
import Control.Lens
|
import Control.Lens
|
||||||
|
import Dodge.Data.Item.CurseStatus
|
||||||
import Dodge.Data.Item.Misc
|
import Dodge.Data.Item.Misc
|
||||||
import Dodge.Data.Item.Tweak
|
import Dodge.Data.Item.Tweak
|
||||||
import Dodge.Data.Item.Consumption
|
import Dodge.Data.Item.Consumption
|
||||||
@@ -18,12 +22,9 @@ import Dodge.Data.Item.Use
|
|||||||
import Dodge.Data.Item.Params
|
import Dodge.Data.Item.Params
|
||||||
import Dodge.Data.ItEffect
|
import Dodge.Data.ItEffect
|
||||||
import Dodge.Data.Targeting
|
import Dodge.Data.Targeting
|
||||||
import Dodge.Item.Data
|
|
||||||
import Dodge.Combine.Data
|
import Dodge.Combine.Data
|
||||||
import Dodge.Item.Attachment.Data
|
import Dodge.Data.Item.Attachment
|
||||||
import Color
|
import Color
|
||||||
|
|
||||||
import qualified IntMapHelp as IM
|
|
||||||
data Item = Item
|
data Item = Item
|
||||||
{ _itConsumption :: ItemConsumption
|
{ _itConsumption :: ItemConsumption
|
||||||
, _itUse :: ItemUse
|
, _itUse :: ItemUse
|
||||||
@@ -47,15 +48,4 @@ data Item = Item
|
|||||||
instance ToJSON Item where
|
instance ToJSON Item where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
instance FromJSON Item
|
instance FromJSON Item
|
||||||
data ItemTweaks
|
|
||||||
= NoTweaks
|
|
||||||
| Tweakable
|
|
||||||
{ _tweakParams :: IM.IntMap TweakParam
|
|
||||||
, _tweakSel :: Int
|
|
||||||
}
|
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
|
||||||
instance ToJSON ItemTweaks where
|
|
||||||
toEncoding = genericToEncoding defaultOptions
|
|
||||||
instance FromJSON ItemTweaks
|
|
||||||
makeLenses ''Item
|
makeLenses ''Item
|
||||||
makeLenses ''ItemTweaks
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{-# LANGUAGE DeriveGeneric #-}
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
{-# LANGUAGE TemplateHaskell #-}
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
{-# LANGUAGE StrictData #-}
|
{-# LANGUAGE StrictData #-}
|
||||||
module Dodge.Item.Attachment.Data
|
module Dodge.Data.Item.Attachment
|
||||||
where
|
where
|
||||||
import GHC.Generics
|
import GHC.Generics
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
{-# LANGUAGE DeriveGeneric #-}
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
{-# LANGUAGE StrictData #-}
|
{-# LANGUAGE StrictData #-}
|
||||||
--{-# LANGUAGE TemplateHaskell #-}
|
--{-# LANGUAGE TemplateHaskell #-}
|
||||||
module Dodge.Item.Data where
|
module Dodge.Data.Item.CurseStatus
|
||||||
|
where
|
||||||
import GHC.Generics
|
import GHC.Generics
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
data CurseStatus
|
data CurseStatus
|
||||||
@@ -1,11 +1,15 @@
|
|||||||
{-# LANGUAGE StrictData #-}
|
|
||||||
{-# LANGUAGE DeriveGeneric #-}
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
|
{-# LANGUAGE StrictData #-}
|
||||||
|
|
||||||
module Dodge.Data.Item.HeldUse where
|
module Dodge.Data.Item.HeldUse where
|
||||||
import GHC.Generics
|
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
import Dodge.Combine.Data
|
import Dodge.Combine.Data
|
||||||
import Dodge.Data.CamouflageStatus
|
import Dodge.Data.CamouflageStatus
|
||||||
data HeldUse = HeldDoNothing
|
import GHC.Generics
|
||||||
|
|
||||||
|
data HeldUse
|
||||||
|
= HeldDoNothing
|
||||||
| HeldUseAmmoParams
|
| HeldUseAmmoParams
|
||||||
| HeldOverNozzlesUseGasParams
|
| HeldOverNozzlesUseGasParams
|
||||||
| HeldPJCreation
|
| HeldPJCreation
|
||||||
@@ -20,41 +24,43 @@ data HeldUse = HeldDoNothing
|
|||||||
| HeldTractor
|
| HeldTractor
|
||||||
| HeldForceField
|
| HeldForceField
|
||||||
| HeldShatter
|
| HeldShatter
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
instance ToJSON HeldUse where
|
instance ToJSON HeldUse where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
instance FromJSON HeldUse
|
instance FromJSON HeldUse
|
||||||
data Cuse = CDoNothing
|
data Cuse
|
||||||
|
= CDoNothing
|
||||||
| CHeal Int
|
| CHeal Int
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
instance ToJSON Cuse where
|
instance ToJSON Cuse where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
instance FromJSON Cuse
|
instance FromJSON Cuse
|
||||||
data Euse = EDoNothing
|
data Euse
|
||||||
|
= EDoNothing
|
||||||
| EDetector Detector
|
| EDetector Detector
|
||||||
| EMagShield
|
| EMagShield
|
||||||
| EWristShield
|
| EWristShield
|
||||||
| EHeadLamp
|
| EHeadLamp
|
||||||
| ECamouflage CamouflageStatus
|
| ECamouflage CamouflageStatus
|
||||||
|
|
||||||
| EonWristShield
|
| EonWristShield
|
||||||
|
|
||||||
| EoffWristShield
|
| EoffWristShield
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
instance ToJSON Euse where
|
instance ToJSON Euse where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
instance FromJSON Euse
|
instance FromJSON Euse
|
||||||
data Luse = LDoNothing
|
data Luse
|
||||||
|
= LDoNothing
|
||||||
| LRewind
|
| LRewind
|
||||||
| LShrink
|
| LShrink
|
||||||
| LBlink
|
| LBlink
|
||||||
| LUnsafeBlink
|
| LUnsafeBlink
|
||||||
| LBoost
|
| LBoost
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
instance ToJSON Luse where
|
instance ToJSON Luse where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
instance FromJSON Luse
|
instance FromJSON Luse
|
||||||
data HeldMod = HeldModNothing
|
data HeldMod
|
||||||
|
= HeldModNothing
|
||||||
| PoisonSprayerMod
|
| PoisonSprayerMod
|
||||||
| FlameSpitterMod
|
| FlameSpitterMod
|
||||||
| FlameThrowerMod
|
| FlameThrowerMod
|
||||||
@@ -86,7 +92,7 @@ data HeldMod = HeldModNothing
|
|||||||
| SmgMod
|
| SmgMod
|
||||||
| RevolverXMod
|
| RevolverXMod
|
||||||
| BangConeMod
|
| BangConeMod
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
instance ToJSON HeldMod where
|
instance ToJSON HeldMod where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
instance FromJSON HeldMod
|
instance FromJSON HeldMod
|
||||||
|
|||||||
@@ -5,6 +5,17 @@ module Dodge.Data.Item.Tweak where
|
|||||||
import GHC.Generics
|
import GHC.Generics
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
import Control.Lens
|
import Control.Lens
|
||||||
|
import qualified IntMapHelp as IM
|
||||||
|
data ItemTweaks
|
||||||
|
= NoTweaks
|
||||||
|
| Tweakable
|
||||||
|
{ _tweakParams :: IM.IntMap TweakParam
|
||||||
|
, _tweakSel :: Int
|
||||||
|
}
|
||||||
|
deriving (Eq,Ord,Show,Read,Generic)
|
||||||
|
instance ToJSON ItemTweaks where
|
||||||
|
toEncoding = genericToEncoding defaultOptions
|
||||||
|
instance FromJSON ItemTweaks
|
||||||
data TweakType = TweakPhaseV
|
data TweakType = TweakPhaseV
|
||||||
| TweakTractionPower
|
| TweakTractionPower
|
||||||
| TweakSpinDrag
|
| TweakSpinDrag
|
||||||
@@ -24,3 +35,4 @@ instance ToJSON TweakParam where
|
|||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
instance FromJSON TweakParam
|
instance FromJSON TweakParam
|
||||||
makeLenses ''TweakParam
|
makeLenses ''TweakParam
|
||||||
|
makeLenses ''ItemTweaks
|
||||||
|
|||||||
+43
-38
@@ -1,55 +1,60 @@
|
|||||||
{-# LANGUAGE DeriveGeneric #-}
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
{-# LANGUAGE TemplateHaskell #-}
|
|
||||||
{-# LANGUAGE StrictData #-}
|
{-# LANGUAGE StrictData #-}
|
||||||
module Dodge.Data.Item.Use
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
( module Dodge.Data.Item.Use
|
|
||||||
, module Dodge.Data.Equipment
|
module Dodge.Data.Item.Use (
|
||||||
)
|
module Dodge.Data.Item.Use,
|
||||||
where
|
module Dodge.Data.Item.Use.Equipment,
|
||||||
import GHC.Generics
|
module Dodge.Data.Item.HeldUse,
|
||||||
import Data.Aeson
|
module Dodge.Data.Item.HeldScroll,
|
||||||
import Dodge.Data.Item.HeldUse
|
module Dodge.Data.Item.UseDelay,
|
||||||
import Dodge.Data.Item.HeldScroll
|
) where
|
||||||
import Dodge.Data.Item.UseDelay
|
|
||||||
import Dodge.Data.Hammer
|
|
||||||
import Dodge.Data.Equipment
|
|
||||||
import Control.Lens
|
import Control.Lens
|
||||||
|
import Data.Aeson
|
||||||
|
import Dodge.Data.Hammer
|
||||||
|
import Dodge.Data.Item.HeldScroll
|
||||||
|
import Dodge.Data.Item.HeldUse
|
||||||
|
import Dodge.Data.Item.Use.Equipment
|
||||||
|
import Dodge.Data.Item.UseDelay
|
||||||
|
import GHC.Generics
|
||||||
|
|
||||||
data ItemUse
|
data ItemUse
|
||||||
= RightUse
|
= RightUse
|
||||||
{ _rUse :: HeldUse -- Item -> Creature -> World -> World
|
{ _rUse :: HeldUse
|
||||||
, _useDelay :: UseDelay
|
, _useDelay :: UseDelay
|
||||||
, _useMods :: HeldMod --[(Item -> Creature -> World -> World) -> Item -> Creature -> World -> World]
|
, _useMods :: HeldMod
|
||||||
, _useHammer :: HammerPosition
|
, _useHammer :: HammerPosition
|
||||||
, _useAim :: AimParams
|
, _useAim :: AimParams
|
||||||
, _heldScroll :: HeldScroll --Float -> Creature -> Item -> Item
|
, _heldScroll :: HeldScroll
|
||||||
}
|
}
|
||||||
| LeftUse
|
| LeftUse
|
||||||
{ _lUse :: Luse --Item -> Creature -> World -> World
|
{ _lUse :: Luse
|
||||||
, _useDelay :: UseDelay
|
, _useDelay :: UseDelay
|
||||||
, _useHammer :: HammerPosition
|
, _useHammer :: HammerPosition
|
||||||
, _eqEq :: Equipment
|
, _eqEq :: Equipment
|
||||||
}
|
}
|
||||||
| ConsumeUse
|
| ConsumeUse
|
||||||
{ _cUse :: Cuse --Item -> Creature -> World -> World
|
{ _cUse :: Cuse
|
||||||
}
|
}
|
||||||
| EquipUse
|
| EquipUse
|
||||||
{ _eqEq :: Equipment
|
{ _eqEq :: Equipment
|
||||||
}
|
}
|
||||||
| NoUse
|
| NoUse
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
instance ToJSON ItemUse where
|
instance ToJSON ItemUse where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
instance FromJSON ItemUse
|
instance FromJSON ItemUse
|
||||||
data AimParams = AimParams
|
data AimParams = AimParams
|
||||||
{ _aimWeight :: Int
|
{ _aimWeight :: Int
|
||||||
, _aimRange :: Float
|
, _aimRange :: Float
|
||||||
, _aimZoom :: ItZoom
|
, _aimZoom :: ItZoom
|
||||||
, _aimStance :: AimStance
|
, _aimStance :: AimStance
|
||||||
, _aimHandlePos :: Float
|
, _aimHandlePos :: Float
|
||||||
, _aimMuzPos :: Float
|
, _aimMuzPos :: Float
|
||||||
}
|
}
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
instance ToJSON AimParams where
|
instance ToJSON AimParams where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
instance FromJSON AimParams
|
instance FromJSON AimParams
|
||||||
data AimStance
|
data AimStance
|
||||||
@@ -57,17 +62,17 @@ data AimStance
|
|||||||
| TwoHandFlat
|
| TwoHandFlat
|
||||||
| OneHand
|
| OneHand
|
||||||
| LeaveHolstered
|
| LeaveHolstered
|
||||||
deriving (Eq,Show,Ord,Enum,Read,Generic)
|
deriving (Eq, Show, Ord, Enum, Read, Generic)
|
||||||
instance ToJSON AimStance where
|
instance ToJSON AimStance where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
instance FromJSON AimStance
|
instance FromJSON AimStance
|
||||||
data ItZoom = ItZoom
|
data ItZoom = ItZoom
|
||||||
{ _itZoomMax :: Float
|
{ _itZoomMax :: Float
|
||||||
, _itZoomMin :: Float
|
, _itZoomMin :: Float
|
||||||
, _itZoomFac :: Float
|
, _itZoomFac :: Float
|
||||||
}
|
}
|
||||||
deriving (Eq,Ord,Show,Read,Generic)
|
deriving (Eq, Ord, Show, Read, Generic)
|
||||||
instance ToJSON ItZoom where
|
instance ToJSON ItZoom where
|
||||||
toEncoding = genericToEncoding defaultOptions
|
toEncoding = genericToEncoding defaultOptions
|
||||||
instance FromJSON ItZoom
|
instance FromJSON ItZoom
|
||||||
makeLenses ''ItemUse
|
makeLenses ''ItemUse
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
{-# LANGUAGE TemplateHaskell #-}
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
{-# LANGUAGE StrictData #-}
|
{-# LANGUAGE StrictData #-}
|
||||||
{-# LANGUAGE DeriveGeneric #-}
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
module Dodge.Data.Equipment
|
module Dodge.Data.Item.Use.Equipment
|
||||||
( module Dodge.Data.Equipment.Misc
|
( module Dodge.Data.Equipment.Misc
|
||||||
, module Dodge.Data.Equipment
|
, module Dodge.Data.Item.Use.Equipment
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
import Dodge.Data.Item.HeldUse
|
import Dodge.Data.Item.HeldUse
|
||||||
Reference in New Issue
Block a user