Browse Source

修复事件系统错乱的bug,

因为打包时代码混淆导致方法名重复,因此不能作为识别的key,改为每个事件类自定义唯一key,后期尝试改进
dev
刘向辉 3 years ago
parent
commit
b610b87ef0
  1. 2
      README.md
  2. 9
      src/app/babylon/controller/event-manager/event-base.ts
  3. 12
      src/app/babylon/controller/event-manager/event-manager.ts
  4. 6
      src/app/babylon/controller/event-manager/events/event-change-facility.ts
  5. 3
      src/app/babylon/controller/event-manager/events/event-get-markplandata-success.ts
  6. 4
      src/app/babylon/controller/event-manager/events/event-keyboard-input.ts
  7. 4
      src/app/babylon/controller/event-manager/events/event-loading-change.ts
  8. 6
      src/app/babylon/controller/event-manager/events/event-mark-info-change.ts
  9. 4
      src/app/babylon/controller/event-manager/events/event-modelinfo-change.ts
  10. 2
      src/app/babylon/controller/inputController.ts
  11. 1
      src/app/babylon/controller/scene-manager.ts
  12. 1
      src/app/babylon/model/info/mark/model-info-mark.ts
  13. 1
      src/app/babylon/view/mark-window/mark-window.ts

2
README.md

@ -17,7 +17,7 @@
> 三维部分
- [🚩 重大变更]
- [🚩 重大变更] 找到发布后 EventManager 错乱的问题:代码混淆导致类名重复! 更改对事件分类的逻辑,暂时采用自定义名称的方式。 后期需要尝试改进。
- [🌱 新增] 无
- [🍀 完善] 修复多个单位切换时,未重新获取应急预案信息的问题
- [🍀 完善] 增加打印,排查部署与本地差异: 部署后新建单位创建应急预案不成功,本地未出现此情况

9
src/app/babylon/controller/event-manager/event-base.ts

@ -6,7 +6,12 @@ export class Event_Base {
//属性 自定义
/**
* key ()
*
*/
getTypeKey() {
return "";
}
}

12
src/app/babylon/controller/event-manager/event-manager.ts

