{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE StrictData #-}
module Dodge.Creature.State.Data
  where
--import Geometry
import Geometry.Data
import Dodge.Data.DamageType
import Color

import Control.Lens
import qualified Data.IntSet as IS
import qualified Data.Vector as V
data CreatureState = CrSt 
    { _crDamage  :: [DamageType]
    , _crPastDamage :: V.Vector [DamageType]
    , _crSpState :: CrSpState
    , _crDropsOnDeath :: CreatureDropType
    }
data CreatureDropType
    = DropAll
    | DropAmount Int
    | DropSpecific [Int]
data CrSpState 
    = Barrel { _piercedPoints :: [Point2]}
    | GenCr
  deriving (Eq,Show,Ord)
data Faction 
    = GenericFaction Int
    | ZombieFaction
    | EncircleFlock
    | ChaseCritters
    | SpawnedBy Int
    | NoFaction
    | ColorFaction Color
    | PlayerFaction
  deriving (Eq,Show)
data CrGroup
    = LoneWolf
    | Swarm 
        { _swarm :: IS.IntSet 
        , _crGroupID :: Int
        }
    | CrGroupID { _crGroupID :: Int }
    | ShieldGroup
  deriving (Eq, Show)
makeLenses ''CreatureState
makeLenses ''CrSpState
