ObjectPoolModule.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using KairoEngine.Core;
  6. using KairoEngine.Core.ModuleSystem;
  7. using Sirenix.OdinInspector;
  8. using QFSW.MOP2;
  9. namespace KairoEngine.Core.ObjectPooling
  10. {
  11. public class ObjectPoolModule : GameModuleBase
  12. {
  13. public override string name => "Object Pool Module";
  14. [FoldoutGroup("@name")] public List<ObjectPool> pools = new List<ObjectPool>();
  15. [SerializeField, HideInInspector] private int poolCount;
  16. public ObjectPoolModule(GameConfig config) : base(config)
  17. {
  18. this.gameConfig = config;
  19. this.className = this.GetType().AssemblyQualifiedName;
  20. this.typeName = "ObjectPoolModule";
  21. }
  22. public override void Load(Transform parent)
  23. {
  24. GameObject ObjectPoolPrefab = Resources.Load("ObjectPoolPrefab") as GameObject;
  25. if(ObjectPoolPrefab == null)
  26. {
  27. Debug.LogError("Could not find ObjectPoolPrefab in ObjectPoolModule");
  28. return;
  29. }
  30. GameObject objectPoolObj = GameObject.Instantiate(ObjectPoolPrefab, parent);
  31. MasterObjectPooler masterObjectPooler = objectPoolObj.GetComponent<MasterObjectPooler>();
  32. if(masterObjectPooler == null)
  33. {
  34. Debug.LogError("Could not find MasterObjectPooler component", objectPoolObj);
  35. return;
  36. }
  37. for (int i = 0; i < pools.Count; i++)
  38. {
  39. masterObjectPooler.AddPool(pools[i]);
  40. }
  41. }
  42. public override void Reset()
  43. {
  44. pools = new List<ObjectPool>();
  45. poolCount = 0;
  46. }
  47. public override void Destroy()
  48. {
  49. }
  50. public static ObjectPoolModule JSONToObjectPoolModule(string data)
  51. {
  52. try
  53. {
  54. return JsonUtility.FromJson<ObjectPoolModule>(data);
  55. }
  56. catch (System.Exception e)
  57. {
  58. Debug.LogError($"Could not deserialize ObjectPoolModule: \n{e}");
  59. }
  60. return new ObjectPoolModule(null);
  61. }
  62. public override void OnBeforeSerialize(ObjectSerializer serializer)
  63. {
  64. if(pools != null)
  65. {
  66. poolCount = pools.Count;
  67. for (int i = 0; i < pools.Count; i++)
  68. {
  69. serializer.AddObject($"ObjectPool_pool_{i}", pools[i]);
  70. }
  71. }
  72. }
  73. public override void OnBeforeDeserialize(ObjectSerializer serializer)
  74. {
  75. pools = new List<ObjectPool>();
  76. for (int i = 0; i < poolCount; i++)
  77. {
  78. pools.Add((ObjectPool)serializer.GetObject($"ObjectPool_pool_{i}"));
  79. }
  80. }
  81. }
  82. }