Revert the other arch changes (#21871)

This commit is contained in:
metalgearsloth
2023-11-24 11:19:46 +11:00
committed by GitHub
parent 15052bf7c2
commit d4bed09cdc
32 changed files with 108 additions and 309 deletions

View File

@@ -1,218 +0,0 @@
using System.Linq;
using System.Numerics;
using Content.Client.Parallax;
using Content.Shared.Weather;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.ResourceManagement;
using Robust.Client.Utility;
using Robust.Shared.Enums;
using Robust.Shared.Graphics.RSI;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Physics.Components;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
using Robust.Shared.Utility;
namespace Content.Client.Weather;
public sealed class WeatherOverlay : Overlay
{
[Dependency] private readonly IClyde _clyde = default!;
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IPrototypeManager _protoManager = default!;
[Dependency] private readonly IResourceCache _cache = default!;
private readonly SharedTransformSystem _transform;
private readonly SpriteSystem _sprite;
private readonly WeatherSystem _weather;
public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV;
private IRenderTexture? _blep;
public WeatherOverlay(SharedTransformSystem transform, SpriteSystem sprite, WeatherSystem weather)
{
ZIndex = ParallaxSystem.ParallaxZIndex + 1;
_transform = transform;
_weather = weather;
_sprite = sprite;
IoCManager.InjectDependencies(this);
}
protected override bool BeforeDraw(in OverlayDrawArgs args)
{
if (args.MapId == MapId.Nullspace)
return false;
if (!_entManager.TryGetComponent<WeatherComponent>(_mapManager.GetMapEntityId(args.MapId), out var weather) ||
weather.Weather.Count == 0)
{
return false;
}
return base.BeforeDraw(in args);
}
protected override void Draw(in OverlayDrawArgs args)
{
var mapUid = _mapManager.GetMapEntityId(args.MapId);
if (!_entManager.TryGetComponent<WeatherComponent>(mapUid, out var comp))
{
return;
}
foreach (var (proto, weather) in comp.Weather)
{
if (!_protoManager.TryIndex<WeatherPrototype>(proto, out var weatherProto))
continue;
var alpha = _weather.GetPercent(weather, mapUid);
DrawWorld(args, weatherProto, alpha);
}
}
private void DrawWorld(in OverlayDrawArgs args, WeatherPrototype weatherProto, float alpha)
{
var worldHandle = args.WorldHandle;
var mapId = args.MapId;
var worldAABB = args.WorldAABB;
var worldBounds = args.WorldBounds;
var invMatrix = args.Viewport.GetWorldToLocalMatrix();
var position = args.Viewport.Eye?.Position.Position ?? Vector2.Zero;
if (_blep?.Texture.Size != args.Viewport.Size)
{
_blep?.Dispose();
_blep = _clyde.CreateRenderTarget(args.Viewport.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "weather-stencil");
}
// Cut out the irrelevant bits via stencil
// This is why we don't just use parallax; we might want specific tiles to get drawn over
// particularly for planet maps or stations.
worldHandle.RenderInRenderTarget(_blep, () =>
{
var bodyQuery = _entManager.GetEntityQuery<PhysicsComponent>();
var xformQuery = _entManager.GetEntityQuery<TransformComponent>();
var weatherIgnoreQuery = _entManager.GetEntityQuery<IgnoreWeatherComponent>();
// idk if this is safe to cache in a field and clear sloth help
var grids = new List<Entity<MapGridComponent>>();
_mapManager.FindGridsIntersecting(mapId, worldAABB, ref grids);
foreach (var grid in grids)
{
var matrix = _transform.GetWorldMatrix(grid, xformQuery);
Matrix3.Multiply(in matrix, in invMatrix, out var matty);
worldHandle.SetTransform(matty);
foreach (var tile in grid.Comp.GetTilesIntersecting(worldAABB))
{
// Ignored tiles for stencil
if (_weather.CanWeatherAffect(grid, tile, weatherIgnoreQuery, bodyQuery))
{
continue;
}
var gridTile = new Box2(tile.GridIndices * grid.Comp.TileSize,
(tile.GridIndices + Vector2i.One) * grid.Comp.TileSize);
worldHandle.DrawRect(gridTile, Color.White);
}
}
}, Color.Transparent);
worldHandle.SetTransform(Matrix3.Identity);
worldHandle.UseShader(_protoManager.Index<ShaderPrototype>("StencilMask").Instance());
worldHandle.DrawTextureRect(_blep.Texture, worldBounds);
Texture? sprite = null;
var curTime = _timing.RealTime;
switch (weatherProto.Sprite)
{
case SpriteSpecifier.Rsi rsi:
var rsiActual = _cache.GetResource<RSIResource>(rsi.RsiPath).RSI;
rsiActual.TryGetState(rsi.RsiState, out var state);
var frames = state!.GetFrames(RsiDirection.South);
var delays = state.GetDelays();
var totalDelay = delays.Sum();
var time = curTime.TotalSeconds % totalDelay;
var delaySum = 0f;
for (var i = 0; i < delays.Length; i++)
{
var delay = delays[i];
delaySum += delay;
if (time > delaySum)
continue;
sprite = frames[i];
break;
}
sprite ??= _sprite.Frame0(weatherProto.Sprite);
break;
case SpriteSpecifier.Texture texture:
sprite = texture.GetTexture(_cache);
break;
default:
throw new NotImplementedException();
}
// Draw the rain
worldHandle.UseShader(_protoManager.Index<ShaderPrototype>("StencilDraw").Instance());
// TODO: This is very similar to parallax but we need stencil support but we can probably combine these somehow
// and not make it spaghetti, while getting the advantages of not-duped code?
// Okay I have spent like 5 hours on this at this point and afaict you have one of the following comprises:
// - No scrolling so the weather is always centered on the player
// - Crappy looking rotation but strafing looks okay and scrolls
// - Crappy looking strafing but rotation looks okay.
// - No rotation
// - Storing state across frames to do scrolling and just having it always do topdown.
// I have chosen no rotation.
const float scale = 1f;
const float slowness = 0f;
var scrolling = Vector2.Zero;
// Size of the texture in world units.
var size = (sprite.Size / (float) EyeManager.PixelsPerMeter) * scale;
var scrolled = scrolling * (float) curTime.TotalSeconds;
// Origin - start with the parallax shift itself.
var originBL = position * slowness + scrolled;
// Centre the image.
originBL -= size / 2;
// Remove offset so we can floor.
var flooredBL = args.WorldAABB.BottomLeft - originBL;
// Floor to background size.
flooredBL = (flooredBL / size).Floored() * size;
// Re-offset.
flooredBL += originBL;
for (var x = flooredBL.X; x < args.WorldAABB.Right; x += size.X)
{
for (var y = flooredBL.Y; y < args.WorldAABB.Top; y += size.Y)
{
var box = Box2.FromDimensions(new Vector2(x, y), size);
worldHandle.DrawTextureRect(sprite, box, (weatherProto.Color ?? Color.White).WithAlpha(alpha));
}
}
worldHandle.SetTransform(Matrix3.Identity);
worldHandle.UseShader(null);
}
}

View File

@@ -500,7 +500,7 @@ public abstract partial class InteractionTest
/// <summary> /// <summary>
/// Assert whether or not the target has the given component. /// Assert whether or not the target has the given component.
/// </summary> /// </summary>
protected void AssertComp<T>(bool hasComp = true, NetEntity? target = null) where T : IComponent protected void AssertComp<T>(bool hasComp = true, NetEntity? target = null)
{ {
target ??= Target; target ??= Target;
if (target == null) if (target == null)

View File

@@ -162,7 +162,7 @@ public sealed class PrototypeSaveTest
} }
// An entity may also remove components on init -> check no components are missing. // An entity may also remove components on init -> check no components are missing.
foreach (var compType in prototype.Components.Keys) foreach (var (compType, comp) in prototype.Components)
{ {
Assert.That(compNames, Does.Contain(compType), $"Prototype {prototype.ID} removes component {compType} on spawn."); Assert.That(compNames, Does.Contain(compType), $"Prototype {prototype.ID} removes component {compType} on spawn.");
} }
@@ -208,7 +208,7 @@ public sealed class PrototypeSaveTest
Assert.Fail($"Uninitialized entities should not be saving entity Uids. Component: {WritingComponent}. Prototype: {Prototype.ID}"); Assert.Fail($"Uninitialized entities should not be saving entity Uids. Component: {WritingComponent}. Prototype: {Prototype.ID}");
} }
return new ValueDataNode(value.Id.ToString()); return new ValueDataNode(value.ToString());
} }
EntityUid ITypeReader<EntityUid, ValueDataNode>.Read(ISerializationManager serializationManager, EntityUid ITypeReader<EntityUid, ValueDataNode>.Read(ISerializationManager serializationManager,

View File

@@ -33,15 +33,15 @@ namespace Content.Server.Administration.Commands
return; return;
} }
var targetNet = new NetEntity(targetId); var target = new EntityUid(targetId);
if (!_entities.TryGetEntity(targetNet, out var target)) if (!target.IsValid() || !_entities.EntityExists(target))
{ {
shell.WriteLine(Loc.GetString("shell-invalid-entity-id")); shell.WriteLine(Loc.GetString("shell-invalid-entity-id"));
return; return;
} }
_entities.System<MindSystem>().ControlMob(player.UserId, target.Value); _entities.System<MindSystem>().ControlMob(player.UserId, target);
} }
} }
} }

