module BigAsteroid where import Animation import Updating import Graphics.Gloss.Data.Picture import Graphics.Gloss.Data.Color import qualified Moving as M import Data.WrapAround import ResourceTracker import GHC.Float import Combat import Data.Maybe import Common asteroidRadius = 30.0 punch = 100.0 data BigAsteroid = BigAsteroid { location :: WrapPoint , idealTargetLocation :: Maybe WrapPoint , velocity :: Velocity , wrapMap :: WrapMap , animDefault0 :: Picture } new :: ResourceTracker -> WrapMap -> WrapPoint -> Velocity -> BigAsteroid new rt wmap location velocity = let pic = fromMaybe (Scale 0.20 0.20 (Color white (Text "Error! Missing image!"))) (getImage rt "asteroidbig.bmp") in BigAsteroid { location = location , velocity = velocity , wrapMap = wmap , idealTargetLocation = Nothing , animDefault0 = pic } instance Animation BigAsteroid where image self _ = animDefault0 self instance M.Locatable BigAsteroid where center = location instance M.Moving BigAsteroid where velocity = velocity instance M.Colliding BigAsteroid where collisionRadius _ = asteroidRadius instance InternallyUpdating BigAsteroid where preUpdate asteroid t = updateIdealTargetLocation t asteroid postUpdate asteroid t = let location' = fromMaybe (location asteroid) (idealTargetLocation asteroid) in asteroid { location = location' , idealTargetLocation = Nothing } updateIdealTargetLocation t asteroid = asteroid { idealTargetLocation = Just (M.idealNewLocation (wrapMap asteroid) (location asteroid) (velocity asteroid) t) } instance Damageable BigAsteroid where inflictDamage = const instance Damaging BigAsteroid where damageEnergy _ = punch