nitro/apps/frontend/src/api/avatar/BodyModel.ts

77 lines
2.2 KiB
TypeScript

import { AvatarEditorFigureCategory, AvatarScaleType, AvatarSetType } from '@nitrots/nitro-renderer';
import { GetAvatarRenderManager } from '../nitro';
import { AvatarEditorUtilities } from './AvatarEditorUtilities';
import { CategoryBaseModel } from './CategoryBaseModel';
import { FigureData } from './FigureData';
export class BodyModel extends CategoryBaseModel
{
private _imageCallBackHandled: boolean = false;
public init(): void
{
super.init();
this.addCategory(FigureData.FACE);
this._isInitalized = true;
}
public selectColor(category: string, colorIndex: number, paletteId: number): void
{
super.selectColor(category, colorIndex, paletteId);
this.updateSelectionsFromFigure(FigureData.FACE);
}
protected updateSelectionsFromFigure(name: string): void
{
if(!this._categories || !AvatarEditorUtilities.CURRENT_FIGURE) return;
const category = this._categories.get(name);
if(!category) return;
const setId = AvatarEditorUtilities.CURRENT_FIGURE.getPartSetId(name);
let colorIds = AvatarEditorUtilities.CURRENT_FIGURE.getColorIds(name);
if(!colorIds) colorIds = [];
category.selectPartId(setId);
category.selectColorIds(colorIds);
for(const part of category.parts)
{
const resetFigure = (figure: string) =>
{
const figureString = AvatarEditorUtilities.CURRENT_FIGURE.getFigureStringWithFace(part.id);
const avatarImage = GetAvatarRenderManager().createAvatarImage(figureString, AvatarScaleType.LARGE, null, { resetFigure, dispose: null, disposed: false });
const sprite = avatarImage.getImageAsSprite(AvatarSetType.HEAD);
if(sprite)
{
sprite.y = 10;
part.thumbContainer = sprite;
setTimeout(() => avatarImage.dispose(), 0);
}
}
resetFigure(null);
}
}
public get canSetGender(): boolean
{
return true;
}
public get name(): string
{
return AvatarEditorFigureCategory.GENERIC;
}
}