Advertisement
RKSlither_Code

Unity Simple Beastiary With Saving / Loading Built In

Jun 24th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.68 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using System.Runtime.Serialization.Formatters.Binary;
  6. using System.IO;
  7.  
  8. [System.Serializable]
  9. public class Beastiary : MonoBehaviour {
  10.  
  11.  
  12.                 //Follow me on twitter @RKSlither_Yt  / @ThePinkertonCo
  13.                 //youtube @RKSlither
  14.  
  15.     private static Beastiary instance;
  16.  
  17.     public List<MonstersBeastiaryData> monsters = new List<MonstersBeastiaryData>();
  18.  
  19.     public Button[] beastiarySelectables;
  20.  
  21.     public Image beastiarySprite;
  22.  
  23.     public Text[] beastiarySelectableNames;
  24.  
  25.     public Text beastiaryMainName;
  26.  
  27.     public Text beastiaryLocation;
  28.  
  29.     private readonly string beastiaryImageLoadPath = "Monsters/";
  30.  
  31.     private readonly string saveDirectory = "/BeastiaryData/";
  32.     private readonly string saveFile = "Beastiary.unitySaveData";
  33.  
  34.     private void Awake()
  35.     {
  36.         instance = GetComponent<Beastiary>();
  37.         if(!Directory.Exists(Application.persistentDataPath + saveDirectory))
  38.         {
  39.             Directory.CreateDirectory(Application.persistentDataPath + saveDirectory);
  40.         }
  41.         if(File.Exists(Application.persistentDataPath + saveDirectory + saveFile))
  42.         {
  43.             LoadBeastiaryData();
  44.         }
  45.     }
  46.  
  47.     public static void UnlockBeastiary(int index)
  48.     {
  49.         for (int i = 0; i < instance.monsters.Count; i++)
  50.         {
  51.             if(i < instance.monsters.Count)
  52.             {
  53.                 if(i == index)
  54.                 {
  55.                     if (!instance.monsters[index].unlockedData)
  56.                     {
  57.                         instance.monsters[index].unlockedData = true;
  58.                         UpdateBeastiary();
  59.                     }
  60.                     else
  61.                     {
  62.                         return;
  63.                     }
  64.                 }
  65.             }else if( i >= instance.monsters.Count)
  66.             {
  67.                 return;
  68.             }
  69.         }
  70.     }
  71.  
  72.     public static void UpdateBeastiary()
  73.     {
  74.         for (int i = 0; i < instance.beastiarySelectables.Length; i++)
  75.         {
  76.             int temp = i; //you need this otherwise it will assign each
  77.             //button the same int index cause unity blows in this instance
  78.             if( i < instance.monsters.Count)
  79.             {
  80.                 if (instance.monsters[i].unlockedData)
  81.                 {
  82.                     instance.beastiarySelectableNames[i].text = instance.monsters[i].monsterName;
  83.                     instance.beastiarySelectables[i].onClick.RemoveAllListeners();
  84.                     instance.beastiarySelectables[i].onClick.AddListener(() => instance.ShowBeastData(temp));
  85.                     instance.beastiarySelectables[i].interactable = true;//always update the button last incase it loads wrong
  86.                 }else if (!instance.monsters[i].unlockedData)
  87.                 {
  88.                     instance.beastiarySelectableNames[i].text = "?????????";
  89.                     instance.beastiarySelectables[i].onClick.RemoveAllListeners();
  90.                     instance.beastiarySelectables[i].interactable = false;//always update the button last incase it loads wrong
  91.                 }
  92.  
  93.             }
  94.             else if(i >= instance.monsters.Count && i < instance.beastiarySelectables.Length)
  95.             {
  96.                 instance.beastiarySelectables[i].interactable = false;
  97.                 instance.beastiarySelectableNames[i].text = "?????????";
  98.             }else if(i >= instance.monsters.Count && i < instance.beastiarySelectables.Length)
  99.             {
  100.                 instance.beastiarySelectables[i].interactable = false;
  101.                 instance.beastiarySelectableNames[i].text = "?????????";
  102.                 instance.beastiarySprite.sprite = (Sprite)Resources.Load<Sprite>(instance.beastiaryImageLoadPath + "Unknown") as Sprite;
  103.                 instance.beastiaryLocation.text = "?????????";
  104.             }
  105.         }
  106.     }
  107.  
  108.     private void ShowBeastData(int index)
  109.     {
  110.         if(instance.monsters.Count >= index)
  111.         {
  112.             instance.beastiaryMainName.text = instance.monsters[index].monsterName;
  113.             instance.beastiarySprite.sprite = (Sprite)Resources.Load<Sprite>(instance.beastiaryImageLoadPath + instance.monsters[index].monsterSpriteIndex) as Sprite;
  114.             instance.beastiaryLocation.text = instance.monsters[index].monsterLocation;
  115.         }
  116.         else
  117.         {
  118.             return;
  119.         }
  120.     }
  121.  
  122.     public static void SaveBeastiaryData()
  123.     {
  124.         BinaryFormatter bf = new BinaryFormatter();
  125.  
  126.         if(!File.Exists(Application.persistentDataPath + instance.saveDirectory + instance.saveFile))
  127.         {
  128.             FileStream file = File.Create(Application.persistentDataPath + instance.saveDirectory + instance.saveFile);
  129.        
  130.             SavedBeastiaryData saveData = new SavedBeastiaryData();
  131.             saveData.beastiaryMonsterData = instance.monsters;
  132.             bf.Serialize(file, saveData);
  133.             file.Close();
  134.         }else if (File.Exists(Application.persistentDataPath + instance.saveDirectory + instance.saveFile))
  135.         {
  136.             FileStream file = File.Open(Application.persistentDataPath + instance.saveDirectory + instance.saveFile,FileMode.Open);
  137.             SavedBeastiaryData saveData =   (SavedBeastiaryData)bf.Deserialize(file) as SavedBeastiaryData;
  138.             saveData.beastiaryMonsterData = instance.monsters;
  139.             bf.Serialize(file, saveData);
  140.             file.Close();
  141.         }
  142.     }
  143.  
  144.     public static void LoadBeastiaryData()
  145.     {
  146.         BinaryFormatter bf = new BinaryFormatter();
  147.  
  148.         if (!File.Exists(Application.persistentDataPath + instance.saveDirectory + instance.saveFile))
  149.         {
  150.             //set your beastiary defaults here like a free unlock for the game start or a tutorial
  151.             //that gives a free unlock
  152.             return;
  153.         }
  154.         else if (File.Exists(Application.persistentDataPath + instance.saveDirectory + instance.saveFile))
  155.         {
  156.             FileStream file = File.Open(Application.persistentDataPath + instance.saveDirectory + instance.saveFile, FileMode.Open);
  157.             SavedBeastiaryData saveData = (SavedBeastiaryData)bf.Deserialize(file) as SavedBeastiaryData;
  158.             instance.monsters = saveData.beastiaryMonsterData;
  159.             file.Close();
  160.             UpdateBeastiary();
  161.         }
  162.     }
  163. }
  164.  
  165. [System.Serializable]
  166. public class MonstersBeastiaryData
  167. {
  168.     public string monsterName;
  169.     public string monsterLocation;
  170.     public string monsterSpriteIndex;
  171.     public bool unlockedData;
  172.  
  173. }
  174.  
  175.  
  176. [System.Serializable]
  177. public class SavedBeastiaryData
  178. {
  179.     public List<MonstersBeastiaryData> beastiaryMonsterData = new List<MonstersBeastiaryData>();
  180.  
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement