using UnityEngine; namespace BrewMonster { public class CECTaoistRank { private int m_id; // ���漶���ID / Rank ID private string m_name; // ���漶���ID / Rank name private CECTaoistRank m_next; static bool initComplete = false; public static CECTaoistRank[] s_allTaoistRanks = new CECTaoistRank[(int)ToaistRank.TotalRankCount]; public static readonly int[] TaoistRankIDs = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 20, 21, 22, 30, 31, 32 }; #if UNITY_EDITOR [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] private static void OnPlay() { initComplete = false; CECTaoistRank[] s_allTaoistRanks = new CECTaoistRank[(int)ToaistRank.TotalRankCount]; } #endif public int GetID() { return m_id; } public string GetName() { return string.IsNullOrEmpty(m_name) ? $"Rank {m_id}" : m_name; } public bool IsGodRank() { CECTaoistRank GodRank; for (GodRank = GetGodRankBegin(); GodRank != GetGodRankEnd(); GodRank = GodRank.GetNext()) { if (this == GodRank) { return true; } } return false; } public static CECTaoistRank GetBaseRankBegin() { init(); return s_allTaoistRanks[0]; } public static CECTaoistRank GetBaseRankEnd() { init(); return s_allTaoistRanks[(int)ToaistRank.BaseRankCount - 1].m_next; } public static CECTaoistRank GetGodRankBegin() { init(); return s_allTaoistRanks[(int)ToaistRank.BaseRankCount]; } public static CECTaoistRank GetGodRankEnd() { init(); return GetLastGodRank().m_next; } public static CECTaoistRank GetLastGodRank() { init(); return s_allTaoistRanks[(int)ToaistRank.BaseRankCount + (int)ToaistRank.GodRankCount - 1]; } public bool IsBaseRank() { return !IsGodRank() && !IsEvilRank(); } public bool IsEvilRank() { CECTaoistRank EvilRank; for (EvilRank = GetEvilRankBegin(); EvilRank != GetEvilRankEnd(); EvilRank = EvilRank.GetNext()) { if (this == EvilRank) { return true; } } return false; } public CECTaoistRank GetNext() { return m_next; } public static CECTaoistRank GetEvilRankBegin() { init(); return s_allTaoistRanks[(int)ToaistRank.BaseRankCount + (int)ToaistRank.GodRankCount]; } public static CECTaoistRank GetEvilRankEnd() { init(); return GetLastEvilRank().m_next; } public static CECTaoistRank GetLastEvilRank() { init(); return s_allTaoistRanks[(int)ToaistRank.TotalRankCount - 1]; } public static CECTaoistRank GetTaoistRank(int id) { init(); for (int i = 0; i < (int)ToaistRank.TotalRankCount; i++) { if (TaoistRankIDs[i] == id) { return s_allTaoistRanks[i]; } } return null; } public static void init() { if (initComplete) { return; } for (int i = (int)ToaistRank.TotalRankCount - 1; i >= 0; i--) { if (s_allTaoistRanks[i] == null) { s_allTaoistRanks[i] = new CECTaoistRank(); } s_allTaoistRanks[i].m_id = TaoistRankIDs[i]; s_allTaoistRanks[i].m_name = CECUIManager.Instance.GetInGameUIMan().GetStringFromTable(1001 + s_allTaoistRanks[i].m_id); if (i != (int)ToaistRank.BaseRankCount - 1 && i != (int)ToaistRank.BaseRankCount + (int)ToaistRank.GodRankCount - 1 && i != (int)ToaistRank.TotalRankCount - 1) { s_allTaoistRanks[i].m_next = s_allTaoistRanks[i + 1]; } else { s_allTaoistRanks[i].m_next = null; } } initComplete = true; } } public enum ToaistRank { TotalRankCount = 15, BaseRankCount = 9, GodRankCount = 3, EvilRankCount = 3, }; }