85 lines
1.8 KiB
TypeScript
85 lines
1.8 KiB
TypeScript
import { Scene, Vector3 } from '@babylonjs/core';
|
|
import { AppPlacementWall, WallConfig, PlacementZoneInfo } from './AppPlacementWall';
|
|
|
|
/**
|
|
* 放置区域配置
|
|
*/
|
|
export interface DropZoneConfig {
|
|
walls: WallConfig[]; // 墙面配置数组
|
|
color?: string; // 颜色(十六进制)
|
|
alpha?: number; // 透明度
|
|
thickness?: number; // 厚度
|
|
showBorder?: boolean; // 是否显示边框
|
|
borderColor?: string; // 边框颜色
|
|
}
|
|
|
|
/**
|
|
* 放置区域管理类(使用新的墙面参数化方案)
|
|
*/
|
|
export class AppDropZone {
|
|
private scene: Scene;
|
|
private placementWall: AppPlacementWall;
|
|
|
|
constructor(scene: Scene) {
|
|
this.scene = scene;
|
|
this.placementWall = new AppPlacementWall(scene);
|
|
}
|
|
|
|
/**
|
|
* 生成放置区域
|
|
* @param config 配置参数
|
|
*/
|
|
generateDropZones(config: DropZoneConfig): PlacementZoneInfo[] {
|
|
return this.placementWall.generatePlacementAreas(config);
|
|
}
|
|
|
|
/**
|
|
* 获取所有放置区域
|
|
*/
|
|
getPlacementZones(): PlacementZoneInfo[] {
|
|
return this.placementWall.getPlacementZones();
|
|
}
|
|
|
|
/**
|
|
* 根据墙面名称获取放置区域
|
|
*/
|
|
getZonesByWall(wallName: string): PlacementZoneInfo[] {
|
|
return this.placementWall.getZonesByWall(wallName);
|
|
}
|
|
|
|
/**
|
|
* 根据索引获取特定放置区域
|
|
*/
|
|
getZone(wallName: string, index: number): PlacementZoneInfo | undefined {
|
|
return this.placementWall.getZone(wallName, index);
|
|
}
|
|
|
|
/**
|
|
* 显示所有放置区域
|
|
*/
|
|
show(): void {
|
|
this.placementWall.show();
|
|
}
|
|
|
|
/**
|
|
* 隐藏所有放置区域
|
|
*/
|
|
hide(): void {
|
|
this.placementWall.hide();
|
|
}
|
|
|
|
/**
|
|
* 清除所有放置区域
|
|
*/
|
|
clearAll(): void {
|
|
this.placementWall.clearAll();
|
|
}
|
|
|
|
/**
|
|
* 销毁
|
|
*/
|
|
dispose(): void {
|
|
this.placementWall.dispose();
|
|
}
|
|
}
|