aboutsummaryrefslogtreecommitdiff
path: root/webAO/packets/handlers/handleEM.ts
diff options
context:
space:
mode:
Diffstat (limited to 'webAO/packets/handlers/handleEM.ts')
-rw-r--r--webAO/packets/handlers/handleEM.ts43
1 files changed, 43 insertions, 0 deletions
diff --git a/webAO/packets/handlers/handleEM.ts b/webAO/packets/handlers/handleEM.ts
new file mode 100644
index 0000000..5e49ea4
--- /dev/null
+++ b/webAO/packets/handlers/handleEM.ts
@@ -0,0 +1,43 @@
+import { client } from '../../client'
+import { addTrack } from '../../client/addTrack';
+import { createArea } from '../../client/createArea';
+import { fix_last_area } from '../../client/fixLastArea';
+import { isAudio } from '../../client/isAudio';
+import { safeTags } from '../../encoding';
+
+/**
+ * Handles incoming music information, containing multiple entries
+ * per packet.
+ * @param {Array} args packet arguments
+ */
+export const handleEM = (args: string[]) => {
+ document.getElementById("client_loadingtext")!.innerHTML = "Loading Music";
+ if (args[1] === "0") {
+ client.resetMusicList();
+ client.resetAreaList();
+ client.musics_time = false;
+ }
+
+ for (let i = 2; i < args.length - 1; i++) {
+ if (i % 2 === 0) {
+ const trackname = safeTags(args[i]);
+ const trackindex = Number(args[i - 1]);
+ (<HTMLProgressElement>(
+ document.getElementById("client_loadingbar")
+ )).value =
+ client.char_list_length + client.evidence_list_length + trackindex;
+ if (client.musics_time) {
+ addTrack(trackname);
+ } else if (isAudio(trackname)) {
+ client.musics_time = true;
+ fix_last_area();
+ addTrack(trackname);
+ } else {
+ createArea(trackindex, trackname);
+ }
+ }
+ }
+
+ // get the next batch of tracks
+ client.sender.sendServer(`AM#${Number(args[1]) / 10 + 1}#%`);
+} \ No newline at end of file