Space-Smash-Out/Assets/FORGE3D/PoolManager/F3DPoolManager.cs

101 lines
3.8 KiB
C#

using UnityEngine;
using System.Collections.Generic;
using System;
namespace FORGE3D
{
[Serializable]
public class F3DPoolManager : MonoBehaviour
{
public static F3DPoolManager instance; // instance of current manager
public static Dictionary<string, F3DPool> Pools = new Dictionary<string, F3DPool>();
public string databaseName = ""; // Name of database. Need for editor
public int selectedItem = 0; // Editor's parameter
public bool[] haveToShowArr; // Editor's parameter
List<F3DPool> curPools = new List<F3DPool>(); // Our pools
void Awake()
{
InstallManager();
instance = this;
}
//Retirning pool by it's name
public F3DPool GetPool(string valueName)
{
int i;
if (valueName != "" && curPools != null && curPools.Count > 0)
{
for (i = 0; i < curPools.Count; i++)
{
if (curPools[i].poolName == valueName)
{
return curPools[i];
}
}
}
return null;
}
//Installing of manager
void InstallManager()
{
curPools.Clear();
List<F3DPoolContainer> pools = new List<F3DPoolContainer>();
Pools.Clear();
Pools = new Dictionary<string, F3DPool>();
F3DPoolManagerDB myManager = Resources.Load("F3DPoolManagerCache/" + databaseName) as F3DPoolManagerDB;
if (myManager != null)
{
if (myManager.pools != null)
{
foreach (F3DPoolContainer cont in myManager.pools)
{
pools.Add(cont);
}
}
}
//Transfering info from containers to our real pools and creating GO's for them
int j;
for (j = 0; j < pools.Count; j++)
{
GameObject newGO = new GameObject();
newGO.transform.parent = this.gameObject.transform;
newGO.name = pools[j].poolName;
F3DPool newPool = newGO.AddComponent<F3DPool>();
newPool.poolName = newGO.name;
newPool.SetTemplates(pools[j].templates);
newPool.SetLength(pools[j].poolLength);
newPool.SetLengthMax(pools[j].poolLengthMax);
newPool.needBroadcasting = pools[j].needBroadcasting;
newPool.broadcastSpawnName = pools[j].broadcastSpawnName;
newPool.broadcastDespawnName = pools[j].broadcastDespawnName;
newPool.needSort = pools[j].needSort;
newPool.delayedSpawnInInstall = pools[j].delayedSpawnInInstall;
newPool.objectsPerUpdate = pools[j].objectsPerUpdate;
newPool.optimizeSpawn = pools[j].optimizeSpawn;
newPool.targetFPS = pools[j].targetFPS;
newPool.needSort = pools[j].needSort;
newPool.needParenting = pools[j].needParenting;
newPool.needDebugging = pools[j].needDebug;
newPool.pooling = true;
newPool.Install();
curPools.Add(newPool);
Pools.Add(newPool.name, newPool);
}
}
public int GetPoolsCount()
{
if (curPools != null)
return curPools.Count;
return -1;
}
}
}