网上演练贵港万达广场(人员密集)
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.
 
 
 

177 lines
5.3 KiB

using AX.Network.Protocols;
using AX.NetworkSystem;
using AX.Serialization;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WaterGunRotate : MonoBehaviour
{
// 旋转速度
public float Speed = 10f;
// 水炮类型名称
public WaterGunType TypeName;
// 车辆水炮
public Transform WaterGun;
// 底座
public Transform WaterGunBottom;
// 方向-上
private int UpDirection = -1;
// 方向-左
private int LeftDirection = -1;
// 最小旋转度数
private int HorizontalAngleMin = -45;
// 最大旋转度数
private int HorizontalAngleMax = 45;
// 最小旋转度数
private int VerticalAngleMin = -45;
// 最大旋转度数
private int VerticalAngleMax = 45;
// objId
private long gameObjID;
private void Start()
{
gameObjID = GetComponent<BaseGameObjInfo>().gameObjID;
NetworkMessageDispatcher.AddListener("WATERGUN_ROTATE_SYNC", SetQuaternion);
}
private void OnDestroy()
{
NetworkMessageDispatcher.AddListener("WATERGUN_ROTATE_SYNC", SetQuaternion);
}
public void Up()
{
float x = WaterGun.localEulerAngles.x;
x = CheckValue(x);
SetDirection();
bool b = UpDirection == -1 ? x > VerticalAngleMin : x < VerticalAngleMax;
if (b)
{
WaterGun.Rotate(UpDirection * Speed, 0, 0, Space.Self);
}
RotateSync();
}
public void Down()
{
float x = WaterGun.localEulerAngles.x;
x = CheckValue(x);
SetDirection();
bool b = UpDirection == -1 ? x < VerticalAngleMax : x > VerticalAngleMin;
if (b)
{
WaterGun.Rotate(-UpDirection * Speed, 0, 0, Space.Self);
}
RotateSync();
}
public void Left()
{
float y = WaterGunBottom.localEulerAngles.y;
y = CheckValue(y);
SetDirection();
bool b = LeftDirection == -1 ? y > HorizontalAngleMin : y < HorizontalAngleMax;
if (b)
{
WaterGunBottom.Rotate(0, LeftDirection * Speed, 0, Space.Self);
}
RotateSync();
}
public void Right()
{
float y = WaterGunBottom.localEulerAngles.y;
y = CheckValue(y);
SetDirection();
bool b = LeftDirection == -1 ? y < HorizontalAngleMax : y > HorizontalAngleMin;
if (b)
{
WaterGunBottom.Rotate(0, -LeftDirection * Speed, 0, Space.Self);
}
RotateSync();
}
protected float CheckValue(float angles)
{
if (angles >= 180 && angles <= 360)
{
angles = angles - 360;
}
return angles;
}
protected void SetDirection()
{
switch (TypeName)
{
case WaterGunType.:
UpDirection = -1;
LeftDirection = 1;
HorizontalAngleMin = -45;
HorizontalAngleMax = 45;
VerticalAngleMin = -45;
VerticalAngleMax = 45;
break;
case WaterGunType.:
UpDirection = -1;
LeftDirection = -1;
HorizontalAngleMin = -45;
HorizontalAngleMax = 45;
VerticalAngleMin = -45;
VerticalAngleMax = 45;
break;
case WaterGunType.:
UpDirection = -1;
LeftDirection = -1;
HorizontalAngleMin = -45;
HorizontalAngleMax = 45;
VerticalAngleMin = -45;
VerticalAngleMax = 45;
break;
case WaterGunType.:
UpDirection = -1;
LeftDirection = -1;
HorizontalAngleMin = -360;
HorizontalAngleMax = 360;
VerticalAngleMin = -45;
VerticalAngleMax = 45;
break;
case WaterGunType.:
UpDirection = -1;
LeftDirection = -1;
HorizontalAngleMin = -360;
HorizontalAngleMax = 360;
VerticalAngleMin = -45;
VerticalAngleMax = 45;
break;
}
}
// 旋转同步
public void RotateSync()
{
var rotateSyncData = new RotateSyncData();
rotateSyncData.gameObjectID = GetComponent<BaseGameObjInfo>().gameObjID;
rotateSyncData.WaterGunRotation = WaterGun.transform.localRotation;
rotateSyncData.WaterGunBottomRotation = WaterGunBottom.transform.localRotation;
NetworkManager.Default.SendAsync("WATERGUN_ROTATE_SYNC", rotateSyncData);
}
void SetQuaternion(BinaryMessage message)
{
var data = message.Body.Deserialize<RotateSyncData>();
if (data.gameObjectID == gameObjID)
{
//SetQuaternion
WaterGun.transform.localRotation = data.WaterGunRotation;
WaterGunBottom.transform.localRotation = data.WaterGunBottomRotation;
}
}
}
public enum WaterGunType
{
,
,
,
,
}
//
public struct RotateSyncData
{
public long gameObjectID;
public Quaternion WaterGunRotation;
public Quaternion WaterGunBottomRotation;
}