Example #1
0
    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!");
        }
    }
Example #2
0
 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();
     }
 }
Example #3
0
 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);
 }
Example #4
0
    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!");
        }
    }
Example #5
0
    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;
    }