Refactor machines

This commit is contained in:
2022-07-24 20:55:44 +01:00
parent d6a94ec4bc
commit 24531b75a1
10 changed files with 110 additions and 59 deletions
+5 -35
View File
@@ -84,7 +84,11 @@ module Dodge.Data
, module Dodge.Data.LinearShockwave , module Dodge.Data.LinearShockwave
, module Dodge.Data.TractorBeam , module Dodge.Data.TractorBeam
, module Dodge.Data.MountedObject , module Dodge.Data.MountedObject
, module Dodge.Data.Machine
, module Dodge.Data.GenParams
) where ) where
import Dodge.Data.GenParams
import Dodge.Data.Machine
import Dodge.Data.MountedObject import Dodge.Data.MountedObject
import Dodge.Data.TractorBeam import Dodge.Data.TractorBeam
import Dodge.Data.LinearShockwave import Dodge.Data.LinearShockwave
@@ -161,7 +165,6 @@ import Dodge.Item.Attachment.Data
import Dodge.Item.Data import Dodge.Item.Data
import Data.Preload import Data.Preload
import Picture.Data import Picture.Data
import ShapePicture
import Geometry.Data import Geometry.Data
import Geometry.ConvexPoly import Geometry.ConvexPoly
import Sound.Data import Sound.Data
@@ -294,18 +297,12 @@ data World = World
, _lSelect :: Point2 , _lSelect :: Point2
, _rSelect :: Point2 , _rSelect :: Point2
} }
--deriving (Eq,Ord,Show,Read) --deriving (Eq,Show,Read)
data WorldHammer data WorldHammer
= SubInvHam = SubInvHam
| DoubleMouseHam | DoubleMouseHam
deriving (Eq,Ord,Show,Read,Enum,Bounded) deriving (Eq,Ord,Show,Read,Enum,Bounded)
newtype GenParams = GenParams
{ _sensorCoding :: M.Map DamageType (PaletteColor,DecorationShape)
}
deriving (Eq,Ord,Show,Read)
data DecorationShape = PLUS | SQUARE | CIRCLE | THREELINES
deriving (Eq,Ord,Enum,Show,Read)
data TimeFlowStatus data TimeFlowStatus
= RewindingNow = RewindingNow
@@ -434,30 +431,6 @@ data TerminalToggle = TerminalToggle
{ _ttTriggerID :: Int { _ttTriggerID :: Int
, _ttDeathEffect :: Bool -> Bool , _ttDeathEffect :: Bool -> Bool
} }
data Machine = Machine
{ _mcID :: Int
, _mcWallIDs :: IS.IntSet
, _mcDraw :: Machine -> SPic
, _mcMaterial :: Material
, _mcPos :: Point2
, _mcDir :: Float
, _mcColor :: Color
, _mcHP :: Int
, _mcSensor :: Sensor
, _mcDamage :: [Damage]
, _mcType :: MachineType
, _mcMounts :: M.Map Object Int
, _mcName :: String
, _mcCloseSound :: Maybe SoundID
}
data MachineType
= StaticMachine
| Turret
{ _tuWeapon :: Item
, _tuTurnSpeed :: Float
, _tuFireTime :: Int
, _tuMCrID :: Maybe Int
}
data EffectArguments data EffectArguments
= NoArguments {_cmdEffect :: [TerminalLine]} = NoArguments {_cmdEffect :: [TerminalLine]}
@@ -575,8 +548,6 @@ makeLenses ''World
makeLenses ''FloorItem makeLenses ''FloorItem
--makeLenses ''Particle --makeLenses ''Particle
makeLenses ''Terminal makeLenses ''Terminal
makeLenses ''Machine
makeLenses ''MachineType
makeLenses ''Universe makeLenses ''Universe
makeLenses ''GunBarrels makeLenses ''GunBarrels
makeLenses ''Nozzle makeLenses ''Nozzle
@@ -586,7 +557,6 @@ makeLenses ''ScreenLayer
makeLenses ''WorldBeams makeLenses ''WorldBeams
makeLenses ''TerminalCommand makeLenses ''TerminalCommand
makeLenses ''TerminalInput makeLenses ''TerminalInput
makeLenses ''GenParams
----- ROOM LENSES ----- ROOM LENSES
makeLenses ''Room makeLenses ''Room
+15
View File
@@ -0,0 +1,15 @@
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE StrictData #-}
module Dodge.Data.GenParams
where
import Color
import Dodge.Data.Damage.Type
import Control.Lens
import qualified Data.Map.Strict as M
newtype GenParams = GenParams
{ _sensorCoding :: M.Map DamageType (PaletteColor,DecorationShape)
}
deriving (Eq,Ord,Show,Read)
data DecorationShape = PLUS | SQUARE | CIRCLE | THREELINES
deriving (Eq,Ord,Enum,Show,Read)
makeLenses ''GenParams
+49
View File
@@ -0,0 +1,49 @@
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE StrictData #-}
module Dodge.Data.Machine
where
import Dodge.Data.GenParams
import Dodge.Data.Item
import Sound.Data
import Dodge.Data.Object
import Dodge.Data.Damage
import Dodge.Data.Sensor
import Geometry.Data
import Color
import Dodge.Data.Material
import qualified Data.IntSet as IS
import qualified Data.Map.Strict as M
import Control.Lens
data MachineDraw = MachineDrawMempty
| MachineDrawTerminal
| MachineDrawTurret
| MachineDrawDamageSensor Float (PaletteColor,DecorationShape)
data Machine = Machine
{ _mcID :: Int
, _mcWallIDs :: IS.IntSet
, _mcDraw :: MachineDraw --Machine -> SPic
, _mcMaterial :: Material
, _mcPos :: Point2
, _mcDir :: Float
, _mcColor :: Color
, _mcHP :: Int
, _mcSensor :: Sensor
, _mcDamage :: [Damage]
, _mcType :: MachineType
, _mcMounts :: M.Map Object Int
, _mcName :: String
, _mcCloseSound :: Maybe SoundID
}
data MachineType
= StaticMachine
| Turret
{ _tuWeapon :: Item
, _tuTurnSpeed :: Float
, _tuFireTime :: Int
, _tuMCrID :: Maybe Int
}
makeLenses ''Machine
makeLenses ''MachineType
+1 -2
View File
@@ -45,8 +45,7 @@ defaultMachine :: Machine
defaultMachine = Machine defaultMachine = Machine
{ _mcID = 0 { _mcID = 0
, _mcWallIDs = mempty , _mcWallIDs = mempty
-- , _mcUpdate = defaultMachineUpdate , _mcDraw = MachineDrawMempty
, _mcDraw = const mempty
, _mcColor = white , _mcColor = white
, _mcPos = V2 0 0 , _mcPos = V2 0 0
, _mcDir = 0 , _mcDir = 0
+33
View File
@@ -0,0 +1,33 @@
module Dodge.Machine.Draw
where
import Dodge.Placement.Instance.Sensor
import Dodge.Placement.Instance.Turret
import Shape
import Picture
import Geometry
import Dodge.Data.Machine
import ShapePicture
drawMachine :: MachineDraw -> Machine -> SPic
drawMachine md = case md of
MachineDrawMempty -> const mempty
MachineDrawTerminal -> terminalSPic
MachineDrawTurret -> drawTurret
MachineDrawDamageSensor w pcds -> sensorSPic w pcds
terminalSPic :: Machine -> SPic
terminalSPic = noPic . terminalShape
terminalShape :: Machine -> Shape
terminalShape mc = colorSH col (prismPoly
[V3 10 10 20, V3 (-10) 10 20, V3 (-10) (-10) 10, V3 10 (-10) 10]
[V3 10 10 0, V3 (-10) 10 0, V3 (-10) (-10) 0, V3 10 (-10) 0]
)
<> colorSH black (prismPoly
[V3 8 8 20, V3 (-8) 8 20, V3 0 (-8) 10]
[V3 8 8 19, V3 (-8) 8 19, V3 0 (-8) 9]
--[V3 8 8 20, V3 (-8) 8 20, V3 (-8) (-8) 10, V3 8 (-8) 10]
--[V3 8 8 19, V3 (-8) 8 19, V3 (-8) (-8) 9, V3 8 (-8) 9]
)
where
col = _mcColor mc
+1 -1
View File
@@ -53,7 +53,7 @@ analyser proxreq pslight psmc = extTrigLitPos pslight $ \tp ->
-- = triggers . ix (fromJust $ _plMID tp) .~ const (_sensToggle $ _mcSensor mc) -- = triggers . ix (fromJust $ _plMID tp) .~ const (_sensToggle $ _mcSensor mc)
themachine = defaultMachine & mcColor .~ aquamarine themachine = defaultMachine & mcColor .~ aquamarine
-- & mcUpdate .~ mcProximitySensorUpdate -- & mcUpdate .~ mcProximitySensorUpdate
& mcDraw .~ terminalSPic & mcDraw .~ MachineDrawTerminal
& mcHP .~ 100 & mcHP .~ 100
& mcSensor .~ defaultProximitySensor {_proxRequirement = proxreq} & mcSensor .~ defaultProximitySensor {_proxRequirement = proxreq}
+2 -1
View File
@@ -1,6 +1,7 @@
module Dodge.Placement.Instance.Sensor module Dodge.Placement.Instance.Sensor
( lightSensor ( lightSensor
, damageSensor , damageSensor
, sensorSPic -- this should be moved
) where ) where
import Color import Color
import Dodge.LightSource import Dodge.LightSource
@@ -28,7 +29,7 @@ damageSensor dt wdth mtrid ps = pContID ps (PutLS $ lsPosCol (V3 0 0 30) 0.1)
& mcColor .~ yellow & mcColor .~ yellow
& mcMounts . at ObTrigger .~ mtrid & mcMounts . at ObTrigger .~ mtrid
& mcMounts . at ObLightSource ?~ lsid & mcMounts . at ObLightSource ?~ lsid
& mcDraw .~ sensorSPic wdth (_sensorCoding (_genParams gw) M.! dt) & mcDraw .~ MachineDrawDamageSensor wdth (_sensorCoding (_genParams gw) M.! dt)
& mcSensor .~ DamageSensor False 0 dt & mcSensor .~ DamageSensor False 0 dt
) )
defaultSensorWall defaultSensorWall
+1 -18
View File
@@ -4,7 +4,6 @@ module Dodge.Placement.Instance.Terminal
, putTerminal , putTerminal
, simpleTermMessage , simpleTermMessage
, terminalColor , terminalColor
, terminalSPic
, accessTerminal , accessTerminal
) where ) where
import Dodge.Data import Dodge.Data
@@ -48,7 +47,7 @@ putTerminal mc tm
putMessageTerminal :: Color -> Terminal -> Placement putMessageTerminal :: Color -> Terminal -> Placement
putMessageTerminal col = putTerminal $ defaultMachine putMessageTerminal col = putTerminal $ defaultMachine
& mcColor .~ col & mcColor .~ col
& mcDraw .~ terminalSPic & mcDraw .~ MachineDrawTerminal --terminalSPic
& mcHP .~ 100 & mcHP .~ 100
termButton :: Button termButton :: Button
@@ -68,22 +67,6 @@ termButton = Button
terminalColor :: Color terminalColor :: Color
terminalColor = dark magenta terminalColor = dark magenta
terminalSPic :: Machine -> SPic
terminalSPic = noPic . terminalShape
terminalShape :: Machine -> Shape
terminalShape mc = colorSH col (prismPoly
[V3 10 10 20, V3 (-10) 10 20, V3 (-10) (-10) 10, V3 10 (-10) 10]
[V3 10 10 0, V3 (-10) 10 0, V3 (-10) (-10) 0, V3 10 (-10) 0]
)
<> colorSH black (prismPoly
[V3 8 8 20, V3 (-8) 8 20, V3 0 (-8) 10]
[V3 8 8 19, V3 (-8) 8 19, V3 0 (-8) 9]
--[V3 8 8 20, V3 (-8) 8 20, V3 (-8) (-8) 10, V3 8 (-8) 10]
--[V3 8 8 19, V3 (-8) 8 19, V3 (-8) (-8) 9, V3 8 (-8) 9]
)
where
col = _mcColor mc
accessTerminal :: Maybe Int -> World -> World accessTerminal :: Maybe Int -> World -> World
accessTerminal mtmid w = case mtmid of accessTerminal mtmid w = case mtmid of
+1 -1
View File
@@ -22,7 +22,7 @@ putLasTurret :: Float -> Placement
putLasTurret rotSpeed = sps0 $ PutMachine (reverse $ square wdth) putLasTurret rotSpeed = sps0 $ PutMachine (reverse $ square wdth)
(defaultMachine (defaultMachine
& mcColor .~ blue & mcColor .~ blue
& mcDraw .~ drawTurret & mcDraw .~ MachineDrawTurret
& mcType .~ (lasTurret & tuTurnSpeed .~ rotSpeed) & mcType .~ (lasTurret & tuTurnSpeed .~ rotSpeed)
& mcHP .~ 50000 & mcHP .~ 50000
) )
+2 -1
View File
@@ -1,6 +1,7 @@
module Dodge.Render.ShapePicture module Dodge.Render.ShapePicture
( worldSPic ( worldSPic
) where ) where
import Dodge.Machine.Draw
import Dodge.LinearShockwave.Draw import Dodge.LinearShockwave.Draw
import Dodge.Prop.Draw import Dodge.Prop.Draw
import Dodge.TractorBeam.Draw import Dodge.TractorBeam.Draw
@@ -320,7 +321,7 @@ btSPic bt = uncurryV translateSPf (_btPos bt)
$ rotateSP (_btRot bt) (drawButton (_btPict bt) bt) $ rotateSP (_btRot bt) (drawButton (_btPict bt) bt)
mcSPic :: Machine -> SPic mcSPic :: Machine -> SPic
mcSPic bt = uncurryV translateSPf (_mcPos bt) mcSPic bt = uncurryV translateSPf (_mcPos bt)
$ rotateSP (_mcDir bt) (_mcDraw bt bt) $ rotateSP (_mcDir bt) (drawMachine (_mcDraw bt) bt)
soundPic :: Configuration -> World -> Sound -> Picture soundPic :: Configuration -> World -> Sound -> Picture
soundPic cfig w s = fixedSizePicClampArrow 50 50 thePic p cfig w soundPic cfig w s = fixedSizePicClampArrow 50 50 thePic p cfig w