using System; using System.Collections.Generic; using System.Linq; using Newtonsoft.Json; using UnityEngine; public class BlobManager: Singleton, ISavable { public int CurrentID = 0; public List Blobs = new(); public List AvailableBlobs => Blobs.Where(b => b.BelongingBuilding == null).ToList(); public Action onBlobCountChange; public void Spawn() { var BlobPrefab = Resources.Load("Blob"); var go = Instantiate(BlobPrefab, Vector3.zero, Quaternion.identity); go.name = $"Blob_{CurrentID + 1}"; } public int Register(BlobController blob) { if (Blobs.Contains(blob)) return -1; Blobs.Add(blob); CurrentID++; return CurrentID; } public void UnRegister(BlobController blob) { if (Blobs.Contains(blob)) { Blobs.Remove(blob); } } public string GetPath() { return this.gameObject.GetPath(); } public void LoadData(Dictionary saveData) { var blobsString = saveData["blobs"]; CurrentID = int.Parse(saveData["CurrentID"]); var savable = JsonConvert.DeserializeObject>>(blobsString); var blobPrefab = Resources.Load("Blob"); savable.ForEach(s => { var go = Instantiate(blobPrefab); go.name = s["name"]; go.blobID = int.Parse(s["blobID"]); go.transform.position = s["position"].FromSavable(); }); } public Dictionary SaveData() { var savable = Blobs.Select(blob => { return new Dictionary { ["name"] = blob.name, ["blobID"] = blob.blobID.ToString(), ["position"] = blob.transform.position.ToSavable() }; }).ToList(); var blobsString = JsonConvert.SerializeObject(savable); return new Dictionary { ["blobs"] = blobsString, ["CurrentID"] = CurrentID.ToString() }; } }