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