This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

156 lines
5.2 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================
#ifndef ITOOLSYSTEM_H
#define ITOOLSYSTEM_H
#ifdef _WIN32
#pragma once
#endif
#include "inputsystem/iinputsystem.h"
#include "interface.h"
#include "itoolentity.h"
#include "materialsystem/imaterialproxy.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