void WritePref(BinaryWriter writer, PP_base aPref) { byte[] tmp = utf_8.GetBytes(aPref.prefName); writer.Write((byte)tmp.Length); writer.Write(tmp); if (aPref is PP_int) { writer.Write((byte)0xFE); writer.Write(((PP_int)aPref).value); } else if (aPref is PP_float) { writer.Write((byte)0xFD); writer.Write(((PP_float)aPref).value); } else if (aPref is PP_string) { PP_string P = (PP_string)aPref; tmp = utf_8.GetBytes(P.value); if (tmp.Length < 128) { writer.Write((byte)tmp.Length); } else { writer.Write((byte)0x80); writer.Write(tmp.Length); } writer.Write(tmp); } }
void OnGUI() { GUILayout.BeginHorizontal("box"); if (GUILayout.Button("create new", GUILayout.Width(80))) { m_FileName = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) + "/Unity/WebPlayerPrefs"; m_Prefs = new List <PP_base>(); } if (GUILayout.Button("open file", GUILayout.Width(80))) { OpenFile(); } GUI.enabled = (m_Prefs != null && m_Prefs.Count > 0); if (GUILayout.Button("save file", GUILayout.Width(80))) { WriteFile(); } GUI.enabled = true; GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal("box"); GUILayout.Label("File:", GUILayout.Width(30)); GUILayout.TextField(m_FileName); GUILayout.EndHorizontal(); scrollPos = GUILayout.BeginScrollView(scrollPos); GUILayout.BeginVertical("box"); if (m_Prefs != null) { for (int i = 0; i < m_Prefs.Count; i++) { PP_base current = m_Prefs[i]; GUILayout.BeginHorizontal(); if (current.DrawGUI()) { m_Prefs.RemoveAt(i); } GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal("box"); m_NewPrefType = GUILayout.Toolbar(m_NewPrefType, new string[] { "int", "float", "string" }, GUILayout.Width(150)); m_NewPrefName = GUILayout.TextField(m_NewPrefName, 254, GUILayout.Width(200)); if ((m_NewPrefName != "") && GUILayout.Button("[add new]", GUILayout.Width(70))) { AddPref(m_NewPrefType, m_NewPrefName); } GUILayout.EndHorizontal(); } GUILayout.EndVertical(); GUILayout.EndScrollView(); }
List <PP_base> ReadFile(string aFileName) { List <PP_base> result = new List <PP_base>(); using (FileStream FS = File.OpenRead(aFileName)) using (BinaryReader reader = new BinaryReader(FS)) { string header = new string(reader.ReadChars(8)); if (header != "UnityPrf") { Debug.LogError("Not a valid UPP file. No 'UnityPrf' in header"); return(null); } int version1 = reader.ReadInt32(); int version2 = reader.ReadInt32(); if (version1 != 0x10000 || version2 != 0x100000) { Debug.LogWarning("Different file version detected. Prepare for unforeseen consequences!"); if (!EditorUtility.DisplayDialog("Unknown file version", "The file seems to have a newer format. You can continue reading but on your own risk", "ok, do it", "no, stop here")) { Debug.Log("Reading UPP file aborted by user"); return(null); } } try { while (true) { PP_base pref = ReadPref(reader); if (pref != null) { result.Add(pref); } } } catch (EndOfStreamException) { } } return(result); }