public static void GenerateStateMachine(string path, string contextName, sStateInfo[] states) { if (!string.IsNullOrEmpty(path)) { if (path[path.Length - 1] != System.IO.Path.PathSeparator) { path += System.IO.Path.DirectorySeparatorChar; } List<string> stateNames = new List<string>(); List<sStateInfo> validStates = new List<sStateInfo>(states); List<int> invalidStateIndices = new List<int>(); for (int i = 0; i < states.Length; ++i) { if (!string.IsNullOrEmpty(states[i].Name) && !stateNames.Contains(states[i].Name)) { stateNames.Add(states[i].Name); } else { invalidStateIndices.Add(i); } } if (invalidStateIndices.Count > 0) { for (int invalidIndex = 0; invalidIndex < invalidStateIndices.Count; invalidIndex++) { validStates.Remove(states[invalidIndex]); } } List<string> transitionNames = new List<string>(); for (int validIndex = 0; validIndex < validStates.Count; ++validIndex) { for (int transitionIndex = 0; transitionIndex < validStates[validIndex].ValidTransitions.Length; ++transitionIndex) { if (!string.IsNullOrEmpty(validStates[validIndex].ValidTransitions[transitionIndex].TransitionName) && !transitionNames.Contains(validStates[validIndex].ValidTransitions[transitionIndex].TransitionName)) { transitionNames.Add(validStates[validIndex].ValidTransitions[transitionIndex].TransitionName); } } } string ns = string.Format("{0}.{1}", CodifyString(PlayerSettings.companyName), CodifyString(PlayerSettings.productName)); ContextGenerator contextGenerator = new ContextGenerator(); contextGenerator.Session = new Dictionary<string, object>(); contextGenerator.Session["m_Namespace"] = ns; contextGenerator.Session["m_ClassName"] = contextName; contextGenerator.Session["m_StateNames"] = stateNames.ToArray(); contextGenerator.Session["m_StartingStateIndex"] = 0; contextGenerator.Session["m_TransitionTypes"] = transitionNames; contextGenerator.Initialize(); string test = contextGenerator.TransformText(); if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } System.IO.File.WriteAllText(path + contextName + FILE_EXTENSION, test); AssetDatabase.Refresh(); } }
public static sStateInfo Load(Dictionary<string, object> data) { sStateInfo info = new sStateInfo(); if (data != null) { if (data.ContainsKey("Name")) { info.Name = data["Name"] as string; } if (data.ContainsKey("ValidTypes")) { List<object> validTransitions = data["ValidTypes"] as List<object>; if (validTransitions != null) { info.ValidTransitions = new sTransitionInfo[validTransitions.Count]; for (int i = 0; i < validTransitions.Count; ++i) { info.ValidTransitions[i] = sTransitionInfo.Load(validTransitions[i]); } } } } return info; }