Files
node-metaverse/lib/classes/TextureEntryFace.ts

259 lines
6.4 KiB
TypeScript

import { UUID } from './UUID';
import { Color4 } from './Color4';
import { TextureFlags } from '../enums/TextureFlags';
import { Bumpiness } from '../enums/Bumpiness';
import { Shininess } from '../enums/Shininess';
import { MappingType } from '../enums/MappingType';
export class TextureEntryFace
{
static BUMP_MASK = 0x1F;
static FULLBRIGHT_MASK = 0x20;
static SHINY_MASK = 0xC0;
static MEDIA_MASK = 0x01;
static TEX_MAP_MASK = 0x06;
private _textureID: UUID;
private _rgba: Color4;
private _repeatU: number;
private _repeatV: number;
private _offsetU: number;
private _offsetV: number;
private _rotation: number;
private _glow: number;
private _materialID: UUID;
private _bumpiness: Bumpiness = Bumpiness.None;
private _shininess: Shininess = Shininess.None;
private _mappingType: MappingType = MappingType.Default;
private _fullBright = false;
private _mediaFlags = false;
private _material: number;
private _media: number;
private hasAttribute: TextureFlags;
private defaultTexture: TextureEntryFace | null;
constructor(def: TextureEntryFace | null)
{
this.defaultTexture = def;
if (this.defaultTexture == null)
{
this.hasAttribute = TextureFlags.All;
}
else
{
this.hasAttribute = TextureFlags.None;
}
}
get rgba(): Color4
{
if (this._rgba === undefined && this.defaultTexture !== null)
{
return this.defaultTexture.rgba;
}
return this._rgba;
}
set rgba(value: Color4)
{
this._rgba = value;
}
get repeatU(): number
{
if (this._repeatU === undefined && this.defaultTexture !== null)
{
return this.defaultTexture.repeatU;
}
return this._repeatU;
}
set repeatU(value: number)
{
this._repeatU = value;
}
get repeatV(): number
{
if (this._repeatV === undefined && this.defaultTexture !== null)
{
return this.defaultTexture.repeatV;
}
return this._repeatV;
}
set repeatV(value: number)
{
this._repeatV = value;
}
get offsetU(): number
{
if (this._offsetU === undefined && this.defaultTexture !== null)
{
return this.defaultTexture.offsetU;
}
return this._offsetU;
}
set offsetU(value: number)
{
this._offsetU = value;
}
get offsetV(): number
{
if (this._offsetV === undefined && this.defaultTexture !== null)
{
return this.defaultTexture.offsetV;
}
return this._offsetV;
}
set offsetV(value: number)
{
this._offsetV = value;
}
get rotation(): number
{
if (this._rotation === undefined && this.defaultTexture !== null)
{
return this.defaultTexture.rotation;
}
return this._rotation;
}
set rotation(value: number)
{
this._rotation = value;
}
get glow(): number
{
if (this._glow === undefined && this.defaultTexture !== null)
{
return this.defaultTexture.glow
}
return this._glow;
}
set glow(value: number)
{
this._glow = value;
}
get textureID(): UUID
{
if (this._textureID === undefined && this.defaultTexture !== null)
{
return this.defaultTexture.textureID;
}
return this._textureID;
}
set textureID(value: UUID)
{
this._textureID = value;
}
get materialID(): UUID
{
if (this._materialID === undefined && this.defaultTexture !== null)
{
return this.defaultTexture.materialID;
}
return this._materialID;
}
set materialID(value: UUID)
{
this._materialID = value;
}
get material(): number
{
if (this._material === undefined && this.defaultTexture !== null)
{
return this.defaultTexture.material;
}
return this._material;
}
set material(material: number)
{
this._material = material;
if ((this.hasAttribute & TextureFlags.Material) !== 0)
{
this._bumpiness = this._material & TextureEntryFace.BUMP_MASK;
this._shininess = this._material & TextureEntryFace.SHINY_MASK;
this._fullBright = ((this._material & TextureEntryFace.FULLBRIGHT_MASK) !== 0);
}
else if (this.defaultTexture !== null)
{
this._bumpiness = this.defaultTexture._bumpiness;
this._shininess = this.defaultTexture._shininess;
this._fullBright = this.defaultTexture._fullBright;
}
}
get media(): number
{
if (this._media === undefined && this.defaultTexture !== null)
{
return this.defaultTexture.media;
}
return this._media;
}
set media(media: number)
{
this._media = media;
if ((this.hasAttribute & TextureFlags.Media) !== 0)
{
this._mappingType = media & TextureEntryFace.TEX_MAP_MASK;
this._mediaFlags = ((media & TextureEntryFace.MEDIA_MASK) !== 0);
}
else if (this.defaultTexture !== null)
{
this._mappingType = this.defaultTexture.mappingType;
this._mediaFlags = this.defaultTexture.mediaFlags;
}
else
{
throw new Error('No media attribute and default texture is null');
}
}
get mappingType(): number
{
if (this._mappingType === undefined && this.defaultTexture !== null)
{
return this.defaultTexture.mappingType;
}
return this._mappingType;
}
set mappingType(value: number)
{
this._mappingType = value;
}
get mediaFlags(): boolean
{
if (this._mediaFlags === undefined && this.defaultTexture !== null)
{
return this.defaultTexture.mediaFlags;
}
return this._mediaFlags;
}
set mediaFlags(value: boolean)
{
this._mediaFlags = value;
}
}