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