View File

@@ -8,8 +8,6 @@ namespace Content.Server.Administration.Commands;
[AdminCommand(AdminFlags.Fun)] [AdminCommand(AdminFlags.Fun)]
public sealed class OwoifyCommand : IConsoleCommand public sealed class OwoifyCommand : IConsoleCommand
{ {
[Dependency] private readonly IEntityManager _entManager = default!;
public string Command => "owoify"; public string Command => "owoify";
public string Description => "For when you need everything to be cat. Uses OwOAccent's formatting on the name and description of an entity."; public string Description => "For when you need everything to be cat. Uses OwOAccent's formatting on the name and description of an entity.";
@@ -24,25 +22,22 @@ public sealed class OwoifyCommand : IConsoleCommand
return; return;
} }
var entityManager = IoCManager.Resolve<IEntityManager>();
if (!int.TryParse(args[0], out var targetId)) if (!int.TryParse(args[0], out var targetId))
{ {
shell.WriteLine(Loc.GetString("shell-argument-must-be-number")); shell.WriteLine(Loc.GetString("shell-argument-must-be-number"));
return; return;
} }
var nent = new NetEntity(targetId); var eUid = new EntityUid(targetId);
if (!_entManager.TryGetEntity(nent, out var eUid)) var meta = entityManager.GetComponent<MetaDataComponent>(eUid);
{
return;
}
var meta = _entManager.GetComponent<MetaDataComponent>(eUid.Value); var owoSys = entityManager.System<OwOAccentSystem>();
var metaDataSys = entityManager.System<MetaDataSystem>();
var owoSys = _entManager.System<OwOAccentSystem>(); metaDataSys.SetEntityName(eUid, owoSys.Accentuate(meta.EntityName), meta);
var metaDataSys = _entManager.System<MetaDataSystem>(); metaDataSys.SetEntityDescription(eUid, owoSys.Accentuate(meta.EntityDescription), meta);
metaDataSys.SetEntityName(eUid.Value, owoSys.Accentuate(meta.EntityName), meta);
metaDataSys.SetEntityDescription(eUid.Value, owoSys.Accentuate(meta.EntityDescription), meta);
} }
} }

