Files
Nitro-V3/src/api/wired/WiredSelectionVisualizer.ts
T
DuckieTM 7feb10ab15 🆙 Init V3
2026-01-31 09:10:52 +01:00

86 lines
2.5 KiB
TypeScript

import { GetRoomEngine, IRoomObject, IRoomObjectSpriteVisualization, RoomObjectCategory, WiredFilter } from '@nitrots/nitro-renderer';
export class WiredSelectionVisualizer
{
private static _selectionShader: WiredFilter = new WiredFilter({
lineColor: [ 1, 1, 1 ],
color: [ 0.6, 0.6, 0.6 ]
});
public static show(furniId: number): void
{
WiredSelectionVisualizer.applySelectionShader(WiredSelectionVisualizer.getRoomObject(furniId));
}
public static hide(furniId: number): void
{
WiredSelectionVisualizer.clearSelectionShader(WiredSelectionVisualizer.getRoomObject(furniId));
}
public static clearSelectionShaderFromFurni(furniIds: number[]): void
{
for(const furniId of furniIds)
{
WiredSelectionVisualizer.clearSelectionShader(WiredSelectionVisualizer.getRoomObject(furniId));
}
}
public static applySelectionShaderToFurni(furniIds: number[]): void
{
for(const furniId of furniIds)
{
WiredSelectionVisualizer.applySelectionShader(WiredSelectionVisualizer.getRoomObject(furniId));
}
}
private static getRoomObject(objectId: number): IRoomObject
{
const roomEngine = GetRoomEngine();
return roomEngine.getRoomObject(roomEngine.activeRoomId, objectId, RoomObjectCategory.FLOOR);
}
private static applySelectionShader(roomObject: IRoomObject): void
{
if(!roomObject) return;
const visualization = (roomObject.visualization as IRoomObjectSpriteVisualization);
if(!visualization) return;
for(const sprite of visualization.sprites)
{
if(sprite.blendMode === 'add') continue;
if(!sprite.filters) sprite.filters = [];
sprite.filters.push(WiredSelectionVisualizer._selectionShader);
sprite.increaseUpdateCounter();
}
}
private static clearSelectionShader(roomObject: IRoomObject): void
{
if(!roomObject) return;
const visualization = (roomObject.visualization as IRoomObjectSpriteVisualization);
if(!visualization) return;
for(const sprite of visualization.sprites)
{
if(!sprite.filters) continue;
const index = sprite.filters.indexOf(WiredSelectionVisualizer._selectionShader);
if(index >= 0)
{
sprite.filters.splice(index, 1);
sprite.increaseUpdateCounter();
}
}
}
}