mirror of
https://github.com/demostf/demo.js
synced 2026-06-03 16:44:12 +02:00
first step for location information of pov demos
This commit is contained in:
parent
981719e797
commit
2d26dfdfb5
4 changed files with 69 additions and 8 deletions
|
|
@ -1,6 +1,6 @@
|
|||
var ParserGenerator = require('../../parsergenerator');
|
||||
|
||||
var baseParser = ParserGenerator.make('entityMessage', 'index{11}id{9}length{11}data{$length}');
|
||||
var baseParser = ParserGenerator.make('entityMessage', 'index{11}classId{9}length{11}data{$length}');
|
||||
|
||||
module.exports = function (stream) { // 24: entityMessage
|
||||
return baseParser(stream); //todo parse data further?
|
||||
|
|
|
|||
|
|
@ -5,11 +5,12 @@ var ParserGenerator = require('./parsergenerator');
|
|||
// https://github.com/stgn/netdecode/blob/master/Packet.cs
|
||||
// https://github.com/LestaD/SourceEngine2007/blob/master/src_main/common/netmessages.cpp
|
||||
|
||||
var Packet = function (type, tick, stream, length) {
|
||||
var Packet = function (type, tick, stream, length, viewOrigin) {
|
||||
this.type = type;
|
||||
this.tick = tick;
|
||||
this.stream = stream;
|
||||
this.length = length;//length in bytes
|
||||
this.viewOrigin = viewOrigin;
|
||||
};
|
||||
|
||||
Packet.gameEventMap = {};
|
||||
|
|
@ -31,6 +32,9 @@ Packet.prototype.parse = function () {
|
|||
var type = this.stream.readBits(6);
|
||||
if (Packet.parsers[type]) {
|
||||
var packet = Packet.parsers[type].call(this, this.stream, Packet.gameEventMap, entities);
|
||||
if (packet) {
|
||||
packet.viewOrigin = this.viewOrigin;
|
||||
}
|
||||
//console.log(packet);
|
||||
packets.push(packet);
|
||||
} else {
|
||||
|
|
|
|||
30
parser.js
30
parser.js
|
|
@ -4,6 +4,7 @@ var State = require('./state');
|
|||
var ConsoleCmd = require('./consolecmd');
|
||||
var StringTable = require('./stringtable');
|
||||
var DataTable = require('./datatable');
|
||||
var UserCmd = require('./usercmd');
|
||||
var BitStream = require('bit-buffer').BitStream;
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
|
||||
|
|
@ -61,18 +62,17 @@ Parser.prototype.parseBody = function () {
|
|||
return this.state.get();
|
||||
};
|
||||
|
||||
Parser.prototype.parseMessage = function (buffer, type, tick, length) {
|
||||
Parser.prototype.parseMessage = function (buffer, type, tick, length, viewOrigin) {
|
||||
var data = new BitStream(buffer);
|
||||
|
||||
switch (type) {
|
||||
case Parser.MessageType.Sigon:
|
||||
case Parser.MessageType.Packet:
|
||||
return new Packet(type, tick, data, length);
|
||||
return new Packet(type, tick, data, length, viewOrigin);
|
||||
case Parser.MessageType.ConsoleCmd:
|
||||
return new ConsoleCmd(type, tick, data, length);
|
||||
case Parser.MessageType.UserCmd:
|
||||
//console.log('usercmd');
|
||||
return true;
|
||||
return new UserCmd(type, tick, data, length, this.viewOrigin, this.viewAngles);
|
||||
case Parser.MessageType.DataTables:
|
||||
return new DataTable(type, tick, data, length);
|
||||
case Parser.MessageType.StringTables:
|
||||
|
|
@ -102,10 +102,28 @@ Parser.prototype.readMessage = function (stream) {
|
|||
var tick = stream.readInt32();
|
||||
var start, length, buffer;
|
||||
|
||||
var viewOrigin = [];
|
||||
var viewAngles = [];
|
||||
|
||||
switch (type) {
|
||||
case Parser.MessageType.Sigon:
|
||||
case Parser.MessageType.Packet:
|
||||
stream.byteIndex += 0x54; // command/sequence info
|
||||
this.stream.readInt32(); // flags
|
||||
for (var j = 0; j < 2; j++) {
|
||||
viewOrigin[j] = [];
|
||||
viewAngles[j] = [];
|
||||
for (var i = 0; i < 3; i++) {
|
||||
viewOrigin[j][i] = this.stream.readInt32();
|
||||
}
|
||||
for (i = 0; i < 3; i++) {
|
||||
viewAngles[j][i] = this.stream.readInt32();
|
||||
}
|
||||
for (i = 0; i < 3; i++) {
|
||||
this.stream.readInt32(); // local viewAngles
|
||||
}
|
||||
}
|
||||
this.stream.readInt32(); // sequence in
|
||||
this.stream.readInt32(); // sequence out
|
||||
break;
|
||||
case Parser.MessageType.UserCmd:
|
||||
stream.byteIndex += 0x04; // unknown / outgoing sequence
|
||||
|
|
@ -120,7 +138,7 @@ Parser.prototype.readMessage = function (stream) {
|
|||
start = stream.byteIndex;
|
||||
buffer = stream.buffer.slice(start, start + length);
|
||||
stream.byteIndex += length;
|
||||
return this.parseMessage(buffer, type, tick, length);
|
||||
return this.parseMessage(buffer, type, tick, length, viewOrigin);
|
||||
};
|
||||
|
||||
module.exports = Parser;
|
||||
|
|
|
|||
39
usercmd.js
Normal file
39
usercmd.js
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
var UserCMD = function (type, tick, stream, length, viewOrigin, viewAngles) {
|
||||
this.type = type;
|
||||
this.tick = tick;
|
||||
this.stream = stream;
|
||||
this.length = length;//length in bytes
|
||||
this.viewOrigin = viewOrigin;
|
||||
this.viewAngles = viewAngles;
|
||||
};
|
||||
|
||||
UserCMD.prototype.parse = function () {
|
||||
return [];
|
||||
var divSize = Math.floor((this.length + 2) / 4);
|
||||
var byteShift = new Array(3);
|
||||
var lastByte = this.stream.readBits(8);
|
||||
var TempUCMD = 0;
|
||||
for (var i = 1; i < divSize; i++) {
|
||||
var byte = this.stream.readBits(8);
|
||||
if (i <= 4) {
|
||||
byteShift[0] = lastByte >> i;
|
||||
byteShift[1] = byte << 32 - i;
|
||||
} else {
|
||||
byteShift[0] = lastByte >> 9;
|
||||
byteShift[1] = byte << 32 - i;
|
||||
}
|
||||
byteShift[2] = byteShift[0] | byteShift[0];
|
||||
if (i == divSize - 1) {
|
||||
if (byteShift[2] > 0 && byteShift[2] < 1321100) {
|
||||
TempUCMD = byteShift[2];
|
||||
} else {
|
||||
TempUCMD = null;
|
||||
}
|
||||
}
|
||||
lastByte = byte;
|
||||
}
|
||||
// console.log('move', this.tick, this.viewOrigin[0][0], this.viewOrigin[0][1], this.viewAngles[0][0], this.viewAngles[0][1], TempUCMD);
|
||||
return [];
|
||||
};
|
||||
|
||||
module.exports = UserCMD;
|
||||
Loading…
Add table
Add a link
Reference in a new issue