更新
This commit is contained in:
87
Assets/Scripts/MainGame/Effects/VFXObject.cs
Normal file
87
Assets/Scripts/MainGame/Effects/VFXObject.cs
Normal file
@@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Cielonos.MainGame.Characters;
|
||||
using Lean.Pool;
|
||||
using Sirenix.OdinInspector;
|
||||
using SLSFramework.LeanPoolAssistance;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Cielonos.MainGame
|
||||
{
|
||||
public class VFXObject : PooledObject
|
||||
{
|
||||
[NonSerialized]
|
||||
public CharacterBase creator;
|
||||
|
||||
public List<ParticleSystem> particles = new List<ParticleSystem>();
|
||||
|
||||
[NonSerialized]
|
||||
public List<ParticleSystem.MainModule> particleMainModules = new List<ParticleSystem.MainModule>();
|
||||
|
||||
public static GameObject Spawn(GameObject vfxPrefab, CharacterBase creator, Transform parent = null)
|
||||
{
|
||||
VFXObject vfxObject = LeanPool.Spawn(vfxPrefab, parent).GetComponent<VFXObject>();
|
||||
vfxObject.SetCreator(creator);
|
||||
return vfxObject.gameObject;
|
||||
}
|
||||
|
||||
public static GameObject Spawn(GameObject vfxPrefab, CharacterBase creator, Vector3 position, Quaternion rotation, Transform parent = null)
|
||||
{
|
||||
VFXObject vfxObject = LeanPool.Spawn(vfxPrefab, position, rotation, parent).GetComponent<VFXObject>();
|
||||
vfxObject.SetCreator(creator);
|
||||
return vfxObject.gameObject;
|
||||
}
|
||||
|
||||
private void Reset()
|
||||
{
|
||||
CollectParticles();
|
||||
}
|
||||
|
||||
public override void OnSpawn()
|
||||
{
|
||||
if (spawnExecuted)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
base.OnSpawn();
|
||||
particleMainModules = new List<ParticleSystem.MainModule>();
|
||||
foreach (var ps in particles)
|
||||
{
|
||||
particleMainModules.Add(ps.main);
|
||||
}
|
||||
}
|
||||
|
||||
[Button("Collect Particles")]
|
||||
private void CollectParticles()
|
||||
{
|
||||
particles.Clear();
|
||||
|
||||
ParticleSystem[] foundParticles = GetComponentsInChildren<ParticleSystem>();
|
||||
foreach (var ps in foundParticles)
|
||||
{
|
||||
particles.Add(ps);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Update()
|
||||
{
|
||||
float deltaTime = Time.deltaTime;
|
||||
float timeScale = 1f;
|
||||
|
||||
if (creator != null)
|
||||
{
|
||||
deltaTime = creator.selfTimeSm.DeltaTime;
|
||||
timeScale = creator.selfTimeSm.timeScaleCoefficient.Value;
|
||||
}
|
||||
|
||||
UpdateTimer(deltaTime);
|
||||
particleMainModules.ForEach(main => main.simulationSpeed = timeScale);
|
||||
}
|
||||
|
||||
public void SetCreator(CharacterBase character)
|
||||
{
|
||||
creator = character;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user