26 lines
897 B
Haskell
26 lines
897 B
Haskell
module Dodge.LightSource.Update where
|
|
|
|
import Control.Lens
|
|
import Dodge.Data.LightSource
|
|
import Geometry
|
|
|
|
updateTempLightSource :: TLSUpdate -> TempLightSource -> Maybe TempLightSource
|
|
updateTempLightSource tlsu = case tlsu of
|
|
DestroyTLS -> const Nothing
|
|
TimerTLS -> timerTLS
|
|
IntensityTLS ConstantIntensity -> updateTempLightSource TimerTLS
|
|
IntensityTLS (TLSFade startcol x) -> fadeTLS startcol x
|
|
|
|
fadeTLS :: Point3 -> Int -> TempLightSource -> Maybe TempLightSource
|
|
fadeTLS startcol x tls
|
|
| t < 1 = Nothing
|
|
| t < x = Just $ tls & tlsParam . lsCol .~ (1 / fromIntegral (x - t)) *.*.* startcol
|
|
| otherwise = Just $ tls & tlsParam . lsCol .~ startcol -- this is wasteful, should be set once at begining
|
|
where
|
|
t = _tlsTime tls
|
|
|
|
timerTLS :: TempLightSource -> Maybe TempLightSource
|
|
timerTLS t
|
|
| _tlsTime t <= 0 = Nothing
|
|
| otherwise = Just $ t & tlsTime -~ 1
|