using System.Numerics;
using Content.Shared.Light.Components;
using Content.Shared.Random.Helpers;
using Robust.Shared.Timing;
namespace Content.Shared.Light.EntitySystems;
///
/// System for assigning random values to variables when given
///
public sealed partial class RandomPointLightSystem : EntitySystem
{
[Dependency] private IGameTiming _timing = default!;
[Dependency] private SharedPointLightSystem _light = default!;
[SubscribeLocalEvent]
private void RandomLight(Entity ent, ref ComponentStartup args)
{
if (_timing.ApplyingState)
return;
var rpl = ent.Comp;
var rand = SharedRandomExtensions.PredictedRandom(_timing, GetNetEntity(ent));
// Keeping the V variable between 0.5 and 1.0 so that it's always bright
var hsv = new Vector4(
rand.NextFloat(0, 1),
rand.NextFloat(0, 1),
rand.NextFloat(0.5f, 1),
1
);
var color = Color.FromHsv(hsv);
_light.SetRadius(ent, rand.NextFloat(rpl.MinRadius, rpl.MaxRadius));
_light.SetEnergy(ent, rand.NextFloat(rpl.MinEnergy, rpl.MaxEnergy));
_light.SetColor(ent, color);
}
}