Files
crystall-punk-14/Content.Shared/_CP14/Knowledge/CP14KnowledgePaperTextSystem.cs

63 lines
1.8 KiB
C#

using System.Text;
using Content.Shared._CP14.Knowledge.Components;
using Content.Shared.Paper;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.Knowledge;
public sealed class CP14KnowledgePaperTextSystem : EntitySystem
{
[Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly PaperSystem _paper = default!;
public override void Initialize()
{
SubscribeLocalEvent<CP14KnowledgePaperTextComponent, MapInitEvent>(OnPaperMapInit);
}
private void OnPaperMapInit(Entity<CP14KnowledgePaperTextComponent> ent, ref MapInitEvent args)
{
if (!TryComp<PaperComponent>(ent, out var paperComponent))
return;
var paper = new Entity<PaperComponent>(ent, paperComponent);
if (!TryComp<CP14KnowledgeLearningSourceComponent>(ent, out var knowledge))
return;
if (knowledge.Knowledge.Count == 0)
return;
var content = GenerateText(knowledge);
_paper.SetContent(paper, content);
paper.Comp.EditingDisabled = true;
// Yes we need to do synchronization after such changes,
// yes predict, but we need to
Dirty(paper);
}
private string GenerateText(CP14KnowledgeLearningSourceComponent source)
{
var stringBuilder = new StringBuilder();
// Header
stringBuilder.Append(Loc.GetString("cp14-knowledge-book-pre-text"));
// Main body
foreach (var prototypeId in source.Knowledge)
{
if (!_prototype.TryIndex(prototypeId, out var indexedKnowledge))
continue;
stringBuilder.Append($"\n{Loc.GetString(indexedKnowledge.Desc)}");
}
// Footer
stringBuilder.Append($"\n\n{Loc.GetString("cp14-knowledge-book-post-text")}");
return stringBuilder.ToString();
}
}