Advertisement
TyrannicGoat

Multimap Spawn Point Database

Mar 23rd, 2023
794
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.13 KB | None | 0 0
  1. ```cs
  2. public class SpawnDB : ScriptableObject
  3. {
  4.     private static SpawnDB _instance;
  5.  
  6.     public static SpawnDB Instance
  7.     {
  8.         get
  9.         {
  10.             if (_instance == null)
  11.             {
  12.                 _instance = Resources.Load<SpawnDB>("Spawn Database");
  13.             }
  14.             return _instance;
  15.         }
  16.     }
  17.  
  18.     [SerializeField]
  19.     private List<SpawnPoint> spawnPoints;
  20.    
  21.     [System.Serializable]
  22.     public class SpawnPoint
  23.     {
  24.         public string levelName;
  25.         public Vector3 defaultSpawnPosition;
  26.     }
  27.  
  28.     [System.Serializable]
  29.     public class SavedSpawnPoints
  30.     {
  31.         public List<SavedSpawnPoint> savedSpawnPoints;
  32.     }
  33.    
  34.     [System.Serializable]
  35.     public class SavedSpawnPoint
  36.     {
  37.         public string levelName;
  38.         public Vector3 spawnPosition;
  39.     }
  40.  
  41.     public void UpdateSpawnPointForScene(string levelName, Vector3 position, string persistentSaveDataPath)
  42.     {
  43.         string filepath = Application.persistentDataPath + persistentSaveDataPath+ "/SpawnPoints.dat";
  44.         using (FileStream file = File.Open(filepath, FileMode.Open))
  45.         {
  46.             var bf = new BinaryFormatter();
  47.             SavedSpawnPoints savedSpawnPoints = (SavedSpawnPoints)bf.Deserialize(file);
  48.             bool found = false;
  49.             foreach (var savedSpawnPoint in savedSpawnPoints.savedSpawnPoints)
  50.             {
  51.                 if (savedSpawnPoint.levelName == levelName)
  52.                 {
  53.                     savedSpawnPoint.spawnPosition = spawnPoints.Find(x => x.levelName == levelName).defaultSpawnPosition;
  54.                     found = true;
  55.                 }
  56.             }
  57.  
  58.             if (!found)
  59.             {
  60.                 savedSpawnPoints.savedSpawnPoints.Add(new SavedSpawnPoint()
  61.                 {
  62.                     levelName = levelName,
  63.                     spawnPosition = position
  64.                 });
  65.             }
  66.             bf.Serialize(file, savedSpawnPoints);
  67.         }
  68.     }
  69.    
  70.     public Vector3 GetSpawnPointForScene(string levelName, string persistentSaveDataPath)
  71.     {
  72.         string filepath = Application.persistentDataPath + persistentSaveDataPath + "/SpawnPoints.dat";
  73.         using (FileStream file = File.Open(filepath, FileMode.Open))
  74.         {
  75.             SavedSpawnPoints savedSpawnPoints = (SavedSpawnPoints) new BinaryFormatter().Deserialize(file);
  76.             foreach (var savedSpawnPoint in savedSpawnPoints.savedSpawnPoints)
  77.             {
  78.                 if (savedSpawnPoint.levelName == levelName)
  79.                 {
  80.                     return savedSpawnPoint.spawnPosition;
  81.                 }
  82.             }
  83.         }
  84.         return GetDefaultSpawnPointForScene(levelName);
  85.     }
  86.  
  87.     private Vector3 GetDefaultSpawnPointForScene(string sceneName)
  88.     {
  89.         foreach (var spawnPoint in spawnPoints)
  90.         {
  91.             if (spawnPoint.levelName == sceneName)
  92.             {
  93.                 return spawnPoint.defaultSpawnPosition;
  94.             }
  95.         }
  96.         Debug.LogError($"Level Name {sceneName} does not have defined spawn position, please add one", this);
  97.         return Vector3.zero;
  98.     }
  99. }
  100. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement