mirror of
https://github.com/demostf/demo.js
synced 2026-06-04 00:54:14 +02:00
80 lines
2 KiB
JavaScript
80 lines
2 KiB
JavaScript
var PVS = {
|
|
PRESERVE: 0,
|
|
ENTER : 1,
|
|
LEAVE : 2,
|
|
DELETE : 3
|
|
};
|
|
|
|
|
|
function readIndex(stream, baseIndex) {
|
|
// https://github.com/skadistats/smoke/blob/a2954fbe2fa3936d64aee5b5567be294fef228e6/smoke/io/stream/entity.pyx#L15
|
|
var encodedIndex = stream.readBits(6);
|
|
if (encodedIndex & 0x30) {
|
|
var a = (encodedIndex >> 4) & 3;
|
|
var b = (a == 3) ? 16 : 0;
|
|
var i = stream.readBits(4 * a + b) << 4;
|
|
encodedIndex = i | (encodedIndex & 0x0f);
|
|
}
|
|
return baseIndex + encodedIndex + 1;
|
|
}
|
|
|
|
function readPVS(stream) {
|
|
// https://github.com/skadistats/smoke/blob/a2954fbe2fa3936d64aee5b5567be294fef228e6/smoke/io/stream/entity.pyx#L24
|
|
var pvs;
|
|
var hi = stream.readBoolean();
|
|
var low = stream.readBoolean();
|
|
if (low && !hi) {
|
|
pvs = PVS.ENTER;
|
|
} else if (!(hi || low)) {
|
|
pvs = PVS.PRESERVE;
|
|
} else if (hi) {
|
|
pvs = (low) ? (PVS.LEAVE | PVS.DELETE) : PVS.LEAVE;
|
|
} else {
|
|
pvs = -1;
|
|
}
|
|
return pvs;
|
|
}
|
|
|
|
module.exports = function (stream, events, entities) { //26: packetEntities
|
|
// todo
|
|
var maxEntries = stream.readBits(11);
|
|
var isDelta = !!stream.readBits(1);
|
|
if (isDelta) {
|
|
var delta = stream.readInt32();
|
|
} else {
|
|
delta = null;
|
|
}
|
|
var baseLink = !!stream.readBits(1);
|
|
var updatedEntries = stream.readBits(11);
|
|
var length = stream.readBits(20);
|
|
var updatedBaseLink = !!stream.readBits(1);
|
|
var end = stream._index + length;
|
|
//console.log('max: ' + maxEntries);
|
|
//var entityId = -1;
|
|
//
|
|
//for (var i = 0; i < updatedEntries; i++) {
|
|
// entityId = readIndex(stream, entityId);
|
|
// var pvs = readPVS(stream);
|
|
// if (pvs = PVS.PRESERVE) {
|
|
//
|
|
// }
|
|
//}
|
|
stream._index = end;
|
|
//var ent = {
|
|
// packetType : 'packetEntities',
|
|
// maxEntries : maxEntries,
|
|
// isDelta : isDelta,
|
|
// delta : delta,
|
|
// baseLink : baseLink,
|
|
// updatedEntries : updatedEntries,
|
|
// length : length,
|
|
// updatedBaseLink: updatedBaseLink
|
|
//};
|
|
//console.log(ent);
|
|
//console.log(entities);
|
|
//process.exit();
|
|
return {
|
|
packetType: 'packetEntities',
|
|
entities : entities
|
|
};
|
|
};
|