Files
zhengte.babylonjs-sdk/src/babylonjs/AppDropZone.ts
2026-05-13 11:28:49 +08:00

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();
}
}