View File

@@ -11,7 +11,6 @@ namespace Content.Server.Administration.Commands
[AdminCommand(AdminFlags.Admin)] [AdminCommand(AdminFlags.Admin)]
sealed class SetMindCommand : IConsoleCommand sealed class SetMindCommand : IConsoleCommand
{ {
[Dependency] private readonly IEntityManager _entManager = default!;
public string Command => "setmind"; public string Command => "setmind";
@@ -27,7 +26,7 @@ namespace Content.Server.Administration.Commands
return; return;
} }
if (!int.TryParse(args[0], out var entInt)) if (!int.TryParse(args[0], out var entityUid))
{ {
shell.WriteLine(Loc.GetString("shell-entity-uid-must-be-number")); shell.WriteLine(Loc.GetString("shell-entity-uid-must-be-number"));
return; return;
@@ -39,15 +38,17 @@ namespace Content.Server.Administration.Commands
ghostOverride = bool.Parse(args[2]); ghostOverride = bool.Parse(args[2]);
} }
var nent = new NetEntity(entInt); var entityManager = IoCManager.Resolve<IEntityManager>();
if (!_entManager.TryGetEntity(nent, out var eUid)) var eUid = new EntityUid(entityUid);
if (!eUid.IsValid() || !entityManager.EntityExists(eUid))
{ {
shell.WriteLine(Loc.GetString("shell-invalid-entity-id")); shell.WriteLine(Loc.GetString("shell-invalid-entity-id"));
return; return;
} }
if (!_entManager.HasComponent<MindContainerComponent>(eUid)) if (!entityManager.HasComponent<MindContainerComponent>(eUid))
{ {
shell.WriteLine(Loc.GetString("set-mind-command-target-has-no-mind-message")); shell.WriteLine(Loc.GetString("set-mind-command-target-has-no-mind-message"));
return; return;
@@ -67,8 +68,8 @@ namespace Content.Server.Administration.Commands
return; return;
} }
var mindSystem = _entManager.System<SharedMindSystem>(); var mindSystem = entityManager.System<SharedMindSystem>();
var metadata = _entManager.GetComponent<MetaDataComponent>(eUid.Value); var metadata = entityManager.GetComponent<MetaDataComponent>(eUid);
var mind = playerCData.Mind ?? mindSystem.CreateMind(session.UserId, metadata.EntityName); var mind = playerCData.Mind ?? mindSystem.CreateMind(session.UserId, metadata.EntityName);

View File

@@ -34,21 +34,21 @@ namespace Content.Server.Administration.Commands
return; return;
} }
if (!int.TryParse(args[0], out var entInt)) if (!int.TryParse(args[0], out var entityUid))
{ {
shell.WriteLine(Loc.GetString("shell-entity-uid-must-be-number")); shell.WriteLine(Loc.GetString("shell-entity-uid-must-be-number"));
return; return;
} }
var targetNet = new NetEntity(entInt); var target = new EntityUid(entityUid);
if (!_entities.TryGetEntity(targetNet, out var target)) if (!target.IsValid() || !_entities.EntityExists(target))
{ {
shell.WriteLine(Loc.GetString("shell-invalid-entity-id")); shell.WriteLine(Loc.GetString("shell-invalid-entity-id"));
return; return;
} }
if (!_entities.HasComponent<InventoryComponent>(target)) if (!_entities.HasComponent<InventoryComponent?>(target))
{ {
shell.WriteLine(Loc.GetString("shell-target-entity-does-not-have-message", ("missing", "inventory"))); shell.WriteLine(Loc.GetString("shell-target-entity-does-not-have-message", ("missing", "inventory")));
return; return;
@@ -63,12 +63,12 @@ namespace Content.Server.Administration.Commands
} }
var eui = IoCManager.Resolve<EuiManager>(); var eui = IoCManager.Resolve<EuiManager>();
var ui = new SetOutfitEui(targetNet); var ui = new SetOutfitEui(target);
eui.OpenEui(ui, player); eui.OpenEui(ui, player);
return; return;
} }
if (!SetOutfit(target.Value, args[1], _entities)) if (!SetOutfit(target, args[1], _entities))
shell.WriteLine(Loc.GetString("set-outfit-command-invalid-outfit-id-error")); shell.WriteLine(Loc.GetString("set-outfit-command-invalid-outfit-id-error"));
} }

View File

