module Dodge.WorldEffect where import Dodge.SoundLogic import Dodge.WorldEvent.Cloud import Dodge.Data import Dodge.Inventory.Lock import Dodge.Placement.Instance.Terminal import System.Random import Control.Lens doWorldEffect :: WorldEffect -> World -> World doWorldEffect we = case we of NoWorldEffect -> id SetTrigger bool tid -> triggers . ix tid .~ bool SetLSCol col lsid -> lightSources . ix lsid . lsParam . lsCol .~ col AccessTerminal mtmid -> accessTerminal mtmid WorldEffects wes -> \w -> foldr doWorldEffect w wes UnlockInv cid -> unlockInv cid MakeStartCloudAt p -> makeStartCloudAt p TorqueCr x cid -> torqueCr x cid SoundStart so p sid mi -> soundStart so p sid mi torqueCr :: Float -> Int -> World -> World torqueCr x cid w | cid == 0 = set randGen g $ over cameraRot (+rot) w | otherwise = set randGen g $ over (creatures . ix cid . crDir) (+rot) w where (rot, g) = randomR (-x,x) $ _randGen w