packages feed

nyx-game-0.1.0.0: app/Attack/SpiralAttack.hs

{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses  #-}
{-# LANGUAGE DuplicateRecordFields  #-}
{-# LANGUAGE FlexibleInstances  #-}
{-# LANGUAGE TemplateHaskell #-}

module Attack.SpiralAttack where

import qualified SDL

import Play.Engine.Types
import Control.Lens
import qualified Data.DList as DL

import Bullet
import Play.Engine
import qualified Attack as A
import qualified Play.Engine.Movement as MV


make :: Int -> Int -> (Int, Float) -> MV.Movement -> SDL.Texture -> A.Attack
make numOfOutPoints initAngle' (every, change) mv txt =
  A.make
    mv
    (mkAngles initAngle' numOfOutPoints)
    every
    txt
    spiralUpdate

  where
    spiralUpdate :: IPoint -> IPoint -> A.Attack -> (DL.DList Bullet, A.Attack)
    spiralUpdate posi sz attack =
      A.update posi sz attack
        & over (_2 . A.outAngles) (map $ (+) change)