Counter-Strike/www/assets/js/EventProcessor.js
Daniel Maixner f748388655 Tuning
2022-10-04 19:45:10 +02:00

106 lines
3.4 KiB
JavaScript

import {EventList, GameOverReason, PauseReason} from "./Enums.js";
export class EventProcessor {
#callbacks
constructor(game) {
this.game = game
this.#loadCallbacks()
}
process(event) {
let callback = this.#callbacks[event.code];
if (callback === undefined) {
console.log("Unknown event callback for event.code " + event.code)
return false
}
callback(event.data)
return true
}
#loadCallbacks() {
const game = this.game
const eventsCallback = {}
eventsCallback[EventList.unknown] = function (data) {
console.log("Common server, fix yourself, event 0 - unknown")
console.log(data)
}
eventsCallback[EventList.GameOverEvent] = function (data) {
let gameOverReason = data.reason
let msg = ''
switch (gameOverReason) {
case GameOverReason.REASON_NOT_ALL_PLAYERS_CONNECTED:
msg = "Not all players connected during warmup"
break
case GameOverReason.ATTACKERS_WINS:
msg = "Attackers wins!"
break
case GameOverReason.DEFENDERS_WINS:
msg = "Defenders wins!"
break
case GameOverReason.TIE:
msg = "Max round reached. Tie!"
break
case GameOverReason.SERVER_ERROR:
msg = "Server error!"
break
}
game.end(msg)
}
eventsCallback[EventList.PauseStartEvent] = function (data) {
let pauseReason = data.reason
let msg = ''
switch (pauseReason) {
case PauseReason.FREEZE_TIME:
msg = "Freeze time"
break
case PauseReason.TIMEOUT_ATTACKERS:
msg = "Timeout attackers"
break
case PauseReason.TIMEOUT_DEFENDERS:
msg = "Timeout defenders"
break
case PauseReason.HALF_TIME:
msg = "Half time"
break
}
game.pause(msg, data.ms)
}
eventsCallback[EventList.PauseEndEvent] = function () {
game.unpause()
}
eventsCallback[EventList.RoundStartEvent] = function (data) {
game.roundStart(data.attackers, data.defenders)
}
eventsCallback[EventList.RoundEndEvent] = function (data) {
game.roundEnd(data.attackersWins, data.round)
game.score.attackers = data.scoreAttackers
game.score.defenders = data.scoreDefenders
}
eventsCallback[EventList.GameStartEvent] = function (options) {
game.setOptions(options)
}
eventsCallback[EventList.RoundEndCoolDownEvent] = function () {
// do nothing, maybe show MVP and play music kit
}
eventsCallback[EventList.KillEvent] = function (data) {
game.playerKilled(data.playerDead, data.playerCulprit, data.headshot, data.itemId)
}
eventsCallback[EventList.SoundEvent] = function (data) {
// TODO HRTF https://threejs.org/docs/#api/en/audio/Audio https://threejs.org/examples/?q=audio#webaudio_orientation
}
this.#callbacks = eventsCallback
}
}