Improve mobile room interaction handling

This commit is contained in:
Lorenzune
2026-05-07 21:21:48 +02:00
parent 5fc4564467
commit f7fc502685
4 changed files with 133 additions and 103 deletions
+16 -1
View File
@@ -1,4 +1,4 @@
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 { 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, RoomObjectOperationType, RoomObjectUserType, RoomObjectVariable, ToolbarIconEnum } from '@nitrots/api';
import { GetCommunication, RenderRoomMessageComposer, RenderRoomThumbnailMessageComposer } from '@nitrots/communication';
import { GetConfiguration } from '@nitrots/configuration';
import { BadgeImageReadyEvent, GetEventDispatcher, NitroToolbarAnimateIconEvent, RoomBackgroundColorEvent, RoomDragEvent, RoomEngineAreaHideStateEvent, RoomEngineEvent, RoomEngineObjectEvent, RoomObjectEvent, RoomObjectFurnitureActionEvent, RoomObjectMouseEvent, RoomSessionEvent, RoomToObjectOwnAvatarMoveEvent } from '@nitrots/events';
@@ -2403,6 +2403,21 @@ export class RoomEngine implements IRoomEngine, IRoomCreator, IRoomEngineService
private handleRoomDragging(canvas: IRoomRenderingCanvas, x: number, y: number, type: string, altKey: boolean, ctrlKey: boolean, shiftKey: boolean): boolean
{
const selectedData = this.getSelectedRoomObjectData(this._activeRoomId);
if(selectedData &&
((selectedData.operation === RoomObjectOperationType.OBJECT_PLACE) ||
(selectedData.operation === RoomObjectOperationType.OBJECT_MOVE) ||
(selectedData.operation === RoomObjectOperationType.OBJECT_MOVE_TO)))
{
this._activeRoomIsDragged = false;
this._activeRoomWasDragged = false;
this._activeRoomDragX = 0;
this._activeRoomDragY = 0;
return false;
}
if(this._areaSelectionManager.areaSelectionState === RoomAreaSelectionManager.SELECTING)
{
this._activeRoomIsDragged = false;
@@ -396,6 +396,7 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb
case RoomObjectOperationType.OBJECT_PLACE:
if(category === RoomObjectCategory.ROOM)
{
this.handleObjectPlace(event, roomId);
this.placeObject(roomId, (event instanceof RoomObjectTileMouseEvent), (event instanceof RoomObjectWallMouseEvent));
}
@@ -405,6 +406,7 @@ export class RoomObjectEventHandler implements IRoomCanvasMouseListener, IRoomOb
{
case RoomObjectUserType.MONSTER_PLANT:
case RoomObjectUserType.RENTABLE_BOT:
this.handleObjectPlace(event, roomId);
this.placeObject(roomId, (event instanceof RoomObjectTileMouseEvent), (event instanceof RoomObjectWallMouseEvent));
break;
default:
@@ -11,6 +11,19 @@ export class TileCursorLogic extends RoomObjectLogicBase
private _lastEventId: string;
private _isHidden: boolean;
private static isMobileTouchDevice(): boolean
{
try
{
return (typeof window !== 'undefined')
&& window.matchMedia('(pointer: coarse), (hover: none)').matches;
}
catch
{
return false;
}
}
constructor()
{
super();
@@ -40,7 +53,7 @@ export class TileCursorLogic extends RoomObjectLogicBase
if(this.object)
{
if(this._isHidden)
if(this._isHidden || TileCursorLogic.isMobileTouchDevice())
{
this.object.setState(TileCursorLogic.CURSOR_HIDDEN_STATE, 0);
}