public static void Save() { if (TimeManager.instance.CurrentDay > 5) { return; } //Populate DayData SaveData.DayData day = new SaveData.DayData(); day.CurrentDay = TimeManager.instance.CurrentDay; day.Detergent = DetergentManager.instance.CurrentAmount; day.Money = MoneyManager.instance.CurrentAmount; day.ReputationHighScore = ReputationManager.instance.HighScore; day.narrativeData = new List <SaveData.EventData>(); day.OllieSafetyPoints = EventManager.instance.ollieEventManager.SafetyPoints; for (int i = 0; i < EventManager.instance.EventTrees.Length; i++) { for (int j = 0; j < EventManager.instance.EventTrees[i].tree.Length; j++) { SaveData.EventData eventData = new SaveData.EventData(); eventData.Completed = EventManager.instance.EventTrees[i].tree[j].Completed; eventData.TreeIndex = i; eventData.Index = j; eventData.NextIndex = EventManager.instance.EventTrees[i].tree[j].NextEventIndex; day.narrativeData.Add(eventData); } } //Add new DayData to existing SaveData //Erase pre-existing DayData corresponding to current or future days, if applicable for (int i = 0; i < Data.Days.Count; i++) { if (Data.Days[i].CurrentDay >= day.CurrentDay) { Data.Days.RemoveAt(i--); } } //If past days are missing, create saves for them using current data for (int i = 0; i < day.CurrentDay; i++) { if (i >= Data.Days.Count) { SaveData.DayData pastDay = SaveData.CloneDayData(day); pastDay.CurrentDay = i; Data.Days.Insert(i, pastDay); } } Data.Days.Add(day); if (FileManager.WriteToFile("SaveData.dat", Data.ToJson())) { //Debug.Log("Save successful"); } else { Debug.LogError("Failed to save!"); } }
public static void LoadDay(int dayToLoad) { PrepareSaveFileForLoad(dayToLoad - 1); SaveData.DayData dayData = Data.Days[0]; //Find the latest DayData preceding the day to load for (int i = 1; i < Data.Days.Count; i++) { if (Data.Days[i].CurrentDay < dayToLoad && Data.Days[i].CurrentDay >= dayData.CurrentDay) { dayData = Data.Days[i]; } } TimeManager.instance.CurrentDay = dayToLoad; DetergentManager.instance.CurrentAmount = dayData.Detergent; MoneyManager.instance.SetCurrentAmount(dayData.Money); ReputationManager.instance.HighScore = dayData.ReputationHighScore; EventManager.instance.ollieEventManager.SafetyPoints = dayData.OllieSafetyPoints; for (int j = 0; j < dayData.narrativeData.Count; j++) { SaveData.EventData eventData = dayData.narrativeData[j]; EventManager.instance.EventTrees[eventData.TreeIndex].tree[eventData.Index].Completed = eventData.Completed; EventManager.instance.EventTrees[eventData.TreeIndex].tree[eventData.Index].NextEventIndex = eventData.NextIndex; } if (LoadingComplete != null) { LoadingComplete(); } }
public static SaveData.DayData GetDayData(int day) { SaveData.DayData dayData = Data.Days[0]; //Find the DayData of the day to load, or the latest one before that for (int i = 1; i < Data.Days.Count; i++) { if (Data.Days[i].CurrentDay <= day && Data.Days[i].CurrentDay >= dayData.CurrentDay) { dayData = Data.Days[i]; } } return(dayData); }
public static void PrepareSaveFileForLoad(int day) { //Remove all days following the day to load Data.Days.RemoveAll(d => d.CurrentDay > day); //Make sure a DayData exists for 'day'; if not, create it by duplicating the closest days bool dayDataExists = false; SaveData.DayData closestExistingDay = Data.Days[0]; for (int i = 0; i < Data.Days.Count; i++) { int currentDay = Data.Days[i].CurrentDay; if (currentDay == day) { dayDataExists = true; } if (currentDay > closestExistingDay.CurrentDay) { closestExistingDay = Data.Days[i]; } } if (!dayDataExists) { //Clone closestExistingDay for skipped days for (int i = closestExistingDay.CurrentDay; i < day; i++) { SaveData.DayData clone = SaveData.CloneDayData(closestExistingDay); clone.CurrentDay = i + 1; Data.Days.Add(clone); } } if (FileManager.WriteToFile("SaveData.dat", Data.ToJson())) { //Debug.Log("Save successful"); } else { Debug.LogError("Failed to save!"); } }
private void OnEventsReset() { Data = new SaveData(); SaveData.DayData day = new SaveData.DayData(); day.CurrentDay = -1; day.Money = 0; day.ReputationHighScore = 0; day.Detergent = DetergentManager.instance.MaxAmount; day.narrativeData = new List <SaveData.EventData>(); day.OllieSafetyPoints = 0; Data.Days = new List <SaveData.DayData>(); Data.Days.Add(day); for (int i = 0; i < EventManager.instance.EventTrees.Length; i++) { for (int j = 0; j < EventManager.instance.EventTrees[i].tree.Length; j++) { SaveData.EventData eventData = new SaveData.EventData(); eventData.Completed = false; eventData.TreeIndex = i; eventData.Index = j; eventData.NextIndex = EventManager.instance.EventTrees[i].tree[j].NextEventIndex; day.narrativeData.Add(eventData); } } if (FileManager.WriteToFile("SaveData.dat", Data.ToJson())) { //Debug.Log("New save file created successfully"); } else { Debug.LogError("Failed to save!"); } }
private IEnumerator Initialize() { while (TimeManager.instance == null) { yield return(null); } yield return(new WaitForSecondsRealtime(0.1f)); int latestDay = 0; for (int i = 0; i < SaveManager.Data.Days.Count; i++) { int day = SaveManager.Data.Days[i].CurrentDay; if (day > latestDay) { latestDay = day; } if (day == index) { selectable = true; } } if (latestDay == index - 1) { selectable = true; } if (selectable) { bool lastDay = latestDay < index; if (!lastDay) { SaveData.DayData day = SaveManager.GetDayData(index); TXT_Day.text = "Day " + index; TXT_Money.text = (day.Money / 100.0f).ToString("N2"); TXT_Rep.text = (day.ReputationHighScore / ReputationManager.instance.AmountPerStar).ToString("N0"); } else { TXT_Day.text = "Day " + index; TXT_Money.text = ("?"); TXT_Rep.text = ("?"); } //Event Icons int[] characters = EventManager.instance.CharactersWithEventsOnDay(index); switch (characters.Length) { case 0: EventIcon1.enabled = false; EventIcon2.enabled = false; EventIcon3.enabled = false; break; case 1: EventIcon1.enabled = true; EventIcon2.enabled = false; EventIcon3.enabled = false; if (lastDay) { EventIcon1.sprite = unknownEventIcon; } else { EventIcon1.sprite = EventManager.instance.customerPortraits[characters[0]]; } break; case 2: EventIcon1.enabled = true; EventIcon2.enabled = true; EventIcon3.enabled = false; EventIcon1.transform.position = new Vector3(EventIcon1.transform.position.x - 0.234f, EventIcon1.transform.position.y, EventIcon1.transform.position.z); EventIcon2.transform.position = new Vector3(EventIcon1.transform.position.x + 0.234f, EventIcon1.transform.position.y, EventIcon1.transform.position.z); if (lastDay) { EventIcon1.sprite = unknownEventIcon; EventIcon2.sprite = unknownEventIcon; } else { EventIcon1.sprite = EventManager.instance.customerPortraits[characters[0]]; EventIcon2.sprite = EventManager.instance.customerPortraits[characters[1]]; } break; case 3: EventIcon1.enabled = true; EventIcon2.enabled = true; EventIcon3.enabled = true; EventIcon2.transform.position = new Vector3(EventIcon1.transform.position.x - 0.468f, EventIcon1.transform.position.y, EventIcon1.transform.position.z); EventIcon3.transform.position = new Vector3(EventIcon1.transform.position.x + 0.468f, EventIcon1.transform.position.y, EventIcon1.transform.position.z); if (lastDay) { EventIcon1.sprite = unknownEventIcon; EventIcon2.sprite = unknownEventIcon; EventIcon3.sprite = unknownEventIcon; } else { EventIcon1.sprite = EventManager.instance.customerPortraits[characters[1]]; EventIcon2.sprite = EventManager.instance.customerPortraits[characters[0]]; EventIcon3.sprite = EventManager.instance.customerPortraits[characters[2]]; } break; default: EventIcon1.enabled = true; EventIcon2.enabled = true; EventIcon3.enabled = true; EventIcon2.transform.position = new Vector3(EventIcon1.transform.position.x - 0.468f, EventIcon1.transform.position.y, EventIcon1.transform.position.z); EventIcon3.transform.position = new Vector3(EventIcon1.transform.position.x + 0.468f, EventIcon1.transform.position.y, EventIcon1.transform.position.z); if (lastDay) { EventIcon1.sprite = unknownEventIcon; EventIcon2.sprite = unknownEventIcon; } else { EventIcon1.sprite = EventManager.instance.customerPortraits[characters[1]]; EventIcon2.sprite = EventManager.instance.customerPortraits[characters[0]]; } EventIcon3.sprite = plusEventIcon; break; } } initialized = true; }