Work on radar and sonar

This commit is contained in:
2022-05-26 23:21:08 +01:00
parent 7d5edb4f41
commit 048b838e4b
4 changed files with 49 additions and 45 deletions
+17 -19
View File
@@ -14,6 +14,7 @@ module Dodge.Item.Weapon.ExtraEffect
) where
import Dodge.Data
import Dodge.Base
import Dodge.SoundLogic
--import Dodge.Item.Weapon.Decoration
import Dodge.Item.Weapon.UseEffect
import Dodge.Item.Weapon.LaserPath
@@ -32,28 +33,25 @@ import Data.Maybe
import qualified Data.Set as S
import qualified SDL
{- | Automatically send out radar pulses that detect walls. -}
autoRadarEffect :: ItEffect
autoRadarEffect = ItInvEffect {_itInvEffect = f 50 ,_itEffectCounter = 0 }
where
f :: Int -> Item -> Creature -> World -> World
f 0 itm cr w = aRadarPulse cr w
autoRadarEffect :: Item -> Creature -> World -> World
autoRadarEffect itm cr w
| _eparamInt (_eqParams (_itUse itm)) < 1 = aRadarPulse cr w
& creatures . ix (_crID cr) . crInv . ix (fromJust $ _itInvPos itm)
. itEffect . itInvEffect .~ f 100
f t itm cr w = w
. itUse . eqParams . eparamInt .~ 100
& soundStart OnceSound (_crPos cr) click1S Nothing
| otherwise = w
& creatures . ix (_crID cr) . crInv . ix (fromJust $ _itInvPos itm)
. itEffect . itInvEffect .~ f (t-1)
. itUse . eqParams . eparamInt -~ 1
{- | Automatically send out sonar pulses that detect creatures. -}
autoSonarEffect :: ItEffect
autoSonarEffect = ItInvEffect {_itInvEffect = f ,_itEffectCounter = 50 }
where
f :: Item -> Creature -> World -> World
f itm cr w
| _itEffectCounter (_itEffect itm) == 0 = aSonarPulse cr w
& decreasecounter
| otherwise = decreasecounter w
where
decreasecounter = creatures . ix (_crID cr) . crInv
. ix (fromJust $ _itInvPos itm) . itEffect . itEffectCounter %~ (\i -> (i - 1) `mod` 50)
autoSonarEffect :: Item -> Creature -> World -> World
autoSonarEffect itm cr w
| _eparamInt (_eqParams (_itUse itm)) < 1 = aSonarPulse cr w
& creatures . ix (_crID cr) . crInv . ix (fromJust $ _itInvPos itm)
. itUse . eqParams . eparamInt .~ 50
& soundStart OnceSound (_crPos cr) click1S Nothing
| otherwise = w
& creatures . ix (_crID cr) . crInv . ix (fromJust $ _itInvPos itm)
. itUse . eqParams . eparamInt -~ 1
defaultTargeting :: Targeting
defaultTargeting = Targeting