using System; using System.Collections; using System.Collections.Generic; using AX.Network.Protocols; using UnityEngine; using UnityEngine.SceneManagement; using AX.Serialization; using AX.InputSystem; using AX.MessageSystem; /// /// 管线连接或者删除同步是否可移动信息 /// public class HoseConnectOrDelectData { public bool Isconnect; public long StartId; public long EndId; public long HoseId; } /// /// 连接管线同步 /// public class ASSOCIATED_LINE_SYNC : NetworkMessageBehaviour { /// /// 线的父物体 /// private GameObject parentgameobj; /// /// 克隆出的线的父物体预设 /// private GameObject parent; //private long gameObjId; //private GameObject startHitGameobj; // private GameObject endHitGameobj; // private Vector3 beginLinePoint; private Vector3 startPoint; private Vector3 endPoint; public float Height = 0.2f; public GameObject clonePrefab; public Vector3 SizeVec; void Start() { if (parent == null) { parent = Resources.Load("LineParent/ParentWaterHoseLine") as GameObject; } } protected override void Execute(BinaryMessage message) { InputHistory.Instance.RegisterInputHistory(message); var info = message.Body.Deserialize(); var sender = info.SendUserID; // gameObjId = info.baseGameobjInfo.gameObjID; if (InputManager.Instance) { if (CurrentUserInfo.mySelf.Id != sender) { if (info.startHitGameObjId!=0&&info.endHitGameObjId!=0) { Associatedline(info); } } } //else //{ // NetworkSyncHelper.AddSyncData(info); //} } //private void Resert() //{ // beginLinePoint = Vector3.zero; // startPoint = Vector3.zero; // endPoint = Vector3.zero; // parentgameobj = null; //} private void Associatedline(AssociatedLineSyncDate data) { //if (startPoint==Vector3.zero) if (EntitiesManager.Instance.GetEntityByID(data.gameObjID) == null) { parentgameobj = EntitiesManager.Instance.CreateObj(parent, transform.position,transform, data.gameObjID); startPoint = data.LineBeginPoint; } else//第三个点及以上,找到前两个点创建的对象,将末位点赋给起点 { parentgameobj = EntitiesManager.Instance.GetEntityByID(data.gameObjID); startPoint = parentgameobj.GetComponent().EndPoint; } endPoint = data.hitpoint; float distance = Vector3.Distance(startPoint, endPoint);//计算两点的距离 Vector3 clonedObjPos = (startPoint + endPoint) / 2; // Debug.Log(gameObjID); //EntitiesManager.Instance.AddEntity(gameObjID, parentgameobj); clonedObjPos = new Vector3(clonedObjPos.x, clonedObjPos.y + Height, clonedObjPos.z); GameObject line = Instantiate(clonePrefab, parentgameobj.transform); line.name = "line"; line.transform.position = clonedObjPos; if((endPoint - startPoint)!=Vector3.zero) { line.transform.forward = (-(endPoint - startPoint)).normalized;//改变线条的朝向 } line.transform.localScale = new Vector3(SizeVec.x, SizeVec.y, distance * SizeVec.z);//延长线条,连接两点。 line.AddComponent(); line.GetComponent().gameObjID = parentgameobj.GetComponent().gameObjID; line.GetComponent().UserID = data.UserID; parentgameobj.GetComponent().LineLenght = data.lenght; parentgameobj.GetComponent().StartHitGameObj = EntitiesManager.Instance.GetEntityByID(data.startHitGameObjId); parentgameobj.GetComponent().EndHitGameObj = EntitiesManager.Instance.GetEntityByID(data.endHitGameObjId); parentgameobj.GetComponent().CreatFiremanID = data.CreatFiremanId; parentgameobj.GetComponent().StartPoint = data.LineBeginPoint; parentgameobj.GetComponent().EndPoint = endPoint;//data.LineEndPoint; parentgameobj.name = data.name; parentgameobj.GetComponent().gameObjID = data.gameObjID; parentgameobj.GetComponent().gameObjType = data.gameObjType; parentgameobj.GetComponent().UserID = data.UserID; parentgameobj.GetComponent().buildNum = data.buildNum; parentgameobj.GetComponent().floorNum = data.floorNum; parentgameobj.GetComponent().interlayerNum = data.interlayerNum; ConnectObj( parentgameobj.GetComponent().StartHitGameObj, parentgameobj.GetComponent().EndHitGameObj, parentgameobj); //ExpendHose(distance, parentgameobj.GetComponent().LineLenght); // SelectedObjs.gameObjs.Add(line); // SelectedObjs.gameObjs.Add(parentgameobj); //startPoint = endPoint; } //同步管线连接到物体上的处理 void ConnectObj(GameObject startobj,GameObject endobj,GameObject hose) { if (startobj.GetComponent()||startobj.GetComponent()||startobj.GetComponent() || endobj.GetComponent() || endobj.GetComponent() || endobj.GetComponent()) { HoseConnectOrDelectData data = new HoseConnectOrDelectData(); data.StartId = startobj.GetComponent().gameObjID; data.EndId = endobj.GetComponent().gameObjID; data.Isconnect = true; data.HoseId = hose.GetComponent().gameObjID; MessageDispatcher.SendMessage("HOSE_CONNECT_OR_DELECT",data); } } }