summaryrefslogtreecommitdiff
path: root/GameCode/SFXManager.cs
blob: 9c972e5534cfdf109be5f202f3164f044a7b53ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
using System.Collections.Generic;
using UnityEngine;

public class SFXManager : MonoBehaviour
{
	public float volume = 0.5f;

	[SerializeField]
	private AudioClip ballistaClip;

	[SerializeField]
	private AudioClip mortarClip;

	[SerializeField]
	private AudioClip teslaClip;

	[SerializeField]
	private AudioClip[] explosions;

	[SerializeField]
	private AudioClip biPlaneGunClip;

	[SerializeField]
	private AudioClip particleCannonClip;

	[SerializeField]
	private AudioClip shredderClip;

	[SerializeField]
	private AudioClip[] ballistaHits;

	[SerializeField]
	private AudioClip frostHitClip;

	[SerializeField]
	private AudioClip shredderHitClip;

	[SerializeField]
	private AudioClip[] bulletHits;

	[SerializeField]
	private AudioClip particleHitClip;

	[SerializeField]
	private AudioClip[] coinLongClips;

	[SerializeField]
	private AudioClip[] coinShortClips;

	[SerializeField]
	private AudioClip buttonClick;

	[SerializeField]
	private AudioClip[] critSmall;

	[SerializeField]
	private AudioClip[] critBig;

	[SerializeField]
	private AudioClip cards;

	[SerializeField]
	private GameObject sourceObject;

	public List<AudioPoolSource> sources = new List<AudioPoolSource>();

	public static SFXManager instance;

	private void Awake()
	{
		instance = this;
	}

	private void Start()
	{
		volume = OptionsMenu.instance.masterVolume * OptionsMenu.instance.sfxVolume;
	}

	public void ButtonClick()
	{
		PlaySound(Sound.ButtonClick, MusicManager.instance.transform.position, MusicManager.instance.transform);
	}

	public void PlaySound(Sound s, Vector3 pos)
	{
		PlaySound(s, pos, null);
	}

	public void PlaySound(Sound s, Vector3 pos, Transform parent)
	{
		if (!(volume <= 0f))
		{
			AudioClip clip = GetClip(s);
			AudioPoolSource audioPoolSource;
			if (sources.Count < 1)
			{
				audioPoolSource = Object.Instantiate(sourceObject).GetComponent<AudioPoolSource>();
			}
			else
			{
				audioPoolSource = sources[0];
				sources.Remove(audioPoolSource);
			}
			audioPoolSource.transform.position = pos;
			audioPoolSource.PlayClip(clip, volume, 0.08333f);
			if (parent != null)
			{
				audioPoolSource.transform.parent = parent;
			}
		}
	}

	private AudioClip GetClip(Sound s)
	{
		switch (s)
		{
		case Sound.Ballista:
			return ballistaClip;
		case Sound.Mortar:
			return mortarClip;
		case Sound.TeslaZap:
			return teslaClip;
		case Sound.Explosion:
			return explosions[Random.Range(0, explosions.Length)];
		case Sound.BiPlaneGun:
			return biPlaneGunClip;
		case Sound.ParticleCannon:
			return particleCannonClip;
		case Sound.Shredder:
			return shredderClip;
		case Sound.BallistaHit:
			return ballistaHits[Random.Range(0, ballistaHits.Length)];
		case Sound.FrostHit:
			return frostHitClip;
		case Sound.ShredderHit:
			return shredderHitClip;
		case Sound.BulletHit:
			return bulletHits[Random.Range(0, bulletHits.Length)];
		case Sound.ParticleHit:
			return particleHitClip;
		case Sound.CoinLong:
			return coinLongClips[Random.Range(0, coinLongClips.Length)];
		case Sound.CoinShort:
			return coinShortClips[Random.Range(0, coinShortClips.Length)];
		case Sound.ButtonClick:
			return buttonClick;
		case Sound.CritSmall:
			return critSmall[Random.Range(0, critSmall.Length)];
		case Sound.CritBig:
			return critBig[Random.Range(0, critBig.Length)];
		case Sound.Cards:
			return cards;
		default:
			Debug.LogError("No Audio Clip Found Type " + s);
			return null;
		}
	}
}