Browse Source

火蔓延记录回放修改。

二级节点修改顺序后修改本地顺序缓存
develop
曹衍涛 4 years ago
parent
commit
93d5432d33
  1. 135
      Assets/Scripts/DisasterSetting/SpreadFireManager.cs
  2. 11
      Assets/Scripts/DisasterSetting/SpreadFireManager.cs.meta
  3. 1
      Assets/Scripts/Replay/SecondNodeItem.cs
  4. 58
      Assets/Scripts/Replay/SecondNodeManager.cs

135
Assets/Scripts/DisasterSetting/SpreadFireManager.cs

@ -0,0 +1,135 @@
using AX.MessageSystem;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[Serializable]
public class SpreadFireData
{
public long sourceId;
public string name;
public Vector3 position;//位置
public Vector3 eulerAngles;//旋转
public Vector3 scale;//缩放
public string buildNum;//楼号
public int floorNum;//层号
public int interlayerNum;//夹层号,0表示不是夹层,1表示第一个夹层
public int Layer;
public string UserId;
}
[Serializable]
public class SpreadFireRecordData//蔓延出来的火的帧数据
{
public List<SpreadFireData> spreadFiredataList = new List<SpreadFireData>();
}
public class SpreadFireManager : MonoBehaviour
{
public static SpreadFireManager Instance;
public GameObject firePrefab;
private void Awake()
{
Instance = this;
}
void Start()
{
MessageDispatcher.AddListener("ReplayFrame", ReplayFrameData);
MessageDispatcher.AddListener("ReplayEvent", ReplayEventData);
}
public SpreadFireRecordData GetFrameData()
{
SpreadFireRecordData recordData = new SpreadFireRecordData();
foreach (Transform item in transform)
{
SpreadFireData data = new SpreadFireData();
data.name = item.name;
data.sourceId = item.GetComponent<SpreadFire>().SourceId;
data.position = item.localPosition;
data.eulerAngles = item.localRotation.eulerAngles;
data.scale = item.localScale;
data.buildNum = item.GetComponent<CloneGameObjInfo>().buildNum;//楼号
data.floorNum = item.GetComponent<CloneGameObjInfo>().floorNum;//层号
data.interlayerNum = item.GetComponent<CloneGameObjInfo>().interlayerNum;//夹层号,0表示不是夹层,1表示第一个夹层
data.Layer = item.GetComponent<CloneGameObjInfo>().Layer;
recordData.spreadFiredataList.Add(data);
}
return recordData;
}
private void ReplayFrameData(IMessage obj)
{
var baseData = (ObjectData)obj.Data;
if (baseData.cloneObjType == CloneObjType.SpreadFireFrame)
{
ClearObject();
SpreadFireRecordData data = Newtonsoft.Json.JsonConvert.DeserializeObject<SpreadFireRecordData>(baseData.json);
if (data.spreadFiredataList.Count > 0)
{
foreach (var item in data.spreadFiredataList)
{
GameObject spreadfire = Instantiate(firePrefab, transform);
spreadfire.name = item.name;
spreadfire.transform.localPosition = item.position;
spreadfire.transform.localRotation = Quaternion.Euler
(item.eulerAngles.x, item.eulerAngles.y, item.eulerAngles.z) * Quaternion.identity;
spreadfire.transform.localScale = item.scale;
spreadfire.GetComponent<SpreadFire>().SourceId = item.sourceId;
spreadfire.GetComponent<CloneGameObjInfo>().buildNum = item.buildNum;
spreadfire.GetComponent<CloneGameObjInfo>().floorNum = item.floorNum;
spreadfire.GetComponent<CloneGameObjInfo>().interlayerNum = item.interlayerNum;
spreadfire.GetComponent<CloneGameObjInfo>().Layer = item.Layer;
}
}
}
}
private void ClearObject()
{
foreach (Transform item in transform)
{
Destroy(item.gameObject);
}
}
private void ReplayEventData(IMessage obj)
{
var baseEventData = (EventData)obj.Data;
if (baseEventData.eventType == RecordEventType.SpreadFireCreat)
{
SpreadFireCreatData data = Newtonsoft.Json.JsonConvert.DeserializeObject<SpreadFireCreatData>(baseEventData.json);
GameObject spreadfire = Instantiate(firePrefab, transform);
spreadfire.name = data.name;
spreadfire.transform.localPosition = data.position;
spreadfire.transform.localRotation = Quaternion.Euler
(data.eulerAngles.x, data.eulerAngles.y, data.eulerAngles.z) * Quaternion.identity;
spreadfire.transform.localScale = data.scale;
spreadfire.GetComponent<SpreadFire>().SourceId = data.sourceId;
spreadfire.GetComponent<CloneGameObjInfo>().buildNum = data.buildNum;
spreadfire.GetComponent<CloneGameObjInfo>().floorNum = data.floorNum;
spreadfire.GetComponent<CloneGameObjInfo>().interlayerNum = data.interlayerNum;
spreadfire.GetComponent<CloneGameObjInfo>().Layer = data.Layer;
}
else if (baseEventData.eventType == RecordEventType.SpreadFireDestory)
{
foreach (Transform item in transform)
{
if (item.GetComponent<SpreadFire>())
{
SpreadFireDestoryData data = (SpreadFireDestoryData)obj.Data;
if (item.GetComponent<SpreadFire>().SourceId == data.sourceId)
{
Destroy(item.gameObject);
}
}
}
}
}
private void OnDestroy()
{
MessageDispatcher.RemoveListener("ReplayEvent", ReplayEventData);
MessageDispatcher.RemoveListener("ReplayFrame", ReplayFrameData);
}
}

