diff --git a/packages/api/src/nitro/avatar/enum/AvatarFigurePartType.ts b/packages/api/src/nitro/avatar/enum/AvatarFigurePartType.ts index 30bc564..9fed7d4 100644 --- a/packages/api/src/nitro/avatar/enum/AvatarFigurePartType.ts +++ b/packages/api/src/nitro/avatar/enum/AvatarFigurePartType.ts @@ -1,5 +1,11 @@ export class AvatarFigurePartType { + public static MALE: string = 'M'; + public static FEMALE: string = 'F'; + public static UNISEX: string = 'U'; + public static SCALE: string = 'h'; + public static STD: string = 'std'; + public static DEFAULT_FRAME: number = 0; public static BODY: string = 'bd'; public static SHOES: string = 'sh'; public static LEGS: string = 'lg'; diff --git a/packages/api/src/nitro/session/IRoomSession.ts b/packages/api/src/nitro/session/IRoomSession.ts index 371ac1e..097623f 100644 --- a/packages/api/src/nitro/session/IRoomSession.ts +++ b/packages/api/src/nitro/session/IRoomSession.ts @@ -9,8 +9,8 @@ export interface IRoomSession setRoomOwner(): void; start(): boolean; reset(roomId: number): void; - sendChatMessage(text: string, styleId: number): void; - sendShoutMessage(text: string, styleId: number): void; + sendChatMessage(text: string, styleId: number, chatColour: string): void; + sendShoutMessage(text: string, styleId: number, chatColour: string): void; sendWhisperMessage(recipientName: string, text: string, styleId: number): void; sendChatTypingMessage(isTyping: boolean): void; sendMottoMessage(motto: string): void; @@ -20,6 +20,7 @@ export interface IRoomSession sendPostureMessage(posture: number): void; sendDoorbellApprovalMessage(userName: string, flag: boolean): void; sendAmbassadorAlertMessage(userId: number): void; + sendWhisperGroupMessage(userId: number): void; sendKickMessage(userId: number): void; sendMuteMessage(userId: number, minutes: number): void; sendBanMessage(userId: number, type: string): void; diff --git a/packages/avatar/src/FigureDataContainer.ts b/packages/avatar/src/FigureDataContainer.ts index 71dd487..c1fcc0d 100644 --- a/packages/avatar/src/FigureDataContainer.ts +++ b/packages/avatar/src/FigureDataContainer.ts @@ -1,25 +1,25 @@ export class FigureDataContainer { - private static MALE: string = 'M'; - private static FEMALE: string = 'F'; - private static UNISEX: string = 'U'; - private static SCALE: string = 'h'; - private static STD: string = 'std'; - private static DEFAULT_FRAME: string = '0'; - private static HD: string = 'hd'; - private static HAIR: string = 'hr'; - private static HAT: string = 'ha'; - private static HEAD_ACCESSORIES: string = 'he'; - private static EYE_ACCESSORIES: string = 'ea'; - private static FACE_ACCESSORIES: string = 'fa'; - private static JACKET: string = 'cc'; - private static SHIRT: string = 'ch'; - private static CHEST_ACCESSORIES: string = 'ca'; - private static CHEST_PRINTS: string = 'cp'; - private static TROUSERS: string = 'lg'; - private static SHOES: string = 'sh'; - private static TROUSER_ACCESSORIES: string = 'wa'; - private static BLOCKED_FX_TYPES: number[] = [28, 29, 30, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 68]; + public static MALE: string = 'M'; + public static FEMALE: string = 'F'; + public static UNISEX: string = 'U'; + public static SCALE: string = 'h'; + public static STD: string = 'std'; + public static DEFAULT_FRAME: string = '0'; + public static HD: string = 'hd'; + public static HAIR: string = 'hr'; + public static HAT: string = 'ha'; + public static HEAD_ACCESSORIES: string = 'he'; + public static EYE_ACCESSORIES: string = 'ea'; + public static FACE_ACCESSORIES: string = 'fa'; + public static JACKET: string = 'cc'; + public static SHIRT: string = 'ch'; + public static CHEST_ACCESSORIES: string = 'ca'; + public static CHEST_PRINTS: string = 'cp'; + public static TROUSERS: string = 'lg'; + public static SHOES: string = 'sh'; + public static TROUSER_ACCESSORIES: string = 'wa'; + public static BLOCKED_FX_TYPES: number[] = [28, 29, 30, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 68]; private _data: Map; private _colors: Map; diff --git a/packages/camera/package.json b/packages/camera/package.json index 1172279..e335004 100644 --- a/packages/camera/package.json +++ b/packages/camera/package.json @@ -11,6 +11,7 @@ "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", diff --git a/packages/communication/src/messages/outgoing/room/unit/chat/RoomUnitChatComposer.ts b/packages/communication/src/messages/outgoing/room/unit/chat/RoomUnitChatComposer.ts index 420d920..9580d2f 100644 --- a/packages/communication/src/messages/outgoing/room/unit/chat/RoomUnitChatComposer.ts +++ b/packages/communication/src/messages/outgoing/room/unit/chat/RoomUnitChatComposer.ts @@ -4,9 +4,9 @@ export class RoomUnitChatComposer implements IMessageComposer; - constructor(message: string, styleId: number = 0) + constructor(message: string, styleId: number = 0, chatColour: string = '') { - this._data = [message, styleId]; + this._data = [message, styleId, chatColour]; } public getMessageArray() diff --git a/packages/communication/src/messages/outgoing/room/unit/chat/RoomUnitChatShoutComposer.ts b/packages/communication/src/messages/outgoing/room/unit/chat/RoomUnitChatShoutComposer.ts index 6aa2265..4680606 100644 --- a/packages/communication/src/messages/outgoing/room/unit/chat/RoomUnitChatShoutComposer.ts +++ b/packages/communication/src/messages/outgoing/room/unit/chat/RoomUnitChatShoutComposer.ts @@ -4,9 +4,9 @@ export class RoomUnitChatShoutComposer implements IMessageComposer; - constructor(message: string, styleId: number) + constructor(message: string, styleId: number, chatColour: string) { - this._data = [message, styleId]; + this._data = [message, styleId, chatColour]; } public getMessageArray() diff --git a/packages/communication/src/messages/parser/room/unit/chat/RoomUnitChatParser.ts b/packages/communication/src/messages/parser/room/unit/chat/RoomUnitChatParser.ts index 571f9b9..21f4afc 100644 --- a/packages/communication/src/messages/parser/room/unit/chat/RoomUnitChatParser.ts +++ b/packages/communication/src/messages/parser/room/unit/chat/RoomUnitChatParser.ts @@ -7,6 +7,7 @@ export class RoomUnitChatParser implements IMessageParser private _gesture: number; private _bubble: number; private _urls: string[]; + private _chatColours: string; private _messageLength: number; public flush(): boolean @@ -16,6 +17,7 @@ export class RoomUnitChatParser implements IMessageParser this._gesture = 0; this._bubble = 0; this._urls = []; + this._chatColours = null; this._messageLength = 0; return true; @@ -31,7 +33,8 @@ export class RoomUnitChatParser implements IMessageParser this._bubble = wrapper.readInt(); this.parseUrls(wrapper); - + + this._chatColours = wrapper.readString(); this._messageLength = wrapper.readInt(); return true; @@ -79,6 +82,11 @@ export class RoomUnitChatParser implements IMessageParser { return this._urls; } + + public get chatColours(): string + { + return this._chatColours; + } public get messageLength(): number { diff --git a/packages/events/src/session/RoomSessionChatEvent.ts b/packages/events/src/session/RoomSessionChatEvent.ts index 38d5435..1b0ca2a 100644 --- a/packages/events/src/session/RoomSessionChatEvent.ts +++ b/packages/events/src/session/RoomSessionChatEvent.ts @@ -25,13 +25,14 @@ export class RoomSessionChatEvent extends RoomSessionEvent private _extraParam: number; private _style: number; - constructor(type: string, session: IRoomSession, objectId: number, message: string, chatType: number, style: number = 0, links: string[] = null, extraParam: number = -1) + constructor(type: string, session: IRoomSession, objectId: number, message: string, chatType: number, style: number = 0, chatColours: string[], links: string[] = null, extraParam: number = -1) { super(type, session); this._objectId = objectId; this._message = message; this._chatType = chatType; + this._chatColours = chatColours; this._links = links; this._extraParam = extraParam; this._style = style; @@ -66,4 +67,9 @@ export class RoomSessionChatEvent extends RoomSessionEvent { return this._style; } + + public get chatColours(): string[] + { + return this._chatColours; + } } diff --git a/packages/room/src/renderer/utils/ExtendedSprite.ts b/packages/room/src/renderer/utils/ExtendedSprite.ts index 0eed5d3..28b6a31 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 } from '@nitrots/utils'; -import { GlRenderTarget, Point, Sprite, Texture, TextureSource, WebGLRenderer } from 'pixi.js'; +import { GetRenderer, TextureUtils } from '@nitrots/utils'; +import { GlRenderTarget, Point, RendererType, Sprite, Texture, TextureSource, WebGPURenderer } from 'pixi.js'; const BYTES_PER_PIXEL = 4; @@ -56,7 +56,9 @@ export class ExtendedSprite extends Sprite if((!textureSource || !textureSource.hitMap) && !ExtendedSprite.generateHitMapForTextureSource(textureSource)) return false; //@ts-ignore - const hitMap = (textureSource.hitMap as U8intclampedArray); + const hitMap = (textureSource.hitMap as Uint8Array); + + if(!hitMap) return false; let dx = (point.x + texture.frame.x); let dy = (point.y + texture.frame.y); @@ -79,28 +81,40 @@ export class ExtendedSprite extends Sprite { if(!textureSource) return false; + const renderer = GetRenderer(); const width = Math.max(Math.round(textureSource.width * textureSource.resolution), 1); const height = Math.max(Math.round(textureSource.height * textureSource.resolution), 1); - const pixels = new Uint8Array(BYTES_PER_PIXEL * width * height); - const renderer = GetRenderer() as WebGLRenderer; + let pixels: Uint8ClampedArray = null; - const renderTarget = renderer.renderTarget.getRenderTarget(textureSource); - const glRenterTarget = renderer.renderTarget.getGpuRenderTarget(renderTarget) as GlRenderTarget; + if(renderer instanceof WebGPURenderer) + { + pixels = TextureUtils.getPixels(new Texture(textureSource))?.pixels ?? null; + } - const gl = renderer.gl; + else if(renderer.type === RendererType.WEBGL) + { + pixels = new Uint8ClampedArray(BYTES_PER_PIXEL * width * height); - gl.bindFramebuffer(gl.FRAMEBUFFER, glRenterTarget.resolveTargetFramebuffer); + const renderTarget = renderer.renderTarget.getRenderTarget(textureSource); + const glRenderTarget = renderer.renderTarget.getGpuRenderTarget(renderTarget) as GlRenderTarget; - gl.readPixels( - 0, - 0, - width, - height, - gl.RGBA, - gl.UNSIGNED_BYTE, - pixels - ); + const gl = renderer.gl; + + gl.bindFramebuffer(gl.FRAMEBUFFER, glRenderTarget.resolveTargetFramebuffer); + + gl.readPixels( + 0, + 0, + width, + height, + gl.RGBA, + gl.UNSIGNED_BYTE, + pixels + ); + } + + if(!pixels) return false; //@ts-ignore textureSource.hitMap = pixels; diff --git a/packages/session/src/RoomSession.ts b/packages/session/src/RoomSession.ts index 2b4e2c9..263701a 100644 --- a/packages/session/src/RoomSession.ts +++ b/packages/session/src/RoomSession.ts @@ -69,14 +69,14 @@ export class RoomSession implements IRoomSession this._roomId = roomId; } - public sendChatMessage(text: string, styleId: number): void + public sendChatMessage(text: string, styleId: number, chatColour: string): void { - GetCommunication().connection.send(new RoomUnitChatComposer(text, styleId)); + GetCommunication().connection.send(new RoomUnitChatComposer(text, styleId, chatColour)); } - public sendShoutMessage(text: string, styleId: number): void + public sendShoutMessage(text: string, styleId: number, chatColour: string): void { - GetCommunication().connection.send(new RoomUnitChatShoutComposer(text, styleId)); + GetCommunication().connection.send(new RoomUnitChatShoutComposer(text, styleId, chatColour)); } public sendWhisperMessage(recipientName: string, text: string, styleId: number): void @@ -126,6 +126,11 @@ export class RoomSession implements IRoomSession { GetCommunication().connection.send(new RoomAmbassadorAlertComposer(userId)); } + + public sendWhisperGroupMessage(userId: number): void + { + GetCommunication().connection.send(new ChatWhisperGroupComposer(userId)); + } public sendKickMessage(userId: number): void { diff --git a/packages/session/src/handler/RoomChatHandler.ts b/packages/session/src/handler/RoomChatHandler.ts index 67903f7..cc17a8b 100644 --- a/packages/session/src/handler/RoomChatHandler.ts +++ b/packages/session/src/handler/RoomChatHandler.ts @@ -37,7 +37,7 @@ export class RoomChatHandler extends BaseHandler if(event instanceof RoomUnitChatShoutEvent) chatType = RoomSessionChatEvent.CHAT_TYPE_SHOUT; else if(event instanceof RoomUnitChatWhisperEvent) chatType = RoomSessionChatEvent.CHAT_TYPE_WHISPER; - const chatEvent = new RoomSessionChatEvent(RoomSessionChatEvent.CHAT_EVENT, session, parser.roomIndex, parser.message, chatType, parser.bubble); + const chatEvent = new RoomSessionChatEvent(RoomSessionChatEvent.CHAT_EVENT, session, parser.roomIndex, parser.message, chatType, parser.bubble, parser.chatColours); GetEventDispatcher().dispatchEvent(chatEvent); }