This commit is contained in:
Bill 2023-07-20 19:05:01 -04:00
parent cbc9689409
commit 4641857a06
15 changed files with 58 additions and 203 deletions

View File

@ -1,6 +1,5 @@
import { IDisposable } from './IDisposable';
export interface IUpdateReceiver extends IDisposable export interface IUpdateReceiver
{ {
update(time: number): void; update(time: number): void;
} }

View File

@ -94,7 +94,6 @@ export interface IRoomEngine
logicFactory: IRoomObjectLogicFactory; logicFactory: IRoomObjectLogicFactory;
roomContentLoader: IRoomContentLoader; roomContentLoader: IRoomContentLoader;
activeRoomId: number; activeRoomId: number;
disposed: boolean;
selectedAvatarId: number; selectedAvatarId: number;
isDecorating: boolean; isDecorating: boolean;
} }

View File

@ -1,10 +1,10 @@
import { IDisposable } from '../../common';
import { IConnection } from '../communication'; import { IConnection } from '../communication';
import { IRoomModerationSettings } from './IRoomModerationSettings'; import { IRoomModerationSettings } from './IRoomModerationSettings';
import { IUserDataManager } from './IUserDataManager'; import { IUserDataManager } from './IUserDataManager';
export interface IRoomSession extends IDisposable export interface IRoomSession
{ {
dispose(): void;
openGift(objectId: number): void; openGift(objectId: number): void;
setConnection(connection: IConnection): void; setConnection(connection: IConnection): void;
setControllerLevel(level: number): void; setControllerLevel(level: number): void;

View File

@ -1,11 +1,11 @@
import { IDisposable } from '../../api';
import { IRoomInstanceContainer } from './IRoomInstanceContainer'; import { IRoomInstanceContainer } from './IRoomInstanceContainer';
import { IRoomObjectManager } from './IRoomObjectManager'; import { IRoomObjectManager } from './IRoomObjectManager';
import { IRoomObject, IRoomObjectModel } from './object'; import { IRoomObject, IRoomObjectModel } from './object';
import { IRoomRendererBase } from './renderer'; import { IRoomRendererBase } from './renderer';
export interface IRoomInstance extends IDisposable export interface IRoomInstance
{ {
dispose(): void;
setRenderer(renderer: IRoomRendererBase): void; setRenderer(renderer: IRoomRendererBase): void;
getManager(category: number): IRoomObjectManager; getManager(category: number): IRoomObjectManager;
getTotalObjectsForManager(category: number): number; getTotalObjectsForManager(category: number): number;

View File

@ -1,11 +1,11 @@
import { IDisposable } from '../../common';
import { IVector3D } from '../IVector3D'; import { IVector3D } from '../IVector3D';
import { IRoomObjectModel } from './IRoomObjectModel'; import { IRoomObjectModel } from './IRoomObjectModel';
import { IRoomObjectMouseHandler } from './logic'; import { IRoomObjectMouseHandler } from './logic';
import { IRoomObjectVisualization } from './visualization'; import { IRoomObjectVisualization } from './visualization';
export interface IRoomObject extends IDisposable export interface IRoomObject
{ {
dispose(): void;
getLocation(): IVector3D; getLocation(): IVector3D;
getDirection(): IVector3D; getDirection(): IVector3D;
getState(index?: number): number; getState(index?: number): number;

View File

@ -1,11 +1,12 @@
import { IDisposable, IEventDispatcher } from '../../../common'; import { IEventDispatcher } from '../../../common';
import { IRoomObjectUpdateMessage } from '../../IRoomObjectUpdateMessage'; import { IRoomObjectUpdateMessage } from '../../IRoomObjectUpdateMessage';
import { IRoomObjectController } from '../IRoomObjectController'; import { IRoomObjectController } from '../IRoomObjectController';
import { IRoomObjectMouseHandler } from './IRoomObjectMouseHandler'; import { IRoomObjectMouseHandler } from './IRoomObjectMouseHandler';
export interface IRoomObjectEventHandler extends IRoomObjectMouseHandler, IDisposable export interface IRoomObjectEventHandler extends IRoomObjectMouseHandler
{ {
initialize(data: unknown): void; initialize(data: unknown): void;
dispose(): void;
update(totalTimeRunning: number): void; update(totalTimeRunning: number): void;
processUpdateMessage(message: IRoomObjectUpdateMessage): void; processUpdateMessage(message: IRoomObjectUpdateMessage): void;
getEventTypes(): string[]; getEventTypes(): string[];

View File

@ -1,66 +0,0 @@
import { IEventDispatcher, INitroManager } from '../api';
import { Disposable } from './Disposable';
import { EventDispatcher } from './EventDispatcher';
export class NitroManager extends Disposable implements INitroManager
{
private _events: IEventDispatcher;
private _isLoaded: boolean;
private _isLoading: boolean;
constructor()
{
super();
this._events = new EventDispatcher();
this._isLoaded = false;
this._isLoading = false;
}
public init(): void
{
if(this._isLoaded || this._isLoading || this.isDisposing) return;
this._isLoading = true;
this.onInit();
this._isLoaded = true;
this._isLoading = false;
}
protected onInit(): void
{
return;
}
protected onDispose(): void
{
if(this._events) this._events.dispose();
super.onDispose();
}
public reload(): void
{
this.dispose();
this.init();
}
public get events(): IEventDispatcher
{
return this._events;
}
public get isLoaded(): boolean
{
return this._isLoaded;
}
public get isLoading(): boolean
{
return this._isLoading;
}
}

View File

@ -1,3 +1,2 @@
export * from './Disposable'; export * from './Disposable';
export * from './EventDispatcher'; export * from './EventDispatcher';
export * from './NitroManager';

View File

@ -1,7 +1,6 @@
import { Matrix, Point, Rectangle, RenderTexture, Resource, Texture } from '@pixi/core'; import { Matrix, Point, Rectangle, RenderTexture, Resource, Texture } from '@pixi/core';
import { Container, DisplayObject } from '@pixi/display'; import { Container, DisplayObject } from '@pixi/display';
import { ICommunicationManager, IConnection, IFurnitureStackingHeightMap, IGetImageListener, IImageResult, ILegacyWallGeometry, IMessageComposer, IObjectData, IPetColorResult, IPetCustomPart, IRoomContentListener, IRoomContentLoader, IRoomCreator, IRoomEngine, IRoomEngineServices, IRoomGeometry, IRoomInstance, IRoomManager, IRoomManagerListener, IRoomObject, IRoomObjectController, IRoomObjectLogicFactory, IRoomObjectVisualizationFactory, IRoomRenderer, IRoomRendererFactory, IRoomRenderingCanvas, IRoomSessionManager, ISelectedRoomObjectData, ISessionDataManager, ITileObjectMap, IUpdateReceiver, IVector3D, LegacyDataType, MouseEventType, NitroConfiguration, NitroLogger, ObjectDataFactory, RoomControllerLevel, RoomObjectCategory, RoomObjectUserType, RoomObjectVariable, ToolbarIconEnum, Vector3d } from '../../api'; import { ICommunicationManager, IConnection, IFurnitureStackingHeightMap, IGetImageListener, IImageResult, ILegacyWallGeometry, IMessageComposer, IObjectData, IPetColorResult, IPetCustomPart, IRoomContentListener, IRoomContentLoader, IRoomCreator, IRoomEngine, IRoomEngineServices, IRoomGeometry, IRoomInstance, IRoomManager, IRoomManagerListener, IRoomObject, IRoomObjectController, IRoomObjectLogicFactory, IRoomObjectVisualizationFactory, IRoomRenderer, IRoomRendererFactory, IRoomRenderingCanvas, IRoomSessionManager, ISelectedRoomObjectData, ISessionDataManager, ITileObjectMap, IUpdateReceiver, IVector3D, LegacyDataType, MouseEventType, NitroConfiguration, NitroLogger, ObjectDataFactory, RoomControllerLevel, RoomObjectCategory, RoomObjectUserType, RoomObjectVariable, ToolbarIconEnum, Vector3d } from '../../api';
import { NitroManager } from '../../common';
import { BadgeImageReadyEvent, NitroEventDispatcher, NitroToolbarAnimateIconEvent, RoomBackgroundColorEvent, RoomDragEvent, RoomEngineEvent, RoomEngineObjectEvent, RoomObjectEvent, RoomObjectFurnitureActionEvent, RoomObjectMouseEvent, RoomSessionEvent, RoomToObjectOwnAvatarMoveEvent } from '../../events'; import { BadgeImageReadyEvent, NitroEventDispatcher, NitroToolbarAnimateIconEvent, RoomBackgroundColorEvent, RoomDragEvent, RoomEngineEvent, RoomEngineObjectEvent, RoomObjectEvent, RoomObjectFurnitureActionEvent, RoomObjectMouseEvent, RoomSessionEvent, RoomToObjectOwnAvatarMoveEvent } from '../../events';
import { GetTicker, GetTickerTime, NitroSprite, TextureUtils } from '../../pixi-proxy'; import { GetTicker, GetTickerTime, NitroSprite, TextureUtils } from '../../pixi-proxy';
import { NumberBank, RoomEnterEffect, RoomGeometry, RoomInstance, RoomManager, RoomObjectUpdateMessage, RoomRendererFactory } from '../../room'; import { NumberBank, RoomEnterEffect, RoomGeometry, RoomInstance, RoomManager, RoomObjectUpdateMessage, RoomRendererFactory } from '../../room';
@ -19,7 +18,7 @@ import { ObjectAvatarCarryObjectUpdateMessage, ObjectAvatarChatUpdateMessage, Ob
import { RoomLogic, RoomMapData, RoomObjectVisualizationFactory } from './object'; import { RoomLogic, RoomMapData, RoomObjectVisualizationFactory } from './object';
import { RoomCamera, RoomData, RoomFurnitureData, RoomInstanceData, RoomObjectBadgeImageAssetListener, SpriteDataCollector } from './utils'; import { RoomCamera, RoomData, RoomFurnitureData, RoomInstanceData, RoomObjectBadgeImageAssetListener, SpriteDataCollector } from './utils';
export class RoomEngine extends NitroManager implements IRoomEngine, IRoomCreator, IRoomEngineServices, IRoomManagerListener, IRoomContentListener, IUpdateReceiver export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineServices, IRoomManagerListener, IRoomContentListener, IUpdateReceiver
{ {
public static ROOM_OBJECT_ID: number = -1; public static ROOM_OBJECT_ID: number = -1;
public static ROOM_OBJECT_TYPE: string = 'room'; public static ROOM_OBJECT_TYPE: string = 'room';
@ -70,8 +69,6 @@ export class RoomEngine extends NitroManager implements IRoomEngine, IRoomCreato
constructor(communication: ICommunicationManager, sessionDataManager: ISessionDataManager) constructor(communication: ICommunicationManager, sessionDataManager: ISessionDataManager)
{ {
super();
this._communication = communication; this._communication = communication;
this._sessionDataManager = sessionDataManager; this._sessionDataManager = sessionDataManager;
this._roomSessionManager = new RoomSessionManager(this._communication, this); this._roomSessionManager = new RoomSessionManager(this._communication, this);

View File

@ -1,52 +1,29 @@
import { IConnection, IRoomSession, RoomControllerLevel, RoomTradingLevelEnum } from '../../api'; import { IConnection, IRoomSession, RoomControllerLevel, RoomTradingLevelEnum } from '../../api';
import { Disposable } from '../../common';
import { RoomSessionEvent } from '../../events'; import { RoomSessionEvent } from '../../events';
import { BotRemoveComposer, ChangeQueueMessageComposer, CompostPlantMessageComposer, FurnitureMultiStateComposer, GetPetCommandsComposer, HarvestPetMessageComposer, MoodlightSettingsComposer, MoodlightSettingsSaveComposer, MoodlightTogggleStateComposer, NewUserExperienceScriptProceedComposer, OpenPetPackageMessageComposer, OpenPresentComposer, PeerUsersClassificationMessageComposer, PetMountComposer, PetRemoveComposer, PollAnswerComposer, PollRejectComposer, PollStartComposer, RemovePetSaddleComposer, RoomAmbassadorAlertComposer, RoomBanUserComposer, RoomDoorbellAccessComposer, RoomEnterComposer, RoomGiveRightsComposer, RoomKickUserComposer, RoomModerationSettings, RoomMuteUserComposer, RoomTakeRightsComposer, RoomUnitActionComposer, RoomUnitChatComposer, RoomUnitChatShoutComposer, RoomUnitChatWhisperComposer, RoomUnitDanceComposer, RoomUnitPostureComposer, RoomUnitSignComposer, RoomUnitTypingStartComposer, RoomUnitTypingStopComposer, RoomUsersClassificationMessageComposer, SetClothingChangeDataMessageComposer, TogglePetBreedingComposer, TogglePetRidingComposer, UsePetProductComposer, UserMottoComposer, VotePollCounterMessageComposer } from '../communication'; import { BotRemoveComposer, ChangeQueueMessageComposer, CompostPlantMessageComposer, FurnitureMultiStateComposer, GetPetCommandsComposer, HarvestPetMessageComposer, MoodlightSettingsComposer, MoodlightSettingsSaveComposer, MoodlightTogggleStateComposer, NewUserExperienceScriptProceedComposer, OpenPetPackageMessageComposer, OpenPresentComposer, PeerUsersClassificationMessageComposer, PetMountComposer, PetRemoveComposer, PollAnswerComposer, PollRejectComposer, PollStartComposer, RemovePetSaddleComposer, RoomAmbassadorAlertComposer, RoomBanUserComposer, RoomDoorbellAccessComposer, RoomEnterComposer, RoomGiveRightsComposer, RoomKickUserComposer, RoomModerationSettings, RoomMuteUserComposer, RoomTakeRightsComposer, RoomUnitActionComposer, RoomUnitChatComposer, RoomUnitChatShoutComposer, RoomUnitChatWhisperComposer, RoomUnitDanceComposer, RoomUnitPostureComposer, RoomUnitSignComposer, RoomUnitTypingStartComposer, RoomUnitTypingStopComposer, RoomUsersClassificationMessageComposer, SetClothingChangeDataMessageComposer, TogglePetBreedingComposer, TogglePetRidingComposer, UsePetProductComposer, UserMottoComposer, VotePollCounterMessageComposer } from '../communication';
import { UserDataManager } from './UserDataManager'; import { UserDataManager } from './UserDataManager';
export class RoomSession extends Disposable implements IRoomSession export class RoomSession implements IRoomSession
{ {
private _connection: IConnection; private _connection: IConnection = null;
private _userData: UserDataManager; private _userData: UserDataManager = new UserDataManager();
private _roomId: number; private _roomId: number = 0;
private _password: string; private _password: string = null;
private _state: string; private _state: string = RoomSessionEvent.CREATED;
private _tradeMode: number; private _tradeMode: number = RoomTradingLevelEnum.NO_TRADING;
private _doorMode: number; private _doorMode: number = 0;
private _allowPets: boolean; private _allowPets: boolean = false;
private _controllerLevel: number; private _controllerLevel: number = RoomControllerLevel.NONE;
private _ownRoomIndex: number; private _ownRoomIndex: number = -1;
private _isGuildRoom: boolean; private _isGuildRoom: boolean = false;
private _isRoomOwner: boolean; private _isRoomOwner: boolean = false;
private _isDecorating: boolean; private _isDecorating: boolean = false;
private _isSpectator: boolean; private _isSpectator: boolean = false;
private _moderationSettings: RoomModerationSettings; private _moderationSettings: RoomModerationSettings = null;
constructor() public dispose(): void
{
super();
this._connection = null;
this._userData = new UserDataManager();
this._roomId = 0;
this._password = null;
this._state = RoomSessionEvent.CREATED;
this._tradeMode = RoomTradingLevelEnum.NO_TRADING;
this._doorMode = 0;
this._controllerLevel = RoomControllerLevel.NONE;
this._ownRoomIndex = -1;
this._isGuildRoom = false;
this._isRoomOwner = false;
this._isDecorating = false;
this._isSpectator = false;
this._moderationSettings = null;
}
protected onDispose(): void
{ {
if(this._userData) if(this._userData)
{ {

View File

@ -1,32 +1,20 @@
import { IConnection, IRoomUserData } from '../../api'; import { IConnection, IRoomUserData } from '../../api';
import { Disposable } from '../../common';
import { RequestPetInfoComposer, UserCurrentBadgesComposer } from '../communication'; import { RequestPetInfoComposer, UserCurrentBadgesComposer } from '../communication';
export class UserDataManager extends Disposable export class UserDataManager
{ {
private static TYPE_USER: number = 1; private static TYPE_USER: number = 1;
private static TYPE_PET: number = 2; private static TYPE_PET: number = 2;
private static TYPE_BOT: number = 3; private static TYPE_BOT: number = 3;
private static TYPE_RENTABLE_BOT: number = 4; private static TYPE_RENTABLE_BOT: number = 4;
private _connection: IConnection; private _connection: IConnection = null;
private _userDataByType: Map<number, Map<number, IRoomUserData>>; private _userDataByType: Map<number, Map<number, IRoomUserData>> = new Map();
private _userDataByRoomIndex: Map<number, IRoomUserData>; private _userDataByRoomIndex: Map<number, IRoomUserData> = new Map();
private _userBadges: Map<number, string[]>; private _userBadges: Map<number, string[]> = new Map();
constructor() public dispose(): void
{
super();
this._connection = null;
this._userDataByType = new Map();
this._userDataByRoomIndex = new Map();
this._userBadges = new Map();
}
protected onDispose(): void
{ {
this._connection = null; this._connection = null;
} }

View File

@ -1,7 +1,6 @@
import { IConnection, IRoomHandlerListener } from '../../../api'; import { IConnection, IRoomHandlerListener } from '../../../api';
import { Disposable } from '../../../common';
export class BaseHandler extends Disposable export class BaseHandler
{ {
private _connection: IConnection; private _connection: IConnection;
private _listener: IRoomHandlerListener; private _listener: IRoomHandlerListener;
@ -9,14 +8,12 @@ export class BaseHandler extends Disposable
constructor(connection: IConnection, listener: IRoomHandlerListener) constructor(connection: IConnection, listener: IRoomHandlerListener)
{ {
super();
this._connection = connection; this._connection = connection;
this._listener = listener; this._listener = listener;
this._roomId = 0; this._roomId = 0;
} }
protected onDispose(): void public dispose(): void
{ {
this._connection = null; this._connection = null;
this._listener = null; this._listener = null;

View File

@ -1,29 +1,22 @@
import { IRoomInstance, IRoomInstanceContainer, IRoomObject, IRoomObjectController, IRoomObjectManager, IRoomObjectModel, IRoomRendererBase } from '../api'; import { IRoomInstance, IRoomInstanceContainer, IRoomObject, IRoomObjectController, IRoomObjectManager, IRoomObjectModel, IRoomRendererBase } from '../api';
import { Disposable } from '../common';
import { RoomObjectModel } from './object'; import { RoomObjectModel } from './object';
export class RoomInstance extends Disposable implements IRoomInstance export class RoomInstance implements IRoomInstance
{ {
private _id: string; private _id: string;
private _container: IRoomInstanceContainer; private _container: IRoomInstanceContainer;
private _renderer: IRoomRendererBase; private _renderer: IRoomRendererBase = null;
private _managers: Map<number, IRoomObjectManager>; private _managers: Map<number, IRoomObjectManager> = new Map();
private _updateCategories: number[]; private _updateCategories: number[] = [];
private _model: IRoomObjectModel; private _model: IRoomObjectModel = new RoomObjectModel();
constructor(id: string, container: IRoomInstanceContainer) constructor(id: string, container: IRoomInstanceContainer)
{ {
super();
this._id = id; this._id = id;
this._container = container; this._container = container;
this._renderer = null;
this._managers = new Map();
this._updateCategories = [];
this._model = new RoomObjectModel();
} }
protected onDispose(): void public dispose(): void
{ {
this.removeAllManagers(); this.removeAllManagers();

View File

@ -1,46 +1,31 @@
import { IRoomObjectController, IRoomObjectEventHandler, IRoomObjectModel, IRoomObjectMouseHandler, IRoomObjectUpdateMessage, IRoomObjectVisualization, IVector3D, Vector3d } from '../../api'; import { IRoomObjectController, IRoomObjectEventHandler, IRoomObjectModel, IRoomObjectMouseHandler, IRoomObjectUpdateMessage, IRoomObjectVisualization, IVector3D, Vector3d } from '../../api';
import { Disposable } from '../../common';
import { RoomObjectModel } from './RoomObjectModel'; import { RoomObjectModel } from './RoomObjectModel';
export class RoomObject extends Disposable implements IRoomObjectController export class RoomObject implements IRoomObjectController
{ {
private static OBJECT_COUNTER: number = 0; private static OBJECT_COUNTER: number = 0;
private _id: number; private _id: number;
private _instanceId: number; private _instanceId: number;
private _type: string; private _type: string;
private _model: IRoomObjectModel; private _model: IRoomObjectModel = new RoomObjectModel();
private _location: IVector3D; private _location: IVector3D = new Vector3d();
private _direction: IVector3D; private _direction: IVector3D = new Vector3d();
private _states: number[]; private _states: number[] = [];
private _visualization: IRoomObjectVisualization; private _visualization: IRoomObjectVisualization = null;
private _logic: IRoomObjectEventHandler; private _logic: IRoomObjectEventHandler = null;
private _pendingLogicMessages: IRoomObjectUpdateMessage[]; private _pendingLogicMessages: IRoomObjectUpdateMessage[] = [];
private _updateCounter: number; private _updateCounter: number = 0;
private _isReady: boolean; private _isReady: boolean = false;
constructor(id: number, stateCount: number, type: string) constructor(id: number, stateCount: number, type: string)
{ {
super();
this._id = id; this._id = id;
this._instanceId = RoomObject.OBJECT_COUNTER++; this._instanceId = RoomObject.OBJECT_COUNTER++;
this._type = type; this._type = type;
this._model = new RoomObjectModel();
this._location = new Vector3d();
this._direction = new Vector3d();
this._states = [];
this._visualization = null;
this._logic = null;
this._pendingLogicMessages = [];
this._updateCounter = 0;
this._isReady = false;
let i = (stateCount - 1); let i = (stateCount - 1);
@ -52,7 +37,7 @@ export class RoomObject extends Disposable implements IRoomObjectController
} }
} }
protected onDispose(): void public dispose(): void
{ {
this._pendingLogicMessages = []; this._pendingLogicMessages = [];
@ -60,8 +45,6 @@ export class RoomObject extends Disposable implements IRoomObjectController
this.setLogic(null); this.setLogic(null);
if(this._model) this._model.dispose(); if(this._model) this._model.dispose();
super.onDispose();
} }
public getLocation(): IVector3D public getLocation(): IVector3D

View File

@ -1,30 +1,18 @@
import { IEventDispatcher, IRoomGeometry, IRoomObjectController, IRoomObjectEventHandler, IRoomObjectUpdateMessage } from '../../../api'; import { IEventDispatcher, IRoomGeometry, IRoomObjectController, IRoomObjectEventHandler, IRoomObjectUpdateMessage } from '../../../api';
import { Disposable } from '../../../common';
import { RoomSpriteMouseEvent } from '../../../events'; import { RoomSpriteMouseEvent } from '../../../events';
export class RoomObjectLogicBase extends Disposable implements IRoomObjectEventHandler export class RoomObjectLogicBase implements IRoomObjectEventHandler
{ {
private _events: IEventDispatcher; private _events: IEventDispatcher = null;
private _object: IRoomObjectController; private _object: IRoomObjectController = null;
private _time: number = 0;
private _time: number;
constructor()
{
super();
this._object = null;
this._events = null;
this._time = 0;
}
public initialize(data: unknown): void public initialize(data: unknown): void
{ {
return; return;
} }
protected onDispose(): void public dispose(): void
{ {
this._object = null; this._object = null;
} }