networking

This commit is contained in:
2025-07-13 15:47:42 +03:00
parent f5b26be510
commit a9c28b8940
345 changed files with 142130 additions and 174 deletions

View File

@@ -0,0 +1,224 @@
//========= Copyright <20> 1996-2008, Valve LLC, All rights reserved. ============
//
// Purpose: Main class for the game engine
//
// $NoKeywords: $
//=============================================================================
#ifndef GAMEENGINE_H
#define GAMEENGINE_H
#include <set>
#include <map>
// Typedef for font handles
typedef int HGAMEFONT;
// Typedef for vertex buffer handles
typedef int HGAMEVERTBUF;
// Typedef for texture handles
typedef int HGAMETEXTURE;
// Typedef for voice channels
typedef int HGAMEVOICECHANNEL;
// BDrawText position flags
#define TEXTPOS_TOP 0x00000000
#define TEXTPOS_LEFT 0x00000000
#define TEXTPOS_CENTER 0x00000001
#define TEXTPOS_RIGHT 0x00000002
#define TEXTPOS_VCENTER 0x00000004
#define TEXTPOS_BOTTOM 0x00000008
#define VOICE_OUTPUT_SAMPLE_RATE 11000 // real sample rate is 11025 but for XAudio2 it must be a multiple of XAUDIO2_QUANTUM_DENOMINATOR
#define VOICE_OUTPUT_SAMPLE_RATE_IDEAL 11025
#define BYTES_PER_SAMPLE 2
// Texture formats we support for upload to textures
enum ETEXTUREFORMAT
{
eTextureFormat_RGBA, // 8 bits per channel
eTextureFormat_BGRA, // 8 bits per channel
eTextureFormat_BGRA16, // 16 bits per channel
};
#define MAX_CONTROLLERS 4
enum ECONTROLLERDIGITALACTION
{
eControllerDigitalAction_TurnLeft,
eControllerDigitalAction_TurnRight,
eControllerDigitalAction_ForwardThrust,
eControllerDigitalAction_ReverseThrust,
eControllerDigitalAction_FireLasers,
eControllerDigitalAction_PauseMenu,
eControllerDigitalAction_MenuUp,
eControllerDigitalAction_MenuDown,
eControllerDigitalAction_MenuLeft,
eControllerDigitalAction_MenuRight,
eControllerDigitalAction_MenuSelect,
eControllerDigitalAction_MenuCancel,
eControllerDigitalAction_NumActions
};
enum ECONTROLLERANALOGACTION
{
eControllerAnalogAction_AnalogControls,
eControllerAnalogAction_NumActions
};
enum ECONTROLLERACTIONSET
{
eControllerActionSet_ShipControls,
eControllerActionSet_MenuControls,
eControllerActionSet_Layer_Thrust,
eControllerActionSet_NumSets
};
// used for VR support
namespace vr { class IVRSystem; }
//
// Interface that needs to be implemented for game engines on all platforms
//
class IGameEngine
{
public:
// Just here to stop warnings on non-virtual destructor in gcc builds
virtual ~IGameEngine() {};
// Check if the game engine is initialized ok and ready for use
virtual bool BReadyForUse() = 0;
// Check if the engine is shutting down
virtual bool BShuttingDown() = 0;
// Set the background color
virtual void SetBackgroundColor( short a, short r, short g, short b ) = 0;
// Start a frame, clear(), beginscene(), etc
virtual bool StartFrame() = 0;
// Finish a frame, endscene(), present(), etc.
virtual void EndFrame() = 0;
// Shutdown the game engine
virtual void Shutdown() = 0;
// Pump messages from the OS
virtual void MessagePump() = 0;
// Accessors for game screen size
virtual int32 GetViewportWidth() = 0;
virtual int32 GetViewportHeight() = 0;
// Function for drawing text to the screen, dwFormat is a combination of flags like DT_LEFT, TEXTPOS_VCENTER etc...
virtual bool BDrawString( HGAMEFONT hFont, RECT rect, DWORD dwColor, DWORD dwFormat, const char *pchText ) = 0;
// Create a new font returning our internal handle value for it (0 means failure)
virtual HGAMEFONT HCreateFont( int nHeight, int nFontWeight, bool bItalic, const char * pchFont ) = 0;
// Create a new texture returning our internal handle value for it (0 means failure), texture type specifies the type of data contained in pData
virtual HGAMETEXTURE HCreateTexture( byte *pData, uint32 uWidth, uint32 uHeight, ETEXTUREFORMAT eTextureFormat = eTextureFormat_RGBA ) = 0;
// update an existing texture, texture type specifies the type of data contained in pData
virtual bool UpdateTexture( HGAMETEXTURE texture, byte *pData, uint32 uWidth, uint32 uHeight, ETEXTUREFORMAT eTextureFormat = eTextureFormat_RGBA ) = 0;
// Draw a line, the engine itself will manage batching these (although you can explicitly flush if you need to)
virtual bool BDrawLine( float xPos0, float yPos0, DWORD dwColor0, float xPos1, float yPos1, DWORD dwColor1 ) = 0;
// Flush the line buffer
virtual bool BFlushLineBuffer() = 0;
// Draw a point, the engine itself will manage batching these (although you can explicitly flush if you need to)
virtual bool BDrawPoint( float xPos, float yPos, DWORD dwColor ) = 0;
// Flush the point buffer
virtual bool BFlushPointBuffer() = 0;
// Draw a filled quad
virtual bool BDrawFilledRect( float xPos0, float yPos0, float xPos1, float yPos1, DWORD dwColor ) = 0;
// Draw a textured rectangle
virtual bool BDrawTexturedRect( float xPos0, float yPos0, float xPos1, float yPos1,
float u0, float v0, float u1, float v1, DWORD dwColor, HGAMETEXTURE hTexture ) = 0;
// Draw a textured arbitrary quad
virtual bool BDrawTexturedQuad( float xPos0, float yPos0, float xPos1, float yPos1, float xPos2, float yPos2, float xPos3, float yPos3,
float u0, float v0, float u1, float v1, DWORD dwColor, HGAMETEXTURE hTexture ) = 0;
// Flush any still cached quad buffers
virtual bool BFlushQuadBuffer() = 0;
// Get the current state of a key
virtual bool BIsKeyDown( DWORD dwVK ) = 0;
// Get the first (in some arbitrary order) key down, if any
virtual bool BGetFirstKeyDown( DWORD *pdwVK ) = 0;
// Return true if there is an active Steam Controller
virtual bool BIsSteamInputDeviceActive() = 0;
// Get the current state of a controller action
virtual bool BIsControllerActionActive( ECONTROLLERDIGITALACTION dwAction ) = 0;
// Find an active Steam controller
virtual void FindActiveSteamInputDevice() = 0;
// Get the current state of a controller analog action
virtual void GetControllerAnalogAction( ECONTROLLERANALOGACTION dwAction, float *x, float *y ) = 0;
// Set the current Steam Controller Action set
virtual void SetSteamControllerActionSet( ECONTROLLERACTIONSET dwActionSet ) = 0;
// Set an Action Set Layer for Steam Input
virtual void ActivateSteamControllerActionSetLayer( ECONTROLLERACTIONSET dwActionSet ) = 0;
virtual void DeactivateSteamControllerActionSetLayer( ECONTROLLERACTIONSET dwActionSet ) = 0;
// Returns whether a given action set layer is active
virtual bool BIsActionSetLayerActive( ECONTROLLERACTIONSET dwActionSetLayer ) = 0;
// These calls return a string describing which controller button the action is currently bound to
virtual const char *GetTextStringForControllerOriginDigital( ECONTROLLERACTIONSET dwActionSet, ECONTROLLERDIGITALACTION dwDigitalAction ) = 0;
virtual const char *GetTextStringForControllerOriginAnalog( ECONTROLLERACTIONSET dwActionSet, ECONTROLLERANALOGACTION dwDigitalAction ) = 0;
virtual void SetControllerColor( uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags ) = 0;
virtual void SetTriggerEffect( bool bEnabled ) = 0;
virtual void TriggerControllerVibration( unsigned short nLeftSpeed, unsigned short nRightSpeed ) = 0;
virtual void TriggerControllerHaptics( ESteamControllerPad ePad, unsigned short usOnMicroSec, unsigned short usOffMicroSec, unsigned short usRepeat ) = 0;
// Get current tick count for the game engine
virtual uint64 GetGameTickCount() = 0;
// Tell the game engine to update current tick count
virtual void UpdateGameTickCount() = 0;
// Tell the game engine to sleep for a bit if needed to limit frame rate. Returns
// true if you need to keep calling it to sleep more to reach your limit, returns
// false when you should proceed to the next frame.
virtual bool BSleepForFrameRateLimit( uint32 ulMaxFrameRate ) = 0;
// Get the tick count elapsed since the previous frame
// bugbug - We use this time to compute things like thrust and acceleration in the game,
// so it's important in doesn't jump ahead by large increments... Need a better
// way to handle that.
virtual uint64 GetGameTicksFrameDelta() = 0;
// Check if the game engine hwnd currently has focus (and a working d3d device)
virtual bool BGameEngineHasFocus() = 0;
// Voice chat functions
virtual HGAMEVOICECHANNEL HCreateVoiceChannel() = 0;
virtual void DestroyVoiceChannel( HGAMEVOICECHANNEL hChannel ) = 0;
virtual bool AddVoiceData( HGAMEVOICECHANNEL hChannel, const uint8 *pVoiceData, uint32 uLength ) = 0;
};
#endif // GAMEENGINE_H