Extensive work on building, wearables, assets, inventory, attachments, serialization, etc.
Resolves #36
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
import { UUID } from '../UUID';
|
||||
import { Color4 } from '../Color4';
|
||||
import * as LLSD from '@caspertech/llsd';
|
||||
import { Utils } from '../Utils';
|
||||
|
||||
export class Material
|
||||
{
|
||||
@@ -20,5 +22,131 @@ export class Material
|
||||
specRepeatX: number;
|
||||
specRepeatY: number;
|
||||
specRotation: number;
|
||||
llsd: string;
|
||||
|
||||
static fromLLSD(llsd: string): Material
|
||||
{
|
||||
const parsed = LLSD.LLSD.parseXML(llsd);
|
||||
return this.fromLLSDObject(parsed);
|
||||
}
|
||||
static fromLLSDObject(parsed: any): Material
|
||||
{
|
||||
const material = new Material();
|
||||
if (parsed['AlphaMaskCutoff'] !== undefined)
|
||||
{
|
||||
material.alphaMaskCutoff = parsed['AlphaMaskCutoff'];
|
||||
}
|
||||
if (parsed['DiffuseAlphaMode'] !== undefined)
|
||||
{
|
||||
material.diffuseAlphaMode = parsed['DiffuseAlphaMode'];
|
||||
}
|
||||
if (parsed['EnvIntensity'] !== undefined)
|
||||
{
|
||||
material.envIntensity = parsed['EnvIntensity'];
|
||||
}
|
||||
if (parsed['NormMap'] !== undefined)
|
||||
{
|
||||
material.normMap = new UUID(parsed['NormMap'].toString())
|
||||
}
|
||||
if (parsed['NormOffsetX'] !== undefined)
|
||||
{
|
||||
material.normOffsetX = parsed['NormOffsetX'];
|
||||
}
|
||||
if (parsed['NormOffsetY'] !== undefined)
|
||||
{
|
||||
material.normOffsetY = parsed['NormOffsetY'];
|
||||
}
|
||||
if (parsed['NormRepeatX'] !== undefined)
|
||||
{
|
||||
material.normRepeatX = parsed['NormRepeatX'];
|
||||
}
|
||||
if (parsed['NormRepeatY'] !== undefined)
|
||||
{
|
||||
material.normRepeatY = parsed['NormRepeatY'];
|
||||
}
|
||||
if (parsed['NormRotation'] !== undefined)
|
||||
{
|
||||
material.normRotation = parsed['NormRotation'];
|
||||
}
|
||||
if (parsed['SpecColor'] !== undefined && Array.isArray(parsed['SpecColor']) && parsed['SpecColor'].length > 3)
|
||||
{
|
||||
material.specColor = new Color4([
|
||||
parsed['SpecColor'][0],
|
||||
parsed['SpecColor'][1],
|
||||
parsed['SpecColor'][2],
|
||||
parsed['SpecColor'][3]
|
||||
]);
|
||||
}
|
||||
if (parsed['SpecExp'] !== undefined)
|
||||
{
|
||||
material.specExp = parsed['SpecExp'];
|
||||
}
|
||||
if (parsed['SpecMap'] !== undefined)
|
||||
{
|
||||
material.specMap = new UUID(parsed['SpecMap'].toString())
|
||||
}
|
||||
if (parsed['SpecOffsetX'] !== undefined)
|
||||
{
|
||||
material.specOffsetX = parsed['SpecOffsetX'];
|
||||
}
|
||||
if (parsed['SpecOffsetY'] !== undefined)
|
||||
{
|
||||
material.specOffsetY = parsed['SpecOffsetY'];
|
||||
}
|
||||
if (parsed['SpecRepeatX'] !== undefined)
|
||||
{
|
||||
material.specRepeatX = parsed['SpecRepeatX'];
|
||||
}
|
||||
if (parsed['SpecRepeatY'] !== undefined)
|
||||
{
|
||||
material.specRepeatY = parsed['SpecRepeatY'];
|
||||
}
|
||||
if (parsed['SpecRotation'] !== undefined)
|
||||
{
|
||||
material.specRotation = parsed['SpecRotation'];
|
||||
}
|
||||
return material;
|
||||
}
|
||||
|
||||
toLLSDObject(): any
|
||||
{
|
||||
return {
|
||||
'AlphaMaskCutoff': this.alphaMaskCutoff,
|
||||
'DiffuseAlphaMode': this.diffuseAlphaMode,
|
||||
'EnvIntensity': this.envIntensity,
|
||||
'NormMap': new LLSD.UUID(this.normMap.toString()),
|
||||
'NormOffsetX': this.normOffsetX,
|
||||
'NormOffsetY': this.normOffsetY,
|
||||
'NormRepeatX': this.normRepeatX,
|
||||
'NormRepeatY': this.normRepeatY,
|
||||
'NormRotation': this.normRotation,
|
||||
'SpecColor': [
|
||||
this.specColor.getRed(),
|
||||
this.specColor.getGreen(),
|
||||
this.specColor.getBlue(),
|
||||
this.specColor.getAlpha()
|
||||
],
|
||||
'SpecExp': this.specExp,
|
||||
'SpecMap': new LLSD.UUID(this.specMap.toString()),
|
||||
'SpecOffsetX': this.specOffsetX,
|
||||
'SpecOffsetY': this.specOffsetY,
|
||||
'SpecRepeatX': this.specRepeatX,
|
||||
'SpecRepeatY': this.specRepeatY,
|
||||
'SpecRotation': this.specRotation,
|
||||
};
|
||||
}
|
||||
|
||||
toLLSD(): string
|
||||
{
|
||||
return LLSD.LLSD.formatXML(this.toLLSDObject());
|
||||
}
|
||||
|
||||
async toAsset(uuid: UUID): Promise<Buffer>
|
||||
{
|
||||
const asset = {
|
||||
'ID': new LLSD.UUID(uuid.toString()),
|
||||
'Material': this.toLLSD()
|
||||
};
|
||||
const binary = LLSD.LLSD.formatBinary(asset);
|
||||
return await Utils.deflate(Buffer.from(binary.toArray()));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user