using System; using System.Collections; using System.Collections.Generic; using System.Text; using Qoo.File; namespace Qoo.Ks { // Token: 0x0200003C RID: 60 public class KsData { // Token: 0x060001F0 RID: 496 RVA: 0x000083D8 File Offset: 0x000065D8 public IEnumerator LoadKsAll() { for (int i = 0; i != Akb.GetFileNum(); i++) { AKB_FILEINFO info = Akb.GetFileInfo(i); string name = info.Name; string path = Akb.GetDirInfo((int)info.nDirNo).Name; UnityFile file = Singleton.Instance.LoadKsFile(path + "/" + name + ".txt"); while (!file.IsReadEnd) { yield return 0; } string script = Encoding.Unicode.GetString(file.Data); this.m_DataList.Add(name, script); } yield break; } // Token: 0x060001F1 RID: 497 RVA: 0x000083F4 File Offset: 0x000065F4 public IEnumerator LoadKs(string ksname) { Debug.Print("BeforeLoad:KS:" + ksname); FileId id = new FileId(ksname); int no = Akb.SearchFile(id.Name); AKB_FILEINFO info = Akb.GetFileInfo(no); string name = info.Name; if (!this.m_DataList.ContainsKey(name)) { string path = Akb.GetDirInfo((int)info.nDirNo).Name; UnityFile file = Singleton.Instance.LoadKsFile(path + "/" + name + ".txt"); while (!file.IsReadEnd) { yield return 0; } string script = Encoding.Unicode.GetString(file.Data); this.m_DataList.Add(name, script); } else { //Force files to be realoaded every time to enable language switching //TODO: Find a way to only reload the cache when language has actually been switched string path = Akb.GetDirInfo((int)info.nDirNo).Name; UnityFile file = Singleton.Instance.LoadKsFile(path + "/" + name + ".txt"); while (!file.IsReadEnd) { yield return 0; } string script = Encoding.Unicode.GetString(file.Data); this.m_DataList[name] = script; } yield break; } // Token: 0x060001F2 RID: 498 RVA: 0x00008420 File Offset: 0x00006620 public bool Add(string name) { if (!this.m_DataList.ContainsKey(name)) { Debug.Print(string.Format("ERROR:KSファイルがロードされていません:{0}", name)); return false; } string str = this.m_DataList[name]; if (this.IsItem(name)) { return true; } Debug.Print(string.Format("INFO:Ksファイルの解析:{0}", name)); TagReader tagReader = new TagReader(); tagReader.Create(name, str); this.m_List.Add(name, tagReader); return true; } // Token: 0x060001F3 RID: 499 RVA: 0x00008498 File Offset: 0x00006698 public bool Clear() { this.m_List.Clear(); return true; } // Token: 0x060001F4 RID: 500 RVA: 0x000084A8 File Offset: 0x000066A8 public bool Remove(string name) { if (!this.IsItem(name)) { return false; } this.m_List.Remove(name); return true; } // Token: 0x060001F5 RID: 501 RVA: 0x000084C8 File Offset: 0x000066C8 public bool IsItem(string name) { return this.m_List.ContainsKey(name); } // Token: 0x060001F6 RID: 502 RVA: 0x000084D8 File Offset: 0x000066D8 public TagReader Get(string name) { if (!this.IsItem(name)) { Debug.Assert(false, string.Format("Error:KsData:NotFound:{0}\n", name)); return null; } return this.m_List[name]; } // Token: 0x060001F7 RID: 503 RVA: 0x00008508 File Offset: 0x00006708 public void CloseNoCurrent(string name) { TagReader tagReader = this.Get(name); if (tagReader != null) { List list = new List(tagReader.NextKsList); for (int num = 0; num != list.Count; num++) { FileId fileId = new FileId(list[num]); int nFileNo = Akb.SearchFile(fileId.Name); AKB_FILEINFO fileInfo = Akb.GetFileInfo(nFileNo); list[num] = fileInfo.Name; } list.Add(name); List list3 = new List(this.m_List.Keys); List list2 = new List(this.m_DataList.Keys); list3.RemoveAll((string s) => list.Contains(s)); list2.RemoveAll((string s) => list.Contains(s)); foreach (string key in list3) { this.m_List.Remove(key); } foreach (string key2 in list2) { this.m_DataList.Remove(key2); } } } // Token: 0x040001AF RID: 431 private Dictionary m_List = new Dictionary(); // Token: 0x040001B0 RID: 432 private Dictionary m_DataList = new Dictionary(); } }