海淀天下城电子沙盘单机版
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.

184 lines
6.0 KiB

4 years ago
using AX.MessageSystem;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RobotAttribute : ToolAttribute {
public GameObject water;
public WaterReceiver receiver;
public bool IsAutoSwing;
public Transform SwingTrans;
private Vector3 orirotate;
private float timer;
protected override void Awake()
{
orirotate = SwingTrans.transform.localEulerAngles;
water = transform.Find("Gunturret/WaterStraight").gameObject;
water.SetActive(false);
receiver = GetComponent<WaterReceiver>();
gameObjType = CloneObjType.Robot;
typeName = "灭火机器人";
MessageDispatcher.AddListener("WaterSourceChanged", WaterSourceChanged);
MessageDispatcher.AddListener("WaterSeparaterChange", WaterseparadChange);
MessageDispatcher.AddListener("AutoSwing", AutoSwingCon);
base.Awake();
}
protected override void OnDestroy()
{
base.OnDestroy();
MessageDispatcher.RemoveListener("WaterSourceChanged", WaterSourceChanged);
MessageDispatcher.RemoveListener("WaterSeparaterChange", WaterseparadChange);
MessageDispatcher.RemoveListener("AutoSwing", AutoSwingCon);
}
private void AutoSwingCon(IMessage obj)
{
if ((long)obj.Data==GetComponent<BaseGameObjInfo>().gameObjID)
{
IsAutoSwing = !IsAutoSwing;
AddExecuteEvent();
}
}
private void AddExecuteEvent()
{
if (ReplaySetting.PlayStatus == PlayStatus.isEditor && RecordManager.Instance.recordStatus == RecordStatus.normal)
{
var eventData = new EventData();
var msg = GetComponent<CloneGameObjInfo>();
eventData.time = RecordManager.Instance.RecordTimer;
eventData.cloneObjType = msg.gameObjType;
eventData.eventType = RecordEventType.AutoSwing;
var data = new RecordWaterReceiver();
data.IsAutoSwing = IsAutoSwing;
data.ID = GetComponent<BaseGameObjInfo>().gameObjID;
string json = JsonUtility.ToJson(data);
eventData.json = json;
RecordManager.Instance.jsonData.eventDataList.Add(eventData);
}
}
protected override void ExecuteEvent(IMessage obj)
{
base.ExecuteEvent(obj);
var eventData = (EventData)obj.Data;
if (eventData.eventType == RecordEventType.AutoSwing && eventData.cloneObjType == gameObjType)
{
var arg = JsonUtility.FromJson<RecordWaterReceiver>(eventData.json);
if (arg.ID==GetComponent<BaseGameObjInfo>().gameObjID)
{
IsAutoSwing = arg.IsAutoSwing;
}
}
}
private void WaterseparadChange(IMessage obj)
{
var data = (Waterseparadata)obj.Data;
var msg = GetComponent<CloneGameObjInfo>();
if (msg.gameObjID == data.receiveId)
{
receiver.hasSupplier = data.IsContent;
if (msg.gameObjID == data.receiveId && data.IsContent == false && task == "灭火")
{
task = "待命";
Execute(task);
}
}
}
protected override void Execute(string TaskName)
{
task = TaskName;
if (TaskName.Contains("灭火"))
{
//if (receiver.hasSupplier == true)
//{
// water.SetActive(true);
//}
//else
//{
// ResourceLoadWindow.Instance.LoadTextHintWindow("请先连接水源", 2);
// task = "待命";
//}
if (receiver.hasSupplier == true)
{
// WaterType type = GetSupplerWaterType(receiver);
// if (type !=WaterType.none)
{
water.SetActive(true);
}
//else
//{
// ResourceLoadWindow.Instance.LoadTextHintWindow("请先连接水源", 2);
//}
}
else
{
ResourceLoadWindow.Instance.LoadTextHintWindow("请先连接水源", 2);
}
}
else
{
water.SetActive(false);
}
if (TaskName.Contains("自动摇摆"))
{
IsAutoSwing = true;
}
else
{
IsAutoSwing = false;
SwingTrans.localEulerAngles = orirotate;
}
}
private WaterType GetSupplerWaterType(WaterReceiver receiver)
{
WaterType type = WaterType.none;
GameObject waterline = EntitiesManager.Instance.GetEntityByID(receiver.waterlinelist[0]);
GameObject suppler = EntitiesManager.Instance.GetEntityByID(waterline.GetComponent<WaterLineInfo>().SupplierID);
type = suppler.GetComponent<WaterSupplier>().WaterReceiverType;
return type;
}
private void WaterSourceChanged(IMessage obj)
{
var data = (WaterConnectionData)obj.Data;
var msg = GetComponent<CloneGameObjInfo>();
if (msg.gameObjID == data.receiverID && data.connected == false && task == "灭火")
{
task = "待命";
Execute(task);
}
}
private void Update()
{
if (IsAutoSwing)
{
timer += Time.deltaTime;
if (timer > 12f)
{
timer = 0f;
}
else if (timer < 3)
{
SwingTrans.localEulerAngles += new Vector3(0, Time.deltaTime * 10, 0);
}
else if (timer < 6)
{
SwingTrans.localEulerAngles += new Vector3(0, -Time.deltaTime * 10, 0);
}
else if (timer < 9)
{
SwingTrans.localEulerAngles += new Vector3(0, -Time.deltaTime * 10, 0);
}
else if (timer < 12)
{
SwingTrans.localEulerAngles += new Vector3(0, Time.deltaTime * 10, 0);
}
}
}
}