Files
loop/src/Dodge/Placement/Instance/Sensor.hs
T
2022-08-19 11:28:19 +01:00

58 lines
1.5 KiB
Haskell

module Dodge.Placement.Instance.Sensor (
lightSensor,
damageSensor,
) where
import Color
import Control.Lens
import qualified Data.Map.Strict as M
import Dodge.Data.GenWorld
import Dodge.Default
import Dodge.LevelGen.Data
import Dodge.LightSource
import Geometry
damageSensor ::
DamageType ->
Float ->
Maybe Int ->
PlacementSpot ->
Placement
damageSensor dt wdth mtrid ps = pContID ps (PutLS $ lsPosCol (V3 0 0 30) 0.1) $
\lsid -> psPtJpl ps
. PutUsingGenParams
$ \gw ->
( gw
, PutMachine
(reverse $ square wdth)
( defaultMachine
& mcColor .~ yellow
& mcMounts . at ObTrigger .~ mtrid
& mcMounts . at ObLightSource ?~ lsid
& mcType
.~ McSensor
( DamageSensor
False
0
dt
(_sensorCoding (_cwgParams $ _cwGen (_cWorld gw)) M.! dt)
(damageTypeThreshold dt)
)
)
defaultSensorWall
)
damageTypeThreshold :: DamageType -> Int
damageTypeThreshold dt = case dt of
FLAMING -> 1000
LASERING -> 1000
ELECTRICAL -> 500
_ -> undefined
lightSensor ::
Float ->
Maybe Int ->
PlacementSpot ->
Placement
lightSensor = damageSensor LASERING