Editor/Road/ArchRoadCatalogs.cs
namespace Sunless.Architecture;
public static class ArchRoadCatalogs {
static string BridgeDirectory => ArchDataRoot.For( "bridges" );
static string TunnelDirectory => ArchDataRoot.For( "tunnels" );
public static List<ArchBridgeType> Bridges() {
foreach ( var built in ArchBridgeTypes.Defaults() ) {
var path = BridgePath( built.Name );
if ( !ArchStorage.DocumentExists( path ) ) {
ArchStorage.WriteDocument( path, built );
}
}
return ArchStorage.DocumentFiles( BridgeDirectory, ".bridgetype.json" )
.Select( file => ArchStorage.ReadDocument<ArchBridgeType>( $"{BridgeDirectory}/{file}" ) )
.Where( type => type is { Name.Length: > 0, Deck: not null } )
.OrderBy( type => type.Title )
.ToList();
}
public static ArchBridgeType Bridge( string name ) {
return Bridges().FirstOrDefault( type => string.Equals( type.Name, name, StringComparison.OrdinalIgnoreCase ) );
}
public static List<ArchTunnelType> Tunnels() {
foreach ( var built in ArchTunnelTypes.Defaults() ) {
var path = TunnelPath( built.Name );
if ( !ArchStorage.DocumentExists( path ) ) {
ArchStorage.WriteDocument( path, built );
}
}
return ArchStorage.DocumentFiles( TunnelDirectory, ".tunneltype.json" )
.Select( file => ArchStorage.ReadDocument<ArchTunnelType>( $"{TunnelDirectory}/{file}" ) )
.Where( type => type is { Name.Length: > 0, Bore: not null } )
.OrderBy( type => type.Title )
.ToList();
}
public static ArchTunnelType Tunnel( string name ) {
return Tunnels().FirstOrDefault( type => string.Equals( type.Name, name, StringComparison.OrdinalIgnoreCase ) );
}
public static string BridgeDirectoryPath => BridgeDirectory;
public static string TunnelDirectoryPath => TunnelDirectory;
static string BridgePath( string name ) => $"{BridgeDirectory}/{name}.bridgetype.json";
static string TunnelPath( string name ) => $"{TunnelDirectory}/{name}.tunneltype.json";
}