protected override void OnUpdate()
    {
        MultiTimeValue multiElapsedTime = GetElapsedTime();

        Entities
        .WithoutBurst()
        .WithStructuralChanges()
        .ForEach((ref EntitySpawnerState state, in EntitySpawnerSetting settings, in DynamicBuffer <EntitiesToSpawn> entitiesToSpawn, in Signal signal, in FixTranslation position) =>
        {
            if (state.TotalAmountSpawned >= settings.Quantity)
            {
                return;
            }

            if (settings.OnlyWhenSignalOn && !signal.Value)
            {
                return;
            }

            TimeValue elapsedTime = multiElapsedTime.GetValue(settings.SpawnPeriod.Type);

            if ((elapsedTime - state.LastSpawnTime >= settings.SpawnPeriod) ||
                (settings.StartsReady && state.TotalAmountSpawned == 0))
            {
                state.LastSpawnTime = elapsedTime;
                SpawnEntities(entitiesToSpawn.ToNativeArray(Allocator.Temp), settings, ref state, position);
            }
        }).Run();
Exemple #2
0
    protected override void OnUpdate()
    {
        MultiTimeValue multiElapsedTime = GetElapsedTime();

        var ecb = _ecbSytem.CreateCommandBuffer();

        Entities
        .WithoutBurst()
        .WithStructuralChanges()
        .ForEach((ref Frozen frozenEffect, in Entity entity) =>
        {
            TimeValue elapsedTime = multiElapsedTime.GetValue(frozenEffect.Duration.Type);

            if ((elapsedTime - frozenEffect.AppliedTime) >= frozenEffect.Duration)
            {
                ecb.RemoveComponent <Frozen>(entity);
            }
        }).Run();

        _ecbSytem.AddJobHandleForProducer(Dependency);
    }