Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ACZ fixes and RT v198.1.0 #1578

Merged
merged 3 commits into from
Dec 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 19 additions & 19 deletions OpenDreamClient/Rendering/ClientScreenOverlaySystem.cs
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
using OpenDreamShared.Rendering;

namespace OpenDreamClient.Rendering {
sealed class ClientScreenOverlaySystem : SharedScreenOverlaySystem {
public HashSet<EntityUid> ScreenObjects = new();
namespace OpenDreamClient.Rendering;

[Dependency] private IEntityManager _entityManager = default!;
internal sealed class ClientScreenOverlaySystem : SharedScreenOverlaySystem {
public HashSet<EntityUid> ScreenObjects = new();

public override void Initialize() {
SubscribeNetworkEvent<AddScreenObjectEvent>(OnAddScreenObject);
SubscribeNetworkEvent<RemoveScreenObjectEvent>(OnRemoveScreenObject);
}
[Dependency] private readonly IEntityManager _entityManager = default!;

public override void Shutdown() {
ScreenObjects.Clear();
}
public override void Initialize() {
SubscribeNetworkEvent<AddScreenObjectEvent>(OnAddScreenObject);
SubscribeNetworkEvent<RemoveScreenObjectEvent>(OnRemoveScreenObject);
}

public override void Shutdown() {
ScreenObjects.Clear();
}

private void OnAddScreenObject(AddScreenObjectEvent e) {
EntityUid ent = _entityManager.GetEntity(e.ScreenObject);
ScreenObjects.Add(ent);
}
private void OnAddScreenObject(AddScreenObjectEvent e) {
EntityUid ent = _entityManager.GetEntity(e.ScreenObject);
ScreenObjects.Add(ent);
}

private void OnRemoveScreenObject(RemoveScreenObjectEvent e) {
EntityUid ent = _entityManager.GetEntity(e.ScreenObject);
ScreenObjects.Remove(ent);
}
private void OnRemoveScreenObject(RemoveScreenObjectEvent e) {
EntityUid ent = _entityManager.GetEntity(e.ScreenObject);
ScreenObjects.Remove(ent);
}
}
17 changes: 12 additions & 5 deletions OpenDreamPackaging/DreamPackaging.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Robust.Packaging;
using Robust.Packaging.AssetProcessing;
using Robust.Packaging.AssetProcessing.Passes;

namespace OpenDreamPackaging;

Expand All @@ -19,13 +20,21 @@ public static async Task WriteResources(

var inputPass = graph.Input;

await RobustClientPackaging.WriteClientResources(
contentDir,
await RobustSharedPackaging.WriteContentAssemblies(
inputPass,
cancel);
contentDir,
"Content.Client",
new[] { "OpenDreamClient", "OpenDreamShared" },
cancel: cancel);

await RobustClientPackaging.WriteClientResources(contentDir, inputPass, cancel);

WriteRscResources(dreamRootDir, resources, inputPass);

inputPass.InjectFinished();
}

public static void WriteRscResources(string dreamRootDir, string[] resources, AssetPassPipe inputPass) {
for (var i = 0; i < resources.Length; i++) {
var resource = resources[i].Replace('\\', Path.DirectorySeparatorChar);
// The game client only knows a resource ID, so that's what we name the files.
Expand All @@ -35,7 +44,5 @@ await RobustClientPackaging.WriteClientResources(

inputPass.InjectFileFromDisk(path, diskPath);
}

inputPass.InjectFinished();
}
}
43 changes: 43 additions & 0 deletions OpenDreamRuntime/DreamAczProvider.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using OpenDreamPackaging;
using Robust.Packaging;
using Robust.Packaging.AssetProcessing;
using Robust.Server.ServerStatus;

namespace OpenDreamRuntime;

public sealed class DreamAczProvider : IMagicAczProvider, IFullHybridAczProvider {
private readonly IDependencyCollection _dependencies;
private readonly string _rootPath;
private readonly string[] _resources;

public DreamAczProvider(IDependencyCollection dependencies, string rootPath, string[] resources) {
_dependencies = dependencies;
_rootPath = rootPath;
_resources = resources;
}

public async Task Package(AssetPass pass, IPackageLogger logger, CancellationToken cancel) {
var contentDir = DefaultMagicAczProvider.FindContentRootPath(_dependencies);

await DreamPackaging.WriteResources(contentDir, _rootPath, _resources, pass, logger, cancel);
}

public Task Package(AssetPass hybridPackageInput, AssetPass output, IPackageLogger logger, CancellationToken cancel) {
var clientAssetGraph = new RobustClientAssetGraph();
var resourceInput = clientAssetGraph.Input;
output.AddDependency(clientAssetGraph.Output);
output.AddDependency(hybridPackageInput);

AssetGraph.CalculateGraph(
clientAssetGraph.AllPasses.Concat(new[] { hybridPackageInput, output }).ToArray(),
logger);

DreamPackaging.WriteRscResources(_rootPath, _resources, resourceInput);
resourceInput.InjectFinished();

return Task.CompletedTask;
}
}
26 changes: 0 additions & 26 deletions OpenDreamRuntime/DreamMagicAczProvider.cs

This file was deleted.

8 changes: 4 additions & 4 deletions OpenDreamRuntime/DreamManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public bool LoadJson(string? jsonPath) {
}

_compiledJson = json;
var rootPath = Path.GetDirectoryName(jsonPath)!;
var rootPath = Path.GetFullPath(Path.GetDirectoryName(jsonPath)!);
var resources = _compiledJson.Resources ?? Array.Empty<string>();
_dreamResourceManager.Initialize(rootPath, resources);
if(!string.IsNullOrEmpty(_compiledJson.Interface) && !_dreamResourceManager.DoesFileExist(_compiledJson.Interface))
Expand Down Expand Up @@ -146,9 +146,9 @@ public bool LoadJson(string? jsonPath) {

_dreamMapManager.LoadMaps(_compiledJson.Maps);

_statusHost.SetMagicAczProvider(new DreamMagicAczProvider(
_dependencyCollection, rootPath, resources
));
var aczProvider = new DreamAczProvider(_dependencyCollection, rootPath, resources);
_statusHost.SetMagicAczProvider(aczProvider);
_statusHost.SetFullHybridAczProvider(aczProvider);

return true;
}
Expand Down
4 changes: 0 additions & 4 deletions OpenDreamRuntime/EntryPoint.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,6 @@ public sealed class EntryPoint : GameServer {
private DreamCommandSystem? _commandSystem;

public override void Init() {
IoCManager.Resolve<IStatusHost>().SetMagicAczProvider(new DefaultMagicAczProvider(
new DefaultMagicAczInfo("Content.Client", new[] {"OpenDreamClient", "OpenDreamShared"}),
IoCManager.Resolve<IDependencyCollection>()));

IComponentFactory componentFactory = IoCManager.Resolve<IComponentFactory>();
componentFactory.DoAutoRegistrations();

Expand Down
41 changes: 13 additions & 28 deletions OpenDreamRuntime/Rendering/ServerScreenOverlaySystem.cs
Original file line number Diff line number Diff line change
@@ -1,39 +1,24 @@
using OpenDreamRuntime.Objects.Types;
using OpenDreamShared.Rendering;
using Robust.Server.GameStates;
using Robust.Shared.Player;

namespace OpenDreamRuntime.Rendering {
public sealed class ServerScreenOverlaySystem : SharedScreenOverlaySystem {
private readonly Dictionary<ICommonSession, HashSet<EntityUid>> _sessionToScreenObjects = new();
[Dependency] private readonly IEntityManager _entityManager = default!;
namespace OpenDreamRuntime.Rendering;

public override void Initialize() {
SubscribeLocalEvent<ExpandPvsEvent>(HandleExpandPvsEvent);
}
public sealed class ServerScreenOverlaySystem : SharedScreenOverlaySystem {
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly PvsOverrideSystem _pvsOverride = default!;

public void AddScreenObject(DreamConnection connection, DreamObjectMovable screenObject) {
if (!_sessionToScreenObjects.TryGetValue(connection.Session, out var objects)) {
objects = new HashSet<EntityUid>();
_sessionToScreenObjects.Add(connection.Session, objects);
}
public void AddScreenObject(DreamConnection connection, DreamObjectMovable screenObject) {
_pvsOverride.AddForceSend(screenObject.Entity, connection.Session);

objects.Add(screenObject.Entity);
NetEntity ent = _entityManager.GetNetEntity(screenObject.Entity);
RaiseNetworkEvent(new AddScreenObjectEvent(ent), connection.Session.ConnectedClient);
}
NetEntity ent = _entityManager.GetNetEntity(screenObject.Entity);
RaiseNetworkEvent(new AddScreenObjectEvent(ent), connection.Session.ConnectedClient);
}

public void RemoveScreenObject(DreamConnection connection, DreamObjectMovable screenObject) {
_sessionToScreenObjects[connection.Session].Remove(screenObject.Entity);
NetEntity ent = _entityManager.GetNetEntity(screenObject.Entity);
RaiseNetworkEvent(new RemoveScreenObjectEvent(ent), connection.Session.ConnectedClient);
}
public void RemoveScreenObject(DreamConnection connection, DreamObjectMovable screenObject) {
_pvsOverride.RemoveForceSend(screenObject.Entity, connection.Session);

private void HandleExpandPvsEvent(ref ExpandPvsEvent e) {
if (_sessionToScreenObjects.TryGetValue(e.Session, out var objects)) {
e.Entities ??= new(objects.Count);
e.Entities.AddRange(objects);
}
}
NetEntity ent = _entityManager.GetNetEntity(screenObject.Entity);
RaiseNetworkEvent(new RemoveScreenObjectEvent(ent), connection.Session.ConnectedClient);
}
}
2 changes: 1 addition & 1 deletion RobustToolbox
Submodule RobustToolbox updated 122 files
Loading