nitro-renderer/src/nitro/avatar/structure/figure/SetType.ts

107 lines
2.7 KiB
TypeScript

import { AdvancedMap } from '../../../../core/utils/AdvancedMap';
import { IFigureDataSetType } from '../../interfaces';
import { FigurePartSet } from './FigurePartSet';
import { IFigurePartSet } from './IFigurePartSet';
import { ISetType } from './ISetType';
export class SetType implements ISetType
{
private _type: string;
private _paletteId: number;
private _isMandatory: { [index: string]: boolean[] };
private _partSets: AdvancedMap<string, IFigurePartSet>;
constructor(data: IFigureDataSetType)
{
if(!data) throw new Error('invalid_data');
this._type = data.type;
this._paletteId = data.paletteId;
this._isMandatory = {};
this._isMandatory['F'] = [ data.mandatory_f_0, data.mandatory_f_1 ];
this._isMandatory['M'] = [ data.mandatory_m_0, data.mandatory_m_1 ];
this._partSets = new AdvancedMap();
this.append(data);
}
public dispose(): void
{
for(const set of this._partSets.getValues())
{
const partSet = set as FigurePartSet;
partSet.dispose();
}
this._partSets = null;
}
public cleanUp(data: IFigureDataSetType): void
{
for(const set of data.sets)
{
const setId = set.id.toString();
const partSet = (this._partSets.getValue(setId) as FigurePartSet);
if(partSet)
{
partSet.dispose();
this._partSets.remove(setId);
}
}
}
public append(setType: IFigureDataSetType): void
{
if(!setType || !setType.sets) return;
for(const set of setType.sets) this._partSets.add(set.id.toString(), new FigurePartSet(this._type, set));
}
public getDefaultPartSet(gender: string): IFigurePartSet
{
for(const set of this._partSets.getValues())
{
if(!set) continue;
if((set.clubLevel === 0) && ((set.gender === gender) || (set.gender === 'U'))) return set;
}
return null;
}
public getPartSet(k: number): IFigurePartSet
{
return this._partSets.getValue(k.toString());
}
public get type(): string
{
return this._type;
}
public get paletteID(): number
{
return this._paletteId;
}
public isMandatory(k: string, _arg_2: number): boolean
{
return this._isMandatory[k.toUpperCase()][Math.min(_arg_2, 1)];
}
public optionalFromClubLevel(k: string): number
{
const _local_2 = this._isMandatory[k.toUpperCase()];
return _local_2.indexOf(false);
}
public get partSets(): AdvancedMap<string, IFigurePartSet>
{
return this._partSets;
}
}