{-# LANGUAGE TupleSections #-}
{- Bullet update.  -}
module Dodge.Particle.Bullet.Update
    ( mvBullet
    ) where
import Dodge.Data
--import Dodge.Base
import Dodge.WorldEvent.ThingsHit
--import Picture
import Geometry
--import Geometry.Vector3D

import Control.Lens
{-
Update for a generic bullet.
-}
mvBullet :: World -> Particle -> (World, Maybe Particle)
mvBullet w bt 
    | t <= 0 = wAnd Nothing
    | t <  4 = wAnd $ Just $ bt
        & btPassThrough' .~ Nothing
        & btTrail' .~ (p:p:ps)
        & btTimer' -~ 1                      
--    | otherwise = hiteff bt (thingsHitExceptCr3D' mcr (addZ 20 p) (addZ 20 (p +.+ vel)) w) w
    | otherwise = hiteff bt (thingsHitExceptCr mcr p (p +.+ vel) w) w
  where 
    wAnd    = (w,)
    mcr     = _btPassThrough' bt
    (p:ps)  = _btTrail' bt
    vel     = _btVel' bt
    hiteff  = _btHitEffect' bt
    t       = _btTimer' bt
