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.
401 lines
14 KiB
401 lines
14 KiB
using AX.InputSystem; |
|
using AX.MessageSystem; |
|
using System; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
using UnityEngine; |
|
|
|
public enum RotateAxis |
|
{ |
|
X, |
|
Y, |
|
Z, |
|
} |
|
public class FCGSPControl : ObjDoubleClick |
|
{ |
|
public bool IsWartering; |
|
public Transform particle; |
|
private long id; |
|
public GameObject part; |
|
public GameObject water; |
|
public Transform Hrotate; |
|
public Transform Vrotate; |
|
public RotateAxis HAxis; |
|
public RotateAxis VAxis; |
|
public string Hpath; |
|
public string Vpath; |
|
public float MaxV; |
|
public float MinV; |
|
private void Awake() |
|
{ |
|
//sp/sp_bi/sp_tou |
|
int num = int.Parse(name.Substring(4,name.Length-4)); |
|
|
|
////if (gameObject.name.Split('_').Length > 0) |
|
//{ |
|
id = 1990199019901990 + num;//(long.Parse)(gameObject.name.Split('_')[1]); |
|
GetComponent<BaseGameObjInfo>().gameObjID = id; |
|
gameObject.name = id.ToString(); |
|
//} |
|
EntitiesManager.Instance.AddEntity(id, gameObject); |
|
if (!SelectedObjs.gameObjs.Contains(gameObject)) |
|
SelectedObjs.gameObjs.Add(gameObject); |
|
if (!water) |
|
{ |
|
water = GameObject.Instantiate(part, transform); |
|
} |
|
particle = transform.GetComponentInChildren<ParticleControlOfType>(true).transform; |
|
Hrotate = transform.Find(Hpath); |
|
Vrotate = transform.Find(Vpath); |
|
if (particle.gameObject.activeInHierarchy) |
|
{ |
|
particle.gameObject.SetActive(false); |
|
} |
|
|
|
} |
|
// Start is called before the first frame update |
|
void Start() |
|
{ |
|
MessageDispatcher.AddListener("ReplayFrame", ReplayFrameZDSP); |
|
MessageDispatcher.AddListener("ReplayEvent", ReplayEventZDSP); |
|
MessageDispatcher.AddListener("EQUALS_COMMAND", PressureUp); |
|
MessageDispatcher.AddListener("MINUS_COMMAND", PressureDown); |
|
MessageDispatcher.AddListener("U_COMMAND", U); |
|
MessageDispatcher.AddListener("J_COMMAND", J); |
|
MessageDispatcher.AddListener("H_COMMAND", H); |
|
MessageDispatcher.AddListener("K_COMMAND", K); |
|
} |
|
|
|
private void OnDestroy() |
|
{ |
|
MessageDispatcher.RemoveListener("ReplayFrame", ReplayFrameZDSP); |
|
MessageDispatcher.RemoveListener("ReplayEvent", ReplayEventZDSP); |
|
MessageDispatcher.RemoveListener("EQUALS_COMMAND", PressureUp); |
|
MessageDispatcher.RemoveListener("MINUS_COMMAND", PressureDown); |
|
MessageDispatcher.RemoveListener("U_COMMAND", U); |
|
MessageDispatcher.RemoveListener("J_COMMAND", J); |
|
MessageDispatcher.RemoveListener("H_COMMAND", H); |
|
MessageDispatcher.RemoveListener("K_COMMAND", K); |
|
} |
|
|
|
private void K(IMessage obj) |
|
{ |
|
if (Hrotate==null) |
|
{ |
|
return; |
|
} |
|
var gameObjID = (long)obj.Sender; |
|
if (GetComponent<BaseGameObjInfo>().gameObjID == gameObjID) |
|
{ |
|
var speed = ((WeightCmdArgs)obj.Data).Weight * 2f; |
|
switch (HAxis) |
|
{ |
|
case RotateAxis.X: |
|
//var x = CheckV(Vrotate.localEulerAngles.x); |
|
Hrotate.localEulerAngles += new Vector3(speed, 0, 0); |
|
break; |
|
case RotateAxis.Y: |
|
Hrotate.localEulerAngles += new Vector3(0, speed, 0); |
|
break; |
|
case RotateAxis.Z: |
|
|
|
Hrotate.localEulerAngles += new Vector3(0, 0, speed); |
|
break; |
|
default: |
|
break; |
|
} |
|
RecordEvent.AddEventData(CloneObjType.None, RecordEventType.ZDSP, JsonUtility.ToJson(GetData())); |
|
} |
|
} |
|
|
|
private void H(IMessage obj) |
|
{ |
|
if (Hrotate == null) |
|
{ |
|
return; |
|
} |
|
var gameObjID = (long)obj.Sender; |
|
if (GetComponent<BaseGameObjInfo>().gameObjID == gameObjID) |
|
{ |
|
var speed = ((WeightCmdArgs)obj.Data).Weight * 2f; |
|
switch (HAxis) |
|
{ |
|
case RotateAxis.X: |
|
//var x = CheckV(Vrotate.localEulerAngles.x); |
|
Hrotate.localEulerAngles -= new Vector3(speed, 0, 0); |
|
break; |
|
case RotateAxis.Y: |
|
Hrotate.localEulerAngles -= new Vector3(0, speed, 0); |
|
break; |
|
case RotateAxis.Z: |
|
|
|
Hrotate.localEulerAngles -= new Vector3(0, 0, speed); |
|
break; |
|
default: |
|
break; |
|
} |
|
|
|
RecordEvent.AddEventData(CloneObjType.None, RecordEventType.ZDSP, JsonUtility.ToJson(GetData())); |
|
} |
|
} |
|
|
|
private void J(IMessage obj) |
|
{ |
|
if (Vrotate==null) |
|
{ |
|
return; |
|
} |
|
var gameObjID = (long)obj.Sender; |
|
if (GetComponent<BaseGameObjInfo>().gameObjID == gameObjID) |
|
{ |
|
var speed = ((WeightCmdArgs)obj.Data).Weight * 2f; |
|
switch (VAxis) |
|
{ |
|
case RotateAxis.X: |
|
var x = CheckV(Vrotate.localEulerAngles.x); |
|
if (x < MinV) |
|
{ |
|
Vrotate.localEulerAngles = new Vector3(MinV, Vrotate.localEulerAngles.y, Vrotate.localEulerAngles.z); |
|
return; |
|
} |
|
Vrotate.localEulerAngles -= new Vector3(speed, 0, 0); |
|
break; |
|
case RotateAxis.Y: |
|
var y = CheckV(Vrotate.localEulerAngles.y); |
|
if (y < MinV) |
|
{ |
|
Vrotate.localEulerAngles = new Vector3(Vrotate.localEulerAngles.x, y, Vrotate.localEulerAngles.z); |
|
return; |
|
} |
|
Vrotate.localEulerAngles -= new Vector3(0, speed, 0); |
|
break; |
|
case RotateAxis.Z: |
|
var z = CheckV(Vrotate.localEulerAngles.z); |
|
if (z < MinV) |
|
{ |
|
Vrotate.localEulerAngles = new Vector3(Vrotate.localEulerAngles.x, Vrotate.localEulerAngles.y, z); |
|
return; |
|
} |
|
Vrotate.localEulerAngles -= new Vector3(0, 0, speed); |
|
break; |
|
default: |
|
break; |
|
} |
|
|
|
RecordEvent.AddEventData(CloneObjType.None, RecordEventType.ZDSP, JsonUtility.ToJson(GetData())); |
|
} |
|
} |
|
|
|
private void U(IMessage obj) |
|
{ |
|
if (Vrotate == null) |
|
{ |
|
return; |
|
} |
|
var gameObjID = (long)obj.Sender; |
|
if (GetComponent<BaseGameObjInfo>().gameObjID == gameObjID) |
|
{ |
|
var speed = ((WeightCmdArgs)obj.Data).Weight * 2f; |
|
switch (VAxis) |
|
{ |
|
case RotateAxis.X: |
|
var x = CheckV(Vrotate.localEulerAngles.x); |
|
if (x>MaxV) |
|
{ |
|
Vrotate.localEulerAngles = new Vector3(MaxV, Vrotate.localEulerAngles.y, Vrotate.localEulerAngles.z); |
|
return; |
|
} |
|
Vrotate.localEulerAngles += new Vector3( speed, 0,0); |
|
break; |
|
case RotateAxis.Y: |
|
var y = CheckV(Vrotate.localEulerAngles.y); |
|
if (y > MaxV) |
|
{ |
|
Vrotate.localEulerAngles = new Vector3(Vrotate.localEulerAngles.x, y, Vrotate.localEulerAngles.z); |
|
return; |
|
} |
|
Vrotate.localEulerAngles += new Vector3( 0,speed, 0); |
|
break; |
|
case RotateAxis.Z: |
|
var z = CheckV(Vrotate.localEulerAngles.z); |
|
if (z > MaxV) |
|
{ |
|
Vrotate.localEulerAngles = new Vector3(Vrotate.localEulerAngles.x, Vrotate.localEulerAngles.y, z); |
|
return; |
|
} |
|
Vrotate.localEulerAngles += new Vector3(0, 0,speed); |
|
break; |
|
default: |
|
break; |
|
} |
|
ZDSPData data = GetData(); |
|
RecordEvent.AddEventData(CloneObjType.None, RecordEventType.ZDSP, JsonUtility.ToJson(data)); |
|
} |
|
} |
|
|
|
private void PressureDown(IMessage obj) |
|
{ |
|
var gameObjID = (long)obj.Sender; |
|
if (GetComponent<BaseGameObjInfo>().gameObjID == gameObjID) |
|
{ |
|
var speed = ((WeightCmdArgs)obj.Data).Weight*0.1f; |
|
float size = particle.GetComponent<ParticleControlOfType>().GetScaleValue(); |
|
particle.GetComponent<ParticleControlOfType>().SetScaleValue(size - speed); |
|
RecordEvent.AddEventData(CloneObjType.None, RecordEventType.ZDSP, JsonUtility.ToJson(GetData())); |
|
} |
|
} |
|
|
|
private void PressureUp(IMessage obj) |
|
{ |
|
if (SelectedObjs.selectedObj == gameObject && ReplaySetting.PlayStatus != PlayStatus.isReplay) |
|
{ |
|
var gameObjID = (long)obj.Sender; |
|
if (GetComponent<BaseGameObjInfo>().gameObjID == gameObjID) |
|
{ |
|
var speed = ((WeightCmdArgs)obj.Data).Weight*0.1f; |
|
float size= particle.GetComponent<ParticleControlOfType>().GetScaleValue(); |
|
particle.GetComponent<ParticleControlOfType>().SetScaleValue(size+speed); |
|
RecordEvent.AddEventData(CloneObjType.None, RecordEventType.ZDSP, JsonUtility.ToJson(GetData())); |
|
} |
|
} |
|
} |
|
|
|
private void ReplayEventZDSP(IMessage obj) |
|
{ |
|
var eventData = (EventData)obj.Data; |
|
if (eventData.eventType == RecordEventType.ZDSP) |
|
{ |
|
ZDSPData data = JsonUtility.FromJson<ZDSPData>(eventData.json); |
|
if (data.name == gameObject.name) |
|
SetData(data); |
|
} |
|
} |
|
|
|
private void ReplayFrameZDSP(IMessage obj) |
|
{ |
|
var objectData = (ObjectData)obj.Data; |
|
if (objectData.cloneObjType == CloneObjType.ZDSP) |
|
{ |
|
ZDSPData data = JsonUtility.FromJson<ZDSPData>(objectData.json); |
|
if (data.name == gameObject.name) |
|
SetData(data); |
|
} |
|
} |
|
void SetData(ZDSPData data) |
|
{ |
|
id = data.id; |
|
GetComponent<BaseGameObjInfo>().gameObjID = data.id; |
|
IsWartering = data.isWatering; |
|
particle.GetComponent<ParticleControlOfType>().SetScaleValue(data.scale); |
|
switch (HAxis) |
|
{ |
|
case RotateAxis.X: |
|
Hrotate.localEulerAngles = new Vector3(data.HRoate, Hrotate.localEulerAngles.y, Hrotate.localEulerAngles.z); |
|
break; |
|
case RotateAxis.Y: |
|
Hrotate.localEulerAngles = new Vector3( Hrotate.localEulerAngles.x, data.HRoate, Hrotate.localEulerAngles.z); |
|
break; |
|
case RotateAxis.Z: |
|
Hrotate.localEulerAngles = new Vector3(Hrotate.localEulerAngles.x, Hrotate.localEulerAngles.y, data.HRoate); |
|
break; |
|
default: |
|
break; |
|
} |
|
switch (VAxis) |
|
{ |
|
case RotateAxis.X: |
|
Vrotate.localEulerAngles = new Vector3(data.VRoate, Vrotate.localEulerAngles.y, Vrotate.localEulerAngles.z); |
|
break; |
|
case RotateAxis.Y: |
|
Vrotate.localEulerAngles = new Vector3(Vrotate.localEulerAngles.x, data.VRoate, Vrotate.localEulerAngles.z); |
|
break; |
|
case RotateAxis.Z: |
|
Vrotate.localEulerAngles = new Vector3(Vrotate.localEulerAngles.x, Vrotate.localEulerAngles.y, data.VRoate); |
|
break; |
|
default: |
|
break; |
|
} |
|
//Hrotate.localEulerAngles = new Vector3(Hrotate.localEulerAngles.x, Hrotate.localEulerAngles.y, data.xRoate); |
|
// Pao.localEulerAngles = new Vector3(data.yRoate, Pao.localEulerAngles.y, Pao.localEulerAngles.z); |
|
if (IsWartering) |
|
particle.gameObject.SetActive(true); |
|
else |
|
particle.gameObject.SetActive(false); |
|
} |
|
// Update is called once per frame |
|
void Update() |
|
{ |
|
|
|
} |
|
public override void ClickFunc() |
|
{ |
|
base.ClickFunc(); |
|
|
|
if (!IsWartering) |
|
ResourceLoadWindow.Instance.LoadTipWindow("开启喷水?", () => |
|
{ |
|
IsWartering = true; |
|
particle.gameObject.SetActive(true); |
|
RecordEvent.AddEventData(CloneObjType.None, RecordEventType.ZDSP, JsonUtility.ToJson(GetData())); |
|
}, null); |
|
else |
|
ResourceLoadWindow.Instance.LoadTipWindow("关闭喷水?", () => |
|
{ |
|
IsWartering = false; |
|
particle.gameObject.SetActive(false); |
|
RecordEvent.AddEventData(CloneObjType.None, RecordEventType.ZDSP, JsonUtility.ToJson(GetData())); |
|
}, null); |
|
} |
|
public ZDSPData GetData() |
|
{ |
|
ZDSPData data = new ZDSPData |
|
{ |
|
name = gameObject.name, |
|
id = this.id, |
|
isWatering = IsWartering, |
|
scale = particle.GetComponent<ParticleControlOfType>().GetScaleValue(), |
|
HAxis = HAxis, |
|
VAxis = VAxis, |
|
// xRoate = Hrotate.localEulerAngles.z, |
|
// yRoate = Vrotate.localEulerAngles.x |
|
}; |
|
switch (data.VAxis) |
|
{ |
|
case RotateAxis.X: |
|
data.VRoate= Vrotate.localEulerAngles.x; |
|
break; |
|
case RotateAxis.Y: |
|
data.VRoate = Vrotate.localEulerAngles.y; |
|
break; |
|
case RotateAxis.Z: |
|
data.VRoate = Vrotate.localEulerAngles.z; |
|
break; |
|
default: |
|
break; |
|
} |
|
switch (data.HAxis) |
|
{ |
|
case RotateAxis.X: |
|
data.HRoate = Hrotate.localEulerAngles.x; |
|
break; |
|
case RotateAxis.Y: |
|
data.HRoate = Hrotate.localEulerAngles.y; |
|
break; |
|
case RotateAxis.Z: |
|
data.HRoate = Hrotate.localEulerAngles.z; |
|
break; |
|
default: |
|
break; |
|
} |
|
return data; |
|
|
|
} |
|
private float CheckV(float x) |
|
{ |
|
if (x >= 180 && x <= 360) |
|
{ |
|
x = x - 360; |
|
} |
|
return x; |
|
} |
|
}
|
|
|