Files
sbox-public/engine/Tools/InteropGen/Program.cs
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

79 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
namespace Facepunch.InteropGen;
public static class Program
{
public static void ProcessDefinitionFile( int index, string filename, bool skipNative )
{
using ( Log.Group( ConsoleColor.Green, $"{System.IO.Path.GetFileName( filename )}" ) )
{
Stopwatch sw = Stopwatch.StartNew();
try
{
Definition definitions = Definition.FromFile( filename );
// Log.WriteLine( "Saving Managed File" );
ManagerWriter managedWriter = new( definitions, definitions.SaveFileCs );
managedWriter.Generate();
managedWriter.SaveToFile( definitions.SaveFileCs );
if ( !skipNative )
{
// Log.WriteLine( "Saving Native Header" );
NativeHeaderWriter nativeHeaderWriter = new( definitions, definitions.SaveFileCppH );
nativeHeaderWriter.Generate();
nativeHeaderWriter.SaveToFile( definitions.SaveFileCppH );
// Log.WriteLine( "Saving Native" );
NativeWriter nativeWriter = new( definitions, definitions.SaveFileCpp );
nativeWriter.Generate();
nativeWriter.SaveToFile( definitions.SaveFileCpp );
}
Log.Completion( $"Done in {sw.Elapsed.TotalSeconds:0.00}s", true );
}
catch ( Exception e )
{
Log.Completion( $"Error: {e}", false );
}
}
}
public static void ProcessManifest( string directory, bool skipNative = false )
{
string filename = System.IO.Path.Combine( directory, "manifest.def" );
if ( !System.IO.File.Exists( filename ) )
{
return;
}
string[] manifestLines = System.IO.File.ReadAllLines( filename );
List<Task> tasks = [];
int i = 0;
foreach ( string line in manifestLines )
{
if ( string.IsNullOrWhiteSpace( line ) )
{
continue;
}
if ( line.Trim().EndsWith( ".def" ) )
{
int index = i++;
string path = System.IO.Path.Combine( directory, line );
Task t = Task.Run( () => ProcessDefinitionFile( index, path, skipNative ) );
tasks.Add( t );
}
}
Task.WaitAll( tasks.ToArray() );
}
}