137 lines
2.9 KiB
C#
137 lines
2.9 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
public class GKC_PoolingElement : MonoBehaviour
|
|
{
|
|
[Header ("Main Settings")]
|
|
[Space]
|
|
|
|
public bool usePoolingEnabled = true;
|
|
|
|
public GameObject mainPoolGameObject;
|
|
|
|
[Space]
|
|
[Header ("Other Settings")]
|
|
[Space]
|
|
|
|
public Vector3 currentPositionToSpawn;
|
|
public Quaternion currentRotationToSpawn;
|
|
|
|
[Space]
|
|
[Header ("Events Settings")]
|
|
[Space]
|
|
|
|
public bool useEventOnSpawn;
|
|
public UnityEvent eventOnSpawn;
|
|
|
|
[Space]
|
|
|
|
public bool useEventOnDespawn;
|
|
public UnityEvent eventOnDespawn;
|
|
|
|
[Space]
|
|
[Space]
|
|
|
|
public UnityEvent eventToEnablePoolManagement;
|
|
public UnityEvent eventToDisablePoolManagement;
|
|
|
|
|
|
public void setPositionToSpawn (Vector3 newValue)
|
|
{
|
|
currentPositionToSpawn = newValue;
|
|
}
|
|
|
|
public void setRotationToSpawn (Quaternion newValue)
|
|
{
|
|
currentRotationToSpawn = newValue;
|
|
}
|
|
|
|
public virtual void spawnPoolObject ()
|
|
{
|
|
if (usePoolingEnabled) {
|
|
// GKC_PoolingSystem.Spawn (mainPoolGameObject, currentPositionToSpawn, currentRotationToSpawn);
|
|
|
|
checkEventOnSpawn ();
|
|
|
|
checkObjectStateAfterSpawn ();
|
|
}
|
|
}
|
|
|
|
public virtual void despawnPoolObject ()
|
|
{
|
|
if (usePoolingEnabled) {
|
|
checkObjectStateBeforeDespawn ();
|
|
|
|
checkEventOnDespawn ();
|
|
|
|
GKC_PoolingSystem.Despawn (mainPoolGameObject);
|
|
}
|
|
}
|
|
|
|
public virtual void checkObjectStateBeforeDespawn ()
|
|
{
|
|
|
|
}
|
|
|
|
public virtual void checkObjectStateAfterSpawn ()
|
|
{
|
|
|
|
}
|
|
|
|
public void checkEventOnSpawn ()
|
|
{
|
|
if (useEventOnSpawn) {
|
|
eventOnSpawn.Invoke ();
|
|
}
|
|
}
|
|
|
|
public void checkEventOnDespawn ()
|
|
{
|
|
if (useEventOnDespawn) {
|
|
eventOnDespawn.Invoke ();
|
|
}
|
|
}
|
|
|
|
public void setUsePoolingEnabledState (bool state)
|
|
{
|
|
usePoolingEnabled = state;
|
|
}
|
|
|
|
public void checkEventsOnEnableOrDisablePoolingManagementOnObject (bool state)
|
|
{
|
|
setUsePoolingEnabledState (state);
|
|
|
|
if (state) {
|
|
eventToEnablePoolManagement.Invoke ();
|
|
} else {
|
|
eventToDisablePoolManagement.Invoke ();
|
|
}
|
|
|
|
if (!Application.isPlaying) {
|
|
updateComponent ();
|
|
}
|
|
}
|
|
|
|
//EDITOR FUNCTIONS
|
|
public void setUsePoolingEnabledStateFromEditor (bool state)
|
|
{
|
|
setUsePoolingEnabledState (state);
|
|
|
|
updateComponent ();
|
|
}
|
|
|
|
public void checkEventsOnEnableOrDisablePoolingManagementOnObjectFromEditor (bool state)
|
|
{
|
|
checkEventsOnEnableOrDisablePoolingManagementOnObject (state);
|
|
}
|
|
|
|
void updateComponent ()
|
|
{
|
|
GKC_Utils.updateComponent (this);
|
|
|
|
GKC_Utils.updateDirtyScene ("Update GKC Poolong Element " + gameObject.name, gameObject);
|
|
}
|
|
}
|