🆙 added Backgrounds to the renderer

This commit is contained in:
duckietm 2025-05-20 14:16:05 +02:00
parent e0c0c06c99
commit 7c40e69c75
10 changed files with 157 additions and 3 deletions

View File

@ -0,0 +1,21 @@
import { IMessageComposer } from '@nitrots/api';
export class RoomUnitBackgroundComposer implements IMessageComposer<ConstructorParameters<typeof RoomUnitBackgroundComposer>>
{
private _data: ConstructorParameters<typeof RoomUnitBackgroundComposer>;
constructor(backgroundImage: number, backgroundStand: number, backgroundOverlay: number)
{
this._data = [ backgroundImage, backgroundStand, backgroundOverlay ];
}
public getMessageArray()
{
return this._data;
}
public dispose(): void
{
return;
}
}

View File

@ -1,5 +1,6 @@
export * from './chat'; export * from './chat';
export * from './RoomUnitActionComposer'; export * from './RoomUnitActionComposer';
export * from './RoomUnitBackgroundComposer';
export * from './RoomUnitDanceComposer'; export * from './RoomUnitDanceComposer';
export * from './RoomUnitDropHandItemComposer'; export * from './RoomUnitDropHandItemComposer';
export * from './RoomUnitGiveHandItemComposer'; export * from './RoomUnitGiveHandItemComposer';

View File

@ -7,6 +7,9 @@ export class RoomUnitInfoParser implements IMessageParser
private _gender: string; private _gender: string;
private _motto: string; private _motto: string;
private _achievementScore: number; private _achievementScore: number;
private _backgroundId: number;
private _standId: number;
private _overlayId: number;
public flush(): boolean public flush(): boolean
{ {
@ -15,6 +18,9 @@ export class RoomUnitInfoParser implements IMessageParser
this._gender = 'M'; this._gender = 'M';
this._motto = null; this._motto = null;
this._achievementScore = 0; this._achievementScore = 0;
this._backgroundId = 0;
this._standId = 0;
this._overlayId = 0;
return true; return true;
} }
@ -56,4 +62,19 @@ export class RoomUnitInfoParser implements IMessageParser
{ {
return this._achievementScore; return this._achievementScore;
} }
}
public get backgroundId(): number
{
return this._backgroundId;
}
public get standId(): number
{
return this._standId;
}
public get overlayId(): number
{
return this._overlayId;
}
}

View File

@ -27,6 +27,9 @@ export class RoomUnitParser implements IMessageParser
const id = wrapper.readInt(); const id = wrapper.readInt();
const username = wrapper.readString(); const username = wrapper.readString();
const custom = wrapper.readString(); const custom = wrapper.readString();
const background = wrapper.readInt();
const stand = wrapper.readInt();
const overlay = wrapper.readInt();
let figure = wrapper.readString(); let figure = wrapper.readString();
const roomIndex = wrapper.readInt(); const roomIndex = wrapper.readInt();
const x = wrapper.readInt(); const x = wrapper.readInt();
@ -40,6 +43,9 @@ export class RoomUnitParser implements IMessageParser
user.dir = direction; user.dir = direction;
user.name = username; user.name = username;
user.custom = custom; user.custom = custom;
user.background = background;
user.stand = stand;
user.overlay = overlay;
user.x = x; user.x = x;
user.y = y; user.y = y;
user.z = z; user.z = z;

View File

