Files
wwdpublic/Content.Shared/_Shitcode/Wizard/FadingTimedDespawn/SharedFadingTimedDespawnSystem.cs
Kai5 091a8ff433 [GoobPort] WIZ REAL (#465)
* Уэээээээ

* Почти настрадались

* Скоро конец....

* СКОРО

* Мышки плакали, кололись, но продолжали упорно жрать кактус

* Все ближе!

* Это такой конец?

* Книжка говна

* фиксики

* ОНО ЖИВОЕ

* Телепорт

* разное

* Added byond

* ивенты теперь работают

* Разфикс телепорта

* Свет мой зеркальце скажи, да всю правду доложи - Я ль робастней всех на свете?

* Разное

* Еще многа всего

* Многа разнава

* Скоро конец....

* ЭТО КОНЕЦ

* Фикс линтера (ну, или я на это надеюсь)

* Еще один фикс линтера

* Победа!

* фиксики

* пу пу пу

* Фикс подмастерья

* Мисклик

* Высокочастотный меч

* Неймспейсы

* Пул способностей мага
2025-04-26 10:18:58 +03:00

90 lines
2.4 KiB
C#

// SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
// SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com>
// SPDX-FileCopyrightText: 2025 Misandry <mary@thughunt.ing>
// SPDX-FileCopyrightText: 2025 gus <august.eymann@gmail.com>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
using Robust.Shared.Spawners;
using Robust.Shared.Timing;
namespace Content.Shared._Shitcode.Wizard.FadingTimedDespawn;
/// <summary>
/// This is a copy of SharedTimedDespawnSystem with some modifications
/// </summary>
public abstract class SharedFadingTimedDespawnSystem : EntitySystem
{
[Dependency] protected readonly IGameTiming Timing = default!;
private readonly HashSet<EntityUid> _queuedDespawnEntities = new();
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<FadingTimedDespawnComponent, AfterAutoHandleStateEvent>(OnAfterAutoHandleState);
UpdatesOutsidePrediction = true;
}
private void OnAfterAutoHandleState(Entity<FadingTimedDespawnComponent> ent, ref AfterAutoHandleStateEvent args)
{
if (ent.Comp.FadeOutStarted)
FadeOut(ent);
}
public override void Update(float frameTime)
{
base.Update(frameTime);
if (!Timing.IsFirstTimePredicted)
return;
_queuedDespawnEntities.Clear();
var query = EntityQueryEnumerator<FadingTimedDespawnComponent>();
while (query.MoveNext(out var uid, out var comp))
{
if (!CanDelete(uid))
continue;
comp.Lifetime -= frameTime;
if (comp.Lifetime > 0f)
continue;
if (comp.FadeOutTime <= 0f)
{
_queuedDespawnEntities.Add(uid);
continue;
}
if (!comp.FadeOutStarted)
{
comp.FadeOutStarted = true;
comp.Lifetime += comp.FadeOutTime;
FadeOut((uid, comp));
Dirty(uid, comp);
continue;
}
_queuedDespawnEntities.Add(uid);
}
foreach (var queued in _queuedDespawnEntities)
{
var ev = new TimedDespawnEvent();
RaiseLocalEvent(queued, ref ev);
QueueDel(queued);
}
}
protected virtual void FadeOut(Entity<FadingTimedDespawnComponent> ent)
{
}
protected abstract bool CanDelete(EntityUid uid);
}