58 lines
1.5 KiB
Haskell
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
|