Examine prediction (#23565)

* Initial prediction

* new group handling

* groups for all examines that use multiple rn

* compile

* why was it doing this??

* handle newlines with sorting properly
This commit is contained in:
Kara
2024-01-05 23:53:13 -07:00
committed by GitHub
parent 731cfc278a
commit 0ae3858b69
41 changed files with 693 additions and 431 deletions

View File

@@ -46,7 +46,7 @@ namespace Content.Server.Construction.Conditions
if (entityManager.EntitySysManager.GetEntitySystem<MachineFrameSystem>().IsComplete(machineFrame))
return false;
args.Message.AddMarkup(Loc.GetString("construction-condition-machine-frame-requirement-label") + "\n");
args.PushMarkup(Loc.GetString("construction-condition-machine-frame-requirement-label"));
foreach (var (part, required) in machineFrame.Requirements)
{
var amount = required - machineFrame.Progress[part];
@@ -54,10 +54,9 @@ namespace Content.Server.Construction.Conditions
if(amount == 0)
continue;
args.Message.AddMarkup(Loc.GetString("construction-condition-machine-frame-required-element-entry",
args.PushMarkup(Loc.GetString("construction-condition-machine-frame-required-element-entry",
("amount", amount),
("elementName", Loc.GetString(part)))
+ "\n");
("elementName", Loc.GetString(part))));
}
foreach (var (material, required) in machineFrame.MaterialRequirements)
@@ -67,10 +66,9 @@ namespace Content.Server.Construction.Conditions
if(amount == 0)
continue;
args.Message.AddMarkup(Loc.GetString("construction-condition-machine-frame-required-element-entry",
args.PushMarkup(Loc.GetString("construction-condition-machine-frame-required-element-entry",
("amount", amount),
("elementName", Loc.GetString(material)))
+ "\n");
("elementName", Loc.GetString(material))));
}
foreach (var (compName, info) in machineFrame.ComponentRequirements)
@@ -80,10 +78,9 @@ namespace Content.Server.Construction.Conditions
if(amount == 0)
continue;
args.Message.AddMarkup(Loc.GetString("construction-condition-machine-frame-required-element-entry",
args.PushMarkup(Loc.GetString("construction-condition-machine-frame-required-element-entry",
("amount", info.Amount),
("elementName", Loc.GetString(info.ExamineName)))
+ "\n");
("elementName", Loc.GetString(info.ExamineName))));
}
foreach (var (tagName, info) in machineFrame.TagRequirements)
@@ -93,10 +90,10 @@ namespace Content.Server.Construction.Conditions
if(amount == 0)
continue;
args.Message.AddMarkup(Loc.GetString("construction-condition-machine-frame-required-element-entry",
("amount", info.Amount),
("elementName", Loc.GetString(info.ExamineName)))
+ "\n");
args.PushMarkup(Loc.GetString("construction-condition-machine-frame-required-element-entry",
("amount", info.Amount),
("elementName", Loc.GetString(info.ExamineName)))
+ "\n");
}
return true;

View File

@@ -67,46 +67,50 @@ namespace Content.Server.Construction
private void HandleConstructionExamined(EntityUid uid, ConstructionComponent component, ExaminedEvent args)
{
if (GetTargetNode(uid, component) is {} target)
using (args.PushGroup(nameof(ConstructionComponent)))
{
if (target.Name == component.DeconstructionNode)
if (GetTargetNode(uid, component) is {} target)
{
args.PushMarkup(Loc.GetString("deconstruction-header-text") + "\n");
if (target.Name == component.DeconstructionNode)
{
args.PushMarkup(Loc.GetString("deconstruction-header-text") + "\n");
}
else
{
args.PushMarkup(Loc.GetString(
"construction-component-to-create-header",
("targetName", target.Name)) + "\n");
}
}
else
if (component.EdgeIndex == null && GetTargetEdge(uid, component) is {} targetEdge)
{
args.PushMarkup(Loc.GetString(
"construction-component-to-create-header",
("targetName", target.Name)) + "\n");
var preventStepExamine = false;
foreach (var condition in targetEdge.Conditions)
{
preventStepExamine |= condition.DoExamine(args);
}
if (!preventStepExamine)
targetEdge.Steps[0].DoExamine(args);
return;
}
if (GetCurrentEdge(uid, component) is {} edge)
{
var preventStepExamine = false;
foreach (var condition in edge.Conditions)
{
preventStepExamine |= condition.DoExamine(args);
}
if (!preventStepExamine && component.StepIndex < edge.Steps.Count)
edge.Steps[component.StepIndex].DoExamine(args);
}
}
if (component.EdgeIndex == null && GetTargetEdge(uid, component) is {} targetEdge)
{
var preventStepExamine = false;
foreach (var condition in targetEdge.Conditions)
{
preventStepExamine |= condition.DoExamine(args);
}
if (!preventStepExamine)
targetEdge.Steps[0].DoExamine(args);
return;
}
if (GetCurrentEdge(uid, component) is {} edge)
{
var preventStepExamine = false;
foreach (var condition in edge.Conditions)
{
preventStepExamine |= condition.DoExamine(args);
}
if (!preventStepExamine && component.StepIndex < edge.Steps.Count)
edge.Steps[component.StepIndex].DoExamine(args);
}
}