2D-Platformer/Assets/Scripts/Systems/ParticleCollisionSystem.cs
2022-02-12 12:53:50 +02:00

39 lines
No EOL
1,001 B
C#

using Unity.Entities;
using UnityEngine;
using Zenject;
namespace DefaultNamespace
{
public class ParticleCollisionSystem : InjectableComponentSystem
{
[Inject] private SoundManager soundManager;
protected override void OnSystemUpdate()
{
Entities.WithAll<ParticleCollisionEventContainer>()
.ForEach(
(Entity entity, ParticleCollisionData collision) =>
{
var events = EntityManager.GetBuffer<ParticleCollisionEventContainer>(entity);
foreach (var e in events)
{
var force = e.Evnt.velocity.magnitude;
if (force >= collision.ImpactForceRange.x)
{
soundManager.PlayClip(EntityManager, collision.ImpactSounds, e.Evnt.intersection);
break;
}
}
events = EntityManager.GetBuffer<ParticleCollisionEventContainer>(entity);
events.Clear();
});
}
}
[InternalBufferCapacity(8)]
public struct ParticleCollisionEventContainer : IBufferElementData
{
public ParticleCollisionEvent Evnt;
}
}