29 lines
965 B
Haskell
29 lines
965 B
Haskell
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
|