source-engine/public/toolframework/itoolsystem.h

147 lines
4.9 KiB
C
Raw Permalink Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================
#ifndef ITOOLSYSTEM_H
#define ITOOLSYSTEM_H
#ifdef _WIN32
#pragma once
#endif
#include "itoolentity.h"
#include "interface.h"
#include "materialsystem/imaterialproxy.h"
#include "inputsystem/iinputsystem.h"
class KeyValues;
struct SpatializationInfo_t;
struct AudioState_t;
//-----------------------------------------------------------------------------
// Purpose: All tools expose this interface, which includes both client and server
// related hooks
//-----------------------------------------------------------------------------
class IToolSystem
{
public:
// Name describing the tool
virtual char const *GetToolName() = 0;
// Called at the end of engine startup (after client .dll and server .dll have been loaded)
virtual bool Init() = 0;
// Called during RemoveTool or when engine is shutting down
virtual void Shutdown() = 0;
// Called after server.dll is loaded
virtual bool ServerInit( CreateInterfaceFn serverFactory ) = 0;
// Called after client.dll is loaded
virtual bool ClientInit( CreateInterfaceFn clientFactory ) = 0;
virtual void ServerShutdown() = 0;
virtual void ClientShutdown() = 0;
// Allow tool to override quitting, called before Shutdown(), return no to abort quitting
virtual bool CanQuit() = 0;
// Called when another system wiches to post a message to the tool and/or a specific entity
// FIXME: Are KeyValues too inefficient here?
virtual void PostMessage( HTOOLHANDLE hEntity, KeyValues *message ) = 0;
// Called oncer per frame even when no level is loaded... (call ProcessMessages())
virtual void Think( bool finalTick ) = 0;
// Server calls:
// Level init, shutdown
virtual void ServerLevelInitPreEntity() = 0;
// entities are created / spawned / precached here
virtual void ServerLevelInitPostEntity() = 0;
virtual void ServerLevelShutdownPreEntity() = 0;
// Entities are deleted / released here...
virtual void ServerLevelShutdownPostEntity() = 0;
// end of level shutdown
// Called each frame before entities think
virtual void ServerFrameUpdatePreEntityThink() = 0;
// called after entities think
virtual void ServerFrameUpdatePostEntityThink() = 0;
virtual void ServerPreClientUpdate() = 0;
virtual void ServerPreSetupVisibility() = 0;
// Used to allow the tool to spawn different entities when it's active
virtual const char* GetEntityData( const char *pActualEntityData ) = 0;
// Client calls:
// Level init, shutdown
virtual void ClientLevelInitPreEntity() = 0;
// entities are created / spawned / precached here
virtual void ClientLevelInitPostEntity() = 0;
virtual void ClientLevelShutdownPreEntity() = 0;
// Entities are deleted / released here...
virtual void ClientLevelShutdownPostEntity() = 0;
// end of level shutdown
// Called before rendering
virtual void ClientPreRender() = 0;
virtual void ClientPostRender() = 0;
// Let tool override viewport for engine
virtual void AdjustEngineViewport( int& x, int& y, int& width, int& height ) = 0;
// let tool override view/camera
virtual bool SetupEngineView( Vector &origin, QAngle &angles, float &fov ) = 0;
// let tool override microphone
virtual bool SetupAudioState( AudioState_t &audioState ) = 0;
// Should the client be allowed to render the view normally?
virtual bool ShouldGameRenderView() = 0;
virtual bool IsThirdPersonCamera() = 0;
// is the current tool recording?
virtual bool IsToolRecording() = 0;
virtual IMaterialProxy *LookupProxy( const char *proxyName ) = 0;
// Possible hooks for rendering
// virtual void Think( float curtime, float frametime ) = 0;
// virtual void Prerender() = 0;
// virtual void Render3D() = 0;
// virtual void Render2D() = 0;
// Tool activation/deactivation
// This tool is being activated
virtual void OnToolActivate() = 0;
// Another tool is being activated
virtual void OnToolDeactivate() = 0;
virtual bool TrapKey( ButtonCode_t key, bool down ) = 0;
virtual bool GetSoundSpatialization( int iUserData, int guid, SpatializationInfo_t& info ) = 0;
// Unlike the client .dll pre/post render stuff, these get called no matter whether a map is loaded and they only get called once per frame!!!
virtual void RenderFrameBegin() = 0;
virtual void RenderFrameEnd() = 0;
// wraps the entire frame - surrounding all other begin/end and pre/post calls
virtual void HostRunFrameBegin() = 0;
virtual void HostRunFrameEnd() = 0;
// See enginevgui.h for paintmode_t enum definitions
virtual void VGui_PreRender( int paintMode ) = 0;
virtual void VGui_PostRender( int paintMode ) = 0;
virtual void VGui_PreSimulate() = 0;
virtual void VGui_PostSimulate() = 0;
};
// Pointer to a member method of IGameSystem
typedef void (IToolSystem::*ToolSystemFunc_t)();
typedef void (IToolSystem::*ToolSystemFunc_Int_t)( int arg );
#endif // ITOOLSYSTEM_H