86 lines
2.2 KiB
C#
86 lines
2.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Newtonsoft.Json;
|
|
using UnityEngine;
|
|
|
|
|
|
public class BlobManager: Singleton<BlobManager>, ISavable
|
|
{
|
|
|
|
public int CurrentID = 0;
|
|
|
|
public List<BlobController> Blobs = new();
|
|
|
|
public List<BlobController> AvailableBlobs => Blobs.Where(b => b.BelongingBuilding == null).ToList();
|
|
|
|
public Action<int> onBlobCountChange;
|
|
public void Spawn()
|
|
{
|
|
|
|
var BlobPrefab = Resources.Load<BlobController>("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<string, string> saveData)
|
|
{
|
|
var blobsString = saveData["blobs"];
|
|
CurrentID = int.Parse(saveData["CurrentID"]);
|
|
var savable = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(blobsString);
|
|
var blobPrefab = Resources.Load<BlobController>("Blob");
|
|
|
|
savable.ForEach(s =>
|
|
{
|
|
var go = Instantiate(blobPrefab);
|
|
go.name = s["name"];
|
|
go.blobID = int.Parse(s["blobID"]);
|
|
go.transform.position = s["position"].FromSavable<Vector3>();
|
|
});
|
|
}
|
|
|
|
public Dictionary<string, string> SaveData()
|
|
{
|
|
var savable = Blobs.Select(blob =>
|
|
{
|
|
return new Dictionary<string, string>
|
|
{
|
|
["name"] = blob.name,
|
|
["blobID"] = blob.blobID.ToString(),
|
|
["position"] = blob.transform.position.ToSavable()
|
|
};
|
|
}).ToList();
|
|
|
|
var blobsString = JsonConvert.SerializeObject(savable);
|
|
|
|
return new Dictionary<string, string>
|
|
{
|
|
["blobs"] = blobsString,
|
|
["CurrentID"] = CurrentID.ToString()
|
|
};
|
|
}
|
|
}
|