@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
52 lines (41 loc) • 1.35 kB
JavaScript
import { assert } from "../../../../core/assert.js";
/**
* Upgrade binary data by executing a sequence of upgraders on it
* @param {BinaryClassUpgrader[]} upgraders
* @param {BinaryBuffer} buffer input data
* @param {BinaryBuffer} tempBuffer0
* @param {BinaryBuffer} tempBuffer1
* @return {BinaryBuffer} buffer with upgraded data, this will be either {@link tempBuffer0} or {@link tempBuffer1}
*/
export function executeBinaryClassUpgraderChain(
upgraders,
buffer,
tempBuffer0,
tempBuffer1
) {
assert.isArray(upgraders, 'upgraders');
assert.defined(buffer, 'buffer');
assert.defined(tempBuffer0);
assert.defined(tempBuffer1);
/**
*
* @type {BinaryBuffer[]}
*/
const tempBuffers = [tempBuffer0, tempBuffer1];
let sourceBuffer = buffer;
let targetBuffer = tempBuffer0;
const upgraderCount = upgraders.length;
//perform upgrade
for (
let i = 0;
i < upgraderCount;
i++, sourceBuffer = targetBuffer, targetBuffer = tempBuffers[i % 2]
) {
const upgrader = upgraders[i];
targetBuffer.position = 0;
upgrader.upgrade(sourceBuffer, targetBuffer);
//rewind target buffer so it can be read
targetBuffer.position = 0;
}
return sourceBuffer;
}