Traversal Distorter [New Xenoarch Machine] (#12643)
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using Content.Server.Cargo.Systems;
|
||||
using Content.Server.Power.EntitySystems;
|
||||
using Content.Server.Xenoarchaeology.Equipment.Components;
|
||||
using Content.Server.Xenoarchaeology.XenoArtifacts.Events;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Shared.Random;
|
||||
@@ -160,17 +162,50 @@ public sealed partial class ArtifactSystem : EntitySystem
|
||||
component.CurrentNode.Triggered = true;
|
||||
if (component.CurrentNode.Edges.Any())
|
||||
{
|
||||
var undiscoveredNodes = component.CurrentNode.Edges.Where(x => !x.Discovered).ToList();
|
||||
|
||||
var newNode = _random.Pick(component.CurrentNode.Edges);
|
||||
if (undiscoveredNodes.Any() && _random.Prob(0.75f))
|
||||
{
|
||||
newNode = _random.Pick(undiscoveredNodes);
|
||||
}
|
||||
var newNode = GetNewNode(component);
|
||||
if (newNode == null)
|
||||
return;
|
||||
EnterNode(uid, ref newNode, component);
|
||||
}
|
||||
}
|
||||
|
||||
private ArtifactNode? GetNewNode(ArtifactComponent component)
|
||||
{
|
||||
if (component.CurrentNode == null)
|
||||
return null;
|
||||
|
||||
var allNodes = component.CurrentNode.Edges;
|
||||
|
||||
if (TryComp<BiasedArtifactComponent>(component.Owner, out var bias) &&
|
||||
TryComp<TraversalDistorterComponent>(bias.Provider, out var trav) &&
|
||||
_random.Prob(trav.BiasChance) &&
|
||||
this.IsPowered(bias.Provider, EntityManager))
|
||||
{
|
||||
switch (trav.BiasDirection)
|
||||
{
|
||||
case BiasDirection.In:
|
||||
var foo = allNodes.Where(x => x.Depth < component.CurrentNode.Depth).ToList();
|
||||
if (foo.Any())
|
||||
allNodes = foo;
|
||||
break;
|
||||
case BiasDirection.Out:
|
||||
var bar = allNodes.Where(x => x.Depth > component.CurrentNode.Depth).ToList();
|
||||
if (bar.Any())
|
||||
allNodes = bar;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
var undiscoveredNodes = allNodes.Where(x => !x.Discovered).ToList();
|
||||
var newNode = _random.Pick(allNodes);
|
||||
if (undiscoveredNodes.Any() && _random.Prob(0.75f))
|
||||
{
|
||||
newNode = _random.Pick(undiscoveredNodes);
|
||||
}
|
||||
|
||||
return newNode;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Try and get a data object from a node
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user