@ -43,7 +43,8 @@ export class EventManager {
let result = null;
for (let i = 0; i < EventManager.s_allEventContainer.length; i++) {
if (EventManager.s_allEventContainer[i].key == c.name) {
let obj = new c();
if (EventManager.s_allEventContainer[i].key == obj.getTypeKey()) {
result = (EventManager.s_allEventContainer[i]);
// console.log("找到已有的event" + (c.name));
return result;
@ -73,7 +74,7 @@ export class EventManager {
let instance = EventManager.getEvent<T>(c);
console.log("添加监听", instance.key);
return instance.observable.add(callback, mask, insertFirst, scope, unregisterOnFirstCall);
}
@ -117,6 +118,7 @@ export class EventManager {
if (instance == null) {
return;
}
// console.log("派发事件", instance.key);
instance.observable.notifyObservers(eventData);
}
@ -130,9 +132,11 @@ class EventContainer<T extends Event_Base> {
key: string;
observable: Observable<T>;
constructor(c: { new(): T }) {
let obj = new c();
this.key = c.name;
// console.log("EventContainer===" + this.key);
//this.key = c.name;
this.key = obj.getTypeKey();
console.log("EventContainer===" + this.key);
this.observable = new Observable<T>();
}
}

6
src/app/babylon/controller/event-manager/events/event-change-facility.ts

@ -8,6 +8,8 @@ import { EventManager } from "../event-manager";
export class Event_ChangeFacility extends Event_Base {
modeleData: ModelData;
modelChangeType: ModelChangeType;
belongtoBuilding: BuildingInfo;//属于哪个建筑
@ -28,4 +30,8 @@ export class Event_ChangeFacility extends Event_Base {
EventManager.dispatch(Event_ChangeFacility, eventInfo);
}
getTypeKey() {
return "Event_ChangeFacility";
}
}

3
src/app/babylon/controller/event-manager/events/event-get-markplandata-success.ts

@ -20,5 +20,8 @@ export class Event_GetAllMarkPlanData extends Event_Base {
}
getTypeKey() {
return "Event_GetAllMarkPlanData";
}
}

4
src/app/babylon/controller/event-manager/events/event-keyboard-input.ts

@ -14,4 +14,8 @@ export class Event_KeyboardInput extends Event_Base {
EventManager.dispatch<Event_KeyboardInput>(Event_KeyboardInput, eventData);
}
getTypeKey() {
return "Event_KeyboardInput";
}
}

4
src/app/babylon/controller/event-manager/events/event-loading-change.ts

@ -26,4 +26,8 @@ export class Event_LoadingChange extends Event_Base {
EventManager.dispatch<Event_LoadingChange>(Event_LoadingChange, eventData);
Event_LoadingChange.isLoading = showLoading;
}
getTypeKey() {
return "Event_LoadingChange";
}
}

6
src/app/babylon/controller/event-manager/events/event-mark-info-change.ts

@ -13,13 +13,17 @@ export class Event_MarkInfoChange extends Event_Base {
markInfo: ModelInfo_mark;
static dispatch(eventType: MarkInfoChangeType, markInfo: ModelInfo_mark) {
console.log("派发Event_MarkInfoChange");
// console.log("派发Event_MarkInfoChange");
let eventInfo = new Event_MarkInfoChange();
eventInfo.eventType = eventType;
eventInfo.markInfo = markInfo;
EventManager.dispatch(Event_MarkInfoChange, eventInfo);
}
getTypeKey() {
return "Event_MarkInfoChange";
}
}
/**

4
src/app/babylon/controller/event-manager/events/event-modelinfo-change.ts

@ -30,4 +30,8 @@ export class Event_ModelInfoChange extends Event_Base {
eventData.setInfo(modeleInfo, modelChangeType);
EventManager.dispatch<Event_ModelInfoChange>(Event_ModelInfoChange, eventData);
}
getTypeKey() {
return "Event_ModelInfoChange";
}
}

2
src/app/babylon/controller/inputController.ts

@ -96,9 +96,7 @@ export class InputController {
//添加监听事件
EventManager.addListener<Event_MarkInfoChange>(Event_MarkInfoChange, (eventData, eventState) => {
this.markInfo = eventData.markInfo;
console.trace("Event_MarkInfoChange==111==");
if (eventData.markInfo == null) {
console.trace("Event_MarkInfoChange==222==");
return;
}
this.markData = eventData.markInfo.markData;

1
src/app/babylon/controller/scene-manager.ts

@ -428,7 +428,6 @@ export class SceneManager {
static showDebug = false;
//按键按下
static onKeyDown(this: GlobalEventHandlers, ev: KeyboardEvent) {
console.log("onKeyDown");
if (ev.altKey && ev.key == 'd' && ModeManager.isDebug) {
SceneManager.showDebug = !SceneManager.showDebug;
if (SceneManager.showDebug) {

1
src/app/babylon/model/info/mark/model-info-mark.ts

@ -195,7 +195,6 @@ export class ModelInfo_mark extends ModelInfo {
* @param select
*/
onSelect(select: boolean) {
console.log("onSelect", select);
this.isSelect = select;
// this.lookAt();
if (select) {

1
src/app/babylon/view/mark-window/mark-window.ts

@ -965,7 +965,6 @@ export class MarkWindow extends UIBase {
* @param eventData
*/
onKeyboardInput(eventData: Event_KeyboardInput) {
console.log("onKeyboardInput", eventData);
if (eventData.data != null && eventData.data.key == "Delete") // 删除。 后期看是否加入 Backspace 退格
{
this.deleteMarkInfo(this.currentMarkInfo);

Loading…
Cancel
Save