mudb
Version:
Real-time database for multiplayer games
25 lines (20 loc) • 713 B
text/typescript
import { MuNumber } from './_number';
import { MuWriteStream, MuReadStream } from '../stream';
const SCHROEPPEL2 = 0xAAAAAAAA;
export class MuRelativeVarint extends MuNumber<'rvarint'> {
constructor (identity?:number) {
super(identity, 'rvarint');
}
public diff (base:number, target:number, out:MuWriteStream) : boolean {
if (base !== target) {
out.grow(5);
out.writeVarint((SCHROEPPEL2 + (target - base)) ^ SCHROEPPEL2);
return true;
}
return false;
}
public patch (base:number, inp:MuReadStream) : number {
const delta = (SCHROEPPEL2 ^ inp.readVarint()) - SCHROEPPEL2 >> 0;
return base + delta;
}
}