@@ -332,7 +332,7 @@ namespace Content.Server.Administration.Systems
Text = Loc.GetString("set-outfit-verb-get-data-text"), Text = Loc.GetString("set-outfit-verb-get-data-text"),
Category = VerbCategory.Debug, Category = VerbCategory.Debug,
Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/outfit.svg.192dpi.png")), Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/outfit.svg.192dpi.png")),
Act = () => _euiManager.OpenEui(new SetOutfitEui(GetNetEntity(args.Target)), player), Act = () => _euiManager.OpenEui(new SetOutfitEui(args.Target), player),
Impact = LogImpact.Medium Impact = LogImpact.Medium
}; };
args.Verbs.Add(verb); args.Verbs.Add(verb);

View File

@@ -10,9 +10,10 @@ namespace Content.Server.Administration.UI
public sealed class SetOutfitEui : BaseEui public sealed class SetOutfitEui : BaseEui
{ {
[Dependency] private readonly IAdminManager _adminManager = default!; [Dependency] private readonly IAdminManager _adminManager = default!;
private readonly NetEntity _target; [Dependency] private readonly IEntityManager _entManager = default!;
private readonly EntityUid _target;
public SetOutfitEui(NetEntity entity) public SetOutfitEui(EntityUid entity)
{ {
_target = entity; _target = entity;
IoCManager.InjectDependencies(this); IoCManager.InjectDependencies(this);
@@ -30,7 +31,7 @@ namespace Content.Server.Administration.UI
{ {
return new SetOutfitEuiState return new SetOutfitEuiState
{ {
TargetNetEntity = _target, TargetNetEntity = _entManager.GetNetEntity(_target)
}; };
} }

View File

@@ -52,7 +52,7 @@ public sealed class RandomHumanoidSystem : EntitySystem
{ {
var comp = (Component) _serialization.CreateCopy(entry.Component, notNullableOverride: true); var comp = (Component) _serialization.CreateCopy(entry.Component, notNullableOverride: true);
comp.Owner = humanoid; // This .owner must survive for now. comp.Owner = humanoid; // This .owner must survive for now.
EntityManager.AddComponent(humanoid, comp); EntityManager.AddComponent(humanoid, comp, true);
} }
} }

View File

@@ -27,7 +27,7 @@ namespace Content.Server.Jobs
var temp = (object) component; var temp = (object) component;
serializationManager.CopyTo(data.Component, ref temp); serializationManager.CopyTo(data.Component, ref temp);
entityManager.AddComponent(mob, (Component) temp!); entityManager.AddComponent(mob, (Component) temp!, true);
} }
} }
} }

View File

