prototype composition (#9979) & updates submodule

* prototype composition

* a

* fixes build

* fixes test

* updates submodule

Co-authored-by: Paul Ritter <ritter.paul1@gmail.com>
This commit is contained in:
Paul Ritter
2022-08-01 14:39:37 +02:00
committed by GitHub
parent aae6da27f9
commit f77aff7b94
9 changed files with 33 additions and 37 deletions

View File

@@ -1,5 +1,6 @@
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array;
namespace Content.Server.Wires;
@@ -16,8 +17,8 @@ public sealed class WireLayoutPrototype : IPrototype, IInheritingPrototype
[IdDataFieldAttribute]
public string ID { get; } = default!;
[ParentDataField(typeof(AbstractPrototypeIdSerializer<WireLayoutPrototype>))]
public string? Parent { get; } = default!;
[ParentDataField(typeof(AbstractPrototypeIdArraySerializer<WireLayoutPrototype>))]
public string[]? Parents { get; private set; }
[AbstractDataField]
public bool Abstract { get; }

View File

@@ -1,4 +1,5 @@
using Robust.Shared.Audio;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
namespace Content.Server.Wires;
@@ -28,7 +29,7 @@ public sealed class WiresComponent : Component
/// The layout ID of this entity's wires.
/// </summary>
[ViewVariables]
[DataField("LayoutId", required: true)]
[DataField("LayoutId", customTypeSerializer: typeof(PrototypeIdSerializer<WireLayoutPrototype>), required: true)]
public string LayoutId { get; set; } = default!;
/// <summary>

View File

@@ -66,30 +66,17 @@ public sealed class WiresSystem : EntitySystem
WireLayout? layout = null;
List<Wire>? wireSet = null;
if (wires.LayoutId != null)
if (!wires.AlwaysRandomize)
{
if (!wires.AlwaysRandomize)
{
TryGetLayout(wires.LayoutId, out layout);
}
if (!_protoMan.TryIndex(wires.LayoutId, out WireLayoutPrototype? layoutPrototype))
return;
// does the prototype have a parent (and are the wires empty?) if so, we just create
// a new layout based on that
//
// TODO: Merge wire layouts...
if (!string.IsNullOrEmpty(layoutPrototype.Parent) && layoutPrototype.Wires == null)
{
var parent = layoutPrototype.Parent;
if (!_protoMan.TryIndex(parent, out WireLayoutPrototype? parentPrototype))
return;
layoutPrototype = parentPrototype;
}
TryGetLayout(wires.LayoutId, out layout);
}
// does the prototype have a parent (and are the wires empty?) if so, we just create
// a new layout based on that
//
// TODO: Merge wire layouts...
foreach (var layoutPrototype in _protoMan.EnumerateParents<WireLayoutPrototype>(wires.LayoutId))
{
if (layoutPrototype.Wires != null)
{
foreach (var wire in layoutPrototype.Wires)
@@ -98,6 +85,7 @@ public sealed class WiresSystem : EntitySystem
}
wireSet = CreateWireSet(uid, layout, layoutPrototype.Wires, layoutPrototype.DummyWires);
break;
}
}
@@ -108,7 +96,7 @@ public sealed class WiresSystem : EntitySystem
wires.WiresList.AddRange(wireSet);
Dictionary<object, int> types = new Dictionary<object, int>();
var types = new Dictionary<object, int>();
if (layout != null)
{