using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Linq;
using Robust.Shared.ContentPack;
using Robust.Shared.EntitySerialization.Systems;
using Robust.Shared.Map.Events;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.Markdown;
using Robust.Shared.Serialization.Markdown.Mapping;
using Robust.Shared.Serialization.Markdown.Value;
using Robust.Shared.Utility;
namespace Content.Server.Maps;
///
/// Performs basic map migration operations by listening for engine events.
///
public sealed class MapMigrationSystem : EntitySystem
{
#pragma warning disable CS0414
[Dependency] private readonly IPrototypeManager _protoMan = default!;
#pragma warning restore CS0414
[Dependency] private readonly IResourceManager _resMan = default!;
private static readonly string[] MigrationFiles = { "/migration.yml", "/nf_migration.yml", "/sh_migration.yml" }; // Frontier: use array of migration files
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent(OnBeforeReadEvent);
#if DEBUG
if (!TryReadFiles(out var mappings)) // Frontier: TryReadFile(newId),
$"{newId} is not an entity prototype.");
}
}
// End Delta-V
#endif
}
// Frontier: wrap single file reader
private bool TryReadFiles([NotNullWhen(true)] out List? mappings)
{
mappings = null;
if (MigrationFiles.Count() <= 0)
return false;
foreach (var migrationFile in MigrationFiles)
{
if (!TryReadFile(migrationFile, out var mapping))
continue;
mappings ??= new();
mappings.Add(mapping);
}
return mappings != null && mappings.Count > 0;
}
// End Frontier
private bool TryReadFile(string migrationFile, [NotNullWhen(true)] out MappingDataNode? mappings) // Frontier: add migrationFile
{
mappings = null;
var path = new ResPath(migrationFile); // Frontier: MigrationFile