This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
CnC_Renegade/Code/Combat/debug.h

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