11
Assets/Scripts/DisasterSetting/SpreadFireManager.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4e6684051a4af9c4c98aaf06d09e77d9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

1
Assets/Scripts/Replay/SecondNodeItem.cs

@ -154,6 +154,7 @@ public class SecondNodeItem : MonoBehaviour, IPointerEnterHandler, IPointerExitH
//}
}
}
GetComponentInParent<SecondNodeManager>().UpdateSecondNodeSort(transform.parent);
dragNode.gameObject.SetActive(false);
}
}

58
Assets/Scripts/Replay/SecondNodeManager.cs

@ -232,7 +232,39 @@ public class SecondNodeManager : MonoBehaviour
nodeWindow.SetActive(false);
ReplaySetting.PlayStatus = PlayStatus.normal;
}
/// <summary>
/// 修改二级节点xml顺序
/// </summary>
public void UpdateSecondNodeSort(Transform NodeParent)
{
SecondNodeItem[] thisNodes = NodeParent.GetComponentsInChildren<SecondNodeItem>();
if (thisNodes.Length<1)
{
return;
}
for (int i = 0; i < thisNodes.Length; i++)
{
UpdataNodeXml(thisNodes[i].obj);
}
for (int i = 0; i < thisNodes.Length; i++)
{
for (int j = 0; j < list.Count; j++)
{
if (list[j].nodeID == thisNodes[i].obj.nodeID)
{
list.Remove(list[j]);
}
}
}
for (int i = 0; i < thisNodes.Length; i++)
{
AddXml(thisNodes[i].obj);
DisasterManager.secondNodeObjects.Add(thisNodes[i].obj);
}
}
private void AddNodeItem(SecondNodeObject obj)
{
GameObject item = Instantiate(itemPrefab, itemParent) as GameObject;
@ -273,6 +305,30 @@ public class SecondNodeManager : MonoBehaviour
DeleteXml(selectNode);//xml文件中删除
list.Remove(selectNode);
}
/// <summary>
/// 修改二级节点xml文件
/// </summary>
private void UpdataNodeXml(SecondNodeObject obj)
{
string filepath = DisasterManager.GetNodeListXML();
if (File.Exists(filepath))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filepath);
XmlNode nodes = xmlDoc.SelectSingleNode("NodeList/SecondNode/Nodes");
XmlNodeList nodeList = nodes.ChildNodes;
for (int i = 0; i < nodeList.Count; i++)
{
var node = nodeList[i] as XmlElement;
if (node.GetAttribute("ID") == obj.nodeID.ToString())
{
nodes.RemoveChild(node);
break;
}
}
xmlDoc.Save(filepath);
}
}
private void DeleteXml(SecondNodeObject obj)
{
//修改节点文件

Loading…
Cancel
Save