Files
Nitro_Render_V3/packages/room/src/RoomObjectVisualizationFactory.ts
T
2024-04-03 09:27:56 +02:00

226 lines
11 KiB
TypeScript

import { IAssetData, IObjectVisualizationData, IRoomObjectGraphicVisualization, IRoomObjectVisualizationFactory, RoomObjectVisualizationType } from '@nitrots/api';
import { NitroLogger } from '@nitrots/utils';
import { AvatarVisualization, AvatarVisualizationData, FurnitureAnimatedVisualization, FurnitureAnimatedVisualizationData, FurnitureBBVisualization, FurnitureBadgeDisplayVisualization, FurnitureBottleVisualization, FurnitureBuilderPlaceholderVisualization, FurnitureCounterClockVisualization, FurnitureCuboidVisualization, FurnitureExternalImageVisualization, FurnitureFireworksVisualization, FurnitureGiftWrappedFireworksVisualization, FurnitureGiftWrappedVisualization, FurnitureGuildCustomizedVisualization, FurnitureGuildIsometricBadgeVisualization, FurnitureHabboWheelVisualization, FurnitureIsometricBBVisualization, FurnitureMannequinVisualization, FurnitureMannequinVisualizationData, FurniturePartyBeamerVisualization, FurniturePlanetSystemVisualization, FurniturePosterVisualization, FurnitureQueueTileVisualization, FurnitureResettingAnimatedVisualization, FurnitureRoomBackgroundVisualization, FurnitureScoreBoardVisualization, FurnitureSoundBlockVisualization, FurnitureStickieVisualization, FurnitureValRandomizerVisualization, FurnitureVisualization, FurnitureVisualizationData, FurnitureVoteCounterVisualization, FurnitureVoteMajorityVisualization, FurnitureWaterAreaVisualization, FurnitureYoutubeVisualization, PetVisualization, PetVisualizationData, RoomObjectSpriteVisualization, RoomVisualization, RoomVisualizationData, TileCursorVisualization } from './object';
export class RoomObjectVisualizationFactory implements IRoomObjectVisualizationFactory
{
private static CACHING_ENABLED: boolean = true;
private _visualizationDatas: Map<string, IObjectVisualizationData>;
constructor()
{
this._visualizationDatas = new Map();
}
public getVisualization(type: string): IRoomObjectGraphicVisualization
{
const visualization = this.getVisualizationType(type);
if(!visualization) return null;
return new visualization();
}
public getVisualizationType(type: string): typeof RoomObjectSpriteVisualization
{
if(!type) return null;
let visualization: typeof RoomObjectSpriteVisualization = null;
switch(type)
{
case RoomObjectVisualizationType.ROOM:
visualization = RoomVisualization;
break;
case RoomObjectVisualizationType.TILE_CURSOR:
visualization = TileCursorVisualization;
break;
case RoomObjectVisualizationType.USER:
case RoomObjectVisualizationType.BOT:
case RoomObjectVisualizationType.RENTABLE_BOT:
visualization = AvatarVisualization;
break;
case RoomObjectVisualizationType.PET_ANIMATED:
visualization = PetVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_STATIC:
visualization = FurnitureVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_ANIMATED:
visualization = FurnitureAnimatedVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_RESETTING_ANIMATED:
visualization = FurnitureResettingAnimatedVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_BADGE_DISPLAY:
visualization = FurnitureBadgeDisplayVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_BG:
visualization = FurnitureRoomBackgroundVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_BB:
visualization = FurnitureBBVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_ISOMETRIC_BB:
visualization = FurnitureIsometricBBVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_BOTTLE:
visualization = FurnitureBottleVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_BUILDER_PLACEHOLDER:
visualization = FurnitureBuilderPlaceholderVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_COUNTER_CLOCK:
visualization = FurnitureCounterClockVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_CUBOID:
visualization = FurnitureCuboidVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_EXTERNAL_IMAGE:
visualization = FurnitureExternalImageVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_FIREWORKS:
visualization = FurnitureFireworksVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_GIFT_WRAPPED_FIREWORKS:
visualization = FurnitureGiftWrappedFireworksVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_GIFT_WRAPPED:
visualization = FurnitureGiftWrappedVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_GUILD_CUSTOMIZED:
visualization = FurnitureGuildCustomizedVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_GUILD_ISOMETRIC_BADGE:
visualization = FurnitureGuildIsometricBadgeVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_HABBOWHEEL:
visualization = FurnitureHabboWheelVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_MANNEQUIN:
visualization = FurnitureMannequinVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_PARTY_BEAMER:
visualization = FurniturePartyBeamerVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_PLANET_SYSTEM:
visualization = FurniturePlanetSystemVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_POSTER:
visualization = FurniturePosterVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_QUEUE_TILE:
visualization = FurnitureQueueTileVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_SCORE_BOARD:
visualization = FurnitureScoreBoardVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_SOUNDBLOCK:
visualization = FurnitureSoundBlockVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_STICKIE:
visualization = FurnitureStickieVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_VAL_RANDOMIZER:
visualization = FurnitureValRandomizerVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_VOTE_COUNTER:
visualization = FurnitureVoteCounterVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_VOTE_MAJORITY:
visualization = FurnitureVoteMajorityVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_WATER_AREA:
visualization = FurnitureWaterAreaVisualization;
break;
case RoomObjectVisualizationType.FURNITURE_YOUTUBE:
visualization = FurnitureYoutubeVisualization;
break;
}
if(!visualization)
{
NitroLogger.log('Unknown Visualization', type);
return null;
}
return visualization;
}
public getVisualizationData(type: string, visualization: string, asset: IAssetData): IObjectVisualizationData
{
const existing = this._visualizationDatas.get(type);
if(existing) return existing;
let visualizationData: IObjectVisualizationData = null;
switch(visualization)
{
case RoomObjectVisualizationType.FURNITURE_STATIC:
case RoomObjectVisualizationType.FURNITURE_GIFT_WRAPPED:
case RoomObjectVisualizationType.FURNITURE_BB:
case RoomObjectVisualizationType.FURNITURE_ISOMETRIC_BB:
case RoomObjectVisualizationType.FURNITURE_BG:
case RoomObjectVisualizationType.FURNITURE_STICKIE:
case RoomObjectVisualizationType.FURNITURE_BUILDER_PLACEHOLDER:
visualizationData = new FurnitureVisualizationData();
break;
case RoomObjectVisualizationType.FURNITURE_ANIMATED:
case RoomObjectVisualizationType.FURNITURE_RESETTING_ANIMATED:
case RoomObjectVisualizationType.FURNITURE_POSTER:
case RoomObjectVisualizationType.FURNITURE_HABBOWHEEL:
case RoomObjectVisualizationType.FURNITURE_VAL_RANDOMIZER:
case RoomObjectVisualizationType.FURNITURE_BOTTLE:
case RoomObjectVisualizationType.FURNITURE_PLANET_SYSTEM:
case RoomObjectVisualizationType.FURNITURE_QUEUE_TILE:
case RoomObjectVisualizationType.FURNITURE_PARTY_BEAMER:
case RoomObjectVisualizationType.FURNITURE_COUNTER_CLOCK:
case RoomObjectVisualizationType.FURNITURE_WATER_AREA:
case RoomObjectVisualizationType.FURNITURE_SCORE_BOARD:
case RoomObjectVisualizationType.FURNITURE_FIREWORKS:
case RoomObjectVisualizationType.FURNITURE_GIFT_WRAPPED_FIREWORKS:
case RoomObjectVisualizationType.FURNITURE_GUILD_CUSTOMIZED:
case RoomObjectVisualizationType.FURNITURE_GUILD_ISOMETRIC_BADGE:
case RoomObjectVisualizationType.FURNITURE_VOTE_COUNTER:
case RoomObjectVisualizationType.FURNITURE_VOTE_MAJORITY:
case RoomObjectVisualizationType.FURNITURE_SOUNDBLOCK:
case RoomObjectVisualizationType.FURNITURE_BADGE_DISPLAY:
case RoomObjectVisualizationType.FURNITURE_EXTERNAL_IMAGE:
case RoomObjectVisualizationType.FURNITURE_YOUTUBE:
case RoomObjectVisualizationType.TILE_CURSOR:
visualizationData = new FurnitureAnimatedVisualizationData();
break;
case RoomObjectVisualizationType.FURNITURE_MANNEQUIN:
visualizationData = new FurnitureMannequinVisualizationData();
break;
case RoomObjectVisualizationType.ROOM:
visualizationData = new RoomVisualizationData();
break;
case RoomObjectVisualizationType.USER:
case RoomObjectVisualizationType.BOT:
case RoomObjectVisualizationType.RENTABLE_BOT:
visualizationData = new AvatarVisualizationData();
break;
case RoomObjectVisualizationType.PET_ANIMATED:
visualizationData = new PetVisualizationData();
break;
}
if(!visualizationData) return null;
if(!visualizationData.initialize(asset))
{
visualizationData.dispose();
return null;
}
if(RoomObjectVisualizationFactory.CACHING_ENABLED) this._visualizationDatas.set(type, visualizationData);
return visualizationData;
}
}