// Token: 0x06001E4B RID: 7755 RVA: 0x0017CD28 File Offset: 0x0017AF28 public static void SaveData(string targetSave) { YanSaveIdentifier[] array = Resources.FindObjectsOfTypeAll <YanSaveIdentifier>(); List <SerializedGameObject> list = new List <SerializedGameObject>(); foreach (YanSaveIdentifier yanSaveIdentifier in array) { List <SerializedComponent> list2 = new List <SerializedComponent>(); foreach (Component component in yanSaveIdentifier.gameObject.GetComponents(typeof(Component))) { if (yanSaveIdentifier.EnabledComponents.Contains(component)) { SerializedComponent serializedComponent = default(SerializedComponent); serializedComponent.TypePath = component.GetType().AssemblyQualifiedName; serializedComponent.PropertyReferences = new ReferenceDict(); serializedComponent.PropertyValues = new ValueDict(); serializedComponent.FieldReferences = new ReferenceDict(); serializedComponent.FieldValues = new ValueDict(); serializedComponent.FieldReferenceArrays = new ReferenceArrayDict(); serializedComponent.PropertyReferenceArrays = new ReferenceArrayDict(); if (typeof(MonoBehaviour).IsAssignableFrom(component.GetType())) { serializedComponent.IsMonoBehaviour = true; serializedComponent.IsEnabled = ((MonoBehaviour)component).enabled; } Type type = component.GetType(); foreach (PropertyInfo propertyInfo in YanSave.GetCachedProperties(type)) { if (propertyInfo.CanWrite && !propertyInfo.IsDefined(typeof(ObsoleteAttribute), true)) { bool flag = false; foreach (DisabledYanSaveMember disabledYanSaveMember in yanSaveIdentifier.DisabledProperties) { if (disabledYanSaveMember.Component == component && disabledYanSaveMember.Name == propertyInfo.Name) { flag = true; break; } } if (!flag) { object value = propertyInfo.GetValue(component); bool flag2 = typeof(Component).IsAssignableFrom(propertyInfo.PropertyType); bool flag3 = propertyInfo.PropertyType == typeof(GameObject); bool isArray = propertyInfo.PropertyType.IsArray; bool flag4 = typeof(Component[]).IsAssignableFrom(propertyInfo.PropertyType); bool flag5 = typeof(GameObject[]).IsAssignableFrom(propertyInfo.PropertyType); if (value != null) { try { if (!flag2 && !flag3) { serializedComponent.PropertyValues.Add(propertyInfo.Name, value); } else if (isArray) { List <string> list3 = new List <string>(); if (flag4) { list3.AddRange(((Component[])value).Select(delegate(Component x) { if (!(x.GetComponent <YanSaveIdentifier>() != null)) { return(string.Empty); } return(x.GetComponent <YanSaveIdentifier>().ObjectID); })); } else if (flag5) { list3.AddRange(((GameObject[])value).Select(delegate(GameObject x) { if (!(x.GetComponent <YanSaveIdentifier>() != null)) { return(string.Empty); } return(x.GetComponent <YanSaveIdentifier>().ObjectID); })); } serializedComponent.PropertyReferenceArrays.Add(propertyInfo.Name, list3); } else { YanSaveIdentifier yanSaveIdentifier2 = flag2 ? ((Component)value).gameObject.GetComponent <YanSaveIdentifier>() : (flag3 ? ((GameObject)value).GetComponent <YanSaveIdentifier>() : null); if (yanSaveIdentifier2 != null) { serializedComponent.PropertyReferences.Add(propertyInfo.Name, yanSaveIdentifier2.ObjectID); } else { serializedComponent.PropertyReferences.Add(propertyInfo.Name, null); } } } catch { } } } } } foreach (FieldInfo fieldInfo in YanSave.GetCachedFields(type)) { if (!fieldInfo.IsLiteral && !fieldInfo.IsDefined(typeof(ObsoleteAttribute), true)) { bool flag6 = false; foreach (DisabledYanSaveMember disabledYanSaveMember2 in yanSaveIdentifier.DisabledFields) { if (disabledYanSaveMember2.Component == component && disabledYanSaveMember2.Name == fieldInfo.Name) { flag6 = true; break; } } if (!flag6) { object value2 = fieldInfo.GetValue(component); bool flag7 = typeof(Component).IsAssignableFrom(fieldInfo.FieldType); bool flag8 = fieldInfo.FieldType == typeof(GameObject); bool isArray2 = fieldInfo.FieldType.IsArray; bool flag9 = typeof(Component[]).IsAssignableFrom(fieldInfo.FieldType); bool flag10 = typeof(GameObject[]).IsAssignableFrom(fieldInfo.FieldType); try { if (!flag7 && !flag8 && !flag9 && !flag10) { serializedComponent.FieldValues.Add(fieldInfo.Name, value2); } else if (isArray2) { List <string> list4 = new List <string>(); if (flag9) { list4.AddRange(((Component[])value2).Select(delegate(Component x) { if (!(x.GetComponent <YanSaveIdentifier>() != null)) { return(string.Empty); } return(x.GetComponent <YanSaveIdentifier>().ObjectID); })); } else if (flag10) { list4.AddRange(((GameObject[])value2).Select(delegate(GameObject x) { if (!(x.GetComponent <YanSaveIdentifier>() != null)) { return(string.Empty); } return(x.GetComponent <YanSaveIdentifier>().ObjectID); })); } serializedComponent.FieldReferenceArrays.Add(fieldInfo.Name, list4); } else { YanSaveIdentifier yanSaveIdentifier3 = flag7 ? ((Component)value2).gameObject.GetComponent <YanSaveIdentifier>() : (flag8 ? ((GameObject)value2).GetComponent <YanSaveIdentifier>() : null); if (yanSaveIdentifier3 != null) { serializedComponent.FieldReferences.Add(fieldInfo.Name, yanSaveIdentifier3.ObjectID); } else { serializedComponent.FieldReferences.Add(fieldInfo.Name, null); } } } catch { } } } } serializedComponent.OwnerID = yanSaveIdentifier.ObjectID; list2.Add(serializedComponent); } } SerializedGameObject item = new SerializedGameObject { ActiveInHierarchy = yanSaveIdentifier.gameObject.activeInHierarchy, ActiveSelf = yanSaveIdentifier.gameObject.activeSelf, IsStatic = yanSaveIdentifier.gameObject.isStatic, Layer = yanSaveIdentifier.gameObject.layer, Tag = yanSaveIdentifier.gameObject.tag, Name = yanSaveIdentifier.gameObject.name, SerializedComponents = list2.ToArray(), ObjectID = yanSaveIdentifier.ObjectID }; list.Add(item); } object value3 = new YanSaveData { LoadedLevelName = SceneManager.GetActiveScene().name, SerializedGameObjects = list.ToArray() }; JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings(); jsonSerializerSettings.ContractResolver = new YanSaveResolver(); jsonSerializerSettings.Error = delegate(object s, Newtonsoft.Json.Serialization.ErrorEventArgs e) { e.ErrorContext.Handled = true; }; string contents = JsonConvert.SerializeObject(value3, jsonSerializerSettings); if (!Directory.Exists(YanSave.SaveDataPath)) { Directory.CreateDirectory(YanSave.SaveDataPath); } File.WriteAllText(Path.Combine(YanSave.SaveDataPath, targetSave + ".yansave"), contents); Action onSave = YanSave.OnSave; if (onSave == null) { return; } onSave(); }
public void Update() { if (!this.ConfirmWindow.activeInHierarchy) { if (this.InputManager.TappedUp) { this.Row--; this.UpdateHighlight(); } else if (this.InputManager.TappedDown) { this.Row++; this.UpdateHighlight(); } if (this.InputManager.TappedLeft) { this.Column--; this.UpdateHighlight(); } else if (this.InputManager.TappedRight) { this.Column++; this.UpdateHighlight(); } } if (this.GrabScreenshot) { if (GameGlobals.Profile == 0) { GameGlobals.Profile = 1; this.Profile = 1; } this.PauseScreen.ScreenBlur.enabled = true; this.UICamera.enabled = true; this.StudentManager.Save(); base.StartCoroutine(this.GetThumbnails()); if (DateGlobals.Weekday == DayOfWeek.Monday) { PlayerPrefs.SetInt(string.Concat(new object[] { "Profile_", this.Profile, "_Slot_", this.Selected, "_Weekday" }), 1); } else if (DateGlobals.Weekday == DayOfWeek.Tuesday) { PlayerPrefs.SetInt(string.Concat(new object[] { "Profile_", this.Profile, "_Slot_", this.Selected, "_Weekday" }), 2); } else if (DateGlobals.Weekday == DayOfWeek.Wednesday) { PlayerPrefs.SetInt(string.Concat(new object[] { "Profile_", this.Profile, "_Slot_", this.Selected, "_Weekday" }), 3); } else if (DateGlobals.Weekday == DayOfWeek.Thursday) { PlayerPrefs.SetInt(string.Concat(new object[] { "Profile_", this.Profile, "_Slot_", this.Selected, "_Weekday" }), 4); } else if (DateGlobals.Weekday == DayOfWeek.Friday) { PlayerPrefs.SetInt(string.Concat(new object[] { "Profile_", this.Profile, "_Slot_", this.Selected, "_Weekday" }), 5); } this.GrabScreenshot = false; } if (this.WarningWindow.activeInHierarchy) { if (Input.GetButtonDown("A")) { this.WarningWindow.SetActive(false); return; } if (Input.GetButtonDown("B")) { this.PauseScreen.MainMenu.SetActive(true); this.PauseScreen.Sideways = false; this.PauseScreen.PressedB = true; base.gameObject.SetActive(false); this.PauseScreen.PromptBar.ClearButtons(); this.PauseScreen.PromptBar.Label[0].text = "Accept"; this.PauseScreen.PromptBar.Label[1].text = "Exit"; this.PauseScreen.PromptBar.Label[4].text = "Choose"; this.PauseScreen.PromptBar.UpdateButtons(); this.PauseScreen.PromptBar.Show = true; return; } } else { if (Input.GetButtonDown("A")) { if (this.Loading) { if (this.DataLabels[this.Selected].text != "No Data") { if (!this.ConfirmWindow.activeInHierarchy) { this.AreYouSureLabel.text = "Are you sure you'd like to load?"; this.ConfirmWindow.SetActive(true); } else if (this.DataLabels[this.Selected].text != "No Data") { PlayerPrefs.SetInt("LoadingSave", 1); PlayerPrefs.SetInt("SaveSlot", this.Selected); YanSave.LoadPrefs(string.Concat(new object[] { "Profile_", GameGlobals.Profile, "_Slot_", this.Selected })); SceneManager.LoadScene("LoadingScene"); } } } else if (this.Saving) { if (!this.ConfirmWindow.activeInHierarchy) { this.AreYouSureLabel.text = "Are you sure you'd like to save?"; this.ConfirmWindow.SetActive(true); } else { this.ConfirmWindow.SetActive(false); PlayerPrefs.SetInt("SaveSlot", this.Selected); GameGlobals.MostRecentSlot = this.Selected; PlayerPrefs.SetString(string.Concat(new object[] { "Profile_", this.Profile, "_Slot_", this.Selected, "_DateTime" }), DateTime.Now.ToString()); ScreenCapture.CaptureScreenshot(string.Concat(new object[] { Application.streamingAssetsPath, "/SaveData/Profile_", this.Profile, "/Slot_", this.Selected, "_Thumbnail.png" })); this.PauseScreen.ScreenBlur.enabled = false; this.UICamera.enabled = false; this.GrabScreenshot = true; } } } if (Input.GetButtonDown("X")) { if (this.Loading) { if (this.DataLabels[this.Selected].text != "No Data") { PlayerPrefs.SetInt("SaveSlot", this.Selected); this.StudentManager.Load(); Physics.SyncTransforms(); if (PlayerPrefs.GetInt(string.Concat(new object[] { "Profile_", this.Profile, "_Slot_", this.Selected, "_Weekday" })) == 1) { DateGlobals.Weekday = DayOfWeek.Monday; } else if (PlayerPrefs.GetInt(string.Concat(new object[] { "Profile_", this.Profile, "_Slot_", this.Selected, "_Weekday" })) == 2) { DateGlobals.Weekday = DayOfWeek.Tuesday; } else if (PlayerPrefs.GetInt(string.Concat(new object[] { "Profile_", this.Profile, "_Slot_", this.Selected, "_Weekday" })) == 3) { DateGlobals.Weekday = DayOfWeek.Wednesday; } else if (PlayerPrefs.GetInt(string.Concat(new object[] { "Profile_", this.Profile, "_Slot_", this.Selected, "_Weekday" })) == 4) { DateGlobals.Weekday = DayOfWeek.Tuesday; } else if (PlayerPrefs.GetInt(string.Concat(new object[] { "Profile_", this.Profile, "_Slot_", this.Selected, "_Weekday" })) == 5) { DateGlobals.Weekday = DayOfWeek.Wednesday; } this.Clock.DayLabel.text = this.Clock.GetWeekdayText(DateGlobals.Weekday); this.PauseScreen.MainMenu.SetActive(true); this.PauseScreen.Sideways = false; this.PauseScreen.PressedB = true; base.gameObject.SetActive(false); this.PauseScreen.ExitPhone(); } } else if (this.Saving && PlayerPrefs.GetString(string.Concat(new object[] { "Profile_", this.Profile, "_Slot_", this.Selected, "_DateTime" })) != "") { File.Delete(string.Concat(new object[] { Application.streamingAssetsPath, "/SaveData/Profile_", this.Profile, "/Slot_", this.Selected, "_Thumbnail.png" })); PlayerPrefs.SetString(string.Concat(new object[] { "Profile_", this.Profile, "_Slot_", this.Selected, "_DateTime" }), ""); this.Thumbnails[this.Selected].mainTexture = this.DefaultThumbnail; this.DataLabels[this.Selected].text = "No Data"; } } if (Input.GetButtonDown("B")) { if (this.ConfirmWindow.activeInHierarchy) { this.ConfirmWindow.SetActive(false); return; } this.PauseScreen.MainMenu.SetActive(true); this.PauseScreen.Sideways = false; this.PauseScreen.PressedB = true; base.gameObject.SetActive(false); this.PauseScreen.PromptBar.ClearButtons(); this.PauseScreen.PromptBar.Label[0].text = "Accept"; this.PauseScreen.PromptBar.Label[1].text = "Exit"; this.PauseScreen.PromptBar.Label[4].text = "Choose"; this.PauseScreen.PromptBar.UpdateButtons(); this.PauseScreen.PromptBar.Show = true; } } }
// Token: 0x06001E4C RID: 7756 RVA: 0x0017D4BC File Offset: 0x0017B6BC public static void LoadData(string targetSave, bool recreateMissing = false) { if (!File.Exists(Path.Combine(YanSave.SaveDataPath, targetSave + ".yansave"))) { return; } YanSaveData yanSaveData = JsonConvert.DeserializeObject <YanSaveData>(File.ReadAllText(Path.Combine(YanSave.SaveDataPath, targetSave + ".yansave"))); if (SceneManager.GetActiveScene().name != yanSaveData.LoadedLevelName) { SceneManager.LoadScene(yanSaveData.LoadedLevelName); } SerializedGameObject[] serializedGameObjects = yanSaveData.SerializedGameObjects; int i = 0; while (i < serializedGameObjects.Length) { SerializedGameObject serializedGameObject = serializedGameObjects[i]; GameObject gameObject = YanSaveIdentifier.GetObject(serializedGameObject); if (!(gameObject == null)) { goto IL_BA; } if (recreateMissing) { gameObject = new GameObject(); gameObject.AddComponent <YanSaveIdentifier>().ObjectID = serializedGameObject.ObjectID; gameObject.SetActive(serializedGameObject.ActiveSelf); goto IL_BA; } IL_15D: i++; continue; IL_BA: gameObject.isStatic = serializedGameObject.IsStatic; gameObject.layer = serializedGameObject.Layer; gameObject.tag = serializedGameObject.Tag; gameObject.name = serializedGameObject.Name; gameObject.SetActive(serializedGameObject.ActiveSelf); foreach (SerializedComponent serializedComponent in serializedGameObject.SerializedComponents) { if (gameObject != null) { Type type = YanSave.GetType(serializedComponent.TypePath); if (recreateMissing && gameObject.GetComponent(type) == null) { gameObject.AddComponent(type); } } } goto IL_15D; } foreach (SerializedGameObject serializedGameObject2 in yanSaveData.SerializedGameObjects) { GameObject @object = YanSaveIdentifier.GetObject(serializedGameObject2); if (!(@object == null)) { foreach (SerializedComponent serializedComponent2 in serializedGameObject2.SerializedComponents) { Type type2 = YanSave.GetType(serializedComponent2.TypePath); Component component = @object.GetComponent(type2); @object.GetComponent <YanSaveIdentifier>(); if (!(component == null)) { if (serializedComponent2.IsMonoBehaviour) { ((MonoBehaviour)component).enabled = serializedComponent2.IsEnabled; } foreach (PropertyInfo propertyInfo in YanSave.GetCachedProperties(type2)) { if (propertyInfo.CanWrite) { bool flag = typeof(Component).IsAssignableFrom(propertyInfo.PropertyType); if (!flag && propertyInfo.PropertyType != typeof(GameObject)) { if (serializedComponent2.PropertyValues.ContainsKey(propertyInfo.Name)) { object obj = serializedComponent2.PropertyValues[propertyInfo.Name]; if (obj == null) { propertyInfo.SetValue(component, null); } else { if (obj.GetType() == typeof(JObject)) { try { propertyInfo.SetValue(component, ((JObject)obj).ToObject(propertyInfo.PropertyType)); goto IL_522; } catch { goto IL_522; } } if (obj.GetType() == typeof(JArray)) { try { propertyInfo.SetValue(component, ((JArray)obj).ToObject(propertyInfo.PropertyType)); goto IL_522; } catch { goto IL_522; } } bool isEnum = propertyInfo.PropertyType.IsEnum; bool flag2 = typeof(IConvertible).IsAssignableFrom(obj.GetType()); propertyInfo.SetValue(component, isEnum ? Enum.ToObject(propertyInfo.PropertyType, obj) : (flag2 ? Convert.ChangeType(obj, propertyInfo.PropertyType) : obj)); } } } else if (serializedComponent2.PropertyReferences.ContainsKey(propertyInfo.Name)) { bool flag3 = propertyInfo.PropertyType == typeof(GameObject); GameObject object2 = YanSaveIdentifier.GetObject(serializedComponent2.FieldReferences[propertyInfo.Name]); if (!(object2 == null)) { if (flag) { propertyInfo.SetValue(component, object2.GetComponent(propertyInfo.PropertyType)); } else if (flag3) { propertyInfo.SetValue(component, object2); } } } else if (serializedComponent2.PropertyReferenceArrays.ContainsKey(propertyInfo.Name)) { bool flag4 = typeof(Component[]).IsAssignableFrom(propertyInfo.PropertyType); bool flag5 = typeof(GameObject[]).IsAssignableFrom(propertyInfo.PropertyType); List <string> list = serializedComponent2.PropertyReferenceArrays[propertyInfo.Name]; Type elementType = propertyInfo.PropertyType.GetElementType(); if (flag4) { IList list2 = Array.CreateInstance(elementType, list.Count); for (int l = 0; l < list.Count; l++) { YanSaveIdentifier.GetObject(list[l]); Component value = (@object != null) ? @object.GetComponent(elementType) : null; list2[l] = value; } propertyInfo.SetValue(component, list2); } else if (flag5) { IList list3 = Array.CreateInstance(elementType, list.Count); for (int m = 0; m < list.Count; m++) { GameObject object3 = YanSaveIdentifier.GetObject(list[m]); list3[m] = object3; } propertyInfo.SetValue(component, list3); } } } IL_522 :; } foreach (FieldInfo fieldInfo in YanSave.GetCachedFields(type2)) { bool flag6 = typeof(Component).IsAssignableFrom(fieldInfo.FieldType); bool flag7 = typeof(Component[]).IsAssignableFrom(fieldInfo.FieldType); bool flag8 = typeof(GameObject[]).IsAssignableFrom(fieldInfo.FieldType); if (!flag7 && !flag8 && !flag6 && fieldInfo.FieldType != typeof(GameObject)) { if (serializedComponent2.FieldValues.ContainsKey(fieldInfo.Name)) { object obj2 = serializedComponent2.FieldValues[fieldInfo.Name]; if (obj2 == null) { fieldInfo.SetValue(component, null); } else { if (obj2.GetType() == typeof(JObject)) { try { fieldInfo.SetValue(component, ((JObject)obj2).ToObject(fieldInfo.FieldType)); goto IL_85E; } catch { goto IL_85E; } } if (obj2.GetType() == typeof(JArray)) { try { fieldInfo.SetValue(component, ((JArray)obj2).ToObject(fieldInfo.FieldType)); goto IL_85E; } catch { goto IL_85E; } } bool isEnum2 = fieldInfo.FieldType.IsEnum; bool flag9 = typeof(IConvertible).IsAssignableFrom(obj2.GetType()); fieldInfo.SetValue(component, isEnum2 ? Enum.ToObject(fieldInfo.FieldType, obj2) : (flag9 ? Convert.ChangeType(obj2, fieldInfo.FieldType) : obj2)); } } } else if (serializedComponent2.FieldReferences.ContainsKey(fieldInfo.Name)) { bool flag10 = fieldInfo.FieldType == typeof(GameObject); GameObject object4 = YanSaveIdentifier.GetObject(serializedComponent2.FieldReferences[fieldInfo.Name]); if (!(object4 == null)) { if (flag6) { fieldInfo.SetValue(component, object4.GetComponent(fieldInfo.FieldType)); } else if (flag10) { fieldInfo.SetValue(component, object4); } } } else if (serializedComponent2.FieldReferenceArrays.ContainsKey(fieldInfo.Name)) { List <string> list4 = serializedComponent2.FieldReferenceArrays[fieldInfo.Name]; Type elementType2 = fieldInfo.FieldType.GetElementType(); if (flag7) { IList list5 = Array.CreateInstance(elementType2, list4.Count); for (int n = 0; n < list4.Count; n++) { YanSaveIdentifier.GetObject(list4[n]); Component value2 = (@object != null) ? @object.GetComponent(elementType2) : null; list5[n] = value2; } fieldInfo.SetValue(component, list5); } else if (flag8) { IList list6 = Array.CreateInstance(elementType2, list4.Count); for (int num = 0; num < list4.Count; num++) { GameObject object5 = YanSaveIdentifier.GetObject(list4[num]); list6[num] = object5; } fieldInfo.SetValue(component, list6); } } IL_85E :; } } } } } Action onLoad = YanSave.OnLoad; if (onLoad == null) { return; } onLoad(); }