226 lines
No EOL
8 KiB
C++
226 lines
No EOL
8 KiB
C++
/*
|
|
** Command & Conquer Renegade(tm)
|
|
** Copyright 2025 Electronic Arts Inc.
|
|
**
|
|
** This program is free software: you can redistribute it and/or modify
|
|
** it under the terms of the GNU General Public License as published by
|
|
** the Free Software Foundation, either version 3 of the License, or
|
|
** (at your option) any later version.
|
|
**
|
|
** This program is distributed in the hope that it will be useful,
|
|
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
** GNU General Public License for more details.
|
|
**
|
|
** You should have received a copy of the GNU General Public License
|
|
** along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/***********************************************************************************************
|
|
*** Confidential - Westwood Studios ***
|
|
***********************************************************************************************
|
|
* *
|
|
* Project Name : Commando *
|
|
* *
|
|
* $Archive:: /Commando/Code/Combat/debug.h $*
|
|
* *
|
|
* $Author:: Byon_g $*
|
|
* *
|
|
* $Modtime:: 12/18/01 10:36a $*
|
|
* *
|
|
* $Revision:: 27 $*
|
|
* *
|
|
*---------------------------------------------------------------------------------------------*
|
|
* Functions: *
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
|
|
#ifndef DEBUG_H
|
|
#define DEBUG_H
|
|
|
|
#ifndef ALWAYS_H
|
|
#include "always.h"
|
|
#endif
|
|
|
|
#ifndef WWDEBUG_H
|
|
#include "wwdebug.h"
|
|
#endif
|
|
|
|
#ifndef BITTYPE_H
|
|
#include "bittype.h"
|
|
#endif
|
|
|
|
#ifndef __WIDESTRING_H
|
|
#include "widestring.h"
|
|
#endif
|
|
|
|
#ifndef VECTOR3_H
|
|
#include "vector3.h"
|
|
#endif
|
|
|
|
#ifndef VECTOR4_H
|
|
#include "vector4.h"
|
|
#endif
|
|
|
|
//#ifndef _CONTEXT
|
|
//struct CONTEXT;
|
|
//#define TEMP_CONTEXT_DEFINE
|
|
//#endif
|
|
//int Stack_Walk(unsigned long *return_addresses, int num_addresses, CONTEXT *context = NULL);
|
|
//#ifdef TEMP_CONTEXT_DEFINE
|
|
//#undef CONTEXT
|
|
//#endif
|
|
|
|
/*
|
|
**
|
|
*/
|
|
class DebugDisplayHandlerClass {
|
|
public:
|
|
virtual void Display_Text( const char * string, const Vector4 & color = Vector4( 1,1,1,1 ) ) = 0;
|
|
virtual void Display_Text( const WideStringClass & string, const Vector4 & color = Vector4( 1,1,1,1 ) ) = 0;
|
|
};
|
|
|
|
|
|
/*
|
|
**
|
|
*/
|
|
class DebugManager {
|
|
|
|
public:
|
|
static void Init( void );
|
|
static void Shutdown( void );
|
|
|
|
static void Update( void );
|
|
|
|
static void Load_Registry_Settings( const char * sub_key );
|
|
static void Save_Registry_Settings( const char * sub_key );
|
|
|
|
//
|
|
// Version number support. The major revision number is stored in the
|
|
// hiword of the version, the minor revision number is stored in the loword.
|
|
//
|
|
static int Get_Version_Number (void) { return VersionNumber; }
|
|
static void Set_Version_Number (int number) { VersionNumber = number; }
|
|
|
|
/*
|
|
** Debug Displaying
|
|
*/
|
|
enum DebugDevice {
|
|
DEBUG_DEVICE_SCREEN = 1<<0,
|
|
DEBUG_DEVICE_MONO = 1<<1,
|
|
DEBUG_DEVICE_SRDEBUG = 1<<2, // OBSOLETE!
|
|
DEBUG_DEVICE_DBWIN32 = 1<<3,
|
|
DEBUG_DEVICE_LOG = 1<<4,
|
|
DEBUG_DEVICE_WINDOWS = 1<<5,
|
|
};
|
|
static void Enable_Device( DebugDevice device ) { EnabledDevices |= device; }
|
|
static void Disable_Device( DebugDevice device ) { EnabledDevices &= ~device; }
|
|
static void Toggle_Device_Enabled( DebugDevice device ) { EnabledDevices ^= device; }
|
|
static bool Is_Device_Enabled( DebugDevice device ) { return (EnabledDevices & device) != 0; }
|
|
|
|
|
|
enum DebugType {
|
|
DEBUG_TYPE_INFORMATION = 1<<WWDEBUG_TYPE_INFORMATION,
|
|
DEBUG_TYPE_WARNING = 1<<WWDEBUG_TYPE_WARNING,
|
|
DEBUG_TYPE_ERROR = 1<<WWDEBUG_TYPE_ERROR,
|
|
DEBUG_TYPE_SCRIPT = 1<<(WWDEBUG_TYPE_USER+1),
|
|
DEBUG_TYPE_NETWORK_ADMIN = 1<<(WWDEBUG_TYPE_USER+2),
|
|
DEBUG_TYPE_NETWORK_BASIC = 1<<(WWDEBUG_TYPE_USER+3),
|
|
DEBUG_TYPE_NETWORK_PROLIFIC = 1<<(WWDEBUG_TYPE_USER+4),
|
|
};
|
|
static void Enable_Type( DebugType type ) { EnabledTypes |= type; }
|
|
static void Disable_Type( DebugType type ) { EnabledTypes &= ~type; }
|
|
static void Toggle_Type_Enabled( DebugType type ) { EnabledTypes ^= type; }
|
|
static bool Is_Type_Enabled( DebugType type ) { return (EnabledTypes & type) != 0; }
|
|
|
|
|
|
static void Display( char const *buffer );
|
|
static void Display_Script( char const *text, ... );
|
|
static void Display_Network_Admin( char const *text, ... );
|
|
static void Display_Network_Basic( char const *text, ... );
|
|
static void Display_Network_Prolific( char const *text, ... );
|
|
|
|
/*
|
|
** Debug Options
|
|
** (gth) Enable and disable debug options and triggers. Now that we've
|
|
** moved more functions to the console (rather than 10 billion key combinations)
|
|
** we need an interface for turning on and off some of the debug triggers.
|
|
*/
|
|
enum DebugOption {
|
|
DEBUG_INVERT_VIS = 1<<0,
|
|
DEBUG_DISABLE_VIS = 1<<1,
|
|
DEBUG_COLLISION_MESSAGES = 1<<2,
|
|
DEBUG_COLLISION_DISPLAY = 1<<3,
|
|
DEBUG_DISABLE_LIGHTS = 1<<4,
|
|
DEBUG_PROCESS_STATS = 1<<5,
|
|
DEBUG_SURFACE_CACHE = 1<<6,
|
|
};
|
|
static void Option_Enable( DebugOption option, bool onoff )
|
|
{ if ( onoff ) EnabledOptions |= option; else EnabledOptions &= ~option; }
|
|
static bool Option_Is_Enabled( DebugOption option ) { return (EnabledOptions & option) != 0; }
|
|
static void Option_Toggle( DebugOption option ) { EnabledOptions ^= option; }
|
|
|
|
// Misc Debug Functions
|
|
static void Measure_Frame_Textures( void );
|
|
|
|
// Outside handler display
|
|
static void Set_Display_Handler( DebugDisplayHandlerClass * handler ) { DisplayHandler = handler; }
|
|
|
|
static void Display_Text(const char * string, const Vector4 & color );
|
|
static void Display_Text(const char * string, const Vector3 & color = Vector3( 1,1,1 ) );
|
|
static void Display_Text(const WideStringClass & string, const Vector4 & color );
|
|
static void Display_Text(const WideStringClass & string, const Vector3 & color = Vector3( 1,1,1 ) );
|
|
|
|
static void Init_Logfile(void);
|
|
static void Write_To_File(LPCSTR str);
|
|
static LPCSTR Logfile_Name(void) {return LOGFILE;}
|
|
|
|
static void Enable_Memory_Logging( bool enable );
|
|
|
|
static bool Is_File_Logging_Enabled( void ) { return EnableFileLogging; }
|
|
static bool Is_Diag_Logging_Enabled( void ) { return EnableDiagLogging; }
|
|
static bool Load_Debug_Scripts( void ) { return LoadDebugScripts; }
|
|
|
|
static void Set_Is_Slave(bool isslave) {IsSlave = isslave;}
|
|
|
|
static bool Allow_Cinematic_Keys( void ) { return AllowCinematicKeys; };
|
|
|
|
private:
|
|
static int EnabledDevices;
|
|
static int EnabledTypes;
|
|
static int EnabledOptions;
|
|
static bool EnableFileLogging;
|
|
static bool EnableDiagLogging;
|
|
static bool LoadDebugScripts;
|
|
static int VersionNumber;
|
|
static bool AllowCinematicKeys;
|
|
|
|
static DebugDisplayHandlerClass * DisplayHandler;
|
|
static LPSTR LOGFILE;
|
|
static char LogfileNameBuffer[256];
|
|
static bool IsSlave;
|
|
|
|
/*
|
|
** Thread safety
|
|
*/
|
|
static CriticalSectionClass CriticalSection;
|
|
|
|
|
|
};
|
|
|
|
// macro to print
|
|
#define Debug_Say WWDEBUG_SAY
|
|
#define Debug_Warning WWDEBUG_WARNING
|
|
#define Debug_Error WWDEBUG_ERROR
|
|
#define Debug_Script(x) DebugManager::Display_Script x
|
|
#define Debug_Network_Basic(x) DebugManager::Display_Network_Basic x
|
|
#define Debug_Network_Prolific(x) DebugManager::Display_Network_Prolific x
|
|
|
|
#endif // DEBUG_H
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//#define Debug_Network_Admin(x) DebugManager::Display_Network_Admin x
|