mirror of
https://github.com/hanzoai/ProjectTinySamples.git
synced 2026-09-24 00:01:34 +00:00
51 lines
1.8 KiB
C#
51 lines
1.8 KiB
C#
using Unity.Entities;
|
|
using Unity.Tiny;
|
|
|
|
namespace Unity.Spaceship
|
|
{
|
|
[UpdateAfter(typeof(MissileHitSystem))]
|
|
public class ExplosionSystem : SystemBase
|
|
{
|
|
protected override void OnCreate()
|
|
{
|
|
base.OnCreate();
|
|
RequireSingletonForUpdate<ExplosionSpawner>();
|
|
}
|
|
protected override void OnUpdate()
|
|
{
|
|
var explosions = GetSingleton<ExplosionSpawner>();
|
|
var explosionsEntity = GetSingletonEntity<ExplosionSpawner>();
|
|
var explosionSprites = EntityManager.GetBuffer<ExplosionSprite>(explosionsEntity);
|
|
|
|
var ecbSystem = World.GetOrCreateSystem<EndSimulationEntityCommandBufferSystem>();
|
|
var ecb = ecbSystem.CreateCommandBuffer().AsParallelWriter();
|
|
|
|
var deltaTime = Time.DeltaTime;
|
|
Dependency = Entities.ForEach((ref Explosion explosion) =>
|
|
{
|
|
explosion.Timer += deltaTime;
|
|
}).Schedule(Dependency);
|
|
|
|
Dependency = Entities
|
|
.WithReadOnly(explosionSprites)
|
|
.ForEach((
|
|
Entity e,
|
|
int entityInQueryIndex,
|
|
ref SpriteRenderer sr,
|
|
in Explosion explosion) =>
|
|
{
|
|
var activeSprite = (int)(explosion.Timer / explosions.TimePerSprite);
|
|
if (activeSprite >= explosionSprites.Length)
|
|
{
|
|
ecb.DestroyEntity(entityInQueryIndex, e);
|
|
}
|
|
else
|
|
{
|
|
sr.Sprite = explosionSprites[activeSprite].Sprite;
|
|
}
|
|
}).Schedule(Dependency);
|
|
|
|
ecbSystem.AddJobHandleForProducer(Dependency);
|
|
}
|
|
}
|
|
} |