Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.IO;
- [System.Serializable]
- public class Beastiary : MonoBehaviour {
- //Follow me on twitter @RKSlither_Yt / @ThePinkertonCo
- //youtube @RKSlither
- private static Beastiary instance;
- public List<MonstersBeastiaryData> monsters = new List<MonstersBeastiaryData>();
- public Button[] beastiarySelectables;
- public Image beastiarySprite;
- public Text[] beastiarySelectableNames;
- public Text beastiaryMainName;
- public Text beastiaryLocation;
- private readonly string beastiaryImageLoadPath = "Monsters/";
- private readonly string saveDirectory = "/BeastiaryData/";
- private readonly string saveFile = "Beastiary.unitySaveData";
- private void Awake()
- {
- instance = GetComponent<Beastiary>();
- if(!Directory.Exists(Application.persistentDataPath + saveDirectory))
- {
- Directory.CreateDirectory(Application.persistentDataPath + saveDirectory);
- }
- if(File.Exists(Application.persistentDataPath + saveDirectory + saveFile))
- {
- LoadBeastiaryData();
- }
- }
- public static void UnlockBeastiary(int index)
- {
- for (int i = 0; i < instance.monsters.Count; i++)
- {
- if(i < instance.monsters.Count)
- {
- if(i == index)
- {
- if (!instance.monsters[index].unlockedData)
- {
- instance.monsters[index].unlockedData = true;
- UpdateBeastiary();
- }
- else
- {
- return;
- }
- }
- }else if( i >= instance.monsters.Count)
- {
- return;
- }
- }
- }
- public static void UpdateBeastiary()
- {
- for (int i = 0; i < instance.beastiarySelectables.Length; i++)
- {
- int temp = i; //you need this otherwise it will assign each
- //button the same int index cause unity blows in this instance
- if( i < instance.monsters.Count)
- {
- if (instance.monsters[i].unlockedData)
- {
- instance.beastiarySelectableNames[i].text = instance.monsters[i].monsterName;
- instance.beastiarySelectables[i].onClick.RemoveAllListeners();
- instance.beastiarySelectables[i].onClick.AddListener(() => instance.ShowBeastData(temp));
- instance.beastiarySelectables[i].interactable = true;//always update the button last incase it loads wrong
- }else if (!instance.monsters[i].unlockedData)
- {
- instance.beastiarySelectableNames[i].text = "?????????";
- instance.beastiarySelectables[i].onClick.RemoveAllListeners();
- instance.beastiarySelectables[i].interactable = false;//always update the button last incase it loads wrong
- }
- }
- else if(i >= instance.monsters.Count && i < instance.beastiarySelectables.Length)
- {
- instance.beastiarySelectables[i].interactable = false;
- instance.beastiarySelectableNames[i].text = "?????????";
- }else if(i >= instance.monsters.Count && i < instance.beastiarySelectables.Length)
- {
- instance.beastiarySelectables[i].interactable = false;
- instance.beastiarySelectableNames[i].text = "?????????";
- instance.beastiarySprite.sprite = (Sprite)Resources.Load<Sprite>(instance.beastiaryImageLoadPath + "Unknown") as Sprite;
- instance.beastiaryLocation.text = "?????????";
- }
- }
- }
- private void ShowBeastData(int index)
- {
- if(instance.monsters.Count >= index)
- {
- instance.beastiaryMainName.text = instance.monsters[index].monsterName;
- instance.beastiarySprite.sprite = (Sprite)Resources.Load<Sprite>(instance.beastiaryImageLoadPath + instance.monsters[index].monsterSpriteIndex) as Sprite;
- instance.beastiaryLocation.text = instance.monsters[index].monsterLocation;
- }
- else
- {
- return;
- }
- }
- public static void SaveBeastiaryData()
- {
- BinaryFormatter bf = new BinaryFormatter();
- if(!File.Exists(Application.persistentDataPath + instance.saveDirectory + instance.saveFile))
- {
- FileStream file = File.Create(Application.persistentDataPath + instance.saveDirectory + instance.saveFile);
- SavedBeastiaryData saveData = new SavedBeastiaryData();
- saveData.beastiaryMonsterData = instance.monsters;
- bf.Serialize(file, saveData);
- file.Close();
- }else if (File.Exists(Application.persistentDataPath + instance.saveDirectory + instance.saveFile))
- {
- FileStream file = File.Open(Application.persistentDataPath + instance.saveDirectory + instance.saveFile,FileMode.Open);
- SavedBeastiaryData saveData = (SavedBeastiaryData)bf.Deserialize(file) as SavedBeastiaryData;
- saveData.beastiaryMonsterData = instance.monsters;
- bf.Serialize(file, saveData);
- file.Close();
- }
- }
- public static void LoadBeastiaryData()
- {
- BinaryFormatter bf = new BinaryFormatter();
- if (!File.Exists(Application.persistentDataPath + instance.saveDirectory + instance.saveFile))
- {
- //set your beastiary defaults here like a free unlock for the game start or a tutorial
- //that gives a free unlock
- return;
- }
- else if (File.Exists(Application.persistentDataPath + instance.saveDirectory + instance.saveFile))
- {
- FileStream file = File.Open(Application.persistentDataPath + instance.saveDirectory + instance.saveFile, FileMode.Open);
- SavedBeastiaryData saveData = (SavedBeastiaryData)bf.Deserialize(file) as SavedBeastiaryData;
- instance.monsters = saveData.beastiaryMonsterData;
- file.Close();
- UpdateBeastiary();
- }
- }
- }
- [System.Serializable]
- public class MonstersBeastiaryData
- {
- public string monsterName;
- public string monsterLocation;
- public string monsterSpriteIndex;
- public bool unlockedData;
- }
- [System.Serializable]
- public class SavedBeastiaryData
- {
- public List<MonstersBeastiaryData> beastiaryMonsterData = new List<MonstersBeastiaryData>();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement