mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-19 23:16:21 +00:00
86 lines
2.5 KiB
TypeScript
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();
|
|
}
|
|
}
|
|
}
|
|
}
|