@@ -24,11 +24,11 @@ namespace Content.Server.NPC.Commands
return; return;
} }
var nent = new NetEntity(int.Parse(args[0])); var entId = new EntityUid(int.Parse(args[0]));
if (!_entities.TryGetEntity(nent, out var entId)) if (!_entities.EntityExists(entId))
{ {
shell.WriteError($"Unable to find entity {nent}"); shell.WriteError($"Unable to find entity with uid {entId}");
return; return;
} }
@@ -38,7 +38,7 @@ namespace Content.Server.NPC.Commands
return; return;
} }
var comp = _entities.AddComponent<HTNComponent>(entId.Value); var comp = _entities.AddComponent<HTNComponent>(entId);
comp.RootTask = new HTNCompoundTask() comp.RootTask = new HTNCompoundTask()
{ {
Task = args[1] Task = args[1]

View File

@@ -11,9 +11,6 @@ namespace Content.Server.Sandbox.Commands
[AnyCommand] [AnyCommand]
public sealed class ColorNetworkCommand : IConsoleCommand public sealed class ColorNetworkCommand : IConsoleCommand
{ {
[Dependency] private readonly IAdminManager _adminManager = default!;
[Dependency] private readonly IEntityManager _entManager = default!;
public string Command => "colornetwork"; public string Command => "colornetwork";
public string Description => Loc.GetString("color-network-command-description"); public string Description => Loc.GetString("color-network-command-description");
public string Help => Loc.GetString("color-network-command-help-text", ("command",Command)); public string Help => Loc.GetString("color-network-command-help-text", ("command",Command));
@@ -33,21 +30,25 @@ namespace Content.Server.Sandbox.Commands
return; return;
} }
var entityManager = IoCManager.Resolve<IEntityManager>();
if (!int.TryParse(args[0], out var targetId)) if (!int.TryParse(args[0], out var targetId))
{ {
shell.WriteLine(Loc.GetString("shell-argument-must-be-number")); shell.WriteLine(Loc.GetString("shell-argument-must-be-number"));
return; return;
} }
var nent = new NetEntity(targetId); var eUid = new EntityUid(targetId);
if (!_entManager.TryGetEntity(nent, out var eUid)) if (!eUid.IsValid() || !entityManager.EntityExists(eUid))
{ {
shell.WriteLine(Loc.GetString("shell-invalid-entity-id")); shell.WriteLine(Loc.GetString("shell-invalid-entity-id"));
return; return;
} }
if (!_entManager.TryGetComponent(eUid, out NodeContainerComponent? nodeContainerComponent)) if (!entityManager.TryGetComponent(eUid, out NodeContainerComponent? nodeContainerComponent))
{ {
shell.WriteLine(Loc.GetString("shell-entity-is-not-node-container")); shell.WriteLine(Loc.GetString("shell-entity-is-not-node-container"));
return; return;
@@ -73,15 +74,13 @@ namespace Content.Server.Sandbox.Commands
{ {
var group = nodeContainerComponent.Nodes[nodeGroupId.ToString().ToLower()].NodeGroup; var group = nodeContainerComponent.Nodes[nodeGroupId.ToString().ToLower()].NodeGroup;
if (group == null) if (group == null) return;
return;
foreach (var x in group.Nodes) foreach (var x in group.Nodes)
{ {
if (!_entManager.TryGetComponent(x.Owner, out AtmosPipeColorComponent? atmosPipeColorComponent)) if (!IoCManager.Resolve<IEntityManager>().TryGetComponent(x.Owner, out AtmosPipeColorComponent? atmosPipeColorComponent)) continue;
continue;
_entManager.System<AtmosPipeColorSystem>().SetColor(x.Owner, atmosPipeColorComponent, color); EntitySystem.Get<AtmosPipeColorSystem>().SetColor(x.Owner, atmosPipeColorComponent, color);
} }
} }
} }

View File

@@ -12,10 +12,6 @@ namespace Content.Server.Traitor.Uplink.Commands
[AdminCommand(AdminFlags.Admin)] [AdminCommand(AdminFlags.Admin)]
public sealed class AddUplinkCommand : IConsoleCommand public sealed class AddUplinkCommand : IConsoleCommand
{ {
[Dependency] private readonly IConfigurationManager _cfgManager = default!;
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!;
public string Command => "adduplink"; public string Command => "adduplink";
public string Description => Loc.GetString("add-uplink-command-description"); public string Description => Loc.GetString("add-uplink-command-description");
@@ -45,7 +41,7 @@ namespace Content.Server.Traitor.Uplink.Commands
if (args.Length > 0) if (args.Length > 0)
{ {
// Get player entity // Get player entity
if (!_playerManager.TryGetSessionByUsername(args[0], out session)) if (!IoCManager.Resolve<IPlayerManager>().TryGetSessionByUsername(args[0], out session))
{ {
shell.WriteLine(Loc.GetString("shell-target-player-does-not-exist")); shell.WriteLine(Loc.GetString("shell-target-player-does-not-exist"));
return; return;
@@ -64,6 +60,7 @@ namespace Content.Server.Traitor.Uplink.Commands
// Get target item // Get target item
EntityUid? uplinkEntity = null; EntityUid? uplinkEntity = null;
var entityManager = IoCManager.Resolve<IEntityManager>();
if (args.Length >= 2) if (args.Length >= 2)
{ {
if (!int.TryParse(args[1], out var itemID)) if (!int.TryParse(args[1], out var itemID))
@@ -72,9 +69,8 @@ namespace Content.Server.Traitor.Uplink.Commands
return; return;
} }
var eNet = new NetEntity(itemID); var eUid = new EntityUid(itemID);
if (!eUid.IsValid() || !entityManager.EntityExists(eUid))
if (!_entManager.TryGetEntity(eNet, out var eUid))
{ {
shell.WriteLine(Loc.GetString("shell-invalid-entity-id")); shell.WriteLine(Loc.GetString("shell-invalid-entity-id"));
return; return;
@@ -84,10 +80,11 @@ namespace Content.Server.Traitor.Uplink.Commands
} }
// Get TC count // Get TC count
var tcCount = _cfgManager.GetCVar(CCVars.TraitorStartingBalance); var configManager = IoCManager.Resolve<IConfigurationManager>();
Logger.Debug(_entManager.ToPrettyString(user)); var tcCount = configManager.GetCVar(CCVars.TraitorStartingBalance);
Logger.Debug(entityManager.ToPrettyString(user));
// Finally add uplink // Finally add uplink
var uplinkSys = _entManager.System<UplinkSystem>(); var uplinkSys = entityManager.EntitySysManager.GetEntitySystem<UplinkSystem>();
if (!uplinkSys.AddUplink(user, FixedPoint2.New(tcCount), uplinkEntity: uplinkEntity)) if (!uplinkSys.AddUplink(user, FixedPoint2.New(tcCount), uplinkEntity: uplinkEntity))
{ {
shell.WriteLine(Loc.GetString("add-uplink-command-error-2")); shell.WriteLine(Loc.GetString("add-uplink-command-error-2"));

View File

@@ -9,8 +9,6 @@ namespace Content.Server.Verbs.Commands
[AdminCommand(AdminFlags.Admin)] [AdminCommand(AdminFlags.Admin)]
public sealed class InvokeVerbCommand : IConsoleCommand public sealed class InvokeVerbCommand : IConsoleCommand
{ {
[Dependency] private readonly IEntityManager _entManager = default!;
public string Command => "invokeverb"; public string Command => "invokeverb";
public string Description => Loc.GetString("invoke-verb-command-description"); public string Description => Loc.GetString("invoke-verb-command-description");
public string Help => Loc.GetString("invoke-verb-command-help"); public string Help => Loc.GetString("invoke-verb-command-help");
@@ -23,7 +21,8 @@ namespace Content.Server.Verbs.Commands
return; return;
} }
var verbSystem = _entManager.System<SharedVerbSystem>(); var entityManager = IoCManager.Resolve<IEntityManager>();
var verbSystem = entityManager.System<SharedVerbSystem>();
// get the 'player' entity (defaulting to command user, otherwise uses a uid) // get the 'player' entity (defaulting to command user, otherwise uses a uid)
EntityUid? playerEntity = null; EntityUid? playerEntity = null;
@@ -39,6 +38,10 @@ namespace Content.Server.Verbs.Commands
return; return;
} }
} }
else
{
entityManager.EntityExists(new EntityUid(intPlayerUid));
}
// gets the target entity // gets the target entity
if (!int.TryParse(args[1], out var intUid)) if (!int.TryParse(args[1], out var intUid))
@@ -53,16 +56,16 @@ namespace Content.Server.Verbs.Commands
return; return;
} }
var targetNet = new NetEntity(intUid); var target = new EntityUid(intUid);
if (!entityManager.EntityExists(target))
if (!_entManager.TryGetEntity(targetNet, out var target))
{ {
shell.WriteError(Loc.GetString("invoke-verb-command-invalid-target-entity")); shell.WriteError(Loc.GetString("invoke-verb-command-invalid-target-entity"));
return; return;
} }
var verbName = args[2].ToLowerInvariant(); var verbName = args[2].ToLowerInvariant();
var verbs = verbSystem.GetLocalVerbs(target.Value, playerEntity.Value, Verb.VerbTypes, true); var verbs = verbSystem.GetLocalVerbs(target, playerEntity.Value, Verb.VerbTypes, true);
// if the "verb name" is actually a verb-type, try run any verb of that type. // if the "verb name" is actually a verb-type, try run any verb of that type.
var verbType = Verb.VerbTypes.FirstOrDefault(x => x.Name == verbName); var verbType = Verb.VerbTypes.FirstOrDefault(x => x.Name == verbName);
@@ -71,7 +74,7 @@ namespace Content.Server.Verbs.Commands
var verb = verbs.FirstOrDefault(v => v.GetType() == verbType); var verb = verbs.FirstOrDefault(v => v.GetType() == verbType);
if (verb != null) if (verb != null)
{ {
verbSystem.ExecuteVerb(verb, playerEntity.Value, target.Value, forced: true); verbSystem.ExecuteVerb(verb, playerEntity.Value, target, forced: true);
shell.WriteLine(Loc.GetString("invoke-verb-command-success", ("verb", verbName), ("target", target), ("player", playerEntity))); shell.WriteLine(Loc.GetString("invoke-verb-command-success", ("verb", verbName), ("target", target), ("player", playerEntity)));
return; return;
} }
@@ -81,7 +84,7 @@ namespace Content.Server.Verbs.Commands
{ {
if (verb.Text.ToLowerInvariant() == verbName) if (verb.Text.ToLowerInvariant() == verbName)
{ {
verbSystem.ExecuteVerb(verb, playerEntity.Value, target.Value, forced: true); verbSystem.ExecuteVerb(verb, playerEntity.Value, target, forced: true);
shell.WriteLine(Loc.GetString("invoke-verb-command-success", ("verb", verb.Text), ("target", target), ("player", playerEntity))); shell.WriteLine(Loc.GetString("invoke-verb-command-success", ("verb", verb.Text), ("target", target), ("player", playerEntity)));
return; return;
} }

View File

@@ -8,8 +8,6 @@ namespace Content.Server.Verbs.Commands
[AdminCommand(AdminFlags.Admin)] [AdminCommand(AdminFlags.Admin)]
public sealed class ListVerbsCommand : IConsoleCommand public sealed class ListVerbsCommand : IConsoleCommand
{ {
[Dependency] private readonly IEntityManager _entManager = default!;
public string Command => "listverbs"; public string Command => "listverbs";
public string Description => Loc.GetString("list-verbs-command-description"); public string Description => Loc.GetString("list-verbs-command-description");
public string Help => Loc.GetString("list-verbs-command-help"); public string Help => Loc.GetString("list-verbs-command-help");
@@ -22,11 +20,11 @@ namespace Content.Server.Verbs.Commands
return; return;
} }
var verbSystem = _entManager.System<SharedVerbSystem>(); var entityManager = IoCManager.Resolve<IEntityManager>();
var verbSystem = EntitySystem.Get<SharedVerbSystem>();
// get the 'player' entity (defaulting to command user, otherwise uses a uid) // get the 'player' entity (defaulting to command user, otherwise uses a uid)
EntityUid? playerEntity = null; EntityUid? playerEntity = null;
if (!int.TryParse(args[0], out var intPlayerUid)) if (!int.TryParse(args[0], out var intPlayerUid))
{ {
if (args[0] == "self" && shell.Player?.AttachedEntity != null) if (args[0] == "self" && shell.Player?.AttachedEntity != null)
@@ -39,6 +37,10 @@ namespace Content.Server.Verbs.Commands
return; return;
} }
} }
else
{
entityManager.EntityExists(new EntityUid(intPlayerUid));
}
// gets the target entity // gets the target entity
if (!int.TryParse(args[1], out var intUid)) if (!int.TryParse(args[1], out var intUid))
@@ -53,15 +55,14 @@ namespace Content.Server.Verbs.Commands
return; return;
} }
var targetNet = new NetEntity(intUid); var target = new EntityUid(intUid);
if (!entityManager.EntityExists(target))
if (!_entManager.TryGetEntity(targetNet, out var target))
{ {
shell.WriteError(Loc.GetString("list-verbs-command-invalid-target-entity")); shell.WriteError(Loc.GetString("list-verbs-command-invalid-target-entity"));
return; return;
} }
var verbs = verbSystem.GetLocalVerbs(target.Value, playerEntity.Value, Verb.VerbTypes); var verbs = verbSystem.GetLocalVerbs(target, playerEntity.Value, Verb.VerbTypes);
foreach (var verb in verbs) foreach (var verb in verbs)
{ {

View File

@@ -180,9 +180,7 @@ public sealed class ArtifactAnalyzerSystem : EntitySystem
component.AnalyzerEntity = null; component.AnalyzerEntity = null;
} }
// TODO: Yeah this comp relies upon event ordering so we get this for now. UpdateUserInterface(uid, component);
if (!TerminatingOrDeleted(uid))
UpdateUserInterface(uid, component);
} }
private void UpdateUserInterface(EntityUid uid, AnalysisConsoleComponent? component = null) private void UpdateUserInterface(EntityUid uid, AnalysisConsoleComponent? component = null)

