This commit is contained in:
2022-07-26 11:51:53 +01:00
parent 5c8e786dfa
commit c2707719fb
12 changed files with 740 additions and 718 deletions
+170 -176
View File
@@ -1,125 +1,110 @@
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
'A' -> 'A' ->
[ clickDetector ITEMDETECTOR [ clickDetector ITEMDETECTOR
, makeTypeCraftNum 1 TRANSFORMER , makeTypeCraftNum 1 TRANSFORMER
, makeTypeCraftNum 2 CAN , makeTypeCraftNum 2 CAN
, makeTypeCraftNum 2 PIPE , makeTypeCraftNum 2 PIPE
] ]
'B' -> 'B' ->
[ forceFieldGun [ forceFieldGun
, wristArmour , wristArmour
, wristArmour , wristArmour
@@ -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,17 +167,19 @@ 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
'K' -> makeTypeCraftNum 10 TRANSFORMER
]
'K' ->
[ autoRifle [ autoRifle
, makeTypeCraftNum 7 MICROCHIP , makeTypeCraftNum 7 MICROCHIP
, makeTypeCraftNum 4 HARDWARE , makeTypeCraftNum 4 HARDWARE
@@ -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
-55
View File
@@ -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
+391 -383
View File
@@ -1,475 +1,479 @@
{-# 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;
circular imports are probably not a good idea. 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
{ _cameraCenter :: Point2 data CWorld = CWorld
, _cameraRot :: Float { _cameraCenter :: Point2
, _cameraZoom :: Float -- smaller values zoom out , _cameraRot :: Float
, _itemZoom :: Float , _cameraZoom :: Float -- smaller values zoom out
, _defaultZoom :: Float , _itemZoom :: Float
, _cameraViewFrom :: Point2 , _defaultZoom :: Float
, _viewDistance :: Float , _cameraViewFrom :: Point2
, _boundBox :: [Point2] , _viewDistance :: Float
, _boundDist :: (Float,Float,Float,Float) -- NSEW, S and W negative , _boundBox :: [Point2]
, _creatures :: IM.IntMap Creature , _boundDist :: (Float, Float, Float, Float) -- NSEW, S and W negative
, _crZoning :: IM.IntMap (IM.IntMap IS.IntSet) --Zoning IM.IntMap Creature , _creatures :: IM.IntMap Creature
, _creatureGroups :: IM.IntMap CrGroupParams , _crZoning :: IM.IntMap (IM.IntMap IS.IntSet) --Zoning IM.IntMap Creature
, _itemPositions :: IM.IntMap ItemPos , _creatureGroups :: IM.IntMap CrGroupParams
, _clouds :: [Cloud] , _itemPositions :: IM.IntMap ItemPos
, _clZoning :: IM.IntMap (IM.IntMap [Cloud]) --Zoning IM.IntMap Creature , _clouds :: [Cloud]
, _gusts :: IM.IntMap Gust , _clZoning :: IM.IntMap (IM.IntMap [Cloud]) --Zoning IM.IntMap Creature
, _gsZoning :: IM.IntMap (IM.IntMap IS.IntSet) , _gusts :: IM.IntMap Gust
, _props :: IM.IntMap Prop , _gsZoning :: IM.IntMap (IM.IntMap IS.IntSet)
, _projectiles :: IM.IntMap Proj , _props :: IM.IntMap Prop
, _instantBullets :: [Bullet] , _projectiles :: IM.IntMap Proj
, _bullets :: [Bullet] , _instantBullets :: [Bullet]
, _radarSweeps :: [RadarSweep] , _bullets :: [Bullet]
, _energyBalls :: [EnergyBall] , _radarSweeps :: [RadarSweep]
, _posEvents :: [PosEvent] , _energyBalls :: [EnergyBall]
, _flames :: [Flame] , _posEvents :: [PosEvent]
, _sparks :: [Spark] , _flames :: [Flame]
, _radarBlips :: [RadarBlip] , _sparks :: [Spark]
, _flares :: [Flare] , _radarBlips :: [RadarBlip]
, _newBeams :: WorldBeams , _flares :: [Flare]
, _beams :: WorldBeams , _newBeams :: WorldBeams
, _teslaArcs :: [TeslaArc] , _beams :: WorldBeams
, _shockwaves :: [Shockwave] , _teslaArcs :: [TeslaArc]
, _lasers :: [LaserStart] , _shockwaves :: [Shockwave]
, _lasersToDraw :: [Laser] , _lasers :: [LaserStart]
, _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
toEncoding = genericToEncoding defaultOptions
instance FromJSON WorldBeams
{- Objects without ids. instance ToJSON WorldBeams where
Update themselves, perhaps with side effects. -} toEncoding = genericToEncoding defaultOptions
--data Particle = DPart
-- = ShockLine instance FromJSON WorldBeams
-- { _ptUpdate :: World -> Particle -> (World, Maybe Particle)
-- , _ptPointDirs :: [[(Point2,Float)]] type HitEffect' =
-- , _ptTimer :: Int Flame ->
-- , _ptColor :: Color Stream (Of (Point2, Either Creature Wall)) Identity () ->
-- , _ptCenter :: Point2 World ->
-- } (World, Maybe Flame)
--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
-1
View File
@@ -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
+72 -10
View File
@@ -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
data CreatureState = CrSt import Data.Aeson
{ _csDamage :: [Damage] import qualified Data.IntSet as IS
import Dodge.Data.Damage
import GHC.Generics
import Geometry.Data
data CreatureState = CrSt
{ _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
View File
@@ -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
+35 -29
View File
@@ -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
@@ -73,12 +79,12 @@ data HeldMod = HeldModNothing
| VolleyGunMod | VolleyGunMod
| AutoRifleMod | AutoRifleMod
| BangRodMod | BangRodMod
| ElephantGunMod | ElephantGunMod
| AutoAmrMod | AutoAmrMod
| MachineGunMod | MachineGunMod
| ModWithDirectedTeleport HeldMod | ModWithDirectedTeleport HeldMod
| BangStickMod | BangStickMod
| PistolMod | PistolMod
| AutoPistolMod | AutoPistolMod
| MachinePistolMod | MachinePistolMod
| BurstRifleMod | BurstRifleMod
@@ -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
+12
View File
@@ -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
+50 -45
View File
@@ -1,75 +1,80 @@
{-# 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
= TwoHandTwist = TwoHandTwist
| 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
makeLenses ''AimParams makeLenses ''AimParams
makeLenses ''ItZoom makeLenses ''ItZoom
@@ -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