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