Files
RobustToolbox/Robust.Client/GameObjects/EntitySystems/PointLightSystem.cs
metalgearsloth d5855fa805 Sync PointLight data between client and server. (#1995)
* Sync PointLight data

* ECS GetComponentState

* Nothing to see here
2021-09-06 17:31:06 +10:00

45 lines
1.5 KiB
C#

using Robust.Client.ResourceManagement;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Map;
namespace Robust.Client.GameObjects
{
public sealed class PointLightSystem : SharedPointLightSystem
{
[Dependency] private readonly IResourceCache _resourceCache = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<PointLightComponent, ComponentInit>(HandleInit);
SubscribeLocalEvent<PointLightComponent, ComponentRemove>(HandleRemove);
}
private void HandleInit(EntityUid uid, PointLightComponent component, ComponentInit args)
{
UpdateMask(component);
}
private void HandleRemove(EntityUid uid, PointLightComponent component, ComponentRemove args)
{
var ent = EntityManager.GetEntity(uid);
var map = ent.Transform.MapID;
// TODO: Just make this update the tree directly and not allocate
if (map != MapId.Nullspace)
{
EntityManager.EventBus.RaiseEvent(EventSource.Local,
new RenderTreeRemoveLightEvent(component, map));
}
}
internal void UpdateMask(PointLightComponent component)
{
if (component._maskPath is not null)
component.Mask = _resourceCache.GetResource<TextureResource>(component._maskPath);
else
component.Mask = null;
}
}
}