-
Notifications
You must be signed in to change notification settings - Fork 1
/
sound.js
73 lines (60 loc) · 2.47 KB
/
sound.js
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
define([
], function (
){
class Sound {
constructor() {
this.sounds = {
"hero_hurt": new Audio("./audio/dsoof.wav"),
"hero_shoot": new Audio("./audio/hero-shoot.wav"),
"enemy_shoot": new Audio("./audio/shoot-1.wav"),
"arrow_fire": new Audio("./audio/Arrow-Fire.wav"),
"crow_caw": new Audio("./audio/crow-caw.wav"),
"enemy_hurt_1": new Audio("./audio/enemy-hurt-1.wav"),
"energy_launcher": new Audio("./audio/energy-launcher.wav"),
"explosion_1": new Audio("./audio/explosion-1.wav"),
"lava_ball": new Audio("./audio/lava-ball.wav"),
"shield_block": new Audio("./audio/shield-block.wav"),
"sword_swing": new Audio("./audio/sword-swing.wav"),
"out_of_energy": new Audio("./audio/ooe.wav"),
}
let n_dups = 5
for (var sound in this.sounds) {
if (this.sounds.hasOwnProperty(sound)) {
this.sounds[sound] = {
"current": 0,
"max": n_dups,
"sounds": this.make_duplicates(sound, n_dups)
}
}
}
}
/* Returns a list of n_dup duplicated Audio objects */
make_duplicates(sound, n_dup=5) {
let curr_sound = this.sounds[sound]
let sound_list = []
for (let i = 0; i <= n_dup; i++) {
let clone = curr_sound.cloneNode()
sound_list.push(clone)
}
return sound_list
}
/* plays a sound */
play(sound, volume=0.5) {
let index = this.sounds[sound]["current"]
if (index >= this.sounds[sound]["max"]-1) {
this.sounds[sound]["current"] = 0
}
if (!this.sounds[sound]["sounds"][index].ended) {
this.sounds[sound]["sounds"][index+1].currentTime = 0
this.sounds[sound]["sounds"][index+1].volume = volume
this.sounds[sound]["sounds"][index+1].play()
this.sounds[sound]["current"] += 1
} else {
this.sounds[sound]["sounds"][index].currentTime = 0
this.sounds[sound]["sounds"][index].volume = volume
this.sounds[sound]["sounds"][index].play()
}
}
}
return Sound;
});