using AX.MessageSystem;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public abstract class ToolAttribute : MonoBehaviour {
public string typeName; //类型名
public string task; //执行任务
protected DateTime t1, t2;
public string[] Tasklist;
protected CloneObjType gameObjType;
protected virtual void Awake()
{
task = "待命";
MessageDispatcher.AddListener("TaskChange", TaskChange);
MessageDispatcher.AddListener("ReplayEvent", ExecuteEvent);
}
protected virtual void OnDestroy()
{
MessageDispatcher.RemoveListener("TaskChange", TaskChange);
MessageDispatcher.RemoveListener("ReplayEvent", ExecuteEvent);
}
///
/// 回放
///
///
protected virtual void ExecuteEvent(IMessage obj)
{
var eventData = (EventData)obj.Data;
if (eventData.eventType == RecordEventType.ToolTask && eventData.cloneObjType == gameObjType)
{
var arg = JsonUtility.FromJson(eventData.json);
if(arg.objectName == gameObject.name)
{
Execute(arg.task);
}
}
}
protected void TaskChange(IMessage Message)
{
string task = (string)Message.Data;
if (SelectedObjs.selectedObj.GetComponent().gameObjID != gameObject.GetComponent().gameObjID)
return;
Execute(task);
AddExecuteEvent(task); //添加事件记录
}
public void ReplayTask(string task)
{
Execute(task);
}
protected abstract void Execute(string task);
protected virtual void OnMouseDown()
{
if (!EventSystem.current.IsPointerOverGameObject())
{
t2 = DateTime.Now;
if (t2 - t1 < new TimeSpan(0, 0, 0, 0, 300))
{
if(SelectedObjs.selectedObj ==gameObject)
ToolAttributePanel.Instance.SetAttribute(this.gameObject,typeName);
}
t1 = t2;
}
}
protected void AddExecuteEvent(string task)
{
if (ReplaySetting.PlayStatus == PlayStatus.isEditor && RecordManager.Instance.recordStatus == RecordStatus.normal)
{
var eventData = new EventData();
var msg = GetComponent();
eventData.time = RecordManager.Instance.RecordTimer;
eventData.cloneObjType = msg.gameObjType;
eventData.eventType = RecordEventType.ToolTask;
var data = new RecordSprayTool();
SetExecuteData(data, transform, task);
string json = JsonUtility.ToJson(data);
eventData.json = json;
RecordManager.Instance.jsonData.eventDataList.Add(eventData);
}
}
protected void SetExecuteData(RecordSprayTool data, Transform transform, string task)
{
var msg = transform.GetComponent();
data.gameObjType = msg.gameObjType;
data.objectName = transform.gameObject.name;
data.buildNum = msg.buildNum;
data.floorNum = msg.floorNum;
data.interlayerNum = msg.interlayerNum;
data.myTransform.setMyPosition(transform.localPosition);
data.myTransform.setMyRotation(transform.localRotation);
data.myTransform.setMyScale(transform.localScale);
data.task = task;
}
}