Re-organize all projects (#4166)

This commit is contained in:
DrSmugleaf
2021-06-09 22:19:39 +02:00
committed by GitHub
parent 9f50e4061b
commit ff1a2d97ea
1773 changed files with 5258 additions and 5508 deletions

View File

@@ -0,0 +1,116 @@
using System.Diagnostics.CodeAnalysis;
using Content.Client.Wall.Components;
using Content.Shared.Window;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Map;
using Robust.Shared.Serialization.Manager.Attributes;
using static Content.Client.IconSmoothing.IconSmoothComponent;
namespace Content.Client.Window
{
[RegisterComponent]
[ComponentReference(typeof(SharedWindowComponent))]
public sealed class WindowComponent : SharedWindowComponent
{
[Dependency] private readonly IMapManager _mapManager = default!;
[DataField("base")]
private string? _stateBase;
private ISpriteComponent? _sprite;
public override void Initialize()
{
base.Initialize();
_sprite = Owner.GetComponent<ISpriteComponent>();
}
/// <inheritdoc />
protected override void Startup()
{
base.Startup();
Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, new WindowSmoothDirtyEvent(Owner));
if (_sprite != null)
{
var state0 = $"{_stateBase}0";
const string cracksRSIPath = "/Textures/Constructible/Structures/Windows/cracks.rsi";
_sprite.LayerMapSet(CornerLayers.SE, _sprite.AddLayerState(state0));
_sprite.LayerSetDirOffset(CornerLayers.SE, SpriteComponent.DirectionOffset.None);
_sprite.LayerMapSet(WindowDamageLayers.DamageSE, _sprite.AddLayerState("0_1", cracksRSIPath));
_sprite.LayerSetVisible(WindowDamageLayers.DamageSE, false);
_sprite.LayerMapSet(CornerLayers.NE, _sprite.AddLayerState(state0));
_sprite.LayerSetDirOffset(CornerLayers.NE, SpriteComponent.DirectionOffset.CounterClockwise);
_sprite.LayerMapSet(WindowDamageLayers.DamageNE, _sprite.AddLayerState("0_1", cracksRSIPath));
_sprite.LayerSetDirOffset(WindowDamageLayers.DamageNE, SpriteComponent.DirectionOffset.CounterClockwise);
_sprite.LayerSetVisible(WindowDamageLayers.DamageNE, false);
_sprite.LayerMapSet(CornerLayers.NW, _sprite.AddLayerState(state0));
_sprite.LayerSetDirOffset(CornerLayers.NW, SpriteComponent.DirectionOffset.Flip);
_sprite.LayerMapSet(WindowDamageLayers.DamageNW, _sprite.AddLayerState("0_1", cracksRSIPath));
_sprite.LayerSetDirOffset(WindowDamageLayers.DamageNW, SpriteComponent.DirectionOffset.Flip);
_sprite.LayerSetVisible(WindowDamageLayers.DamageNW, false);
_sprite.LayerMapSet(CornerLayers.SW, _sprite.AddLayerState(state0));
_sprite.LayerSetDirOffset(CornerLayers.SW, SpriteComponent.DirectionOffset.Clockwise);
_sprite.LayerMapSet(WindowDamageLayers.DamageSW, _sprite.AddLayerState("0_1", cracksRSIPath));
_sprite.LayerSetDirOffset(WindowDamageLayers.DamageSW, SpriteComponent.DirectionOffset.Clockwise);
_sprite.LayerSetVisible(WindowDamageLayers.DamageSW, false);
}
}
public void SnapGridOnPositionChanged()
{
Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, new WindowSmoothDirtyEvent(Owner));
}
public void UpdateSprite()
{
var lowWall = FindLowWall();
if (lowWall == null)
{
return;
}
if (_sprite != null)
{
_sprite.LayerSetState(CornerLayers.NE, $"{_stateBase}{(int) lowWall.LastCornerNE}");
_sprite.LayerSetState(CornerLayers.SE, $"{_stateBase}{(int) lowWall.LastCornerSE}");
_sprite.LayerSetState(CornerLayers.SW, $"{_stateBase}{(int) lowWall.LastCornerSW}");
_sprite.LayerSetState(CornerLayers.NW, $"{_stateBase}{(int) lowWall.LastCornerNW}");
}
}
private LowWallComponent? FindLowWall()
{
if (!Owner.Transform.Anchored)
return null;
var grid = _mapManager.GetGrid(Owner.Transform.GridID);
var coords = Owner.Transform.Coordinates;
foreach (var entity in grid.GetLocal(coords))
{
if (Owner.EntityManager.ComponentManager.TryGetComponent(entity, out LowWallComponent? lowWall))
{
return lowWall;
}
}
return null;
}
}
[SuppressMessage("ReSharper", "InconsistentNaming")]
public enum WindowDamageLayers : byte
{
DamageSE,
DamageNE,
DamageNW,
DamageSW
}
}

