You've already forked Nitro_Render_V3
mirror of
https://github.com/duckietm/Nitro_Render_V3.git
synced 2026-06-20 15:36:18 +00:00
fix(room): support wired click-user controls
This commit is contained in:
@@ -65,6 +65,7 @@ export interface IRoomEngine
|
|||||||
getFurnitureWallName(typeId: number, extra?: string): string;
|
getFurnitureWallName(typeId: number, extra?: string): string;
|
||||||
selectRoomObject(roomId: number, objectId: number, objectCategory: number): void;
|
selectRoomObject(roomId: number, objectId: number, objectCategory: number): void;
|
||||||
setSelectedAvatar(roomId: number, objectId: number): void;
|
setSelectedAvatar(roomId: number, objectId: number): void;
|
||||||
|
clearSelectedAvatar(roomId: number): void;
|
||||||
cancelRoomObjectInsert(): void;
|
cancelRoomObjectInsert(): void;
|
||||||
getPetColorResult(petIndex: number, paletteIndex: number): IPetColorResult;
|
getPetColorResult(petIndex: number, paletteIndex: number): IPetColorResult;
|
||||||
getPetColorResultsForTag(petIndex: number, tagName: string): IPetColorResult[];
|
getPetColorResultsForTag(petIndex: number, tagName: string): IPetColorResult[];
|
||||||
|
|||||||
@@ -2285,8 +2285,6 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService
|
|||||||
|
|
||||||
private handleRoomDragging(canvas: IRoomRenderingCanvas, x: number, y: number, type: string, altKey: boolean, ctrlKey: boolean, shiftKey: boolean): boolean
|
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)
|
if(this._areaSelectionManager.areaSelectionState === RoomAreaSelectionManager.SELECTING)
|
||||||
{
|
{
|
||||||
this._activeRoomIsDragged = false;
|
this._activeRoomIsDragged = false;
|
||||||
@@ -2521,11 +2519,18 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService
|
|||||||
|
|
||||||
public setSelectedAvatar(roomId: number, objectId: number): void
|
public setSelectedAvatar(roomId: number, objectId: number): void
|
||||||
{
|
{
|
||||||
if(this._roomObjectEventHandler) return;
|
if(!this._roomObjectEventHandler) return;
|
||||||
|
|
||||||
this._roomObjectEventHandler.setSelectedAvatar(roomId, objectId, true);
|
this._roomObjectEventHandler.setSelectedAvatar(roomId, objectId, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public clearSelectedAvatar(roomId: number): void
|
||||||
|
{
|
||||||
|
if(!this._roomObjectEventHandler) return;
|
||||||
|
|
||||||
|
this._roomObjectEventHandler.clearSelectedAvatar(roomId);
|
||||||
|
}
|
||||||
|
|
||||||
public cancelRoomObjectInsert(): void
|
public cancelRoomObjectInsert(): void
|
||||||
{
|
{
|
||||||
if(!this._roomObjectEventHandler) return;
|
if(!this._roomObjectEventHandler) return;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import { SelectedRoomObjectData } from './utils';
|
|||||||
|
|
||||||
export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomObjectEventManager
|
export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomObjectEventManager
|
||||||
{
|
{
|
||||||
|
private static readonly CLICK_USER_LOOK_DELAY_MS = 120;
|
||||||
private _eventIds: Map<number, Map<string, string>> = new Map();
|
private _eventIds: Map<number, Map<string, string>> = new Map();
|
||||||
|
|
||||||
private _selectedAvatarId: number = -1;
|
private _selectedAvatarId: number = -1;
|
||||||
@@ -17,6 +18,7 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb
|
|||||||
private _selectedObjectCategory: number = -2;
|
private _selectedObjectCategory: number = -2;
|
||||||
private _whereYouClickIsWhereYouGo: boolean = true;
|
private _whereYouClickIsWhereYouGo: boolean = true;
|
||||||
private _objectPlacementSource: string = null;
|
private _objectPlacementSource: string = null;
|
||||||
|
private _pendingAvatarLookTimeout: ReturnType<typeof setTimeout> = null;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly _roomEngine: IRoomEngineServices)
|
private readonly _roomEngine: IRoomEngineServices)
|
||||||
@@ -2080,6 +2082,8 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb
|
|||||||
{
|
{
|
||||||
if(!this._roomEngine) return;
|
if(!this._roomEngine) return;
|
||||||
|
|
||||||
|
this.clearPendingAvatarLook();
|
||||||
|
|
||||||
const _local_4 = RoomObjectCategory.UNIT;
|
const _local_4 = RoomObjectCategory.UNIT;
|
||||||
const _local_5 = this._roomEngine.getRoomObject(k, this._selectedAvatarId, _local_4);
|
const _local_5 = this._roomEngine.getRoomObject(k, this._selectedAvatarId, _local_4);
|
||||||
|
|
||||||
@@ -2106,7 +2110,18 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb
|
|||||||
|
|
||||||
const location = _local_5.getLocation();
|
const location = _local_5.getLocation();
|
||||||
|
|
||||||
if(location) GetCommunication().connection.send(new RoomUnitLookComposer(~~(location.x), ~~(location.y)));
|
if(location)
|
||||||
|
{
|
||||||
|
this._pendingAvatarLookTimeout = setTimeout(() =>
|
||||||
|
{
|
||||||
|
this._pendingAvatarLookTimeout = null;
|
||||||
|
|
||||||
|
if(this.shouldSuppressAvatarLook()) return;
|
||||||
|
if(this._selectedAvatarId !== _arg_2) return;
|
||||||
|
|
||||||
|
GetCommunication().connection.send(new RoomUnitLookComposer(~~(location.x), ~~(location.y)));
|
||||||
|
}, RoomObjectEventHandler.CLICK_USER_LOOK_DELAY_MS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2119,6 +2134,26 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public clearSelectedAvatar(roomId: number): void
|
||||||
|
{
|
||||||
|
this.setSelectedAvatar(roomId, 0, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private clearPendingAvatarLook(): void
|
||||||
|
{
|
||||||
|
if(!this._pendingAvatarLookTimeout) return;
|
||||||
|
|
||||||
|
clearTimeout(this._pendingAvatarLookTimeout);
|
||||||
|
this._pendingAvatarLookTimeout = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private shouldSuppressAvatarLook(): boolean
|
||||||
|
{
|
||||||
|
const control = (globalThis as any).__nitroAvatarClickControl;
|
||||||
|
|
||||||
|
return !!control && (control.suppressRotateUntil > Date.now());
|
||||||
|
}
|
||||||
|
|
||||||
private resetSelectedObjectData(roomId: number): void
|
private resetSelectedObjectData(roomId: number): void
|
||||||
{
|
{
|
||||||
if(!this._roomEngine) return;
|
if(!this._roomEngine) return;
|
||||||
|
|||||||
Reference in New Issue
Block a user