网上演练贵港万达广场(人员密集)
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.
 
 
 

331 lines
11 KiB

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using AX.MessageSystem;
/// <summary>
/// 属性设置按钮
/// </summary>
public class AttributeSetting : BaseButton
{
private static AttributeSetting instance;
public static AttributeSetting Instance
{
get
{
if (instance == null)
{
GameObject obj = Resources.Load<GameObject>("Common/AttributeSetting");
GameObject clone = Instantiate(obj, GameObject.Find("Canvas").transform);
clone.transform.SetAsFirstSibling();
clone.name = "AttributeSetting";
instance = clone.GetComponent<AttributeSetting>();
instance.init();
}
return instance;
}
}
private GameObject chooseObj;
private List<CloneObjType> ShowAttriBtnTypeList;
private BaseAttributeSet CurInstance;
private void init()
{
gameObject.SetActive(false);
InitShowAttriBtnTypeList();
}
public override void OnEnable()
{
base.OnEnable();
MessageDispatcher.AddListener("CANCEL_SELECTED_COMMAND", EscCancelSelected);//ESC取消选中处理
MessageDispatcher.AddListener("CANCEL_OBJ_SELECTED", CancelObjSelected);
MessageDispatcher.AddListener("DELETE_COMMAND", ObjDeleted);
MessageDispatcher.AddListener("GROUP_DISMISS", ObjDeleted);//删除组
}
public override void OnDisable()
{
base.OnDisable();
MessageDispatcher.RemoveListener("CANCEL_SELECTED_COMMAND", EscCancelSelected);//ESC取消选中处理
MessageDispatcher.RemoveListener("CANCEL_OBJ_SELECTED", CancelObjSelected);
MessageDispatcher.RemoveListener("DELETE_COMMAND", ObjDeleted);
MessageDispatcher.RemoveListener("GROUP_DISMISS", ObjDeleted);//删除组
}
public override void OnDestroy()
{
base.OnDestroy();
MessageDispatcher.RemoveListener("CANCEL_SELECTED_COMMAND", EscCancelSelected);//ESC取消选中处理
MessageDispatcher.RemoveListener("CANCEL_OBJ_SELECTED", CancelObjSelected);
MessageDispatcher.RemoveListener("DELETE_COMMAND", ObjDeleted);
MessageDispatcher.RemoveListener("GROUP_DISMISS", ObjDeleted);
}
private void InitShowAttriBtnTypeList()
{
ShowAttriBtnTypeList = new List<CloneObjType>();
#region //车辆
//ShowAttriBtnTypeList.Add(CloneObjType.HighSprayingTruck);
//ShowAttriBtnTypeList.Add(CloneObjType.FoamTruck);
//ShowAttriBtnTypeList.Add(CloneObjType.AerialTowerTruck);
//ShowAttriBtnTypeList.Add(CloneObjType.RescueVehicle);
//ShowAttriBtnTypeList.Add(CloneObjType.Apparatus);
//ShowAttriBtnTypeList.Add(CloneObjType.WaterTanker);
//ShowAttriBtnTypeList.Add(CloneObjType.LadderTruck);
//ShowAttriBtnTypeList.Add(CloneObjType.LightingAppliance);
//ShowAttriBtnTypeList.Add(CloneObjType.ForcibleEntryTruck);
//ShowAttriBtnTypeList.Add(CloneObjType.CCCar);
//ShowAttriBtnTypeList.Add(CloneObjType.SmokeExhaustTruck);
//ShowAttriBtnTypeList.Add(CloneObjType.UHWSVehicle);
//ShowAttriBtnTypeList.Add(CloneObjType.ABICar);
//ShowAttriBtnTypeList.Add(CloneObjType.ambulance);
//ShowAttriBtnTypeList.Add(CloneObjType.PoliceCar);
//ShowAttriBtnTypeList.Add(CloneObjType.PowerRepairVehicles);
//ShowAttriBtnTypeList.Add(CloneObjType.GasEmergencyCar);
//ShowAttriBtnTypeList.Add(CloneObjType.WaterSupplyRepairCar);
#endregion
#region//灾情
ShowAttriBtnTypeList.Add(CloneObjType.fireNormal);
ShowAttriBtnTypeList.Add(CloneObjType.LiquidLevel);
ShowAttriBtnTypeList.Add(CloneObjType.smokeNormal);
ShowAttriBtnTypeList.Add(CloneObjType.forcibleEntryPoint);
#endregion
#region//工具
//ShowAttriBtnTypeList.Add(CloneObjType.securityInspector);
//ShowAttriBtnTypeList.Add(CloneObjType.ObserveInspector);
//ShowAttriBtnTypeList.Add(CloneObjType.SimulationEvacuate);
//ShowAttriBtnTypeList.Add(CloneObjType.stagingArea);
//ShowAttriBtnTypeList.Add(CloneObjType.InstanceText);
//ShowAttriBtnTypeList.Add(CloneObjType.SetArea);
//ShowAttriBtnTypeList.Add(CloneObjType.AttackLine);
//ShowAttriBtnTypeList.Add(CloneObjType.RetreatLine);
//ShowAttriBtnTypeList.Add(CloneObjType.BlockLine);
//ShowAttriBtnTypeList.Add(CloneObjType.BrokenLine);
//ShowAttriBtnTypeList.Add(CloneObjType.EjectSmokeLine);
//ShowAttriBtnTypeList.Add(CloneObjType.WaterCannon);
//ShowAttriBtnTypeList.Add(CloneObjType.ObligationFireman);
#endregion
//ShowAttriBtnTypeList.Add(CloneObjType.fireman);
//ShowAttriBtnTypeList.Add(CloneObjType.Group);
}
public override void RespondFun()
{
if (!chooseObj || (CurInstance && CurInstance.gameObject.activeInHierarchy))
{
return;
}
CloneObjType type = chooseObj.GetComponent<BaseGameObjInfo>().gameObjType;
OpenPanelByType(type);
}
private void SetCurInstanceByType(CloneObjType type)
{
switch (type)
{
#region 车辆
//case CloneObjType.HighSprayingTruck:
//case CloneObjType.FoamTruck:
//case CloneObjType.AerialTowerTruck:
//case CloneObjType.RescueVehicle:
//case CloneObjType.Apparatus:
//case CloneObjType.WaterTanker:
//case CloneObjType.LadderTruck:
//case CloneObjType.LightingAppliance:
//case CloneObjType.ForcibleEntryTruck:
//case CloneObjType.CCCar:
//case CloneObjType.SmokeExhaustTruck:
//case CloneObjType.UHWSVehicle:
//case CloneObjType.ABICar:
//case CloneObjType.ambulance:
//case CloneObjType.PoliceCar:
//case CloneObjType.PowerRepairVehicles:
//case CloneObjType.GasEmergencyCar:
//case CloneObjType.WaterSupplyRepairCar:
// //CurInstance = TruckAttributePanel.Instance;
// break;
#endregion
#region 工具
//case CloneObjType.ObserveInspector://观察哨
//case CloneObjType.SimulationEvacuate://模拟疏散
// //CurInstance = UIPlanPathPoint.Instance;
// break;
//case CloneObjType.stagingArea://集结区
// //CurInstance = UIPlanStagingArea.Instance;
// break;
//case CloneObjType.InstanceText://实例化文字
// //CurInstance = UIPlanInstanceText.Instance;
// break;
//case CloneObjType.SetArea://区域设置
// //CurInstance = UIPlanSetArea.Instance;
// break;
//case CloneObjType.AttackLine://进攻
//case CloneObjType.RetreatLine://撤退
//case CloneObjType.BlockLine://堵截
//case CloneObjType.BrokenLine://破拆
//case CloneObjType.EjectSmokeLine://排烟管
// //CurInstance = UIPlanLine.Instance;
// break;
//case CloneObjType.WaterCannon:
// //CurInstance = UIPlanWaterCannon.Instance;//水炮
// break;
#endregion
#region 灾情
case CloneObjType.fireNormal://普通火
CurInstance = FireSpreadPanel.Instance;
break;
case CloneObjType.LiquidLevel://全液面火
CurInstance = FireLiquipPanel.Instance;
break;
case CloneObjType.smokeNormal://烟
CurInstance = SmokeSetPanel.Instance;
break;
case CloneObjType.forcibleEntryPoint://破拆
CurInstance = ForciblePanel.Instance;
break;
#endregion
//case CloneObjType.fireman://消防员
//case CloneObjType.ObligationFireman://义务消防员
//case CloneObjType.securityInspector://安全哨
// //CurInstance = FireManAttributePanel.Instance;
// break;
//case CloneObjType.Group://消防员组
// //CurInstance = GroupAttributePanel.Instance;
// break;
default:
CurInstance = null;
break;
}
}
/// <summary>
/// 打开属性设置窗口
/// </summary>
/// <param name="type"></param>
private void OpenPanelByType(CloneObjType type)
{
SetCurInstanceByType(type);
if (CurInstance)
{
CurInstance.chooseObj = chooseObj;
CurInstance.OpenPanel();
}
}
/// <summary>
/// 打开属性设置按钮
/// </summary>
public void OpenSettingsPanel(GameObject hitObj)
{
var type = hitObj.GetComponent<BaseGameObjInfo>().gameObjType;
if (chooseObj && chooseObj == hitObj)
{//避免重复打开
return;
}
if (!HasPanel(type))
{//判断是否选中的物体有属性设置窗口
Cancel();
return;
}
gameObject.SetActive(true);
if (CurInstance && CurInstance.gameObject.activeSelf)//当前有属性面板在打开着
{
var lastType = chooseObj.GetComponent<BaseGameObjInfo>().gameObjType;
CurInstance.ResetData(chooseObj);//将原来物体属性重置
chooseObj = hitObj;
if (lastType != type)//将要打开的不是同一类型的面板
{
CurInstance.gameObject.SetActive(false);
//打开新的属性设置窗口
OpenPanelByType(type);
}
else
{
CurInstance.chooseObj = chooseObj;
CurInstance.LoadObjData();
}
}
chooseObj = hitObj;
}
/// <summary>
/// ESC取消选中,隐藏按钮
/// </summary>
/// <param name="obj"></param>
private void EscCancelSelected(IMessage obj)
{
Cancel();
}
/// <summary>
/// 取消选中,隐藏按钮
/// </summary>
/// <param name="obj"></param>
private void CancelObjSelected(IMessage obj)
{
Cancel();
}
/// <summary>
/// 删除物体,隐藏按钮
/// </summary>
/// <param name="obj"></param>
private void ObjDeleted(IMessage obj)
{
Cancel(true);
}
/// <summary>
/// 隐藏属性设置面板的属性设置按钮和属性设置窗口
/// </summary>
private void Cancel(bool flagDelete = false)
{
if (!flagDelete && CurInstance)
{
CurInstance.gameObject.SetActive(false);
}
if (chooseObj != null && CurInstance != null)
{
SetCurInstanceByType(chooseObj.GetComponent<BaseGameObjInfo>().gameObjType);
CurInstance.ResetData(chooseObj);
}
chooseObj = null;
gameObject.SetActive(false);
}
/// <summary>
/// 是否有对应的属性面板存在
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
private bool HasPanel(CloneObjType type)
{
return ShowAttriBtnTypeList.Contains(type);
}
}