- Add grabObject, deGrabObject, dragGrabbedObject, touchObject to RegionCommands (closes #8)
- Properly decode object TextureEntry - Properly decode object ParticleSystem - Properly decode object ObjectData - Properly decode object TextColor - Properly decode Linden Tree species - Correct handling of ObjectUpdateCached (only request objects if we don't already have them) - Implement handling of ImprovedTerseObjectUpdate to complete support for R-Tree object searching - Object store interface: getObjectByUUID, getObjectByLocalID
This commit is contained in:
266
dist/classes/TextureEntry.js
vendored
Normal file
266
dist/classes/TextureEntry.js
vendored
Normal file
@@ -0,0 +1,266 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const TextureEntryFace_1 = require("./TextureEntryFace");
|
||||
const UUID_1 = require("./UUID");
|
||||
const Color4_1 = require("./Color4");
|
||||
const Utils_1 = require("./Utils");
|
||||
class TextureEntry {
|
||||
constructor(buf) {
|
||||
this.faces = [];
|
||||
if (buf.length < 16) {
|
||||
this.defaultTexture = null;
|
||||
}
|
||||
else {
|
||||
this.defaultTexture = new TextureEntryFace_1.TextureEntryFace(null);
|
||||
let pos = 0;
|
||||
let i = pos;
|
||||
{
|
||||
this.defaultTexture.textureID = new UUID_1.UUID(buf, i);
|
||||
i += 16;
|
||||
let done = false;
|
||||
while (!done) {
|
||||
const result = TextureEntry.readFaceBitfield(buf, i);
|
||||
done = !result.result;
|
||||
i = result.pos;
|
||||
if (!done) {
|
||||
const uuid = new UUID_1.UUID(buf, i);
|
||||
i += 16;
|
||||
for (let face = 0, bit = 1; face < result.bitfieldSize; face++, bit <<= 1) {
|
||||
if ((result.faceBits & bit) !== 0) {
|
||||
this.createFace(face);
|
||||
this.faces[face].textureID = uuid;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
this.defaultTexture.rgba = new Color4_1.Color4(buf, i, true);
|
||||
i += 4;
|
||||
let done = false;
|
||||
while (!done) {
|
||||
const result = TextureEntry.readFaceBitfield(buf, i);
|
||||
done = !result.result;
|
||||
i = result.pos;
|
||||
if (!done) {
|
||||
const tmpColor = new Color4_1.Color4(buf, i, true);
|
||||
i += 4;
|
||||
for (let face = 0, bit = 1; face < result.bitfieldSize; face++, bit <<= 1) {
|
||||
if ((result.faceBits & bit) !== 0) {
|
||||
this.createFace(face);
|
||||
this.faces[face].rgba = tmpColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
this.defaultTexture.repeatU = buf.readFloatLE(i);
|
||||
i += 4;
|
||||
let done = false;
|
||||
while (!done) {
|
||||
const result = TextureEntry.readFaceBitfield(buf, i);
|
||||
done = !result.result;
|
||||
i = result.pos;
|
||||
if (!done) {
|
||||
const tmpFloat = buf.readFloatLE(i);
|
||||
i += 4;
|
||||
for (let face = 0, bit = 1; face < result.bitfieldSize; face++, bit <<= 1) {
|
||||
if ((result.faceBits & bit) !== 0) {
|
||||
this.createFace(face);
|
||||
this.faces[face].repeatU = tmpFloat;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
this.defaultTexture.repeatV = buf.readFloatLE(i);
|
||||
i += 4;
|
||||
let done = false;
|
||||
while (!done) {
|
||||
const result = TextureEntry.readFaceBitfield(buf, i);
|
||||
done = !result.result;
|
||||
i = result.pos;
|
||||
if (!done) {
|
||||
const tmpFloat = buf.readFloatLE(i);
|
||||
i += 4;
|
||||
for (let face = 0, bit = 1; face < result.bitfieldSize; face++, bit <<= 1) {
|
||||
if ((result.faceBits & bit) !== 0) {
|
||||
this.createFace(face);
|
||||
this.faces[face].repeatV = tmpFloat;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
this.defaultTexture.offsetU = Utils_1.Utils.ReadOffsetFloat(buf, i);
|
||||
i += 2;
|
||||
let done = false;
|
||||
while (!done) {
|
||||
const result = TextureEntry.readFaceBitfield(buf, i);
|
||||
done = !result.result;
|
||||
i = result.pos;
|
||||
if (!done) {
|
||||
const tmpFloat = Utils_1.Utils.ReadOffsetFloat(buf, i);
|
||||
i += 2;
|
||||
for (let face = 0, bit = 1; face < result.bitfieldSize; face++, bit <<= 1) {
|
||||
if ((result.faceBits & bit) !== 0) {
|
||||
this.createFace(face);
|
||||
this.faces[face].offsetU = tmpFloat;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
this.defaultTexture.offsetV = Utils_1.Utils.ReadOffsetFloat(buf, i);
|
||||
i += 2;
|
||||
let done = false;
|
||||
while (!done) {
|
||||
const result = TextureEntry.readFaceBitfield(buf, i);
|
||||
done = !result.result;
|
||||
i = result.pos;
|
||||
if (!done) {
|
||||
const tmpFloat = Utils_1.Utils.ReadOffsetFloat(buf, i);
|
||||
i += 2;
|
||||
for (let face = 0, bit = 1; face < result.bitfieldSize; face++, bit <<= 1) {
|
||||
if ((result.faceBits & bit) !== 0) {
|
||||
this.createFace(face);
|
||||
this.faces[face].offsetV = tmpFloat;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
this.defaultTexture.rotation = Utils_1.Utils.ReadRotationFloat(buf, i);
|
||||
i += 2;
|
||||
let done = false;
|
||||
while (!done) {
|
||||
const result = TextureEntry.readFaceBitfield(buf, i);
|
||||
done = !result.result;
|
||||
i = result.pos;
|
||||
if (!done) {
|
||||
const tmpFloat = Utils_1.Utils.ReadRotationFloat(buf, i);
|
||||
i += 2;
|
||||
for (let face = 0, bit = 1; face < result.bitfieldSize; face++, bit <<= 1) {
|
||||
if ((result.faceBits & bit) !== 0) {
|
||||
this.createFace(face);
|
||||
this.faces[face].rotation = tmpFloat;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
this.defaultTexture.materialb = buf[i++];
|
||||
let done = false;
|
||||
while (!done) {
|
||||
const result = TextureEntry.readFaceBitfield(buf, i);
|
||||
done = !result.result;
|
||||
i = result.pos;
|
||||
if (!done) {
|
||||
const tmpByte = buf[i++];
|
||||
for (let face = 0, bit = 1; face < result.bitfieldSize; face++, bit <<= 1) {
|
||||
if ((result.faceBits & bit) !== 0) {
|
||||
this.createFace(face);
|
||||
this.faces[face].materialb = tmpByte;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
this.defaultTexture.mediab = buf[i++];
|
||||
let done = false;
|
||||
while (i - pos < buf.length && !done) {
|
||||
const result = TextureEntry.readFaceBitfield(buf, i);
|
||||
done = !result.result;
|
||||
i = result.pos;
|
||||
if (!done) {
|
||||
const tmpByte = buf[i++];
|
||||
for (let face = 0, bit = 1; face < result.bitfieldSize; face++, bit <<= 1) {
|
||||
if ((result.faceBits & bit) !== 0) {
|
||||
this.createFace(face);
|
||||
this.faces[face].mediab = tmpByte;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
this.defaultTexture.glow = Utils_1.Utils.ReadGlowFloat(buf, i++);
|
||||
let done = false;
|
||||
while (!done) {
|
||||
const result = TextureEntry.readFaceBitfield(buf, i);
|
||||
done = !result.result;
|
||||
i = result.pos;
|
||||
if (!done) {
|
||||
const tmpFloat = Utils_1.Utils.ReadGlowFloat(buf, i++);
|
||||
for (let face = 0, bit = 1; face < result.bitfieldSize; face++, bit <<= 1) {
|
||||
if ((result.faceBits & bit) !== 0) {
|
||||
this.createFace(face);
|
||||
this.faces[face].glow = tmpFloat;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
const len = i - pos + 16;
|
||||
if (i - pos + 16 <= buf.length) {
|
||||
this.defaultTexture.materialID = new UUID_1.UUID(buf, i);
|
||||
i += 16;
|
||||
let done = false;
|
||||
while (i - pos + 16 <= buf.length && !done) {
|
||||
const result = TextureEntry.readFaceBitfield(buf, i);
|
||||
done = !result.result;
|
||||
i = result.pos;
|
||||
if (!done) {
|
||||
const uuid = new UUID_1.UUID(buf, i);
|
||||
i += 16;
|
||||
for (let face = 0, bit = 1; face < result.bitfieldSize; face++, bit <<= 1) {
|
||||
if ((result.faceBits & bit) !== 0) {
|
||||
this.createFace(face);
|
||||
this.faces[face].materialID = uuid;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
static readFaceBitfield(buf, pos) {
|
||||
const result = {
|
||||
result: false,
|
||||
pos: pos,
|
||||
faceBits: 0,
|
||||
bitfieldSize: 0
|
||||
};
|
||||
if (result.pos >= buf.length) {
|
||||
return result;
|
||||
}
|
||||
let b = 0;
|
||||
do {
|
||||
b = buf.readUInt8(result.pos);
|
||||
result.faceBits = (result.faceBits << 7) | (b & 0x7F);
|
||||
result.bitfieldSize += 7;
|
||||
result.pos++;
|
||||
} while ((b & 0x80) !== 0);
|
||||
result.result = (result.faceBits !== 0);
|
||||
return result;
|
||||
}
|
||||
createFace(face) {
|
||||
if (face > 32) {
|
||||
console.error('Warning: Face number exceeds maximum number of faces: 32');
|
||||
}
|
||||
while (this.faces.length <= face) {
|
||||
this.faces.push(new TextureEntryFace_1.TextureEntryFace(this.defaultTexture));
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.TextureEntry = TextureEntry;
|
||||
//# sourceMappingURL=TextureEntry.js.map
|
||||
Reference in New Issue
Block a user