Make creature vocalizations stop on death
This commit is contained in:
@@ -50,7 +50,7 @@ chaseCrit = defaultCreature
|
|||||||
, _crInv = IM.fromList [(0,medkit 200)]
|
, _crInv = IM.fromList [(0,medkit 200)]
|
||||||
, _crMeleeCooldown = 0
|
, _crMeleeCooldown = 0
|
||||||
, _crFaction = ColorFaction green
|
, _crFaction = ColorFaction green
|
||||||
, _crVocalization = Vocalization seagullBarkS 50 0
|
, _crVocalization = Vocalization seagullChatterS 50 0
|
||||||
, _crMvType = ChaseMvType
|
, _crMvType = ChaseMvType
|
||||||
{ _mvSpeed = 3
|
{ _mvSpeed = 3
|
||||||
, _mvTurnRad = f
|
, _mvTurnRad = f
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ module Dodge.Creature.Impulse
|
|||||||
)
|
)
|
||||||
where
|
where
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
|
import Dodge.Creature.Vocalization
|
||||||
import Dodge.Data.SoundOrigin
|
import Dodge.Data.SoundOrigin
|
||||||
import Dodge.Creature.Impulse.Movement
|
import Dodge.Creature.Impulse.Movement
|
||||||
import Dodge.Creature.Impulse.UseItem
|
import Dodge.Creature.Impulse.UseItem
|
||||||
@@ -86,7 +87,3 @@ followImpulse cr w imp = case imp of
|
|||||||
. soundStart (CrSound cid) cpos hitS Nothing
|
. soundStart (CrSound cid) cpos hitS Nothing
|
||||||
addDam i dams = Blunt 100 cpos (posFromID i) (posFromID i) : dams
|
addDam i dams = Blunt 100 cpos (posFromID i) (posFromID i) : dams
|
||||||
|
|
||||||
resetCrVocCoolDown :: Creature -> Creature
|
|
||||||
resetCrVocCoolDown cr = case cr ^? crVocalization . vcMaxCoolDown of
|
|
||||||
Just i -> cr & crVocalization . vcCoolDown .~ i
|
|
||||||
Nothing -> cr
|
|
||||||
|
|||||||
@@ -6,9 +6,10 @@ module Dodge.Creature.Perception
|
|||||||
where
|
where
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
import Dodge.Creature.Perception.Data
|
import Dodge.Creature.Perception.Data
|
||||||
|
import Dodge.Creature.Vocalization
|
||||||
import Dodge.Creature.Memory.Data
|
import Dodge.Creature.Memory.Data
|
||||||
import Dodge.Base.Collide
|
import Dodge.Base.Collide
|
||||||
import Dodge.SoundLogic
|
--import Dodge.SoundLogic
|
||||||
import Geometry.Vector
|
import Geometry.Vector
|
||||||
--import Geometry.Data
|
--import Geometry.Data
|
||||||
import Geometry.Data
|
import Geometry.Data
|
||||||
@@ -50,11 +51,6 @@ basicAwarenessUpdate cr = case _crAttentionDir $ _crPerception cr of
|
|||||||
Fixated i -> pure $ cr & crPerception . crAwarenessLevel
|
Fixated i -> pure $ cr & crPerception . crAwarenessLevel
|
||||||
%~ ( IM.insert i (Cognizant 10000) . IM.mapMaybe decreaseAwareness)
|
%~ ( IM.insert i (Cognizant 10000) . IM.mapMaybe decreaseAwareness)
|
||||||
|
|
||||||
vocalizationTest :: Creature -> Maybe SoundID
|
|
||||||
vocalizationTest cr = case cr ^? crVocalization . vcCoolDown of
|
|
||||||
Just 0 -> Just $ _vcSound $ _crVocalization cr
|
|
||||||
Nothing -> Nothing
|
|
||||||
|
|
||||||
cogRaised :: AwarenessLevel -> AwarenessLevel -> AwarenessLevel
|
cogRaised :: AwarenessLevel -> AwarenessLevel -> AwarenessLevel
|
||||||
cogRaised Suspicious{} Cognizant{} = Cognizant 100
|
cogRaised Suspicious{} Cognizant{} = Cognizant 100
|
||||||
cogRaised _ _ = Suspicious 0
|
cogRaised _ _ = Suspicious 0
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
module Dodge.Creature.Vocalization where
|
||||||
|
import Dodge.Data
|
||||||
|
import Sound.Data
|
||||||
|
|
||||||
|
import Control.Lens
|
||||||
|
|
||||||
|
vocalizationTest :: Creature -> Maybe SoundID
|
||||||
|
vocalizationTest cr = case cr ^? crVocalization . vcCoolDown of
|
||||||
|
Just 0 -> Just $ _vcSound $ _crVocalization cr
|
||||||
|
_ -> Nothing
|
||||||
|
|
||||||
|
resetCrVocCoolDown :: Creature -> Creature
|
||||||
|
resetCrVocCoolDown cr = case cr ^? crVocalization . vcMaxCoolDown of
|
||||||
|
Just i -> cr & crVocalization . vcCoolDown .~ i
|
||||||
|
Nothing -> cr
|
||||||
@@ -12,6 +12,9 @@ module Dodge.SoundLogic (
|
|||||||
, soundMultiFrom
|
, soundMultiFrom
|
||||||
, stopSoundFrom
|
, stopSoundFrom
|
||||||
|
|
||||||
|
-- * helper to determine the angle of a sound given a world position
|
||||||
|
, soundAngle
|
||||||
|
|
||||||
-- * Manipulation of all sounds
|
-- * Manipulation of all sounds
|
||||||
, haltSound
|
, haltSound
|
||||||
, resumeSound
|
, resumeSound
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ module Dodge.Update
|
|||||||
( update
|
( update
|
||||||
) where
|
) where
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
|
import Dodge.Data.SoundOrigin
|
||||||
|
import Dodge.SoundLogic
|
||||||
import Dodge.Menu
|
import Dodge.Menu
|
||||||
import Dodge.Config.Data
|
import Dodge.Config.Data
|
||||||
import Dodge.Base
|
import Dodge.Base
|
||||||
@@ -18,6 +20,7 @@ import Dodge.WorldEvent.Sound
|
|||||||
import Dodge.Wall.Delete
|
import Dodge.Wall.Delete
|
||||||
import Dodge.Wall.Dust
|
import Dodge.Wall.Dust
|
||||||
import Dodge.RandomHelp
|
import Dodge.RandomHelp
|
||||||
|
import Sound.Data
|
||||||
import Geometry
|
import Geometry
|
||||||
import Geometry.ConvexPoly
|
import Geometry.ConvexPoly
|
||||||
import Geometry.Vector3D
|
import Geometry.Vector3D
|
||||||
@@ -29,6 +32,7 @@ import Data.Function
|
|||||||
import qualified Data.Set as S
|
import qualified Data.Set as S
|
||||||
import qualified Data.IntSet as IS
|
import qualified Data.IntSet as IS
|
||||||
import qualified Data.IntMap.Strict as IM
|
import qualified Data.IntMap.Strict as IM
|
||||||
|
import qualified Data.Map.Strict as M
|
||||||
import Control.Lens
|
import Control.Lens
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Control.Monad.State
|
import Control.Monad.State
|
||||||
@@ -53,6 +57,7 @@ functionalUpdate w = case _menuLayers w of
|
|||||||
(_ : _) -> w
|
(_ : _) -> w
|
||||||
[] -> checkEndGame
|
[] -> checkEndGame
|
||||||
. updateRadialDistortions
|
. updateRadialDistortions
|
||||||
|
. updateCreatureSoundPositions
|
||||||
. ppEvents
|
. ppEvents
|
||||||
. updateCamera
|
. updateCamera
|
||||||
. colCrsWalls
|
. colCrsWalls
|
||||||
@@ -87,6 +92,19 @@ functionalUpdate w = case _menuLayers w of
|
|||||||
where
|
where
|
||||||
(x,y) = cloudZoneOfPoint $ stripZ $ _clPos cl
|
(x,y) = cloudZoneOfPoint $ stripZ $ _clPos cl
|
||||||
|
|
||||||
|
updateCreatureSoundPositions :: World -> World
|
||||||
|
updateCreatureSoundPositions w = M.foldrWithKey insertSound w soundsToUpdate
|
||||||
|
where
|
||||||
|
insertSound k s w' = w & toPlaySounds %~ M.insertWith (\_ -> id) k (updateSound k s)
|
||||||
|
updateSound (CrMouth cid) s = case w ^? creatures . ix cid . crPos of
|
||||||
|
Just p -> s {_soundPos = p, _soundAngDist = Just (soundAngle p w,0)}
|
||||||
|
Nothing -> s {_soundTime = Just 0}
|
||||||
|
soundsToUpdate = M.filterWithKey (\k _ -> isCrMouth k) $ _playingSounds w
|
||||||
|
|
||||||
|
isCrMouth :: SoundOrigin -> Bool
|
||||||
|
isCrMouth CrMouth{} = True
|
||||||
|
isCrMouth _ = False
|
||||||
|
|
||||||
updateModifications :: World -> World
|
updateModifications :: World -> World
|
||||||
updateModifications w = foldr f w (_modifications w)
|
updateModifications w = foldr f w (_modifications w)
|
||||||
where
|
where
|
||||||
|
|||||||
+3
-2
@@ -13,6 +13,7 @@ data SoundStatus
|
|||||||
| Playing
|
| Playing
|
||||||
| ToStart
|
| ToStart
|
||||||
| ToContinueStart
|
| ToContinueStart
|
||||||
|
| ToStop
|
||||||
deriving (Eq,Ord,Show)
|
deriving (Eq,Ord,Show)
|
||||||
newtype SoundID = SoundID { _getSoundID :: Int }
|
newtype SoundID = SoundID { _getSoundID :: Int }
|
||||||
deriving (Eq,Ord,Show)
|
deriving (Eq,Ord,Show)
|
||||||
@@ -23,8 +24,8 @@ data Sound = Sound
|
|||||||
{ _soundTime :: Maybe Int
|
{ _soundTime :: Maybe Int
|
||||||
, _soundStatus :: SoundStatus
|
, _soundStatus :: SoundStatus
|
||||||
, _soundChannel :: Maybe Mix.Channel
|
, _soundChannel :: Maybe Mix.Channel
|
||||||
, _soundAngDist :: Maybe (Int16,Word8)
|
, _soundAngDist :: Maybe (Int16,Word8) -- why do BOTH of
|
||||||
, _soundPos :: Point2
|
, _soundPos :: Point2 -- these exist?
|
||||||
, _soundVolume :: Float
|
, _soundVolume :: Float
|
||||||
, _soundChunkID :: SoundID
|
, _soundChunkID :: SoundID
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user