Xenoarch Tweaks (#12429)
* Xenoarch feedback print out reports, weight node traversal, dialog for destroy menu, slight effect tweaks * make the popup not bad * the popup, jimbo...
This commit is contained in:
@@ -31,6 +31,10 @@ public sealed class AnalysisConsoleBoundUserInterface : BoundUserInterface
|
|||||||
{
|
{
|
||||||
SendMessage(new AnalysisConsoleScanButtonPressedMessage());
|
SendMessage(new AnalysisConsoleScanButtonPressedMessage());
|
||||||
};
|
};
|
||||||
|
_consoleMenu.OnPrintButtonPressed += _ =>
|
||||||
|
{
|
||||||
|
SendMessage(new AnalysisConsolePrintButtonPressedMessage());
|
||||||
|
};
|
||||||
_consoleMenu.OnDestroyButtonPressed += _ =>
|
_consoleMenu.OnDestroyButtonPressed += _ =>
|
||||||
{
|
{
|
||||||
SendMessage(new AnalysisConsoleDestroyButtonPressedMessage());
|
SendMessage(new AnalysisConsoleDestroyButtonPressedMessage());
|
||||||
@@ -44,8 +48,7 @@ public sealed class AnalysisConsoleBoundUserInterface : BoundUserInterface
|
|||||||
switch (state)
|
switch (state)
|
||||||
{
|
{
|
||||||
case AnalysisConsoleScanUpdateState msg:
|
case AnalysisConsoleScanUpdateState msg:
|
||||||
_consoleMenu?.SetDestroyButtonDisabled(msg);
|
_consoleMenu?.SetButtonsDisabled(msg);
|
||||||
_consoleMenu?.SetScanButtonDisabled(msg);
|
|
||||||
_consoleMenu?.UpdateInformationDisplay(msg);
|
_consoleMenu?.UpdateInformationDisplay(msg);
|
||||||
_consoleMenu?.UpdateProgressBar(msg);
|
_consoleMenu?.UpdateProgressBar(msg);
|
||||||
break;
|
break;
|
||||||
@@ -58,6 +61,7 @@ public sealed class AnalysisConsoleBoundUserInterface : BoundUserInterface
|
|||||||
|
|
||||||
if (!disposing)
|
if (!disposing)
|
||||||
return;
|
return;
|
||||||
|
_consoleMenu?.AnalysisDestroyWindow?.Close();
|
||||||
_consoleMenu?.Dispose();
|
_consoleMenu?.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,11 @@
|
|||||||
Text="{Loc 'analysis-console-scan-button'}"
|
Text="{Loc 'analysis-console-scan-button'}"
|
||||||
ToolTip="{Loc 'analysis-console-scan-tooltip-info'}">
|
ToolTip="{Loc 'analysis-console-scan-tooltip-info'}">
|
||||||
</Button>
|
</Button>
|
||||||
|
<BoxContainer MinHeight="5"></BoxContainer>
|
||||||
|
<Button Name="PrintButton"
|
||||||
|
Text="{Loc 'analysis-console-print-button'}"
|
||||||
|
ToolTip="{Loc 'analysis-console-print-tooltip-info'}">
|
||||||
|
</Button>
|
||||||
<BoxContainer MinHeight="10"></BoxContainer>
|
<BoxContainer MinHeight="10"></BoxContainer>
|
||||||
<Button Name="DestroyButton"
|
<Button Name="DestroyButton"
|
||||||
Text="{Loc 'analysis-console-destroy-button'}"
|
Text="{Loc 'analysis-console-destroy-button'}"
|
||||||
|
|||||||
@@ -17,8 +17,11 @@ public sealed partial class AnalysisConsoleMenu : FancyWindow
|
|||||||
[Dependency] private readonly IEntityManager _ent = default!;
|
[Dependency] private readonly IEntityManager _ent = default!;
|
||||||
[Dependency] private readonly IPrototypeManager _proto = default!;
|
[Dependency] private readonly IPrototypeManager _proto = default!;
|
||||||
|
|
||||||
|
public AnalysisDestroyWindow? AnalysisDestroyWindow;
|
||||||
|
|
||||||
public event Action<BaseButton.ButtonEventArgs>? OnServerSelectionButtonPressed;
|
public event Action<BaseButton.ButtonEventArgs>? OnServerSelectionButtonPressed;
|
||||||
public event Action<BaseButton.ButtonEventArgs>? OnScanButtonPressed;
|
public event Action<BaseButton.ButtonEventArgs>? OnScanButtonPressed;
|
||||||
|
public event Action<BaseButton.ButtonEventArgs>? OnPrintButtonPressed;
|
||||||
public event Action<BaseButton.ButtonEventArgs>? OnDestroyButtonPressed;
|
public event Action<BaseButton.ButtonEventArgs>? OnDestroyButtonPressed;
|
||||||
|
|
||||||
public AnalysisConsoleMenu()
|
public AnalysisConsoleMenu()
|
||||||
@@ -28,18 +31,34 @@ public sealed partial class AnalysisConsoleMenu : FancyWindow
|
|||||||
|
|
||||||
ServerSelectionButton.OnPressed += a => OnServerSelectionButtonPressed?.Invoke(a);
|
ServerSelectionButton.OnPressed += a => OnServerSelectionButtonPressed?.Invoke(a);
|
||||||
ScanButton.OnPressed += a => OnScanButtonPressed?.Invoke(a);
|
ScanButton.OnPressed += a => OnScanButtonPressed?.Invoke(a);
|
||||||
DestroyButton.OnPressed += a => OnDestroyButtonPressed?.Invoke(a);
|
PrintButton.OnPressed += a => OnPrintButtonPressed?.Invoke(a);
|
||||||
|
DestroyButton.OnPressed += _ => OnDestroyButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetScanButtonDisabled(AnalysisConsoleScanUpdateState state)
|
private void OnDestroyButton()
|
||||||
{
|
{
|
||||||
var disabled = !state.CanScan;
|
// check if window is already open
|
||||||
|
if (AnalysisDestroyWindow is { IsOpen: true })
|
||||||
|
{
|
||||||
|
AnalysisDestroyWindow.MoveToFront();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ScanButton.Disabled = disabled;
|
// open a new one
|
||||||
|
AnalysisDestroyWindow = new ();
|
||||||
|
AnalysisDestroyWindow.OpenCentered();
|
||||||
|
|
||||||
|
AnalysisDestroyWindow.OnYesButton += a =>
|
||||||
|
{
|
||||||
|
OnDestroyButtonPressed?.Invoke(a);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetDestroyButtonDisabled(AnalysisConsoleScanUpdateState state)
|
public void SetButtonsDisabled(AnalysisConsoleScanUpdateState state)
|
||||||
{
|
{
|
||||||
|
ScanButton.Disabled = !state.CanScan;
|
||||||
|
PrintButton.Disabled = !state.CanPrint;
|
||||||
|
|
||||||
var disabled = !state.ServerConnected || !state.CanScan;
|
var disabled = !state.ServerConnected || !state.CanScan;
|
||||||
|
|
||||||
DestroyButton.Disabled = disabled;
|
DestroyButton.Disabled = disabled;
|
||||||
@@ -77,6 +96,7 @@ public sealed partial class AnalysisConsoleMenu : FancyWindow
|
|||||||
{
|
{
|
||||||
message.AddMarkup(Loc.GetString("analysis-console-info-scanner"));
|
message.AddMarkup(Loc.GetString("analysis-console-info-scanner"));
|
||||||
Information.SetMessage(message);
|
Information.SetMessage(message);
|
||||||
|
UpdateArtifactIcon(null); //set it to blank
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,5 +173,12 @@ public sealed partial class AnalysisConsoleMenu : FancyWindow
|
|||||||
("seconds", (int) state.TotalTime.TotalSeconds - (int) state.TimeRemaining.TotalSeconds));
|
("seconds", (int) state.TotalTime.TotalSeconds - (int) state.TimeRemaining.TotalSeconds));
|
||||||
ProgressBar.Value = (float) state.TimeRemaining.Divide(state.TotalTime);
|
ProgressBar.Value = (float) state.TimeRemaining.Divide(state.TotalTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void Close()
|
||||||
|
{
|
||||||
|
base.Close();
|
||||||
|
|
||||||
|
AnalysisDestroyWindow?.Close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
22
Content.Client/Xenoarchaeology/Ui/AnalysisDestroyWindow.xaml
Normal file
22
Content.Client/Xenoarchaeology/Ui/AnalysisDestroyWindow.xaml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<controls:FancyWindow
|
||||||
|
xmlns="https://spacestation14.io"
|
||||||
|
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
|
||||||
|
Title="{Loc 'analysis-destroy-window-title'}"
|
||||||
|
MinSize="256 100">
|
||||||
|
<BoxContainer
|
||||||
|
Margin="10 10"
|
||||||
|
HorizontalExpand="True"
|
||||||
|
Orientation="Vertical"
|
||||||
|
VerticalExpand="True">
|
||||||
|
<Label Text="{Loc 'analysis-destroy-window-text'}" />
|
||||||
|
<BoxContainer
|
||||||
|
Margin="10 10 10 10"
|
||||||
|
VerticalAlignment="Bottom"
|
||||||
|
Orientation="Horizontal"
|
||||||
|
HorizontalExpand="True">
|
||||||
|
<Button Name="YesButton" Text="{Loc 'analysis-destroy-window-yes'}" HorizontalExpand="True"></Button>
|
||||||
|
<BoxContainer SetSize="10 10"></BoxContainer>
|
||||||
|
<Button Name="NoButton" Text="{Loc 'analysis-destroy-window-no'}" HorizontalExpand="True"></Button>
|
||||||
|
</BoxContainer>
|
||||||
|
</BoxContainer>
|
||||||
|
</controls:FancyWindow>
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
using Content.Client.Stylesheets;
|
||||||
|
using Content.Client.UserInterface.Controls;
|
||||||
|
using Robust.Client.AutoGenerated;
|
||||||
|
using Robust.Client.UserInterface.Controls;
|
||||||
|
using Robust.Client.UserInterface.XAML;
|
||||||
|
|
||||||
|
namespace Content.Client.Xenoarchaeology.Ui;
|
||||||
|
|
||||||
|
[GenerateTypedNameReferences]
|
||||||
|
public sealed partial class AnalysisDestroyWindow : FancyWindow
|
||||||
|
{
|
||||||
|
public event Action<BaseButton.ButtonEventArgs>? OnYesButton;
|
||||||
|
|
||||||
|
public AnalysisDestroyWindow()
|
||||||
|
{
|
||||||
|
RobustXamlLoader.Load(this);
|
||||||
|
|
||||||
|
YesButton.AddStyleClass(StyleBase.ButtonCaution);
|
||||||
|
YesButton.OnPressed += a =>
|
||||||
|
{
|
||||||
|
OnYesButton?.Invoke(a);
|
||||||
|
Close();
|
||||||
|
};
|
||||||
|
NoButton.OnPressed += _ => Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
using Content.Shared.MachineLinking;
|
using Content.Shared.MachineLinking;
|
||||||
using Robust.Shared.Audio;
|
using Robust.Shared.Audio;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||||
|
using Robust.Shared.Utility;
|
||||||
|
|
||||||
namespace Content.Server.Xenoarchaeology.Equipment.Components;
|
namespace Content.Server.Xenoarchaeology.Equipment.Components;
|
||||||
|
|
||||||
@@ -28,4 +30,10 @@ public sealed class AnalysisConsoleComponent : Component
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("destroySound")]
|
[DataField("destroySound")]
|
||||||
public SoundSpecifier DestroySound = new SoundPathSpecifier("/Audio/Effects/radpulse11.ogg");
|
public SoundSpecifier DestroySound = new SoundPathSpecifier("/Audio/Effects/radpulse11.ogg");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The entity spawned by a report.
|
||||||
|
/// </summary>
|
||||||
|
[DataField("reportEntityId", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
|
||||||
|
public string ReportEntityId = "Paper";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,6 +51,9 @@ public sealed class ArtifactAnalyzerComponent : Component
|
|||||||
[ViewVariables]
|
[ViewVariables]
|
||||||
public HashSet<EntityUid> Contacts = new();
|
public HashSet<EntityUid> Contacts = new();
|
||||||
|
|
||||||
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
|
public bool ReadyToPrint = false;
|
||||||
|
|
||||||
[DataField("scanFinishedSound")]
|
[DataField("scanFinishedSound")]
|
||||||
public readonly SoundSpecifier ScanFinishedSound = new SoundPathSpecifier("/Audio/Machines/scan_finish.ogg");
|
public readonly SoundSpecifier ScanFinishedSound = new SoundPathSpecifier("/Audio/Machines/scan_finish.ogg");
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Content.Server.Construction;
|
using Content.Server.Construction;
|
||||||
using Content.Server.MachineLinking.Events;
|
using Content.Server.MachineLinking.Events;
|
||||||
|
using Content.Server.Paper;
|
||||||
using Content.Server.Power.Components;
|
using Content.Server.Power.Components;
|
||||||
using Content.Server.Research;
|
using Content.Server.Research;
|
||||||
using Content.Server.Research.Components;
|
using Content.Server.Research.Components;
|
||||||
@@ -35,6 +36,7 @@ public sealed class ArtifactAnalyzerSystem : EntitySystem
|
|||||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||||
[Dependency] private readonly UserInterfaceSystem _ui = default!;
|
[Dependency] private readonly UserInterfaceSystem _ui = default!;
|
||||||
[Dependency] private readonly ArtifactSystem _artifact = default!;
|
[Dependency] private readonly ArtifactSystem _artifact = default!;
|
||||||
|
[Dependency] private readonly PaperSystem _paper = default!;
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
@@ -56,6 +58,7 @@ public sealed class ArtifactAnalyzerSystem : EntitySystem
|
|||||||
|
|
||||||
SubscribeLocalEvent<AnalysisConsoleComponent, AnalysisConsoleServerSelectionMessage>(OnServerSelectionMessage);
|
SubscribeLocalEvent<AnalysisConsoleComponent, AnalysisConsoleServerSelectionMessage>(OnServerSelectionMessage);
|
||||||
SubscribeLocalEvent<AnalysisConsoleComponent, AnalysisConsoleScanButtonPressedMessage>(OnScanButton);
|
SubscribeLocalEvent<AnalysisConsoleComponent, AnalysisConsoleScanButtonPressedMessage>(OnScanButton);
|
||||||
|
SubscribeLocalEvent<AnalysisConsoleComponent, AnalysisConsolePrintButtonPressedMessage>(OnPrintButton);
|
||||||
SubscribeLocalEvent<AnalysisConsoleComponent, AnalysisConsoleDestroyButtonPressedMessage>(OnDestroyButton);
|
SubscribeLocalEvent<AnalysisConsoleComponent, AnalysisConsoleDestroyButtonPressedMessage>(OnDestroyButton);
|
||||||
|
|
||||||
SubscribeLocalEvent<AnalysisConsoleComponent, ResearchClientServerSelectedMessage>((e,c,_) => UpdateUserInterface(e,c),
|
SubscribeLocalEvent<AnalysisConsoleComponent, ResearchClientServerSelectedMessage>((e,c,_) => UpdateUserInterface(e,c),
|
||||||
@@ -93,6 +96,7 @@ public sealed class ArtifactAnalyzerSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
component.LastAnalyzedArtifact = null;
|
component.LastAnalyzedArtifact = null;
|
||||||
|
component.ReadyToPrint = false;
|
||||||
UpdateAnalyzerInformation(uid, component);
|
UpdateAnalyzerInformation(uid, component);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,6 +181,7 @@ public sealed class ArtifactAnalyzerSystem : EntitySystem
|
|||||||
float? completion = null;
|
float? completion = null;
|
||||||
var totalTime = TimeSpan.Zero;
|
var totalTime = TimeSpan.Zero;
|
||||||
var canScan = false;
|
var canScan = false;
|
||||||
|
var canPrint = false;
|
||||||
if (component.AnalyzerEntity != null && TryComp<ArtifactAnalyzerComponent>(component.AnalyzerEntity, out var analyzer))
|
if (component.AnalyzerEntity != null && TryComp<ArtifactAnalyzerComponent>(component.AnalyzerEntity, out var analyzer))
|
||||||
{
|
{
|
||||||
artifact = analyzer.LastAnalyzedArtifact;
|
artifact = analyzer.LastAnalyzedArtifact;
|
||||||
@@ -184,6 +189,7 @@ public sealed class ArtifactAnalyzerSystem : EntitySystem
|
|||||||
completion = analyzer.LastAnalyzedCompletion;
|
completion = analyzer.LastAnalyzedCompletion;
|
||||||
totalTime = analyzer.AnalysisDuration * analyzer.AnalysisDurationMulitplier;
|
totalTime = analyzer.AnalysisDuration * analyzer.AnalysisDurationMulitplier;
|
||||||
canScan = analyzer.Contacts.Any();
|
canScan = analyzer.Contacts.Any();
|
||||||
|
canPrint = analyzer.ReadyToPrint;
|
||||||
}
|
}
|
||||||
|
|
||||||
var analyzerConnected = component.AnalyzerEntity != null;
|
var analyzerConnected = component.AnalyzerEntity != null;
|
||||||
@@ -192,7 +198,7 @@ public sealed class ArtifactAnalyzerSystem : EntitySystem
|
|||||||
var scanning = TryComp<ActiveArtifactAnalyzerComponent>(component.AnalyzerEntity, out var active);
|
var scanning = TryComp<ActiveArtifactAnalyzerComponent>(component.AnalyzerEntity, out var active);
|
||||||
var remaining = active != null ? _timing.CurTime - active.StartTime : TimeSpan.Zero;
|
var remaining = active != null ? _timing.CurTime - active.StartTime : TimeSpan.Zero;
|
||||||
|
|
||||||
var state = new AnalysisConsoleScanUpdateState(artifact, analyzerConnected, serverConnected, canScan,
|
var state = new AnalysisConsoleScanUpdateState(artifact, analyzerConnected, serverConnected, canScan, canPrint,
|
||||||
node?.Id, node?.Depth, node?.Edges.Count, node?.Triggered, node?.Effect.ID, node?.Trigger.ID, completion,
|
node?.Id, node?.Depth, node?.Edges.Count, node?.Triggered, node?.Effect.ID, node?.Trigger.ID, completion,
|
||||||
scanning, remaining, totalTime);
|
scanning, remaining, totalTime);
|
||||||
|
|
||||||
@@ -237,6 +243,68 @@ public sealed class ArtifactAnalyzerSystem : EntitySystem
|
|||||||
activeArtifact.Scanner = component.AnalyzerEntity.Value;
|
activeArtifact.Scanner = component.AnalyzerEntity.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnPrintButton(EntityUid uid, AnalysisConsoleComponent component, AnalysisConsolePrintButtonPressedMessage args)
|
||||||
|
{
|
||||||
|
if (component.AnalyzerEntity == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!TryComp<ArtifactAnalyzerComponent>(component.AnalyzerEntity, out var analyzer) ||
|
||||||
|
analyzer.LastAnalyzedNode == null ||
|
||||||
|
analyzer.LastAnalyzedCompletion == null ||
|
||||||
|
!analyzer.ReadyToPrint)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
analyzer.ReadyToPrint = false;
|
||||||
|
var n = analyzer.LastAnalyzedNode;
|
||||||
|
|
||||||
|
var report = Spawn(component.ReportEntityId, Transform(uid).Coordinates);
|
||||||
|
MetaData(report).EntityName = Loc.GetString("analysis-report-title", ("id", n.Id));
|
||||||
|
|
||||||
|
var msg = new FormattedMessage();
|
||||||
|
|
||||||
|
msg.AddMarkup(Loc.GetString("analysis-console-info-id", ("id", n.Id)));
|
||||||
|
msg.PushNewline();
|
||||||
|
msg.AddMarkup(Loc.GetString("analysis-console-info-depth", ("depth", n.Depth)));
|
||||||
|
msg.PushNewline();
|
||||||
|
|
||||||
|
var activated = n.Triggered
|
||||||
|
? "analysis-console-info-triggered-true"
|
||||||
|
: "analysis-console-info-triggered-false";
|
||||||
|
msg.AddMarkup(Loc.GetString(activated));
|
||||||
|
msg.PushNewline();
|
||||||
|
|
||||||
|
msg.PushNewline();
|
||||||
|
var needSecondNewline = false;
|
||||||
|
if (n.Trigger.TriggerHint != null)
|
||||||
|
{
|
||||||
|
msg.AddMarkup(Loc.GetString("analysis-console-info-trigger",
|
||||||
|
("trigger", Loc.GetString(n.Trigger.TriggerHint))) + "\n");
|
||||||
|
needSecondNewline = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (n.Effect.EffectHint != null)
|
||||||
|
{
|
||||||
|
msg.AddMarkup(Loc.GetString("analysis-console-info-effect",
|
||||||
|
("effect", Loc.GetString(n.Effect.EffectHint))) + "\n");
|
||||||
|
needSecondNewline = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needSecondNewline)
|
||||||
|
msg.PushNewline();
|
||||||
|
|
||||||
|
msg.AddMarkup(Loc.GetString("analysis-console-info-edges", ("edges", n.Edges.Count)));
|
||||||
|
msg.PushNewline();
|
||||||
|
|
||||||
|
msg.AddMarkup(Loc.GetString("analysis-console-info-completion",
|
||||||
|
("percentage", Math.Round(analyzer.LastAnalyzedCompletion.Value * 100))));
|
||||||
|
|
||||||
|
_popup.PopupEntity(Loc.GetString("analysis-console-print-popup"), uid, Filter.Pvs(uid));
|
||||||
|
_paper.SetContent(report, msg.ToMarkup());
|
||||||
|
UpdateUserInterface(uid, component);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// destroys the artifact and updates the server points
|
/// destroys the artifact and updates the server points
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -333,6 +401,7 @@ public sealed class ArtifactAnalyzerSystem : EntitySystem
|
|||||||
if (!Resolve(uid, ref component, ref active))
|
if (!Resolve(uid, ref component, ref active))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
component.ReadyToPrint = true;
|
||||||
_audio.PlayPvs(component.ScanFinishedSound, uid);
|
_audio.PlayPvs(component.ScanFinishedSound, uid);
|
||||||
component.LastAnalyzedArtifact = active.Artifact;
|
component.LastAnalyzedArtifact = active.Artifact;
|
||||||
UpdateAnalyzerInformation(uid, component);
|
UpdateAnalyzerInformation(uid, component);
|
||||||
|
|||||||
@@ -158,7 +158,13 @@ public sealed partial class ArtifactSystem : EntitySystem
|
|||||||
component.CurrentNode.Triggered = true;
|
component.CurrentNode.Triggered = true;
|
||||||
if (component.CurrentNode.Edges.Any())
|
if (component.CurrentNode.Edges.Any())
|
||||||
{
|
{
|
||||||
|
var undiscoveredNodes = component.CurrentNode.Edges.Where(x => !x.Discovered).ToList();
|
||||||
|
|
||||||
var newNode = _random.Pick(component.CurrentNode.Edges);
|
var newNode = _random.Pick(component.CurrentNode.Edges);
|
||||||
|
if (undiscoveredNodes.Any() && _random.Prob(0.75f))
|
||||||
|
{
|
||||||
|
newNode = _random.Pick(undiscoveredNodes);
|
||||||
|
}
|
||||||
EnterNode(uid, ref newNode, component);
|
EnterNode(uid, ref newNode, component);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,11 @@ public sealed class AnalysisConsoleScanButtonPressedMessage : BoundUserInterface
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Serializable, NetSerializable]
|
||||||
|
public sealed class AnalysisConsolePrintButtonPressedMessage : BoundUserInterfaceMessage
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
[Serializable, NetSerializable]
|
[Serializable, NetSerializable]
|
||||||
public sealed class AnalysisConsoleDestroyButtonPressedMessage : BoundUserInterfaceMessage
|
public sealed class AnalysisConsoleDestroyButtonPressedMessage : BoundUserInterfaceMessage
|
||||||
{
|
{
|
||||||
@@ -34,6 +39,8 @@ public sealed class AnalysisConsoleScanUpdateState : BoundUserInterfaceState
|
|||||||
|
|
||||||
public bool CanScan;
|
public bool CanScan;
|
||||||
|
|
||||||
|
public bool CanPrint;
|
||||||
|
|
||||||
public int? Id;
|
public int? Id;
|
||||||
|
|
||||||
public int? Depth;
|
public int? Depth;
|
||||||
@@ -54,7 +61,7 @@ public sealed class AnalysisConsoleScanUpdateState : BoundUserInterfaceState
|
|||||||
|
|
||||||
public TimeSpan TotalTime;
|
public TimeSpan TotalTime;
|
||||||
|
|
||||||
public AnalysisConsoleScanUpdateState(EntityUid? artifact, bool analyzerConnected, bool serverConnected, bool canScan,
|
public AnalysisConsoleScanUpdateState(EntityUid? artifact, bool analyzerConnected, bool serverConnected, bool canScan, bool canPrint,
|
||||||
int? id, int? depth, int? edges, bool? triggered, string? effectProto, string? triggerProto, float? completion,
|
int? id, int? depth, int? edges, bool? triggered, string? effectProto, string? triggerProto, float? completion,
|
||||||
bool scanning, TimeSpan timeRemaining, TimeSpan totalTime)
|
bool scanning, TimeSpan timeRemaining, TimeSpan totalTime)
|
||||||
{
|
{
|
||||||
@@ -62,6 +69,7 @@ public sealed class AnalysisConsoleScanUpdateState : BoundUserInterfaceState
|
|||||||
AnalyzerConnected = analyzerConnected;
|
AnalyzerConnected = analyzerConnected;
|
||||||
ServerConnected = serverConnected;
|
ServerConnected = serverConnected;
|
||||||
CanScan = canScan;
|
CanScan = canScan;
|
||||||
|
CanPrint = canPrint;
|
||||||
|
|
||||||
Id = id;
|
Id = id;
|
||||||
Depth = depth;
|
Depth = depth;
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ analysis-console-menu-title = analysis console
|
|||||||
analysis-console-server-list-button = Server List
|
analysis-console-server-list-button = Server List
|
||||||
analysis-console-scan-button = Scan
|
analysis-console-scan-button = Scan
|
||||||
analysis-console-scan-tooltip-info = Scan artifacts to learn information about their structure.
|
analysis-console-scan-tooltip-info = Scan artifacts to learn information about their structure.
|
||||||
|
analysis-console-print-button = Print
|
||||||
|
analysis-console-print-tooltip-info = Print out the current information about the artifact.
|
||||||
analysis-console-destroy-button = Destroy
|
analysis-console-destroy-button = Destroy
|
||||||
analysis-console-destroy-button-info = Destroy artifacts to generate points based on how much has been unlocked.
|
analysis-console-destroy-button-info = Destroy artifacts to generate points based on how much has been unlocked.
|
||||||
|
|
||||||
@@ -24,6 +26,14 @@ analysis-console-progress-text = {$seconds ->
|
|||||||
*[other] T-{$seconds} seconds
|
*[other] T-{$seconds} seconds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
analysis-destroy-window-title = Confirm Destruction
|
||||||
|
analysis-destroy-window-text = Destroy the artifact, converting it into research points?
|
||||||
|
analysis-destroy-window-yes = Yes
|
||||||
|
analysis-destroy-window-no = No
|
||||||
|
|
||||||
analyzer-artifact-component-upgrade-analysis = analysis duration
|
analyzer-artifact-component-upgrade-analysis = analysis duration
|
||||||
|
|
||||||
|
analysis-console-print-popup = The console printed out a report.
|
||||||
analyzer-artifact-destroy-popup = The artifact disintegrated into energy!
|
analyzer-artifact-destroy-popup = The artifact disintegrated into energy!
|
||||||
|
|
||||||
|
analysis-report-title = Artifact Report: Node {$id}
|
||||||
@@ -262,7 +262,7 @@
|
|||||||
effectHint: artifact-effect-hint-creation
|
effectHint: artifact-effect-hint-creation
|
||||||
components:
|
components:
|
||||||
- type: SpawnArtifact
|
- type: SpawnArtifact
|
||||||
maxSpawns: 5
|
maxSpawns: 15
|
||||||
consistentSpawn: false
|
consistentSpawn: false
|
||||||
possiblePrototypes:
|
possiblePrototypes:
|
||||||
- SilverOre1
|
- SilverOre1
|
||||||
|
|||||||
@@ -122,7 +122,7 @@
|
|||||||
- type: ArtifactDamageTrigger
|
- type: ArtifactDamageTrigger
|
||||||
damageTypes:
|
damageTypes:
|
||||||
- Radiation
|
- Radiation
|
||||||
damageThreshold: 100
|
damageThreshold: 50
|
||||||
- type: RadiationReceiver
|
- type: RadiationReceiver
|
||||||
|
|
||||||
- type: artifactTrigger
|
- type: artifactTrigger
|
||||||
|
|||||||
Reference in New Issue
Block a user