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.PlacementHelper 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