Modularise item data, change tesla arc from projectile to particle

This commit is contained in:
2021-06-06 16:08:56 +02:00
parent c2f7c6e245
commit 0b8ac97fe9
25 changed files with 141 additions and 85 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 431 KiB

After

Width:  |  Height:  |  Size: 1.3 MiB

+1
View File
@@ -6,5 +6,6 @@ uniform sampler2D aTexture;
void main() void main()
{ {
// fColor = vec4 (1,1,0,1);
fColor = texture(aTexture, gTexPos); fColor = texture(aTexture, gTexPos);
} }
+1
View File
@@ -158,6 +158,7 @@ startInventory :: IM.IntMap Item
startInventory = IM.fromList (zip [0..20] startInventory = IM.fromList (zip [0..20]
( (
[hvAutoGun [hvAutoGun
,teslaGun
,blinkGun ,blinkGun
,miniGun ,miniGun
,bezierGun ,bezierGun
+1
View File
@@ -2,6 +2,7 @@ module Dodge.Creature.Action.Movement
where where
import Dodge.Data import Dodge.Data
import Dodge.Creature.Stance.Data import Dodge.Creature.Stance.Data
import Dodge.Item.Data
import Geometry import Geometry
import Data.Maybe import Data.Maybe
+6 -2
View File
@@ -24,7 +24,7 @@ basicCrPict
-> Picture -> Picture
basicCrPict col cr w = pictures $ basicCrPict col cr w = pictures $
targetingPic ++ targetingPic ++
[ tr . onLayer CrLayer . piercingMod $ bluntScale naked [ tr . onLayer CrLayer . piercingMod $ bluntScale $ naked
-- , drawAwakeLevel cr -- , drawAwakeLevel cr
, tr $ drawEquipment cr , tr $ drawEquipment cr
] ]
@@ -37,7 +37,11 @@ basicCrPict col cr w = pictures $
| strikeMelee = color white $ circleSolid $ _crRad cr | strikeMelee = color white $ circleSolid $ _crRad cr
| pdam > 200 = color red $ circleSolid $ _crRad cr | pdam > 200 = color red $ circleSolid $ _crRad cr
| pdam > 99 = color white $ circleSolid $ _crRad cr | pdam > 99 = color white $ circleSolid $ _crRad cr
| otherwise = pictures [color col' $ circleSolid $ _crRad cr, circLine $ _crRad cr] | otherwise = pictures
[ translate (0.25 * crad) 0 $ circleSolid (crad * 0.5)
, scale 0.5 1 $ color col' $ circleSolid $ _crRad cr, circLine $ _crRad cr
]
crad = _crRad cr
pastDams = _crPastDamage $ _crState cr pastDams = _crPastDamage $ _crState cr
pdam = sum $ concatMap (map _dmAmount) pastDams pdam = sum $ concatMap (map _dmAmount) pastDams
col' = light . light . light $ light col col' = light . light . light $ light col
+1
View File
@@ -1,6 +1,7 @@
module Dodge.Creature.Property module Dodge.Creature.Property
where where
import Dodge.Data import Dodge.Data
import Dodge.Item.Data
import Geometry import Geometry
import Control.Lens import Control.Lens
+1
View File
@@ -1,5 +1,6 @@
module Dodge.Creature.State where module Dodge.Creature.State where
import Dodge.Data import Dodge.Data
import Dodge.Item.Data
import Dodge.Creature.State.Data import Dodge.Creature.State.Data
import Dodge.Creature.Stance.Data import Dodge.Creature.Stance.Data
--import Dodge.Creature.Test --import Dodge.Creature.Test
+13 -38
View File
@@ -25,6 +25,7 @@ import Dodge.Data.DamageType
import Dodge.Config.Data import Dodge.Config.Data
import Dodge.Config.KeyConfig import Dodge.Config.KeyConfig
import Dodge.Item.Attachment.Data import Dodge.Item.Attachment.Data
import Dodge.Item.Data
import Dodge.World.Trigger.Data import Dodge.World.Trigger.Data
import Preload.Data import Preload.Data
import Picture.Data import Picture.Data
@@ -230,6 +231,7 @@ data Item
, _itInvColor :: Color , _itInvColor :: Color
, _itTargeting :: Maybe (World -> Maybe Point2, Int -> Item -> Creature -> World -> Picture) , _itTargeting :: Maybe (World -> Maybe Point2, Int -> Item -> Creature -> World -> Picture)
, _itWorldTrigger :: Maybe (Int -> World -> Bool) , _itWorldTrigger :: Maybe (Int -> World -> Bool)
, _itAimStance :: AimStance
} }
| Consumable | Consumable
{ _itName :: String { _itName :: String
@@ -244,6 +246,7 @@ data Item
, _itInvColor :: Color , _itInvColor :: Color
, _itEffect :: ItEffect , _itEffect :: ItEffect
, _itHammer :: HammerPosition , _itHammer :: HammerPosition
, _itAimStance :: AimStance
} }
| Craftable | Craftable
{ _itName :: String { _itName :: String
@@ -255,6 +258,7 @@ data Item
, _itID :: Maybe Int , _itID :: Maybe Int
, _itInvDisplay :: Item -> String , _itInvDisplay :: Item -> String
, _itInvColor :: Color , _itInvColor :: Color
, _itAimStance :: AimStance
} }
| Equipment | Equipment
{ _itName :: String { _itName :: String
@@ -271,6 +275,7 @@ data Item
, _itInvDisplay :: Item -> String , _itInvDisplay :: Item -> String
, _itInvColor :: Color , _itInvColor :: Color
, _itHammer :: HammerPosition , _itHammer :: HammerPosition
, _itAimStance :: AimStance
} }
| Throwable | Throwable
{ _itName :: String { _itName :: String
@@ -295,6 +300,7 @@ data Item
, _itHammer :: HammerPosition , _itHammer :: HammerPosition
, _itScrollUp :: Int -> World -> World , _itScrollUp :: Int -> World -> World
, _itScrollDown :: Int -> World -> World , _itScrollDown :: Int -> World -> World
, _itAimStance :: AimStance
} }
| NoItem | NoItem
data ItEffect = NoItEffect data ItEffect = NoItEffect
@@ -317,44 +323,6 @@ data ItZoom = ItZoom
,_itZoomFac :: Float ,_itZoomFac :: Float
} }
data IntID a = IntID Int a data IntID a = IntID Int a
data HammerPosition
= HammerDown
| HammerReleased
| HammerUp
| NoHammer
deriving
(Eq, Ord, Show)
data ItemIdentity
= Pistol
| SpreadGun
| MultGun
| HvAutoGun
| AutoGun
| LtAutoGun
| MiniGun
| Medkit25
| MagShield
| FrontArmour
| JetPack
| FlameShield
| Generic
| SparkGun
| ShatterGun
| LongGun
| Flamethrower
| Blinker
| Grenade
| RemoteBomb
| TeslaGun
| LasGun
| ForceFieldGun
| GrapGun
| TractorGun
| Launcher
| RemoteLauncher
| LightningGun
| PoisonSprayer
deriving (Eq,Show,Ord,Enum)
{- Objects without ids. {- Objects without ids.
Update themselves, perhaps with side effects. -} Update themselves, perhaps with side effects. -}
data Particle data Particle
@@ -362,6 +330,13 @@ data Particle
{ _ptDraw :: Particle -> Picture { _ptDraw :: Particle -> Picture
, _ptUpdate' :: World -> Particle -> (World, Maybe Particle) , _ptUpdate' :: World -> Particle -> (World, Maybe Particle)
} }
| LinearParticle
{ _ptDraw :: Particle -> Picture
, _ptUpdate' :: World -> Particle -> (World, Maybe Particle)
, _ptPoints :: [Point2]
, _ptTimer :: Int
, _ptColor :: Color
}
| Bul' | Bul'
{ _ptDraw :: Particle -> Picture { _ptDraw :: Particle -> Picture
, _ptUpdate' :: World -> Particle -> (World, Maybe Particle) , _ptUpdate' :: World -> Particle -> (World, Maybe Particle)
+1
View File
@@ -16,6 +16,7 @@ data DamageType
| SparkDam {_dmAmount :: Int , _dmFrom :: Point2 , _dmAt :: Point2 , _dmTo :: Point2 } | SparkDam {_dmAmount :: Int , _dmFrom :: Point2 , _dmAt :: Point2 , _dmTo :: Point2 }
| Flaming {_dmAmount :: Int , _dmFrom :: Point2 , _dmAt :: Point2 , _dmTo :: Point2 } | Flaming {_dmAmount :: Int , _dmFrom :: Point2 , _dmAt :: Point2 , _dmTo :: Point2 }
| Lasering {_dmAmount :: Int , _dmFrom :: Point2 , _dmAt :: Point2 , _dmTo :: Point2 } | Lasering {_dmAmount :: Int , _dmFrom :: Point2 , _dmAt :: Point2 , _dmTo :: Point2 }
| Electrical {_dmAmount :: Int , _dmFrom :: Point2 , _dmAt :: Point2 , _dmTo :: Point2 }
| Concussive | Concussive
{ _dmAmount :: Int { _dmAmount :: Int
, _dmFrom :: Point2 , _dmFrom :: Point2
+4
View File
@@ -7,6 +7,7 @@ This module contains prototypical data structures.
module Dodge.Default where module Dodge.Default where
import Dodge.Item.Weapon.ExtraEffect import Dodge.Item.Weapon.ExtraEffect
import Dodge.Data import Dodge.Data
import Dodge.Item.Data
import Dodge.Creature.Stance.Data import Dodge.Creature.Stance.Data
import Dodge.Creature.State.Data import Dodge.Creature.State.Data
import Dodge.Creature.AlertLevel.Data import Dodge.Creature.AlertLevel.Data
@@ -140,6 +141,7 @@ defaultEquipment = Equipment
, _itZoom = defaultItZoom , _itZoom = defaultItZoom
, _itInvColor = yellow , _itInvColor = yellow
, _itInvDisplay = _itName , _itInvDisplay = _itName
, _itAimStance = LeaveHolstered
} }
defaultItZoom :: ItZoom defaultItZoom :: ItZoom
defaultItZoom = ItZoom 20 0.2 1 20 0.2 1 defaultItZoom = ItZoom 20 0.2 1 20 0.2 1
@@ -157,6 +159,7 @@ defaultConsumable = Consumable
, _itInvDisplay = \it -> _itName it ++ " x" ++ show (_itAmount it) , _itInvDisplay = \it -> _itName it ++ " x" ++ show (_itAmount it)
, _itEffect = wpRecock , _itEffect = wpRecock
, _itHammer = HammerUp , _itHammer = HammerUp
, _itAimStance = LeaveHolstered
} }
defaultApplyDamage :: [DamageType] -> Creature -> (World -> World, Creature) defaultApplyDamage :: [DamageType] -> Creature -> (World -> World, Creature)
defaultApplyDamage ds cr = (id, doPoisonDam $ foldr (\d c -> snd $ applyIndividualDamage d c) cr ds') defaultApplyDamage ds cr = (id, doPoisonDam $ foldr (\d c -> snd $ applyIndividualDamage d c) cr ds')
@@ -203,6 +206,7 @@ defaultIt = Consumable
, _itInvColor = blue , _itInvColor = blue
, _itEffect = NoItEffect , _itEffect = NoItEffect
, _itHammer = HammerUp , _itHammer = HammerUp
, _itAimStance = LeaveHolstered
} }
defaultButton :: Button defaultButton :: Button
defaultButton = Button defaultButton = Button
+3
View File
@@ -3,6 +3,7 @@ module Dodge.Default.Weapon
import Dodge.Data import Dodge.Data
import Dodge.Item.Weapon.ExtraEffect import Dodge.Item.Weapon.ExtraEffect
import Dodge.Item.Weapon.InventoryDisplay import Dodge.Item.Weapon.InventoryDisplay
import Dodge.Item.Data
import Picture import Picture
defaultGun :: Item defaultGun :: Item
defaultGun = Weapon defaultGun = Weapon
@@ -37,6 +38,7 @@ defaultGun = Weapon
, _itInvColor = white , _itInvColor = white
, _itTargeting = Nothing , _itTargeting = Nothing
, _itWorldTrigger = Nothing , _itWorldTrigger = Nothing
, _itAimStance = OneHand
} }
defaultAutoGun :: Item defaultAutoGun :: Item
@@ -44,6 +46,7 @@ defaultAutoGun = defaultGun
{ _itScrollUp = const id { _itScrollUp = const id
, _itScrollDown = const id , _itScrollDown = const id
, _itInvDisplay = basicWeaponDisplay , _itInvDisplay = basicWeaponDisplay
, _itAimStance = TwoHandTwist
} }
defaultShellAmmo :: Ammo defaultShellAmmo :: Ammo
+1
View File
@@ -1,6 +1,7 @@
module Dodge.Item module Dodge.Item
where where
import Dodge.Data import Dodge.Data
import Dodge.Item.Data
--import Dodge.Base --import Dodge.Base
import Dodge.Default import Dodge.Default
import Dodge.Picture import Dodge.Picture
+1
View File
@@ -1,6 +1,7 @@
module Dodge.Item.Consumable module Dodge.Item.Consumable
where where
import Dodge.Data import Dodge.Data
import Dodge.Item.Data
import Dodge.Picture.Layer import Dodge.Picture.Layer
import Dodge.Default import Dodge.Default
import Dodge.SoundLogic import Dodge.SoundLogic
+47
View File
@@ -0,0 +1,47 @@
{-# LANGUAGE StrictData #-}
module Dodge.Item.Data
where
data HammerPosition
= HammerDown
| HammerReleased
| HammerUp
| NoHammer
deriving
(Eq, Ord, Show)
data ItemIdentity
= Pistol
| SpreadGun
| MultGun
| HvAutoGun
| AutoGun
| LtAutoGun
| MiniGun
| Medkit25
| MagShield
| FrontArmour
| JetPack
| FlameShield
| Generic
| SparkGun
| ShatterGun
| LongGun
| Flamethrower
| Blinker
| Grenade
| RemoteBomb
| TeslaGun
| LasGun
| ForceFieldGun
| GrapGun
| TractorGun
| Launcher
| RemoteLauncher
| LightningGun
| PoisonSprayer
deriving
(Eq,Show,Ord,Enum)
data AimStance
= TwoHandTwist
| TwoHand
| OneHand
| LeaveHolstered
+1
View File
@@ -1,6 +1,7 @@
module Dodge.Item.Equipment module Dodge.Item.Equipment
where where
import Dodge.Data import Dodge.Data
import Dodge.Item.Data
import Dodge.Default import Dodge.Default
import Dodge.Picture.Layer import Dodge.Picture.Layer
import Picture import Picture
+5 -2
View File
@@ -13,6 +13,7 @@ import Dodge.Default
--import Dodge.Default.Shell --import Dodge.Default.Shell
import Dodge.Item.Draw import Dodge.Item.Draw
import Dodge.Particle.Bullet.HitEffect import Dodge.Particle.Bullet.HitEffect
import Dodge.Item.Data
import Dodge.Item.Weapon.InventoryDisplay import Dodge.Item.Weapon.InventoryDisplay
import Dodge.Item.Weapon.TriggerType import Dodge.Item.Weapon.TriggerType
import Dodge.Item.Weapon.ExtraEffect import Dodge.Item.Weapon.ExtraEffect
@@ -540,10 +541,10 @@ aTeslaArc cr w = aTeslaArc' cr $ soundFrom (CrWeaponSound cid) 25 1 0 w
aTeslaArc' :: Creature -> World -> World aTeslaArc' :: Creature -> World -> World
aTeslaArc' cr w aTeslaArc' cr w
= teslaGunFlashAt (pos +.+ 5 *.* unitVectorAtAngle dir) = teslaGunFlashAt (pos +.+ 5 *.* unitVectorAtAngle dir)
$ over projectiles (IM.insert i (makeTeslaArcAt i pos dir)) -- $ over projectiles (IM.insert i (makeTeslaArcAt i pos dir))
$ set randGen g w $ set randGen g w
& particles %~ (makeTeslaArcAt pos dir :)
where where
i = newProjectileKey w
pos = _crPos cr +.+ ((_crRad cr +1) *.* unitVectorAtAngle dir) pos = _crPos cr +.+ ((_crRad cr +1) *.* unitVectorAtAngle dir)
+.+ sideOffset *.* vNormal (unitVectorAtAngle dir) +.+ sideOffset *.* vNormal (unitVectorAtAngle dir)
(sideOffset,g) = randomR (-5,5) $ _randGen w (sideOffset,g) = randomR (-5,5) $ _randGen w
@@ -720,6 +721,7 @@ grenade = Throwable
, _itHammer = HammerUp , _itHammer = HammerUp
, _itScrollUp = decreaseFuse fuseTime , _itScrollUp = decreaseFuse fuseTime
, _itScrollDown = increaseFuse fuseTime , _itScrollDown = increaseFuse fuseTime
, _itAimStance = OneHand
} }
where where
fuseTime = 50 fuseTime = 50
@@ -932,6 +934,7 @@ pipe = Craftable
, _itID = Nothing , _itID = Nothing
, _itInvDisplay = _itName , _itInvDisplay = _itName
, _itInvColor = green , _itInvColor = green
, _itAimStance = LeaveHolstered
} }
{- | {- |
Sends out pulses that display walls. -} Sends out pulses that display walls. -}
+1
View File
@@ -3,6 +3,7 @@ module Dodge.Item.Weapon.Bezier
import Dodge.Data import Dodge.Data
import Dodge.Base import Dodge.Base
import Dodge.Default.Weapon import Dodge.Default.Weapon
import Dodge.Item.Data
import Dodge.Item.Weapon.Targeting import Dodge.Item.Weapon.Targeting
import Dodge.Item.Weapon.TriggerType import Dodge.Item.Weapon.TriggerType
import Dodge.Item.Weapon.ExtraEffect import Dodge.Item.Weapon.ExtraEffect
+1
View File
@@ -6,6 +6,7 @@ module Dodge.Item.Weapon.ExtraEffect
where where
import Dodge.Data import Dodge.Data
import Dodge.Base import Dodge.Base
import Dodge.Item.Data
import Dodge.Item.Weapon.Decoration import Dodge.Item.Weapon.Decoration
import Dodge.Item.Weapon.UseEffect import Dodge.Item.Weapon.UseEffect
--import Dodge.Item.Attachment.Data --import Dodge.Item.Attachment.Data
+1
View File
@@ -1,6 +1,7 @@
module Dodge.Item.Weapon.Grenade module Dodge.Item.Weapon.Grenade
where where
import Dodge.Data import Dodge.Data
import Dodge.Item.Data
import Dodge.Base import Dodge.Base
import Dodge.Picture.Layer import Dodge.Picture.Layer
import Dodge.SoundLogic import Dodge.SoundLogic
+1
View File
@@ -6,6 +6,7 @@ import Dodge.Default.Shell
import Dodge.SoundLogic.Synonyms import Dodge.SoundLogic.Synonyms
import Dodge.WorldEvent.Explosion import Dodge.WorldEvent.Explosion
import Dodge.Picture.Layer import Dodge.Picture.Layer
import Dodge.Item.Data
import Dodge.Item.Draw import Dodge.Item.Draw
import Dodge.Item.Weapon.Shell import Dodge.Item.Weapon.Shell
import Dodge.Item.Weapon.TriggerType import Dodge.Item.Weapon.TriggerType
+1
View File
@@ -10,6 +10,7 @@ import Dodge.WorldEvent.Cloud
import Dodge.RandomHelp import Dodge.RandomHelp
import Dodge.Particle.Bullet.Spawn import Dodge.Particle.Bullet.Spawn
import Dodge.Item.Attachment.Data import Dodge.Item.Attachment.Data
import Dodge.Item.Data
import Geometry import Geometry
import System.Random import System.Random
+1
View File
@@ -4,6 +4,7 @@ Functions that affect the world according to what pressed buttons are stored in
module Dodge.Update.UsingInput module Dodge.Update.UsingInput
where where
import Dodge.Data import Dodge.Data
import Dodge.Item.Data
import Dodge.Creature.Action.UseItem import Dodge.Creature.Action.UseItem
import Geometry import Geometry
+9 -8
View File
@@ -36,14 +36,15 @@ makeTeslaExplosionAt
:: Point2 -- ^ Position :: Point2 -- ^ Position
-> World -> World
-> World -> World
makeTeslaExplosionAt pos w = soundOncePos grenadeBang pos $ foldr ($) w listOfFunctions -- a bit shorter makeTeslaExplosionAt pos w = undefined
where -- soundOncePos grenadeBang pos $ foldr ($) w listOfFunctions -- a bit shorter
xs = randomRs (0, 2*pi) $ _randGen w -- where
j = newProjectileKey w -- xs = randomRs (0, 2*pi) $ _randGen w
pks = [j..] -- j = newProjectileKey w
listOfFunctions = map -- pks = [j..]
(\i -> over projectiles (IM.insert (pks!!i) (makeTeslaArcAt (pks!!i) pos (xs!!i)))) -- listOfFunctions = map
[1 .. 29] -- (\i -> over projectiles (IM.insert (pks!!i) (makeTeslaArcAt (pks!!i) pos (xs!!i))))
-- [1 .. 29]
makeFlameExplosionAt makeFlameExplosionAt
:: Point2 -- ^ Position :: Point2 -- ^ Position
+39 -34
View File
@@ -16,7 +16,7 @@ import Dodge.Particle.Bullet.Draw
import Dodge.Particle.Bullet.Update import Dodge.Particle.Bullet.Update
import Dodge.SoundLogic import Dodge.SoundLogic
import Dodge.RandomHelp import Dodge.RandomHelp
import Dodge.Debug --import Dodge.Debug
import Picture import Picture
import Geometry import Geometry
import qualified IntMapHelp as IM import qualified IntMapHelp as IM
@@ -237,54 +237,59 @@ cloudPoisonDamage c w = w & creatures %~ flip (foldr (IM.adjust doDam)) damagedC
damagedCrs = IM.keys $ IM.filter f $ creaturesNearPoint (_clPos c) w damagedCrs = IM.keys $ IM.filter f $ creaturesNearPoint (_clPos c) w
f cr = dist (_crPos cr) (_clPos c) < _crRad cr + _clRad c + 10 f cr = dist (_crPos cr) (_clPos c) < _crRad cr + _clRad c + 10
doDam cr = cr & crState . crDamage %~ (:) (PoisonDam 1) doDam cr = cr & crState . crDamage %~ (:) (PoisonDam 1)
makeTeslaArcAt :: Point2 -> Float -> Particle
{- makeTeslaArcAt pos dir = LinearParticle
TODO: make tesla arc a particle. { _ptPoints = [pos]
-} , _ptDraw = drawTeslaArc
makeTeslaArcAt :: Int -> Point2 -> Float -> Projectile , _ptUpdate' = moveTeslaArc pos dir
makeTeslaArcAt i pos dir = Projectile , _ptTimer = 2
{ _pjPos = pos , _ptColor = white
, _pjStartPos = pos
, _pjVel = (0,0)
, _pjDraw = \_ -> onLayer PtLayer $ line [(0,0),(0,0)]
, _pjID = i
, _pjUpdate = \_ -> moveTeslaArc pos dir i
} }
drawTeslaArc :: Particle -> Picture
moveTeslaArc drawTeslaArc pt = pic
:: Point2 -- ^ Emmission position where
-> Float -- ^ Emmission direction ps' = _ptPoints pt
-> Int -- ^ Projectile id
-> World
-> World
moveTeslaArc p d i w =
set (projectiles . ix i . pjDraw) (\_ -> pic)
$ set (projectiles . ix i . pjUpdate)
(\_ -> pjTimerF 2 i)
$ set randGen g
$ createSpark 8 nc q2 (argV sv + d1) Nothing
$ foldr damCrs w hitCrs
where
pic = setLayer 1 $ pictures pic = setLayer 1 $ pictures
[ onLayer PtLayer $ color (f2 nc) $ line ps' [ onLayer PtLayer $ color (_ptColor pt) $ line ps'
, onLayer UPtLayer $ color (withAlpha 0.02 cyan) $ lineOfThickness 20 ps' , onLayer UPtLayer $ color (withAlpha 0.02 cyan) $ lineOfThickness 20 ps'
, onLayer UPtLayer $ color (withAlpha 0.02 cyan) $ lineOfThickness 25 ps' , onLayer UPtLayer $ color (withAlpha 0.02 cyan) $ lineOfThickness 25 ps'
, onLayer UPtLayer $ color (withAlpha 0.02 cyan) $ lineOfThickness 30 ps' , onLayer UPtLayer $ color (withAlpha 0.02 cyan) $ lineOfThickness 30 ps'
] ]
ps' = lightningMids d pers ps -- todo: fix electrical damage location
moveTeslaArc
:: Point2 -- ^ Emmission position
-> Float -- ^ Emmission direction
-> World
-> Particle
-> (World, Maybe Particle)
moveTeslaArc p d w pt
| t == 2 =
(foldr damCrs w hitCrs & randGen .~ g
& createSpark 8 nc q2 (argV sv + d1) Nothing
, Just $ pt & ptTimer -~ 1
& ptPoints .~ ps'
& ptColor .~ theColor)
| t < 1 = (w , Nothing)
| otherwise = (w , Just $ pt & ptTimer -~ 1)
where
t = _ptTimer pt
ps = take 15 $ p : map f (crsLightChain p d 0 w) ps = take 15 $ p : map f (crsLightChain p d 0 w)
f (E3x1 cr) = _crPos cr f (E3x1 cr) = _crPos cr
f (E3x2 p1) = p1 f (E3x2 p1) = p1
f (E3x3 p1) = p1 f (E3x3 p1) = p1
ps' = lightningMids d pers ps
pers = evalState (sequence $ repeat $ randInCirc 5) $ _randGen w pers = evalState (sequence $ repeat $ randInCirc 5) $ _randGen w
(nc,g) = randomR (0::Int,11) $ _randGen w (nc,g) = randomR (0::Int,11) $ _randGen w
f1 (E3x1 cr) = Just $ _crID cr theColor = f2 nc
f1 _ = Nothing
hitCrs = mapMaybe f1 $ take 14 $ crsLightChain p d 0 w
damCrs cid = over (creatures . ix cid . crHP) (\hp -> hp - 5)
f2 0 = cyan f2 0 = cyan
f2 1 = azure f2 1 = azure
f2 _ = white f2 _ = white
f1 (E3x1 cr) = Just $ _crID cr
f1 _ = Nothing
hitCrs = mapMaybe f1 $ take 14 $ crsLightChain p d 0 w
damCrs cid = over (creatures . ix cid . crState . crDamage) (Electrical 5 cpos cpos cpos :)
where
cpos = _crPos (_creatures w IM.! cid)
q1 = last $ init ps' q1 = last $ init ps'
q2 = last ps' q2 = last ps'
hitWall = reflectPointWalls q1 ((2 *.* q2) -.- q1) $ wallsNearPoint q1 w hitWall = reflectPointWalls q1 ((2 *.* q2) -.- q1) $ wallsNearPoint q1 w
-1
View File
@@ -182,7 +182,6 @@ pingPongBlur pdata = do
generateMipmap' Texture2D generateMipmap' Texture2D
drawShader (_boxBlurShader pdata) 4 drawShader (_boxBlurShader pdata) 4
renderBackground renderBackground
:: RenderData :: RenderData
-> Float -- Rotation -> Float -- Rotation