{-# OPTIONS_HADDOCK hide #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Imj.Game.Hamazed.World.Number(
getColliding
, computeActualLaserShot
, destroyedNumbersAnimations
) where
import Imj.Prelude
import Data.Char( intToDigit )
import Imj.Game.Hamazed.Loop.Event
import Imj.GameItem.Weapon.Laser
import Imj.Geo.Continuous
import Imj.Geo.Discrete
import Imj.Graphics.Animation
getColliding :: Coords Pos -> [Number] -> [Number]
getColliding pos =
filter (\(Number (PosSpeed pos' _) _) -> pos == pos')
destroyedNumbersAnimations :: Either SystemTime KeyTime
-> Direction
-> World
-> [Number]
-> [Animation]
destroyedNumbersAnimations keyTime dir world =
let laserSpeed = speed2vec $ coordsForDirection dir
in concatMap (destroyedNumberAnimations keyTime laserSpeed world)
destroyedNumberAnimations :: Either SystemTime KeyTime
-> Vec2 Vel
-> World
-> Number
-> [Animation]
destroyedNumberAnimations k laserSpeed world (Number (PosSpeed pos _) n) =
let char = intToDigit n
envFunc = environmentInteraction world WorldFrame
in catMaybes ([animatedPolygon n pos envFunc (Speed 1) k char])
++ fragmentsFreeFallThenExplode (scalarProd 0.8 laserSpeed) pos envFunc (Speed 2) k char