View File

@@ -204,7 +204,7 @@ public sealed partial class ArtifactSystem
var temp = (object) comp; var temp = (object) comp;
_serialization.CopyTo(entry.Component, ref temp); _serialization.CopyTo(entry.Component, ref temp);
EntityManager.AddComponent(uid, (Component) temp!); EntityManager.AddComponent(uid, (Component) temp!, true);
} }
node.Discovered = true; node.Discovered = true;
@@ -238,7 +238,7 @@ public sealed partial class ArtifactSystem
comp.Owner = uid; comp.Owner = uid;
var temp = (object) comp; var temp = (object) comp;
_serialization.CopyTo(entry, ref temp); _serialization.CopyTo(entry, ref temp);
EntityManager.AddComponent(uid, (Component) temp!); EntityManager.AddComponent(uid, (Component) temp!, true);
continue; continue;
} }

View File

@@ -109,7 +109,7 @@ public abstract class SharedAnomalySystem : EntitySystem
var pulse = EnsureComp<AnomalyPulsingComponent>(uid); var pulse = EnsureComp<AnomalyPulsingComponent>(uid);
pulse.EndTime = Timing.CurTime + pulse.PulseDuration; pulse.EndTime = Timing.CurTime + pulse.PulseDuration;
Appearance.SetData(uid, AnomalyVisuals.IsPulsing, true); Appearance.SetData(uid, AnomalyVisuals.IsPulsing, true);
var ev = new AnomalyPulseEvent(uid, component.Stability, component.Severity); var ev = new AnomalyPulseEvent(uid, component.Stability, component.Severity);
RaiseLocalEvent(uid, ref ev, true); RaiseLocalEvent(uid, ref ev, true);
} }

