fish-station/Content.Server/_Sunrise/NightDayMapLight/NightDayMapLightSystem.cs
Vigers Ray ffd3e3de14
Планетарная тюрьма (#187)
* Тюрьма (#150)

* Prison Init

* Новая карта для планетарных тюрем

* Готовая планетарная тюрьма

* Незначительное изменение тайлов

---------

Co-authored-by: Vigers Ray <60344369+VigersRay@users.noreply.github.com>

* Космическая тюрьма и всё остальное говно

* фиксы

* фикс PrisonlDoctor

* фикс PrisonDoctor

* день длится 20 минут

---------

Co-authored-by: SplikZerys <136282037+SplikZerys@users.noreply.github.com>
2024-07-12 04:21:12 +03:00

52 lines
1.9 KiB
C#

using Robust.Shared.Map.Components;
using Robust.Shared.Timing;
namespace Content.Server._Sunrise.NightDayMapLight
{
public sealed class NightDayMapLightSystem : EntitySystem
{
[Dependency] private readonly IGameTiming _gameTiming = default!;
public override void Initialize()
{
base.Initialize();
}
public override void Update(float frameTime)
{
base.Update(frameTime);
var query = EntityQueryEnumerator<NightDayMapLightComponent, MapLightComponent>();
while (query.MoveNext(out var uid, out var nightDayMapLight, out var mapLight))
{
var dayDuration = nightDayMapLight.DayDuration;
var transitionDuration = dayDuration / 2f;
var t = (float)_gameTiming.CurTime.TotalSeconds % dayDuration / dayDuration;
if (t <= 0.5f)
{
var dayColor = nightDayMapLight.DayColor;
if (t >= 0.5f - (transitionDuration / dayDuration))
{
var transitionT = (0.5f - t) / (transitionDuration / dayDuration);
dayColor = Color.InterpolateBetween(nightDayMapLight.NightColor, nightDayMapLight.DayColor, transitionT);
}
mapLight.AmbientLightColor = dayColor;
}
else
{
var nightColor = nightDayMapLight.NightColor;
if (t <= 0.5f + (transitionDuration / dayDuration))
{
var transitionT = (t - 0.5f) / (transitionDuration / dayDuration);
nightColor = Color.InterpolateBetween(nightDayMapLight.NightColor, nightDayMapLight.DayColor, transitionT);
}
mapLight.AmbientLightColor = nightColor;
}
Dirty(uid, mapLight);
}
}
}
}