63 lines
2.4 KiB
C#
63 lines
2.4 KiB
C#
using LitJson;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using ZXKFramework;
|
|
|
|
namespace FSM
|
|
{
|
|
public class FsmConfigReader
|
|
{
|
|
public Dictionary<string, Dictionary<string, string>> map;//<״̬Ãû ,<Ìõ¼þÃû,״̬Ãû>>
|
|
public IEnumerator ReadConfigFile(string path, Action<Dictionary<string, Dictionary<string, string>>> callBack)
|
|
{
|
|
map = new();
|
|
yield return Game.Instance.res.ILoad<TextAsset>(path,text=> {
|
|
if (text == null) return;
|
|
List<JsonData> data = JsonMapper.ToObject<List<JsonData>>(text.text);
|
|
for (int i = 0; i < data.Count; i++)
|
|
{
|
|
if (!map.ContainsKey(data[i]["state"].ToString()))
|
|
{
|
|
map.Add(data[i]["state"].ToString(), new Dictionary<string, string>());
|
|
}
|
|
if (!string.IsNullOrEmpty(data[i]["trigger"].ToString()))
|
|
{
|
|
string[] triggers = data[i]["trigger"].ToString().Replace("\n", "").Split('|');
|
|
for (int j = 0; j < triggers.Length; j++)
|
|
{
|
|
map[data[i]["state"].ToString()].Add(triggers[j].Split('>')[0], triggers[j].Split('>')[1]);
|
|
}
|
|
}
|
|
}
|
|
callBack?.Invoke(map);
|
|
});
|
|
}
|
|
public void EditorReadConfigFile(string path)
|
|
{
|
|
if (string.IsNullOrEmpty(path)) return;
|
|
string str = Resources.Load<TextAsset>(path).text;
|
|
if (str == null) return;
|
|
map = new();
|
|
List<JsonData> data = JsonMapper.ToObject<List<JsonData>>(str);
|
|
for (int i = 0; i < data.Count; i++)
|
|
{
|
|
if (!map.ContainsKey(data[i]["state"].ToString()))
|
|
{
|
|
map.Add(data[i]["state"].ToString(), new Dictionary<string, string>());
|
|
}
|
|
string[] triggers = data[i]["trigger"].ToString().Replace("\n","").Split('|');
|
|
for (int j = 0; j < triggers.Length; j++)
|
|
{
|
|
if (!string.IsNullOrEmpty(triggers[j]))
|
|
{
|
|
map[data[i]["state"].ToString()].Add(triggers[j].Split('>')[0], triggers[j].Split('>')[1]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|