View File

@@ -1,4 +1,5 @@
using Content.Shared.Damage; using Content.Shared.Damage;
using Content.Shared.Damage.Prototypes;
using Robust.Shared.Audio; using Robust.Shared.Audio;
using Robust.Shared.Containers; using Robust.Shared.Containers;

View File

@@ -1,7 +1,9 @@
using Content.Shared.ActionBlocker; using Content.Shared.ActionBlocker;
using Content.Shared.Buckle.Components;
using Content.Shared.Movement.Events; using Content.Shared.Movement.Events;
using Content.Shared.StepTrigger.Systems; using Content.Shared.StepTrigger.Systems;
using Robust.Shared.Network; using Robust.Shared.Network;
using Robust.Shared.Physics.Components;
using Robust.Shared.Timing; using Robust.Shared.Timing;
namespace Content.Shared.Chasm; namespace Content.Shared.Chasm;

View File

@@ -1,3 +1,4 @@
using System.Numerics;
using Content.Shared.ActionBlocker; using Content.Shared.ActionBlocker;
using Content.Shared.Body.Components; using Content.Shared.Body.Components;
using Content.Shared.Body.Part; using Content.Shared.Body.Part;
@@ -12,6 +13,7 @@ using Content.Shared.Hands.Components;
using Content.Shared.IdentityManagement; using Content.Shared.IdentityManagement;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Movement.Events; using Content.Shared.Movement.Events;
using Content.Shared.Movement.Systems;
using Content.Shared.Physics; using Content.Shared.Physics;
using Content.Shared.Popups; using Content.Shared.Popups;
using Content.Shared.Stunnable; using Content.Shared.Stunnable;

View File

