Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ActiveSound.cs
Go to the documentation of this file.
1
using
Microsoft.Xna.Framework
;
2
using
Microsoft.Xna.Framework.Audio;
3
4
namespace
Terraria.Audio
;
5
6
public
class
ActiveSound
7
{
8
public
delegate
bool
LoopedPlayCondition
();
9
10
public
readonly
bool
IsGlobal
;
11
12
public
Vector2
Position
;
13
14
public
float
Volume
;
15
16
public
float
Pitch
;
17
18
public
LoopedPlayCondition
Condition
;
19
20
public
SoundEffectInstance
Sound
{
get
;
private
set
; }
21
22
public
SoundStyle
Style
{
get
;
private
set
; }
23
24
public
bool
IsPlaying
=> Sound.State == SoundState.Playing;
25
26
public
ActiveSound
(
SoundStyle
style,
Vector2
position)
27
{
28
Position
= position;
29
Volume
= 1f;
30
Pitch
= style.
PitchVariance
;
31
IsGlobal
=
false
;
32
Style
= style;
33
Play
();
34
}
35
36
public
ActiveSound
(
SoundStyle
style)
37
{
38
Position
=
Vector2
.
Zero
;
39
Volume
= 1f;
40
Pitch
= style.
PitchVariance
;
41
IsGlobal
=
true
;
42
Style
= style;
43
Play
();
44
}
45
46
public
ActiveSound
(
SoundStyle
style,
Vector2
position, LoopedPlayCondition condition)
47
{
48
Position
= position;
49
Volume
= 1f;
50
Pitch
= style.
PitchVariance
;
51
IsGlobal
=
false
;
52
Style
= style;
53
PlayLooped
(condition);
54
}
55
56
private
void
Play
()
57
{
58
SoundEffectInstance soundEffectInstance =
Style
.
GetRandomSound
().CreateInstance();
59
soundEffectInstance.Pitch +=
Style
.
GetRandomPitch
();
60
Pitch
= soundEffectInstance.Pitch;
61
soundEffectInstance.Play();
62
SoundInstanceGarbageCollector
.
Track
(soundEffectInstance);
63
Sound
= soundEffectInstance;
64
Update
();
65
}
66
67
private
void
PlayLooped
(LoopedPlayCondition condition)
68
{
69
SoundEffectInstance soundEffectInstance =
Style
.
GetRandomSound
().CreateInstance();
70
soundEffectInstance.Pitch +=
Style
.
GetRandomPitch
();
71
Pitch
= soundEffectInstance.Pitch;
72
soundEffectInstance.IsLooped =
true
;
73
Condition
= condition;
74
soundEffectInstance.Play();
75
SoundInstanceGarbageCollector
.
Track
(soundEffectInstance);
76
Sound
= soundEffectInstance;
77
Update
();
78
}
79
80
public
void
Stop
()
81
{
82
if
(
Sound
!=
null
)
83
{
84
Sound
.Stop();
85
}
86
}
87
88
public
void
Pause
()
89
{
90
if
(
Sound
!=
null
&&
Sound
.State == SoundState.Playing)
91
{
92
Sound
.Pause();
93
}
94
}
95
96
public
void
Resume
()
97
{
98
if
(
Sound
!=
null
&&
Sound
.State == SoundState.Paused)
99
{
100
Sound
.Resume();
101
}
102
}
103
104
public
void
Update
()
105
{
106
if
(
Sound
==
null
)
107
{
108
return
;
109
}
110
if
(
Condition
!=
null
&& !
Condition
())
111
{
112
Sound
.Stop(immediate:
true
);
113
return
;
114
}
115
Vector2
value = Main.screenPosition +
new
Vector2
(
Main
.
screenWidth
/ 2,
Main
.
screenHeight
/ 2);
116
float
num = 1f;
117
if
(!
IsGlobal
)
118
{
119
float
value2 = (Position.X - value.X) / ((
float
)Main.screenWidth * 0.5f);
120
value2 =
MathHelper
.
Clamp
(value2, -1f, 1f);
121
Sound.Pan = value2;
122
float
num2 =
Vector2
.
Distance
(
Position
, value);
123
num = 1f - num2 / ((float)
Main
.
screenWidth
* 1.5f);
124
}
125
num *= Style.Volume *
Volume
;
126
switch
(
Style
.
Type
)
127
{
128
case
SoundType
.Sound:
129
num *=
Main
.
soundVolume
;
130
break
;
131
case
SoundType
.Ambient:
132
num *=
Main
.
ambientVolume
;
133
break
;
134
case
SoundType
.Music:
135
num *=
Main
.
musicVolume
;
136
break
;
137
}
138
num =
MathHelper
.
Clamp
(num, 0f, 1f);
139
Sound.Volume = num;
140
Sound.Pitch =
Pitch
;
141
}
142
}
Position
Position
Definition
ImmutableDictionary.cs:625
Microsoft.Xna.Framework.MathHelper.Clamp
static float Clamp(float value, float min, float max)
Definition
MathHelper.cs:46
Microsoft.Xna.Framework.MathHelper
Definition
MathHelper.cs:6
Terraria.Audio.ActiveSound.Update
void Update()
Definition
ActiveSound.cs:104
Terraria.Audio.ActiveSound.PlayLooped
void PlayLooped(LoopedPlayCondition condition)
Definition
ActiveSound.cs:67
Terraria.Audio.ActiveSound.Pause
void Pause()
Definition
ActiveSound.cs:88
Terraria.Audio.ActiveSound.Pitch
float Pitch
Definition
ActiveSound.cs:16
Terraria.Audio.ActiveSound.Sound
SoundEffectInstance Sound
Definition
ActiveSound.cs:20
Terraria.Audio.ActiveSound.ActiveSound
ActiveSound(SoundStyle style, Vector2 position)
Definition
ActiveSound.cs:26
Terraria.Audio.ActiveSound.Resume
void Resume()
Definition
ActiveSound.cs:96
Terraria.Audio.ActiveSound.ActiveSound
ActiveSound(SoundStyle style, Vector2 position, LoopedPlayCondition condition)
Definition
ActiveSound.cs:46
Terraria.Audio.ActiveSound.Position
Vector2 Position
Definition
ActiveSound.cs:12
Terraria.Audio.ActiveSound.IsPlaying
bool IsPlaying
Definition
ActiveSound.cs:24
Terraria.Audio.ActiveSound.ActiveSound
ActiveSound(SoundStyle style)
Definition
ActiveSound.cs:36
Terraria.Audio.ActiveSound.Style
SoundStyle Style
Definition
ActiveSound.cs:22
Terraria.Audio.ActiveSound.Condition
LoopedPlayCondition Condition
Definition
ActiveSound.cs:18
Terraria.Audio.ActiveSound.Stop
void Stop()
Definition
ActiveSound.cs:80
Terraria.Audio.ActiveSound.Play
void Play()
Definition
ActiveSound.cs:56
Terraria.Audio.ActiveSound.IsGlobal
readonly bool IsGlobal
Definition
ActiveSound.cs:10
Terraria.Audio.ActiveSound.Volume
float Volume
Definition
ActiveSound.cs:14
Terraria.Audio.ActiveSound.LoopedPlayCondition
delegate bool LoopedPlayCondition()
Terraria.Audio.ActiveSound
Definition
ActiveSound.cs:7
Terraria.Audio.SoundInstanceGarbageCollector.Track
static void Track(SoundEffectInstance sound)
Definition
SoundInstanceGarbageCollector.cs:10
Terraria.Audio.SoundInstanceGarbageCollector
Definition
SoundInstanceGarbageCollector.cs:7
Terraria.Audio.SoundStyle.PitchVariance
float PitchVariance
Definition
SoundStyle.cs:18
Terraria.Audio.SoundStyle.GetRandomPitch
float GetRandomPitch()
Definition
SoundStyle.cs:38
Terraria.Audio.SoundStyle.GetRandomSound
SoundEffect GetRandomSound()
Terraria.Audio.SoundStyle.Type
SoundType Type
Definition
SoundStyle.cs:20
Terraria.Audio.SoundStyle
Definition
SoundStyle.cs:7
Terraria.Main.ambientVolume
static float ambientVolume
Definition
Main.cs:1423
Terraria.Main.screenHeight
static int screenHeight
Definition
Main.cs:1721
Terraria.Main.screenWidth
static int screenWidth
Definition
Main.cs:1719
Terraria.Main.musicVolume
static float musicVolume
Definition
Main.cs:1421
Terraria.Main.soundVolume
static float soundVolume
Definition
Main.cs:1425
Terraria.Main
Definition
Main.cs:79
Microsoft.Xna.Framework
Definition
AlphaTestEffect.cs:1
Terraria.Audio.SoundType
SoundType
Definition
SoundType.cs:4
Terraria.Audio
Definition
ActiveSound.cs:4
Microsoft.Xna.Framework.Vector2.Zero
static Vector2 Zero
Definition
Vector2.cs:27
Microsoft.Xna.Framework.Vector2.Distance
static float Distance(Vector2 value1, Vector2 value2)
Definition
Vector2.cs:91
Microsoft.Xna.Framework.Vector2
Definition
Vector2.cs:12
source
Terraria.Audio
ActiveSound.cs
Generated by
1.10.0