@ -14,6 +14,9 @@ export class UserMessageData
private _figure: string = ''; private _figure: string = '';
private _custom: string = ''; private _custom: string = '';
private _activityPoints: number = 0; private _activityPoints: number = 0;
private _background: number = 0;
private _stand: number = 0;
private _overlay: number = 0
private _webID: number = 0; private _webID: number = 0;
private _groupID: number = 0; private _groupID: number = 0;
private _groupStatus: number = 0; private _groupStatus: number = 0;
@ -178,6 +181,36 @@ export class UserMessageData
this._activityPoints = k; this._activityPoints = k;
} }
} }
public get background(): number
{
return this._background;
}
public set background(k: number)
{
this._background = k;
}
public get stand(): number
{
return this._stand;
}
public set stand(k: number)
{
this._stand = k;
}
public get overlay(): number
{
return this._overlay;
}
public set overlay(k: number)
{
this._overlay = k;
}
public get webID(): number public get webID(): number
{ {

View File

@ -1808,6 +1808,27 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService
return true; return true;
} }
public getFurniLocation(roomId: number, objectId: number, isWallItem: boolean): string
{
return isWallItem
? this.getRoomObjectWall(roomId, objectId).getLocation().toString()
: this.getRoomObjectFloor(roomId, objectId).getLocation().toString();
}
public getFurniDirection(roomId: number, objectId: number, isWallItem: boolean): string
{
return isWallItem
? this.getRoomObjectWall(roomId, objectId).getDirection().toString()
: this.getRoomObjectFloor(roomId, objectId).getDirection().toString();
}
public getFurniState(roomId: number, objectId: number, isWallItem: boolean): number
{
return isWallItem
? this.getRoomObjectWall(roomId, objectId).getState()
: this.getRoomObjectFloor(roomId, objectId).getState();
}
public addRoomObjectUser(roomId: number, objectId: number, location: IVector3D, direction: IVector3D, headDirection: number, type: number, figure: string): boolean public addRoomObjectUser(roomId: number, objectId: number, location: IVector3D, direction: IVector3D, headDirection: number, type: number, figure: string): boolean
{ {

View File

@ -1,5 +1,5 @@
import { IRoomSession, IUserDataManager, RoomControllerLevel, RoomTradingLevelEnum } from '@nitrots/api'; import { IRoomSession, IUserDataManager, RoomControllerLevel, RoomTradingLevelEnum } from '@nitrots/api';
import { BotRemoveComposer, ChangeQueueMessageComposer, CompostPlantMessageComposer, FurnitureMultiStateComposer, GetCommunication, GetPetCommandsComposer, HarvestPetMessageComposer, MoodlightSettingsComposer, MoodlightSettingsSaveComposer, MoodlightTogggleStateComposer, NewUserExperienceScriptProceedComposer, OpenPetPackageMessageComposer, OpenPresentComposer, PeerUsersClassificationMessageComposer, PetMountComposer, PetRemoveComposer, PollAnswerComposer, PollRejectComposer, PollStartComposer, RemovePetSaddleComposer, RoomAmbassadorAlertComposer, RoomBanUserComposer, RoomDoorbellAccessComposer, RoomEnterComposer, RoomGiveRightsComposer, RoomKickUserComposer, RoomModerationSettings, RoomMuteUserComposer, RoomTakeRightsComposer, RoomUnitActionComposer, RoomUnitChatComposer, RoomUnitChatShoutComposer, RoomUnitChatWhisperComposer, RoomUnitDanceComposer, RoomUnitPostureComposer, RoomUnitSignComposer, RoomUnitTypingStartComposer, RoomUnitTypingStopComposer, RoomUsersClassificationMessageComposer, SetClothingChangeDataMessageComposer, TogglePetBreedingComposer, TogglePetRidingComposer, UsePetProductComposer, UserMottoComposer, VotePollCounterMessageComposer } from '@nitrots/communication'; import { BotRemoveComposer, ChangeQueueMessageComposer, CompostPlantMessageComposer, FurnitureMultiStateComposer, GetCommunication, GetPetCommandsComposer, HarvestPetMessageComposer, MoodlightSettingsComposer, MoodlightSettingsSaveComposer, MoodlightTogggleStateComposer, NewUserExperienceScriptProceedComposer, OpenPetPackageMessageComposer, OpenPresentComposer, PeerUsersClassificationMessageComposer, PetMountComposer, PetRemoveComposer, PollAnswerComposer, PollRejectComposer, PollStartComposer, RemovePetSaddleComposer, RoomAmbassadorAlertComposer, RoomBanUserComposer, RoomDoorbellAccessComposer, RoomEnterComposer, RoomGiveRightsComposer, RoomKickUserComposer, RoomModerationSettings, RoomMuteUserComposer, RoomTakeRightsComposer, RoomUnitActionComposer, RoomUnitBackgroundComposer, RoomUnitChatComposer, RoomUnitChatShoutComposer, RoomUnitChatWhisperComposer, RoomUnitDanceComposer, RoomUnitPostureComposer, RoomUnitSignComposer, RoomUnitTypingStartComposer, RoomUnitTypingStopComposer, RoomUsersClassificationMessageComposer, SetClothingChangeDataMessageComposer, TogglePetBreedingComposer, TogglePetRidingComposer, UsePetProductComposer, UserMottoComposer, VotePollCounterMessageComposer } from '@nitrots/communication';
import { RoomSessionEvent } from '@nitrots/events'; import { RoomSessionEvent } from '@nitrots/events';
import { UserDataManager } from './UserDataManager'; import { UserDataManager } from './UserDataManager';
@ -89,6 +89,11 @@ export class RoomSession implements IRoomSession
if(isTyping) GetCommunication().connection.send(new RoomUnitTypingStartComposer()); if(isTyping) GetCommunication().connection.send(new RoomUnitTypingStartComposer());
else GetCommunication().connection.send(new RoomUnitTypingStopComposer()); else GetCommunication().connection.send(new RoomUnitTypingStopComposer());
} }
public sendBackgroundMessage(backgroundImage: number, backgroundStand: number, backgroundOverlay: number): void
{
GetCommunication().connection.send(new RoomUnitBackgroundComposer(backgroundImage, backgroundStand, backgroundOverlay));
}
public sendMottoMessage(motto: string): void public sendMottoMessage(motto: string): void
{ {

View File

@ -9,6 +9,9 @@ export class RoomUserData implements IRoomUserData
private _figure: string = ''; private _figure: string = '';
private _custom: string = ''; private _custom: string = '';
private _activityPoints: number; private _activityPoints: number;
private _background: number;
private _stand: number;
private _overlay: number;
private _webID: number = 0; private _webID: number = 0;
private _groupID: number = 0; private _groupID: number = 0;
private _groupStatus: number = 0; private _groupStatus: number = 0;
@ -45,6 +48,36 @@ export class RoomUserData implements IRoomUserData
{ {
this._activityPoints = k; this._activityPoints = k;
} }
public get background(): number
{
return this._background;
}
public set background(k: number)
{
this._background = k;
}
public get stand(): number
{
return this._stand;
}
public set stand(k: number)
{
this._stand = k;
}
public get overlay(): number
{
return this._overlay;
}
public set overlay(k: number)
{
this._overlay = k;
}
public get name(): string public get name(): string
{ {

View File

@ -144,6 +144,17 @@ export class UserDataManager implements IUserDataManager
userData.custom = custom; userData.custom = custom;
} }
public updateBackground(roomIndex: number, background: number, stand: number, overlay: number): void
{
const userData = this.getUserDataByIndex(roomIndex);
if(!userData) return;
userData.background = background;
userData.stand = stand;
userData.overlay = overlay;
}
public updateAchievementScore(roomIndex: number, score: number): void public updateAchievementScore(roomIndex: number, score: number): void
{ {

View File

@ -100,8 +100,10 @@ export class RoomUsersHandler extends BaseHandler
session.userDataManager.updateFigure(parser.unitId, parser.figure, parser.gender, false, false); session.userDataManager.updateFigure(parser.unitId, parser.figure, parser.gender, false, false);
session.userDataManager.updateMotto(parser.unitId, parser.motto); session.userDataManager.updateMotto(parser.unitId, parser.motto);
session.userDataManager.updateAchievementScore(parser.unitId, parser.achievementScore); session.userDataManager.updateAchievementScore(parser.unitId, parser.achievementScore);
session.userDataManager.updateBackground(parser.unitId, parser.backgroundId, parser.standId, parser.overlayId);
GetEventDispatcher().dispatchEvent(new RoomSessionUserFigureUpdateEvent(session, parser.unitId, parser.figure, parser.gender, parser.motto, parser.achievementScore)); GetEventDispatcher().dispatchEvent(new RoomSessionUserFigureUpdateEvent(session, parser.unitId, parser.figure, parser.gender, parser.motto, parser.achievementScore, parser.backgroundId, parser.standId, parser.overlayId));
} }