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.
433 lines
15 KiB
433 lines
15 KiB
4 years ago
|
using AX.InputSystem;
|
||
|
using AX.MessageSystem;
|
||
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using AX.NetworkSystem;
|
||
|
using AX.Network.Protocols;
|
||
|
using AX.Serialization;
|
||
|
|
||
|
|
||
|
//public class TruckArmRiceData : RecordObjectBase
|
||
|
//{
|
||
|
// public long GameId;
|
||
|
// public bool AllFull;
|
||
|
// public bool AllZero;
|
||
|
// /// <summary>
|
||
|
// /// 是升起还是落下,true为升起
|
||
|
// /// </summary>
|
||
|
// public bool IsRice;
|
||
|
// public bool fifth;
|
||
|
// public float part7currentheight;
|
||
|
// public bool fourth;
|
||
|
// public float part6currentheight;
|
||
|
// public bool third;
|
||
|
// public float part5currentheight;
|
||
|
// public bool second;
|
||
|
// public float part4currentheight;
|
||
|
// public bool first;
|
||
|
// public float part3currentheight;
|
||
|
// public float OutArmLength;
|
||
|
//}
|
||
|
//public class TruckArmRotateData : RecordObjectBase
|
||
|
//{
|
||
|
// public long GameId;
|
||
|
// public RotateArmType ArmType;
|
||
|
// public Vector3 EulerAngle;
|
||
|
//}
|
||
|
|
||
|
public class WeightCmdArgs : CmdArgs
|
||
|
{
|
||
|
public float Weight;
|
||
|
}
|
||
|
public enum RotateArmType
|
||
|
{
|
||
|
HorizontalBaseSupport,
|
||
|
VerticalBaseSupport,
|
||
|
LastArm,
|
||
|
}
|
||
|
//[DisallowMultipleComponent]
|
||
|
//[RequireComponent(typeof(TruckArmRecord))]
|
||
|
public abstract class ControlTruckArm : MonoBehaviour
|
||
|
{
|
||
|
public CarAnimationCtrl CarAnimationCtrl;
|
||
|
private AgentController Nav;
|
||
|
private bool controlTruckArmFlag;
|
||
|
public bool AutoControlTruckArmFlag;
|
||
|
public float OutArmLength;
|
||
|
public float ArmLength;
|
||
|
public Transform HorizontalBaseSupport;
|
||
|
public Transform VerticalBaseSupport;
|
||
|
public Transform LastArm;
|
||
|
public long GameObjID;
|
||
|
public CloneGameObjInfo gameinfo;
|
||
|
public float LastArmEulerAngleX;
|
||
|
public bool ControlTruckArmFlag
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return controlTruckArmFlag;
|
||
|
}
|
||
|
|
||
|
set
|
||
|
{
|
||
|
if (value)
|
||
|
AddListener();
|
||
|
else
|
||
|
{
|
||
|
RemoveListener();
|
||
|
ArmResert();
|
||
|
}
|
||
|
controlTruckArmFlag = value;
|
||
|
}
|
||
|
}
|
||
|
//private EventData QuaternionEventData = null;
|
||
|
//private EventData SizeEventData = null;
|
||
|
private Quaternion Beginquaternion = Quaternion.identity;
|
||
|
private float BeginSize = float.Epsilon;
|
||
|
protected Transform SizeChangeTran = null;
|
||
|
protected Transform QuaternionChangeTran = null;
|
||
|
|
||
|
//protected void CreateRotationEvent(Transform changetran)
|
||
|
//{
|
||
|
// if (QuaternionEventData == null)
|
||
|
// {
|
||
|
// this.QuaternionChangeTran = changetran;
|
||
|
// QuaternionEventData = RecordEvent.CreateLinearEventData();
|
||
|
// Beginquaternion = changetran.localRotation;
|
||
|
// }
|
||
|
//}
|
||
|
//protected void CreateSizeEvent(Transform changetran)
|
||
|
//{
|
||
|
// if (SizeEventData == null)
|
||
|
// {
|
||
|
// this.SizeChangeTran = changetran;
|
||
|
// SizeEventData = RecordEvent.CreateLinearEventData();
|
||
|
// BeginSize = OutArmLength;
|
||
|
// }
|
||
|
//}
|
||
|
//protected void AddRotationEvent(Transform trans)
|
||
|
//{
|
||
|
// if (QuaternionEventData != null)
|
||
|
// {
|
||
|
// RotationLinerEventData RotationLinerEventData = new RotationLinerEventData()
|
||
|
// {
|
||
|
// BeginRotation = TransformHelper.ConvertToMyRotation(Beginquaternion),
|
||
|
// EndRotation = TransformHelper.ConvertToMyRotation(trans.transform.localRotation),
|
||
|
// Name = trans.name
|
||
|
// };
|
||
|
// RecordEvent.AddLinearEventData(QuaternionEventData, LinearEventType.Rotation, GameObjID, JsonUtility.ToJson(RotationLinerEventData));
|
||
|
// Beginquaternion = Quaternion.identity;
|
||
|
// QuaternionChangeTran = null;
|
||
|
// QuaternionEventData = null;
|
||
|
// }
|
||
|
//}
|
||
|
//protected void AddSizeEvent(Transform trans)
|
||
|
//{
|
||
|
// if (SizeEventData != null)
|
||
|
// {
|
||
|
// if (BeginSize != float.Epsilon)
|
||
|
// {
|
||
|
// SizeLinerEventData SizeLinerEventData = new SizeLinerEventData()
|
||
|
// {
|
||
|
// BeginSize = BeginSize,
|
||
|
// EndSize = OutArmLength
|
||
|
// };
|
||
|
// RecordEvent.AddLinearEventData(SizeEventData, LinearEventType.ControlArm, GameObjID, JsonUtility.ToJson(SizeLinerEventData));
|
||
|
// BeginSize = float.Epsilon;
|
||
|
// SizeChangeTran = null;
|
||
|
// SizeEventData = null;
|
||
|
// }
|
||
|
// else
|
||
|
// Debug.Log(BeginSize == float.Epsilon);
|
||
|
// }
|
||
|
//}
|
||
|
public abstract void FixedSupport(IMessage message);//固定支架
|
||
|
public abstract void PackUpTheLiftArm(IMessage message);//收回举臂
|
||
|
public abstract void AutoLiftTruckArm(IMessage message);//自动举臂
|
||
|
public abstract void LeftShift_J(IMessage message);
|
||
|
|
||
|
public abstract void LeftShift_U(IMessage message);
|
||
|
|
||
|
public abstract void D(IMessage message);
|
||
|
|
||
|
public abstract void A(IMessage message);
|
||
|
|
||
|
public abstract void S(IMessage message);
|
||
|
|
||
|
public abstract void W(IMessage message);
|
||
|
|
||
|
public abstract void LeftShift_S(IMessage message);
|
||
|
|
||
|
public abstract void LeftShift_W(IMessage message);
|
||
|
//internal abstract void RadioSelect(IMessage obj);
|
||
|
/// <summary>
|
||
|
/// 固定支架注册举臂事件
|
||
|
/// </summary>
|
||
|
protected void AddListener()
|
||
|
{
|
||
|
// MessageDispatcher.AddListener("AUTO_LIFT_TRUCK_ARM_COMMAND", AutoLiftTruckArm);
|
||
|
MessageDispatcher.AddListener("LEFTSHIFT_W_COMMAND", LeftShift_W);
|
||
|
MessageDispatcher.AddListener("LEFTSHIFT_S_COMMAND", LeftShift_S);
|
||
|
MessageDispatcher.AddListener("W_COMMAND", W);
|
||
|
MessageDispatcher.AddListener("S_COMMAND", S);
|
||
|
MessageDispatcher.AddListener("A_COMMAND", A);
|
||
|
MessageDispatcher.AddListener("D_COMMAND", D);
|
||
|
MessageDispatcher.AddListener("LEFTSHIFT_U_COMMAND", LeftShift_U);
|
||
|
MessageDispatcher.AddListener("LEFTSHIFT_J_COMMAND", LeftShift_J);
|
||
|
// Nav.FixedArmFlag = true;
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 收回举臂注销举臂事件
|
||
|
/// </summary>
|
||
|
protected void RemoveListener()
|
||
|
{
|
||
|
MessageDispatcher.RemoveListener("LEFTSHIFT_W_COMMAND", LeftShift_W);
|
||
|
MessageDispatcher.RemoveListener("LEFTSHIFT_S_COMMAND", LeftShift_S);
|
||
|
MessageDispatcher.RemoveListener("W_COMMAND", W);
|
||
|
MessageDispatcher.RemoveListener("S_COMMAND", S);
|
||
|
MessageDispatcher.RemoveListener("A_COMMAND", A);
|
||
|
MessageDispatcher.RemoveListener("D_COMMAND", D);
|
||
|
MessageDispatcher.RemoveListener("LEFTSHIFT_U_COMMAND", LeftShift_U);
|
||
|
MessageDispatcher.RemoveListener("LEFTSHIFT_J_COMMAND", LeftShift_J);
|
||
|
//MessageDispatcher.RemoveListener("AUTO_LIFT_TRUCK_ARM_COMMAND", AutoLiftTruckArm);
|
||
|
// Nav.FixedArmFlag = false;
|
||
|
}
|
||
|
|
||
|
void OnDisable()
|
||
|
{
|
||
|
MessageDispatcher.RemoveListener("PackUpTheLiftArm", PackUpTheLiftArm);
|
||
|
MessageDispatcher.RemoveListener("FixedSupport", FixedSupport);
|
||
|
MessageDispatcher.RemoveListener("RADIO_SELECTED_COMMAND", RadioSelect);
|
||
|
// MessageDispatcher.RemoveListener("ReplayEvent", ReplayAgent);
|
||
|
NetworkMessageDispatcher.RemoveListener("TRUCK_ARM_RICE_SYNC", TruckArmSyncFunc);
|
||
|
NetworkMessageDispatcher.RemoveListener("TRUCK_ARM_ROTATE_SYNC", TruckArmRotateSyncFunc);
|
||
|
}
|
||
|
void OnEnable()
|
||
|
{
|
||
|
MessageDispatcher.AddListener("PackUpTheLiftArm", PackUpTheLiftArm);
|
||
|
MessageDispatcher.AddListener("FixedSupport", FixedSupport);
|
||
|
MessageDispatcher.AddListener("RADIO_SELECTED_COMMAND", RadioSelect);
|
||
|
NetworkMessageDispatcher.AddListener("TRUCK_ARM_RICE_SYNC", TruckArmSyncFunc);
|
||
|
NetworkMessageDispatcher.AddListener("TRUCK_ARM_ROTATE_SYNC", TruckArmRotateSyncFunc);
|
||
|
//MessageDispatcher.AddListener("ReplayEvent", ReplayAgent);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void OnDestroy()
|
||
|
{
|
||
|
RemoveListener();
|
||
|
MessageDispatcher.RemoveListener("PackUpTheLiftArm", PackUpTheLiftArm);
|
||
|
MessageDispatcher.RemoveListener("FixedSupport", FixedSupport);
|
||
|
MessageDispatcher.RemoveListener("RADIO_SELECTED_COMMAND", RadioSelect);
|
||
|
MessageDispatcher.RemoveListener("GetButtonUp", GetButtonUp);
|
||
|
NetworkMessageDispatcher.RemoveListener("TRUCK_ARM_RICE_SYNC", TruckArmSyncFunc);
|
||
|
NetworkMessageDispatcher.RemoveListener("TRUCK_ARM_ROTATE_SYNC", TruckArmRotateSyncFunc);
|
||
|
// MessageDispatcher.RemoveListener("ReplayEvent", ReplayAgent);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//private void ReplayAgent(IMessage obj)
|
||
|
//{
|
||
|
// var eventData = (EventData)obj.Data;
|
||
|
// if (eventData.eventType == RecordEventType.TruckArmRice)
|
||
|
// {
|
||
|
// if (eventData.cloneObjType == gameinfo.gameObjType)
|
||
|
// {
|
||
|
// TruckArmRiceData data = Newtonsoft.Json.JsonConvert.DeserializeObject<TruckArmRiceData>(eventData.json);
|
||
|
// if (data.GameId == gameinfo.gameObjID)
|
||
|
// {
|
||
|
// ReplayArmRice(data);
|
||
|
// }
|
||
|
// }
|
||
|
// }
|
||
|
// else if (eventData.eventType == RecordEventType.TruckArmRotation)
|
||
|
// {
|
||
|
// if (eventData.cloneObjType == gameinfo.gameObjType)
|
||
|
// {
|
||
|
// TruckArmRotateData data = Newtonsoft.Json.JsonConvert.DeserializeObject<TruckArmRotateData>(eventData.json);
|
||
|
// if (data.GameId == gameinfo.gameObjID)
|
||
|
// {
|
||
|
// ReplayArmRotate(data);
|
||
|
// }
|
||
|
// }
|
||
|
// }
|
||
|
//}
|
||
|
//public abstract void ReplayArmRice(TruckArmRiceData data);
|
||
|
//public abstract void ReplayArmRotate(TruckArmRotateData data);
|
||
|
internal void RadioSelect(IMessage obj)
|
||
|
{
|
||
|
//var gameObjID = (long)obj.Sender;
|
||
|
//if (gameObjID != GameObjID)
|
||
|
//{
|
||
|
// if (RecordEvent.IsRecord())
|
||
|
// {
|
||
|
// if (QuaternionEventData != null)
|
||
|
// AddRotationEvent(QuaternionChangeTran);
|
||
|
// if (SizeEventData != null)
|
||
|
// AddSizeEvent(transform);
|
||
|
// }
|
||
|
//}
|
||
|
}
|
||
|
private void GetButtonUp(IMessage obj)
|
||
|
{
|
||
|
//var gameObjID = (long)obj.Sender;
|
||
|
//if (gameObjID == GameObjID)
|
||
|
//{
|
||
|
// if (RecordEvent.IsRecord())
|
||
|
// {
|
||
|
// if (QuaternionEventData != null)
|
||
|
// AddRotationEvent(QuaternionChangeTran);
|
||
|
// if (SizeEventData != null)
|
||
|
// AddSizeEvent(transform);
|
||
|
// }
|
||
|
//}
|
||
|
}
|
||
|
|
||
|
private void Awake()
|
||
|
{
|
||
|
Nav = GetComponent<AgentController>();
|
||
|
InitObject();
|
||
|
CarAnimationCtrl = GetComponent<CarAnimationCtrl>();
|
||
|
MessageDispatcher.AddListener("GetButtonUp", GetButtonUp);
|
||
|
gameinfo = GetComponent<CloneGameObjInfo>();
|
||
|
SetHeight(ArmLength);
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 赋值展出车臂长度
|
||
|
/// </summary>
|
||
|
/// <param name="outarmlength"></param>
|
||
|
public abstract void SetOutArmLength(float outarmlength);
|
||
|
/// <summary>
|
||
|
/// 赋值车臂总长度
|
||
|
/// </summary>
|
||
|
/// <param name="Height"></param>
|
||
|
public abstract void SetHeight(float Height);
|
||
|
/// <summary>
|
||
|
/// 升起车臂
|
||
|
/// </summary>
|
||
|
/// <param name="weight"> 升起的权重(速度)</param>
|
||
|
public abstract void Raise(float weight);
|
||
|
/// <summary>
|
||
|
/// 下降车臂
|
||
|
/// </summary>
|
||
|
/// <param name="weight">下降的权重(速度)</param>
|
||
|
public abstract void Decline(float weight);
|
||
|
public abstract void ArmResert();
|
||
|
/// <summary>
|
||
|
/// 车辆举臂同步
|
||
|
/// </summary>
|
||
|
/// <param name="IsRice"></param>
|
||
|
public abstract void TruckArmSync(bool IsRice=true);
|
||
|
/// <summary>
|
||
|
/// 车辆举臂旋转同步
|
||
|
/// </summary>
|
||
|
/// <param name="armType"></param>
|
||
|
public void TruckArmRotateSync(RotateArmType armType)
|
||
|
{
|
||
|
TruckArmRotateSyncData data = new TruckArmRotateSyncData()
|
||
|
{
|
||
|
gameObjID = gameinfo.gameObjID,
|
||
|
RotateArmType = armType,
|
||
|
};
|
||
|
switch (armType)
|
||
|
{
|
||
|
case RotateArmType.HorizontalBaseSupport:
|
||
|
data.ArmEulerAngle = HorizontalBaseSupport.localEulerAngles;
|
||
|
break;
|
||
|
case RotateArmType.VerticalBaseSupport:
|
||
|
data.ArmEulerAngle = VerticalBaseSupport.localEulerAngles;
|
||
|
break;
|
||
|
case RotateArmType.LastArm:
|
||
|
data.ArmEulerAngle = LastArm.localEulerAngles;
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
data.SendUserID = CurrentUserInfo.mySelf.Id;
|
||
|
NetworkManager.Default.SendAsync("TRUCK_ARM_ROTATE_SYNC", data);
|
||
|
}
|
||
|
private void TruckArmSyncFunc(BinaryMessage obj)
|
||
|
{
|
||
|
var data = obj.Body.Deserialize<TruckArmRiseSyncData>();
|
||
|
|
||
|
if (data.gameObjID == gameinfo.gameObjID)
|
||
|
{
|
||
|
if (CurrentUserInfo.mySelf.Id!=data.SendUserID)
|
||
|
{
|
||
|
TruckArmSyncFunc(data);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
public abstract void TruckArmSyncFunc(TruckArmRiseSyncData data);
|
||
|
|
||
|
private void TruckArmRotateSyncFunc(BinaryMessage obj)
|
||
|
{
|
||
|
var data = obj.Body.Deserialize<TruckArmRotateSyncData>();
|
||
|
|
||
|
if (data.gameObjID == gameinfo.gameObjID)
|
||
|
{
|
||
|
// TruckArmRotateSyncFunc();
|
||
|
if (CurrentUserInfo.mySelf.Id!=data.SendUserID)
|
||
|
{
|
||
|
switch (data.RotateArmType )
|
||
|
{
|
||
|
case RotateArmType.HorizontalBaseSupport:
|
||
|
HorizontalBaseSupport.localEulerAngles=data.ArmEulerAngle;
|
||
|
break;
|
||
|
case RotateArmType.VerticalBaseSupport:
|
||
|
VerticalBaseSupport.localEulerAngles= data.ArmEulerAngle;
|
||
|
break;
|
||
|
case RotateArmType.LastArm:
|
||
|
LastArm.localEulerAngles= data.ArmEulerAngle;
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
//public void TruckArmRotateSyncFunc()
|
||
|
//{
|
||
|
|
||
|
//}
|
||
|
//public void AddTruckArmRiceEvent(TruckArmRiceData data)
|
||
|
//{
|
||
|
// var eventData = new EventData();
|
||
|
// eventData.time = RecordManager.Instance.RecordTimer;
|
||
|
// eventData.cloneObjType = GetComponent<CloneGameObjInfo>().gameObjType;
|
||
|
// eventData.eventType = RecordEventType.TruckArmRice;
|
||
|
// eventData.json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
|
||
|
// RecordManager.Instance.jsonData.eventDataList.Add(eventData);
|
||
|
|
||
|
//}
|
||
|
//public void AddTruckArmRotateEvent(TruckArmRotateData data)
|
||
|
//{
|
||
|
|
||
|
// var eventData = new EventData();
|
||
|
// eventData.time = RecordManager.Instance.RecordTimer;
|
||
|
// eventData.cloneObjType = GetComponent<CloneGameObjInfo>().gameObjType;
|
||
|
// eventData.eventType = RecordEventType.TruckArmRotation;
|
||
|
// eventData.json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
|
||
|
// RecordManager.Instance.jsonData.eventDataList.Add(eventData);
|
||
|
//}
|
||
|
protected abstract void InitObject();
|
||
|
/// <summary>
|
||
|
/// 换算原始角度值为显式值
|
||
|
/// </summary>
|
||
|
/// <param name="x">获取的原始角度值</param>
|
||
|
/// <returns></returns>
|
||
|
protected float CheckValue(float x)
|
||
|
{
|
||
|
if (x >= 180 && x <= 360)
|
||
|
{
|
||
|
x = x - 360;
|
||
|
}
|
||
|
return x;
|
||
|
//举例:假如获取到的localEulerAngles.x = 300,则在显示面板其显示的值为-60=300-360,用此显式值计算
|
||
|
}
|
||
|
}
|