using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Generator { public partial class CodeWriter { void Callbacks() { var callbackList = new List(); foreach ( var c in def.callback_structs ) { var name = Cleanup.ConvertType( c.Name ); if ( !Cleanup.ShouldCreate( name ) ) continue; if ( name.Contains( "::" ) ) continue; var partial = ""; if ( c.Methods != null ) partial = " partial"; int defaultPack = c.IsPack4OnWindows ? 4 : 8; var isCallback = true; var iface = ""; if ( isCallback ) iface = " : ICallbackData"; // // Main struct // WriteLine( $"[StructLayout( LayoutKind.Sequential, Pack = Platform.{(c.IsPack4OnWindows?"StructPackSize": "StructPlatformPackSize")} )]" ); StartBlock( $"{Cleanup.Expose( name )}{partial} struct {name}{iface}" ); { // // The fields // StructFields( c.Fields ); WriteLine(); if ( isCallback ) { WriteLine( "#region SteamCallback" ); { WriteLine( $"public static int _datasize = System.Runtime.InteropServices.Marshal.SizeOf( typeof({name}) );" ); WriteLine( $"public int DataSize => _datasize;" ); WriteLine( $"public CallbackType CallbackType => CallbackType.{name.Replace( "_t", "" )};" ); } WriteLine( "#endregion" ); } if ( c.Enums != null ) { foreach ( var e in c.Enums ) { WriteEnum( e, e.Name ); } } // if ( c.CallbackId ) ) { callbackList.Add( c ); } } EndBlock(); WriteLine(); } } } }