You've already forked Nitro_Render_V3
mirror of
https://github.com/duckietm/Nitro_Render_V3.git
synced 2026-06-20 07:26:18 +00:00
Move to Renderer V2
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
import { IAvatarFigureContainer } from '@nitrots/api';
|
||||
|
||||
export class AvatarFigureContainer implements IAvatarFigureContainer
|
||||
{
|
||||
private _parts: Map<string, Map<string, any>>;
|
||||
|
||||
constructor(figure: string)
|
||||
{
|
||||
this._parts = new Map();
|
||||
|
||||
this.parseFigure(figure);
|
||||
}
|
||||
|
||||
public getPartTypeIds(): IterableIterator<string>
|
||||
{
|
||||
return this.partSets().keys();
|
||||
}
|
||||
|
||||
public hasPartType(k: string): boolean
|
||||
{
|
||||
return !!this.partSets().get(k);
|
||||
}
|
||||
|
||||
public getPartSetId(k: string): number
|
||||
{
|
||||
const existing = this.partSets().get(k);
|
||||
|
||||
if(!existing) return 0;
|
||||
|
||||
return existing.get('setid');
|
||||
}
|
||||
|
||||
public getPartColorIds(k: string): number[]
|
||||
{
|
||||
const existing = this.partSets().get(k);
|
||||
|
||||
if(!existing) return null;
|
||||
|
||||
return existing.get('colorids');
|
||||
}
|
||||
|
||||
public updatePart(setType: string, partSetId: number, colorIds: number[]): void
|
||||
{
|
||||
const set: Map<string, any> = new Map();
|
||||
|
||||
set.set('type', setType);
|
||||
set.set('setid', partSetId);
|
||||
set.set('colorids', colorIds);
|
||||
|
||||
const existingSets = this.partSets();
|
||||
|
||||
existingSets.delete(setType);
|
||||
existingSets.set(setType, set);
|
||||
}
|
||||
|
||||
public removePart(k: string): void
|
||||
{
|
||||
this.partSets().delete(k);
|
||||
}
|
||||
|
||||
public getFigureString(): string
|
||||
{
|
||||
const parts: string[] = [];
|
||||
|
||||
for(const key of this.partSets().keys())
|
||||
{
|
||||
if(!key) continue;
|
||||
|
||||
let setParts = [];
|
||||
|
||||
setParts.push(key);
|
||||
setParts.push(this.getPartSetId(key));
|
||||
|
||||
setParts = setParts.concat(this.getPartColorIds(key));
|
||||
|
||||
parts.push(setParts.join('-'));
|
||||
}
|
||||
|
||||
return parts.join('.');
|
||||
}
|
||||
|
||||
private partSets(): Map<string, Map<string, any>>
|
||||
{
|
||||
if(!this._parts) this._parts = new Map();
|
||||
|
||||
return this._parts;
|
||||
}
|
||||
|
||||
private parseFigure(figure: string): void
|
||||
{
|
||||
if(!figure) figure = '';
|
||||
|
||||
for(const part of figure.split('.'))
|
||||
{
|
||||
const pieces = part.split('-');
|
||||
|
||||
if(pieces.length >= 2)
|
||||
{
|
||||
const type = pieces[0];
|
||||
const setId = parseInt(pieces[1]);
|
||||
const colors = [];
|
||||
|
||||
let index = 2;
|
||||
|
||||
while(index < pieces.length)
|
||||
{
|
||||
colors.push(parseInt(pieces[index]));
|
||||
|
||||
index++;
|
||||
}
|
||||
|
||||
this.updatePart(type, setId, colors);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user