136 lines
3.3 KiB
TypeScript
136 lines
3.3 KiB
TypeScript
import { IFigureData } from '../interfaces';
|
|
import { IFigurePartSet } from './figure/IFigurePartSet';
|
|
import { IPalette } from './figure/IPalette';
|
|
import { ISetType } from './figure/ISetType';
|
|
import { Palette } from './figure/Palette';
|
|
import { SetType } from './figure/SetType';
|
|
import { IFigureSetData } from './IFigureSetData';
|
|
import { IStructureData } from './IStructureData';
|
|
|
|
export class FigureSetData implements IFigureSetData, IStructureData
|
|
{
|
|
private _palettes: Map<string, Palette>;
|
|
private _setTypes: Map<string, SetType>;
|
|
|
|
constructor()
|
|
{
|
|
this._palettes = new Map();
|
|
this._setTypes = new Map();
|
|
}
|
|
|
|
public dispose(): void
|
|
{
|
|
|
|
}
|
|
|
|
public parse(data: IFigureData): boolean
|
|
{
|
|
if(!data) return false;
|
|
|
|
for(const palette of data.palettes)
|
|
{
|
|
const newPalette = new Palette(palette);
|
|
|
|
if(!newPalette) continue;
|
|
|
|
this._palettes.set(newPalette.id.toString(), newPalette);
|
|
}
|
|
|
|
for(const set of data.setTypes)
|
|
{
|
|
const newSet = new SetType(set);
|
|
|
|
if(!newSet) continue;
|
|
|
|
this._setTypes.set(newSet.type, newSet);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public injectJSON(data: IFigureData): void
|
|
{
|
|
for(const setType of data.setTypes)
|
|
{
|
|
const existingSetType = this._setTypes.get(setType.type);
|
|
|
|
if(existingSetType) existingSetType.cleanUp(setType);
|
|
else this._setTypes.set(setType.type, new SetType(setType));
|
|
}
|
|
|
|
this.appendJSON(data);
|
|
}
|
|
|
|
public appendJSON(data: IFigureData): boolean
|
|
{
|
|
if(!data) return false;
|
|
|
|
for(const palette of data.palettes)
|
|
{
|
|
const id = palette.id.toString();
|
|
const existingPalette = this._palettes.get(id);
|
|
|
|
if(!existingPalette) this._palettes.set(id, new Palette(palette));
|
|
else existingPalette.append(palette);
|
|
}
|
|
|
|
for(const setType of data.setTypes)
|
|
{
|
|
const type = setType.type;
|
|
const existingSetType = this._setTypes.get(type);
|
|
|
|
if(!existingSetType) this._setTypes.set(type, new SetType(setType));
|
|
else existingSetType.append(setType);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public getMandatorySetTypeIds(k: string, _arg_2: number): string[]
|
|
{
|
|
const types: string[] = [];
|
|
|
|
for(const set of this._setTypes.values())
|
|
{
|
|
if(!set || !set.isMandatory(k, _arg_2)) continue;
|
|
|
|
types.push(set.type);
|
|
}
|
|
|
|
return types;
|
|
}
|
|
|
|
public getDefaultPartSet(k: string, _arg_2: string): IFigurePartSet
|
|
{
|
|
const setType = this._setTypes.get(k);
|
|
|
|
if(!setType) return null;
|
|
|
|
return setType.getDefaultPartSet(_arg_2);
|
|
}
|
|
|
|
public getSetType(k: string): ISetType
|
|
{
|
|
return (this._setTypes.get(k) || null);
|
|
}
|
|
|
|
public getPalette(k: number): IPalette
|
|
{
|
|
return (this._palettes.get(k.toString()) || null);
|
|
}
|
|
|
|
public getFigurePartSet(k: number): IFigurePartSet
|
|
{
|
|
for(const set of this._setTypes.values())
|
|
{
|
|
const partSet = set.getPartSet(k);
|
|
|
|
if(!partSet) continue;
|
|
|
|
return partSet;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|