@@ -110,7 +110,7 @@ namespace Content.Shared.Containers.ItemSlots
/// </summary> /// </summary>
public void RemoveItemSlot(EntityUid uid, ItemSlot slot, ItemSlotsComponent? itemSlots = null) public void RemoveItemSlot(EntityUid uid, ItemSlot slot, ItemSlotsComponent? itemSlots = null)
{ {
if (TerminatingOrDeleted(uid) || slot.ContainerSlot == null) if (Terminating(uid) || slot.ContainerSlot == null)
return; return;
slot.ContainerSlot.Shutdown(); slot.ContainerSlot.Shutdown();

View File

@@ -3,6 +3,7 @@ using Content.Shared.ActionBlocker;
using Content.Shared.Administration.Components; using Content.Shared.Administration.Components;
using Content.Shared.Administration.Logs; using Content.Shared.Administration.Logs;
using Content.Shared.Alert; using Content.Shared.Alert;
using Content.Shared.Atmos.Piping.Unary.Components;
using Content.Shared.Buckle.Components; using Content.Shared.Buckle.Components;
using Content.Shared.Cuffs.Components; using Content.Shared.Cuffs.Components;
using Content.Shared.Damage; using Content.Shared.Damage;

View File

@@ -14,6 +14,7 @@ using Robust.Shared.Audio;
using Robust.Shared.Containers; using Robust.Shared.Containers;
using Robust.Shared.Network; using Robust.Shared.Network;
using Robust.Shared.Player; using Robust.Shared.Player;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing; using Robust.Shared.Timing;
namespace Content.Shared.Inventory; namespace Content.Shared.Inventory;
@@ -23,9 +24,9 @@ public abstract partial class InventorySystem
[Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly MovementSpeedModifierSystem _movementSpeed = default!; [Dependency] private readonly MovementSpeedModifierSystem _movementSpeed = default!;
[Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!;
[Dependency] private readonly SharedItemSystem _item = default!;
[Dependency] private readonly SharedContainerSystem _containerSystem = default!; [Dependency] private readonly SharedContainerSystem _containerSystem = default!;
[Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly SharedHandsSystem _handsSystem = default!;
[Dependency] private readonly SharedItemSystem _item = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly INetManager _netMan = default!; [Dependency] private readonly INetManager _netMan = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedTransformSystem _transform = default!;

View File

@@ -106,7 +106,7 @@ public sealed class LockSystem : EntitySystem
lockComp.Locked = true; lockComp.Locked = true;
_appearanceSystem.SetData(uid, StorageVisuals.Locked, true); _appearanceSystem.SetData(uid, StorageVisuals.Locked, true);
Dirty(uid, lockComp); Dirty(lockComp);
var ev = new LockToggledEvent(true); var ev = new LockToggledEvent(true);
RaiseLocalEvent(uid, ref ev, true); RaiseLocalEvent(uid, ref ev, true);
@@ -134,7 +134,7 @@ public sealed class LockSystem : EntitySystem
lockComp.Locked = false; lockComp.Locked = false;
_appearanceSystem.SetData(uid, StorageVisuals.Locked, false); _appearanceSystem.SetData(uid, StorageVisuals.Locked, false);
Dirty(uid, lockComp); Dirty(lockComp);
var ev = new LockToggledEvent(false); var ev = new LockToggledEvent(false);
RaiseLocalEvent(uid, ref ev, true); RaiseLocalEvent(uid, ref ev, true);

View File

@@ -1,5 +1,8 @@
using Content.Shared.Mech;
using Content.Shared.Mech.Equipment.Components; using Content.Shared.Mech.Equipment.Components;
using Content.Shared.Mech.Equipment.Systems;
using Content.Shared.Timing; using Content.Shared.Timing;
using Robust.Shared.Audio;
using System.Linq; using System.Linq;
namespace Content.Shared.Mech.Equipment.Systems; namespace Content.Shared.Mech.Equipment.Systems;

View File

@@ -12,6 +12,7 @@ using Content.Shared.Popups;
using Content.Shared.RCD.Components; using Content.Shared.RCD.Components;
using Content.Shared.Tag; using Content.Shared.Tag;
using Content.Shared.Tiles; using Content.Shared.Tiles;
using Robust.Shared.Audio;
using Robust.Shared.Map; using Robust.Shared.Map;
using Robust.Shared.Map.Components; using Robust.Shared.Map.Components;
using Robust.Shared.Network; using Robust.Shared.Network;

View File

@@ -6,6 +6,7 @@ using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Popups; using Content.Shared.Popups;
using Content.Shared.Radio.Components; using Content.Shared.Radio.Components;
using Content.Shared.Tools;
using Content.Shared.Tools.Components; using Content.Shared.Tools.Components;
using Content.Shared.Wires; using Content.Shared.Wires;
using Robust.Shared.Containers; using Robust.Shared.Containers;

View File

@@ -20,7 +20,9 @@ using Robust.Shared.GameStates;
using Robust.Shared.Map; using Robust.Shared.Map;
using Robust.Shared.Network; using Robust.Shared.Network;
using Robust.Shared.Physics; using Robust.Shared.Physics;
using Robust.Shared.Physics.Components;
using Robust.Shared.Physics.Systems; using Robust.Shared.Physics.Systems;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing; using Robust.Shared.Timing;
using Robust.Shared.Utility; using Robust.Shared.Utility;

View File

@@ -1,5 +1,7 @@
using Content.Shared.ActionBlocker; using Content.Shared.ActionBlocker;
using Content.Shared.Administration.Logs; using Content.Shared.Administration.Logs;
using Content.Shared.Audio;
using Content.Shared.DragDrop;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Interaction.Events; using Content.Shared.Interaction.Events;
using Content.Shared.Inventory.Events; using Content.Shared.Inventory.Events;
@@ -9,11 +11,15 @@ using Content.Shared.Database;
using Content.Shared.Hands; using Content.Shared.Hands;
using Content.Shared.Mobs; using Content.Shared.Mobs;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems;
using Content.Shared.Movement.Events; using Content.Shared.Movement.Events;
using Content.Shared.Movement.Systems; using Content.Shared.Movement.Systems;
using Content.Shared.Standing; using Content.Shared.Standing;
using Content.Shared.StatusEffect; using Content.Shared.StatusEffect;
using Content.Shared.Throwing; using Content.Shared.Throwing;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
using Robust.Shared.Player;
namespace Content.Shared.Stunnable; namespace Content.Shared.Stunnable;

View File

@@ -1,7 +1,9 @@
using Content.Shared.Examine; using Content.Shared.Examine;
using Content.Shared.Weapons.Ranged.Components; using Content.Shared.Weapons.Ranged.Components;
using Robust.Shared.Network; using Robust.Shared.Network;
using Robust.Shared.Player;
using Robust.Shared.Timing; using Robust.Shared.Timing;
using Robust.Shared.Utility;
namespace Content.Shared.Weapons.Ranged.Systems; namespace Content.Shared.Weapons.Ranged.Systems;