中化加油站项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

118 lines
3.5 KiB

import { Vector3 } from "@babylonjs/core";
import { InfoManager } from "src/app/babylon/controller/info-manager";
import { SceneManager } from "src/app/babylon/controller/scene-manager";
import { BuildingStatus } from "src/app/babylon/controller/status/building-status";
import { StatusManager } from "src/app/babylon/controller/status/status-manager";
import { GizmoTool } from "src/app/babylon/tool/gizmo-tool";
import { BuildingData } from "../../data/institution/building/building-data";
import { TransformData } from "../../data/transform-data";
import { ModelInfo_building } from "../model/model-info-building";
//基本建筑信息
export class BuildingInfo {
/**
* 所属建筑的数据
*/
buildingData: BuildingData;
/**
* 本模型的数据(室外建筑或室内某层)
*/
private modelInfo: ModelInfo_building;
isDisposed = false;//已经释放了
isEnable = true;//显示状态
constructor(buildingData: BuildingData, modelInfo: ModelInfo_building) {
this.buildingData = buildingData;
this.ModelInfo = modelInfo;
this.isDisposed = false;
}
/**
* 本模型的数据(室外建筑或室内某层)
*/
get ModelInfo() {
return this.modelInfo;
}
set ModelInfo(value: ModelInfo_building) {
this.modelInfo = value;
if (this.isDisposed) {
this.dispose();
return;
}
if (value != null) {
let modelInfo = this.modelInfo;
if (modelInfo.modelData.transformData == null) {
modelInfo.modelData.transformData = new TransformData();
}
if (
modelInfo.modelData.transformData.originalScaling.equals(Vector3.Zero())
) {
//表示是新建
modelInfo.modelData.transformData.position = modelInfo.modelBox.position;
modelInfo.modelData.transformData.rotation = modelInfo.modelBox.rotation;
modelInfo.modelData.transformData.rotationQuaternion =
modelInfo.modelBox.rotationQuaternion;
modelInfo.modelData.transformData.originalScaling = modelInfo.modelBox.absoluteScaling.clone();
modelInfo.modelData.transformData.scaling = modelInfo.modelBox.absoluteScaling.clone();
} //已有数据,进行还原
else {
modelInfo.modelBox.position = modelInfo.modelData.transformData.position;
modelInfo.modelBox.rotation = modelInfo.modelData.transformData.rotation;
modelInfo.modelBox.rotationQuaternion =
modelInfo.modelData.transformData.rotationQuaternion;
}
this.ModelInfo.buildingType = this.buildingData.buildingType;
this.ModelInfo.setEnable(this.isEnable);
this.onSetModel();
//this.initFacility();
}
// if (!this.isEnable) {
// }
// else {
// }
}
/**
* 初始化设备
*/
initFacility() {
if (StatusManager.s_currentStatus instanceof BuildingStatus) {
InfoManager.createFacilityInfos(this.buildingData.outdoorData, this);
this.ModelInfo.showFacilityUI(false);
}
}
setEnable(enable: boolean) {
this.isEnable = enable;
if (this.ModelInfo != null) {
this.ModelInfo.setEnable(enable);
}
}
/**
* 设置模型了
*/
onSetModel() {
}
//释放
dispose() {
this.isDisposed = true;
StatusManager.getStatus(BuildingStatus).buildingWindow.clearFacilityInfos(this);
if (this.modelInfo != null) {
if (GizmoTool.s_nowPickAim == this.modelInfo) {
GizmoTool.onPickMeshInfoObservable.notifyObservers(null);
}
SceneManager.destroyModel(this.modelInfo);
}
}
}