nitro-renderer/src/nitro/avatar/geometry/AvatarSet.ts

93 lines
2.0 KiB
TypeScript

export class AvatarSet
{
private _id: string;
private _isMain: boolean;
private _avatarSets: Map<string, AvatarSet>;
private _bodyParts: string[];
private _allBodyParts: string[];
constructor(k: any)
{
this._id = k.id;
this._isMain = k.main || false;
this._avatarSets = new Map();
this._bodyParts = [];
this._allBodyParts = [];
if(k.avatarSets && (k.avatarSets.length > 0))
{
for(const avatarSet of k.avatarSets)
{
if(!avatarSet) continue;
const set = new AvatarSet(avatarSet);
this._avatarSets.set(set.id, set);
}
}
if(k.bodyParts && (k.bodyParts.length > 0))
{
for(const bodyPart of k.bodyParts)
{
if(!bodyPart) continue;
this._bodyParts.push(bodyPart.id);
}
}
let bodyParts = this._bodyParts.concat();
for(const avatarSet of this._avatarSets.values())
{
if(!avatarSet) continue;
bodyParts = bodyParts.concat(avatarSet.getBodyParts());
}
this._allBodyParts = bodyParts;
}
public findAvatarSet(k: string): AvatarSet
{
if(k === this._id) return this;
for(const avatarSet of this._avatarSets.values())
{
if(!avatarSet) continue;
if(!avatarSet.findAvatarSet(k)) continue;
return avatarSet;
}
return null;
}
public getBodyParts(): string[]
{
return this._allBodyParts.concat();
}
public get id(): string
{
return this._id;
}
public get isMain(): boolean
{
if(this._isMain) return true;
for(const avatarSet of this._avatarSets.values())
{
if(!avatarSet) continue;
if(!avatarSet.isMain) continue;
return true;
}
return false;
}
}