From bd09ea8b2527932baf2c2182842a0ed7fe352219 Mon Sep 17 00:00:00 2001 From: duckietm Date: Thu, 4 Jul 2024 15:03:26 +0200 Subject: [PATCH] :up: added latest changes --- .gitignore | 5 +- eslint.config.js | 155 +++ package.json | 17 +- packages/api/package.json | 6 +- .../src/nitro/avatar/IAvatarEffectListener.ts | 1 + .../nitro/camera/IRoomCameraWidgetManager.ts | 2 +- .../camera/IRoomCameraWidgetSelectedEffect.ts | 2 +- packages/api/src/nitro/room/IRoomCreator.ts | 1 + packages/api/src/nitro/room/IRoomEngine.ts | 14 +- .../api/src/nitro/room/IRoomEngineServices.ts | 6 +- .../nitro/room/object/RoomObjectLogicType.ts | 3 +- .../nitro/room/object/RoomObjectVariable.ts | 7 + .../room/utils/IRoomAreaSelectionManager.ts | 13 + packages/api/src/nitro/room/utils/index.ts | 1 + .../api/src/nitro/session/IFurnitureData.ts | 4 +- .../object/visualization/IRoomObjectSprite.ts | 1 + packages/api/src/utils/IVector3D.ts | 1 + packages/api/tsconfig.json | 4 +- packages/assets/.eslintrc.json | 3 - packages/assets/package.json | 6 +- packages/assets/src/GraphicAsset.ts | 2 +- packages/assets/tsconfig.json | 4 +- packages/avatar/.eslintrc.json | 3 - packages/avatar/package.json | 4 +- packages/avatar/src/AvatarStructure.ts | 4 +- .../avatar/src/actions/AvatarActionManager.ts | 28 +- packages/avatar/src/geometry/GeometryItem.ts | 2 +- packages/avatar/tsconfig.json | 4 +- packages/camera/.eslintrc.json | 3 - packages/camera/package.json | 6 +- .../camera/src/RoomCameraWidgetManager.ts | 59 +- .../src/RoomCameraWidgetSelectedEffect.ts | 10 +- packages/camera/tsconfig.json | 4 +- packages/communication/.eslintrc.json | 3 - packages/communication/package.json | 4 +- packages/communication/src/NitroMessages.ts | 15 +- .../src/messages/incoming/IncomingHeader.ts | 4 + .../room/furniture/AreaHideMessageEvent.ts | 16 + .../messages/incoming/room/furniture/index.ts | 5 +- .../src/messages/outgoing/OutgoingHeader.ts | 5 +- .../room/engine/ClickFurniMessageComposer.ts | 21 + .../messages/outgoing/room/engine/index.ts | 1 + .../catalog/CatalogPageMessageProductData.ts | 16 +- .../parser/room/engine/AreaHideMessageData.ts | 58 + .../src/messages/parser/room/engine/index.ts | 1 + .../room/furniture/AreaHideMessageParser.ts | 28 + .../messages/parser/room/furniture/index.ts | 5 +- packages/communication/tsconfig.json | 4 +- packages/configuration/.eslintrc.json | 3 - packages/configuration/package.json | 4 +- .../configuration/src/ConfigurationManager.ts | 2 +- packages/configuration/tsconfig.json | 4 +- packages/eslint-config/.eslintrc.json | 128 -- packages/eslint-config/.gitignore | 51 - packages/eslint-config/index.js | 1 - packages/eslint-config/package.json | 15 - packages/events/.eslintrc.json | 3 - packages/events/package.json | 5 +- packages/events/src/EventDispatcher.ts | 4 +- .../src/room/RoomEngineAreaHideStateEvent.ts | 20 + .../src/room/RoomEngineTriggerWidgetEvent.ts | 1 + .../src/room/RoomObjectWidgetRequestEvent.ts | 1 + packages/events/src/room/index.ts | 1 + .../src/session/RoomSessionPetPackageEvent.ts | 2 +- packages/events/tsconfig.json | 4 +- packages/localization/.eslintrc.json | 3 - packages/localization/package.json | 6 +- packages/localization/tsconfig.json | 4 +- packages/room/.eslintrc.json | 3 - packages/room/package.json | 6 +- packages/room/src/RoomEngine.ts | 182 ++- packages/room/src/RoomManager.ts | 33 +- packages/room/src/RoomMessageHandler.ts | 13 +- packages/room/src/RoomObjectEventHandler.ts | 87 +- packages/room/src/RoomObjectLogicFactory.ts | 5 +- packages/room/src/RoomPreviewer.ts | 6 +- .../ObjectRoomFloorHoleUpdateMessage.ts | 9 +- packages/room/src/object/RoomMapData.ts | 4 +- packages/room/src/object/RoomObjectModel.ts | 2 +- packages/room/src/object/RoomPlaneParser.ts | 1164 +++++++++-------- packages/room/src/object/logic/RoomLogic.ts | 4 +- .../logic/furniture/FurnitureAreaHideLogic.ts | 96 ++ .../room/src/object/logic/furniture/index.ts | 1 + .../object/visualization/RoomObjectSprite.ts | 11 + .../object/visualization/data/PetSizeData.ts | 2 +- .../src/object/visualization/data/SizeData.ts | 2 +- .../FurnitureFireworksVisualization.ts | 2 + .../furniture/FurnitureVisualization.ts | 25 +- .../furniture/FurnitureVisualizationData.ts | 2 +- .../object/visualization/room/RoomPlane.ts | 19 +- .../visualization/room/RoomVisualization.ts | 101 +- packages/room/src/renderer/RoomRenderer.ts | 2 +- .../room/src/renderer/RoomSpriteCanvas.ts | 101 +- .../room/src/renderer/utils/ExtendedSprite.ts | 19 +- .../src/utils/RoomAreaSelectionManager.ts | 248 ++++ .../room/src/utils/SpriteDataCollector.ts | 453 ------- packages/room/src/utils/index.ts | 1 + packages/room/tsconfig.json | 4 +- packages/session/.eslintrc.json | 3 - packages/session/package.json | 6 +- packages/session/src/SessionDataManager.ts | 18 +- .../session/src/furniture/FurnitureData.ts | 8 +- packages/session/tsconfig.json | 4 +- packages/sound/.eslintrc.json | 3 - packages/sound/package.json | 6 +- packages/sound/src/common/SongDataEntry.ts | 3 +- packages/sound/tsconfig.json | 4 +- packages/utils/.eslintrc.json | 3 - packages/utils/package.json | 6 +- packages/utils/src/NitroVersion.ts | 1 - packages/utils/src/motion/Motions.ts | 2 +- packages/utils/tsconfig.json | 4 +- src/DevTools.ts | 4 +- src/index.ts | 3 +- tsconfig.json | 8 +- yarn.lock | 514 ++++---- 116 files changed, 2246 insertions(+), 1794 deletions(-) create mode 100644 eslint.config.js create mode 100644 packages/api/src/nitro/room/utils/IRoomAreaSelectionManager.ts delete mode 100644 packages/assets/.eslintrc.json delete mode 100644 packages/avatar/.eslintrc.json delete mode 100644 packages/camera/.eslintrc.json delete mode 100644 packages/communication/.eslintrc.json create mode 100644 packages/communication/src/messages/incoming/room/furniture/AreaHideMessageEvent.ts create mode 100644 packages/communication/src/messages/outgoing/room/engine/ClickFurniMessageComposer.ts create mode 100644 packages/communication/src/messages/parser/room/engine/AreaHideMessageData.ts create mode 100644 packages/communication/src/messages/parser/room/furniture/AreaHideMessageParser.ts delete mode 100644 packages/configuration/.eslintrc.json delete mode 100644 packages/eslint-config/.eslintrc.json delete mode 100644 packages/eslint-config/.gitignore delete mode 100644 packages/eslint-config/index.js delete mode 100644 packages/eslint-config/package.json delete mode 100644 packages/events/.eslintrc.json create mode 100644 packages/events/src/room/RoomEngineAreaHideStateEvent.ts delete mode 100644 packages/localization/.eslintrc.json delete mode 100644 packages/room/.eslintrc.json create mode 100644 packages/room/src/object/logic/furniture/FurnitureAreaHideLogic.ts create mode 100644 packages/room/src/utils/RoomAreaSelectionManager.ts delete mode 100644 packages/room/src/utils/SpriteDataCollector.ts delete mode 100644 packages/session/.eslintrc.json delete mode 100644 packages/sound/.eslintrc.json delete mode 100644 packages/utils/.eslintrc.json diff --git a/.gitignore b/.gitignore index 687f58d..1413af9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ -mpiled output +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output /dist /tmp /out-tsc - # Only exists if Bazel was run /bazel-out diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..1bed7c7 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,155 @@ +// @ts-check + +import eslint from '@eslint/js'; +import path from 'path'; +import tseslint from 'typescript-eslint'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +export default tseslint.config( + eslint.configs.recommended, + ...tseslint.configs.recommendedTypeChecked, + { + languageOptions: { + parserOptions: { + project: ['./tsconfig.json','./packages/*/tsconfig.json'], + tsconfigRootDir: __dirname, + }, + }, + rules: { + 'indent': [ + 'error', + 4, + { + 'SwitchCase': 1 + } + ], + 'no-multi-spaces': [ + 'error' + ], + 'no-trailing-spaces': [ + 'error', + { + 'skipBlankLines': false, + 'ignoreComments': true + } + ], + 'linebreak-style': [ + 'off' + ], + 'quotes': [ + 'error', + 'single' + ], + 'semi': [ + 'error', + 'always' + ], + 'brace-style': [ + 'error', + 'allman' + ], + 'object-curly-spacing': [ + 'error', + 'always' + ], + 'keyword-spacing': [ + 'error', + { + 'overrides': + { + 'if': + { + 'after': false + }, + 'for': + { + 'after': false + }, + 'while': + { + 'after': false + }, + 'switch': + { + 'after': false + } + } + } + ], + '@typescript-eslint/no-explicit-any': [ + 'off' + ], + '@typescript-eslint/no-unsafe-assignment': [ + 'off' + ], + '@typescript-eslint/no-unsafe-call': [ + 'off' + ], + '@typescript-eslint/no-unsafe-member-access': [ + 'off' + ], + '@typescript-eslint/no-floating-promises': [ + 'off' + ], + '@typescript-eslint/require-await': [ + 'off' + ], + '@typescript-eslint/no-unsafe-argument': [ + 'off' + ], + '@typescript-eslint/no-unsafe-return': [ + 'off' + ], + '@typescript-eslint/explicit-module-boundary-types': [ + 'off', + { + 'allowedNames': [ + 'getMessageArray' + ] + } + ], + '@typescript-eslint/unbound-method': [ + 'off' + ], + '@typescript-eslint/ban-ts-comment': [ + 'off' + ], + '@typescript-eslint/no-empty-function': [ + 'error', + { + 'allow': [ + 'functions', + 'arrowFunctions', + 'generatorFunctions', + 'methods', + 'generatorMethods', + 'constructors' + ] + } + ], + '@typescript-eslint/no-unused-vars': [ + 'off' + ], + '@typescript-eslint/ban-types': [ + 'error', + { + 'types': + { + 'String': true, + 'Boolean': true, + 'Number': true, + 'Symbol': true, + '{}': false, + 'Object': false, + 'object': false, + 'Function': false + }, + 'extendDefaults': true + } + ] + } + }, +); diff --git a/package.json b/package.json index f778182..d28fb7d 100644 --- a/package.json +++ b/package.json @@ -22,26 +22,29 @@ "scripts": { "build": "vite build", "compile": "tsc --project ./tsconfig.json --noEmit false", - "eslint": "eslint ./src --fix" + "eslint": "eslint ./src ./packages/*/src", + "eslint-fix": "eslint ./src --fix" + }, "main": "./index", "dependencies": { "howler": "^2.2.4", "pako": "^2.1.0", - "pixi-filters": "^6.0.0", - "pixi.js": "~8.0.4", - "@pixi/gif": "^3.0.0", + "pixi-filters": "^6.0.4", + "pixi.js": "^8.1.6", "clientjs": "^0.2.1" }, "devDependencies": { + "@eslint/js": "^9.5.0", "@rollup/plugin-typescript": "^11.1.6", + "@types/eslint__js": "^8.42.3", "@types/howler": "^2.2.11", + "@types/node": "^20.14.4", "@types/pako": "^2.0.3", - "@typescript-eslint/eslint-plugin": "^7.1.1", - "@typescript-eslint/parser": "^7.1.1", - "eslint": "^8.57.0", + "eslint": "^9.5.0", "tslib": "^2.3.1", "typescript": "~5.4.2", + "typescript-eslint": "^7.13.1", "vite": "^5.1.3" } } diff --git a/packages/api/package.json b/packages/api/package.json index 564756e..bcb9a61 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -8,13 +8,11 @@ }, "license": "GPL-3.0", "scripts": { - "build": "vite build", - "compile": "tsc --project ./tsconfig.json --noEmit false", - "eslint": "eslint ./src --fix" + "compile": "tsc --project ./tsconfig.json --noEmit false" }, "main": "./index", "dependencies": { - "pixi.js": "^8.1.0" + "pixi.js": "^8.1.6" }, "devDependencies": { "typescript": "~5.4.2" diff --git a/packages/api/src/nitro/avatar/IAvatarEffectListener.ts b/packages/api/src/nitro/avatar/IAvatarEffectListener.ts index a04ebc3..ffd8f14 100644 --- a/packages/api/src/nitro/avatar/IAvatarEffectListener.ts +++ b/packages/api/src/nitro/avatar/IAvatarEffectListener.ts @@ -1,4 +1,5 @@ export interface IAvatarEffectListener { resetEffect(effect: number): void; + disposed: boolean; } diff --git a/packages/api/src/nitro/camera/IRoomCameraWidgetManager.ts b/packages/api/src/nitro/camera/IRoomCameraWidgetManager.ts index bf557c0..85d8e2c 100644 --- a/packages/api/src/nitro/camera/IRoomCameraWidgetManager.ts +++ b/packages/api/src/nitro/camera/IRoomCameraWidgetManager.ts @@ -5,7 +5,7 @@ import { IRoomCameraWidgetSelectedEffect } from './IRoomCameraWidgetSelectedEffe export interface IRoomCameraWidgetManager { init(): Promise; - applyEffects(texture: Texture, selectedEffects: IRoomCameraWidgetSelectedEffect[], isZoomed: boolean): Promise; + applyEffects(texture: Texture, effects: IRoomCameraWidgetSelectedEffect[], isZoomed: boolean): Promise; effects: Map; isLoaded: boolean; } diff --git a/packages/api/src/nitro/camera/IRoomCameraWidgetSelectedEffect.ts b/packages/api/src/nitro/camera/IRoomCameraWidgetSelectedEffect.ts index 3bb3b2c..30cdf23 100644 --- a/packages/api/src/nitro/camera/IRoomCameraWidgetSelectedEffect.ts +++ b/packages/api/src/nitro/camera/IRoomCameraWidgetSelectedEffect.ts @@ -3,5 +3,5 @@ import { IRoomCameraWidgetEffect } from './IRoomCameraWidgetEffect'; export interface IRoomCameraWidgetSelectedEffect { effect: IRoomCameraWidgetEffect; - alpha: number; + strength: number; } diff --git a/packages/api/src/nitro/room/IRoomCreator.ts b/packages/api/src/nitro/room/IRoomCreator.ts index e342bce..4cc3b07 100644 --- a/packages/api/src/nitro/room/IRoomCreator.ts +++ b/packages/api/src/nitro/room/IRoomCreator.ts @@ -10,6 +10,7 @@ export interface IRoomCreator updateRoomInstancePlaneVisibility(roomId: number, wallVisible: boolean, floorVisible?: boolean): boolean; updateRoomInstancePlaneThickness(roomId: number, wallThickness: number, floorThickness: number): boolean; updateRoomInstancePlaneType(roomId: number, floorType?: string, wallType?: string, landscapeType?: string, _arg_5?: boolean): boolean; + updateAreaHide(roomId: number, furniId: number, on: boolean, rootX: number, rootY: number, width: number, length: number, invert: boolean): boolean; removeRoomInstance(roomId: number): void; createRoomInstance(roomId: number, roomMap: IRoomMapData): void; setRoomSessionOwnUser(roomId: number, objectId: number): void; diff --git a/packages/api/src/nitro/room/IRoomEngine.ts b/packages/api/src/nitro/room/IRoomEngine.ts index 3aa3df4..ceb7084 100644 --- a/packages/api/src/nitro/room/IRoomEngine.ts +++ b/packages/api/src/nitro/room/IRoomEngine.ts @@ -24,6 +24,7 @@ export interface IRoomEngine updateRoomInstancePlaneVisibility(roomId: number, wallVisible: boolean, floorVisible?: boolean): boolean; updateRoomInstancePlaneThickness(roomId: number, wallThickness: number, floorThickness: number): boolean; updateRoomInstancePlaneType(roomId: number, floorType?: string, wallType?: string, landscapeType?: string, _arg_5?: boolean): boolean; + updateAreaHide(roomId: number, furniId: number, on: boolean, rootX: number, rootY: number, width: number, length: number, invert: boolean): boolean; updateObjectRoomColor(k: number, _arg_2: number, _arg_3: number, _arg_4: boolean): boolean; getRoomInstanceGeometry(roomId: number, canvasId?: number): IRoomGeometry; getRoomInstanceVariable(roomId: number, key: string): T; @@ -81,9 +82,12 @@ export interface IRoomEngine saveTextureAsScreenshot(texture: RenderTexture, saveAsThumbnail?: boolean): Promise; saveBase64AsScreenshot(base64: string, saveAsThumbnail?: boolean): void; deleteRoomObject(objectId: number, objectCategory: number): boolean; - roomManager: IRoomManager; - objectEventHandler: IRoomObjectEventManager; - activeRoomId: number; - selectedAvatarId: number; - isDecorating: boolean; + readonly roomManager: IRoomManager; + readonly objectEventHandler: IRoomObjectEventManager; + readonly activeRoomId: number; + readonly selectedAvatarId: number; + readonly isDecorating: boolean; + moveBlocked: boolean; + isAreaSelectionMode(): boolean; + whereYouClickIsWhereYouGo(): boolean; } diff --git a/packages/api/src/nitro/room/IRoomEngineServices.ts b/packages/api/src/nitro/room/IRoomEngineServices.ts index 563467e..40df0ac 100644 --- a/packages/api/src/nitro/room/IRoomEngineServices.ts +++ b/packages/api/src/nitro/room/IRoomEngineServices.ts @@ -2,7 +2,7 @@ import { IRoomInstance, IRoomObjectController, IRoomRenderingCanvas } from '../. import { IVector3D } from '../../utils'; import { ISelectedRoomObjectData } from './ISelectedRoomObjectData'; import { IObjectData } from './object'; -import { IFurnitureStackingHeightMap, ILegacyWallGeometry, ITileObjectMap } from './utils'; +import { IFurnitureStackingHeightMap, ILegacyWallGeometry, IRoomAreaSelectionManager, ITileObjectMap } from './utils'; export interface IRoomEngineServices { @@ -38,4 +38,8 @@ export interface IRoomEngineServices isPlayingGame(): boolean; activeRoomId: number; isDecorating: boolean; + moveBlocked: boolean; + isAreaSelectionMode(): boolean; + whereYouClickIsWhereYouGo(): boolean; + areaSelectionManager: IRoomAreaSelectionManager; } diff --git a/packages/api/src/nitro/room/object/RoomObjectLogicType.ts b/packages/api/src/nitro/room/object/RoomObjectLogicType.ts index bb16bef..5394e1c 100644 --- a/packages/api/src/nitro/room/object/RoomObjectLogicType.ts +++ b/packages/api/src/nitro/room/object/RoomObjectLogicType.ts @@ -62,6 +62,7 @@ export class RoomObjectLogicType public static FURNITURE_EDITABLE_INTERNAL_LINK = 'furniture_editable_internal_link'; public static FURNITURE_EDITABLE_ROOM_LINK = 'furniture_editable_room_link'; public static FURNITURE_CRAFTING_GIZMO = 'furniture_crafting_gizmo'; + public static FURNITURE_AREA_HIDE = 'furniture_area_hide'; public static ROOM = 'room'; public static USER = 'user'; public static BOT = 'bot'; @@ -71,4 +72,4 @@ export class RoomObjectLogicType public static SELECTION_ARROW = 'selection_arrow'; public static GAME_SNOWBALL = 'game_snowball'; public static GAME_SNOWSPLASH = 'game_snowsplash'; -} \ No newline at end of file +} diff --git a/packages/api/src/nitro/room/object/RoomObjectVariable.ts b/packages/api/src/nitro/room/object/RoomObjectVariable.ts index 3819ca5..b1adc6a 100644 --- a/packages/api/src/nitro/room/object/RoomObjectVariable.ts +++ b/packages/api/src/nitro/room/object/RoomObjectVariable.ts @@ -85,6 +85,13 @@ export class RoomObjectVariable public static FURNITURE_ROOM_BACKGROUND_COLOR_HUE: string = 'furniture_room_background_color_hue'; public static FURNITURE_ROOM_BACKGROUND_COLOR_SATURATION: string = 'furniture_room_background_color_saturation'; public static FURNITURE_ROOM_BACKGROUND_COLOR_LIGHTNESS: string = 'furniture_room_background_color_lightness'; + public static FURNITURE_AREA_HIDE_ROOT_X: string = 'furniture_area_hide_root_x'; + public static FURNITURE_AREA_HIDE_ROOT_Y: string = 'furniture_area_hide_root_y'; + public static FURNITURE_AREA_HIDE_WIDTH: string = 'furniture_area_hide_width'; + public static FURNITURE_AREA_HIDE_LENGTH: string = 'furniture_area_hide_length'; + public static FURNITURE_AREA_HIDE_INVISIBILITY: string = 'furniture_area_hide_invisibility'; + public static FURNITURE_AREA_HIDE_WALL_ITEMS: string = 'furniture_area_hide_wall_items'; + public static FURNITURE_AREA_HIDE_INVERT: string = 'furniture_area_hide_invert'; public static FURNITURE_USES_PLANE_MASK: string = 'furniture_uses_plane_mask'; public static FURNITURE_PLANE_MASK_TYPE: string = 'furniture_plane_mask_type'; public static FURNITURE_IS_VARIABLE_HEIGHT: string = 'furniture_is_variable_height'; diff --git a/packages/api/src/nitro/room/utils/IRoomAreaSelectionManager.ts b/packages/api/src/nitro/room/utils/IRoomAreaSelectionManager.ts new file mode 100644 index 0000000..90f0923 --- /dev/null +++ b/packages/api/src/nitro/room/utils/IRoomAreaSelectionManager.ts @@ -0,0 +1,13 @@ +import { INitroEvent } from '../../../common'; + +export interface IRoomAreaSelectionManager +{ + startSelecting(): void; + clearHighlight(): void; + handleTileMouseEvent(event: INitroEvent): void; + finishSelecting(): boolean; + activate(callback: (rootX: number, rootY: number, width: number, height: number) => void, highlightType: string): boolean; + deactivate(): void; + setHighlight(rootX: number, rootY: number, width: number, height: number): void; + readonly areaSelectionState: number; +} diff --git a/packages/api/src/nitro/room/utils/index.ts b/packages/api/src/nitro/room/utils/index.ts index e8d1668..feb0610 100644 --- a/packages/api/src/nitro/room/utils/index.ts +++ b/packages/api/src/nitro/room/utils/index.ts @@ -1,4 +1,5 @@ export * from './IFurnitureStackingHeightMap'; export * from './ILegacyWallGeometry'; +export * from './IRoomAreaSelectionManager'; export * from './ITileObjectMap'; export * from './ObjectRolling'; diff --git a/packages/api/src/nitro/session/IFurnitureData.ts b/packages/api/src/nitro/session/IFurnitureData.ts index 0ebc9c7..e70dae0 100644 --- a/packages/api/src/nitro/session/IFurnitureData.ts +++ b/packages/api/src/nitro/session/IFurnitureData.ts @@ -1,6 +1,8 @@ +import { FurnitureType } from './FurnitureType'; + export interface IFurnitureData { - type: string; + type: FurnitureType; id: number; className: string; fullName: string; diff --git a/packages/api/src/room/object/visualization/IRoomObjectSprite.ts b/packages/api/src/room/object/visualization/IRoomObjectSprite.ts index 6490044..d5342d8 100644 --- a/packages/api/src/room/object/visualization/IRoomObjectSprite.ts +++ b/packages/api/src/room/object/visualization/IRoomObjectSprite.ts @@ -29,4 +29,5 @@ export interface IRoomObjectSprite alphaTolerance: number; filters: Filter[]; updateCounter: number; + skipMouseHandling: boolean; } diff --git a/packages/api/src/utils/IVector3D.ts b/packages/api/src/utils/IVector3D.ts index 467e26e..ec4ae08 100644 --- a/packages/api/src/utils/IVector3D.ts +++ b/packages/api/src/utils/IVector3D.ts @@ -13,4 +13,5 @@ y: number; z: number; length: number; + toString(): string; } diff --git a/packages/api/tsconfig.json b/packages/api/tsconfig.json index 5e8757d..7865c29 100644 --- a/packages/api/tsconfig.json +++ b/packages/api/tsconfig.json @@ -25,7 +25,5 @@ "ESNext" ], "module": "ES6" - }, - "include": [ - "src" ] + } } diff --git a/packages/assets/.eslintrc.json b/packages/assets/.eslintrc.json deleted file mode 100644 index ad92133..0000000 --- a/packages/assets/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": [ "@nitrots/eslint-config" ] -} diff --git a/packages/assets/package.json b/packages/assets/package.json index e5fb995..502d043 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -8,15 +8,13 @@ }, "license": "GPL-3.0", "scripts": { - "compile": "tsc --project ./tsconfig.json --noEmit false", - "eslint": "eslint ./src --fix" + "compile": "tsc --project ./tsconfig.json --noEmit false" }, "main": "./index", "dependencies": { "@nitrots/api": "1.0.0", - "@nitrots/eslint-config": "1.0.0", "@nitrots/utils": "1.0.0", - "pixi.js": "^8.1.0", + "pixi.js": "^8.1.6", "@pixi/gif": "^3.0.0" }, "devDependencies": { diff --git a/packages/assets/src/GraphicAsset.ts b/packages/assets/src/GraphicAsset.ts index 1b6aa18..fb649dc 100644 --- a/packages/assets/src/GraphicAsset.ts +++ b/packages/assets/src/GraphicAsset.ts @@ -1,5 +1,5 @@ +import { IGraphicAsset } from '@nitrots/api'; import { Rectangle, Texture } from 'pixi.js'; -import { IGraphicAsset } from '../../api/src/asset/IGraphicAsset'; export class GraphicAsset implements IGraphicAsset { diff --git a/packages/assets/tsconfig.json b/packages/assets/tsconfig.json index 5e8757d..7865c29 100644 --- a/packages/assets/tsconfig.json +++ b/packages/assets/tsconfig.json @@ -25,7 +25,5 @@ "ESNext" ], "module": "ES6" - }, - "include": [ - "src" ] + } } diff --git a/packages/avatar/.eslintrc.json b/packages/avatar/.eslintrc.json deleted file mode 100644 index ad92133..0000000 --- a/packages/avatar/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": [ "@nitrots/eslint-config" ] -} diff --git a/packages/avatar/package.json b/packages/avatar/package.json index 63549d6..9b965b1 100644 --- a/packages/avatar/package.json +++ b/packages/avatar/package.json @@ -5,14 +5,12 @@ "type": "module", "license": "GPL-3.0", "scripts": { - "compile": "tsc --project ./tsconfig.json --noEmit false", - "eslint": "eslint ./src --fix" + "compile": "tsc --project ./tsconfig.json --noEmit false" }, "main": "./index", "dependencies": { "@nitrots/api": "1.0.0", "@nitrots/assets": "1.0.0", - "@nitrots/eslint-config": "1.0.0", "@nitrots/events": "1.0.0", "@nitrots/utils": "1.0.0" }, diff --git a/packages/avatar/src/AvatarStructure.ts b/packages/avatar/src/AvatarStructure.ts index 86f3f85..a1772b7 100644 --- a/packages/avatar/src/AvatarStructure.ts +++ b/packages/avatar/src/AvatarStructure.ts @@ -141,7 +141,7 @@ export class AvatarStructure public getAnimation(k: string): Animation { - return this._animationManager.getAnimation(k) as Animation; + return this._animationManager.getAnimation(k); } public getActionDefinition(k: string): ActionDefinition @@ -319,7 +319,7 @@ export class AvatarStructure let _local_20: AvatarAnimationFrame[] = []; let _local_36: IPartColor = null; - if(!_arg_3 == null) return []; + if(!_arg_3) return []; const _local_9 = this._partSetsData.getActiveParts(_arg_3.definition); const _local_11: AvatarImagePartContainer[] = []; diff --git a/packages/avatar/src/actions/AvatarActionManager.ts b/packages/avatar/src/actions/AvatarActionManager.ts index eee1eef..394f45a 100644 --- a/packages/avatar/src/actions/AvatarActionManager.ts +++ b/packages/avatar/src/actions/AvatarActionManager.ts @@ -135,7 +135,19 @@ export class AvatarActionManager validatedActions.push(action); } - validatedActions.sort(this.sortByPrecedence); + validatedActions.sort((actionOne: IActiveActionData, actionTwo: IActiveActionData) => + { + if(!actionOne || !actionTwo) return 0; + + const precedenceOne = actionOne.definition.precedence; + const precedenceTwo = actionTwo.definition.precedence; + + if(precedenceOne < precedenceTwo) return 1; + + if(precedenceOne > precedenceTwo) return -1; + + return 0; + }); return validatedActions; } @@ -169,18 +181,4 @@ export class AvatarActionManager return activeActions; } - - private sortByPrecedence(actionOne: IActiveActionData, actionTwo: IActiveActionData): number - { - if(!actionOne || !actionTwo) return 0; - - const precedenceOne = actionOne.definition.precedence; - const precedenceTwo = actionTwo.definition.precedence; - - if(precedenceOne < precedenceTwo) return 1; - - if(precedenceOne > precedenceTwo) return -1; - - return 0; - } } diff --git a/packages/avatar/src/geometry/GeometryItem.ts b/packages/avatar/src/geometry/GeometryItem.ts index 3aea172..33f8524 100644 --- a/packages/avatar/src/geometry/GeometryItem.ts +++ b/packages/avatar/src/geometry/GeometryItem.ts @@ -44,7 +44,7 @@ export class GeometryItem extends Node3D public toString(): string { - return ((((this._id + ': ') + this.location) + ' - ') + this.transformedLocation); + return `${this._id}: ${this.location.toString()} - ${this.transformedLocation.toString()}`; } public get isDynamic(): boolean diff --git a/packages/avatar/tsconfig.json b/packages/avatar/tsconfig.json index 5e8757d..7865c29 100644 --- a/packages/avatar/tsconfig.json +++ b/packages/avatar/tsconfig.json @@ -25,7 +25,5 @@ "ESNext" ], "module": "ES6" - }, - "include": [ - "src" ] + } } diff --git a/packages/camera/.eslintrc.json b/packages/camera/.eslintrc.json deleted file mode 100644 index ad92133..0000000 --- a/packages/camera/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": [ "@nitrots/eslint-config" ] -} diff --git a/packages/camera/package.json b/packages/camera/package.json index a6f3174..2cb6ca4 100644 --- a/packages/camera/package.json +++ b/packages/camera/package.json @@ -5,18 +5,16 @@ "type": "module", "license": "GPL-3.0", "scripts": { - "compile": "tsc --project ./tsconfig.json --noEmit false", - "eslint": "eslint ./src --fix" + "compile": "tsc --project ./tsconfig.json --noEmit false" }, "main": "./index", "dependencies": { "@nitrots/api": "1.0.0", "@nitrots/assets": "1.0.0", "@nitrots/configuration": "1.0.0", - "@nitrots/eslint-config": "1.0.0", "@nitrots/events": "1.0.0", "@nitrots/utils": "1.0.0", - "pixi.js": "^8.1.0" + "pixi.js": "^8.1.6" }, "devDependencies": { "typescript": "~5.4.2" diff --git a/packages/camera/src/RoomCameraWidgetManager.ts b/packages/camera/src/RoomCameraWidgetManager.ts index 34ed50e..7a01117 100644 --- a/packages/camera/src/RoomCameraWidgetManager.ts +++ b/packages/camera/src/RoomCameraWidgetManager.ts @@ -3,19 +3,13 @@ import { GetAssetManager } from '@nitrots/assets'; import { GetConfiguration } from '@nitrots/configuration'; import { GetEventDispatcher, RoomCameraWidgetManagerEvent } from '@nitrots/events'; import { TextureUtils } from '@nitrots/utils'; -import { BLEND_MODES, ColorMatrix, ColorMatrixFilter, Container, Sprite, Texture } from 'pixi.js'; +import { BLEND_MODES, ColorMatrix, ColorMatrixFilter, Container, Filter, Sprite, Texture } from 'pixi.js'; import { RoomCameraWidgetEffect } from './RoomCameraWidgetEffect'; export class RoomCameraWidgetManager implements IRoomCameraWidgetManager { - private _effects: Map; - private _isLoaded: boolean; - - constructor() - { - this._effects = new Map(); - this._isLoaded = false; - } + private _effects: Map = new Map(); + private _isLoaded: boolean = false; public async init(): Promise { @@ -52,7 +46,7 @@ export class RoomCameraWidgetManager implements IRoomCameraWidgetManager GetEventDispatcher().dispatchEvent(new RoomCameraWidgetManagerEvent(RoomCameraWidgetManagerEvent.INITIALIZED)); } - public async applyEffects(texture: Texture, selectedEffects: IRoomCameraWidgetSelectedEffect[], isZoomed: boolean): Promise + public async applyEffects(texture: Texture, effects: IRoomCameraWidgetSelectedEffect[], isZoomed: boolean): Promise { const container = new Container(); const sprite = new Sprite(texture); @@ -61,7 +55,34 @@ export class RoomCameraWidgetManager implements IRoomCameraWidgetManager if(isZoomed) sprite.scale.set(2); - for(const selectedEffect of selectedEffects) + const filters: Filter[] = []; + + const getColorMatrixFilter = (matrix: ColorMatrix, flag: boolean, strength: number): ColorMatrixFilter => + { + const filter = new ColorMatrixFilter(); + + if(flag) + { + filter.matrix = matrix; + } + else + { + //@ts-ignore + const newMatrix: ColorMatrix = []; + const otherMatrix: ColorMatrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0]; + + for(let i = 0; i < matrix.length; i++) + { + newMatrix.push((matrix[i] * strength) + (otherMatrix[i] * (1 - strength))); + } + + filter.matrix = newMatrix; + } + + return filter; + }; + + for(const selectedEffect of effects) { const effect = selectedEffect.effect; @@ -69,26 +90,24 @@ export class RoomCameraWidgetManager implements IRoomCameraWidgetManager if(effect.colorMatrix) { - const filter = new ColorMatrixFilter(); + const filter = getColorMatrixFilter(effect.colorMatrix, false, selectedEffect.strength); - filter.matrix = effect.colorMatrix; - filter.alpha = selectedEffect.alpha; - - if(!Array.isArray(sprite.filters)) sprite.filters = []; - - sprite.filters.push(filter); + filters.push(filter); } else { const effectSprite = new Sprite(effect.texture); - effectSprite.alpha = selectedEffect.alpha; + + effectSprite.alpha = selectedEffect.strength; effectSprite.blendMode = effect.blendMode; container.addChild(effectSprite); } } - return await TextureUtils.generateImage(container); + container.filters = filters; + + return await TextureUtils.generateImage(sprite); } public get effects(): Map diff --git a/packages/camera/src/RoomCameraWidgetSelectedEffect.ts b/packages/camera/src/RoomCameraWidgetSelectedEffect.ts index c76ddeb..ce2908b 100644 --- a/packages/camera/src/RoomCameraWidgetSelectedEffect.ts +++ b/packages/camera/src/RoomCameraWidgetSelectedEffect.ts @@ -3,12 +3,12 @@ import { IRoomCameraWidgetEffect } from '@nitrots/api'; export class RoomCameraWidgetSelectedEffect { private _effect: IRoomCameraWidgetEffect; - private _alpha: number; + private _strength: number; - constructor(effect: IRoomCameraWidgetEffect, alpha: number) + constructor(effect: IRoomCameraWidgetEffect, strength: number) { this._effect = effect; - this._alpha = alpha; + this._strength = strength; } public get effect(): IRoomCameraWidgetEffect @@ -16,8 +16,8 @@ export class RoomCameraWidgetSelectedEffect return this._effect; } - public get alpha(): number + public get strength(): number { - return this._alpha; + return this._strength; } } diff --git a/packages/camera/tsconfig.json b/packages/camera/tsconfig.json index 5e8757d..7865c29 100644 --- a/packages/camera/tsconfig.json +++ b/packages/camera/tsconfig.json @@ -25,7 +25,5 @@ "ESNext" ], "module": "ES6" - }, - "include": [ - "src" ] + } } diff --git a/packages/communication/.eslintrc.json b/packages/communication/.eslintrc.json deleted file mode 100644 index ad92133..0000000 --- a/packages/communication/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": [ "@nitrots/eslint-config" ] -} diff --git a/packages/communication/package.json b/packages/communication/package.json index a4de308..e2a4b43 100644 --- a/packages/communication/package.json +++ b/packages/communication/package.json @@ -5,13 +5,11 @@ "type": "module", "license": "GPL-3.0", "scripts": { - "compile": "tsc --project ./tsconfig.json --noEmit false", - "eslint": "eslint ./src --fix" + "compile": "tsc --project ./tsconfig.json --noEmit false" }, "main": "./index", "dependencies": { "@nitrots/api": "1.0.0", - "@nitrots/eslint-config": "1.0.0", "@nitrots/events": "1.0.0", "@nitrots/utils": "1.0.0" }, diff --git a/packages/communication/src/NitroMessages.ts b/packages/communication/src/NitroMessages.ts index 298d03c..ecee1c8 100644 --- a/packages/communication/src/NitroMessages.ts +++ b/packages/communication/src/NitroMessages.ts @@ -1,5 +1,5 @@ import { IMessageConfiguration } from '@nitrots/api'; -import { AcceptFriendMessageComposer, AcceptFriendResultEvent, AcceptGameInviteMessageComposer, AcceptQuestMessageComposer, AccountSafetyLockStatusChangeMessageEvent, AchievementEvent, AchievementNotificationMessageEvent, AchievementResolutionCompletedMessageEvent, AchievementResolutionProgressMessageEvent, AchievementResolutionsMessageEvent, AchievementsEvent, AchievementsScoreEvent, ActivateQuestMessageComposer, ActivityPointNotificationMessageEvent, AddFavouriteRoomMessageComposer, AddJukeboxDiskComposer, AddSpamWallPostItMessageComposer, ApplySnapshotMessageComposer, ApplyTonerComposer, ApproveAllMembershipRequestsMessageComposer, ApproveNameMessageComposer, ApproveNameMessageEvent, AuthenticatedEvent, AuthenticationMessageComposer, AvailabilityStatusMessageEvent, AvailabilityTimeMessageEvent, AvatarEffectActivatedComposer, AvatarEffectActivatedEvent, AvatarEffectAddedEvent, AvatarEffectExpiredEvent, AvatarEffectSelectedComposer, AvatarEffectSelectedEvent, AvatarEffectsEvent, BadgePointLimitsEvent, BadgeReceivedEvent, BadgesEvent, BannedUsersFromRoomEvent, BonusRareInfoMessageEvent, BotAddedToInventoryEvent, BotCommandConfigurationEvent, BotErrorEvent, BotForceOpenContextMenuEvent, BotInventoryMessageEvent, BotPlaceComposer, BotReceivedMessageEvent, BotRemoveComposer, BotRemovedFromInventoryEvent, BotSkillListUpdateEvent, BotSkillSaveComposer, BreedPetsMessageComposer, BuildersClubFurniCountMessageEvent, BuildersClubPlaceRoomItemMessageComposer, BuildersClubPlaceWallItemMessageComposer, BuildersClubQueryFurniCountMessageComposer, BuildersClubSubscriptionStatusMessageEvent, BundleDiscountRulesetMessageEvent, BuyMarketplaceOfferMessageComposer, BuyMarketplaceTokensMessageComposer, CallForHelpDisabledNotifyMessageEvent, CallForHelpFromForumMessageMessageComposer, CallForHelpFromForumThreadMessageComposer, CallForHelpFromIMMessageComposer, CallForHelpFromPhotoMessageComposer, CallForHelpFromSelfieMessageComposer, CallForHelpMessageComposer, CallForHelpPendingCallsDeletedMessageEvent, CallForHelpPendingCallsMessageEvent, CallForHelpReplyMessageEvent, CallForHelpResultMessageEvent, CameraPublishStatusMessageEvent, CameraPurchaseOKMessageEvent, CameraSnapshotMessageEvent, CameraStorageUrlMessageEvent, CampaignCalendarDataMessageEvent, CampaignCalendarDoorOpenedMessageEvent, CanCreateRoomEvent, CanCreateRoomEventEvent, CanCreateRoomMessageComposer, CancelEventMessageComposer, CancelMarketplaceOfferMessageComposer, CancelMysteryBoxWaitMessageEvent, CancelPetBreedingComposer, CancelQuestMessageComposer, CatalogGroupsComposer, CatalogPageExpirationEvent, CatalogPageMessageEvent, CatalogPageWithEarliestExpiryMessageEvent, CatalogPagesListEvent, CatalogPublishedMessageEvent, CategoriesWithVisitorCountEvent, CfhChatlogEvent, CfhSanctionMessageEvent, CfhTopicsInitEvent, ChangeEmailComposer, ChangeEmailResultEvent, ChangeQueueMessageComposer, ChangeUserNameMessageComposer, ChangeUserNameResultMessageEvent, ChatReviewGuideDecidesOnOfferMessageComposer, ChatReviewGuideDetachedMessageComposer, ChatReviewGuideVoteMessageComposer, ChatReviewSessionCreateMessageComposer, ChatReviewSessionDetachedMessageEvent, ChatReviewSessionOfferedToGuideMessageEvent, ChatReviewSessionResultsMessageEvent, ChatReviewSessionStartedMessageEvent, ChatReviewSessionVotingStatusMessageEvent, CheckUserNameMessageComposer, CheckUserNameResultMessageEvent, ClientHelloMessageComposer, ClientPingEvent, CloseIssueDefaultActionMessageComposer, CloseIssuesMessageComposer, ClubGiftInfoEvent, ClubGiftNotificationEvent, ClubGiftSelectedEvent, CommunityGoalEarnedPrizesMessageEvent, CommunityGoalHallOfFameMessageEvent, CommunityGoalProgressMessageEvent, CommunityGoalVoteMessageComposer, CommunityGoalVoteMessageEvent, CompetitionEntrySubmitResultEvent, CompetitionRoomsDataMessageEvent, CompetitionRoomsSearchMessageComposer, CompetitionStatusMessageEvent, CompetitionVotingInfoMessageEvent, CompleteDiffieHandshakeEvent, CompleteDiffieHandshakeMessageComposer, CompostPlantMessageComposer, ConcurrentUsersGoalProgressMessageEvent, ConfirmPetBreedingComposer, ConnectionErrorEvent, ControlYoutubeDisplayPlaybackMessageComposer, ConvertGlobalRoomIdMessageComposer, ConvertedRoomIdEvent, CraftComposer, CraftSecretComposer, CraftableProductsEvent, CraftingRecipeEvent, CraftingRecipesAvailableEvent, CraftingResultEvent, CreateFlatMessageComposer, CurrentTimingCodeMessageEvent, CustomUserNotificationMessageEvent, DeclineFriendMessageComposer, DefaultSanctionMessageComposer, DeleteFavouriteRoomMessageComposer, DeleteItemMessageComposer, DeletePendingCallsForHelpMessageComposer, DesktopViewComposer, DesktopViewEvent, DiceValueMessageEvent, DirectSMSClubBuyAvailableMessageEvent, DisconnectMessageComposer, DisconnectReasonEvent, DoorbellMessageEvent, EditEventMessageComposer, ElementPointerMessageEvent, EmailStatusResultEvent, EpicPopupMessageEvent, ExtendRentOrBuyoutFurniMessageComposer, ExtendRentOrBuyoutStripItemMessageComposer, ExtendedProfileChangedMessageEvent, FavoriteMembershipUpdateMessageEvent, FavouriteChangedEvent, FavouritesEvent, FigureSetIdsMessageEvent, FigureUpdateEvent, FindFriendsProcessResultEvent, FindNewFriendsMessageComposer, FireworkChargeDataEvent, FlatAccessDeniedMessageEvent, FlatControllerAddedEvent, FlatControllerRemovedEvent, FlatControllersEvent, FlatCreatedEvent, FloodControlEvent, FloorHeightMapEvent, FollowFriendFailedEvent, FollowFriendMessageComposer, ForumDataMessageEvent, ForumsListMessageEvent, ForwardToACompetitionRoomMessageComposer, ForwardToARandomPromotedRoomMessageComposer, ForwardToASubmittableRoomMessageComposer, ForwardToRandomCompetitionRoomMessageComposer, ForwardToSomeRoomMessageComposer, FriendFurniConfirmLockMessageComposer, FriendListFragmentEvent, FriendListUpdateComposer, FriendListUpdateEvent, FriendNotificationEvent, FriendRequestQuestCompleteMessageComposer, FriendRequestsEvent, FurniRentOrBuyoutOfferMessageEvent, FurnitureAliasesComposer, FurnitureAliasesEvent, FurnitureColorWheelComposer, FurnitureDataEvent, FurnitureDiceActivateComposer, FurnitureDiceDeactivateComposer, FurnitureExchangeComposer, FurnitureFloorAddEvent, FurnitureFloorEvent, FurnitureFloorRemoveEvent, FurnitureFloorUpdateComposer, FurnitureFloorUpdateEvent, FurnitureGroupInfoComposer, FurnitureListAddOrUpdateEvent, FurnitureListComposer, FurnitureListEvent, FurnitureListInvalidateEvent, FurnitureListRemovedEvent, FurnitureMannequinSaveLookComposer, FurnitureMannequinSaveNameComposer, FurnitureMultiStateComposer, FurnitureOneWayDoorComposer, FurniturePickupComposer, FurniturePlaceComposer, FurniturePlacePaintComposer, FurniturePostItPlaceComposer, FurniturePostItPlacedEvent, FurnitureRandomStateComposer, FurnitureStackHeightComposer, FurnitureStackHeightEvent, FurnitureWallAddEvent, FurnitureWallEvent, FurnitureWallMultiStateComposer, FurnitureWallRemoveEvent, FurnitureWallUpdateComposer, FurnitureWallUpdateEvent, Game2AccountGameStatusMessageEvent, Game2CheckGameDirectoryStatusMessageComposer, Game2ExitGameMessageComposer, Game2GameChatMessageComposer, Game2GameDirectoryStatusMessageEvent, Game2GetAccountGameStatusMessageComposer, Game2GetWeeklyFriendsLeaderboardComposer, Game2GetWeeklyLeaderboardComposer, Game2InArenaQueueMessageEvent, Game2JoiningGameFailedMessageEvent, Game2LoadStageReadyMessageComposer, Game2PlayAgainMessageComposer, Game2RequestFullStatusUpdateMessageComposer, Game2StartingGameFailedMessageEvent, Game2StopCounterMessageEvent, Game2UserLeftGameMessageEvent, Game2WeeklyFriendsLeaderboardEvent, Game2WeeklyLeaderboardEvent, GameAchievementsMessageEvent, GameInviteMessageEvent, GameListMessageEvent, GameStatusMessageEvent, GameUnloadedMessageComposer, GenericErrorEvent, GetBadgePointLimitsComposer, GetBonusRareInfoMessageComposer, GetBotInventoryComposer, GetBundleDiscountRulesetComposer, GetCatalogIndexComposer, GetCatalogPageComposer, GetCatalogPageExpirationComposer, GetCatalogPageWithEarliestExpiryComposer, GetCategoriesWithUserCountMessageComposer, GetCfhChatlogMessageComposer, GetCfhStatusMessageComposer, GetClubGiftInfo, GetClubOffersMessageComposer, GetCommunityGoalEarnedPrizesMessageComposer, GetCommunityGoalHallOfFameMessageComposer, GetCommunityGoalProgressMessageComposer, GetConcurrentUsersGoalProgressMessageComposer, GetConcurrentUsersRewardMessageComposer, GetCraftableProductsComposer, GetCraftingRecipeComposer, GetCraftingRecipesAvailableComposer, GetCurrentTimingCodeMessageComposer, GetCustomRoomFilterMessageComposer, GetDailyQuestMessageComposer, GetDirectClubBuyAvailableComposer, GetEmailStatusComposer, GetExtendedProfileByNameMessageComposer, GetFaqCategoryMessageComposer, GetFaqTextMessageComposer, GetForumStatsMessageComposer, GetForumsListMessageComposer, GetFriendRequestsComposer, GetGameAchievementsMessageComposer, GetGameListMessageComposer, GetGameStatusMessageComposer, GetGiftMessageComposer, GetGiftWrappingConfigurationComposer, GetGuestRoomMessageComposer, GetGuestRoomResultEvent, GetGuideReportingStatusMessageComposer, GetHabboBasicMembershipExtendOfferComposer, GetHabboClubExtendOfferMessageComposer, GetHabboGroupBadgesMessageComposer, GetIgnoredUsersComposer, GetInterstitialMessageComposer, GetIsBadgeRequestFulfilledComposer, GetIsOfferGiftableComposer, GetIsUserPartOfCompetitionMessageComposer, GetItemDataComposer, GetJukeboxPlayListMessageComposer, GetLimitedOfferAppearingNextComposer, GetMarketplaceCanMakeOfferComposer, GetMarketplaceConfigurationMessageComposer, GetMarketplaceItemStatsComposer, GetMarketplaceOffersMessageComposer, GetMarketplaceOwnOffersMessageComposer, GetMessagesMessageComposer, GetModeratorRoomInfoMessageComposer, GetModeratorUserInfoMessageComposer, GetNextTargetedOfferComposer, GetNowPlayingMessageComposer, GetOccupiedTilesMessageComposer, GetOfficialRoomsMessageComposer, GetOfficialSongIdMessageComposer, GetPendingCallsForHelpMessageComposer, GetPetCommandsComposer, GetPopularRoomTagsMessageComposer, GetProductOfferComposer, GetPromoArticlesComposer, GetQuestsMessageComposer, GetQuizQuestionsComposer, GetRecyclerStatusMessageComposer, GetRentOrBuyoutOfferMessageComposer, GetResolutionAchievementsMessageComposer, GetRoomAdPurchaseInfoComposer, GetRoomChatlogMessageComposer, GetRoomEntryDataMessageComposer, GetRoomEntryTileMessageComposer, GetRoomVisitsMessageComposer, GetSeasonalCalendarDailyOfferComposer, GetSeasonalQuestsOnlyMessageComposer, GetSecondsUntilMessageComposer, GetSellablePetPalettesComposer, GetSongInfoMessageComposer, GetSoundMachinePlayListMessageComposer, GetSoundSettingsComposer, GetTalentTrackLevelMessageComposer, GetTargetedOfferComposer, GetThreadMessageComposer, GetThreadsMessageComposer, GetUnreadForumsCountMessageComposer, GetUserChatlogMessageComposer, GetUserEventCatsMessageComposer, GetUserFlatCatsMessageComposer, GetUserGameAchievementsMessageComposer, GetUserSongDisksMessageComposer, GetUserTagsComposer, GetWardrobeMessageComposer, GetWeeklyGameRewardComposer, GetWeeklyGameRewardWinnersComposer, GetYoutubeDisplayStatusMessageComposer, GiftReceiverNotFoundEvent, GiftWrappingConfigurationEvent, GoToFlatMessageComposer, GotMysteryBoxPrizeMessageEvent, GroupAdminGiveComposer, GroupAdminTakeComposer, GroupBadgePartsComposer, GroupBadgePartsEvent, GroupBuyComposer, GroupBuyDataComposer, GroupBuyDataEvent, GroupConfirmMemberRemoveEvent, GroupConfirmRemoveMemberComposer, GroupDeleteComposer, GroupDetailsChangedMessageEvent, GroupFavoriteComposer, GroupFurniContextMenuInfoMessageEvent, GroupInformationComposer, GroupInformationEvent, GroupJoinComposer, GroupMembersComposer, GroupMembersEvent, GroupMembershipAcceptComposer, GroupMembershipDeclineComposer, GroupMembershipRequestedMessageEvent, GroupPurchasedEvent, GroupRemoveMemberComposer, GroupSaveBadgeComposer, GroupSaveColorsComposer, GroupSaveInformationComposer, GroupSavePreferencesComposer, GroupSettingsComposer, GroupSettingsEvent, GroupUnfavoriteComposer, GuestRoomSearchResultEvent, GuideOnDutyStatusMessageEvent, GuideReportingStatusMessageEvent, GuideSessionAttachedMessageEvent, GuideSessionCreateMessageComposer, GuideSessionDetachedMessageEvent, GuideSessionEndedMessageEvent, GuideSessionErrorMessageEvent, GuideSessionFeedbackMessageComposer, GuideSessionGetRequesterRoomMessageComposer, GuideSessionGuideDecidesMessageComposer, GuideSessionInviteRequesterMessageComposer, GuideSessionInvitedToGuideRoomMessageEvent, GuideSessionIsTypingMessageComposer, GuideSessionMessageMessageComposer, GuideSessionMessageMessageEvent, GuideSessionOnDutyUpdateMessageComposer, GuideSessionPartnerIsTypingMessageEvent, GuideSessionReportMessageComposer, GuideSessionRequesterCancelsMessageComposer, GuideSessionRequesterRoomMessageEvent, GuideSessionResolvedMessageComposer, GuideSessionStartedMessageEvent, GuideTicketCreationResultMessageEvent, GuideTicketResolutionMessageEvent, GuildBaseSearchMessageComposer, GuildEditFailedMessageEvent, GuildForumThreadsEvent, GuildMemberMgmtFailedMessageEvent, GuildMembershipsMessageEvent, HabboBroadcastMessageEvent, HabboClubExtendOfferMessageEvent, HabboClubOffersMessageEvent, HabboGroupBadgesMessageEvent, HabboGroupDeactivatedMessageEvent, HabboGroupJoinFailedMessageEvent, HabboSearchComposer, HabboSearchResultEvent, HarvestPetMessageComposer, HotelClosedAndOpensEvent, HotelClosesAndWillOpenAtEvent, HotelMergeNameChangeEvent, HotelWillCloseInMinutesEvent, IdentityAccountsEvent, IgnoreResultEvent, IgnoreUserComposer, IgnoreUserIdComposer, IgnoredUsersEvent, InClientLinkEvent, IncomingHeader, InfoFeedEnableMessageEvent, InfoRetrieveMessageComposer, InitCameraMessageEvent, InitDiffieHandshakeEvent, InitDiffieHandshakeMessageComposer, InstantMessageErrorEvent, InterstitialMessageEvent, InterstitialShownMessageComposer, IsBadgeRequestFulfilledEvent, IsOfferGiftableMessageEvent, IsUserPartOfCompetitionMessageEvent, IssueCloseNotificationMessageEvent, IssueDeletedMessageEvent, IssueInfoMessageEvent, IssuePickFailedMessageEvent, ItemDataUpdateMessageEvent, JoinQueueMessageComposer, JoinedQueueMessageEvent, JoiningQueueFailedMessageEvent, JukeboxPlayListFullMessageEvent, JukeboxSongDisksMessageEvent, LagWarningReportMessageComposer, LeaveQueueMessageComposer, LeftQueueMessageEvent, LimitedEditionSoldOutEvent, LimitedOfferAppearingNextMessageEvent, LoadGameMessageEvent, LoadGameUrlEvent, LoveLockFurniFinishedEvent, LoveLockFurniFriendConfirmedEvent, LoveLockFurniStartEvent, MOTDNotificationEvent, MaintenanceStatusMessageEvent, MakeOfferMessageComposer, MarkCatalogNewAdditionsPageOpenedComposer, MarketPlaceOffersEvent, MarketplaceBuyOfferResultEvent, MarketplaceCanMakeOfferResult, MarketplaceCancelOfferResultEvent, MarketplaceConfigurationEvent, MarketplaceItemStatsEvent, MarketplaceMakeOfferResult, MarketplaceOwnOffersEvent, MessageErrorEvent, MessengerInitComposer, MessengerInitEvent, MiniMailNewMessageEvent, MiniMailUnreadCountEvent, ModAlertMessageComposer, ModBanMessageComposer, ModKickMessageComposer, ModMessageMessageComposer, ModMuteMessageComposer, ModToolPreferencesComposer, ModToolSanctionComposer, ModTradingLockMessageComposer, ModerateMessageMessageComposer, ModerateRoomMessageComposer, ModerateThreadMessageComposer, ModeratorActionMessageComposer, ModeratorActionResultMessageEvent, ModeratorCautionEvent, ModeratorInitMessageEvent, ModeratorMessageEvent, ModeratorRoomInfoEvent, ModeratorToolPreferencesEvent, ModeratorUserInfoEvent, MoodlightSettingsComposer, MoodlightSettingsSaveComposer, MoodlightTogggleStateComposer, MuteAllInRoomEvent, MyFavouriteRoomsSearchMessageComposer, MyFrequentRoomHistorySearchMessageComposer, MyFriendsRoomsSearchMessageComposer, MyGuildBasesSearchMessageComposer, MyRecommendedRoomsMessageComposer, MyRoomHistorySearchMessageComposer, MyRoomRightsSearchMessageComposer, MyRoomsSearchMessageComposer, MysteryBoxKeysEvent, MysteryBoxWaitingCanceledMessageComposer, NavigatorCategoryListModeComposer, NavigatorCollapsedEvent, NavigatorDeleteSavedSearchComposer, NavigatorHomeRoomEvent, NavigatorInitComposer, NavigatorLiftedEvent, NavigatorMetadataEvent, NavigatorOpenRoomCreatorEvent, NavigatorSearchCloseComposer, NavigatorSearchComposer, NavigatorSearchEvent, NavigatorSearchOpenComposer, NavigatorSearchSaveComposer, NavigatorSearchesEvent, NavigatorSettingsEvent, NavigatorSettingsSaveComposer, NewConsoleMessageEvent, NewFriendRequestEvent, NewUserExperienceGetGiftsComposer, NewUserExperienceGiftOfferMessageEvent, NewUserExperienceNotCompleteEvent, NewUserExperienceScriptProceedComposer, NoOwnedRoomsAlertMessageEvent, NoSuchFlatEvent, NoobnessLevelMessageEvent, NotEnoughBalanceMessageEvent, NotificationDialogMessageEvent, NowPlayingMessageEvent, ObjectsDataUpdateEvent, ObjectsRollingEvent, OfferRewardDeliveredMessageEvent, OfficialSongIdMessageEvent, OneWayDoorStatusMessageEvent, OpenCampaignCalendarDoorAsStaffComposer, OpenCampaignCalendarDoorComposer, OpenMessageComposer, OpenMysteryTrophyMessageComposer, OpenPetPackageMessageComposer, OpenPetPackageRequestedMessageEvent, OpenPetPackageResultMessageEvent, OpenPresentComposer, OpenQuestTrackerMessageComposer, OpenWelcomeGiftComposer, OutgoingHeader, PeerUsersClassificationMessageComposer, PerformanceLogMessageComposer, PerkAllowancesMessageEvent, PetAddedToInventoryEvent, PetBreedingResultEvent, PetExperienceEvent, PetFigureUpdateEvent, PetInfoEvent, PetInventoryEvent, PetLevelNotificationEvent, PetLevelUpdateMessageEvent, PetMountComposer, PetMoveComposer, PetPlaceComposer, PetPlacingErrorEvent, PetReceivedMessageEvent, PetRemoveComposer, PetRemovedFromInventory, PetRespectComposer, PetRespectNoficationEvent, PetScratchFailedMessageEvent, PetSelectedMessageComposer, PetStatusUpdateEvent, PetSupplementComposer, PetSupplementedNotificationEvent, PetTrainingPanelMessageEvent, PhoneCollectionStateMessageEvent, PhotoCompetitionMessageComposer, PickIssuesMessageComposer, PlayListMessageEvent, PlayListSongAddedMessageEvent, PollAnswerComposer, PollContentsEvent, PollErrorEvent, PollOfferEvent, PollRejectComposer, PollStartComposer, PongMessageComposer, PopularRoomTagsResultEvent, PopularRoomsSearchMessageComposer, PostMessageMessageComposer, PostMessageMessageEvent, PostQuizAnswersComposer, PostThreadMessageEvent, PresentOpenedMessageEvent, ProductOfferEvent, PromoArticlesMessageEvent, PublishPhotoMessageComposer, PurchaseBasicMembershipExtensionComposer, PurchaseErrorMessageEvent, PurchaseFromCatalogAsGiftComposer, PurchaseFromCatalogComposer, PurchaseNotAllowedMessageEvent, PurchaseOKMessageEvent, PurchasePhotoMessageComposer, PurchaseRoomAdMessageComposer, PurchaseTargetedOfferComposer, PurchaseVipMembershipExtensionComposer, QuestCancelledMessageEvent, QuestCompletedMessageEvent, QuestDailyMessageEvent, QuestMessageEvent, QuestionAnsweredEvent, QuestionEvent, QuestionFinishedEvent, QuestsMessageEvent, QuizDataMessageEvent, QuizResultsMessageEvent, RateFlatMessageComposer, RecycleItemsMessageComposer, RecyclerFinishedMessageEvent, RecyclerStatusMessageEvent, RedeemCommunityGoalPrizeMessageComposer, RedeemItemClothingComposer, RedeemMarketplaceOfferCreditsMessageComposer, RedeemVoucherMessageComposer, RejectQuestMessageComposer, RelationshipStatusInfoEvent, ReleaseIssuesMessageComposer, RemainingMuteEvent, RemoveAllRightsMessageComposer, RemoveFriendComposer, RemoveJukeboxDiskComposer, RemoveOwnRoomRightsRoomMessageComposer, RemovePetSaddleComposer, RemoveWallItemComposer, RenderRoomMessageComposer, RenderRoomThumbnailMessageComposer, RentableSpaceCancelRentMessageComposer, RentableSpaceRentFailedMessageEvent, RentableSpaceRentMessageComposer, RentableSpaceRentOkMessageEvent, RentableSpaceStatusMessageComposer, RentableSpaceStatusMessageEvent, RequestABadgeComposer, RequestAchievementsMessageComposer, RequestBadgesComposer, RequestBotCommandConfigurationComposer, RequestCameraConfigurationComposer, RequestFriendComposer, RequestFurniInventoryWhenNotInRoomComposer, RequestPetInfoComposer, RequestPetsComposer, RequestSpamWallPostItMessageEvent, ResetPhoneNumberStateMessageComposer, ResetResolutionAchievementMessageComposer, RespectReceivedEvent, RestoreClientMessageEvent, RoomAdErrorEvent, RoomAdEventTabAdClickedComposer, RoomAdEventTabViewedComposer, RoomAdPurchaseInfoEvent, RoomAdPurchaseInitiatedComposer, RoomAdSearchMessageComposer, RoomAmbassadorAlertComposer, RoomBanUserComposer, RoomBannedUsersComposer, RoomChatSettingsEvent, RoomChatlogEvent, RoomCompetitionInitMessageComposer, RoomDeleteComposer, RoomDimmerPresetsEvent, RoomDoorbellAcceptedEvent, RoomDoorbellAccessComposer, RoomEnterComposer, RoomEnterErrorEvent, RoomEnterEvent, RoomEntryInfoMessageEvent, RoomEntryTileMessageEvent, RoomEventCancelEvent, RoomEventEvent, RoomFilterSettingsMessageEvent, RoomForwardEvent, RoomGiveRightsComposer, RoomHeightMapEvent, RoomHeightMapUpdateEvent, RoomInviteErrorEvent, RoomInviteEvent, RoomKickUserComposer, RoomMessageNotificationMessageEvent, RoomMuteComposer, RoomMuteUserComposer, RoomNetworkOpenConnectionMessageComposer, RoomOccupiedTilesMessageEvent, RoomPaintEvent, RoomPollResultEvent, RoomReadyMessageEvent, RoomRightsClearEvent, RoomRightsEvent, RoomRightsOwnerEvent, RoomScoreEvent, RoomSettingsComposer, RoomSettingsDataEvent, RoomSettingsErrorEvent, RoomSettingsSaveErrorEvent, RoomSettingsSavedEvent, RoomSettingsUpdatedEvent, RoomTakeRightsComposer, RoomTextSearchMessageComposer, RoomThumbnailUpdateResultEvent, RoomUnbanUserComposer, RoomUnitActionComposer, RoomUnitChatComposer, RoomUnitChatEvent, RoomUnitChatShoutComposer, RoomUnitChatShoutEvent, RoomUnitChatStyleComposer, RoomUnitChatWhisperComposer, RoomUnitChatWhisperEvent, RoomUnitDanceComposer, RoomUnitDanceEvent, RoomUnitDropHandItemComposer, RoomUnitEffectEvent, RoomUnitEvent, RoomUnitExpressionEvent, RoomUnitGiveHandItemComposer, RoomUnitGiveHandItemPetComposer, RoomUnitHandItemEvent, RoomUnitHandItemReceivedEvent, RoomUnitIdleEvent, RoomUnitInfoEvent, RoomUnitLookComposer, RoomUnitNumberEvent, RoomUnitPostureComposer, RoomUnitRemoveEvent, RoomUnitSignComposer, RoomUnitStatusEvent, RoomUnitTypingEvent, RoomUnitTypingStartComposer, RoomUnitTypingStopComposer, RoomUnitWalkComposer, RoomUsersClassificationMessageComposer, RoomUsersWithRightsComposer, RoomVisitsEvent, RoomVisualizationSettingsEvent, RoomsWhereMyFriendsAreSearchMessageComposer, RoomsWithHighestScoreSearchMessageComposer, SSOTicketMessageComposer, SanctionStatusEvent, SaveRoomSettingsComposer, SaveWardrobeOutfitMessageComposer, ScrGetKickbackInfoMessageComposer, ScrSendKickbackInfoMessageEvent, SearchFaqsMessageComposer, SeasonalCalendarDailyOfferMessageEvent, SeasonalQuestsMessageEvent, SecondsUntilMessageEvent, SelectClubGiftComposer, SellablePetPalettesMessageEvent, SendMessageComposer, SendRoomInviteComposer, SetActivatedBadgesComposer, SetClothingChangeDataMessageComposer, SetItemDataMessageComposer, SetObjectDataMessageComposer, SetPhoneNumberVerificationStatusMessageComposer, SetRelationshipStatusComposer, SetRoomSessionTagsMessageComposer, SetTargetedOfferStateComposer, SetYoutubeDisplayPlaylistMessageComposer, ShopTargetedOfferViewedComposer, ShowEnforceRoomCategoryDialogEvent, ShowMysteryBoxWaitMessageEvent, SimpleAlertMessageEvent, StartCampaignMessageComposer, StartRoomPollEvent, SubmitRoomToCompetitionMessageComposer, TalentLevelUpEvent, TalentTrackComposer, TalentTrackLevelMessageEvent, TalentTrackMessageEvent, TargetedOfferEvent, TargetedOfferNotFoundEvent, ThreadMessagesMessageEvent, ThumbnailStatusMessageEvent, TogglePetBreedingComposer, TogglePetRidingComposer, ToggleStaffPickMessageComposer, TradingAcceptComposer, TradingAcceptEvent, TradingCancelComposer, TradingCloseComposer, TradingCloseEvent, TradingCompletedEvent, TradingConfirmationComposer, TradingConfirmationEvent, TradingListAddItemComposer, TradingListAddItemsComposer, TradingListItemEvent, TradingListItemRemoveComposer, TradingNoSuchItemEvent, TradingNotOpenEvent, TradingOpenComposer, TradingOpenEvent, TradingOpenFailedEvent, TradingOtherNotAllowedEvent, TradingUnacceptComposer, TradingYouAreNotAllowedEvent, TraxSongInfoMessageEvent, TryPhoneNumberMessageComposer, TryPhoneNumberResultMessageEvent, TryVerificationCodeResultMessageEvent, UnblockGroupMemberMessageComposer, UnignoreUserComposer, UniqueIDMessageComposer, UnloadGameMessageEvent, UnreadForumsCountMessageEvent, UnseenItemsEvent, UnseenResetCategoryComposer, UnseenResetItemsComposer, UpdateActionMessageComposer, UpdateConditionMessageComposer, UpdateFloorPropertiesMessageComposer, UpdateForumReadMarkerMessageComposer, UpdateForumSettingsMessageComposer, UpdateHomeRoomMessageComposer, UpdateMessageMessageEvent, UpdateRoomCategoryAndTradeSettingsComposer, UpdateRoomFilterMessageComposer, UpdateRoomThumbnailMessageComposer, UpdateThreadMessageComposer, UpdateThreadMessageEvent, UpdateTriggerMessageComposer, UsePetProductComposer, UserBannedMessageEvent, UserChatlogEvent, UserClassificationMessageEvent, UserCreditsEvent, UserCurrencyComposer, UserCurrencyEvent, UserCurrentBadgesComposer, UserCurrentBadgesEvent, UserEventCatsEvent, UserFigureComposer, UserFlatCatsEvent, UserGameAchievementsMessageEvent, UserInfoEvent, UserMottoComposer, UserNameChangeMessageEvent, UserPermissionsEvent, UserProfileComposer, UserProfileEvent, UserRelationshipsComposer, UserRespectComposer, UserSettingsCameraFollowComposer, UserSettingsEvent, UserSettingsOldChatComposer, UserSettingsRoomInvitesComposer, UserSettingsSoundComposer, UserSongDisksInventoryMessageEvent, UserSubscriptionComposer, UserSubscriptionEvent, UserTagsMessageEvent, UserUnbannedFromRoomEvent, UserWardrobePageEvent, VerifyCodeMessageComposer, VersionCheckMessageComposer, VisitUserComposer, VoteForRoomMessageComposer, VotePollCounterMessageComposer, VoucherRedeemErrorMessageEvent, VoucherRedeemOkMessageEvent, WardrobeMessageEvent, WeeklyCompetitiveFriendsLeaderboardEvent, WeeklyCompetitiveLeaderboardEvent, WeeklyGameRewardEvent, WeeklyGameRewardWinnersEvent, WelcomeGiftChangeEmailComposer, WelcomeGiftChangeEmailResultEvent, WelcomeGiftStatusEvent, WiredFurniActionEvent, WiredFurniConditionEvent, WiredFurniTriggerEvent, WiredOpenEvent, WiredRewardResultMessageEvent, WiredSaveSuccessEvent, WiredValidationErrorEvent, YouArePlayingGameEvent, YouAreSpectatorMessageEvent, YoutubeControlVideoMessageEvent, YoutubeDisplayPlaylistsEvent, YoutubeDisplayVideoMessageEvent } from './messages'; +import { AcceptFriendMessageComposer, AcceptFriendResultEvent, AcceptGameInviteMessageComposer, AcceptQuestMessageComposer, AccountSafetyLockStatusChangeMessageEvent, AchievementEvent, AchievementNotificationMessageEvent, AchievementResolutionCompletedMessageEvent, AchievementResolutionProgressMessageEvent, AchievementResolutionsMessageEvent, AchievementsEvent, AchievementsScoreEvent, ActivateQuestMessageComposer, ActivityPointNotificationMessageEvent, AddFavouriteRoomMessageComposer, AddJukeboxDiskComposer, AddSpamWallPostItMessageComposer, ApplySnapshotMessageComposer, ApplyTonerComposer, ApproveAllMembershipRequestsMessageComposer, ApproveNameMessageComposer, ApproveNameMessageEvent, AreaHideMessageEvent, AuthenticatedEvent, AuthenticationMessageComposer, AvailabilityStatusMessageEvent, AvailabilityTimeMessageEvent, AvatarEffectActivatedComposer, AvatarEffectActivatedEvent, AvatarEffectAddedEvent, AvatarEffectExpiredEvent, AvatarEffectSelectedComposer, AvatarEffectSelectedEvent, AvatarEffectsEvent, BadgePointLimitsEvent, BadgeReceivedEvent, BadgesEvent, BannedUsersFromRoomEvent, BonusRareInfoMessageEvent, BotAddedToInventoryEvent, BotCommandConfigurationEvent, BotErrorEvent, BotForceOpenContextMenuEvent, BotInventoryMessageEvent, BotPlaceComposer, BotReceivedMessageEvent, BotRemoveComposer, BotRemovedFromInventoryEvent, BotSkillListUpdateEvent, BotSkillSaveComposer, BreedPetsMessageComposer, BuildersClubFurniCountMessageEvent, BuildersClubPlaceRoomItemMessageComposer, BuildersClubPlaceWallItemMessageComposer, BuildersClubQueryFurniCountMessageComposer, BuildersClubSubscriptionStatusMessageEvent, BundleDiscountRulesetMessageEvent, BuyMarketplaceOfferMessageComposer, BuyMarketplaceTokensMessageComposer, CallForHelpDisabledNotifyMessageEvent, CallForHelpFromForumMessageMessageComposer, CallForHelpFromForumThreadMessageComposer, CallForHelpFromIMMessageComposer, CallForHelpFromPhotoMessageComposer, CallForHelpFromSelfieMessageComposer, CallForHelpMessageComposer, CallForHelpPendingCallsDeletedMessageEvent, CallForHelpPendingCallsMessageEvent, CallForHelpReplyMessageEvent, CallForHelpResultMessageEvent, CameraPublishStatusMessageEvent, CameraPurchaseOKMessageEvent, CameraSnapshotMessageEvent, CameraStorageUrlMessageEvent, CampaignCalendarDataMessageEvent, CampaignCalendarDoorOpenedMessageEvent, CanCreateRoomEvent, CanCreateRoomEventEvent, CanCreateRoomMessageComposer, CancelEventMessageComposer, CancelMarketplaceOfferMessageComposer, CancelMysteryBoxWaitMessageEvent, CancelPetBreedingComposer, CancelQuestMessageComposer, CatalogGroupsComposer, CatalogPageExpirationEvent, CatalogPageMessageEvent, CatalogPageWithEarliestExpiryMessageEvent, CatalogPagesListEvent, CatalogPublishedMessageEvent, CategoriesWithVisitorCountEvent, CfhChatlogEvent, CfhSanctionMessageEvent, CfhTopicsInitEvent, ChangeEmailComposer, ChangeEmailResultEvent, ChangeQueueMessageComposer, ChangeUserNameMessageComposer, ChangeUserNameResultMessageEvent, ChatReviewGuideDecidesOnOfferMessageComposer, ChatReviewGuideDetachedMessageComposer, ChatReviewGuideVoteMessageComposer, ChatReviewSessionCreateMessageComposer, ChatReviewSessionDetachedMessageEvent, ChatReviewSessionOfferedToGuideMessageEvent, ChatReviewSessionResultsMessageEvent, ChatReviewSessionStartedMessageEvent, ChatReviewSessionVotingStatusMessageEvent, CheckUserNameMessageComposer, CheckUserNameResultMessageEvent, ClickFurniMessageComposer, ClientHelloMessageComposer, ClientPingEvent, CloseIssueDefaultActionMessageComposer, CloseIssuesMessageComposer, ClubGiftInfoEvent, ClubGiftNotificationEvent, ClubGiftSelectedEvent, CommunityGoalEarnedPrizesMessageEvent, CommunityGoalHallOfFameMessageEvent, CommunityGoalProgressMessageEvent, CommunityGoalVoteMessageComposer, CommunityGoalVoteMessageEvent, CompetitionEntrySubmitResultEvent, CompetitionRoomsDataMessageEvent, CompetitionRoomsSearchMessageComposer, CompetitionStatusMessageEvent, CompetitionVotingInfoMessageEvent, CompleteDiffieHandshakeEvent, CompleteDiffieHandshakeMessageComposer, CompostPlantMessageComposer, ConcurrentUsersGoalProgressMessageEvent, ConfirmPetBreedingComposer, ConnectionErrorEvent, ControlYoutubeDisplayPlaybackMessageComposer, ConvertGlobalRoomIdMessageComposer, ConvertedRoomIdEvent, CraftComposer, CraftSecretComposer, CraftableProductsEvent, CraftingRecipeEvent, CraftingRecipesAvailableEvent, CraftingResultEvent, CreateFlatMessageComposer, CurrentTimingCodeMessageEvent, CustomUserNotificationMessageEvent, DeclineFriendMessageComposer, DefaultSanctionMessageComposer, DeleteFavouriteRoomMessageComposer, DeleteItemMessageComposer, DeletePendingCallsForHelpMessageComposer, DesktopViewComposer, DesktopViewEvent, DiceValueMessageEvent, DirectSMSClubBuyAvailableMessageEvent, DisconnectMessageComposer, DisconnectReasonEvent, DoorbellMessageEvent, EditEventMessageComposer, ElementPointerMessageEvent, EmailStatusResultEvent, EpicPopupMessageEvent, ExtendRentOrBuyoutFurniMessageComposer, ExtendRentOrBuyoutStripItemMessageComposer, ExtendedProfileChangedMessageEvent, FavoriteMembershipUpdateMessageEvent, FavouriteChangedEvent, FavouritesEvent, FigureSetIdsMessageEvent, FigureUpdateEvent, FindFriendsProcessResultEvent, FindNewFriendsMessageComposer, FireworkChargeDataEvent, FlatAccessDeniedMessageEvent, FlatControllerAddedEvent, FlatControllerRemovedEvent, FlatControllersEvent, FlatCreatedEvent, FloodControlEvent, FloorHeightMapEvent, FollowFriendFailedEvent, FollowFriendMessageComposer, ForumDataMessageEvent, ForumsListMessageEvent, ForwardToACompetitionRoomMessageComposer, ForwardToARandomPromotedRoomMessageComposer, ForwardToASubmittableRoomMessageComposer, ForwardToRandomCompetitionRoomMessageComposer, ForwardToSomeRoomMessageComposer, FriendFurniConfirmLockMessageComposer, FriendListFragmentEvent, FriendListUpdateComposer, FriendListUpdateEvent, FriendNotificationEvent, FriendRequestQuestCompleteMessageComposer, FriendRequestsEvent, FurniRentOrBuyoutOfferMessageEvent, FurnitureAliasesComposer, FurnitureAliasesEvent, FurnitureColorWheelComposer, FurnitureDataEvent, FurnitureDiceActivateComposer, FurnitureDiceDeactivateComposer, FurnitureExchangeComposer, FurnitureFloorAddEvent, FurnitureFloorEvent, FurnitureFloorRemoveEvent, FurnitureFloorUpdateComposer, FurnitureFloorUpdateEvent, FurnitureGroupInfoComposer, FurnitureListAddOrUpdateEvent, FurnitureListComposer, FurnitureListEvent, FurnitureListInvalidateEvent, FurnitureListRemovedEvent, FurnitureMannequinSaveLookComposer, FurnitureMannequinSaveNameComposer, FurnitureMultiStateComposer, FurnitureOneWayDoorComposer, FurniturePickupComposer, FurniturePlaceComposer, FurniturePlacePaintComposer, FurniturePostItPlaceComposer, FurniturePostItPlacedEvent, FurnitureRandomStateComposer, FurnitureStackHeightComposer, FurnitureStackHeightEvent, FurnitureWallAddEvent, FurnitureWallEvent, FurnitureWallMultiStateComposer, FurnitureWallRemoveEvent, FurnitureWallUpdateComposer, FurnitureWallUpdateEvent, Game2AccountGameStatusMessageEvent, Game2CheckGameDirectoryStatusMessageComposer, Game2ExitGameMessageComposer, Game2GameChatMessageComposer, Game2GameDirectoryStatusMessageEvent, Game2GetAccountGameStatusMessageComposer, Game2GetWeeklyFriendsLeaderboardComposer, Game2GetWeeklyLeaderboardComposer, Game2InArenaQueueMessageEvent, Game2JoiningGameFailedMessageEvent, Game2LoadStageReadyMessageComposer, Game2PlayAgainMessageComposer, Game2RequestFullStatusUpdateMessageComposer, Game2StartingGameFailedMessageEvent, Game2StopCounterMessageEvent, Game2UserLeftGameMessageEvent, Game2WeeklyFriendsLeaderboardEvent, Game2WeeklyLeaderboardEvent, GameAchievementsMessageEvent, GameInviteMessageEvent, GameListMessageEvent, GameStatusMessageEvent, GameUnloadedMessageComposer, GenericErrorEvent, GetBadgePointLimitsComposer, GetBonusRareInfoMessageComposer, GetBotInventoryComposer, GetBundleDiscountRulesetComposer, GetCatalogIndexComposer, GetCatalogPageComposer, GetCatalogPageExpirationComposer, GetCatalogPageWithEarliestExpiryComposer, GetCategoriesWithUserCountMessageComposer, GetCfhChatlogMessageComposer, GetCfhStatusMessageComposer, GetClubGiftInfo, GetClubOffersMessageComposer, GetCommunityGoalEarnedPrizesMessageComposer, GetCommunityGoalHallOfFameMessageComposer, GetCommunityGoalProgressMessageComposer, GetConcurrentUsersGoalProgressMessageComposer, GetConcurrentUsersRewardMessageComposer, GetCraftableProductsComposer, GetCraftingRecipeComposer, GetCraftingRecipesAvailableComposer, GetCurrentTimingCodeMessageComposer, GetCustomRoomFilterMessageComposer, GetDailyQuestMessageComposer, GetDirectClubBuyAvailableComposer, GetEmailStatusComposer, GetExtendedProfileByNameMessageComposer, GetFaqCategoryMessageComposer, GetFaqTextMessageComposer, GetForumStatsMessageComposer, GetForumsListMessageComposer, GetFriendRequestsComposer, GetGameAchievementsMessageComposer, GetGameListMessageComposer, GetGameStatusMessageComposer, GetGiftMessageComposer, GetGiftWrappingConfigurationComposer, GetGuestRoomMessageComposer, GetGuestRoomResultEvent, GetGuideReportingStatusMessageComposer, GetHabboBasicMembershipExtendOfferComposer, GetHabboClubExtendOfferMessageComposer, GetHabboGroupBadgesMessageComposer, GetIgnoredUsersComposer, GetInterstitialMessageComposer, GetIsBadgeRequestFulfilledComposer, GetIsOfferGiftableComposer, GetIsUserPartOfCompetitionMessageComposer, GetItemDataComposer, GetJukeboxPlayListMessageComposer, GetLimitedOfferAppearingNextComposer, GetMarketplaceCanMakeOfferComposer, GetMarketplaceConfigurationMessageComposer, GetMarketplaceItemStatsComposer, GetMarketplaceOffersMessageComposer, GetMarketplaceOwnOffersMessageComposer, GetMessagesMessageComposer, GetModeratorRoomInfoMessageComposer, GetModeratorUserInfoMessageComposer, GetNextTargetedOfferComposer, GetNowPlayingMessageComposer, GetOccupiedTilesMessageComposer, GetOfficialRoomsMessageComposer, GetOfficialSongIdMessageComposer, GetPendingCallsForHelpMessageComposer, GetPetCommandsComposer, GetPopularRoomTagsMessageComposer, GetProductOfferComposer, GetPromoArticlesComposer, GetQuestsMessageComposer, GetQuizQuestionsComposer, GetRecyclerStatusMessageComposer, GetRentOrBuyoutOfferMessageComposer, GetResolutionAchievementsMessageComposer, GetRoomAdPurchaseInfoComposer, GetRoomChatlogMessageComposer, GetRoomEntryDataMessageComposer, GetRoomEntryTileMessageComposer, GetRoomVisitsMessageComposer, GetSeasonalCalendarDailyOfferComposer, GetSeasonalQuestsOnlyMessageComposer, GetSecondsUntilMessageComposer, GetSellablePetPalettesComposer, GetSongInfoMessageComposer, GetSoundMachinePlayListMessageComposer, GetSoundSettingsComposer, GetTalentTrackLevelMessageComposer, GetTargetedOfferComposer, GetThreadMessageComposer, GetThreadsMessageComposer, GetUnreadForumsCountMessageComposer, GetUserChatlogMessageComposer, GetUserEventCatsMessageComposer, GetUserFlatCatsMessageComposer, GetUserGameAchievementsMessageComposer, GetUserSongDisksMessageComposer, GetUserTagsComposer, GetWardrobeMessageComposer, GetWeeklyGameRewardComposer, GetWeeklyGameRewardWinnersComposer, GetYoutubeDisplayStatusMessageComposer, GiftReceiverNotFoundEvent, GiftWrappingConfigurationEvent, GoToFlatMessageComposer, GotMysteryBoxPrizeMessageEvent, GroupAdminGiveComposer, GroupAdminTakeComposer, GroupBadgePartsComposer, GroupBadgePartsEvent, GroupBuyComposer, GroupBuyDataComposer, GroupBuyDataEvent, GroupConfirmMemberRemoveEvent, GroupConfirmRemoveMemberComposer, GroupDeleteComposer, GroupDetailsChangedMessageEvent, GroupFavoriteComposer, GroupFurniContextMenuInfoMessageEvent, GroupInformationComposer, GroupInformationEvent, GroupJoinComposer, GroupMembersComposer, GroupMembersEvent, GroupMembershipAcceptComposer, GroupMembershipDeclineComposer, GroupMembershipRequestedMessageEvent, GroupPurchasedEvent, GroupRemoveMemberComposer, GroupSaveBadgeComposer, GroupSaveColorsComposer, GroupSaveInformationComposer, GroupSavePreferencesComposer, GroupSettingsComposer, GroupSettingsEvent, GroupUnfavoriteComposer, GuestRoomSearchResultEvent, GuideOnDutyStatusMessageEvent, GuideReportingStatusMessageEvent, GuideSessionAttachedMessageEvent, GuideSessionCreateMessageComposer, GuideSessionDetachedMessageEvent, GuideSessionEndedMessageEvent, GuideSessionErrorMessageEvent, GuideSessionFeedbackMessageComposer, GuideSessionGetRequesterRoomMessageComposer, GuideSessionGuideDecidesMessageComposer, GuideSessionInviteRequesterMessageComposer, GuideSessionInvitedToGuideRoomMessageEvent, GuideSessionIsTypingMessageComposer, GuideSessionMessageMessageComposer, GuideSessionMessageMessageEvent, GuideSessionOnDutyUpdateMessageComposer, GuideSessionPartnerIsTypingMessageEvent, GuideSessionReportMessageComposer, GuideSessionRequesterCancelsMessageComposer, GuideSessionRequesterRoomMessageEvent, GuideSessionResolvedMessageComposer, GuideSessionStartedMessageEvent, GuideTicketCreationResultMessageEvent, GuideTicketResolutionMessageEvent, GuildBaseSearchMessageComposer, GuildEditFailedMessageEvent, GuildForumThreadsEvent, GuildMemberMgmtFailedMessageEvent, GuildMembershipsMessageEvent, HabboBroadcastMessageEvent, HabboClubExtendOfferMessageEvent, HabboClubOffersMessageEvent, HabboGroupBadgesMessageEvent, HabboGroupDeactivatedMessageEvent, HabboGroupJoinFailedMessageEvent, HabboSearchComposer, HabboSearchResultEvent, HarvestPetMessageComposer, HotelClosedAndOpensEvent, HotelClosesAndWillOpenAtEvent, HotelMergeNameChangeEvent, HotelWillCloseInMinutesEvent, IdentityAccountsEvent, IgnoreResultEvent, IgnoreUserComposer, IgnoreUserIdComposer, IgnoredUsersEvent, InClientLinkEvent, IncomingHeader, InfoFeedEnableMessageEvent, InfoRetrieveMessageComposer, InitCameraMessageEvent, InitDiffieHandshakeEvent, InitDiffieHandshakeMessageComposer, InstantMessageErrorEvent, InterstitialMessageEvent, InterstitialShownMessageComposer, IsBadgeRequestFulfilledEvent, IsOfferGiftableMessageEvent, IsUserPartOfCompetitionMessageEvent, IssueCloseNotificationMessageEvent, IssueDeletedMessageEvent, IssueInfoMessageEvent, IssuePickFailedMessageEvent, ItemDataUpdateMessageEvent, JoinQueueMessageComposer, JoinedQueueMessageEvent, JoiningQueueFailedMessageEvent, JukeboxPlayListFullMessageEvent, JukeboxSongDisksMessageEvent, LagWarningReportMessageComposer, LeaveQueueMessageComposer, LeftQueueMessageEvent, LimitedEditionSoldOutEvent, LimitedOfferAppearingNextMessageEvent, LoadGameMessageEvent, LoadGameUrlEvent, LoveLockFurniFinishedEvent, LoveLockFurniFriendConfirmedEvent, LoveLockFurniStartEvent, MOTDNotificationEvent, MaintenanceStatusMessageEvent, MakeOfferMessageComposer, MarkCatalogNewAdditionsPageOpenedComposer, MarketPlaceOffersEvent, MarketplaceBuyOfferResultEvent, MarketplaceCanMakeOfferResult, MarketplaceCancelOfferResultEvent, MarketplaceConfigurationEvent, MarketplaceItemStatsEvent, MarketplaceMakeOfferResult, MarketplaceOwnOffersEvent, MessageErrorEvent, MessengerInitComposer, MessengerInitEvent, MiniMailNewMessageEvent, MiniMailUnreadCountEvent, ModAlertMessageComposer, ModBanMessageComposer, ModKickMessageComposer, ModMessageMessageComposer, ModMuteMessageComposer, ModToolPreferencesComposer, ModToolSanctionComposer, ModTradingLockMessageComposer, ModerateMessageMessageComposer, ModerateRoomMessageComposer, ModerateThreadMessageComposer, ModeratorActionMessageComposer, ModeratorActionResultMessageEvent, ModeratorCautionEvent, ModeratorInitMessageEvent, ModeratorMessageEvent, ModeratorRoomInfoEvent, ModeratorToolPreferencesEvent, ModeratorUserInfoEvent, MoodlightSettingsComposer, MoodlightSettingsSaveComposer, MoodlightTogggleStateComposer, MuteAllInRoomEvent, MyFavouriteRoomsSearchMessageComposer, MyFrequentRoomHistorySearchMessageComposer, MyFriendsRoomsSearchMessageComposer, MyGuildBasesSearchMessageComposer, MyRecommendedRoomsMessageComposer, MyRoomHistorySearchMessageComposer, MyRoomRightsSearchMessageComposer, MyRoomsSearchMessageComposer, MysteryBoxKeysEvent, MysteryBoxWaitingCanceledMessageComposer, NavigatorCategoryListModeComposer, NavigatorCollapsedEvent, NavigatorDeleteSavedSearchComposer, NavigatorHomeRoomEvent, NavigatorInitComposer, NavigatorLiftedEvent, NavigatorMetadataEvent, NavigatorOpenRoomCreatorEvent, NavigatorSearchCloseComposer, NavigatorSearchComposer, NavigatorSearchEvent, NavigatorSearchOpenComposer, NavigatorSearchSaveComposer, NavigatorSearchesEvent, NavigatorSettingsEvent, NavigatorSettingsSaveComposer, NewConsoleMessageEvent, NewFriendRequestEvent, NewUserExperienceGetGiftsComposer, NewUserExperienceGiftOfferMessageEvent, NewUserExperienceNotCompleteEvent, NewUserExperienceScriptProceedComposer, NoOwnedRoomsAlertMessageEvent, NoSuchFlatEvent, NoobnessLevelMessageEvent, NotEnoughBalanceMessageEvent, NotificationDialogMessageEvent, NowPlayingMessageEvent, ObjectsDataUpdateEvent, ObjectsRollingEvent, OfferRewardDeliveredMessageEvent, OfficialSongIdMessageEvent, OneWayDoorStatusMessageEvent, OpenCampaignCalendarDoorAsStaffComposer, OpenCampaignCalendarDoorComposer, OpenMessageComposer, OpenMysteryTrophyMessageComposer, OpenPetPackageMessageComposer, OpenPetPackageRequestedMessageEvent, OpenPetPackageResultMessageEvent, OpenPresentComposer, OpenQuestTrackerMessageComposer, OpenWelcomeGiftComposer, OutgoingHeader, PeerUsersClassificationMessageComposer, PerformanceLogMessageComposer, PerkAllowancesMessageEvent, PetAddedToInventoryEvent, PetBreedingResultEvent, PetExperienceEvent, PetFigureUpdateEvent, PetInfoEvent, PetInventoryEvent, PetLevelNotificationEvent, PetLevelUpdateMessageEvent, PetMountComposer, PetMoveComposer, PetPlaceComposer, PetPlacingErrorEvent, PetReceivedMessageEvent, PetRemoveComposer, PetRemovedFromInventory, PetRespectComposer, PetRespectNoficationEvent, PetScratchFailedMessageEvent, PetSelectedMessageComposer, PetStatusUpdateEvent, PetSupplementComposer, PetSupplementedNotificationEvent, PetTrainingPanelMessageEvent, PhoneCollectionStateMessageEvent, PhotoCompetitionMessageComposer, PickIssuesMessageComposer, PlayListMessageEvent, PlayListSongAddedMessageEvent, PollAnswerComposer, PollContentsEvent, PollErrorEvent, PollOfferEvent, PollRejectComposer, PollStartComposer, PongMessageComposer, PopularRoomTagsResultEvent, PopularRoomsSearchMessageComposer, PostMessageMessageComposer, PostMessageMessageEvent, PostQuizAnswersComposer, PostThreadMessageEvent, PresentOpenedMessageEvent, ProductOfferEvent, PromoArticlesMessageEvent, PublishPhotoMessageComposer, PurchaseBasicMembershipExtensionComposer, PurchaseErrorMessageEvent, PurchaseFromCatalogAsGiftComposer, PurchaseFromCatalogComposer, PurchaseNotAllowedMessageEvent, PurchaseOKMessageEvent, PurchasePhotoMessageComposer, PurchaseRoomAdMessageComposer, PurchaseTargetedOfferComposer, PurchaseVipMembershipExtensionComposer, QuestCancelledMessageEvent, QuestCompletedMessageEvent, QuestDailyMessageEvent, QuestMessageEvent, QuestionAnsweredEvent, QuestionEvent, QuestionFinishedEvent, QuestsMessageEvent, QuizDataMessageEvent, QuizResultsMessageEvent, RateFlatMessageComposer, RecycleItemsMessageComposer, RecyclerFinishedMessageEvent, RecyclerStatusMessageEvent, RedeemCommunityGoalPrizeMessageComposer, RedeemItemClothingComposer, RedeemMarketplaceOfferCreditsMessageComposer, RedeemVoucherMessageComposer, RejectQuestMessageComposer, RelationshipStatusInfoEvent, ReleaseIssuesMessageComposer, RemainingMuteEvent, RemoveAllRightsMessageComposer, RemoveFriendComposer, RemoveJukeboxDiskComposer, RemoveOwnRoomRightsRoomMessageComposer, RemovePetSaddleComposer, RemoveWallItemComposer, RenderRoomMessageComposer, RenderRoomThumbnailMessageComposer, RentableSpaceCancelRentMessageComposer, RentableSpaceRentFailedMessageEvent, RentableSpaceRentMessageComposer, RentableSpaceRentOkMessageEvent, RentableSpaceStatusMessageComposer, RentableSpaceStatusMessageEvent, RequestABadgeComposer, RequestAchievementsMessageComposer, RequestBadgesComposer, RequestBotCommandConfigurationComposer, RequestCameraConfigurationComposer, RequestFriendComposer, RequestFurniInventoryWhenNotInRoomComposer, RequestPetInfoComposer, RequestPetsComposer, RequestSpamWallPostItMessageEvent, ResetPhoneNumberStateMessageComposer, ResetResolutionAchievementMessageComposer, RespectReceivedEvent, RestoreClientMessageEvent, RoomAdErrorEvent, RoomAdEventTabAdClickedComposer, RoomAdEventTabViewedComposer, RoomAdPurchaseInfoEvent, RoomAdPurchaseInitiatedComposer, RoomAdSearchMessageComposer, RoomAmbassadorAlertComposer, RoomBanUserComposer, RoomBannedUsersComposer, RoomChatSettingsEvent, RoomChatlogEvent, RoomCompetitionInitMessageComposer, RoomDeleteComposer, RoomDimmerPresetsEvent, RoomDoorbellAcceptedEvent, RoomDoorbellAccessComposer, RoomEnterComposer, RoomEnterErrorEvent, RoomEnterEvent, RoomEntryInfoMessageEvent, RoomEntryTileMessageEvent, RoomEventCancelEvent, RoomEventEvent, RoomFilterSettingsMessageEvent, RoomForwardEvent, RoomGiveRightsComposer, RoomHeightMapEvent, RoomHeightMapUpdateEvent, RoomInviteErrorEvent, RoomInviteEvent, RoomKickUserComposer, RoomMessageNotificationMessageEvent, RoomMuteComposer, RoomMuteUserComposer, RoomNetworkOpenConnectionMessageComposer, RoomOccupiedTilesMessageEvent, RoomPaintEvent, RoomPollResultEvent, RoomReadyMessageEvent, RoomRightsClearEvent, RoomRightsEvent, RoomRightsOwnerEvent, RoomScoreEvent, RoomSettingsComposer, RoomSettingsDataEvent, RoomSettingsErrorEvent, RoomSettingsSaveErrorEvent, RoomSettingsSavedEvent, RoomSettingsUpdatedEvent, RoomTakeRightsComposer, RoomTextSearchMessageComposer, RoomThumbnailUpdateResultEvent, RoomUnbanUserComposer, RoomUnitActionComposer, RoomUnitChatComposer, RoomUnitChatEvent, RoomUnitChatShoutComposer, RoomUnitChatShoutEvent, RoomUnitChatStyleComposer, RoomUnitChatWhisperComposer, RoomUnitChatWhisperEvent, RoomUnitDanceComposer, RoomUnitDanceEvent, RoomUnitDropHandItemComposer, RoomUnitEffectEvent, RoomUnitEvent, RoomUnitExpressionEvent, RoomUnitGiveHandItemComposer, RoomUnitGiveHandItemPetComposer, RoomUnitHandItemEvent, RoomUnitHandItemReceivedEvent, RoomUnitIdleEvent, RoomUnitInfoEvent, RoomUnitLookComposer, RoomUnitNumberEvent, RoomUnitPostureComposer, RoomUnitRemoveEvent, RoomUnitSignComposer, RoomUnitStatusEvent, RoomUnitTypingEvent, RoomUnitTypingStartComposer, RoomUnitTypingStopComposer, RoomUnitWalkComposer, RoomUsersClassificationMessageComposer, RoomUsersWithRightsComposer, RoomVisitsEvent, RoomVisualizationSettingsEvent, RoomsWhereMyFriendsAreSearchMessageComposer, RoomsWithHighestScoreSearchMessageComposer, SSOTicketMessageComposer, SanctionStatusEvent, SaveRoomSettingsComposer, SaveWardrobeOutfitMessageComposer, ScrGetKickbackInfoMessageComposer, ScrSendKickbackInfoMessageEvent, SearchFaqsMessageComposer, SeasonalCalendarDailyOfferMessageEvent, SeasonalQuestsMessageEvent, SecondsUntilMessageEvent, SelectClubGiftComposer, SellablePetPalettesMessageEvent, SendMessageComposer, SendRoomInviteComposer, SetActivatedBadgesComposer, SetClothingChangeDataMessageComposer, SetItemDataMessageComposer, SetObjectDataMessageComposer, SetPhoneNumberVerificationStatusMessageComposer, SetRelationshipStatusComposer, SetRoomSessionTagsMessageComposer, SetTargetedOfferStateComposer, SetYoutubeDisplayPlaylistMessageComposer, ShopTargetedOfferViewedComposer, ShowEnforceRoomCategoryDialogEvent, ShowMysteryBoxWaitMessageEvent, SimpleAlertMessageEvent, StartCampaignMessageComposer, StartRoomPollEvent, SubmitRoomToCompetitionMessageComposer, TalentLevelUpEvent, TalentTrackComposer, TalentTrackLevelMessageEvent, TalentTrackMessageEvent, TargetedOfferEvent, TargetedOfferNotFoundEvent, ThreadMessagesMessageEvent, ThumbnailStatusMessageEvent, TogglePetBreedingComposer, TogglePetRidingComposer, ToggleStaffPickMessageComposer, TradingAcceptComposer, TradingAcceptEvent, TradingCancelComposer, TradingCloseComposer, TradingCloseEvent, TradingCompletedEvent, TradingConfirmationComposer, TradingConfirmationEvent, TradingListAddItemComposer, TradingListAddItemsComposer, TradingListItemEvent, TradingListItemRemoveComposer, TradingNoSuchItemEvent, TradingNotOpenEvent, TradingOpenComposer, TradingOpenEvent, TradingOpenFailedEvent, TradingOtherNotAllowedEvent, TradingUnacceptComposer, TradingYouAreNotAllowedEvent, TraxSongInfoMessageEvent, TryPhoneNumberMessageComposer, TryPhoneNumberResultMessageEvent, TryVerificationCodeResultMessageEvent, UnblockGroupMemberMessageComposer, UnignoreUserComposer, UniqueIDMessageComposer, UnloadGameMessageEvent, UnreadForumsCountMessageEvent, UnseenItemsEvent, UnseenResetCategoryComposer, UnseenResetItemsComposer, UpdateActionMessageComposer, UpdateConditionMessageComposer, UpdateFloorPropertiesMessageComposer, UpdateForumReadMarkerMessageComposer, UpdateForumSettingsMessageComposer, UpdateHomeRoomMessageComposer, UpdateMessageMessageEvent, UpdateRoomCategoryAndTradeSettingsComposer, UpdateRoomFilterMessageComposer, UpdateRoomThumbnailMessageComposer, UpdateThreadMessageComposer, UpdateThreadMessageEvent, UpdateTriggerMessageComposer, UsePetProductComposer, UserBannedMessageEvent, UserChatlogEvent, UserClassificationMessageEvent, UserCreditsEvent, UserCurrencyComposer, UserCurrencyEvent, UserCurrentBadgesComposer, UserCurrentBadgesEvent, UserEventCatsEvent, UserFigureComposer, UserFlatCatsEvent, UserGameAchievementsMessageEvent, UserInfoEvent, UserMottoComposer, UserNameChangeMessageEvent, UserPermissionsEvent, UserProfileComposer, UserProfileEvent, UserRelationshipsComposer, UserRespectComposer, UserSettingsCameraFollowComposer, UserSettingsEvent, UserSettingsOldChatComposer, UserSettingsRoomInvitesComposer, UserSettingsSoundComposer, UserSongDisksInventoryMessageEvent, UserSubscriptionComposer, UserSubscriptionEvent, UserTagsMessageEvent, UserUnbannedFromRoomEvent, UserWardrobePageEvent, VerifyCodeMessageComposer, VersionCheckMessageComposer, VisitUserComposer, VoteForRoomMessageComposer, VotePollCounterMessageComposer, VoucherRedeemErrorMessageEvent, VoucherRedeemOkMessageEvent, WardrobeMessageEvent, WeeklyCompetitiveFriendsLeaderboardEvent, WeeklyCompetitiveLeaderboardEvent, WeeklyGameRewardEvent, WeeklyGameRewardWinnersEvent, WelcomeGiftChangeEmailComposer, WelcomeGiftChangeEmailResultEvent, WelcomeGiftStatusEvent, WiredFurniActionEvent, WiredFurniConditionEvent, WiredFurniTriggerEvent, WiredOpenEvent, WiredRewardResultMessageEvent, WiredSaveSuccessEvent, WiredValidationErrorEvent, YouArePlayingGameEvent, YouAreSpectatorMessageEvent, YoutubeControlVideoMessageEvent, YoutubeDisplayPlaylistsEvent, YoutubeDisplayVideoMessageEvent } from './messages'; export class NitroMessages implements IMessageConfiguration { @@ -130,6 +130,9 @@ export class NitroMessages implements IMessageConfiguration this._events.set(IncomingHeader.MESSENGER_REQUEST, NewFriendRequestEvent); this._events.set(IncomingHeader.MESSENGER_INVITE_ERROR, RoomInviteErrorEvent); this._events.set(IncomingHeader.MESSENGER_INVITE, RoomInviteEvent); + + // FURNIDELETE + this._composers.set(OutgoingHeader.DELETE_ITEM, DeleteItemMessageComposer); // GAMES this._events.set(IncomingHeader.ACHIEVEMENTRESOLUTIONCOMPLETED, AchievementResolutionCompletedMessageEvent); @@ -410,6 +413,7 @@ export class NitroMessages implements IMessageConfiguration this._events.set(IncomingHeader.CUSTOM_USER_NOTIFICATION, CustomUserNotificationMessageEvent); this._events.set(IncomingHeader.ROOM_MESSAGE_NOTIFICATION, RoomMessageNotificationMessageEvent); this._events.set(IncomingHeader.ROOM_POPULAR_TAGS_RESULT, PopularRoomTagsResultEvent); + this._events.set(IncomingHeader.ROOM_POPULAR_TAGS_RESULT, PopularRoomTagsResultEvent); // ROOM SETTINGS this._events.set(IncomingHeader.ROOM_RIGHTS_LIST, FlatControllersEvent); @@ -561,10 +565,16 @@ export class NitroMessages implements IMessageConfiguration // RENTABLE FURNI this._events.set(IncomingHeader.RENTABLE_FURNI_RENT_OR_BUYOUT_OFFER, FurniRentOrBuyoutOfferMessageEvent); + + // Custom packets + this._events.set(IncomingHeader.AREA_HIDE, AreaHideMessageEvent); } private registerComposers(): void { + // CUSTOM PACKETS + this._composers.set(OutgoingHeader.CLICK_FURNI, ClickFurniMessageComposer); + // AUTHENTICATION this._composers.set(OutgoingHeader.AUTHENTICATION, AuthenticationMessageComposer); @@ -664,9 +674,6 @@ export class NitroMessages implements IMessageConfiguration this._composers.set(OutgoingHeader.SEND_ROOM_INVITE, SendRoomInviteComposer); this._composers.set(OutgoingHeader.SET_RELATIONSHIP_STATUS, SetRelationshipStatusComposer); this._composers.set(OutgoingHeader.VISIT_USER, VisitUserComposer); - - // FURNIDELETE - this._composers.set(OutgoingHeader.DELETE_ITEM, DeleteItemMessageComposer); // GAME this._composers.set(OutgoingHeader.ACHIEVEMENT_RESOLUTION_OPEN, GetResolutionAchievementsMessageComposer); diff --git a/packages/communication/src/messages/incoming/IncomingHeader.ts b/packages/communication/src/messages/incoming/IncomingHeader.ts index f7ae0fd..558317d 100644 --- a/packages/communication/src/messages/incoming/IncomingHeader.ts +++ b/packages/communication/src/messages/incoming/IncomingHeader.ts @@ -1,5 +1,9 @@ export class IncomingHeader { + // These packets do not belong to this revision, so these are custom packet ids + public static AREA_HIDE = 6001; + + // Original packets public static ACHIEVEMENT_LIST = 305; public static AUTHENTICATED = 2491; public static AUTHENTICATION = -1; diff --git a/packages/communication/src/messages/incoming/room/furniture/AreaHideMessageEvent.ts b/packages/communication/src/messages/incoming/room/furniture/AreaHideMessageEvent.ts new file mode 100644 index 0000000..5c04551 --- /dev/null +++ b/packages/communication/src/messages/incoming/room/furniture/AreaHideMessageEvent.ts @@ -0,0 +1,16 @@ +import { IMessageEvent } from '@nitrots/api'; +import { MessageEvent } from '@nitrots/events'; +import { AreaHideMessageParser } from '../../../parser'; + +export class AreaHideMessageEvent extends MessageEvent implements IMessageEvent +{ + constructor(callBack: Function) + { + super(callBack, AreaHideMessageParser); + } + + public getParser(): AreaHideMessageParser + { + return this.parser as AreaHideMessageParser; + } +} diff --git a/packages/communication/src/messages/incoming/room/furniture/index.ts b/packages/communication/src/messages/incoming/room/furniture/index.ts index 3926d97..9ebbebd 100644 --- a/packages/communication/src/messages/incoming/room/furniture/index.ts +++ b/packages/communication/src/messages/incoming/room/furniture/index.ts @@ -1,6 +1,6 @@ +export * from './AreaHideMessageEvent'; export * from './CustomUserNotificationMessageEvent'; export * from './DiceValueMessageEvent'; -export * from './floor'; export * from './FurniRentOrBuyoutOfferMessageEvent'; export * from './FurnitureAliasesEvent'; export * from './FurnitureDataEvent'; @@ -17,6 +17,7 @@ export * from './RentableSpaceStatusMessageEvent'; export * from './RequestSpamWallPostItMessageEvent'; export * from './RoomDimmerPresetsMessageEvent'; export * from './RoomMessageNotificationMessageEvent'; -export * from './wall'; export * from './WelcomeGiftStatusEvent'; +export * from './floor'; +export * from './wall'; export * from './youtube'; diff --git a/packages/communication/src/messages/outgoing/OutgoingHeader.ts b/packages/communication/src/messages/outgoing/OutgoingHeader.ts index 382b5ee..756c70f 100644 --- a/packages/communication/src/messages/outgoing/OutgoingHeader.ts +++ b/packages/communication/src/messages/outgoing/OutgoingHeader.ts @@ -1,5 +1,8 @@ export class OutgoingHeader { + // These packets do not belong to this revision, so these are custom packet ids + public static CLICK_FURNI = 6002; + public static ACHIEVEMENT_LIST = 219; public static AUTHENTICATION = -1; public static BOT_CONFIGURATION = 1986; @@ -469,7 +472,5 @@ export class OutgoingHeader public static RENTABLE_EXTEND_RENT_OR_BUYOUT_FURNI = 1071; public static RENTABLE_GET_RENT_OR_BUYOUT_OFFER = 2518; - // CUSTOM HEADERS - public static DELETE_ITEM = 10018; } diff --git a/packages/communication/src/messages/outgoing/room/engine/ClickFurniMessageComposer.ts b/packages/communication/src/messages/outgoing/room/engine/ClickFurniMessageComposer.ts new file mode 100644 index 0000000..30ea637 --- /dev/null +++ b/packages/communication/src/messages/outgoing/room/engine/ClickFurniMessageComposer.ts @@ -0,0 +1,21 @@ +import { IMessageComposer } from '@nitrots/api'; + +export class ClickFurniMessageComposer implements IMessageComposer> +{ + private _data: ConstructorParameters; + + constructor(id: number, category: number) + { + this._data = [id, category]; + } + + public getMessageArray() + { + return this._data; + } + + public dispose(): void + { + return; + } +} diff --git a/packages/communication/src/messages/outgoing/room/engine/index.ts b/packages/communication/src/messages/outgoing/room/engine/index.ts index d8c89dc..ebee1cd 100644 --- a/packages/communication/src/messages/outgoing/room/engine/index.ts +++ b/packages/communication/src/messages/outgoing/room/engine/index.ts @@ -1,6 +1,7 @@ export * from './BotPlaceComposer'; export * from './BotRemoveComposer'; export * from './BotSkillSaveComposer'; +export * from './ClickFurniMessageComposer'; export * from './CompostPlantMessageComposer'; export * from './GetItemDataComposer'; export * from './HarvestPetMessageComposer'; diff --git a/packages/communication/src/messages/parser/catalog/CatalogPageMessageProductData.ts b/packages/communication/src/messages/parser/catalog/CatalogPageMessageProductData.ts index 7225e10..18fded8 100644 --- a/packages/communication/src/messages/parser/catalog/CatalogPageMessageProductData.ts +++ b/packages/communication/src/messages/parser/catalog/CatalogPageMessageProductData.ts @@ -1,13 +1,8 @@ -import { IMessageDataWrapper } from '@nitrots/api'; +import { FurnitureType, IMessageDataWrapper } from '@nitrots/api'; export class CatalogPageMessageProductData { - public static I: string = 'i'; - public static S: string = 's'; - public static E: string = 'e'; - public static B: string = 'b'; - - private _productType: string; + private _productType: FurnitureType; private _furniClassId: number; private _extraParam: string; private _productCount: number; @@ -38,11 +33,11 @@ export class CatalogPageMessageProductData public parse(wrapper: IMessageDataWrapper): boolean { - this._productType = wrapper.readString(); + this._productType = wrapper.readString().toUpperCase() as FurnitureType; switch(this._productType) { - case CatalogPageMessageProductData.B: + case FurnitureType.BADGE: this._extraParam = wrapper.readString(); this._productCount = 1; return true; @@ -57,11 +52,12 @@ export class CatalogPageMessageProductData this._uniqueLimitedItemSeriesSize = wrapper.readInt(); this._uniqueLimitedItemsLeft = wrapper.readInt(); } + return true; } } - public get productType(): string + public get productType(): FurnitureType { return this._productType; } diff --git a/packages/communication/src/messages/parser/room/engine/AreaHideMessageData.ts b/packages/communication/src/messages/parser/room/engine/AreaHideMessageData.ts new file mode 100644 index 0000000..c5c44cd --- /dev/null +++ b/packages/communication/src/messages/parser/room/engine/AreaHideMessageData.ts @@ -0,0 +1,58 @@ +import { IMessageDataWrapper } from '@nitrots/api'; + +export class AreaHideMessageData +{ + private _furniId: number; + private _on: boolean; + private _rootX: number; + private _rootY: number; + private _width: number; + private _length: number; + private _invert: boolean; + + constructor(wrapper: IMessageDataWrapper) + { + this._furniId = wrapper.readInt(); + this._on = wrapper.readBoolean(); + this._rootX = wrapper.readInt(); + this._rootY = wrapper.readInt(); + this._width = wrapper.readInt(); + this._length = wrapper.readInt(); + this._invert = wrapper.readBoolean(); + } + + public get furniId(): number + { + return this._furniId; + } + + public get on(): boolean + { + return this._on; + } + + public get rootX(): number + { + return this._rootX; + } + + public get rootY(): number + { + return this._rootY; + } + + public get width(): number + { + return this._width; + } + + public get length(): number + { + return this._length; + } + + public get invert(): boolean + { + return this._invert; + } +} diff --git a/packages/communication/src/messages/parser/room/engine/index.ts b/packages/communication/src/messages/parser/room/engine/index.ts index ba275c9..68d71c3 100644 --- a/packages/communication/src/messages/parser/room/engine/index.ts +++ b/packages/communication/src/messages/parser/room/engine/index.ts @@ -1,3 +1,4 @@ +export * from './AreaHideMessageData'; export * from './FavoriteMembershipUpdateMessageParser'; export * from './ObjectData'; export * from './ObjectsDataUpdateParser'; diff --git a/packages/communication/src/messages/parser/room/furniture/AreaHideMessageParser.ts b/packages/communication/src/messages/parser/room/furniture/AreaHideMessageParser.ts new file mode 100644 index 0000000..3259101 --- /dev/null +++ b/packages/communication/src/messages/parser/room/furniture/AreaHideMessageParser.ts @@ -0,0 +1,28 @@ +import { IMessageDataWrapper, IMessageParser } from '@nitrots/api'; +import { AreaHideMessageData } from '../engine'; + +export class AreaHideMessageParser implements IMessageParser +{ + private _areaData: AreaHideMessageData; + + public flush(): boolean + { + this._areaData = null; + + return true; + } + + public parse(wrapper: IMessageDataWrapper): boolean + { + if(!wrapper) return false; + + this._areaData = new AreaHideMessageData(wrapper); + + return true; + } + + public get areaData(): AreaHideMessageData + { + return this._areaData; + } +} diff --git a/packages/communication/src/messages/parser/room/furniture/index.ts b/packages/communication/src/messages/parser/room/furniture/index.ts index 8cebe4b..8f28829 100644 --- a/packages/communication/src/messages/parser/room/furniture/index.ts +++ b/packages/communication/src/messages/parser/room/furniture/index.ts @@ -1,6 +1,6 @@ +export * from './AreaHideMessageParser'; export * from './CustomUserNotificationMessageParser'; export * from './DiceValueMessageParser'; -export * from './floor'; export * from './FurniRentOrBuyoutOfferMessageParser'; export * from './FurnitureAliasesParser'; export * from './FurnitureDataParser'; @@ -18,6 +18,7 @@ export * from './RequestSpamWallPostItMessageParser'; export * from './RoomDimmerPresetsMessageData'; export * from './RoomDimmerPresetsMessageParser'; export * from './RoomMessageNotificationMessageParser'; -export * from './wall'; export * from './WelcomeGiftStatusParser'; +export * from './floor'; +export * from './wall'; export * from './youtube'; diff --git a/packages/communication/tsconfig.json b/packages/communication/tsconfig.json index 5e8757d..7865c29 100644 --- a/packages/communication/tsconfig.json +++ b/packages/communication/tsconfig.json @@ -25,7 +25,5 @@ "ESNext" ], "module": "ES6" - }, - "include": [ - "src" ] + } } diff --git a/packages/configuration/.eslintrc.json b/packages/configuration/.eslintrc.json deleted file mode 100644 index ad92133..0000000 --- a/packages/configuration/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": [ "@nitrots/eslint-config" ] -} diff --git a/packages/configuration/package.json b/packages/configuration/package.json index 7cef9c2..2dcb264 100644 --- a/packages/configuration/package.json +++ b/packages/configuration/package.json @@ -5,13 +5,11 @@ "type": "module", "license": "GPL-3.0", "scripts": { - "compile": "tsc --project ./tsconfig.json --noEmit false", - "eslint": "eslint ./src --fix" + "compile": "tsc --project ./tsconfig.json --noEmit false" }, "main": "./index", "dependencies": { "@nitrots/api": "1.0.0", - "@nitrots/eslint-config": "1.0.0", "@nitrots/utils": "1.0.0" }, "devDependencies": { diff --git a/packages/configuration/src/ConfigurationManager.ts b/packages/configuration/src/ConfigurationManager.ts index a72a04a..f4bcd99 100644 --- a/packages/configuration/src/ConfigurationManager.ts +++ b/packages/configuration/src/ConfigurationManager.ts @@ -65,7 +65,7 @@ export class ConfigurationManager implements IConfigurationManager { let value = data[key]; - if(typeof value === 'string') value = this.interpolate((value as string), regex); + if(typeof value === 'string') value = this.interpolate(value, regex); if(this._definitions.has(key)) { diff --git a/packages/configuration/tsconfig.json b/packages/configuration/tsconfig.json index 5e8757d..7865c29 100644 --- a/packages/configuration/tsconfig.json +++ b/packages/configuration/tsconfig.json @@ -25,7 +25,5 @@ "ESNext" ], "module": "ES6" - }, - "include": [ - "src" ] + } } diff --git a/packages/eslint-config/.eslintrc.json b/packages/eslint-config/.eslintrc.json deleted file mode 100644 index 1a4901d..0000000 --- a/packages/eslint-config/.eslintrc.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "env": { - "browser": true, - "es2021": true, - "node": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 12, - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - "indent": [ - "error", - 4, - { - "SwitchCase": 1 - } - ], - "no-multi-spaces": [ - "error" - ], - "no-trailing-spaces": [ - "error", - { - "skipBlankLines": false, - "ignoreComments": true - } - ], - "linebreak-style": [ - "off" - ], - "quotes": [ - "error", - "single" - ], - "semi": [ - "error", - "always" - ], - "brace-style": [ - "error", - "allman" - ], - "object-curly-spacing": [ - "error", - "always" - ], - "keyword-spacing": [ - "error", - { - "overrides": - { - "if": - { - "after": false - }, - "for": - { - "after": false - }, - "while": - { - "after": false - }, - "switch": - { - "after": false - } - } - } - ], - "@typescript-eslint/no-explicit-any": [ - "off" - ], - "@typescript-eslint/explicit-module-boundary-types": [ - "off", - { - "allowedNames": [ - "getMessageArray" - ] - } - ], - "@typescript-eslint/ban-ts-comment": [ - "off" - ], - "@typescript-eslint/no-empty-function": [ - "error", - { - "allow": [ - "functions", - "arrowFunctions", - "generatorFunctions", - "methods", - "generatorMethods", - "constructors" - ] - } - ], - "@typescript-eslint/no-unused-vars": [ - "off" - ], - "@typescript-eslint/ban-types": [ - "error", - { - "types": - { - "String": true, - "Boolean": true, - "Number": true, - "Symbol": true, - "{}": false, - "Object": false, - "object": false, - "Function": false - }, - "extendDefaults": true - } - ] - } -} diff --git a/packages/eslint-config/.gitignore b/packages/eslint-config/.gitignore deleted file mode 100644 index 1413af9..0000000 --- a/packages/eslint-config/.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. - -# compiled output -/dist -/tmp -/out-tsc -# Only exists if Bazel was run -/bazel-out - -# dependencies -/node_modules - -# profiling files -chrome-profiler-events*.json -speed-measure-plugin*.json - -# IDEs and editors -/.idea -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# IDE - VSCode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -.history/* - -# misc -/.sass-cache -/connect.lock -/coverage -/libpeerconnection.log -npm-debug.log -yarn-error.log -testem.log -/typings -.git - -# System Files -.DS_Store -Thumbs.db - -*.zip -*.as -*.bin diff --git a/packages/eslint-config/index.js b/packages/eslint-config/index.js deleted file mode 100644 index 3b07596..0000000 --- a/packages/eslint-config/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./.eslintrc.json'); diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json deleted file mode 100644 index 68d987d..0000000 --- a/packages/eslint-config/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "@nitrots/eslint-config", - "description": "Nitro eslint configs", - "version": "1.0.0", - "license": "GPL-3.0", - "main": "./index", - "dependencies": { - }, - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^7.1.1", - "@typescript-eslint/parser": "^7.1.1", - "eslint": "^8.57.0" - } -} - \ No newline at end of file diff --git a/packages/events/.eslintrc.json b/packages/events/.eslintrc.json deleted file mode 100644 index ad92133..0000000 --- a/packages/events/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": [ "@nitrots/eslint-config" ] -} diff --git a/packages/events/package.json b/packages/events/package.json index 6fc7394..0fc99fb 100644 --- a/packages/events/package.json +++ b/packages/events/package.json @@ -5,14 +5,11 @@ "type": "module", "license": "GPL-3.0", "scripts": { - "build": "vite build", - "compile": "tsc --project ./tsconfig.json --noEmit false", - "eslint": "eslint ./src --fix" + "compile": "tsc --project ./tsconfig.json --noEmit false" }, "main": "./index", "dependencies": { "@nitrots/api": "1.0.0", - "@nitrots/eslint-config": "1.0.0", "@nitrots/utils": "1.0.0" }, "devDependencies": { diff --git a/packages/events/src/EventDispatcher.ts b/packages/events/src/EventDispatcher.ts index a3bdc84..086383d 100644 --- a/packages/events/src/EventDispatcher.ts +++ b/packages/events/src/EventDispatcher.ts @@ -23,6 +23,8 @@ export class EventDispatcher implements IEventDispatcher return; } + NitroLogger.events('Added Event Listener', type); + existing.push(callback); } @@ -78,7 +80,7 @@ export class EventDispatcher implements IEventDispatcher try { - (callback as Function)(event); + callback(event); } catch (err) diff --git a/packages/events/src/room/RoomEngineAreaHideStateEvent.ts b/packages/events/src/room/RoomEngineAreaHideStateEvent.ts new file mode 100644 index 0000000..537fc83 --- /dev/null +++ b/packages/events/src/room/RoomEngineAreaHideStateEvent.ts @@ -0,0 +1,20 @@ +import { RoomEngineTriggerWidgetEvent } from './RoomEngineTriggerWidgetEvent'; + +export class RoomEngineAreaHideStateEvent extends RoomEngineTriggerWidgetEvent +{ + public static UPDATE_STATE_AREA_HIDE: string = 'REAHSE_UPDATE_STATE_AREA_HIDE'; + + private _isOn: boolean; + + constructor(roomId: number, furniId: number, category: number, on: boolean) + { + super(RoomEngineAreaHideStateEvent.UPDATE_STATE_AREA_HIDE, roomId, furniId, category); + + this._isOn = on; + } + + public get isOn(): boolean + { + return this._isOn; + } +} diff --git a/packages/events/src/room/RoomEngineTriggerWidgetEvent.ts b/packages/events/src/room/RoomEngineTriggerWidgetEvent.ts index ba1c8cb..3a22ef2 100644 --- a/packages/events/src/room/RoomEngineTriggerWidgetEvent.ts +++ b/packages/events/src/room/RoomEngineTriggerWidgetEvent.ts @@ -23,6 +23,7 @@ export class RoomEngineTriggerWidgetEvent extends RoomEngineObjectEvent public static REQUEST_MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG: string = 'ROWRE_REQUEST_MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG'; public static REQUEST_PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG: string = 'ROWRE_REQUEST_PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG'; public static REQUEST_BACKGROUND_COLOR: string = 'RETWE_REQUEST_BACKGROUND_COLOR'; + public static REQUEST_AREA_HIDE: string = 'RETWE_REQUEST_AREA_HIDE'; public static REQUEST_MYSTERYBOX_OPEN_DIALOG: string = 'RETWE_REQUEST_MYSTERYBOX_OPEN_DIALOG'; public static REQUEST_EFFECTBOX_OPEN_DIALOG: string = 'RETWE_REQUEST_EFFECTBOX_OPEN_DIALOG'; public static REQUEST_MYSTERYTROPHY_OPEN_DIALOG: string = 'RETWE_REQUEST_MYSTERYTROPHY_OPEN_DIALOG'; diff --git a/packages/events/src/room/RoomObjectWidgetRequestEvent.ts b/packages/events/src/room/RoomObjectWidgetRequestEvent.ts index 36d50d1..d71e5fd 100644 --- a/packages/events/src/room/RoomObjectWidgetRequestEvent.ts +++ b/packages/events/src/room/RoomObjectWidgetRequestEvent.ts @@ -26,6 +26,7 @@ export class RoomObjectWidgetRequestEvent extends RoomObjectEvent public static MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG: string = 'ROWRE_MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG'; public static PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG: string = 'ROWRE_PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG'; public static BACKGROUND_COLOR: string = 'ROWRE_BACKGROUND_COLOR'; + public static AREA_HIDE: string = 'ROWRE_AREA_HIDE'; public static MYSTERYBOX_OPEN_DIALOG: string = 'ROWRE_MYSTERYBOX_OPEN_DIALOG'; public static EFFECTBOX_OPEN_DIALOG: string = 'ROWRE_EFFECTBOX_OPEN_DIALOG'; public static MYSTERYTROPHY_OPEN_DIALOG: string = 'ROWRE_MYSTERYTROPHY_OPEN_DIALOG'; diff --git a/packages/events/src/room/index.ts b/packages/events/src/room/index.ts index 6c25618..2ba9082 100644 --- a/packages/events/src/room/index.ts +++ b/packages/events/src/room/index.ts @@ -1,6 +1,7 @@ export * from './RoomBackgroundColorEvent'; export * from './RoomContentLoadedEvent'; export * from './RoomDragEvent'; +export * from './RoomEngineAreaHideStateEvent'; export * from './RoomEngineDimmerStateEvent'; export * from './RoomEngineEvent'; export * from './RoomEngineObjectEvent'; diff --git a/packages/events/src/session/RoomSessionPetPackageEvent.ts b/packages/events/src/session/RoomSessionPetPackageEvent.ts index 8f751ea..61cab40 100644 --- a/packages/events/src/session/RoomSessionPetPackageEvent.ts +++ b/packages/events/src/session/RoomSessionPetPackageEvent.ts @@ -14,7 +14,7 @@ export class RoomSessionPetPackageEvent extends RoomSessionEvent constructor(petPackageName: string, session: IRoomSession, objectId: number, figureData: PetFigureData, nameValidationStatus: number, nameValidationInfo: string) { super(petPackageName, session); - + this._objectId = objectId; this._figureData = figureData; this._nameValidationStatus = nameValidationStatus; diff --git a/packages/events/tsconfig.json b/packages/events/tsconfig.json index 5e8757d..7865c29 100644 --- a/packages/events/tsconfig.json +++ b/packages/events/tsconfig.json @@ -25,7 +25,5 @@ "ESNext" ], "module": "ES6" - }, - "include": [ - "src" ] + } } diff --git a/packages/localization/.eslintrc.json b/packages/localization/.eslintrc.json deleted file mode 100644 index ad92133..0000000 --- a/packages/localization/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": [ "@nitrots/eslint-config" ] -} diff --git a/packages/localization/package.json b/packages/localization/package.json index e86ded7..1c61491 100644 --- a/packages/localization/package.json +++ b/packages/localization/package.json @@ -5,17 +5,15 @@ "type": "module", "license": "GPL-3.0", "scripts": { - "compile": "tsc --project ./tsconfig.json --noEmit false", - "eslint": "eslint ./src --fix" + "compile": "tsc --project ./tsconfig.json --noEmit false" }, "main": "./index", "dependencies": { "@nitrots/api": "1.0.0", "@nitrots/communication": "1.0.0", "@nitrots/configuration": "1.0.0", - "@nitrots/eslint-config": "1.0.0", "@nitrots/events": "1.0.0", - "pixi.js": "^8.1.0" + "pixi.js": "^8.1.6" }, "devDependencies": { "typescript": "~5.4.2" diff --git a/packages/localization/tsconfig.json b/packages/localization/tsconfig.json index 5e8757d..7865c29 100644 --- a/packages/localization/tsconfig.json +++ b/packages/localization/tsconfig.json @@ -25,7 +25,5 @@ "ESNext" ], "module": "ES6" - }, - "include": [ - "src" ] + } } diff --git a/packages/room/.eslintrc.json b/packages/room/.eslintrc.json deleted file mode 100644 index ad92133..0000000 --- a/packages/room/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": [ "@nitrots/eslint-config" ] -} diff --git a/packages/room/package.json b/packages/room/package.json index fcfcb78..93f406f 100644 --- a/packages/room/package.json +++ b/packages/room/package.json @@ -5,8 +5,7 @@ "type": "module", "license": "GPL-3.0", "scripts": { - "compile": "tsc --project ./tsconfig.json --noEmit false", - "eslint": "eslint ./src --fix" + "compile": "tsc --project ./tsconfig.json --noEmit false" }, "main": "./index", "dependencies": { @@ -15,10 +14,9 @@ "@nitrots/avatar": "1.0.0", "@nitrots/communication": "1.0.0", "@nitrots/configuration": "1.0.0", - "@nitrots/eslint-config": "1.0.0", "@nitrots/events": "1.0.0", "@nitrots/session": "1.0.0", - "pixi.js": "^8.1.0" + "pixi.js": "^8.1.6" }, "devDependencies": { "typescript": "~5.4.2" diff --git a/packages/room/src/RoomEngine.ts b/packages/room/src/RoomEngine.ts index cbc58ef..7053413 100644 --- a/packages/room/src/RoomEngine.ts +++ b/packages/room/src/RoomEngine.ts @@ -1,7 +1,7 @@ -import { IFurnitureStackingHeightMap, IGetImageListener, IImageResult, ILegacyWallGeometry, IObjectData, IPetColorResult, IPetCustomPart, IRoomContentListener, IRoomContentLoader, IRoomCreator, IRoomEngine, IRoomEngineServices, IRoomGeometry, IRoomInstance, IRoomManager, IRoomManagerListener, IRoomObject, IRoomObjectController, IRoomRenderer, IRoomRenderingCanvas, IRoomSessionManager, ISelectedRoomObjectData, ISessionDataManager, ITileObjectMap, IUpdateReceiver, IVector3D, LegacyDataType, MouseEventType, ObjectDataFactory, PetFigureData, RoomControllerLevel, RoomObjectCategory, RoomObjectUserType, RoomObjectVariable, ToolbarIconEnum } from '@nitrots/api'; +import { IFurnitureStackingHeightMap, IGetImageListener, IImageResult, ILegacyWallGeometry, IObjectData, IPetColorResult, IPetCustomPart, IRoomAreaSelectionManager, IRoomContentListener, IRoomContentLoader, IRoomCreator, IRoomEngine, IRoomEngineServices, IRoomGeometry, IRoomInstance, IRoomManager, IRoomManagerListener, IRoomObject, IRoomObjectController, IRoomRenderer, IRoomRenderingCanvas, IRoomSessionManager, ISelectedRoomObjectData, ISessionDataManager, ITileObjectMap, IUpdateReceiver, IVector3D, LegacyDataType, MouseEventType, ObjectDataFactory, PetFigureData, RoomControllerLevel, RoomObjectCategory, RoomObjectUserType, RoomObjectVariable, ToolbarIconEnum } from '@nitrots/api'; import { GetCommunication, RenderRoomMessageComposer, RenderRoomThumbnailMessageComposer } from '@nitrots/communication'; import { GetConfiguration } from '@nitrots/configuration'; -import { BadgeImageReadyEvent, GetEventDispatcher, NitroToolbarAnimateIconEvent, RoomBackgroundColorEvent, RoomDragEvent, RoomEngineEvent, RoomEngineObjectEvent, RoomObjectEvent, RoomObjectFurnitureActionEvent, RoomObjectMouseEvent, RoomSessionEvent, RoomToObjectOwnAvatarMoveEvent } from '@nitrots/events'; +import { BadgeImageReadyEvent, GetEventDispatcher, NitroToolbarAnimateIconEvent, RoomBackgroundColorEvent, RoomDragEvent, RoomEngineAreaHideStateEvent, RoomEngineEvent, RoomEngineObjectEvent, RoomObjectEvent, RoomObjectFurnitureActionEvent, RoomObjectMouseEvent, RoomSessionEvent, RoomToObjectOwnAvatarMoveEvent } from '@nitrots/events'; import { GetRoomSessionManager, GetSessionDataManager } from '@nitrots/session'; import { FurniId, GetTickerTime, NitroLogger, NumberBank, TextureUtils, Vector3d } from '@nitrots/utils'; import { Container, Matrix, Point, Rectangle, RenderTexture, Sprite, Texture, Ticker } from 'pixi.js'; @@ -16,7 +16,7 @@ import { RoomVariableEnum } from './RoomVariableEnum'; import { ObjectAvatarCarryObjectUpdateMessage, ObjectAvatarChatUpdateMessage, ObjectAvatarDanceUpdateMessage, ObjectAvatarEffectUpdateMessage, ObjectAvatarExperienceUpdateMessage, ObjectAvatarExpressionUpdateMessage, ObjectAvatarFigureUpdateMessage, ObjectAvatarFlatControlUpdateMessage, ObjectAvatarGestureUpdateMessage, ObjectAvatarGuideStatusUpdateMessage, ObjectAvatarMutedUpdateMessage, ObjectAvatarOwnMessage, ObjectAvatarPetGestureUpdateMessage, ObjectAvatarPlayerValueUpdateMessage, ObjectAvatarPlayingGameUpdateMessage, ObjectAvatarPostureUpdateMessage, ObjectAvatarSignUpdateMessage, ObjectAvatarSleepUpdateMessage, ObjectAvatarTypingUpdateMessage, ObjectAvatarUpdateMessage, ObjectAvatarUseObjectUpdateMessage, ObjectDataUpdateMessage, ObjectGroupBadgeUpdateMessage, ObjectHeightUpdateMessage, ObjectItemDataUpdateMessage, ObjectModelDataUpdateMessage, ObjectMoveUpdateMessage, ObjectRoomColorUpdateMessage, ObjectRoomFloorHoleUpdateMessage, ObjectRoomMaskUpdateMessage, ObjectRoomPlanePropertyUpdateMessage, ObjectRoomPlaneVisibilityUpdateMessage, ObjectRoomUpdateMessage, ObjectStateUpdateMessage, RoomObjectUpdateMessage } from './messages'; import { RoomLogic, RoomMapData } from './object'; import { RoomRenderer } from './renderer'; -import { RoomCamera, RoomData, RoomEnterEffect, RoomFurnitureData, RoomGeometry, RoomInstanceData, RoomObjectBadgeImageAssetListener } from './utils'; +import { RoomAreaSelectionManager, RoomCamera, RoomData, RoomEnterEffect, RoomFurnitureData, RoomGeometry, RoomInstanceData, RoomObjectBadgeImageAssetListener } from './utils'; export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineServices, IRoomManagerListener, IRoomContentListener, IUpdateReceiver { @@ -55,6 +55,7 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService private _activeRoomDragStartY: number = 0; private _activeRoomDragX: number = 0; private _activeRoomDragY: number = 0; + private _moveBlocked: boolean = false; private _roomDraggingAlwaysCenters: boolean = false; private _roomAllowsDragging: boolean = true; private _roomDatas: Map = new Map(); @@ -62,15 +63,11 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService private _skipFurnitureCreationForNextFrame: boolean = false; private _mouseCursorUpdate: boolean = false; private _badgeListenerObjects: Map = new Map(); - - constructor() - { - this.onBadgeImageReadyEvent = this.onBadgeImageReadyEvent.bind(this); - } + private _areaSelectionManager: IRoomAreaSelectionManager = new RoomAreaSelectionManager(this); public async init(): Promise { - GetRoomObjectLogicFactory().registerEventFunction(this.processRoomObjectEvent.bind(this)); + GetRoomObjectLogicFactory().registerEventFunction(event => this.processRoomObjectEvent(event)); GetEventDispatcher().addEventListener(RoomSessionEvent.STARTED, event => this.onRoomSessionEvent(event)); GetEventDispatcher().addEventListener(RoomSessionEvent.ENDED, event => this.onRoomSessionEvent(event)); @@ -548,6 +545,24 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService return true; } + public updateAreaHide(roomId: number, furniId: number, on: boolean, rootX: number, rootY: number, width: number, length: number, invert: boolean): boolean + { + const roomObject = this.getRoomOwnObject(roomId); + + if(!roomObject || !roomObject.logic) return false; + + GetEventDispatcher().dispatchEvent(new RoomEngineAreaHideStateEvent(roomId, furniId, RoomObjectCategory.FLOOR, on)); + + if(on) + { + roomObject.logic.processUpdateMessage(new ObjectRoomFloorHoleUpdateMessage(ObjectRoomFloorHoleUpdateMessage.ADD, furniId, rootX, rootY, width, length, invert)); + } + else + { + roomObject.logic.processUpdateMessage(new ObjectRoomFloorHoleUpdateMessage(ObjectRoomFloorHoleUpdateMessage.REMOVE, furniId)); + } + } + public updateObjectRoomColor(roomId: number, color: number, light: number, backgroundOnly: boolean): boolean { const roomObject = this.getRoomOwnObject(roomId); @@ -685,7 +700,7 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService while((pendingData = instanceData.getNextPendingFurnitureFloor())) { - furnitureAdded = this.processPendingFurnitureFloor(instanceData.roomId, pendingData.id, pendingData); + furnitureAdded = this.addObjectFurnitureFromData(instanceData.roomId, pendingData.id, pendingData); if(hasTickLimit) { @@ -705,7 +720,7 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService while(!this._skipFurnitureCreationForNextFrame && (pendingData = instanceData.getNextPendingFurnitureWall())) { - furnitureAdded = this.processPendingFurnitureWall(instanceData.roomId, pendingData.id, pendingData); + furnitureAdded = this.addObjectWallItemFromData(instanceData.roomId, pendingData.id, pendingData); if(hasTickLimit) { @@ -734,7 +749,7 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService } } - private processPendingFurnitureFloor(roomId: number, id: number, data: RoomFurnitureData): boolean + private addObjectFurnitureFromData(roomId: number, id: number, data: RoomFurnitureData): boolean { if(!data) { @@ -795,7 +810,7 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService return true; } - private processPendingFurnitureWall(roomId: number, id: number, data: RoomFurnitureData): boolean + private addObjectWallItemFromData(roomId: number, id: number, data: RoomFurnitureData): boolean { if(!data) { @@ -1440,12 +1455,12 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService switch(category) { case RoomObjectCategory.FLOOR: - this.processPendingFurnitureFloor(this.getRoomIdFromString(roomId), objectId, null); + this.addObjectFurnitureFromData(this.getRoomIdFromString(roomId), objectId, null); roomObject = (roomInstance.getRoomObject(objectId, category) as IRoomObjectController); break; case RoomObjectCategory.WALL: - this.processPendingFurnitureWall(this.getRoomIdFromString(roomId), objectId, null); + this.addObjectWallItemFromData(this.getRoomIdFromString(roomId), objectId, null); roomObject = (roomInstance.getRoomObject(objectId, category) as IRoomObjectController); break; @@ -2104,7 +2119,32 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService if(!this._badgeListenerObjects.size) { - GetEventDispatcher().addEventListener(BadgeImageReadyEvent.IMAGE_READY, this.onBadgeImageReadyEvent); + const onBadgeImageReadyEvent = (event: BadgeImageReadyEvent) => + { + const listeners = this._badgeListenerObjects && this._badgeListenerObjects.get(event.badgeId); + + if(!listeners) return; + + for(const listener of listeners) + { + if(!listener) continue; + + this.putBadgeInObjectAssets(listener.object, event.badgeId, listener.groupBadge); + + const badgeName = (listener.groupBadge) ? this._sessionDataManager.loadGroupBadgeImage(event.badgeId) : this._sessionDataManager.loadBadgeImage(event.badgeId); + + if(listener.object && listener.object.logic) listener.object.logic.processUpdateMessage(new ObjectGroupBadgeUpdateMessage(event.badgeId, badgeName)); + } + + this._badgeListenerObjects.delete(event.badgeId); + + if(!this._badgeListenerObjects.size) + { + GetEventDispatcher().removeEventListener(BadgeImageReadyEvent.IMAGE_READY, onBadgeImageReadyEvent); + } + }; + + GetEventDispatcher().addEventListener(BadgeImageReadyEvent.IMAGE_READY, onBadgeImageReadyEvent); } let listeners = this._badgeListenerObjects.get(badgeId); @@ -2123,31 +2163,6 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService roomObject.logic.processUpdateMessage(new ObjectGroupBadgeUpdateMessage(badgeId, badgeName)); } - private onBadgeImageReadyEvent(k: BadgeImageReadyEvent): void - { - const listeners = this._badgeListenerObjects && this._badgeListenerObjects.get(k.badgeId); - - if(!listeners) return; - - for(const listener of listeners) - { - if(!listener) continue; - - this.putBadgeInObjectAssets(listener.object, k.badgeId, listener.groupBadge); - - const badgeName = (listener.groupBadge) ? this._sessionDataManager.loadGroupBadgeImage(k.badgeId) : this._sessionDataManager.loadBadgeImage(k.badgeId); - - if(listener.object && listener.object.logic) listener.object.logic.processUpdateMessage(new ObjectGroupBadgeUpdateMessage(k.badgeId, badgeName)); - } - - this._badgeListenerObjects.delete(k.badgeId); - - if(!this._badgeListenerObjects.size) - { - GetEventDispatcher().removeEventListener(BadgeImageReadyEvent.IMAGE_READY, this.onBadgeImageReadyEvent); - } - } - private putBadgeInObjectAssets(object: IRoomObjectController, badgeId: string, groupBadge: boolean = false): void { const badgeName = (groupBadge) ? this._sessionDataManager.loadGroupBadgeImage(badgeId) : this._sessionDataManager.loadBadgeImage(badgeId); @@ -2173,33 +2188,37 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService sprite.y = (y - (rectangle.height / 2)); } - if(!this.handleRoomDragging(canvas, x, y, type, altKey, ctrlKey, shiftKey)) + if(type === MouseEventType.MOUSE_CLICK && this._areaSelectionManager.finishSelecting()) { - if(!canvas.handleMouseEvent(x, y, type, altKey, ctrlKey, shiftKey, buttonDown)) + this._areaSelectionManager.finishSelecting(); + } + else + { + if(!this.handleRoomDragging(canvas, x, y, type, altKey, ctrlKey, shiftKey)) { - let eventType: string = null; - - if(type === MouseEventType.MOUSE_CLICK) + if(!canvas.handleMouseEvent(x, y, type, altKey, ctrlKey, shiftKey, buttonDown)) { - if(GetEventDispatcher()) + let eventType: string = null; + + if(type === MouseEventType.MOUSE_CLICK) { GetEventDispatcher().dispatchEvent(new RoomEngineObjectEvent(RoomEngineObjectEvent.DESELECTED, this._activeRoomId, -1, RoomObjectCategory.MINIMUM)); + + eventType = RoomObjectMouseEvent.CLICK; + } + else + { + if(type === MouseEventType.MOUSE_MOVE) eventType = RoomObjectMouseEvent.MOUSE_MOVE; + + else if(type === MouseEventType.MOUSE_DOWN) eventType = RoomObjectMouseEvent.MOUSE_DOWN; + + else if(type === MouseEventType.MOUSE_DOWN_LONG) eventType = RoomObjectMouseEvent.MOUSE_DOWN_LONG; + + else if(type === MouseEventType.MOUSE_UP) eventType = RoomObjectMouseEvent.MOUSE_UP; } - eventType = RoomObjectMouseEvent.CLICK; + this._roomObjectEventHandler.handleRoomObjectEvent(new RoomObjectMouseEvent(eventType, this.getRoomObject(this._activeRoomId, RoomEngine.ROOM_OBJECT_ID, RoomObjectCategory.ROOM), null, altKey), this._activeRoomId); } - else - { - if(type === MouseEventType.MOUSE_MOVE) eventType = RoomObjectMouseEvent.MOUSE_MOVE; - - else if(type === MouseEventType.MOUSE_DOWN) eventType = RoomObjectMouseEvent.MOUSE_DOWN; - - else if(type === MouseEventType.MOUSE_DOWN_LONG) eventType = RoomObjectMouseEvent.MOUSE_DOWN_LONG; - - else if(type === MouseEventType.MOUSE_UP) eventType = RoomObjectMouseEvent.MOUSE_UP; - } - - this._roomObjectEventHandler.handleRoomObjectEvent(new RoomObjectMouseEvent(eventType, this.getRoomObject(this._activeRoomId, RoomEngine.ROOM_OBJECT_ID, RoomObjectCategory.ROOM), null, altKey), this._activeRoomId); } } @@ -2210,6 +2229,16 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService private handleRoomDragging(canvas: IRoomRenderingCanvas, x: number, y: number, type: string, altKey: boolean, ctrlKey: boolean, shiftKey: boolean): boolean { + if(this.isPlayingGame()) return false; + + if(this._areaSelectionManager.areaSelectionState === RoomAreaSelectionManager.SELECTING) + { + this._activeRoomIsDragged = false; + this._activeRoomWasDragged = false; + + return false; + }; + let offsetX = (x - this._activeRoomActiveCanvasMouseX); let offsetY = (y - this._activeRoomActiveCanvasMouseY); @@ -3004,7 +3033,7 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService while(index >= 0) { - const child = (container.getChildAt(index) as Sprite); + const child = (container.getChildAt(index)); if(child) { @@ -3014,7 +3043,7 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService if(child.children.length) { - const firstChild = (child.getChildAt(0) as Sprite); + const firstChild = (child.getChildAt(0)); firstChild.parent.removeChild(firstChild); @@ -3039,11 +3068,11 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService while(index >= 0) { - const child = (container.getChildAt(index) as Sprite); + const child = (container.getChildAt(index)); if(child) { - if(child.label === label) return child; + if(child.label === label) return (child as Sprite); } index--; @@ -3228,6 +3257,11 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService this._roomManager = manager; } + public get areaSelectionManager(): IRoomAreaSelectionManager + { + return this._areaSelectionManager; + } + public get objectEventHandler(): RoomObjectEventHandler { return this._roomObjectEventHandler; @@ -3263,4 +3297,24 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService return this._roomManager.getRoomInstance(roomId.toString()).getRoomObjectsForCategory(categoryId).length; } + + public get moveBlocked(): boolean + { + return this._moveBlocked; + } + + public set moveBlocked(flag: boolean) + { + this._moveBlocked = flag; + } + + public isAreaSelectionMode(): boolean + { + return this._areaSelectionManager.areaSelectionState !== RoomAreaSelectionManager.NOT_ACTIVE; + } + + public whereYouClickIsWhereYouGo(): boolean + { + return !this.isAreaSelectionMode(); + } } diff --git a/packages/room/src/RoomManager.ts b/packages/room/src/RoomManager.ts index c4f00bc..15738ec 100644 --- a/packages/room/src/RoomManager.ts +++ b/packages/room/src/RoomManager.ts @@ -17,18 +17,24 @@ export class RoomManager implements IRoomManager, IRoomInstanceContainer private _pendingContentTypes: string[] = []; private _skipContentProcessing: boolean = false; - constructor() - { - this.onRoomContentLoadedEvent = this.onRoomContentLoadedEvent.bind(this); - } - public async init(listener: IRoomManagerListener): Promise { this._listener = listener; - GetEventDispatcher().addEventListener(RoomContentLoadedEvent.RCLE_SUCCESS, this.onRoomContentLoadedEvent); - GetEventDispatcher().addEventListener(RoomContentLoadedEvent.RCLE_FAILURE, this.onRoomContentLoadedEvent); - GetEventDispatcher().addEventListener(RoomContentLoadedEvent.RCLE_CANCEL, this.onRoomContentLoadedEvent); + const onRoomContentLoadedEvent = (event: RoomContentLoadedEvent) => + { + if(!GetRoomContentLoader()) return; + + const contentType = event.contentType; + + if(this._pendingContentTypes.indexOf(contentType) >= 0) return; + + this._pendingContentTypes.push(contentType); + }; + + GetEventDispatcher().addEventListener(RoomContentLoadedEvent.RCLE_SUCCESS, onRoomContentLoadedEvent); + GetEventDispatcher().addEventListener(RoomContentLoadedEvent.RCLE_FAILURE, onRoomContentLoadedEvent); + GetEventDispatcher().addEventListener(RoomContentLoadedEvent.RCLE_CANCEL, onRoomContentLoadedEvent); } public getRoomInstance(roomId: string): IRoomInstance @@ -276,17 +282,6 @@ export class RoomManager implements IRoomManager, IRoomInstanceContainer } } - private onRoomContentLoadedEvent(event: RoomContentLoadedEvent): void - { - if(!GetRoomContentLoader()) return; - - const contentType = event.contentType; - - if(this._pendingContentTypes.indexOf(contentType) >= 0) return; - - this._pendingContentTypes.push(contentType); - } - public update(time: number, update: boolean = false): void { this.processPendingContentTypes(time); diff --git a/packages/room/src/RoomMessageHandler.ts b/packages/room/src/RoomMessageHandler.ts index 246702b..246d824 100644 --- a/packages/room/src/RoomMessageHandler.ts +++ b/packages/room/src/RoomMessageHandler.ts @@ -1,5 +1,5 @@ import { AvatarGuideStatus, IConnection, IRoomCreator, IVector3D, LegacyDataType, ObjectRolling, PetType, RoomObjectType, RoomObjectUserType, RoomObjectVariable } from '@nitrots/api'; -import { DiceValueMessageEvent, FloorHeightMapEvent, FurnitureAliasesComposer, FurnitureAliasesEvent, FurnitureDataEvent, FurnitureFloorAddEvent, FurnitureFloorDataParser, FurnitureFloorEvent, FurnitureFloorRemoveEvent, FurnitureFloorUpdateEvent, FurnitureWallAddEvent, FurnitureWallDataParser, FurnitureWallEvent, FurnitureWallRemoveEvent, FurnitureWallUpdateEvent, GetCommunication, GetRoomEntryDataMessageComposer, GuideSessionEndedMessageEvent, GuideSessionErrorMessageEvent, GuideSessionStartedMessageEvent, IgnoreResultEvent, ItemDataUpdateMessageEvent, ObjectsDataUpdateEvent, ObjectsRollingEvent, OneWayDoorStatusMessageEvent, PetExperienceEvent, PetFigureUpdateEvent, RoomEntryTileMessageEvent, RoomEntryTileMessageParser, RoomHeightMapEvent, RoomHeightMapUpdateEvent, RoomPaintEvent, RoomReadyMessageEvent, RoomUnitChatEvent, RoomUnitChatShoutEvent, RoomUnitChatWhisperEvent, RoomUnitDanceEvent, RoomUnitEffectEvent, RoomUnitEvent, RoomUnitExpressionEvent, RoomUnitHandItemEvent, RoomUnitIdleEvent, RoomUnitInfoEvent, RoomUnitNumberEvent, RoomUnitRemoveEvent, RoomUnitStatusEvent, RoomUnitTypingEvent, RoomVisualizationSettingsEvent, UserInfoEvent, YouArePlayingGameEvent } from '@nitrots/communication'; +import { AreaHideMessageEvent, DiceValueMessageEvent, FloorHeightMapEvent, FurnitureAliasesComposer, FurnitureAliasesEvent, FurnitureDataEvent, FurnitureFloorAddEvent, FurnitureFloorDataParser, FurnitureFloorEvent, FurnitureFloorRemoveEvent, FurnitureFloorUpdateEvent, FurnitureWallAddEvent, FurnitureWallDataParser, FurnitureWallEvent, FurnitureWallRemoveEvent, FurnitureWallUpdateEvent, GetCommunication, GetRoomEntryDataMessageComposer, GuideSessionEndedMessageEvent, GuideSessionErrorMessageEvent, GuideSessionStartedMessageEvent, IgnoreResultEvent, ItemDataUpdateMessageEvent, ObjectsDataUpdateEvent, ObjectsRollingEvent, OneWayDoorStatusMessageEvent, PetExperienceEvent, PetFigureUpdateEvent, RoomEntryTileMessageEvent, RoomEntryTileMessageParser, RoomHeightMapEvent, RoomHeightMapUpdateEvent, RoomPaintEvent, RoomReadyMessageEvent, RoomUnitChatEvent, RoomUnitChatShoutEvent, RoomUnitChatWhisperEvent, RoomUnitDanceEvent, RoomUnitEffectEvent, RoomUnitEvent, RoomUnitExpressionEvent, RoomUnitHandItemEvent, RoomUnitIdleEvent, RoomUnitInfoEvent, RoomUnitNumberEvent, RoomUnitRemoveEvent, RoomUnitStatusEvent, RoomUnitTypingEvent, RoomVisualizationSettingsEvent, UserInfoEvent, YouArePlayingGameEvent } from '@nitrots/communication'; import { GetRoomSessionManager, GetSessionDataManager } from '@nitrots/session'; import { Vector3d } from '@nitrots/utils'; import { GetRoomEngine } from './GetRoomEngine'; @@ -47,6 +47,7 @@ export class RoomMessageHandler this._connection.addMessageEvent(new FurnitureDataEvent(this.onFurnitureDataEvent.bind(this))); this._connection.addMessageEvent(new ItemDataUpdateMessageEvent(this.onItemDataUpdateMessageEvent.bind(this))); this._connection.addMessageEvent(new OneWayDoorStatusMessageEvent(this.onOneWayDoorStatusMessageEvent.bind(this))); + this._connection.addMessageEvent(new AreaHideMessageEvent(this.onAreaHideMessageEvent.bind(this))); this._connection.addMessageEvent(new RoomUnitDanceEvent(this.onRoomUnitDanceEvent.bind(this))); this._connection.addMessageEvent(new RoomUnitEffectEvent(this.onRoomUnitEffectEvent.bind(this))); this._connection.addMessageEvent(new RoomUnitEvent(this.onRoomUnitEvent.bind(this))); @@ -555,6 +556,16 @@ export class RoomMessageHandler this._roomEngine.updateRoomObjectFloor(this._currentRoomId, parser.itemId, null, null, parser.state, new LegacyDataType()); } + private onAreaHideMessageEvent(event: AreaHideMessageEvent): void + { + if(!(event instanceof AreaHideMessageEvent) || !event.connection || !this._roomEngine) return; + + const parser = event.getParser(); + const areaData = parser.areaData; + + this._roomEngine.updateAreaHide(this._currentRoomId, areaData.furniId, areaData.on, areaData.rootX, areaData.rootY, areaData.width, areaData.length, areaData.invert); + } + private onDiceValueMessageEvent(event: DiceValueMessageEvent): void { if(!(event instanceof DiceValueMessageEvent) || !event.connection || !this._roomEngine) return; diff --git a/packages/room/src/RoomObjectEventHandler.ts b/packages/room/src/RoomObjectEventHandler.ts index 3a4c08b..2725f26 100644 --- a/packages/room/src/RoomObjectEventHandler.ts +++ b/packages/room/src/RoomObjectEventHandler.ts @@ -1,5 +1,5 @@ import { IFurnitureStackingHeightMap, ILegacyWallGeometry, IObjectData, IRoomCanvasMouseListener, IRoomEngineServices, IRoomGeometry, IRoomObject, IRoomObjectController, IRoomObjectEventManager, ISelectedRoomObjectData, IVector3D, MouseEventType, RoomObjectCategory, RoomObjectOperationType, RoomObjectPlacementSource, RoomObjectType, RoomObjectUserType, RoomObjectVariable } from '@nitrots/api'; -import { BotPlaceComposer, FurnitureColorWheelComposer, FurnitureDiceActivateComposer, FurnitureDiceDeactivateComposer, FurnitureFloorUpdateComposer, FurnitureGroupInfoComposer, FurnitureMultiStateComposer, FurnitureOneWayDoorComposer, FurniturePickupComposer, FurniturePlaceComposer, FurniturePostItPlaceComposer, FurnitureRandomStateComposer, FurnitureWallMultiStateComposer, FurnitureWallUpdateComposer, GetCommunication, GetItemDataComposer, GetResolutionAchievementsMessageComposer, PetMoveComposer, PetPlaceComposer, RemoveWallItemComposer, RoomUnitLookComposer, RoomUnitWalkComposer, SetItemDataMessageComposer, SetObjectDataMessageComposer } from '@nitrots/communication'; +import { BotPlaceComposer, ClickFurniMessageComposer, FurnitureColorWheelComposer, FurnitureDiceActivateComposer, FurnitureDiceDeactivateComposer, FurnitureFloorUpdateComposer, FurnitureGroupInfoComposer, FurnitureMultiStateComposer, FurnitureOneWayDoorComposer, FurniturePickupComposer, FurniturePlaceComposer, FurniturePostItPlaceComposer, FurnitureRandomStateComposer, FurnitureWallMultiStateComposer, FurnitureWallUpdateComposer, GetCommunication, GetItemDataComposer, GetResolutionAchievementsMessageComposer, PetMoveComposer, PetPlaceComposer, RemoveWallItemComposer, RoomUnitLookComposer, RoomUnitWalkComposer, SetItemDataMessageComposer, SetObjectDataMessageComposer } from '@nitrots/communication'; import { GetConfiguration } from '@nitrots/configuration'; import { GetEventDispatcher, RoomEngineDimmerStateEvent, RoomEngineObjectEvent, RoomEngineObjectPlacedEvent, RoomEngineObjectPlacedOnUserEvent, RoomEngineObjectPlaySoundEvent, RoomEngineRoomAdEvent, RoomEngineSamplePlaybackEvent, RoomEngineTriggerWidgetEvent, RoomEngineUseProductEvent, RoomObjectBadgeAssetEvent, RoomObjectDataRequestEvent, RoomObjectDimmerStateUpdateEvent, RoomObjectEvent, RoomObjectFloorHoleEvent, RoomObjectFurnitureActionEvent, RoomObjectHSLColorEnableEvent, RoomObjectHSLColorEnabledEvent, RoomObjectMouseEvent, RoomObjectMoveEvent, RoomObjectPlaySoundIdEvent, RoomObjectRoomAdEvent, RoomObjectSamplePlaybackEvent, RoomObjectSoundMachineEvent, RoomObjectStateChangedEvent, RoomObjectTileMouseEvent, RoomObjectWallMouseEvent, RoomObjectWidgetRequestEvent, RoomSpriteMouseEvent } from '@nitrots/events'; import { GetRoomSessionManager, GetSessionDataManager } from '@nitrots/session'; @@ -185,6 +185,7 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb case RoomObjectWidgetRequestEvent.MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG: case RoomObjectWidgetRequestEvent.PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG: case RoomObjectWidgetRequestEvent.BACKGROUND_COLOR: + case RoomObjectWidgetRequestEvent.AREA_HIDE: case RoomObjectWidgetRequestEvent.MYSTERYBOX_OPEN_DIALOG: case RoomObjectWidgetRequestEvent.EFFECTBOX_OPEN_DIALOG: case RoomObjectWidgetRequestEvent.MYSTERYTROPHY_OPEN_DIALOG: @@ -265,6 +266,11 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb { if(!event || !event.type) return; + if(event instanceof RoomObjectTileMouseEvent) + { + this._roomEngine.areaSelectionManager.handleTileMouseEvent(event); + } + switch(event.type) { case RoomObjectMouseEvent.CLICK: @@ -291,10 +297,36 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb } } + private clickRoomObject(event: RoomObjectMouseEvent): void + { + if(!event || event.altKey || event.ctrlKey || event.shiftKey) return; + + const objectId = event.objectId; + const objectType = event.objectType; + const category = this._roomEngine.getRoomObjectCategoryForType(objectType); + + if(category === RoomObjectCategory.FLOOR) + { + GetCommunication().connection.send(new ClickFurniMessageComposer(objectId, category)); + + return; + } + + if(category === RoomObjectCategory.WALL) + { + // This packet only sends a negative number to tell the server that its a wall item + GetCommunication().connection.send(new ClickFurniMessageComposer(-Math.abs(objectId), category)); + + return; + } + } + private handleRoomObjectMouseClickEvent(event: RoomObjectMouseEvent, roomId: number): void { if(!event) return; + this.clickRoomObject(event); + let operation = RoomObjectOperationType.OBJECT_UNDEFINED; const selectedData = this.getSelectedRoomObjectData(roomId); @@ -304,7 +336,7 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb let didWalk = false; let didMove = false; - if(this._whereYouClickIsWhereYouGo) + if(this.whereYouClickIsWhereYouGo()) { if(!operation || (operation === RoomObjectOperationType.OBJECT_UNDEFINED)) { @@ -370,11 +402,20 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb case RoomObjectOperationType.OBJECT_UNDEFINED: if(category === RoomObjectCategory.ROOM) { - if(!didWalk && (event instanceof RoomObjectTileMouseEvent)) this.onRoomObjectTileMouseEvent(roomId, event); + if(!didWalk && (event instanceof RoomObjectTileMouseEvent)) this.handleClickOnTile(roomId, event); } else { - this.setSelectedObject(roomId, event.objectId, category); + if(!this._roomEngine.isAreaSelectionMode() || (category === RoomObjectCategory.UNIT)) + { + this.setSelectedObject(roomId, event.objectId, category); + } + else + { + this.deselectObject(roomId); + + GetEventDispatcher().dispatchEvent(new RoomEngineObjectEvent(RoomEngineObjectEvent.DESELECTED, roomId, -1, RoomObjectCategory.MINIMUM)); + } didMove = false; @@ -507,7 +548,7 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb else if(event.object && (event.object.id !== -1)) { - if(this._whereYouClickIsWhereYouGo) + if(this.whereYouClickIsWhereYouGo()) { newEvent = this.handleMouseOverObject(category, roomId, event); } @@ -758,6 +799,9 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb case RoomObjectWidgetRequestEvent.BACKGROUND_COLOR: GetEventDispatcher().dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_BACKGROUND_COLOR, roomId, objectId, objectCategory)); return; + case RoomObjectWidgetRequestEvent.AREA_HIDE: + GetEventDispatcher().dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_AREA_HIDE, roomId, objectId, objectCategory)); + return; case RoomObjectWidgetRequestEvent.MYSTERYBOX_OPEN_DIALOG: GetEventDispatcher().dispatchEvent(new RoomEngineTriggerWidgetEvent(RoomEngineTriggerWidgetEvent.REQUEST_MYSTERYBOX_OPEN_DIALOG, roomId, objectId, objectCategory)); return; @@ -1017,13 +1061,15 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb } } - private onRoomObjectTileMouseEvent(roomId: number, event: RoomObjectTileMouseEvent): void + private handleClickOnTile(roomId: number, event: RoomObjectTileMouseEvent): void { + if(!this._roomEngine || this._roomEngine.isDecorating) return; + const session = GetRoomSessionManager().getSession(roomId); if(!session || session.isSpectator) return; - this.sendWalkUpdate(event.tileXAsInt, event.tileYAsInt); + if(!this._roomEngine.moveBlocked) this.sendWalkUpdate(event.tileXAsInt, event.tileYAsInt); } private handleObjectMove(event: RoomObjectMouseEvent, roomId: number): void @@ -1480,14 +1526,12 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb private handleMoveTargetFurni(k: number, _arg_2: RoomObjectMouseEvent): boolean { - if((_arg_2.objectType === RoomObjectUserType.USER) || (_arg_2.objectType === RoomObjectUserType.PET) || (_arg_2.objectType === RoomObjectUserType.BOT) || (_arg_2.objectType === RoomObjectUserType.RENTABLE_BOT) || (_arg_2.objectType === RoomObjectUserType.MONSTER_PLANT)) return; + const roomObject = this._roomEngine.getRoomObject(k, _arg_2.objectId, RoomObjectCategory.FLOOR); + const point = this.getActiveSurfaceLocation(roomObject, _arg_2); - const _local_3 = this._roomEngine.getRoomObject(k, _arg_2.objectId, RoomObjectCategory.FLOOR); - const _local_4 = this.getActiveSurfaceLocation(_local_3, _arg_2); - - if(_local_4) + if(point && !this._roomEngine.moveBlocked) { - this.sendWalkUpdate(_local_4.x, _local_4.y); + this.sendWalkUpdate(point.x, point.y); return true; } @@ -1548,7 +1592,7 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb private handleMouseOverTile(k: RoomObjectTileMouseEvent, roomId: number): ObjectTileCursorUpdateMessage { - if(this._whereYouClickIsWhereYouGo) + if(this.whereYouClickIsWhereYouGo()) { return new ObjectTileCursorUpdateMessage(new Vector3d(k.tileXAsInt, k.tileYAsInt, k.tileZAsInt), 0, true, k.eventId); } @@ -1955,17 +1999,17 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb private placeObjectOnUser(roomId: number, objectId: number, category: number): void { - const _local_4 = this.getSelectedRoomObjectData(roomId); + const objectData = this.getSelectedRoomObjectData(roomId); - if(!_local_4) return; + if(!objectData) return; - const _local_5 = (this._roomEngine.getRoomObject(roomId, objectId, category) as IRoomObjectController); + const roomObjectController = this._roomEngine.getRoomObject(roomId, objectId, category); - if(!_local_5) return; + if(!roomObjectController) return; if(!this._roomEngine || !GetEventDispatcher()) return; - GetEventDispatcher().dispatchEvent(new RoomEngineObjectPlacedOnUserEvent(RoomEngineObjectEvent.PLACED_ON_USER, roomId, objectId, category, _local_4.id, _local_4.category)); + GetEventDispatcher().dispatchEvent(new RoomEngineObjectPlacedOnUserEvent(RoomEngineObjectEvent.PLACED_ON_USER, roomId, objectId, category, objectData.id, objectData.category)); } public setSelectedObject(roomId: number, objectId: number, category: number): void @@ -2187,4 +2231,9 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb { return this._selectedAvatarId; } + + public whereYouClickIsWhereYouGo(): boolean + { + return this._roomEngine.whereYouClickIsWhereYouGo(); + } } diff --git a/packages/room/src/RoomObjectLogicFactory.ts b/packages/room/src/RoomObjectLogicFactory.ts index 2678a57..d1fa032 100644 --- a/packages/room/src/RoomObjectLogicFactory.ts +++ b/packages/room/src/RoomObjectLogicFactory.ts @@ -2,7 +2,7 @@ import { IEventDispatcher, IRoomObjectEventHandler, IRoomObjectLogicFactory, Roo import { GetEventDispatcher, RoomObjectEvent } from '@nitrots/events'; import { NitroLogger } from '@nitrots/utils'; import { RoomObjectLogicBase } from '../../room'; -import { AvatarLogic, FurnitureAchievementResolutionLogic, FurnitureBadgeDisplayLogic, FurnitureChangeStateWhenStepOnLogic, FurnitureClothingChangeLogic, FurnitureCounterClockLogic, FurnitureCrackableLogic, FurnitureCraftingGizmoLogic, FurnitureCreditLogic, FurnitureCuckooClockLogic, FurnitureCustomStackHeightLogic, FurnitureDiceLogic, FurnitureEcotronBoxLogic, FurnitureEditableInternalLinkLogic, FurnitureEditableRoomLinkLogic, FurnitureEffectBoxLogic, FurnitureExternalImageLogic, FurnitureFireworksLogic, FurnitureFloorHoleLogic, FurnitureGroupForumTerminalLogic, FurnitureGuildCustomizedLogic, FurnitureHabboWheelLogic, FurnitureHighScoreLogic, FurnitureHockeyScoreLogic, FurnitureHweenLovelockLogic, FurnitureIceStormLogic, FurnitureInternalLinkLogic, FurnitureJukeboxLogic, FurnitureLogic, FurnitureLoveLockLogic, FurnitureMannequinLogic, FurnitureMonsterplantSeedLogic, FurnitureMultiHeightLogic, FurnitureMultiStateLogic, FurnitureMysteryBoxLogic, FurnitureMysteryTrophyLogic, FurnitureOneWayDoorLogic, FurniturePetCustomizationLogic, FurniturePlaceholderLogic, FurniturePlanetSystemLogic, FurniturePresentLogic, FurniturePurchaseableClothingLogic, FurniturePushableLogic, FurnitureRandomStateLogic, FurnitureRandomTeleportLogic, FurnitureRentableSpaceLogic, FurnitureRoomBackgroundColorLogic, FurnitureRoomBackgroundLogic, FurnitureRoomBillboardLogic, FurnitureRoomDimmerLogic, FurnitureScoreLogic, FurnitureSongDiskLogic, FurnitureSoundBlockLogic, FurnitureSoundMachineLogic, FurnitureStickieLogic, FurnitureTrophyLogic, FurnitureVoteCounterLogic, FurnitureVoteMajorityLogic, FurnitureWelcomeGiftLogic, FurnitureWindowLogic, FurnitureYoutubeLogic, PetLogic, RoomLogic, SelectionArrowLogic, TileCursorLogic } from './object'; +import { AvatarLogic, FurnitureAchievementResolutionLogic, FurnitureAreaHideLogic, FurnitureBadgeDisplayLogic, FurnitureChangeStateWhenStepOnLogic, FurnitureClothingChangeLogic, FurnitureCounterClockLogic, FurnitureCrackableLogic, FurnitureCraftingGizmoLogic, FurnitureCreditLogic, FurnitureCuckooClockLogic, FurnitureCustomStackHeightLogic, FurnitureDiceLogic, FurnitureEcotronBoxLogic, FurnitureEditableInternalLinkLogic, FurnitureEditableRoomLinkLogic, FurnitureEffectBoxLogic, FurnitureExternalImageLogic, FurnitureFireworksLogic, FurnitureFloorHoleLogic, FurnitureGroupForumTerminalLogic, FurnitureGuildCustomizedLogic, FurnitureHabboWheelLogic, FurnitureHighScoreLogic, FurnitureHockeyScoreLogic, FurnitureHweenLovelockLogic, FurnitureIceStormLogic, FurnitureInternalLinkLogic, FurnitureJukeboxLogic, FurnitureLogic, FurnitureLoveLockLogic, FurnitureMannequinLogic, FurnitureMonsterplantSeedLogic, FurnitureMultiHeightLogic, FurnitureMultiStateLogic, FurnitureMysteryBoxLogic, FurnitureMysteryTrophyLogic, FurnitureOneWayDoorLogic, FurniturePetCustomizationLogic, FurniturePlaceholderLogic, FurniturePlanetSystemLogic, FurniturePresentLogic, FurniturePurchaseableClothingLogic, FurniturePushableLogic, FurnitureRandomStateLogic, FurnitureRandomTeleportLogic, FurnitureRentableSpaceLogic, FurnitureRoomBackgroundColorLogic, FurnitureRoomBackgroundLogic, FurnitureRoomBillboardLogic, FurnitureRoomDimmerLogic, FurnitureScoreLogic, FurnitureSongDiskLogic, FurnitureSoundBlockLogic, FurnitureSoundMachineLogic, FurnitureStickieLogic, FurnitureTrophyLogic, FurnitureVoteCounterLogic, FurnitureVoteMajorityLogic, FurnitureWelcomeGiftLogic, FurnitureWindowLogic, FurnitureYoutubeLogic, PetLogic, RoomLogic, SelectionArrowLogic, TileCursorLogic } from './object'; export class RoomObjectLogicFactory implements IRoomObjectLogicFactory { @@ -293,6 +293,9 @@ export class RoomObjectLogicFactory implements IRoomObjectLogicFactory case RoomObjectLogicType.FURNITURE_HABBOWHEEL: logic = FurnitureHabboWheelLogic; break; + case RoomObjectLogicType.FURNITURE_AREA_HIDE: + logic = FurnitureAreaHideLogic; + break; default: logic = FurnitureLogic; break; diff --git a/packages/room/src/RoomPreviewer.ts b/packages/room/src/RoomPreviewer.ts index c7c02da..3f49af8 100644 --- a/packages/room/src/RoomPreviewer.ts +++ b/packages/room/src/RoomPreviewer.ts @@ -36,7 +36,7 @@ export class RoomPreviewer private _automaticStateChange: boolean; private _previousAutomaticStateChangeTime: number; private _addViewOffset: Point; - private _backgroundColor: number = 305148561; + private _backgroundColor: number = 0x000000; private _backgroundSprite: Sprite = null; private _disableUpdate: boolean = false; @@ -431,7 +431,7 @@ export class RoomPreviewer { if(this.isRoomEngineReady) { - const displayObject = (this._roomEngine.getRoomInstanceDisplay(this._previewRoomId, RoomPreviewer.PREVIEW_CANVAS_ID, width, height, this._currentPreviewScale) as Container); + const displayObject = this._roomEngine.getRoomInstanceDisplay(this._previewRoomId, RoomPreviewer.PREVIEW_CANVAS_ID, width, height, this._currentPreviewScale); if(displayObject && (this._backgroundColor !== null)) { @@ -446,7 +446,7 @@ export class RoomPreviewer backgroundSprite.width = width; backgroundSprite.height = height; - //backgroundSprite.tint = this._backgroundColor; + backgroundSprite.tint = this._backgroundColor; } this._roomEngine.setRoomInstanceRenderingCanvasMask(this._previewRoomId, RoomPreviewer.PREVIEW_CANVAS_ID, true); diff --git a/packages/room/src/messages/ObjectRoomFloorHoleUpdateMessage.ts b/packages/room/src/messages/ObjectRoomFloorHoleUpdateMessage.ts index 4231678..15c5c80 100644 --- a/packages/room/src/messages/ObjectRoomFloorHoleUpdateMessage.ts +++ b/packages/room/src/messages/ObjectRoomFloorHoleUpdateMessage.ts @@ -11,8 +11,9 @@ export class ObjectRoomFloorHoleUpdateMessage extends RoomObjectUpdateMessage private _y: number; private _width: number; private _height: number; + private _invert: boolean; - constructor(type: string, id: number, x: number = 0, y: number = 0, width: number = 0, height: number = 0) + constructor(type: string, id: number, x: number = 0, y: number = 0, width: number = 0, height: number = 0, invert: boolean = false) { super(null, null); @@ -22,6 +23,7 @@ export class ObjectRoomFloorHoleUpdateMessage extends RoomObjectUpdateMessage this._y = y; this._width = width; this._height = height; + this._invert = invert; } public get type(): string @@ -53,4 +55,9 @@ export class ObjectRoomFloorHoleUpdateMessage extends RoomObjectUpdateMessage { return this._height; } + + public get invert(): boolean + { + return this._invert; + } } diff --git a/packages/room/src/object/RoomMapData.ts b/packages/room/src/object/RoomMapData.ts index 2013364..8a55d87 100644 --- a/packages/room/src/object/RoomMapData.ts +++ b/packages/room/src/object/RoomMapData.ts @@ -7,7 +7,7 @@ export class RoomMapData implements IRoomMapData private _wallHeight: number; private _fixedWallsHeight: number; private _tileMap: { height: number }[][]; - private _holeMap: { id: number, x: number, y: number, width: number, height: number }[]; + private _holeMap: { id: number, x: number, y: number, width: number, height: number, invert: boolean }[]; private _doors: { x: number, y: number, z: number, dir: number }[]; private _dimensions: { minX: number, maxX: number, minY: number, maxY: number }; @@ -73,7 +73,7 @@ export class RoomMapData implements IRoomMapData return this._tileMap; } - public get holeMap(): { id: number, x: number, y: number, width: number, height: number }[] + public get holeMap(): { id: number, x: number, y: number, width: number, height: number, invert: boolean }[] { return this._holeMap; } diff --git a/packages/room/src/object/RoomObjectModel.ts b/packages/room/src/object/RoomObjectModel.ts index bc7a2ff..7a862f8 100644 --- a/packages/room/src/object/RoomObjectModel.ts +++ b/packages/room/src/object/RoomObjectModel.ts @@ -26,7 +26,7 @@ export class RoomObjectModel implements IRoomObjectModel if(this._map.get(key) === value) return; } - this._map.set(key, (value as T)); + this._map.set(key, value); this._updateCounter++; } diff --git a/packages/room/src/object/RoomPlaneParser.ts b/packages/room/src/object/RoomPlaneParser.ts index da5602e..bf15079 100644 --- a/packages/room/src/object/RoomPlaneParser.ts +++ b/packages/room/src/object/RoomPlaneParser.ts @@ -8,40 +8,177 @@ import { RoomWallData } from './RoomWallData'; export class RoomPlaneParser { + public static TILE_BLOCKED: number = -110; + public static TILE_HOLE: number = -100; private static FLOOR_THICKNESS: number = 0.25; private static WALL_THICKNESS: number = 0.25; private static MAX_WALL_ADDITIONAL_HEIGHT: number = 20; - - public static TILE_BLOCKED: number = -110; - public static TILE_HOLE: number = -100; - private _tileMatrix: number[][]; private _tileMatrixOriginal: number[][]; private _width: number = 0; private _height: number = 0; - private _minX: number = 0; - private _maxX: number = 0; - private _minY: number = 0; - private _maxY: number = 0; private _planes: RoomPlaneData[]; - private _wallHeight: number; - private _wallThicknessMultiplier: number; - private _floorThicknessMultiplier: number; + private _highlights: RoomPlaneData[]; private _fixedWallHeight: number = -1; - private _floorHeight: number = 0; private _floorHoles: Map; + private _floorHolesInverted: Map; private _floorHoleMatrix: boolean[][]; + private floorTiles: number[][]; constructor() { this._tileMatrix = []; this._tileMatrixOriginal = []; + this._highlights = []; this._planes = []; this._floorHoleMatrix = []; this._wallHeight = 3.6; this._wallThicknessMultiplier = 1; this._floorThicknessMultiplier = 1; this._floorHoles = new Map(); + this._floorHolesInverted = new Map(); + } + + private _minX: number = 0; + + public get minX(): number + { + return this._minX; + } + + private _maxX: number = 0; + + public get maxX(): number + { + return this._maxX; + } + + private _minY: number = 0; + + public get minY(): number + { + return this._minY; + } + + private _maxY: number = 0; + + public get maxY(): number + { + return this._maxY; + } + + private _wallHeight: number; + + public get wallHeight(): number + { + if(this._fixedWallHeight != -1) + { + return this._fixedWallHeight + 3.6; + } + return this._wallHeight; + } + + public set wallHeight(k: number) + { + if(k < 0) + { + k = 0; + } + this._wallHeight = k; + } + + private _wallThicknessMultiplier: number; + + public get wallThicknessMultiplier(): number + { + return this._wallThicknessMultiplier; + } + + public set wallThicknessMultiplier(k: number) + { + if(k < 0) + { + k = 0; + } + this._wallThicknessMultiplier = k; + } + + private _floorThicknessMultiplier: number; + + public get floorThicknessMultiplier(): number + { + return this._floorThicknessMultiplier; + } + + public set floorThicknessMultiplier(k: number) + { + if(k < 0) + { + k = 0; + } + this._floorThicknessMultiplier = k; + } + + private _floorHeight: number = 0; + + public get floorHeight(): number + { + if(this._fixedWallHeight != -1) + { + return this._fixedWallHeight; + } + return this._floorHeight; + } + + private _restrictsDragging: boolean; + + public get restrictsDragging(): boolean + { + return this._restrictsDragging; + } + + public set restrictsDragging(flag: boolean) + { + this._restrictsDragging = flag; + } + + private _restrictsScaling: boolean = false; + + public get restrictsScaling(): boolean + { + return this._restrictsScaling; + } + + public set restrictsScaling(flag: boolean) + { + this._restrictsScaling = flag; + } + + private _restrictedScale: number = 1; + + public get restrictedScale(): number + { + return this._restrictedScale; + } + + public set restrictedScale(scale: number) + { + this._restrictedScale = scale; + } + + public get tileMapWidth(): number + { + return this._width; + } + + public get tileMapHeight(): number + { + return this._height; + } + + public get planeCount(): number + { + return this._planes.length; } private static getFloorHeight(matricies: number[][]): number @@ -287,97 +424,6 @@ export class RoomPlaneParser k.unshift(_local_2); } - - public get minX(): number - { - return this._minX; - } - - public get maxX(): number - { - return this._maxX; - } - - public get minY(): number - { - return this._minY; - } - - public get maxY(): number - { - return this._maxY; - } - - public get tileMapWidth(): number - { - return this._width; - } - - public get tileMapHeight(): number - { - return this._height; - } - - public get planeCount(): number - { - return this._planes.length; - } - - public get floorHeight(): number - { - if(this._fixedWallHeight != -1) - { - return this._fixedWallHeight; - } - return this._floorHeight; - } - - public get wallHeight(): number - { - if(this._fixedWallHeight != -1) - { - return this._fixedWallHeight + 3.6; - } - return this._wallHeight; - } - - public set wallHeight(k: number) - { - if(k < 0) - { - k = 0; - } - this._wallHeight = k; - } - - public get wallThicknessMultiplier(): number - { - return this._wallThicknessMultiplier; - } - - public set wallThicknessMultiplier(k: number) - { - if(k < 0) - { - k = 0; - } - this._wallThicknessMultiplier = k; - } - - public get floorThicknessMultiplier(): number - { - return this._floorThicknessMultiplier; - } - - public set floorThicknessMultiplier(k: number) - { - if(k < 0) - { - k = 0; - } - this._floorThicknessMultiplier = k; - } - public dispose(): void { this._planes = null; @@ -389,6 +435,11 @@ export class RoomPlaneParser this._floorHoles.clear(); this._floorHoles = null; } + if(this._floorHolesInverted != null) + { + this._floorHolesInverted.clear(); + this._floorHolesInverted = null; + } } public reset(): void @@ -555,30 +606,6 @@ export class RoomPlaneParser return Math.abs(_local_3[k]); } - private getTileHeightOriginal(k: number, _arg_2: number): number - { - if(((((k < 0) || (k >= this._width)) || (_arg_2 < 0)) || (_arg_2 >= this._height))) - { - return RoomPlaneParser.TILE_BLOCKED; - } - if(this._floorHoleMatrix[_arg_2][k]) - { - return RoomPlaneParser.TILE_HOLE; - } - const _local_3 = this._tileMatrixOriginal[_arg_2]; - return _local_3[k]; - } - - private getTileHeightInternal(k: number, _arg_2: number): number - { - if(((((k < 0) || (k >= this._width)) || (_arg_2 < 0)) || (_arg_2 >= this._height))) - { - return RoomPlaneParser.TILE_BLOCKED; - } - const _local_3 = this._tileMatrix[_arg_2]; - return _local_3[k]; - } - public initializeFromTileData(k: number = -1): boolean { let _local_2: number; @@ -617,6 +644,365 @@ export class RoomPlaneParser return this.initialize(_local_4); } + public initializeHighlightArea(param1: number, param2: number, param3: number, param4: number): void + { + this.clearHighlightArea(); + this.extractPlanes(this.floorTiles, param1 * 4, param2 * 4, param3 * 4, param4 * 4, true); + } + + public clearHighlightArea(): number + { + const highLightsLength: number = this._highlights.length; + this._planes = this._planes.slice(0, this._planes.length - this._highlights.length); + this._highlights.length = 0; + return highLightsLength; + } + + public initializeFromMapData(data: RoomMapData): boolean + { + if(!data) return false; + + this.reset(); + + this.resetFloorHoles(); + + const width = data.width; + const height = data.height; + const wallHeight = data.wallHeight; + const fixedWallsHeight = data.fixedWallsHeight; + + this.initializeTileMap(width, height); + + if(data.tileMap) + { + let y = 0; + + while(y < data.tileMap.length) + { + const row = data.tileMap[y]; + + if(row) + { + let x = 0; + + while(x < row.length) + { + const column = row[x]; + + if(column) this.setTileHeight(x, y, column.height); + + x++; + } + } + + y++; + } + } + + if(data.holeMap && data.holeMap.length) + { + let index = 0; + + while(index < data.holeMap.length) + { + const hole = data.holeMap[index]; + + if(!hole) continue; + + this.addFloorHole(hole.id, hole.x, hole.y, hole.width, hole.height, hole.invert); + + index++; + } + + this.initializeHoleMap(); + } + + this.wallHeight = wallHeight; + + this.initializeFromTileData(fixedWallsHeight); + + return true; + } + + public isPlaneTemporaryHighlighter(param1: number): boolean + { + if(param1 < 0 || param1 >= this.planeCount) + { + return false; + } + + const _loc2_: RoomPlaneData = this._planes[param1]; + + if(_loc2_ == null) + { + return false; + } + + return this._highlights.indexOf(_loc2_) != -1; + } + + public getMapData(): RoomMapData + { + const data = new RoomMapData(); + + data.width = this._width; + data.height = this._height; + data.wallHeight = this._wallHeight; + data.fixedWallsHeight = this._fixedWallHeight; + data.dimensions.minX = this.minX; + data.dimensions.maxX = this.maxX; + data.dimensions.minY = this.minY; + data.dimensions.maxY = this.maxY; + + let y = 0; + + while(y < this._height) + { + const tileRow: { height: number }[] = []; + const tileMatrix = this._tileMatrixOriginal[y]; + + let x = 0; + + while(x < this._width) + { + const tileHeight = tileMatrix[x]; + + tileRow.push({ height: tileHeight }); + + x++; + } + + data.tileMap.push(tileRow); + + y++; + } + + for(const [ holeId, holeData ] of this._floorHoles.entries()) + { + if(!holeData) continue; + + data.holeMap.push({ + id: holeId, + x: holeData.x, + y: holeData.y, + width: holeData.width, + height: holeData.height, + invert: false, + }); + } + + for(const [ holeId, holeData ] of this._floorHolesInverted.entries()) + { + if(!holeData) continue; + + data.holeMap.push({ + id: holeId, + x: holeData.x, + y: holeData.y, + width: holeData.width, + height: holeData.height, + invert: true, + }); + } + + return data; + } + + public getPlaneLocation(k: number): IVector3D + { + if(((k < 0) || (k >= this.planeCount))) return null; + + const planeData = this._planes[k]; + + if(!planeData) return null; + + return planeData.loc; + } + + public getPlaneNormal(k: number): IVector3D + { + if(((k < 0) || (k >= this.planeCount))) return null; + + const planeData = this._planes[k]; + + if(!planeData) return null; + + return planeData.normal; + } + + public getPlaneLeftSide(k: number): IVector3D + { + if(((k < 0) || (k >= this.planeCount))) return null; + + const planeData = this._planes[k]; + + if(!planeData) return null; + + return planeData.leftSide; + } + + public getPlaneRightSide(k: number): IVector3D + { + if(((k < 0) || (k >= this.planeCount))) return null; + + const planeData = this._planes[k]; + + if(!planeData) return null; + + return planeData.rightSide; + } + + public getPlaneNormalDirection(k: number): IVector3D + { + if(((k < 0) || (k >= this.planeCount))) return null; + + const planeData = this._planes[k]; + + if(!planeData) return null; + + return planeData.normalDirection; + } + + public getPlaneSecondaryNormals(k: number): IVector3D[] + { + let _local_3: IVector3D[]; + let _local_4: number; + if(((k < 0) || (k >= this.planeCount))) + { + return null; + } + const _local_2: RoomPlaneData = (this._planes[k]); + if(_local_2 != null) + { + _local_3 = []; + _local_4 = 0; + while(_local_4 < _local_2.secondaryNormalCount) + { + _local_3.push(_local_2.getSecondaryNormal(_local_4)); + _local_4++; + } + return _local_3; + } + return null; + } + + public getPlaneType(k: number): number + { + if(((k < 0) || (k >= this.planeCount))) return RoomPlaneData.PLANE_UNDEFINED; + + const planeData = this._planes[k]; + + if(!planeData) return RoomPlaneData.PLANE_UNDEFINED; + + return planeData.type; + } + + public getPlaneMaskCount(k: number): number + { + if(((k < 0) || (k >= this.planeCount))) return 0; + + const planeData = this._planes[k]; + + if(!planeData) return 0; + + return planeData.maskCount; + } + + public getPlaneMaskLeftSideLoc(k: number, _arg_2: number): number + { + if(((k < 0) || (k >= this.planeCount))) return -1; + + const planeData = this._planes[k]; + + if(!planeData) return -1; + + return planeData.getMaskLeftSideLoc(_arg_2); + } + + public getPlaneMaskRightSideLoc(k: number, _arg_2: number): number + { + if(((k < 0) || (k >= this.planeCount))) return -1; + + const planeData = this._planes[k]; + + if(!planeData) return -1; + + return planeData.getMaskRightSideLoc(_arg_2); + } + + public getPlaneMaskLeftSideLength(k: number, _arg_2: number): number + { + if(((k < 0) || (k >= this.planeCount))) return -1; + + const planeData = this._planes[k]; + + if(!planeData) return -1; + + return planeData.getMaskLeftSideLength(_arg_2); + } + + public getPlaneMaskRightSideLength(k: number, _arg_2: number): number + { + if(((k < 0) || (k >= this.planeCount))) return -1; + + const planeData = this._planes[k]; + + if(!planeData) return -1; + + return planeData.getMaskRightSideLength(_arg_2); + } + + public addFloorHole(k: number, _arg_2: number, _arg_3: number, _arg_4: number, _arg_5: number, _arg_6: boolean = false): void + { + this.removeFloorHole(k); + + if(_arg_6) + { + this._floorHolesInverted.set(k, new RoomFloorHole(_arg_2, _arg_3, _arg_4, _arg_5)); + } + else + { + this._floorHoles.set(k, new RoomFloorHole(_arg_2, _arg_3, _arg_4, _arg_5)); + } + + } + + public removeFloorHole(k: number): void + { + this._floorHoles.delete(k); + this._floorHolesInverted.delete(k); + } + + public resetFloorHoles(): void + { + this._floorHoles.clear(); + this._floorHolesInverted.clear(); + } + + private getTileHeightOriginal(k: number, _arg_2: number): number + { + if(((((k < 0) || (k >= this._width)) || (_arg_2 < 0)) || (_arg_2 >= this._height))) + { + return RoomPlaneParser.TILE_BLOCKED; + } + if(this._floorHoleMatrix[_arg_2][k]) + { + return RoomPlaneParser.TILE_HOLE; + } + const _local_3 = this._tileMatrixOriginal[_arg_2]; + return _local_3[k]; + } + + private getTileHeightInternal(k: number, _arg_2: number): number + { + if(((((k < 0) || (k >= this._width)) || (_arg_2 < 0)) || (_arg_2 >= this._height))) + { + return RoomPlaneParser.TILE_BLOCKED; + } + const _local_3 = this._tileMatrix[_arg_2]; + return _local_3[k]; + } + private initialize(k: Point): boolean { let _local_2 = 0; @@ -634,8 +1020,8 @@ export class RoomPlaneParser RoomPlaneParser.padHeightMap(_local_3); RoomPlaneParser.addTileTypes(_local_3); RoomPlaneParser.unpadHeightMap(_local_3); - const _local_5 = RoomPlaneParser.expandFloorTiles(_local_3); - this.extractPlanes(_local_5); + this.floorTiles = RoomPlaneParser.expandFloorTiles(_local_3); + this.extractPlanes(this.floorTiles); if(k != null) { this.setTileHeight(k.x, k.y, _local_2); @@ -653,7 +1039,7 @@ export class RoomPlaneParser let _local_11: Point; let _local_12: number; const _local_3: RoomWallData = new RoomWallData(); - const _local_4: Function[] = [this.extractTopWall.bind(this), this.extractRightWall.bind(this), this.extractBottomWall.bind(this), this.extractLeftWall.bind(this)]; + const _local_4: Function[] = [ this.extractTopWall.bind(this), this.extractRightWall.bind(this), this.extractBottomWall.bind(this), this.extractLeftWall.bind(this) ]; let _local_5 = 0; let _local_6: Point = new Point(k.x, k.y); let _local_7 = 0; @@ -1165,34 +1551,34 @@ export class RoomPlaneParser private addWall(k: IVector3D, _arg_2: IVector3D, _arg_3: IVector3D, _arg_4: IVector3D, _arg_5: boolean, _arg_6: boolean, _arg_7: boolean): void { - this.addPlane(RoomPlaneData.PLANE_WALL, k, _arg_2, _arg_3, [_arg_4]); - this.addPlane(RoomPlaneData.PLANE_LANDSCAPE, k, _arg_2, _arg_3, [_arg_4]); + this.addPlane(RoomPlaneData.PLANE_WALL, k, _arg_2, _arg_3, [ _arg_4 ]); + this.addPlane(RoomPlaneData.PLANE_LANDSCAPE, k, _arg_2, _arg_3, [ _arg_4 ]); const _local_8: number = (RoomPlaneParser.WALL_THICKNESS * this._wallThicknessMultiplier); const _local_9: number = (RoomPlaneParser.FLOOR_THICKNESS * this._floorThicknessMultiplier); const _local_10: Vector3d = Vector3d.crossProduct(_arg_2, _arg_3); const _local_11: Vector3d = Vector3d.product(_local_10, ((1 / _local_10.length) * -(_local_8))); - this.addPlane(RoomPlaneData.PLANE_WALL, Vector3d.sum(k, _arg_3), _arg_2, _local_11, [_local_10, _arg_4]); + this.addPlane(RoomPlaneData.PLANE_WALL, Vector3d.sum(k, _arg_3), _arg_2, _local_11, [ _local_10, _arg_4 ]); if(_arg_5) { - this.addPlane(RoomPlaneData.PLANE_WALL, Vector3d.sum(Vector3d.sum(k, _arg_2), _arg_3), Vector3d.product(_arg_3, (-(_arg_3.length + _local_9) / _arg_3.length)), _local_11, [_local_10, _arg_4]); + this.addPlane(RoomPlaneData.PLANE_WALL, Vector3d.sum(Vector3d.sum(k, _arg_2), _arg_3), Vector3d.product(_arg_3, (-(_arg_3.length + _local_9) / _arg_3.length)), _local_11, [ _local_10, _arg_4 ]); } if(_arg_6) { - this.addPlane(RoomPlaneData.PLANE_WALL, Vector3d.sum(k, Vector3d.product(_arg_3, (-(_local_9) / _arg_3.length))), Vector3d.product(_arg_3, ((_arg_3.length + _local_9) / _arg_3.length)), _local_11, [_local_10, _arg_4]); + this.addPlane(RoomPlaneData.PLANE_WALL, Vector3d.sum(k, Vector3d.product(_arg_3, (-(_local_9) / _arg_3.length))), Vector3d.product(_arg_3, ((_arg_3.length + _local_9) / _arg_3.length)), _local_11, [ _local_10, _arg_4 ]); if(_arg_7) { const _local_12 = Vector3d.product(_arg_2, (_local_8 / _arg_2.length)); - this.addPlane(RoomPlaneData.PLANE_WALL, Vector3d.sum(Vector3d.sum(k, _arg_3), Vector3d.product(_local_12, -1)), _local_12, _local_11, [_local_10, _arg_2, _arg_4]); + this.addPlane(RoomPlaneData.PLANE_WALL, Vector3d.sum(Vector3d.sum(k, _arg_3), Vector3d.product(_local_12, -1)), _local_12, _local_11, [ _local_10, _arg_2, _arg_4 ]); } } } - private addFloor(k: IVector3D, _arg_2: IVector3D, _arg_3: IVector3D, _arg_4: boolean, _arg_5: boolean, _arg_6: boolean, _arg_7: boolean): void + private addFloor(k: IVector3D, _arg_2: IVector3D, _arg_3: IVector3D, _arg_4: boolean, _arg_5: boolean, _arg_6: boolean, _arg_7: boolean, param8: boolean = false): void { let _local_9: number; let _local_10: Vector3d; let _local_11: Vector3d; - const _local_8: RoomPlaneData = this.addPlane(RoomPlaneData.PLANE_FLOOR, k, _arg_2, _arg_3); + const _local_8: RoomPlaneData = this.addPlane(RoomPlaneData.PLANE_FLOOR, k, _arg_2, _arg_3, null, param8); if(_local_8 != null) { _local_9 = (RoomPlaneParser.FLOOR_THICKNESS * this._floorThicknessMultiplier); @@ -1200,90 +1586,24 @@ export class RoomPlaneParser _local_11 = Vector3d.dif(k, _local_10); if(_arg_6) { - this.addPlane(RoomPlaneData.PLANE_FLOOR, _local_11, _arg_2, _local_10); + this.addPlane(RoomPlaneData.PLANE_FLOOR, _local_11, _arg_2, _local_10, null, param8); } if(_arg_7) { - this.addPlane(RoomPlaneData.PLANE_FLOOR, Vector3d.sum(_local_11, Vector3d.sum(_arg_2, _arg_3)), Vector3d.product(_arg_2, -1), _local_10); + this.addPlane(RoomPlaneData.PLANE_FLOOR, Vector3d.sum(_local_11, Vector3d.sum(_arg_2, _arg_3)), Vector3d.product(_arg_2, -1), _local_10, null, param8); } if(_arg_4) { - this.addPlane(RoomPlaneData.PLANE_FLOOR, Vector3d.sum(_local_11, _arg_3), Vector3d.product(_arg_3, -1), _local_10); + this.addPlane(RoomPlaneData.PLANE_FLOOR, Vector3d.sum(_local_11, _arg_3), Vector3d.product(_arg_3, -1), _local_10, null, param8); } if(_arg_5) { - this.addPlane(RoomPlaneData.PLANE_FLOOR, Vector3d.sum(_local_11, _arg_2), _arg_3, _local_10); + this.addPlane(RoomPlaneData.PLANE_FLOOR, Vector3d.sum(_local_11, _arg_2), _arg_3, _local_10, null, param8); } } } - public initializeFromMapData(data: RoomMapData): boolean - { - if(!data) return false; - - this.reset(); - - this.resetFloorHoles(); - - const width = data.width; - const height = data.height; - const wallHeight = data.wallHeight; - const fixedWallsHeight = data.fixedWallsHeight; - - this.initializeTileMap(width, height); - - if(data.tileMap) - { - let y = 0; - - while(y < data.tileMap.length) - { - const row = data.tileMap[y]; - - if(row) - { - let x = 0; - - while(x < row.length) - { - const column = row[x]; - - if(column) this.setTileHeight(x, y, column.height); - - x++; - } - } - - y++; - } - } - - if(data.holeMap && data.holeMap.length) - { - let index = 0; - - while(index < data.holeMap.length) - { - const hole = data.holeMap[index]; - - if(!hole) continue; - - this.addFloorHole(hole.id, hole.x, hole.y, hole.width, hole.height); - - index++; - } - - this.initializeHoleMap(); - } - - this.wallHeight = wallHeight; - - this.initializeFromTileData(fixedWallsHeight); - - return true; - } - - private addPlane(k: number, _arg_2: IVector3D, _arg_3: IVector3D, _arg_4: IVector3D, _arg_5: IVector3D[] = null): RoomPlaneData + private addPlane(k: number, _arg_2: IVector3D, _arg_3: IVector3D, _arg_4: IVector3D, _arg_5: IVector3D[] = null, param6: boolean = false): RoomPlaneData { if(((_arg_3.length == 0) || (_arg_4.length == 0))) { @@ -1291,222 +1611,12 @@ export class RoomPlaneParser } const _local_6: RoomPlaneData = new RoomPlaneData(k, _arg_2, _arg_3, _arg_4, _arg_5); this._planes.push(_local_6); + + if(param6) this._highlights.push(_local_6); + return _local_6; } - public getMapData(): RoomMapData - { - const data = new RoomMapData(); - - data.width = this._width; - data.height = this._height; - data.wallHeight = this._wallHeight; - data.fixedWallsHeight = this._fixedWallHeight; - data.dimensions.minX = this.minX; - data.dimensions.maxX = this.maxX; - data.dimensions.minY = this.minY; - data.dimensions.maxY = this.maxY; - - let y = 0; - - while(y < this._height) - { - const tileRow: { height: number }[] = []; - const tileMatrix = this._tileMatrixOriginal[y]; - - let x = 0; - - while(x < this._width) - { - const tileHeight = tileMatrix[x]; - - tileRow.push({ height: tileHeight }); - - x++; - } - - data.tileMap.push(tileRow); - - y++; - } - - for(const [holeId, holeData] of this._floorHoles.entries()) - { - if(!holeData) continue; - - data.holeMap.push({ - id: holeId, - x: holeData.x, - y: holeData.y, - width: holeData.width, - height: holeData.height - }); - } - - return data; - } - - public getPlaneLocation(k: number): IVector3D - { - if(((k < 0) || (k >= this.planeCount))) return null; - - const planeData = this._planes[k]; - - if(!planeData) return null; - - return planeData.loc; - } - - public getPlaneNormal(k: number): IVector3D - { - if(((k < 0) || (k >= this.planeCount))) return null; - - const planeData = this._planes[k]; - - if(!planeData) return null; - - return planeData.normal; - } - - public getPlaneLeftSide(k: number): IVector3D - { - if(((k < 0) || (k >= this.planeCount))) return null; - - const planeData = this._planes[k]; - - if(!planeData) return null; - - return planeData.leftSide; - } - - public getPlaneRightSide(k: number): IVector3D - { - if(((k < 0) || (k >= this.planeCount))) return null; - - const planeData = this._planes[k]; - - if(!planeData) return null; - - return planeData.rightSide; - } - - public getPlaneNormalDirection(k: number): IVector3D - { - if(((k < 0) || (k >= this.planeCount))) return null; - - const planeData = this._planes[k]; - - if(!planeData) return null; - - return planeData.normalDirection; - } - - public getPlaneSecondaryNormals(k: number): IVector3D[] - { - let _local_3: IVector3D[]; - let _local_4: number; - if(((k < 0) || (k >= this.planeCount))) - { - return null; - } - const _local_2: RoomPlaneData = (this._planes[k] as RoomPlaneData); - if(_local_2 != null) - { - _local_3 = []; - _local_4 = 0; - while(_local_4 < _local_2.secondaryNormalCount) - { - _local_3.push(_local_2.getSecondaryNormal(_local_4)); - _local_4++; - } - return _local_3; - } - return null; - } - - public getPlaneType(k: number): number - { - if(((k < 0) || (k >= this.planeCount))) return RoomPlaneData.PLANE_UNDEFINED; - - const planeData = this._planes[k]; - - if(!planeData) return RoomPlaneData.PLANE_UNDEFINED; - - return planeData.type; - } - - public getPlaneMaskCount(k: number): number - { - if(((k < 0) || (k >= this.planeCount))) return 0; - - const planeData = this._planes[k]; - - if(!planeData) return 0; - - return planeData.maskCount; - } - - public getPlaneMaskLeftSideLoc(k: number, _arg_2: number): number - { - if(((k < 0) || (k >= this.planeCount))) return -1; - - const planeData = this._planes[k]; - - if(!planeData) return -1; - - return planeData.getMaskLeftSideLoc(_arg_2); - } - - public getPlaneMaskRightSideLoc(k: number, _arg_2: number): number - { - if(((k < 0) || (k >= this.planeCount))) return -1; - - const planeData = this._planes[k]; - - if(!planeData) return -1; - - return planeData.getMaskRightSideLoc(_arg_2); - } - - public getPlaneMaskLeftSideLength(k: number, _arg_2: number): number - { - if(((k < 0) || (k >= this.planeCount))) return -1; - - const planeData = this._planes[k]; - - if(!planeData) return -1; - - return planeData.getMaskLeftSideLength(_arg_2); - } - - public getPlaneMaskRightSideLength(k: number, _arg_2: number): number - { - if(((k < 0) || (k >= this.planeCount))) return -1; - - const planeData = this._planes[k]; - - if(!planeData) return -1; - - return planeData.getMaskRightSideLength(_arg_2); - } - - public addFloorHole(k: number, _arg_2: number, _arg_3: number, _arg_4: number, _arg_5: number): void - { - this.removeFloorHole(k); - - this._floorHoles.set(k, new RoomFloorHole(_arg_2, _arg_3, _arg_4, _arg_5)); - } - - public removeFloorHole(k: number): void - { - this._floorHoles.delete(k); - } - - public resetFloorHoles(): void - { - this._floorHoles.clear(); - } - private initializeHoleMap(): void { let k: number; @@ -1524,138 +1634,158 @@ export class RoomPlaneParser k = 0; while(k < this._width) { - _local_3[k] = false; + _local_3[k] = this._floorHolesInverted.size > 0; k++; } _local_2++; } + for(const _local_4 of this._floorHolesInverted.values()) + { + this.initializeHole(_local_4, true); + } for(const _local_4 of this._floorHoles.values()) { - _local_5 = _local_4; - if(_local_5 != null) - { - _local_6 = _local_5.x; - _local_7 = ((_local_5.x + _local_5.width) - 1); - _local_8 = _local_5.y; - _local_9 = ((_local_5.y + _local_5.height) - 1); - _local_6 = ((_local_6 < 0) ? 0 : _local_6); - _local_7 = ((_local_7 >= this._width) ? (this._width - 1) : _local_7); - _local_8 = ((_local_8 < 0) ? 0 : _local_8); - _local_9 = ((_local_9 >= this._height) ? (this._height - 1) : _local_9); - _local_2 = _local_8; - while(_local_2 <= _local_9) - { - _local_3 = this._floorHoleMatrix[_local_2]; - k = _local_6; - while(k <= _local_7) - { - _local_3[k] = true; - k++; - } - _local_2++; - } - } + this.initializeHole(_local_4); } } - private extractPlanes(k: number[][]): void + private initializeHole(param1: RoomFloorHole, param2: boolean = false): void { + let k: number; + let _local_2: number; + let _local_3: boolean[]; + let _local_6: number; let _local_7: number; let _local_8: number; let _local_9: number; - let _local_10: number; - let _local_11: boolean; - let _local_12: boolean; - let _local_13: boolean; - let _local_14: boolean; - let _local_15: number; - let _local_16: number; - let _local_17: boolean; - let _local_18: number; - let _local_19: number; - let _local_20: number; - let _local_21: number; - - const _local_2 = k.length; - - const _local_3: number = k[0].length; - const _local_4: boolean[][] = []; - let _local_5 = 0; - while(_local_5 < _local_2) + const _local_5: RoomFloorHole = param1; + if(_local_5 != null) { - _local_4[_local_5] = []; - _local_5++; - } - let _local_6 = 0; - while(_local_6 < _local_2) - { - _local_7 = 0; - while(_local_7 < _local_3) + _local_6 = _local_5.x; + _local_7 = ((_local_5.x + _local_5.width) - 1); + _local_8 = _local_5.y; + _local_9 = ((_local_5.y + _local_5.height) - 1); + _local_6 = ((_local_6 < 0) ? 0 : _local_6); + _local_7 = ((_local_7 >= this._width) ? (this._width - 1) : _local_7); + _local_8 = ((_local_8 < 0) ? 0 : _local_8); + _local_9 = ((_local_9 >= this._height) ? (this._height - 1) : _local_9); + _local_2 = _local_8; + while(_local_2 <= _local_9) { - _local_8 = k[_local_6][_local_7]; - if(((_local_8 < 0) || (_local_4[_local_6][_local_7]))) + _local_3 = this._floorHoleMatrix[_local_2]; + k = _local_6; + while(k <= _local_7) { - // + _local_3[k] = !param2; + k++; } - else + _local_2++; + } + } + } + + private extractPlanes(param1: number[][], param2: number = 0, param3: number = 0, param4: number = -1, param5: number = -1, param6: boolean = false): void + { + let _loc13_ = 0; + let _loc24_ = 0; + let _loc25_ = 0; + let _loc9_ = 0; + let _loc19_ = 0; + let _loc16_ = 0; + let _loc10_ = false; + let _loc8_ = false; + let _loc20_ = false; + let _loc12_ = false; + let _loc21_ = 0; + let _loc23_ = 0; + let _loc11_ = false; + let _loc15_ = NaN; + let _loc17_ = NaN; + let _loc18_ = NaN; + let _loc28_ = NaN; + const _loc14_: number = param1.length; + const _loc26_: number = param1[0].length; + const _loc27_: number = param5 == -1 ? _loc14_ : Math.min(_loc14_, param3 + param5); + const _loc22_: number = param4 == -1 ? _loc26_ : Math.min(_loc26_, param2 + param4); + const _loc7_: boolean[][] = []; + _loc13_ = 0; + while(_loc13_ < _loc27_) + { + _loc7_[_loc13_] = []; + _loc13_++; + } + _loc24_ = param3; + while(_loc24_ < _loc27_) + { + _loc25_ = param2; + while(_loc25_ < _loc22_) + { + if(!((_loc9_ = param1[_loc24_][_loc25_]) < 0 || _loc7_[_loc24_][_loc25_])) { - _local_11 = ((_local_7 == 0) || (!(k[_local_6][(_local_7 - 1)] == _local_8))); - _local_12 = ((_local_6 == 0) || (!(k[(_local_6 - 1)][_local_7] == _local_8))); - _local_9 = (_local_7 + 1); - while(_local_9 < _local_3) + _loc10_ = _loc25_ == 0 || param1[_loc24_][_loc25_ - 1] != _loc9_; + _loc8_ = _loc24_ == 0 || param1[_loc24_ - 1][_loc25_] != _loc9_; + _loc19_ = _loc25_ + 1; + while(_loc19_ < _loc22_) { - if((((!(k[_local_6][_local_9] == _local_8)) || (_local_4[_local_6][_local_9])) || ((_local_6 > 0) && ((k[(_local_6 - 1)][_local_9] == _local_8) == _local_12)))) + if(param1[_loc24_][_loc19_] != _loc9_ || _loc7_[_loc24_][_loc19_] || _loc24_ > 0 && param1[_loc24_ - 1][_loc19_] == _loc9_ == _loc8_) { break; } - _local_9++; + _loc19_++; } - _local_13 = ((_local_9 == _local_3) || (!(k[_local_6][_local_9] == _local_8))); - _local_17 = false; - _local_10 = (_local_6 + 1); - while(((_local_10 < _local_2) && (!(_local_17)))) + _loc20_ = _loc19_ == _loc26_ || param1[_loc24_][_loc19_] != _loc9_; + _loc11_ = false; + _loc16_ = _loc24_ + 1; + while(_loc16_ <= _loc27_ && !_loc11_) { - _local_14 = (!(k[_local_10][_local_7] == _local_8)); - _local_17 = (((_local_14) || ((_local_7 > 0) && ((k[_local_10][(_local_7 - 1)] == _local_8) == _local_11))) || ((_local_9 < _local_3) && ((k[_local_10][_local_9] == _local_8) == _local_13))); - _local_15 = _local_7; - while(_local_15 < _local_9) + _loc12_ = _loc16_ == _loc14_ || param1[_loc16_][_loc25_] != _loc9_; + _loc11_ = _loc16_ == _loc27_ || _loc12_ || _loc25_ > 0 && param1[_loc16_][_loc25_ - 1] == _loc9_ == _loc10_ || _loc19_ < _loc26_ && param1[_loc16_][_loc19_] == _loc9_ == _loc20_; + if(_loc16_ == _loc14_) { - if((k[_local_10][_local_15] == _local_8) == _local_14) + break; + } + _loc21_ = _loc25_; + while(_loc21_ < _loc19_) + { + if(param1[_loc16_][_loc21_] == _loc9_ == _loc12_) { - _local_17 = true; - _local_9 = _local_15; + _loc11_ = true; + _loc19_ = _loc21_; break; } - _local_15++; + _loc21_++; } - if(_local_17) + if(_loc11_) { break; } - _local_10++; + _loc16_++; } - _local_14 = ((_local_14) || (_local_10 == _local_2)); - _local_13 = ((_local_9 == _local_3) || (!(k[_local_6][_local_9] == _local_8))); - _local_16 = _local_6; - while(_local_16 < _local_10) + if(!_loc12_) { - _local_15 = _local_7; - while(_local_15 < _local_9) - { - _local_4[_local_16][_local_15] = true; - _local_15++; - } - _local_16++; + _loc12_ = _loc16_ == _loc14_; } - _local_18 = ((_local_7 / 4) - 0.5); - _local_19 = ((_local_6 / 4) - 0.5); - _local_20 = ((_local_9 - _local_7) / 4); - _local_21 = ((_local_10 - _local_6) / 4); - this.addFloor(new Vector3d((_local_18 + _local_20), (_local_19 + _local_21), (_local_8 / 4)), new Vector3d(-(_local_20), 0, 0), new Vector3d(0, -(_local_21), 0), _local_13, _local_11, _local_14, _local_12); + _loc20_ = _loc19_ == _loc26_ || param1[_loc24_][_loc19_] != _loc9_; + _loc23_ = _loc24_; + while(_loc23_ < _loc16_) + { + _loc21_ = _loc25_; + while(_loc21_ < _loc19_) + { + _loc7_[_loc23_][_loc21_] = true; + _loc21_++; + } + _loc23_++; + } + _loc15_ = _loc25_ / 4 - 0.5; + _loc17_ = _loc24_ / 4 - 0.5; + _loc18_ = (_loc19_ - _loc25_) / 4; + _loc28_ = (_loc16_ - _loc24_) / 4; + this.addFloor(new Vector3d(_loc15_ + _loc18_, _loc17_ + _loc28_, _loc9_ / 4), new Vector3d(-_loc18_, 0, 0), new Vector3d(0, -_loc28_, 0), _loc20_, _loc10_, _loc12_, _loc8_, param6); } - _local_7++; + _loc25_++; } - _local_6++; + _loc24_++; } } } diff --git a/packages/room/src/object/logic/RoomLogic.ts b/packages/room/src/object/logic/RoomLogic.ts index 22c6835..97561d5 100644 --- a/packages/room/src/object/logic/RoomLogic.ts +++ b/packages/room/src/object/logic/RoomLogic.ts @@ -413,12 +413,14 @@ export class RoomLogic extends RoomObjectLogicBase let eventType: string = null; if((event.type === MouseEventType.MOUSE_MOVE) || (event.type === MouseEventType.ROLL_OVER)) eventType = RoomObjectMouseEvent.MOUSE_MOVE; - else if((event.type === MouseEventType.MOUSE_CLICK)) eventType = RoomObjectMouseEvent.CLICK; + else if(event.type === MouseEventType.MOUSE_CLICK) eventType = RoomObjectMouseEvent.CLICK; + else if(event.type === MouseEventType.MOUSE_DOWN) eventType = RoomObjectMouseEvent.MOUSE_DOWN; switch(event.type) { case MouseEventType.MOUSE_MOVE: case MouseEventType.ROLL_OVER: + case MouseEventType.MOUSE_DOWN: case MouseEventType.MOUSE_CLICK: { let newEvent: RoomObjectEvent = null; diff --git a/packages/room/src/object/logic/furniture/FurnitureAreaHideLogic.ts b/packages/room/src/object/logic/furniture/FurnitureAreaHideLogic.ts new file mode 100644 index 0000000..5affad4 --- /dev/null +++ b/packages/room/src/object/logic/furniture/FurnitureAreaHideLogic.ts @@ -0,0 +1,96 @@ +import { IRoomGeometry, MouseEventType, NumberDataType, RoomObjectVariable } from '@nitrots/api'; +import { RoomObjectEvent, RoomObjectStateChangedEvent, RoomObjectWidgetRequestEvent, RoomSpriteMouseEvent } from '@nitrots/events'; +import { ObjectDataUpdateMessage, RoomObjectUpdateMessage } from '../../../messages'; +import { FurnitureMultiStateLogic } from './FurnitureMultiStateLogic'; + +export class FurnitureAreaHideLogic extends FurnitureMultiStateLogic +{ + public getEventTypes(): string[] + { + const types = [RoomObjectWidgetRequestEvent.AREA_HIDE]; + + return this.mergeTypes(super.getEventTypes(), types); + } + + public processUpdateMessage(message: RoomObjectUpdateMessage): void + { + super.processUpdateMessage(message); + + if(!this.object) return; + + if(message instanceof ObjectDataUpdateMessage) + { + message.data.writeRoomObjectModel(this.object.model); + + if(this.object.model.getValue(RoomObjectVariable.FURNITURE_REAL_ROOM_OBJECT) === 1) + { + this.setupObject(); + } + } + } + + private setupObject(): void + { + if(!this.object || !this.object.model) return; + + const numberData = new NumberDataType(); + + numberData.initializeFromRoomObjectModel(this.object.model); + + const state = numberData.getValue(0); + const rootX = numberData.getValue(1); + const rootY = numberData.getValue(2); + const width = numberData.getValue(3); + const length = numberData.getValue(4); + const invisibility = (numberData.getValue(5) === 1); + const wallItems = (numberData.getValue(6) === 1); + const invert = (numberData.getValue(7) === 1); + + this.object.model.setValue(RoomObjectVariable.FURNITURE_AREA_HIDE_ROOT_X, rootX); + this.object.model.setValue(RoomObjectVariable.FURNITURE_AREA_HIDE_ROOT_Y, rootY); + this.object.model.setValue(RoomObjectVariable.FURNITURE_AREA_HIDE_WIDTH, width); + this.object.model.setValue(RoomObjectVariable.FURNITURE_AREA_HIDE_LENGTH, length); + this.object.model.setValue(RoomObjectVariable.FURNITURE_AREA_HIDE_INVISIBILITY, ((invisibility) ? 1 : 0)); + this.object.model.setValue(RoomObjectVariable.FURNITURE_AREA_HIDE_WALL_ITEMS, ((wallItems) ? 1 : 0)); + this.object.model.setValue(RoomObjectVariable.FURNITURE_AREA_HIDE_INVERT, ((invert) ? 1 : 0)); + this.object.setState(state, 0); + } + + public useObject(): void + { + if(!this.object || !this.eventDispatcher) return; + + this.eventDispatcher.dispatchEvent(new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.AREA_HIDE, this.object)); + } + + public mouseEvent(event: RoomSpriteMouseEvent, geometry: IRoomGeometry): void + { + if(!event || !geometry || !this.object) return; + + let objectEvent: RoomObjectEvent = null; + + switch(event.type) + { + case MouseEventType.DOUBLE_CLICK: { + if((event.spriteTag === 'turn_on') || (event.spriteTag === 'turn_off')) + { + objectEvent = new RoomObjectStateChangedEvent(RoomObjectStateChangedEvent.STATE_CHANGE, this.object); + } + else + { + objectEvent = new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.AREA_HIDE, this.object); + } + + if(this.eventDispatcher && objectEvent) + { + this.eventDispatcher.dispatchEvent(objectEvent); + + return; + } + break; + } + } + + super.mouseEvent(event, geometry); + } +} diff --git a/packages/room/src/object/logic/furniture/index.ts b/packages/room/src/object/logic/furniture/index.ts index d548e94..02e57b6 100644 --- a/packages/room/src/object/logic/furniture/index.ts +++ b/packages/room/src/object/logic/furniture/index.ts @@ -1,4 +1,5 @@ export * from './FurnitureAchievementResolutionLogic'; +export * from './FurnitureAreaHideLogic'; export * from './FurnitureBadgeDisplayLogic'; export * from './FurnitureChangeStateWhenStepOnLogic'; export * from './FurnitureClothingChangeLogic'; diff --git a/packages/room/src/object/visualization/RoomObjectSprite.ts b/packages/room/src/object/visualization/RoomObjectSprite.ts index 51b8796..efeb808 100644 --- a/packages/room/src/object/visualization/RoomObjectSprite.ts +++ b/packages/room/src/object/visualization/RoomObjectSprite.ts @@ -26,6 +26,7 @@ export class RoomObjectSprite implements IRoomObjectSprite private _varyingDepth: boolean = false; private _libraryAssetName: string = ''; private _clickHandling: boolean = false; + private _skipMouseHandling: boolean = false; private _visible: boolean = true; private _tag: string = ''; private _posture: string = null; @@ -352,4 +353,14 @@ export class RoomObjectSprite implements IRoomObjectSprite { return this._updateCounter; } + + public get skipMouseHandling(): boolean + { + return this._skipMouseHandling; + } + + public set skipMouseHandling(flag: boolean) + { + this._skipMouseHandling = flag; + } } diff --git a/packages/room/src/object/visualization/data/PetSizeData.ts b/packages/room/src/object/visualization/data/PetSizeData.ts index eb2b16f..4c4106f 100644 --- a/packages/room/src/object/visualization/data/PetSizeData.ts +++ b/packages/room/src/object/visualization/data/PetSizeData.ts @@ -8,7 +8,7 @@ export class PetSizeData extends AnimationSizeData private _posturesToAnimations: Map = new Map(); private _gesturesToAnimations: Map = new Map(); private _defaultPosture: string = null; - + public processPostures(postures: { defaultPosture?: string, postures: IAssetPosture[] }): boolean { if(!postures) return false; diff --git a/packages/room/src/object/visualization/data/SizeData.ts b/packages/room/src/object/visualization/data/SizeData.ts index bfd1953..dc5e809 100644 --- a/packages/room/src/object/visualization/data/SizeData.ts +++ b/packages/room/src/object/visualization/data/SizeData.ts @@ -235,7 +235,7 @@ export class SizeData public getLayerColor(layerId: number, colorId: number): number { - const existing = this._colors[colorId] as ColorData; + const existing = this._colors[colorId]; if(!existing) return ColorData.DEFAULT_COLOR; diff --git a/packages/room/src/object/visualization/furniture/FurnitureFireworksVisualization.ts b/packages/room/src/object/visualization/furniture/FurnitureFireworksVisualization.ts index 1521060..b2d3f5f 100644 --- a/packages/room/src/object/visualization/furniture/FurnitureFireworksVisualization.ts +++ b/packages/room/src/object/visualization/furniture/FurnitureFireworksVisualization.ts @@ -40,6 +40,8 @@ export class FurnitureFireworksVisualization extends FurnitureAnimatedVisualizat { const particleSystem = this._particleSystems.getValue(scale); + if(!particleSystem) return false; + particleSystem.copyStateFrom(this._currentParticleSystem); if(this._currentParticleSystem) this._currentParticleSystem.reset(); diff --git a/packages/room/src/object/visualization/furniture/FurnitureVisualization.ts b/packages/room/src/object/visualization/furniture/FurnitureVisualization.ts index 12c022e..310ccd3 100644 --- a/packages/room/src/object/visualization/furniture/FurnitureVisualization.ts +++ b/packages/room/src/object/visualization/furniture/FurnitureVisualization.ts @@ -1,5 +1,5 @@ import { AlphaTolerance, IGraphicAsset, IObjectVisualizationData, IRoomGeometry, IRoomObjectSprite, RoomObjectVariable, RoomObjectVisualizationType } from '@nitrots/api'; -import { BLEND_MODES, Texture } from 'pixi.js'; +import { BLEND_MODES, Filter, Texture } from 'pixi.js'; import { RoomObjectSpriteVisualization } from '../RoomObjectSpriteVisualization'; import { ColorData, LayerData } from '../data'; import { FurnitureVisualizationData } from './FurnitureVisualizationData'; @@ -38,8 +38,11 @@ export class FurnitureVisualization extends RoomObjectSpriteVisualization protected _spriteXOffsets: number[]; protected _spriteYOffsets: number[]; protected _spriteZOffsets: number[]; + protected _filters: Filter[] = []; private _animationNumber: number; + private _lookThrough: boolean; + private _needsLookThroughUpdate: boolean; constructor() { @@ -75,6 +78,7 @@ export class FurnitureVisualization extends RoomObjectSpriteVisualization this._spriteZOffsets = []; this._animationNumber = 0; + this._lookThrough = false; } public initialize(data: IObjectVisualizationData): boolean @@ -104,6 +108,7 @@ export class FurnitureVisualization extends RoomObjectSpriteVisualization this._spriteXOffsets = null; this._spriteYOffsets = null; this._spriteZOffsets = null; + this._filters = []; } protected reset(): void @@ -160,6 +165,12 @@ export class FurnitureVisualization extends RoomObjectSpriteVisualization if(this.updateModel(scale)) updateSprites = true; + if(this._needsLookThroughUpdate) + { + updateSprites = true; + this._needsLookThroughUpdate = false; + } + let number = 0; if(skipUpdate) @@ -313,11 +324,15 @@ export class FurnitureVisualization extends RoomObjectSpriteVisualization relativeDepth = 1; } + if(this._lookThrough) sprite.alpha *= 0.2; + sprite.relativeDepth = (relativeDepth * FurnitureVisualization.DEPTH_MULTIPLIER); sprite.name = assetName; sprite.libraryAssetName = this.getLibraryAssetNameForSprite(assetData, sprite); sprite.posture = this.getPostureForAsset(scale, assetData.source); sprite.clickHandling = this._clickHandling; + + if(sprite.blendMode !== 'add') sprite.filters = this._filters; } else { @@ -582,6 +597,14 @@ export class FurnitureVisualization extends RoomObjectSpriteVisualization return asset?.texture ?? null; } + public set lookThrough(flag: boolean) + { + if(this._lookThrough == flag) return; + + this._lookThrough = flag; + this._needsLookThroughUpdate = true; + } + protected get direction(): number { return this._direction; diff --git a/packages/room/src/object/visualization/furniture/FurnitureVisualizationData.ts b/packages/room/src/object/visualization/furniture/FurnitureVisualizationData.ts index e64004d..f58d6bd 100644 --- a/packages/room/src/object/visualization/furniture/FurnitureVisualizationData.ts +++ b/packages/room/src/object/visualization/furniture/FurnitureVisualizationData.ts @@ -70,7 +70,7 @@ export class FurnitureVisualizationData implements IObjectVisualizationData { if(!visualizations) return false; - for(const visualizationId in visualizations) + for(const visualizationId of Object.keys(visualizations)) { const visualization = visualizations[visualizationId]; diff --git a/packages/room/src/object/visualization/room/RoomPlane.ts b/packages/room/src/object/visualization/room/RoomPlane.ts index 3feaa5e..7ffaa26 100644 --- a/packages/room/src/object/visualization/room/RoomPlane.ts +++ b/packages/room/src/object/visualization/room/RoomPlane.ts @@ -50,6 +50,8 @@ export class RoomPlane implements IRoomPlane private _hasTexture: boolean = true; private _canBeVisible: boolean = true; private _geometryUpdateId: number = -1; + private _extraDepth: number = 0; + private _isHighlighter: boolean = false; private _useMask: boolean; private _bitmapMasks: RoomPlaneBitmapMask[] = []; @@ -569,7 +571,12 @@ export class RoomPlane implements IRoomPlane public get relativeDepth(): number { - return this._relativeDepth; + return (this._relativeDepth + this._extraDepth); + } + + public set extraDepth(value: number) + { + this._extraDepth = value; } public get color(): number @@ -633,4 +640,14 @@ export class RoomPlane implements IRoomPlane { this._hasTexture = flag; } + + public get isHighlighter(): boolean + { + return this._isHighlighter; + } + + public set isHighlighter(flag: boolean) + { + this._isHighlighter = flag; + } } diff --git a/packages/room/src/object/visualization/room/RoomVisualization.ts b/packages/room/src/object/visualization/room/RoomVisualization.ts index 883fe5d..101ce23 100644 --- a/packages/room/src/object/visualization/room/RoomVisualization.ts +++ b/packages/room/src/object/visualization/room/RoomVisualization.ts @@ -1,6 +1,6 @@ +import { AlphaTolerance, IObjectVisualizationData, IPlaneVisualization, IRoomGeometry, IRoomObjectModel, IRoomObjectSprite, IRoomPlane, RoomObjectSpriteType, RoomObjectVariable } from '@nitrots/api'; import { ToInt32, Vector3d } from '@nitrots/utils'; -import { Rectangle, Texture } from 'pixi.js'; -import { AlphaTolerance, IObjectVisualizationData, IPlaneVisualization, IRoomGeometry, IRoomObjectModel, IRoomObjectSprite, IRoomPlane, RoomObjectSpriteType, RoomObjectVariable } from '../../../../../api'; +import { Filter, Rectangle, Texture } from 'pixi.js'; import { RoomMapData } from '../../RoomMapData'; import { RoomMapMaskData } from '../../RoomMapMaskData'; import { RoomPlaneBitmapMaskData } from '../../RoomPlaneBitmapMaskData'; @@ -13,16 +13,16 @@ import { RoomVisualizationData } from './RoomVisualizationData'; export class RoomVisualization extends RoomObjectSpriteVisualization implements IPlaneVisualization { - public static FLOOR_COLOR: number = 0xFFFFFF; - public static FLOOR_COLOR_LEFT: number = 0xDDDDDD; - public static FLOOR_COLOR_RIGHT: number = 0xBBBBBB; + private static FLOOR_COLOR: number = 0xFFFFFF; + private static FLOOR_COLOR_LEFT: number = 0xDDDDDD; + private static FLOOR_COLOR_RIGHT: number = 0xBBBBBB; private static WALL_COLOR_TOP: number = 0xFFFFFF; private static WALL_COLOR_SIDE: number = 0xCCCCCC; private static WALL_COLOR_BOTTOM: number = 0x999999; private static WALL_COLOR_BORDER: number = 0x999999; - public static LANDSCAPE_COLOR_TOP: number = 0xFFFFFF; - public static LANDSCAPE_COLOR_SIDE: number = 0xCCCCCC; - public static LANDSCAPE_COLOR_BOTTOM: number = 0x999999; + private static LANDSCAPE_COLOR_TOP: number = 0xFFFFFF; + private static LANDSCAPE_COLOR_SIDE: number = 0xCCCCCC; + private static LANDSCAPE_COLOR_BOTTOM: number = 0x999999; private static ROOM_DEPTH_OFFSET: number = 1000; protected _data: RoomVisualizationData = null; @@ -54,6 +54,13 @@ export class RoomVisualization extends RoomObjectSpriteVisualization implements private _maskData: RoomMapMaskData = null; private _isPlaneSet: boolean = false; + private _highlightAreaX: number = 0; + private _highlightAreaY: number = 0; + private _highlightAreaWidth: number = 0; + private _highlightAreaHeight: number = 0; + private _highlightFilter: Filter = null; + private _highlightPlaneOffsets: number[] = []; + constructor() { super(); @@ -86,6 +93,7 @@ export class RoomVisualization extends RoomObjectSpriteVisualization implements this._planes = null; this._visiblePlanes = null; this._visiblePlaneSpriteNumbers = null; + this._highlightPlaneOffsets = []; if(this._roomPlaneParser) { @@ -321,6 +329,7 @@ export class RoomVisualization extends RoomObjectSpriteVisualization implements } this._planes = []; + this._highlightPlaneOffsets = []; } this._isPlaneSet = false; @@ -336,19 +345,29 @@ export class RoomVisualization extends RoomObjectSpriteVisualization implements if(!isNaN(this._floorThickness)) this._roomPlaneParser.floorThicknessMultiplier = this._floorThickness; if(!isNaN(this._wallThickness)) this._roomPlaneParser.wallThicknessMultiplier = this._wallThickness; + this._roomPlaneParser.clearHighlightArea(); + const mapData = this.object.model.getValue(RoomObjectVariable.ROOM_MAP_DATA); if(!this._roomPlaneParser.initializeFromMapData(mapData)) return; + this._roomPlaneParser.initializeHighlightArea(this._highlightAreaX, this._highlightAreaY, this._highlightAreaWidth, this._highlightAreaHeight); + + this.createPlanesAndSprites(); + } + + private createPlanesAndSprites(offset: number = 0): void + { const maxX = this.getLandscapeWidth(); const maxY = this.getLandscapeHeight(); let landscapeOffsetX = 0; let randomSeed = this.object.model.getValue(RoomObjectVariable.ROOM_RANDOM_SEED); - let index = 0; + let index = offset; while(index < this._roomPlaneParser.planeCount) { + this._highlightPlaneOffsets[index] = -1; const location = this._roomPlaneParser.getPlaneLocation(index); const leftSide = this._roomPlaneParser.getPlaneLeftSide(index); const rightSide = this._roomPlaneParser.getPlaneRightSide(index); @@ -414,6 +433,7 @@ export class RoomVisualization extends RoomObjectSpriteVisualization implements i++; } + this._highlightPlaneOffsets[index] = this._planes.length; this._planes.push(plane); } } @@ -429,6 +449,53 @@ export class RoomVisualization extends RoomObjectSpriteVisualization implements this.defineSprites(); } + public initializeHighlightArea(highlightAreaX: number, highlightAreaY: number, highlightAreaWidth: number, highlightAreaHeight: number, highlightFilter: Filter): void + { + this.clearHighlightArea(); + + this._highlightAreaX = highlightAreaX; + this._highlightAreaY = highlightAreaY; + this._highlightAreaWidth = highlightAreaWidth; + this._highlightAreaHeight = highlightAreaHeight; + this._highlightFilter = highlightFilter; + + this._roomPlaneParser.initializeHighlightArea(highlightAreaX, highlightAreaY, highlightAreaWidth, highlightAreaHeight); + + this.createPlanesAndSprites(this._planes.length); + this.reset(); + } + + public clearHighlightArea(): void + { + this._highlightAreaX = 0; + this._highlightAreaY = 0; + this._highlightAreaWidth = 0; + this._highlightAreaHeight = 0; + + const totalHighlightedPlanes = this._roomPlaneParser.clearHighlightArea(); + let _local_4 = 0; + + let _local_1 = this._roomPlaneParser.planeCount; + + while(_local_1 < (this._roomPlaneParser.planeCount + totalHighlightedPlanes)) + { + const _local_2 = this._highlightPlaneOffsets[_local_1]; + + if(_local_2 !== -1) + { + _local_4 = (_local_4 + 1); + this._highlightPlaneOffsets[_local_1] = -1; + }; + + _local_1 = (_local_1 + 1); + }; + + this._planes = this._planes.slice(0, (this._planes.length - _local_4)); + this.createSprites(this._planes.length); + + this.reset(); + } + protected defineSprites(): void { this.createSprites(this._planes.length); @@ -467,6 +534,22 @@ export class RoomVisualization extends RoomObjectSpriteVisualization implements } sprite.spriteType = RoomObjectSpriteType.ROOM_PLANE; + + if(this._roomPlaneParser.isPlaneTemporaryHighlighter(planeIndex)) + { + if(this._highlightFilter) sprite.filters = [ this._highlightFilter ]; + + sprite.skipMouseHandling = true; + plane.extraDepth = -100; + plane.isHighlighter = true; + } + else + { + sprite.filters = []; + sprite.skipMouseHandling = false; + plane.extraDepth = 0; + plane.isHighlighter = false; + } } planeIndex++; diff --git a/packages/room/src/renderer/RoomRenderer.ts b/packages/room/src/renderer/RoomRenderer.ts index dd6f0c4..8eedaf0 100644 --- a/packages/room/src/renderer/RoomRenderer.ts +++ b/packages/room/src/renderer/RoomRenderer.ts @@ -102,7 +102,7 @@ export class RoomRenderer implements IRoomRenderer, IRoomSpriteCanvasContainer public createCanvas(id: number, width: number, height: number, scale: number): IRoomRenderingCanvas { - const existing = this._canvases.get(id) as IRoomRenderingCanvas; + const existing = this._canvases.get(id); if(existing) { diff --git a/packages/room/src/renderer/RoomSpriteCanvas.ts b/packages/room/src/renderer/RoomSpriteCanvas.ts index 00dc6f5..b29195d 100644 --- a/packages/room/src/renderer/RoomSpriteCanvas.ts +++ b/packages/room/src/renderer/RoomSpriteCanvas.ts @@ -84,7 +84,7 @@ export class RoomSpriteCanvas implements IRoomRenderingCanvas { const display = new Container(); - display.isRenderGroup = true; + display.isRenderGroup = false; display.cullableChildren = false; this._master.addChild(display); @@ -475,11 +475,11 @@ export class RoomSpriteCanvas implements IRoomRenderingCanvas { if((index < 0) || (index >= this._spriteCount)) return null; - const sprite = (this._display.getChildAt(index) as ExtendedSprite); + const sprite = (this._display.getChildAt(index)); if(!sprite) return null; - return sprite; + return (sprite as ExtendedSprite); } protected getExtendedSpriteIdentifier(sprite: ExtendedSprite): string @@ -528,6 +528,7 @@ export class RoomSpriteCanvas implements IRoomRenderingCanvas extendedSprite.label = sprite.name; extendedSprite.varyingDepth = objectSprite.varyingDepth; extendedSprite.clickHandling = objectSprite.clickHandling; + extendedSprite.skipMouseHandling = objectSprite.skipMouseHandling; extendedSprite.filters = objectSprite.filters; const alpha = (objectSprite.alpha / 255); @@ -604,6 +605,7 @@ export class RoomSpriteCanvas implements IRoomRenderingCanvas extendedSprite.label = sprite.name; extendedSprite.varyingDepth = sprite.varyingDepth; extendedSprite.clickHandling = sprite.clickHandling; + extendedSprite.skipMouseHandling = sprite.skipMouseHandling; extendedSprite.blendMode = sprite.blendMode; extendedSprite.filters = sprite.filters; @@ -757,61 +759,64 @@ export class RoomSpriteCanvas implements IRoomRenderingCanvas if(extendedSprite && extendedSprite.containsPoint(new Point((x - extendedSprite.x), (y - extendedSprite.y)))) { - if(extendedSprite.clickHandling && ((type === MouseEventType.MOUSE_CLICK) || (type === MouseEventType.DOUBLE_CLICK))) + if(!extendedSprite.skipMouseHandling) { - // - } - else - { - const identifier = this.getExtendedSpriteIdentifier(extendedSprite); - - if(checkedSprites.indexOf(identifier) === -1) + if(extendedSprite.clickHandling && ((type === MouseEventType.MOUSE_CLICK) || (type === MouseEventType.DOUBLE_CLICK))) { - const tag = extendedSprite.tag; + // + } + else + { + const identifier = this.getExtendedSpriteIdentifier(extendedSprite); - let mouseData = this._mouseActiveObjects.get(identifier); - - if(mouseData) + if(checkedSprites.indexOf(identifier) === -1) { - if(mouseData.spriteTag !== tag) - { - mouseEvent = this.createMouseEvent(0, 0, 0, 0, MouseEventType.ROLL_OUT, mouseData.spriteTag, altKey, ctrlKey, shiftKey, buttonDown); + const tag = extendedSprite.tag; + let mouseData = this._mouseActiveObjects.get(identifier); + + if(mouseData) + { + if(mouseData.spriteTag !== tag) + { + mouseEvent = this.createMouseEvent(0, 0, 0, 0, MouseEventType.ROLL_OUT, mouseData.spriteTag, altKey, ctrlKey, shiftKey, buttonDown); + + this.bufferMouseEvent(mouseEvent, identifier); + } + } + + if((type === MouseEventType.MOUSE_MOVE) && (!mouseData || (mouseData.spriteTag !== tag))) + { + mouseEvent = this.createMouseEvent(x, y, (x - extendedSprite.x), (y - extendedSprite.y), MouseEventType.ROLL_OVER, tag, altKey, ctrlKey, shiftKey, buttonDown); + } + else + { + mouseEvent = this.createMouseEvent(x, y, (x - extendedSprite.x), (y - extendedSprite.y), type, tag, altKey, ctrlKey, shiftKey, buttonDown); + + mouseEvent.spriteOffsetX = extendedSprite.offsetX; + mouseEvent.spriteOffsetY = extendedSprite.offsetY; + } + + if(!mouseData) + { + mouseData = new ObjectMouseData(); + + mouseData.objectId = identifier; + this._mouseActiveObjects.set(identifier, mouseData); + } + + mouseData.spriteTag = tag; + + if(((type !== MouseEventType.MOUSE_MOVE) || (x !== this._mouseOldX)) || (y !== this._mouseOldY)) + { this.bufferMouseEvent(mouseEvent, identifier); } + + checkedSprites.push(identifier); } - if((type === MouseEventType.MOUSE_MOVE) && (!mouseData || (mouseData.spriteTag !== tag))) - { - mouseEvent = this.createMouseEvent(x, y, (x - extendedSprite.x), (y - extendedSprite.y), MouseEventType.ROLL_OVER, tag, altKey, ctrlKey, shiftKey, buttonDown); - } - else - { - mouseEvent = this.createMouseEvent(x, y, (x - extendedSprite.x), (y - extendedSprite.y), type, tag, altKey, ctrlKey, shiftKey, buttonDown); - - mouseEvent.spriteOffsetX = extendedSprite.offsetX; - mouseEvent.spriteOffsetY = extendedSprite.offsetY; - } - - if(!mouseData) - { - mouseData = new ObjectMouseData(); - - mouseData.objectId = identifier; - this._mouseActiveObjects.set(identifier, mouseData); - } - - mouseData.spriteTag = tag; - - if(((type !== MouseEventType.MOUSE_MOVE) || (x !== this._mouseOldX)) || (y !== this._mouseOldY)) - { - this.bufferMouseEvent(mouseEvent, identifier); - } - - checkedSprites.push(identifier); + didHitSprite = true; } - - didHitSprite = true; } } diff --git a/packages/room/src/renderer/utils/ExtendedSprite.ts b/packages/room/src/renderer/utils/ExtendedSprite.ts index 28b6a31..f3b08be 100644 --- a/packages/room/src/renderer/utils/ExtendedSprite.ts +++ b/packages/room/src/renderer/utils/ExtendedSprite.ts @@ -1,6 +1,6 @@ import { AlphaTolerance } from '@nitrots/api'; import { GetRenderer, TextureUtils } from '@nitrots/utils'; -import { GlRenderTarget, Point, RendererType, Sprite, Texture, TextureSource, WebGPURenderer } from 'pixi.js'; +import { Point, RendererType, Sprite, Texture, TextureSource, WebGPURenderer } from 'pixi.js'; const BYTES_PER_PIXEL = 4; @@ -12,6 +12,7 @@ export class ExtendedSprite extends Sprite private _alphaTolerance: number = AlphaTolerance.MATCH_OPAQUE_PIXELS; private _varyingDepth: boolean = false; private _clickHandling: boolean = false; + private _skipMouseHandling: boolean = false; private _updateId1: number = -1; private _updateId2: number = -1; @@ -43,7 +44,7 @@ export class ExtendedSprite extends Sprite public containsPoint(point: Point): boolean { - if(!point || (this.alphaTolerance > 255) || !this.texture || (this.texture === Texture.EMPTY) || (this.blendMode !== 'normal')) return false; + if(!point || (this.alphaTolerance > 255) || !this.texture || (this.texture === Texture.EMPTY)) return false; point = new Point((point.x * this.scale.x), (point.y * this.scale.y)); @@ -92,12 +93,12 @@ export class ExtendedSprite extends Sprite pixels = TextureUtils.getPixels(new Texture(textureSource))?.pixels ?? null; } - else if(renderer.type === RendererType.WEBGL) + else if((renderer.type as RendererType) === RendererType.WEBGL) { pixels = new Uint8ClampedArray(BYTES_PER_PIXEL * width * height); const renderTarget = renderer.renderTarget.getRenderTarget(textureSource); - const glRenderTarget = renderer.renderTarget.getGpuRenderTarget(renderTarget) as GlRenderTarget; + const glRenderTarget = renderer.renderTarget.getGpuRenderTarget(renderTarget); const gl = renderer.gl; @@ -181,4 +182,14 @@ export class ExtendedSprite extends Sprite { this._clickHandling = flag; } + + public get skipMouseHandling(): boolean + { + return this._skipMouseHandling; + } + + public set skipMouseHandling(flag: boolean) + { + this._skipMouseHandling = flag; + } } diff --git a/packages/room/src/utils/RoomAreaSelectionManager.ts b/packages/room/src/utils/RoomAreaSelectionManager.ts new file mode 100644 index 0000000..e052f97 --- /dev/null +++ b/packages/room/src/utils/RoomAreaSelectionManager.ts @@ -0,0 +1,248 @@ +import { IRoomAreaSelectionManager, IRoomEngine, IRoomObject } from '@nitrots/api'; +import { GetEventDispatcher, RoomEngineObjectEvent, RoomObjectMouseEvent, RoomObjectTileMouseEvent } from '@nitrots/events'; +import { ColorMatrixFilter } from 'pixi.js'; +import { FurnitureVisualization, RoomVisualization } from '../object'; + +export class RoomAreaSelectionManager implements IRoomAreaSelectionManager +{ + public static NOT_ACTIVE: number = 0; + public static NOT_SELECTING_AREA: number = 1; + public static AWAITING_MOUSE_DOWN: number = 2; + public static SELECTING: number = 3; + public static HIGHLIGHT_DARKEN = 'highlight_darken'; + public static HIGHLIGHT_BRIGHTEN = 'highlight_brighten'; + public static HIGHLIGHT_BLUE = 'highlight_blue'; + + private static HIGHLIGHT_FILTERS: { [key: string]: ColorMatrixFilter } = {}; + + private _roomEngine: IRoomEngine = null; + private _state: number = RoomAreaSelectionManager.NOT_ACTIVE; + private _tileXInit: number = 0; + private _tileYInit: number = 0; + private _tileXEnd: number = 0; + private _tileYEnd: number = 0; + private _highlightRootX: number = 0; + private _highlightRootY: number = 0; + private _highlightWidth: number = 0; + private _highlightHeight: number = 0; + private _callback: (rootX: number, rootY: number, width: number, height: number) => void; + private _highlightType: string = RoomAreaSelectionManager.HIGHLIGHT_BRIGHTEN; + + constructor(roomEngine: IRoomEngine) + { + this._roomEngine = roomEngine; + + GetEventDispatcher().addEventListener(RoomEngineObjectEvent.ADDED, event => + { + if(this._state === RoomAreaSelectionManager.NOT_ACTIVE) return; + + if(event.roomId !== this._roomEngine.activeRoomId) return; + + if(event.category !== 10 && event.category !== 20) return; + + const roomObject = this._roomEngine.getRoomObject(event.roomId, event.objectId, event.category); + + if(roomObject.visualization instanceof FurnitureVisualization) roomObject.visualization.lookThrough = true; + }); + + const brightenFilter = new ColorMatrixFilter(); + + brightenFilter.matrix = [ + 1.5, 0, 0, 0, + 0, 1.5, 0, 0, + 0, 0, 1.5, 0, + 0, 0, 0, 1, + 0, 0.0784, 0.0784, 0]; + + const blueFilter = new ColorMatrixFilter(); + + blueFilter.matrix = [ + 1.05, 0, 0, 0, + 0, 1.3, 0, 0, + 0, 0, 1.8, 0, + 0, 0, 0, 1, + 0, 0.0314, 0.0784, 0]; + + const darkenFilter = new ColorMatrixFilter(); + + darkenFilter.matrix = [ + 0.55, 0, 0, 0, + 0, 0.55, 0, 0, + 0, 0, 0.55, 0, + 0, 0, 0, 1, + -0.0392, -0.0392, -0.0392, 0]; + + RoomAreaSelectionManager.HIGHLIGHT_FILTERS[RoomAreaSelectionManager.HIGHLIGHT_DARKEN] = darkenFilter; + RoomAreaSelectionManager.HIGHLIGHT_FILTERS[RoomAreaSelectionManager.HIGHLIGHT_BRIGHTEN] = brightenFilter; + RoomAreaSelectionManager.HIGHLIGHT_FILTERS[RoomAreaSelectionManager.HIGHLIGHT_BLUE] = blueFilter; + } + + private getAllFurniture(): IRoomObject[] + { + return this._roomEngine.getRoomObjects(this._roomEngine.activeRoomId, 20).concat(this._roomEngine.getRoomObjects(this._roomEngine.activeRoomId, 10)); + } + + public startSelecting(): void + { + if(this._state !== RoomAreaSelectionManager.NOT_SELECTING_AREA) return; + + this.clearHighlightSilent(); + this._state = RoomAreaSelectionManager.AWAITING_MOUSE_DOWN; + this._roomEngine.moveBlocked = true; + } + + public handleTileMouseEvent(event: RoomObjectTileMouseEvent): void + { + let isWaitingForMouseDown = ((this._state === RoomAreaSelectionManager.AWAITING_MOUSE_DOWN) && (event.type == RoomObjectMouseEvent.MOUSE_DOWN)); + + if(event.shiftKey && (this._state === RoomAreaSelectionManager.NOT_SELECTING_AREA) && (event.type == RoomObjectMouseEvent.MOUSE_DOWN)) + { + this.startSelecting(); + + isWaitingForMouseDown = true; + }; + + if(isWaitingForMouseDown) + { + this._state = RoomAreaSelectionManager.SELECTING; + this._tileXInit = event.tileXAsInt; + this._tileYInit = event.tileYAsInt; + this._tileXEnd = event.tileXAsInt; + this._tileYEnd = event.tileYAsInt; + this.setHighlight(this._tileXInit, this._tileYInit, 1, 1); + + return; + } + + if((this._state === RoomAreaSelectionManager.SELECTING) && (event.type === RoomObjectMouseEvent.MOUSE_MOVE)) + { + if((event.tileXAsInt !== this._tileXEnd) || (event.tileYAsInt !== this._tileYEnd)) + { + let rootX: number = 0; + let rootY: number = 0; + let width: number = 0; + let height: number = 0; + + this._tileXEnd = event.tileXAsInt; + this._tileYEnd = event.tileYAsInt; + + if(this._tileXEnd > this._tileXInit) + { + rootX = this._tileXInit; + width = ((this._tileXEnd - this._tileXInit) + 1); + } + else + { + rootX = this._tileXEnd; + width = ((this._tileXInit - this._tileXEnd) + 1); + }; + + if(this._tileYEnd > this._tileYInit) + { + rootY = this._tileYInit; + height = ((this._tileYEnd - this._tileYInit) + 1); + } + else + { + rootY = this._tileYEnd; + height = ((this._tileYInit - this._tileYEnd) + 1); + }; + + this.setHighlight(rootX, rootY, width, height); + }; + }; + } + + public finishSelecting(): boolean + { + if(this._state !== RoomAreaSelectionManager.SELECTING) return false; + + this._state = RoomAreaSelectionManager.NOT_SELECTING_AREA; + + this._roomEngine.moveBlocked = false; + + if(this._callback) this._callback(this._highlightRootX, this._highlightRootY, this._highlightWidth, this._highlightHeight); + + return true; + } + + private clearHighlightSilent():void + { + const roomObject = this._roomEngine.getRoomObject(this._roomEngine.activeRoomId, -1, 0); + + if(!roomObject) return; + + (roomObject.visualization as RoomVisualization)?.clearHighlightArea(); + } + + public clearHighlight(): void + { + if(this._state === RoomAreaSelectionManager.NOT_ACTIVE) return; + + this.clearHighlightSilent(); + + this._state = RoomAreaSelectionManager.NOT_SELECTING_AREA; + + this._roomEngine.moveBlocked = false; + + if(this._callback) this._callback(0, 0, 0, 0); + } + + public setHighlight(rootX: number, rootY: number, width: number, height: number): void + { + if(this._state === RoomAreaSelectionManager.NOT_ACTIVE) return; + + this._highlightRootX = rootX; + this._highlightRootY = rootY; + this._highlightWidth = width; + this._highlightHeight = height; + + const roomObject = this._roomEngine.getRoomObject(this._roomEngine.activeRoomId, -1, 0); + + if(!roomObject) return; + + (roomObject.visualization as RoomVisualization)?.initializeHighlightArea(rootX, rootY, width, height, RoomAreaSelectionManager.HIGHLIGHT_FILTERS[this._highlightType]); + } + + public activate(callback: (rootX: number, rootY: number, width: number, height: number) => void, highlightType: string): boolean + { + if(this._state !== RoomAreaSelectionManager.NOT_ACTIVE) return false; + + this._callback = callback; + this._highlightType = highlightType; + + for(const roomObject of this.getAllFurniture()) + { + const visualization = (roomObject.visualization as FurnitureVisualization); + + if(visualization) visualization.lookThrough = true; + }; + + this._state = RoomAreaSelectionManager.NOT_SELECTING_AREA; + + return true; + } + + public deactivate(): void + { + if(this._state === RoomAreaSelectionManager.NOT_ACTIVE) return; + + this._callback = null; + + for(const roomObject of this.getAllFurniture()) + { + const visualization = (roomObject.visualization as FurnitureVisualization); + + if(visualization) visualization.lookThrough = false; + }; + + this.clearHighlight(); + + this._state = RoomAreaSelectionManager.NOT_ACTIVE; + } + + public get areaSelectionState(): number + { + return this._state; + } +} diff --git a/packages/room/src/utils/SpriteDataCollector.ts b/packages/room/src/utils/SpriteDataCollector.ts deleted file mode 100644 index d29996f..0000000 --- a/packages/room/src/utils/SpriteDataCollector.ts +++ /dev/null @@ -1,453 +0,0 @@ -import { IPlaneDrawingData, IPlaneVisualization, IRoomObjectSpriteVisualization, IRoomPlane, IRoomRenderingCanvas, RoomObjectCategory, RoomObjectSpriteData } from '@nitrots/api'; -import { GetStage, Vector3d } from '@nitrots/utils'; -import { Point, Rectangle } from 'pixi.js'; -import { RoomEngine } from '../RoomEngine'; -import { PlaneDrawingData } from '../object'; - -export class SpriteDataCollector -{ - private static MANNEQUIN_MAGIC_X_OFFSET: number = 1; - private static MANNEQUIN_MAGIC_Y_OFFSET: number = -16; - private static AVATAR_WATER_EFFECT_MAGIC_Y_OFFSET: number = -52; - private static MAX_EXTERNAL_IMAGE_COUNT: number = 30; - - private maxZ: number; - private spriteCount: number = 0; - private externalImageCount: number = 0; - - private static addMannequinSprites(k: RoomObjectSpriteData[], _arg_2: RoomEngine): RoomObjectSpriteData[] - { - const datas: RoomObjectSpriteData[] = []; - - for(const data of k) - { - if(!data) continue; - - if((data.type === 'boutique_mannequin1') && (data.name.indexOf('mannequin_') === 0)) - { - const roomObject = _arg_2.getRoomObject(_arg_2.activeRoomId, data.objectId, RoomObjectCategory.FLOOR); - - if(roomObject) - { - const spriteList = (roomObject.visualization as IRoomObjectSpriteVisualization).getSpriteList(); - - if(spriteList) - { - for(const sprite of spriteList) - { - sprite.x = (sprite.x + ((data.x + (data.width / 2)) + SpriteDataCollector.MANNEQUIN_MAGIC_X_OFFSET)); - sprite.y = (sprite.y + ((data.y + data.height) + SpriteDataCollector.MANNEQUIN_MAGIC_Y_OFFSET)); - sprite.z = (sprite.z + data.z); - datas.push(sprite); - } - } - } - } - else - { - datas.push(data); - } - } - - return datas; - } - - private static sortSpriteDataObjects(k: RoomObjectSpriteData, _arg_2: RoomObjectSpriteData): number - { - if(k.z < _arg_2.z) return 1; - - if(k.z > _arg_2.z) return -1; - - return -1; - } - - private static isSpriteInViewPort(k: RoomObjectSpriteData, _arg_2: Rectangle, _arg_3: IRoomRenderingCanvas): boolean - { - return true; - // var _local_4 = new Rectangle((k.x + _arg_3.screenOffsetX), (k.y + _arg_3.screenOffsetY), k.width, k.height); - // // intersects - // return _local_4.contains(_arg_2.x, _arg_2.y); - } - - private static sortQuadPoints(k: Point, _arg_2: Point, _arg_3: Point, _arg_4: Point): Point[] - { - const points: Point[] = []; - - if(k.x == _arg_2.x) - { - points.push(k, _arg_3, _arg_2, _arg_4); - } - else - { - if(k.x == _arg_3.x) - { - points.push(k, _arg_2, _arg_3, _arg_4); - } - else - { - if((((_arg_2.x < k.x) && (_arg_2.y > k.y)) || ((_arg_2.x > k.x) && (_arg_2.y < k.y)))) - { - points.push(k, _arg_3, _arg_2, _arg_4); - } - else - { - points.push(k, _arg_2, _arg_3, _arg_4); - } - } - } - - if(points[0].x < points[1].x) - { - let _local_6 = points[0]; - - points[0] = points[1]; - points[1] = _local_6; - - _local_6 = points[2]; - - points[2] = points[3]; - points[3] = _local_6; - } - - if(points[0].y < points[2].y) - { - let _local_6 = points[0]; - - points[0] = points[2]; - points[2] = _local_6; - - _local_6 = points[1]; - - points[1] = points[3]; - points[3] = _local_6; - } - - return points; - } - - - public getFurniData(k: Rectangle, _arg_2: IRoomRenderingCanvas, _arg_3: RoomEngine, _arg_4: number): string - { - const _local_5: Object[] = []; - let _local_6 = _arg_2.getSortableSpriteList(); - - const _local_7 = _arg_3.getRoomObjects(_arg_3.activeRoomId, RoomObjectCategory.UNIT); - - for(const _local_8 of _local_7) - { - if(_local_8.id !== _arg_4) - { - const _local_11 = (_local_8.visualization as IRoomObjectSpriteVisualization).getSpriteList(); - - if(_local_11) - { - let _local_12 = 0; - let _local_13 = 0; - - for(const _local_14 of _local_6) - { - if(_local_14.name === ('avatar_' + _local_8.id)) - { - _local_12 = _local_14.z; - _local_13 = ((_local_14.y + _local_14.height) - (_arg_2.geometry.scale / 4)); - - break; - } - } - - const _local_15 = _arg_3.getRoomObjectScreenLocation(_arg_3.activeRoomId, _local_8.id, RoomObjectCategory.UNIT, _arg_2.id); - - if(_local_15) - { - if(_local_13 === 0) _local_13 = _local_15.y; - - for(const _local_16 of _local_11) - { - _local_16.x = (_local_16.x + (_local_15.x - _arg_2.screenOffsetX)); - _local_16.y = (_local_16.y + _local_13); - _local_16.z = (_local_16.z + _local_12); - - if(((_local_16.name.indexOf('h_std_fx29_') === 0) || (_local_16.name.indexOf('h_std_fx185_') === 0))) - { - _local_16.y = (_local_16.y + SpriteDataCollector.AVATAR_WATER_EFFECT_MAGIC_Y_OFFSET); - } - - _local_6.push(_local_16); - } - } - } - } - } - - _local_6 = SpriteDataCollector.addMannequinSprites(_local_6, _arg_3); - _local_6.sort(SpriteDataCollector.sortSpriteDataObjects); - - for(const _local_9 of _local_6) - { - if((((((!(_local_9.name === null)) && (_local_9.name.length > 0)) && (!(_local_9.name.indexOf('tile_cursor_') === 0))) && (SpriteDataCollector.isSpriteInViewPort(_local_9, k, _arg_2))) && ((_arg_4 < 0) || (!(_local_9.objectId == _arg_4))))) - { - _local_5.push(this.getSpriteDataObject(_local_9, k, _arg_2, _arg_3)); - - if(!this.maxZ) this.maxZ = _local_9.z; - - this.spriteCount++; - } - } - - return JSON.stringify(_local_5); - } - - public getRoomRenderingModifiers(k: RoomEngine): string - { - return JSON.stringify(new Object()); - } - - private getSpriteDataObject(k: RoomObjectSpriteData, _arg_2: Rectangle, _arg_3: IRoomRenderingCanvas, _arg_4: RoomEngine): Object - { - let _local_7: string = null; - let _local_9: string[] = []; - - const _local_5: { - name?: string, - x?: number, - y?: number, - z?: number, - alpha?: number, - flipH?: boolean, - skew?: number, - frame?: boolean, - color?: number, - blendMode?: string, - width?: number, - height?: number, - posture?: string - } = {}; - - let _local_6 = k.name; - - if(k.name.indexOf('@') !== -1) - { - _local_9 = k.name.split('@'); - _local_6 = _local_9[0]; - _local_7 = _local_9[1]; - } - - // if(((_local_7) && (k.type))) - // { - // const _local_10 = _arg_4.roomContentLoader.getCollection(k.type); - - // if(_local_10) - // { - // const _local_11 = _local_10.getPalette(_local_7); - - // if (((!(_local_11 == null)) && (!(_local_11.@source == null)))) - // { - // _local_5.paletteSourceName = (_local_11.@source + ''); - // } - // } - // } - - // var _local_8: string = _arg_4.configuration.getProperty('image.library.url'); - // _local_6 = _local_6.replace('%image.library.url%', _local_8); - // if (_local_6.indexOf('%group.badge.url%') != -1) - // { - // _local_12 = _arg_4.configuration.getProperty('group.badge.url'); - // _local_6 = _local_6.replace('%group.badge.url%', ''); - // _local_13 = _local_12.replace('%imagerdata%', _local_6); - // _local_6 = _local_13; - // } - - _local_5.name = _local_6; - _local_5.x = (k.x - _arg_2.x); - _local_5.y = (k.y - _arg_2.y); - _local_5.x = (_local_5.x + _arg_3.screenOffsetX); - _local_5.y = (_local_5.y + _arg_3.screenOffsetY); - _local_5.z = k.z; - - if(k.alpha && (k.alpha.toString() !== '255')) _local_5.alpha = k.alpha; - - if(k.flipH) _local_5.flipH = k.flipH; - - if(k.skew) _local_5.skew = k.skew; - - if(k.frame) _local_5.frame = k.frame; - - if(k.color && (k.color.length > 0)) _local_5.color = parseInt(k.color); - - if(k.blendMode && (k.blendMode !== 'normal')) _local_5.blendMode = k.blendMode; - - if(_local_6.indexOf('http') === 0) - { - _local_5.width = k.width; - _local_5.height = k.height; - - this.externalImageCount++; - - if(this.externalImageCount > SpriteDataCollector.MAX_EXTERNAL_IMAGE_COUNT) _local_5.name = 'box'; - } - - if(k.posture) _local_5.posture = k.posture; - - return _local_5; - } - - private makeBackgroundPlane(k: Rectangle, _arg_2: number, _arg_3: IPlaneDrawingData[]): PlaneDrawingData - { - const _local_4 = new Point(0, 0); - const _local_5 = new Point(k.width, 0); - const _local_6 = new Point(0, k.height); - const _local_7 = new Point(k.width, k.height); - const _local_8 = SpriteDataCollector.sortQuadPoints(_local_4, _local_5, _local_6, _local_7); - - let _local_9 = 0; - - if(_arg_3.length > 0) - { - _local_9 = _arg_3[0].z; - - if(this.maxZ) _local_9 = Math.max(this.maxZ, _local_9); - } - else - { - _local_9 = ((this.maxZ) ? this.maxZ : 0); - } - - _local_9 = (_local_9 + ((this.spriteCount * 1.776104) + (_arg_3.length * 2.31743))); - - const _local_10 = new PlaneDrawingData(null, _arg_2); - - _local_10.cornerPoints = _local_8; - _local_10.z = _local_9; - - return _local_10; - } - - private sortRoomPlanes(k: IRoomPlane[], _arg_2: IRoomRenderingCanvas, _arg_3: RoomEngine): { plane: IRoomPlane, z: number }[] - { - const _local_4: Map = new Map(); - - let _local_5 = 1; - - if(this.maxZ) - { - _local_5 = (_local_5 + this.maxZ); - } - - for(const _local_6 of k) - { - const _local_10 = { - plane: _local_6, - z: _local_5 - }; - - _local_4.set(_local_6.uniqueId, _local_10); - } - - const sprites = _arg_2.getPlaneSortableSprites(); - - sprites.sort((a, b) => - { - return (b.z - a.z); - }); - - sprites.reverse(); - - let _local_8: { plane: IRoomPlane, z: number }[] = []; - - for(const sprite of sprites) - { - const objectSprite = sprite.sprite; - - if(objectSprite) - { - const _local_10 = _local_4.get(objectSprite.id); - - if(_local_10) - { - _local_4.delete(objectSprite.id); - - _local_10.z = sprite.z; - - _local_8.push(_local_10); - } - } - } - - _local_8 = _local_8.concat(Array.from(_local_4.values())); - - return _local_8; - } - - public getRoomPlanes(k: Rectangle, _arg_2: IRoomRenderingCanvas, _arg_3: RoomEngine, _arg_4: number): IPlaneDrawingData[] - { - const _local_5: IPlaneDrawingData[] = []; - - const roomObject = _arg_3.getRoomObject(_arg_3.activeRoomId, RoomEngine.ROOM_OBJECT_ID, RoomObjectCategory.ROOM); - const visualization = (roomObject.visualization as unknown as IPlaneVisualization); - - if(visualization) - { - const _local_8 = _arg_2.geometry; - const _local_9 = this.sortRoomPlanes(visualization.planes, _arg_2, _arg_3); - const _local_10 = GetStage(); - - for(const _local_11 of _local_9) - { - const _local_12 = _local_11.plane; - const _local_13: Point[] = []; - - const _local_14 = Vector3d.sum(_local_12.location, _local_12.leftSide); - const _local_15 = _local_8.getScreenPoint(_local_12.location); - const _local_16 = _local_8.getScreenPoint(_local_14); - const _local_17 = _local_8.getScreenPoint(Vector3d.sum(_local_12.location, _local_12.rightSide)); - const _local_18 = _local_8.getScreenPoint(Vector3d.sum(_local_14, _local_12.rightSide)); - - _local_13.push(_local_15, _local_16, _local_17, _local_18); - - let _local_19 = 0; - let _local_20 = 0; - - for(const _local_21 of _local_13) - { - _local_21.x += (_local_10.width / 2); - _local_21.y += (_local_10.height / 2); - - _local_21.x += _arg_2.screenOffsetX; - _local_21.y += _arg_2.screenOffsetY; - - _local_21.x += -(k.x); - _local_21.y += -(k.y); - - if(_local_21.x < 0) _local_19--; - - else if(_local_21.x >= k.width) _local_19++; - - if(_local_21.y < 0) _local_20--; - - else if(_local_21.y >= k.height) _local_20++; - } - - if(((Math.abs(_local_19) === 4) || (Math.abs(_local_20) === 4))) - { - // - } - else - { - const _local_22 = SpriteDataCollector.sortQuadPoints(_local_15, _local_16, _local_17, _local_18); - - /* for(const _local_23 of _local_12.getDrawingDatas(_local_8)) - { - _local_23.cornerPoints = _local_22; - _local_23.z = _local_11.z; - - _local_5.push(_local_23); - } */ - } - } - - _local_5.unshift(this.makeBackgroundPlane(k, _arg_4, _local_5)); - } - - return _local_5; - } -} diff --git a/packages/room/src/utils/index.ts b/packages/room/src/utils/index.ts index 523dd6a..0a1f32b 100644 --- a/packages/room/src/utils/index.ts +++ b/packages/room/src/utils/index.ts @@ -1,5 +1,6 @@ export * from './FurnitureStackingHeightMap'; export * from './LegacyWallGeometry'; +export * from './RoomAreaSelectionManager'; export * from './RoomCamera'; export * from './RoomData'; export * from './RoomEnterEffect'; diff --git a/packages/room/tsconfig.json b/packages/room/tsconfig.json index 5e8757d..7865c29 100644 --- a/packages/room/tsconfig.json +++ b/packages/room/tsconfig.json @@ -25,7 +25,5 @@ "ESNext" ], "module": "ES6" - }, - "include": [ - "src" ] + } } diff --git a/packages/session/.eslintrc.json b/packages/session/.eslintrc.json deleted file mode 100644 index ad92133..0000000 --- a/packages/session/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": [ "@nitrots/eslint-config" ] -} diff --git a/packages/session/package.json b/packages/session/package.json index 31f9fab..d335302 100644 --- a/packages/session/package.json +++ b/packages/session/package.json @@ -5,8 +5,7 @@ "type": "module", "license": "GPL-3.0", "scripts": { - "compile": "tsc --project ./tsconfig.json --noEmit false", - "eslint": "eslint ./src --fix" + "compile": "tsc --project ./tsconfig.json --noEmit false" }, "main": "./index", "dependencies": { @@ -14,10 +13,9 @@ "@nitrots/assets": "1.0.0", "@nitrots/communication": "1.0.0", "@nitrots/configuration": "1.0.0", - "@nitrots/eslint-config": "1.0.0", "@nitrots/events": "1.0.0", "@nitrots/localization": "1.0.0", - "pixi.js": "^8.1.0" + "pixi.js": "^8.1.6" }, "devDependencies": { "typescript": "~5.4.2" diff --git a/packages/session/src/SessionDataManager.ts b/packages/session/src/SessionDataManager.ts index ee93e7e..c286ef4 100644 --- a/packages/session/src/SessionDataManager.ts +++ b/packages/session/src/SessionDataManager.ts @@ -50,8 +50,6 @@ export class SessionDataManager implements ISessionDataManager constructor() { this.resetUserInfo(); - - this.onNitroSettingsEvent = this.onNitroSettingsEvent.bind(this); } public async init(): Promise @@ -86,7 +84,13 @@ export class SessionDataManager implements ISessionDataManager GetCommunication().registerMessageEvent(new AccountSafetyLockStatusChangeMessageEvent(this.onAccountSafetyLockStatusChangeMessageEvent.bind(this))); GetCommunication().registerMessageEvent(new EmailStatusResultEvent(this.onEmailStatus.bind(this))); - GetEventDispatcher().addEventListener(NitroSettingsEvent.SETTINGS_UPDATED, this.onNitroSettingsEvent); + GetEventDispatcher().addEventListener(NitroSettingsEvent.SETTINGS_UPDATED, event => + { + this._isRoomCameraFollowDisabled = event.cameraFollow; + this._uiFlags = event.flags; + + GetEventDispatcher().dispatchEvent(new SessionDataPreferencesEvent(this._uiFlags)); + }); } private resetUserInfo(): void @@ -256,14 +260,6 @@ export class SessionDataManager implements ISessionDataManager this._isEmailVerified = event?.getParser()?.isVerified ?? false; } - private onNitroSettingsEvent(event: NitroSettingsEvent): void - { - this._isRoomCameraFollowDisabled = event.cameraFollow; - this._uiFlags = event.flags; - - GetEventDispatcher().dispatchEvent(new SessionDataPreferencesEvent(this._uiFlags)); - } - public getFloorItemData(id: number): IFurnitureData { const existing = this._floorItems.get(id); diff --git a/packages/session/src/furniture/FurnitureData.ts b/packages/session/src/furniture/FurnitureData.ts index 3b43f15..b27e29e 100644 --- a/packages/session/src/furniture/FurnitureData.ts +++ b/packages/session/src/furniture/FurnitureData.ts @@ -1,8 +1,8 @@ -import { IFurnitureData } from '@nitrots/api'; +import { FurnitureType, IFurnitureData } from '@nitrots/api'; export class FurnitureData implements IFurnitureData { - private _type: string; + private _type: FurnitureType; private _id: number; private _className: string; private _fullName: string; @@ -32,7 +32,7 @@ export class FurnitureData implements IFurnitureData private _environment: string; private _rare: boolean; - constructor(type: string, id: number, fullName: string, className: string, category: string, localizedName: string, description: string, revision: number, tileSizeX: number, tileSizeY: number, tileSizeZ: number, colors: number[], hadIndexedColor: boolean, colorIndex: number, adUrl: string, purchaseOfferId: number, purchaseCouldBeUsedForBuyout: boolean, rentOfferId: number, rentCouldBeUsedForBuyout: boolean, availableForBuildersClub: boolean, customParams: string, specialType: number, canStandOn: boolean, canSitOn: boolean, canLayOn: boolean, excludedfromDynamic: boolean, furniLine: string, environment: string, rare: boolean) + constructor(type: FurnitureType, id: number, fullName: string, className: string, category: string, localizedName: string, description: string, revision: number, tileSizeX: number, tileSizeY: number, tileSizeZ: number, colors: number[], hadIndexedColor: boolean, colorIndex: number, adUrl: string, purchaseOfferId: number, purchaseCouldBeUsedForBuyout: boolean, rentOfferId: number, rentCouldBeUsedForBuyout: boolean, availableForBuildersClub: boolean, customParams: string, specialType: number, canStandOn: boolean, canSitOn: boolean, canLayOn: boolean, excludedfromDynamic: boolean, furniLine: string, environment: string, rare: boolean) { this._type = type; this._id = id; @@ -65,7 +65,7 @@ export class FurnitureData implements IFurnitureData this._rare = rare; } - public get type(): string + public get type(): FurnitureType { return this._type; } diff --git a/packages/session/tsconfig.json b/packages/session/tsconfig.json index 5e8757d..7865c29 100644 --- a/packages/session/tsconfig.json +++ b/packages/session/tsconfig.json @@ -25,7 +25,5 @@ "ESNext" ], "module": "ES6" - }, - "include": [ - "src" ] + } } diff --git a/packages/sound/.eslintrc.json b/packages/sound/.eslintrc.json deleted file mode 100644 index ad92133..0000000 --- a/packages/sound/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": [ "@nitrots/eslint-config" ] -} diff --git a/packages/sound/package.json b/packages/sound/package.json index bd8c5a2..44fca8b 100644 --- a/packages/sound/package.json +++ b/packages/sound/package.json @@ -5,15 +5,13 @@ "type": "module", "license": "GPL-3.0", "scripts": { - "compile": "tsc --project ./tsconfig.json --noEmit false", - "eslint": "eslint ./src --fix" + "compile": "tsc --project ./tsconfig.json --noEmit false" }, "main": "./index", "dependencies": { "@nitrots/api": "1.0.0", "@nitrots/communication": "1.0.0", - "@nitrots/eslint-config": "1.0.0", - "pixi.js": "^8.1.0" + "pixi.js": "^8.1.6" }, "devDependencies": { "typescript": "~5.4.2" diff --git a/packages/sound/src/common/SongDataEntry.ts b/packages/sound/src/common/SongDataEntry.ts index 0e74bd5..1df568b 100644 --- a/packages/sound/src/common/SongDataEntry.ts +++ b/packages/sound/src/common/SongDataEntry.ts @@ -10,7 +10,8 @@ export class SongDataEntry implements ISongInfo public readonly name: string, public readonly creator: string, public readonly songData: string = '' - ) {} + ) + {} public get diskId(): number { diff --git a/packages/sound/tsconfig.json b/packages/sound/tsconfig.json index 5e8757d..7865c29 100644 --- a/packages/sound/tsconfig.json +++ b/packages/sound/tsconfig.json @@ -25,7 +25,5 @@ "ESNext" ], "module": "ES6" - }, - "include": [ - "src" ] + } } diff --git a/packages/utils/.eslintrc.json b/packages/utils/.eslintrc.json deleted file mode 100644 index ad92133..0000000 --- a/packages/utils/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": [ "@nitrots/eslint-config" ] -} diff --git a/packages/utils/package.json b/packages/utils/package.json index a749955..85a2370 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -5,15 +5,13 @@ "type": "module", "license": "GPL-3.0", "scripts": { - "compile": "tsc --project ./tsconfig.json --noEmit false", - "eslint": "eslint ./src --fix" + "compile": "tsc --project ./tsconfig.json --noEmit false" }, "main": "./index", "dependencies": { "@nitrots/api": "1.0.0", - "@nitrots/eslint-config": "1.0.0", "pako": "^2.1.0", - "pixi.js": "^8.1.0" + "pixi.js": "^8.1.6" }, "devDependencies": { "@types/pako": "^2.0.3", diff --git a/packages/utils/src/NitroVersion.ts b/packages/utils/src/NitroVersion.ts index 9cf4590..09f73c0 100644 --- a/packages/utils/src/NitroVersion.ts +++ b/packages/utils/src/NitroVersion.ts @@ -1,4 +1,3 @@ - export class NitroVersion { public static RENDERER_VERSION: string = '2.0.0'; diff --git a/packages/utils/src/motion/Motions.ts b/packages/utils/src/motion/Motions.ts index 92c7242..845fd1c 100644 --- a/packages/utils/src/motion/Motions.ts +++ b/packages/utils/src/motion/Motions.ts @@ -165,7 +165,7 @@ export class Motions { if(!Motions._TIMER) { - Motions._TIMER = setInterval(Motions.onTick, Motions.TIMER_TIME); + Motions._TIMER = setInterval(() => Motions.onTick(), Motions.TIMER_TIME); } } diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json index 5e8757d..7865c29 100644 --- a/packages/utils/tsconfig.json +++ b/packages/utils/tsconfig.json @@ -25,7 +25,5 @@ "ESNext" ], "module": "ES6" - }, - "include": [ - "src" ] + } } diff --git a/src/DevTools.ts b/src/DevTools.ts index ad972b8..db9fa0f 100644 --- a/src/DevTools.ts +++ b/src/DevTools.ts @@ -20,6 +20,6 @@ declare global window.NitroDevTools = { roomEngine: () => GetRoomEngine(), textureCache: () => GetRenderer().texture.managedTextures, - texturePool: () => GetTexturePool().textures, - textureGC: () => GetRenderer().textureGC + texturePool: () => GetTexturePool().textures, + textureGC: () => GetRenderer().textureGC }; diff --git a/src/index.ts b/src/index.ts index 92db0e5..84d2b88 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,6 @@ -import { AbstractRenderer, BrowserAdapter, DOMAdapter, HelloSystem, TextureSource } from 'pixi.js'; +import { BrowserAdapter, DOMAdapter, HelloSystem, TextureSource } from 'pixi.js'; HelloSystem.defaultOptions.hello = true; -AbstractRenderer.defaultOptions.failIfMajorPerformanceCaveat = false; TextureSource.defaultOptions.scaleMode = (!(window.devicePixelRatio % 1)) ? 'nearest' : 'linear'; DOMAdapter.set(BrowserAdapter); diff --git a/tsconfig.json b/tsconfig.json index eceefbc..c6b52f8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,14 +18,12 @@ "noEmit": true, "strict": false, "strictNullChecks": false, - "target": "ES6", + "target": "ES2022", "lib": [ "DOM", "DOM.Iterable", "ESNext" ], - "module": "ES6" - }, - "include": [ - "src", "packages/utils/src/FurniId.ts", "packages/room/src/messages", "packages/room/src/utils", "packages/room/src/object/logic", "packages/room/src/object/visualization", "packages/room/src/object/RoomObject.ts", "packages/room/src/object/RoomObjectModel.ts", "packages/utils/src/NumberBank.ts", "packages/utils/src/RoomId.ts", "packages/utils/src/ColorConverter.ts", "packages/utils/src/PointMath.ts", "packages/room/src/renderer/cache", "packages/room/src/renderer/RoomSpriteCanvas.ts", "packages/room/src/renderer/RoomRendererFactory.ts", "packages/room/src/renderer/RoomRenderer.ts", "packages/room/src/RoomInstance.ts", "packages/room/src/RoomManager.ts", "packages/room/src/RoomObjectManager.ts", "packages/room/src/RoomPreviewer.ts", "packages/room/src/object/RoomWallData.ts", "packages/room/src/object/RoomPlaneParser.ts", "packages/room/src/object/RoomPlaneMaskData.ts", "packages/room/src/object/RoomPlaneData.ts", "packages/room/src/object/RoomPlaneBitmapMaskParser.ts", "packages/room/src/object/RoomPlaneBitmapMaskData.ts", "packages/room/src/RoomObjectVisualizationFactory.ts", "packages/room/src/object/RoomMapMaskData.ts", "packages/room/src/object/RoomMapData.ts", "packages/room/src/object/RoomFloorHole.ts", "packages/room/src/RoomVariableEnum.ts", "packages/room/src/RoomObjectLogicFactory.ts", "packages/room/src/RoomObjectEventHandler.ts", "packages/room/src/RoomMessageHandler.ts", "packages/room/src/RoomEngine.ts", "packages/room/src/RoomContentLoader.ts", "packages/room/src/PetColorResult.ts", "packages/room/src/ImageResult.ts", "packages/utils/src/Node3D.ts", "packages/utils/src/Matrix4x4.ts", "packages/utils/src/LegacyExternalInterface.ts", "packages/utils/src/HabboWebTools.ts", "packages/utils/src/motion", "packages/avatar/src/actions", "packages/avatar/animation", "packages/avatar/cache", "packages/avatar/src/data", "packages/avatar/geometry", "packages/avatar/src/pets", "packages/avatar/src/structure/animation", "packages/avatar/src/structure/figure", "packages/avatar/src/structure/parts", "packages/avatar/structure/AvatarAnimationData.ts", "packages/avatar/structure/AvatarCanvas.ts", "packages/avatar/structure/FigureSetData.ts", "packages/avatar/structure/index.ts", "packages/avatar/structure/PartSetsData.ts", "packages/avatar/src/cache/AvatarImageCache.ts", "packages/localization/src/LocalizationManager.ts", "packages/localization/src/GetLocalization.ts", "packages/localization/src/BadgeBaseAndLevel.ts" ] + "module": "ES2022" + } } diff --git a/yarn.lock b/yarn.lock index ce04fcd..5b0656f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -129,49 +129,54 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": version "4.10.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== +"@eslint/config-array@^0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.16.0.tgz#bb3364fc39ee84ec3a62abdc4b8d988d99dfd706" + integrity sha512-/jmuSd74i4Czf1XXn7wGRWZCuyaUZ330NH1Bek0Pplatt4Sy1S5haN21SCLLdbeKslQ+S0wEJ+++v5YibSi+Lg== + dependencies: + "@eslint/object-schema" "^2.1.4" + debug "^4.3.1" + minimatch "^3.0.5" + +"@eslint/eslintrc@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6" + integrity sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" + espree "^10.0.1" + globals "^14.0.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.57.0": - version "8.57.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== +"@eslint/js@9.5.0", "@eslint/js@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.5.0.tgz#0e9c24a670b8a5c86bff97b40be13d8d8f238045" + integrity sha512-A7+AOT2ICkodvtsWnxZP4Xxk3NbZ3VMHd8oihydLRGrJgqqdEz1qSeEgXYyT/Cu8h1TWWsQRejIx48mtjZ5y1w== -"@humanwhocodes/config-array@^0.11.14": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== - dependencies: - "@humanwhocodes/object-schema" "^2.0.2" - debug "^4.3.1" - minimatch "^3.0.5" +"@eslint/object-schema@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.4.tgz#9e69f8bb4031e11df79e03db09f9dbbae1740843" + integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ== "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" - integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== +"@humanwhocodes/retry@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.0.tgz#6d86b8cb322660f03d3f0aa94b99bdd8e172d570" + integrity sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -296,121 +301,133 @@ resolved "https://registry.yarnpkg.com/@types/earcut/-/earcut-2.1.4.tgz#5811d7d333048f5a7573b22ddc84923e69596da6" integrity sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ== -"@types/estree@1.0.5", "@types/estree@^1.0.0": +"@types/eslint@*": + version "8.56.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" + integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/eslint__js@^8.42.3": + version "8.42.3" + resolved "https://registry.yarnpkg.com/@types/eslint__js/-/eslint__js-8.42.3.tgz#d1fa13e5c1be63a10b4e3afe992779f81c1179a0" + integrity sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw== + dependencies: + "@types/eslint" "*" + +"@types/estree@*", "@types/estree@1.0.5", "@types/estree@^1.0.0": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/gradient-parser@^0.1.2": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@types/gradient-parser/-/gradient-parser-0.1.5.tgz#7b25d5f080f41f0d713207894c3f2f490155462a" + integrity sha512-r7K3NkJz3A95WkVVmjs0NcchhHstC2C/VIYNX4JC6tieviUNo774FFeOHjThr3Vw/WCeMP9kAT77MKbIRlO/4w== + "@types/howler@^2.2.11": version "2.2.11" resolved "https://registry.yarnpkg.com/@types/howler/-/howler-2.2.11.tgz#a75c4ab5666aee5fcfbd5de15d35dbaaa3d3f070" integrity sha512-7aBoUL6RbSIrqKnpEgfa1wSNUBK06mn08siP2QI0zYk7MXfEJAaORc4tohamQYqCqVESoDyRWSdQn2BOKWj2Qw== -"@types/json-schema@^7.0.12": +"@types/json-schema@*": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/node@^20.14.4": + version "20.14.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.4.tgz#3426db474378502882036d595ec9e79a9b17d1e6" + integrity sha512-1ChboN+57suCT2t/f8lwtPY/k3qTpuD/qnqQuYoBg6OQOcPyaw7PiZVdGpaZYAvhDDtqrt0oAaM8+oSu1xsUGw== + dependencies: + undici-types "~5.26.4" + "@types/pako@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/pako/-/pako-2.0.3.tgz#b6993334f3af27c158f3fe0dfeeba987c578afb1" integrity sha512-bq0hMV9opAcrmE0Byyo0fY3Ew4tgOevJmQ9grUhpXQhYfyLJ1Kqg3P33JT5fdbT2AjeAjR51zqqVjAL/HMkx7Q== -"@types/semver@^7.5.0": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@typescript-eslint/eslint-plugin@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.1.tgz#dd71fc5c7ecec745ca26ece506d84d203a205c0e" - integrity sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw== +"@typescript-eslint/eslint-plugin@7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.1.tgz#cdc521c8bca38b55585cf30db787fb2abad3f9fd" + integrity sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg== dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "7.1.1" - "@typescript-eslint/type-utils" "7.1.1" - "@typescript-eslint/utils" "7.1.1" - "@typescript-eslint/visitor-keys" "7.1.1" - debug "^4.3.4" + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "7.13.1" + "@typescript-eslint/type-utils" "7.13.1" + "@typescript-eslint/utils" "7.13.1" + "@typescript-eslint/visitor-keys" "7.13.1" graphemer "^1.4.0" - ignore "^5.2.4" + ignore "^5.3.1" natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" -"@typescript-eslint/parser@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.1.1.tgz#6a9d0a5c9ccdf5dbd3cb8c949728c64e24e07d1f" - integrity sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ== +"@typescript-eslint/parser@7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.13.1.tgz#fac57811b3e519185f7259bac312291f7b9c4e72" + integrity sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A== dependencies: - "@typescript-eslint/scope-manager" "7.1.1" - "@typescript-eslint/types" "7.1.1" - "@typescript-eslint/typescript-estree" "7.1.1" - "@typescript-eslint/visitor-keys" "7.1.1" + "@typescript-eslint/scope-manager" "7.13.1" + "@typescript-eslint/types" "7.13.1" + "@typescript-eslint/typescript-estree" "7.13.1" + "@typescript-eslint/visitor-keys" "7.13.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz#9e301803ff8e21a74f50c6f89a4baccad9a48f93" - integrity sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA== +"@typescript-eslint/scope-manager@7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz#c08041206904bf36f0e6997efdb0ca775e0c452e" + integrity sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg== dependencies: - "@typescript-eslint/types" "7.1.1" - "@typescript-eslint/visitor-keys" "7.1.1" + "@typescript-eslint/types" "7.13.1" + "@typescript-eslint/visitor-keys" "7.13.1" -"@typescript-eslint/type-utils@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.1.1.tgz#aee820d5bedd39b83c18585a526cc520ddb7a226" - integrity sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g== +"@typescript-eslint/type-utils@7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.13.1.tgz#63bec3f1fb43cf0bc409cbdb88ef96d118ca8632" + integrity sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg== dependencies: - "@typescript-eslint/typescript-estree" "7.1.1" - "@typescript-eslint/utils" "7.1.1" + "@typescript-eslint/typescript-estree" "7.13.1" + "@typescript-eslint/utils" "7.13.1" debug "^4.3.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" -"@typescript-eslint/types@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.1.1.tgz#ca33ba7cf58224fb46a84fea62593c2c53cd795f" - integrity sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q== +"@typescript-eslint/types@7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.13.1.tgz#787db283bd0b58751094c90d5b58bbf5e9fc9bd8" + integrity sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw== -"@typescript-eslint/typescript-estree@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz#09c54af0151a1b05d0875c0fc7fe2ec7a2476ece" - integrity sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw== +"@typescript-eslint/typescript-estree@7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz#3412841b130e070db2f675e3d9b8cb1ae49e1c3f" + integrity sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw== dependencies: - "@typescript-eslint/types" "7.1.1" - "@typescript-eslint/visitor-keys" "7.1.1" + "@typescript-eslint/types" "7.13.1" + "@typescript-eslint/visitor-keys" "7.13.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" -"@typescript-eslint/utils@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.1.1.tgz#bdeeb789eee4af5d3fb5400a69566d4dbf97ff3b" - integrity sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg== +"@typescript-eslint/utils@7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.13.1.tgz#611083379caa0d3a2c09d126c65065a3e4337ba2" + integrity sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "7.1.1" - "@typescript-eslint/types" "7.1.1" - "@typescript-eslint/typescript-estree" "7.1.1" - semver "^7.5.4" + "@typescript-eslint/scope-manager" "7.13.1" + "@typescript-eslint/types" "7.13.1" + "@typescript-eslint/typescript-estree" "7.13.1" -"@typescript-eslint/visitor-keys@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz#e6538a58c9b157f03bcbb29e3b6a92fe39a6ab0d" - integrity sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ== +"@typescript-eslint/visitor-keys@7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz#9c229a795a919db61f2d7f2337ef584ac05fbe96" + integrity sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA== dependencies: - "@typescript-eslint/types" "7.1.1" - eslint-visitor-keys "^3.4.1" - -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + "@typescript-eslint/types" "7.13.1" + eslint-visitor-keys "^3.4.3" "@webgpu/types@^0.1.40": version "0.1.40" @@ -427,7 +444,7 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.9.0: +acorn@^8.11.3: version "8.11.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== @@ -504,6 +521,16 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +clientjs@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/clientjs/-/clientjs-0.2.1.tgz#1b954a0afec9e6e1056f21a2c3107aca37fc2869" + integrity sha512-HN7yzgq8xMDjkNpSnpH3foMxaX5q9CUMcLAIsNwNnbJnuEhR8CDRxm22mEo+uQdiOUkCl5ZjdoN9lGBbL4jutQ== + dependencies: + globalthis "^1.0.2" + inherits "^2.0.4" + murmurhash-js "^1.0.0" + ua-parser-js "^0.7.30" + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -542,6 +569,24 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +define-data-property@^1.0.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -549,18 +594,23 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - earcut@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + esbuild@^0.19.3: version "0.19.12" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" @@ -595,54 +645,55 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== +eslint-scope@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.1.tgz#a9601e4b81a0b9171657c343fb13111688963cfc" + integrity sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.57.0: - version "8.57.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== +eslint-visitor-keys@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb" + integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== + +eslint@^9.5.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.5.0.tgz#11856034b94a9e1a02cfcc7e96a9f0956963cd2f" + integrity sha512-+NAOZFrW/jFTS3dASCGBxX1pkFD0/fsO+hfAkJ4TyYKwgsXZbqzrw+seCYFCcPCYXvnD67tAnglU7GQTz6kcVw== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" + "@eslint/config-array" "^0.16.0" + "@eslint/eslintrc" "^3.1.0" + "@eslint/js" "9.5.0" "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.3.0" "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" - doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" + eslint-scope "^8.0.1" + eslint-visitor-keys "^4.0.0" + espree "^10.0.1" + esquery "^1.5.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" + file-entry-cache "^8.0.0" find-up "^5.0.0" glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" - js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" @@ -652,16 +703,16 @@ eslint@^8.57.0: strip-ansi "^6.0.1" text-table "^0.2.0" -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== +espree@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.0.1.tgz#600e60404157412751ba4a6f3a2ee1a42433139f" + integrity sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww== dependencies: - acorn "^8.9.0" + acorn "^8.11.3" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" + eslint-visitor-keys "^4.0.0" -esquery@^1.4.2: +esquery@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== @@ -728,12 +779,12 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== dependencies: - flat-cache "^3.0.4" + flat-cache "^4.0.0" fill-range@^7.0.1: version "7.0.1" @@ -750,25 +801,19 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== dependencies: flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" + keyv "^4.5.4" flatted@^3.2.9: version "3.3.1" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" @@ -779,6 +824,17 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -793,24 +849,18 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== +globalthis@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - type-fest "^0.20.2" + define-properties "^1.2.1" + gopd "^1.0.1" globby@^11.1.0: version "11.1.0" @@ -824,6 +874,13 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" @@ -834,6 +891,23 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + hasown@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" @@ -846,7 +920,7 @@ howler@^2.2.4: resolved "https://registry.yarnpkg.com/howler/-/howler-2.2.4.tgz#bd3df4a4f68a0118a51e4bd84a2bfc2e93e6e5a1" integrity sha512-iARIBPgcQrwtEr+tALF+rapJ8qSc+Set2GJQl7xT1MQzWaVkFebdJhR3alVlSiUf5U7nAANKuj3aWpwerocD5w== -ignore@^5.2.0, ignore@^5.2.4: +ignore@^5.2.0, ignore@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== @@ -864,15 +938,7 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: +inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -938,7 +1004,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -keyv@^4.5.3: +keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -985,25 +1051,30 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.5, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +murmurhash-js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" + integrity sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw== + nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" @@ -1014,12 +1085,10 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== optionator@^0.9.3: version "0.9.3" @@ -1069,11 +1138,6 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -1099,15 +1163,17 @@ picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pixi-filters@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/pixi-filters/-/pixi-filters-6.0.0.tgz#36f480f87b8f66b259db40acb7a6b134e570c473" - integrity sha512-9wJn4bfQKak+lefyk9BSCenhMBvGQi2t4Uz+BVqw6WK8wM2NgqeTC64mhXRtrdYeCG9gIFX0Lc6q1S8rBqwJbg== +pixi-filters@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pixi-filters/-/pixi-filters-6.0.4.tgz#e6a02730210ff438519d3a888a2fe1c8cdaa6c94" + integrity sha512-W9SjOTF4yo+v9t5YOBtsWhJoFLLRM6DsIk1C2YBNiQhdyX7J/5UIJtPlTMhZ7wQKoFUiyeUAaCzTEdmw/TVD6w== + dependencies: + "@types/gradient-parser" "^0.1.2" -pixi.js@^8.0.4, pixi.js@~8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/pixi.js/-/pixi.js-8.0.4.tgz#77449a82354d29fb39c78c3ca23602bf6082e136" - integrity sha512-UAa3WU5FV4kjwjYosbG3pi1QvTBKSLPH7BOLkw5X4g12+Xxew3YwMiM+V1EQL4/65hDn5Z3jhFC3xVAsHFJcsQ== +pixi.js@^8.1.6: + version "8.1.6" + resolved "https://registry.yarnpkg.com/pixi.js/-/pixi.js-8.1.6.tgz#5aaa9f480fea2a029974d8fd4074ba39e03058fc" + integrity sha512-FZT/dLZ9Tdw8eN6odgunSQHORsgHcvLlfOWm7cpR4ZxVGPRqFgDQ4hXpwVxeY9UK4PZtlJ4U910H1QZ4XNLJxg== dependencies: "@pixi/colord" "^2.9.6" "@types/css-font-loading-module" "^0.0.12" @@ -1162,13 +1228,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - rollup@^4.2.0: version "4.12.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.12.1.tgz#0659cb02551cde4c5b210e9bd3af050b5b5b415d" @@ -1198,7 +1257,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -semver@^7.5.4: +semver@^7.6.0: version "7.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== @@ -1263,7 +1322,7 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -ts-api-utils@^1.0.1: +ts-api-utils@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== @@ -1280,16 +1339,30 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +typescript-eslint@^7.13.1: + version "7.13.1" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-7.13.1.tgz#8bbcc4b59b6bb0c457505ee17a356b1868c3fcd5" + integrity sha512-pvLEuRs8iS9s3Cnp/Wt//hpK8nKc8hVa3cLljHqzaJJQYP8oys8GUyIFqtlev+2lT/fqMPcyQko+HJ6iYK3nFA== + dependencies: + "@typescript-eslint/eslint-plugin" "7.13.1" + "@typescript-eslint/parser" "7.13.1" + "@typescript-eslint/utils" "7.13.1" typescript@~5.4.2: version "5.4.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== +ua-parser-js@^0.7.30: + version "0.7.38" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.38.tgz#f497d8a4dc1fec6e854e5caa4b2f9913422ef054" + integrity sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -1315,11 +1388,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"