module Dodge.Placement.Instance.Button ( putLitButOnPos, extTrigLitPos, putLitButOnPosExtTrig, ) where import Color import Control.Lens import Data.Maybe import Dodge.Data.GenWorld import Dodge.LevelGen.PlacementHelper import Dodge.LevelGen.Switch import Dodge.LightSource import Dodge.Placement.Instance.LightSource --import Dodge.PlacementSpot import Geometry import Shape --triggerSwitchSPic :: Color -> Color -> PlacementSpot -> Placement --triggerSwitchSPic c1 c2 ps = psPtCont ps (PutTrigger False) $ -- \tp -> -- Just $ -- pContID -- ps -- ( PutButton -- ( makeSwitch -- c1 -- c2 -- (SetTrigger True $ trigid tp) -- (SetTrigger False $ trigid tp) -- ) -- ) -- (const Nothing) -- where -- trigid tp = fromJust $ _plMID tp -- --triggerSwitchSPicLight :: Color -> Color -> PlacementSpot -> Placement --triggerSwitchSPicLight c1 c2 ps = psPtCont ps (PutTrigger False) $ -- \tp -> Just $ -- pContID atFstLnkOut (PutLS thels) $ -- \lsid -> -- Just $ -- pContID -- ps -- (PutButton (makeSwitch c1 c2 (oneff lsid $ trigid tp) (offeff lsid $ trigid tp))) -- (const Nothing) -- where -- thels = lsColPosRad (V3 0.5 0 0) (V3 0 0 78) 75 -- trigid tp = fromJust $ _plMID tp -- oneff lsid tid = WorldEffects [SetLSCol (V3 0 0.5 0) lsid, SetTrigger True tid] -- offeff lsid tid = WorldEffects [SetLSCol (V3 0.5 0 0) lsid, SetTrigger False tid] --triggerSwitch :: Color -> PlacementSpot -> Placement --triggerSwitch col ps = psPtCont ps (PutTrigger False) $ -- \tp -> -- Just $ -- pContID -- ps -- (PutButton (makeSwitch col col (SetTrigger True $ trigid tp) (SetTrigger False $ trigid tp))) -- (const Nothing) -- where -- trigid tp = fromJust $ _plMID tp putLitButOnPos :: Color -> PlacementSpot -> (Placement -> Maybe Placement) -> Placement putLitButOnPos col theps subpl = plSpot .~ theps $ mntLSOn shp ls 0 (V3 0 (-40) 40) $ \pmnt -> jps0' (PutButton (makeButton col (changeLight $ pmnt ^?! plMID . _Just) & btPos .~ V2 0 (-1) & btRot .~ pi)) subpl <&> plSpot .~ _plSpot pmnt where shp = fmap (fmap $ colorSH col) aShape changeLight = SetLSCol (V3 0 0.5 0) ls = lsColPosRad (V3 0.5 0 0) (V3 0 0 50) 50 -- creates a lit external trigger, passes the trigger placement forward extTrigLitPos :: PlacementSpot -> (Placement -> Maybe Placement) -> Placement extTrigLitPos ps f = psPtCont ps (PutTrigger False) $ \tp -> Just $ pContID (_plSpot tp) (PutLS thels) $ \lsid -> Just $ pContID (_plSpot tp) (PutMod $ themod lsid tp) $ const (f tp) where themod lsid tp = ModIDID { _mdID = 0 , _mdExternalID1 = lsid , _mdExternalID2 = fromJust $ _plMID tp , _mdUpdate = MdTrigIf (MdSetLSCol (V3 0 0.5 0)) (MdSetLSCol (V3 0.5 0 0)) } thels = lsColPosRad (V3 0.5 0 0) (V3 0 0 78) 75 putLitButOnPosExtTrig :: Color -> PlacementSpot -> Placement putLitButOnPosExtTrig col thePS = putLitButOnPosExtTrig' col thePS (const . const . const Nothing) putLitButOnPosExtTrig' :: Color -> PlacementSpot -> (Placement -> Placement -> Placement -> Maybe Placement) -> Placement putLitButOnPosExtTrig' col thePS cnt = psPtCont thePS (PutTrigger False) $ \tp -> Just $ plSpot .~ _plSpot tp $ mntLSOn shp ls 0 (V3 0 (-40) 40) $ \plmnt -> jps0' ( PutButton (makeButton col (buteff (trigid tp) (fromJust $ _plMID plmnt))) { _btPos = V2 0 (-1) , _btRot = pi } ) (cnt tp plmnt) <&> plSpot .~ _plSpot plmnt where buteff i = SetTriggerAndSetLSCol True i (V3 0 0.5 0) shp = fmap (fmap $ colorSH col) aShape trigid tp = fromJust $ _plMID tp ls = lsColPosRad (V3 0.5 0 0) (V3 0 0 50) 50