using UnityEngine; using System.Collections.Generic; public static class ActionHistory { public enum ActionType { Shose, ChanraoTuibu, PingFirst, PingSecond, Woman } public class HistoryItem { public ActionType Type; public MonoBehaviour Handler; public int ExtraInt; } public static Stack History = new Stack(); public static bool TryUndoLast() { if (History.Count == 0) return false; var item = History.Pop(); if (item.Type == ActionType.Shose) { var h = item.Handler as ShoseClickHandler; if (h != null) h.ResetState(); } else if (item.Type == ActionType.ChanraoTuibu) { var h = item.Handler as ChanraoTuibuHandler; if (h != null) h.ResetState(); } else if (item.Type == ActionType.PingSecond) { var h = item.Handler as PingClickHandler; if (h != null) h.UndoSecondClick(); // 撤销对 UI 步骤的影响 var sm = Object.FindObjectOfType(); if (sm != null) sm.DecrementPingStep(); } else if (item.Type == ActionType.PingFirst) { var h = item.Handler as PingClickHandler; if (h != null) { if (h.nextPing != null) h.nextPing.SetActive(false); else { var allPings = Object.FindObjectsOfType(); foreach (var p in allPings) { if (p != h) p.UndoShow(); } } h.ResetState(); } var sm = Object.FindObjectOfType(); if (sm != null) sm.DecrementPingStep(); } else if (item.Type == ActionType.Woman) { var sm = Object.FindObjectOfType(); if (sm != null) sm.DecrementWomanStep(); // 隐藏下一个小球并恢复当前小球 var h = item.Handler as TouchPositionHandler; if (h != null) { if (h.nextTouchObject != null) h.nextTouchObject.SetActive(false); h.gameObject.SetActive(true); var mr = h.GetComponent(); if (mr != null) mr.enabled = true; } } return true; } }