mirror of
https://github.com/demostf/demo.js
synced 2026-06-04 00:54:14 +02:00
50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
var parseGameEvent = function (eventId, stream, events) {
|
|
if (!events[eventId]) {
|
|
return 'unknown';
|
|
}
|
|
var eventDescription = events[eventId];
|
|
var values = {};
|
|
for (var i = 0; i < eventDescription.entries.length; i++) {
|
|
var entry = eventDescription.entries[i];
|
|
values[entry.name] = getGameEventValue(stream, entry);
|
|
}
|
|
return {
|
|
name : eventDescription.name,
|
|
type : eventDescription.type,
|
|
values: values
|
|
};
|
|
};
|
|
|
|
var getGameEventValue = function (stream, entry) {
|
|
switch (entry.type) {
|
|
case 1:
|
|
return stream.readUTF8String();
|
|
case 2:
|
|
return stream.readFloat32();
|
|
case 3:
|
|
return stream.readInt32();
|
|
case 4:
|
|
return stream.readBits(16);
|
|
case 5:
|
|
return stream.readBits(8);
|
|
case 6:
|
|
return !!stream.readBits(1);
|
|
case 7:
|
|
return 'local value';
|
|
default:
|
|
throw 'invalid game event type';
|
|
}
|
|
};
|
|
|
|
|
|
module.exports = function (stream, events) { // 25: game event
|
|
var length = stream.readBits(11);
|
|
var end = stream._index + length;
|
|
var eventId = stream.readBits(9);
|
|
var event = parseGameEvent(eventId, stream, events);
|
|
stream._index = end;
|
|
return {
|
|
packetType: 'gameEvent',
|
|
event : event
|
|
}
|
|
};
|