59 lines
1.5 KiB
Haskell
59 lines
1.5 KiB
Haskell
{-# LANGUAGE DeriveGeneric #-}
|
|
{-# LANGUAGE DeriveAnyClass #-}
|
|
{-# LANGUAGE StrictData #-}
|
|
{-# LANGUAGE TemplateHaskell #-}
|
|
|
|
module Dodge.Data.Beam where
|
|
|
|
import Color
|
|
import Control.Lens
|
|
import Data.Aeson
|
|
import Data.Aeson.TH
|
|
import Geometry.Data
|
|
|
|
{- | Linear beams. Last only one frame.
|
|
- Can interact with one another in a limited manner
|
|
- can probably be moved to a separate file
|
|
-}
|
|
data Beam = Beam
|
|
{ _bmDraw :: BeamDraw -- Beam -> Picture
|
|
, _bmPos :: Point2
|
|
, _bmDir :: Float
|
|
, _bmDamage :: Int
|
|
, _bmColor :: Color
|
|
, _bmPoints :: [Point2]
|
|
, _bmFirstPoints :: [Point2]
|
|
, _bmRange :: Float
|
|
, _bmPhaseV :: Float
|
|
, _bmOrigin :: Maybe Int
|
|
, _bmType :: BeamType
|
|
}
|
|
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data BeamDraw
|
|
= BasicBeamDraw
|
|
| BeamDrawColor Color
|
|
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data BeamCombineType
|
|
= FlameBeamCombine
|
|
| LasBeamCombine
|
|
| TeslaBeamCombine
|
|
| SplitBeamCombine
|
|
| NoBeamCombine
|
|
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
data BeamType
|
|
= BeamCombine
|
|
{ _beamCombine :: BeamCombineType -- (Point2 , (Point2,Point2,Beam) , (Point2,Point2,Beam)) -> World -> World
|
|
}
|
|
| BeamSimple
|
|
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
|
|
|
makeLenses ''BeamType
|
|
makeLenses ''Beam
|
|
deriveJSON defaultOptions ''BeamDraw
|
|
deriveJSON defaultOptions ''BeamCombineType
|
|
deriveJSON defaultOptions ''BeamType
|
|
deriveJSON defaultOptions ''Beam
|