Files
FueraDeEscala/Assets/Game Kit Controller/Scripts/Pooling System/GKC_PoolingElement.cs
Robii Aragon fd87a6ffd5 add ckg
plantilla base para movimiento básico
2026-02-05 05:07:55 -08:00

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);
}
}