1
0
Fork 0
mirror of https://github.com/demostf/demo.js synced 2026-06-04 09:04:13 +02:00

use Map instead of Object for gameEventList

This commit is contained in:
Robin Appelman 2017-09-02 02:11:20 +02:00
commit 8f0d372b13
9 changed files with 50 additions and 49 deletions

View file

@ -1,16 +1,16 @@
import {BitStream} from 'bit-buffer';
import {
GameEvent as IGameEvent, GameEventDefinition, GameEventDefinitionMap, GameEventEntry, GameEventType,
GameEvent as IGameEvent, GameEventDefinition, GameEventEntry, GameEventType,
GameEventValue, GameEventValueMap,
} from '../../Data/GameEvent';
import {Match} from '../../Data/Match';
import {GameEventPacket} from '../../Data/Packet';
function parseGameEvent(eventId: number, stream: BitStream, events: GameEventDefinitionMap): IGameEvent {
if (!events[eventId]) {
function parseGameEvent(eventId: number, stream: BitStream, events: Map<number, GameEventDefinition>): IGameEvent {
const eventDescription = events.get(eventId);
if (!eventDescription) {
throw new Error('unknown event type');
}
const eventDescription: GameEventDefinition = events[eventId];
const values: GameEventValueMap = {};
for (const entry of eventDescription.entries) {
const value = getGameEventValue(stream, entry);

View file

@ -1,5 +1,5 @@
import {BitStream} from 'bit-buffer';
import {GameEventDefinition, GameEventDefinitionMap, GameEventEntry} from '../../Data/GameEvent';
import {GameEventDefinition, GameEventEntry} from '../../Data/GameEvent';
import {GameEventListPacket} from '../../Data/Packet';
export function ParseGameEventList(stream: BitStream): GameEventListPacket { // 30: gameEventList
@ -8,7 +8,7 @@ export function ParseGameEventList(stream: BitStream): GameEventListPacket { //
// list of game events and parameters
const numEvents = stream.readBits(9);
const length = stream.readBits(20);
const eventList: GameEventDefinitionMap = {};
const eventList: Map<number, GameEventDefinition> = new Map();
for (let i = 0; i < numEvents; i++) {
const id = stream.readBits(9);
const name = stream.readASCIIString();
@ -21,11 +21,11 @@ export function ParseGameEventList(stream: BitStream): GameEventListPacket { //
});
type = stream.readBits(3);
}
eventList[id] = {
eventList.set(id, {
id,
name,
entries,
};
});
}
return {
packetType: 'gameEventList',
@ -34,13 +34,13 @@ export function ParseGameEventList(stream: BitStream): GameEventListPacket { //
}
export function EncodeGameEventList(packet: GameEventListPacket, stream: BitStream) {
stream.writeBits(Object.keys(packet.eventList).length, 9);
const definitions = Array.from(packet.eventList.values());
stream.writeBits(definitions.length, 9);
const eventListBitLength = getEventListLength(Object.values(packet.eventList));
const eventListBitLength = getEventListLength(definitions);
const eventListStream = new BitStream(new ArrayBuffer(Math.ceil(eventListBitLength / 8)));
for (const id in packet.eventList) {
const definition = packet.eventList[id] as GameEventDefinition;
for (const definition of definitions) {
eventListStream.writeBits(definition.id, 9);
eventListStream.writeASCIIString(definition.name);
for (const entry of definition.entries) {