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.
325 lines
12 KiB
325 lines
12 KiB
4 years ago
|
using AX.MessageSystem;
|
||
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
|
||
|
public class WaterLineInfo : CloneGameObjInfo {
|
||
|
public ConnectState state;
|
||
|
private GameObject waterSupplier;
|
||
|
private GameObject waterReceiver;
|
||
|
private long supplierID = -1;
|
||
|
private long receiverID = -1;
|
||
|
public override void Awake()
|
||
|
{
|
||
|
base.Awake();
|
||
|
MessageDispatcher.AddListener("ReplayEvent", ReplayWaterLineDelet);
|
||
|
MessageDispatcher.AddListener("ClearObject", Clear);
|
||
|
}
|
||
|
public override void OnDestroy()
|
||
|
{
|
||
|
base.OnDestroy();
|
||
|
WaterLineDelet();
|
||
|
MessageDispatcher.RemoveListener("ReplayEvent", ReplayWaterLineDelet);
|
||
|
MessageDispatcher.RemoveListener("ClearObject", Clear);
|
||
|
}
|
||
|
private void Clear(IMessage obj)
|
||
|
{
|
||
|
WaterLineDelet();
|
||
|
state = ConnectState.none;
|
||
|
}
|
||
|
public void Resertinfo()
|
||
|
{
|
||
|
SupplierID = -1;
|
||
|
ReceiverID = -1;
|
||
|
state = ConnectState.none;
|
||
|
}
|
||
|
private void WaterLineDelet()
|
||
|
{
|
||
|
switch (state)
|
||
|
{
|
||
|
case ConnectState.none:
|
||
|
break;
|
||
|
case ConnectState.hasSupplier:
|
||
|
break;
|
||
|
case ConnectState.hasReceiver:
|
||
|
break;
|
||
|
case ConnectState.both:
|
||
|
if (waterReceiver == null)
|
||
|
waterReceiver = EntitiesManager.Instance.GetEntityByID(ReceiverID);
|
||
|
if (waterSupplier == null)
|
||
|
waterSupplier = EntitiesManager.Instance.GetEntityByID(SupplierID);
|
||
|
if (waterReceiver)
|
||
|
{
|
||
|
if (waterReceiver.GetComponent<WaterReceiver>().waterlinelist.Contains(GetComponent<CloneGameObjInfo>().gameObjID))
|
||
|
{
|
||
|
waterReceiver.GetComponent<WaterReceiver>().waterlinelist.Remove(GetComponent<CloneGameObjInfo>().gameObjID);
|
||
|
}
|
||
|
}
|
||
|
if (waterReceiver && waterReceiver.GetComponent<WaterReceiver>())
|
||
|
{
|
||
|
waterReceiver.GetComponent<WaterReceiver>().hasSupplier = false;
|
||
|
|
||
|
WaterConnectionData data = new WaterConnectionData();
|
||
|
GetWaterSourceData(false, data);
|
||
|
//通知水源变更
|
||
|
MessageDispatcher.SendMessage("WaterSourceChanged", data);
|
||
|
AddRecordWaterLineDelet(data);
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
private void AddRecordWaterLineDelet(WaterConnectionData data)
|
||
|
{
|
||
|
if (ReplaySetting.PlayStatus == PlayStatus.isEditor && RecordManager.Instance.recordStatus == RecordStatus.normal)
|
||
|
{
|
||
|
var eventData = new EventData();
|
||
|
eventData.time = RecordManager.Instance.RecordTimer;
|
||
|
eventData.cloneObjType = GetComponent<BaseGameObjInfo>().gameObjType;
|
||
|
eventData.eventType = RecordEventType.WaterLineDele;
|
||
|
string json = JsonUtility.ToJson(data);
|
||
|
eventData.json = json;
|
||
|
RecordManager.Instance.jsonData.eventDataList.Add(eventData);
|
||
|
}
|
||
|
}
|
||
|
private void ReplayWaterLineDelet(IMessage obj)
|
||
|
{
|
||
|
var eventData = (EventData)obj.Data;
|
||
|
if(eventData.eventType == RecordEventType.WaterLineDele)
|
||
|
{
|
||
|
WaterConnectionData data = JsonUtility.FromJson<WaterConnectionData>(eventData.json);
|
||
|
var thisID = GetComponent<BaseGameObjInfo>().gameObjID;
|
||
|
if (data.waterLineID == thisID)
|
||
|
{
|
||
|
//通知水源变更
|
||
|
MessageDispatcher.SendMessage("WaterSourceChanged", data);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
public long SupplierID
|
||
|
{
|
||
|
get { return supplierID; }
|
||
|
set
|
||
|
{
|
||
|
if (value == -1)
|
||
|
return;
|
||
|
|
||
|
switch (state)
|
||
|
{
|
||
|
case ConnectState.none:
|
||
|
supplierID = value;
|
||
|
waterSupplier = EntitiesManager.Instance.GetEntityByID(supplierID);
|
||
|
state = ConnectState.hasSupplier;
|
||
|
break;
|
||
|
case ConnectState.hasSupplier:
|
||
|
//已经连接水源,不能有多个水源
|
||
|
break;
|
||
|
case ConnectState.hasReceiver:
|
||
|
supplierID = value;
|
||
|
waterSupplier = EntitiesManager.Instance.GetEntityByID(supplierID);
|
||
|
|
||
|
if (waterSupplier != null)
|
||
|
{
|
||
|
waterReceiver.GetComponent<WaterReceiver>().hasSupplier = true;
|
||
|
}
|
||
|
|
||
|
if (waterSupplier)
|
||
|
{
|
||
|
if (!waterSupplier.GetComponent<WaterSupplier>().waterLineInfos.Contains(GetComponent<CloneGameObjInfo>().gameObjID))
|
||
|
{
|
||
|
waterSupplier.GetComponent<WaterSupplier>().waterLineInfos.Add(GetComponent<CloneGameObjInfo>().gameObjID);
|
||
|
}
|
||
|
}
|
||
|
if (waterReceiver)
|
||
|
{
|
||
|
if (!waterReceiver.GetComponent<WaterReceiver>().waterlinelist.Contains(GetComponent<CloneGameObjInfo>().gameObjID))
|
||
|
{
|
||
|
waterReceiver.GetComponent<WaterReceiver>().waterlinelist.Add(GetComponent<CloneGameObjInfo>().gameObjID);
|
||
|
}
|
||
|
}
|
||
|
state = ConnectState.both;
|
||
|
WaterConnectionData data = new WaterConnectionData();
|
||
|
GetWaterSourceData(true, data);
|
||
|
MessageDispatcher.SendMessage("WaterSourceChanged", data);
|
||
|
/*if ((ReplaySetting.PlayStatus == PlayStatus.isEditor && RecordManager.Instance.recordStatus == RecordStatus.normal)
|
||
|
|| ReplaySetting.PlayStatus ==PlayStatus.normal)
|
||
|
ResourceLoadWindow.Instance.LoadTextHintWindow("连接管线成功", 2);*/
|
||
|
if (ReplaySetting.PlayStatus != PlayStatus.isReplay && tipFlag)
|
||
|
{
|
||
|
ResourceLoadWindow.Instance.LoadTextHintWindow("连接管线成功", 2);
|
||
|
}
|
||
|
MessageDispatcher.SendMessage("CANCEL_CLONEBTN_SELECTED_COMMAND");
|
||
|
break;
|
||
|
case ConnectState.both:
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
public long ReceiverID
|
||
|
{
|
||
|
get { return receiverID; }
|
||
|
set
|
||
|
{
|
||
|
if (value == -1)
|
||
|
return;
|
||
|
switch (state)
|
||
|
{
|
||
|
case ConnectState.none:
|
||
|
receiverID = value;
|
||
|
waterReceiver = EntitiesManager.Instance.GetEntityByID(receiverID);
|
||
|
if (waterReceiver != null && waterReceiver.GetComponent<ObjDrag>())
|
||
|
{
|
||
|
waterReceiver.GetComponent<ObjDrag>().enabled = false;
|
||
|
} //用水设备连接管线后不能拖拽
|
||
|
state = ConnectState.hasReceiver;
|
||
|
break;
|
||
|
case ConnectState.hasSupplier:
|
||
|
receiverID = value;
|
||
|
waterReceiver = EntitiesManager.Instance.GetEntityByID(receiverID);
|
||
|
|
||
|
if (waterReceiver != null)
|
||
|
{
|
||
|
waterReceiver.GetComponent<WaterReceiver>().hasSupplier = true;
|
||
|
if (waterReceiver.GetComponent<ObjDrag>())
|
||
|
{
|
||
|
waterReceiver.GetComponent<ObjDrag>().enabled = false;
|
||
|
}//用水设备连接管线后不能拖拽
|
||
|
if (!waterReceiver.GetComponent<WaterReceiver>().
|
||
|
waterlinelist.Contains(GetComponent<CloneGameObjInfo>().gameObjID))
|
||
|
{
|
||
|
waterReceiver.GetComponent<WaterReceiver>().
|
||
|
waterlinelist.Add(GetComponent<CloneGameObjInfo>().gameObjID);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
if (waterSupplier != null)
|
||
|
{
|
||
|
if (!waterSupplier.GetComponent<WaterSupplier>().
|
||
|
waterLineInfos.Contains(GetComponent<CloneGameObjInfo>().gameObjID))
|
||
|
{
|
||
|
waterSupplier.GetComponent<WaterSupplier>().
|
||
|
waterLineInfos.Add(GetComponent<CloneGameObjInfo>().gameObjID);
|
||
|
}
|
||
|
}
|
||
|
state = ConnectState.both;
|
||
|
WaterConnectionData data = new WaterConnectionData();
|
||
|
GetWaterSourceData(true, data);
|
||
|
MessageDispatcher.SendMessage("WaterSourceChanged", data);
|
||
|
/*if ((ReplaySetting.PlayStatus == PlayStatus.isEditor && RecordManager.Instance.recordStatus == RecordStatus.normal)
|
||
|
|| ReplaySetting.PlayStatus == PlayStatus.normal)*/
|
||
|
if(ReplaySetting.PlayStatus != PlayStatus.isReplay && tipFlag)
|
||
|
{
|
||
|
ResourceLoadWindow.Instance.LoadTextHintWindow("连接管线成功", 2);
|
||
|
}
|
||
|
MessageDispatcher.SendMessage("CANCEL_CLONEBTN_SELECTED_COMMAND");
|
||
|
break;
|
||
|
case ConnectState.hasReceiver:
|
||
|
//已经连接了用水设备不再连接其他
|
||
|
break;
|
||
|
case ConnectState.both:
|
||
|
//已经连接了用水设备不再连接其他
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 解决帧回放时多余提示
|
||
|
/// </summary>
|
||
|
public bool tipFlag = true;
|
||
|
private void GetWaterSourceData(bool value,WaterConnectionData data)
|
||
|
{
|
||
|
data.waterLineID = GetComponent<BaseGameObjInfo>().gameObjID;
|
||
|
data.connected = value;
|
||
|
data.supplierID = this.supplierID;
|
||
|
data.receiverID = this.receiverID;
|
||
|
waterSupplier = EntitiesManager.Instance.GetEntityByID(supplierID);
|
||
|
if(waterSupplier != null)
|
||
|
{
|
||
|
//确定水源类型
|
||
|
var info = waterSupplier.GetComponent<BaseGameObjInfo>();
|
||
|
//switch (info.gameObjType)
|
||
|
//{
|
||
|
// case CloneObjType.FoamTruck:
|
||
|
// data.type = WaterType.both;
|
||
|
// break;
|
||
|
// case CloneObjType.WaterTanker:
|
||
|
// data.type = WaterType.water;
|
||
|
// break;
|
||
|
// case CloneObjType.UHWSVehicle:
|
||
|
// data.type = WaterType.water;
|
||
|
// break;
|
||
|
// case CloneObjType.WaterSupplyRepairCar:
|
||
|
// data.type = WaterType.water;
|
||
|
// break;
|
||
|
// case CloneObjType.XHS:
|
||
|
// data.type = WaterType.water;
|
||
|
// break;
|
||
|
// case CloneObjType.GDFSQ:
|
||
|
// data.type = WaterType.both;
|
||
|
// break;
|
||
|
// default:
|
||
|
// break;
|
||
|
//}
|
||
|
data.type = waterSupplier.GetComponent<WaterSupplier>().WaterReceiverType;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
data.type = WaterType.none;
|
||
|
}
|
||
|
}
|
||
|
public GameObject GetWaterSupplier()
|
||
|
{
|
||
|
if (waterSupplier == null)
|
||
|
waterSupplier = EntitiesManager.Instance.GetEntityByID(SupplierID);
|
||
|
return waterSupplier;
|
||
|
}
|
||
|
public GameObject GetWaterReceiver()
|
||
|
{
|
||
|
if (waterReceiver == null)
|
||
|
waterReceiver = EntitiesManager.Instance.GetEntityByID(ReceiverID);
|
||
|
return waterReceiver;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
public enum ConnectState
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// 没有连接
|
||
|
/// </summary>
|
||
|
none,
|
||
|
/// <summary>
|
||
|
/// 连接水源
|
||
|
/// </summary>
|
||
|
hasSupplier,
|
||
|
/// <summary>
|
||
|
/// 连接用水设备
|
||
|
/// </summary>
|
||
|
hasReceiver,
|
||
|
/// <summary>
|
||
|
/// 既连接水源又连接用水设备
|
||
|
/// </summary>
|
||
|
both
|
||
|
}
|
||
|
[Serializable]
|
||
|
public class WaterConnectionData
|
||
|
{
|
||
|
public long waterLineID;
|
||
|
public long supplierID;
|
||
|
public long receiverID;
|
||
|
public bool connected;
|
||
|
public WaterType type;
|
||
|
}
|
||
|
[Serializable]
|
||
|
public enum WaterType
|
||
|
{
|
||
|
none=0,
|
||
|
water=1,
|
||
|
foam=2,
|
||
|
both=3
|
||
|
}
|