using System.Collections; using System.Collections.Generic; using UnityEngine; using AX.MessageSystem; using System; using AX.InputSystem; public class Waterseparadata { public bool IsContent; public long receiveId; public WaterType watertype; } [Serializable] public class YDragData { public string name; public long id; public Vector3 Position; } public class WaterSeparaterControl : MonoBehaviour { private long gameID; private WaterSupplier WaterSupplier; private WaterReceiver WaterReceiver; // Start is called before the first frame update void Awake() { WaterSupplier = GetComponent(); WaterReceiver = GetComponent(); MessageDispatcher.AddListener("W_COMMAND", WCommond); MessageDispatcher.AddListener("S_COMMAND", SCommond); MessageDispatcher.AddListener("U_COMMAND", U); MessageDispatcher.AddListener("J_COMMAND", J); MessageDispatcher.AddListener("ReplayEvent", ReplayEventPos); MessageDispatcher.AddListener("WaterSourceChanged", WaterSourceChange); MessageDispatcher.AddListener("ReplayEvent", ReplayEvent); } private void Start() { gameID = GetComponent().gameObjID; } private void OnDestroy() { MessageDispatcher.RemoveListener("W_COMMAND", WCommond); MessageDispatcher.RemoveListener("S_COMMAND", SCommond); MessageDispatcher.RemoveListener("U_COMMAND", U); MessageDispatcher.RemoveListener("J_COMMAND", J); MessageDispatcher.RemoveListener("ReplayEvent", ReplayEventPos); MessageDispatcher.RemoveListener("WaterSourceChanged", WaterSourceChange); MessageDispatcher.RemoveListener("ReplayEvent", ReplayEvent); } private void WaterSourceChange(IMessage obj) { WaterConnectionData data = (WaterConnectionData)obj.Data; if (data.receiverID == gameID) { if (data.supplierID == -1) { return; } if (EntitiesManager.Instance.GetEntityByID(data.supplierID) == null) { return; } WaterType sourcetype = EntitiesManager.Instance.GetEntityByID(data.supplierID).GetComponent().WaterReceiverType; if (data.connected) { WaterSupplier.WaterReceiverType = sourcetype; for (int i = 0; i < WaterSupplier.waterLineInfos.Count; i++) { GameObject waterline = EntitiesManager.Instance.GetEntityByID(WaterSupplier.waterLineInfos[i]); Waterseparadata wdata = new Waterseparadata() { IsContent = data.connected, receiveId = waterline.GetComponent().ReceiverID, watertype = WaterSupplier.WaterReceiverType, }; MessageDispatcher.SendMessage("WaterSeparaterChange", wdata); } } else { for (int i = 0; i < WaterSupplier.waterLineInfos.Count; i++) { GameObject waterline = EntitiesManager.Instance.GetEntityByID(WaterSupplier.waterLineInfos[i]); if (waterline) { Waterseparadata wdata = new Waterseparadata() { IsContent = data.connected, receiveId = waterline.GetComponent().ReceiverID, watertype = WaterSupplier.WaterReceiverType, }; MessageDispatcher.SendMessage("WaterSeparaterChange", wdata); } } WaterSupplier.WaterReceiverType = WaterType.none; } } } private void ReplayEventPos(IMessage obj) { var eventData = (EventData)obj.Data; if (eventData.eventType == RecordEventType.ObjDraging) { YDragData data = JsonUtility.FromJson(eventData.json); if (data.name == gameObject.name) transform.position = data.Position; } } private void SCommond(IMessage message) { var gameObjID = (long)message.Sender; if (gameObjID == GetComponent().GameObjID) { if (!GetComponent().enabled) {//连接水源后会设置不可拖动,连接水源后不能上下拖动 return; } var speed = ((WeightCmdArgs)message.Data).Weight; if (transform.position.y - speed > 0) { transform.position -= Vector3.up * speed; } YDragData arg = new YDragData() { name = gameObject.name, id = GetComponent().GameObjID, Position = transform.position, }; RecordEvent.AddEventData(CloneObjType.None, RecordEventType.ObjDraging, JsonUtility.ToJson(arg)); } } private void WCommond(IMessage message) { var gameObjID = (long)message.Sender; if (gameObjID == GetComponent().GameObjID) { if (!GetComponent().enabled) {//连接水源后会设置不可拖动,连接水源后不能上下拖动 return; } var speed = ((WeightCmdArgs)message.Data).Weight; if (transform.position.y > 0) { transform.position += Vector3.up * speed; } YDragData arg = new YDragData() { name = gameObject.name, id = GetComponent().GameObjID, Position = transform.position, }; RecordEvent.AddEventData(CloneObjType.None, RecordEventType.ObjDraging, JsonUtility.ToJson(arg)); } } protected void J(IMessage obj) { var gameObjID = (long)obj.Sender; if (gameObjID == GetComponent().GameObjID) { RotateJ(); //AddRecordEvent(RecordEventType.WaterSprayJ); AddRecordUJEvent(); } } protected void U(IMessage obj) { var gameObjID = (long)obj.Sender; if (gameObjID == GetComponent().GameObjID) { RotateU(); //AddRecordEvent(RecordEventType.WaterSprayU); AddRecordUJEvent(); } } private void RotateU() { transform.Rotate(-Time.deltaTime * 40, 0,0, Space.Self); } private void RotateJ() { transform.Rotate( Time.deltaTime * 40,0,0, Space.Self); } private void AddRecordUJEvent() { if (ReplaySetting.PlayStatus == PlayStatus.isEditor && RecordManager.Instance.recordStatus == RecordStatus.normal) { var eventData = new EventData(); eventData.time = RecordManager.Instance.RecordTimer; eventData.cloneObjType = GetComponent().gameObjType; eventData.eventType = RecordEventType.WaterSprayU; RecordSprayerRotation data = new RecordSprayerRotation(); data.gameObjID = GetComponent().gameObjID; data.rotation = transform.localEulerAngles; eventData.json = JsonUtility.ToJson(data); RecordManager.Instance.jsonData.eventDataList.Add(eventData); } } protected void ReplayEvent(IMessage obj) { var eventData = (EventData)obj.Data; if (eventData.eventType == RecordEventType.WaterSprayU) { RecordSprayerRotation data = JsonUtility.FromJson(eventData.json); if (data.gameObjID == GetComponent().gameObjID) { transform.localEulerAngles = data.rotation; } } //else if (eventData.eventType == RecordEventType.ObjDraging) //{ // YDragData data = JsonUtility.FromJson(eventData.json); // if (data.name == gameObject.name) // { // transform.position = data.Position; // } //} } }