/// <exception cref="ArgumentException">Throws if requested index doesn't exist on artifact. </exception>
public Entity<XenoArtifactNodeComponent> GetNode(Entity<XenoArtifactComponent> ent, int index)
{
- if (ent.Comp.NodeVertices[index] is { } netUid && GetEntity(netUid) is var uid)
- return (uid, XenoArtifactNode(uid));
+ if (ent.Comp.NodeVertices[index] is { } netUid && GetEntity(netUid) is var uid && _nodeQuery.TryComp(uid, out var comp))
+ return (uid, comp);
throw new ArgumentException($"index {index} does not correspond to an existing node in {ToPrettyString(ent)}");
}
if (index < 0 || index >= ent.Comp.NodeVertices.Length)
return false;
- if (ent.Comp.NodeVertices[index] is { } netUid && GetEntity(netUid) is var uid)
- node = (uid, XenoArtifactNode(uid));
+ if (ent.Comp.NodeVertices[index] is { } netUid && GetEntity(netUid) is var uid && _nodeQuery.TryComp(uid, out var comp))
+ node = (uid, comp);
return node != null;
}
{
foreach (var netNode in ent.Comp.NodeVertices)
{
- if (TryGetEntity(netNode, out var node))
- yield return (node.Value, XenoArtifactNode(node.Value));
+ if (TryGetEntity(netNode, out var node) && _nodeQuery.TryComp(node, out var comp))
+ yield return (node.Value, comp);
}
}
return false;
var uid = Spawn(entProtoId);
- node = (uid, XenoArtifactNode(uid));
+ var comp = EnsureComp<XenoArtifactNodeComponent>(uid);
+ node = (uid, comp);
return AddNode(ent, (node.Value, node.Value.Comp), dirty: dirty);
}
/// <returns>True if node adding was successful, false otherwise.</returns>
public bool AddNode(Entity<XenoArtifactComponent?> ent, Entity<XenoArtifactNodeComponent?> node, bool dirty = true)
{
- if (!Resolve(ent, ref ent.Comp))
+ if (!Resolve(ent, ref ent.Comp) || !Resolve(node, ref node.Comp, false))
return false;
- node.Comp ??= XenoArtifactNode(node);
- node.Comp.Attached = GetNetEntity(ent);
+ node.Comp.Attached = ent.Owner;
var nodeIdx = GetFreeNodeIndex((ent, ent.Comp));
_container.Insert(node.Owner, ent.Comp.NodeContainer);
/// <returns>True if node was removed successfully, false otherwise.</returns>
public bool RemoveNode(Entity<XenoArtifactComponent?> ent, Entity<XenoArtifactNodeComponent?> node, bool dirty = true)
{
- if (!Resolve(ent, ref ent.Comp))
+ if (!Resolve(ent, ref ent.Comp) || !Resolve(node, ref node.Comp, false))
return false;
- node.Comp ??= XenoArtifactNode(node);
-
if (!TryGetIndex(ent, node, out var idx))
return false; // node isn't attached to this entity.
SetNodeDurability((ent, ent), nodeComponent.MaxDurability);
}
- /// <summary> Gets node component by node entity uid. </summary>
- public XenoArtifactNodeComponent XenoArtifactNode(EntityUid uid)
- {
- return _nodeQuery.Get(uid);
- }
-
public void SetNodeUnlocked(Entity<XenoArtifactNodeComponent?> ent)
{
if (!Resolve(ent, ref ent.Comp))
return;
- if (ent.Comp.Attached is not { } netArtifact)
+ if (ent.Comp.Attached is not { } artifact)
return;
- var artifact = GetEntity(netArtifact);
if (!TryComp<XenoArtifactComponent>(artifact, out var artifactComponent))
return;
foreach (var netNode in segment)
{
var node = GetEntity(netNode);
- outSegment.Add((node, XenoArtifactNode(node)));
+ if (!_nodeQuery.TryComp(node, out var comp))
+ continue;
+
+ outSegment.Add((node, comp));
}
output.Add(outSegment);
return;
}
- var artifact = _xenoArtifactQuery.Get(GetEntity(nodeComponent.Attached.Value));
+ var artifact = _xenoArtifactQuery.Get(nodeComponent.Attached.Value);
var nonactiveNodes = GetActiveNodes(artifact);
var durabilityEffect = MathF.Pow((float)nodeComponent.Durability / nodeComponent.MaxDurability, 2);