- New events: ObjectPhysicsDataEvent, ParcelPropertiesEvent, NewObjectEvent, ObjectUpdateEvent, ObjectKilledEvent - Added getXML function to Color4, Vector2, Vector3, Vector4, GameObject, Region, Quaternion, UUID for opensim-compatible XML export - Added TextureAnim and ParticleSystem decoding to the "full" ObjectStore - Object store will automatically request missing "parent" prims - "setPersist" - When persist is TRUE, the ObjectStore will not forget about "killed" prims - useful for region scanning - Support for Flexible params, Light params, LightImage params, Mesh data, Sculpt maps - Fixed object scale being incorrectly calculated - Add terrain decoding (this was a ballache) - Add parcel map decoding - Add support for region windlight settings (region.environment) - Add support for materials (normal / specular maps) - Add getBuffer, getLong and bitwiseOr to UUID - Added a circular-reference-safe JSONStringify to Utils - Add XferFile capability to Circuit PUBLIC API: AssetCommands: - Rework "downloadAsset" to detect failures - NEW: downloadInventoryAsset() - uses TransferRequest for prim inventory items - NEW: getMaterials() - resolves material UUIDs RegionCommands: - NEW: getTerrainTextures() - NEW: exportSettings() - OpenSim XML export of region settings - NEW: async getTerrain() - Get binary terrain heightmap, 256x256 float32 - resolveObjects() - now fetches task inventory contents too. - resolveObjects() - fix calculation of land impact - NEW: getObjectByLocalID(localID: number, timeout: number) - NEW: getObjectByUUID(uuid: UUID, timeout: number) - NEW: getParcels(); - NEW: pruneObjects - removes missing GameObjects from a list - NEW: setPersist - prevent objectstore from forgetting about killed gameobjects
67 lines
2.0 KiB
TypeScript
67 lines
2.0 KiB
TypeScript
import {XMLElementOrXMLNode} from 'xmlbuilder';
|
|
|
|
export class Color4
|
|
{
|
|
static black: Color4 = new Color4(0.0, 0.0, 0.0, 1.0);
|
|
static white: Color4 = new Color4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
static getXML(doc: XMLElementOrXMLNode, c?: Color4)
|
|
{
|
|
if (c === undefined)
|
|
{
|
|
c = Color4.white;
|
|
}
|
|
doc.ele('R', c.red);
|
|
doc.ele('G', c.green);
|
|
doc.ele('B', c.blue);
|
|
doc.ele('A', c.alpha);
|
|
}
|
|
|
|
constructor(public red: number | Buffer | number[], public green: number = 0, public blue: number | boolean = 0, public alpha: number | boolean = 0)
|
|
{
|
|
if (red instanceof Buffer && typeof blue === 'boolean')
|
|
{
|
|
const buf = red;
|
|
const pos = green;
|
|
const inverted = blue;
|
|
let alphaInverted = false;
|
|
if (typeof alpha === 'boolean' && alpha === true)
|
|
{
|
|
alphaInverted = true;
|
|
}
|
|
|
|
this.red = 0.0;
|
|
this.green = 0.0;
|
|
this.blue = 0.0;
|
|
this.alpha = 0.0;
|
|
|
|
const quanta: number = 1.0 / 255.0;
|
|
if (inverted)
|
|
{
|
|
this.red = (255 - buf[pos]) * quanta;
|
|
this.green = (255 - buf[pos + 1]) * quanta;
|
|
this.blue = (255 - buf[pos + 2]) * quanta;
|
|
this.alpha = (255 - buf[pos + 3]) * quanta;
|
|
}
|
|
else
|
|
{
|
|
this.red = buf[pos] * quanta;
|
|
this.green = buf[pos + 1] * quanta;
|
|
this.blue = buf[pos + 2] * quanta;
|
|
this.alpha = buf[pos + 3] * quanta;
|
|
}
|
|
if (alphaInverted)
|
|
{
|
|
this.alpha = 1.0 - this.alpha;
|
|
}
|
|
}
|
|
if (Array.isArray(red))
|
|
{
|
|
this.green = red[1];
|
|
this.blue = red[2];
|
|
this.alpha = red[3];
|
|
this.red = red[0];
|
|
}
|
|
}
|
|
}
|