View File

@@ -0,0 +1,71 @@
using System.Collections.Generic;
using JetBrains.Annotations;
using Robust.Shared.GameObjects;
namespace Content.Client.Window
{
[UsedImplicitly]
public sealed class WindowSystem : EntitySystem
{
private readonly Queue<IEntity> _dirtyEntities = new();
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<WindowSmoothDirtyEvent>(HandleDirtyEvent);
SubscribeLocalEvent<WindowComponent, SnapGridPositionChangedEvent>(HandleSnapGridMove);
}
public override void Shutdown()
{
base.Shutdown();
UnsubscribeLocalEvent<WindowSmoothDirtyEvent>();
UnsubscribeLocalEvent<WindowComponent, SnapGridPositionChangedEvent>(HandleSnapGridMove);
}
private void HandleDirtyEvent(WindowSmoothDirtyEvent ev)
{
if (ev.Sender.HasComponent<WindowComponent>())
{
_dirtyEntities.Enqueue(ev.Sender);
}
}
private static void HandleSnapGridMove(EntityUid uid, WindowComponent component, SnapGridPositionChangedEvent args)
{
component.SnapGridOnPositionChanged();
}
public override void FrameUpdate(float frameTime)
{
base.FrameUpdate(frameTime);
// Performance: This could be spread over multiple updates, or made parallel.
while (_dirtyEntities.Count > 0)
{
var entity = _dirtyEntities.Dequeue();
if (entity.Deleted)
{
continue;
}
entity.GetComponent<WindowComponent>().UpdateSprite();
}
}
}
/// <summary>
/// Event raised by a <see cref="WindowComponent"/> when it needs to be recalculated.
/// </summary>
public sealed class WindowSmoothDirtyEvent : EntityEventArgs
{
public IEntity Sender { get; }
public WindowSmoothDirtyEvent(IEntity sender)
{
Sender = sender;
}
}
}

View File

@@ -0,0 +1,68 @@
using System;
using Content.Client.Wall.Components;
using Content.Shared.Rounding;
using Content.Shared.Window;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Map;
namespace Content.Client.Window
{
[UsedImplicitly]
public sealed class WindowVisualizer : AppearanceVisualizer
{
public override void OnChangeData(AppearanceComponent component)
{
base.OnChangeData(component);
var sprite = component.Owner.GetComponent<ISpriteComponent>();
if (!component.Owner.Transform.Anchored)
return;
var lowWall = FindLowWall(IoCManager.Resolve<IMapManager>(), component.Owner.Transform);
if (lowWall == null)
return;
if (component.TryGetData(WindowVisuals.Damage, out float fraction))
{
var level = Math.Min(ContentHelpers.RoundToLevels(fraction, 1, 7), 5);
if (level == 0)
{
foreach (var val in Enum.GetValues(typeof(WindowDamageLayers)))
{
if (val == null) continue;
sprite.LayerSetVisible((WindowDamageLayers) val, false);
}
return;
}
foreach (var val in Enum.GetValues(typeof(WindowDamageLayers)))
{
if (val == null) continue;
sprite.LayerSetVisible((WindowDamageLayers) val, true);
}
sprite.LayerSetState(WindowDamageLayers.DamageNE, $"{(int) lowWall.LastCornerNE}_{level}");
sprite.LayerSetState(WindowDamageLayers.DamageSE, $"{(int) lowWall.LastCornerSE}_{level}");
sprite.LayerSetState(WindowDamageLayers.DamageSW, $"{(int) lowWall.LastCornerSW}_{level}");
sprite.LayerSetState(WindowDamageLayers.DamageNW, $"{(int) lowWall.LastCornerNW}_{level}");
}
}
private static LowWallComponent? FindLowWall(IMapManager mapManager, ITransformComponent transform)
{
var grid = mapManager.GetGrid(transform.GridID);
var coords = transform.Coordinates;
foreach (var entity in grid.GetLocal(coords))
{
if (transform.Owner.EntityManager.ComponentManager.TryGetComponent(entity, out LowWallComponent? lowWall))
{
return lowWall;
}
}
return null;
}
}
}