nitro-renderer/packages/avatar/src/AvatarImagePartContainer.ts
2024-03-19 21:53:17 -04:00

134 lines
3.3 KiB
TypeScript

import { IActionDefinition, IPartColor } from '@nitrots/api';
import { AvatarAnimationFrame } from './structure';
export class AvatarImagePartContainer
{
private _bodyPartId: string;
private _partType: string;
private _flippedPartType: string;
private _partId: string;
private _color: IPartColor;
private _frames: AvatarAnimationFrame[];
private _action: IActionDefinition;
private _isColorable: boolean;
private _isBlendable: boolean;
private _paletteMapId: number;
constructor(bodyPartId: string, partType: string, partId: string, partColor: IPartColor, frames: AvatarAnimationFrame[], action: IActionDefinition, isColorable: boolean, paletteMapId: number, flippedPartType: string = '', isBlendable: boolean = false, _arg_11: number = 1)
{
this._bodyPartId = bodyPartId;
this._partType = partType;
this._partId = partId;
this._color = partColor;
this._frames = frames;
this._action = action;
this._isColorable = isColorable;
this._paletteMapId = paletteMapId;
this._flippedPartType = flippedPartType;
this._isBlendable = isBlendable;
if(this._partType === 'ey') this._isColorable = false;
}
public getFrameIndex(k: number): number
{
if(!this._frames || !this._frames.length) return 0;
const frameNumber = (k % this._frames.length);
if(this._frames[frameNumber] instanceof AvatarAnimationFrame)
{
return this._frames[frameNumber].number;
}
return frameNumber;
}
public getFrameDefinition(k: number): AvatarAnimationFrame
{
const frameNumber = (k % this._frames.length);
if(this._frames && (this._frames.length > frameNumber))
{
if(this._frames[frameNumber] instanceof AvatarAnimationFrame)
{
return this._frames[frameNumber];
}
}
return null;
}
public getCacheableKey(k: number): string
{
const frameNumber = (k % this._frames.length);
if(this._frames && (this._frames.length > frameNumber))
{
if(this._frames[frameNumber] instanceof AvatarAnimationFrame)
{
const frame = this._frames[frameNumber];
return (this.partId + ':' + frame.assetPartDefinition + ':' + frame.number);
}
}
return (this.partId + ':' + frameNumber);
}
public get bodyPartId(): string
{
return this._bodyPartId;
}
public get partType(): string
{
return this._partType;
}
public get partId(): string
{
return this._partId;
}
public get color(): IPartColor
{
return this._color;
}
public get action(): IActionDefinition
{
return this._action;
}
public get isColorable(): boolean
{
return this._isColorable;
}
public set isColorable(k: boolean)
{
this._isColorable = k;
}
public get paletteMapId(): number
{
return this._paletteMapId;
}
public get flippedPartType(): string
{
return this._flippedPartType;
}
public get isBlendable(): boolean
{
return this._isBlendable;
}
public toString(): string
{
return [this._bodyPartId, this._partType, this._partId].join(':');
}
}