sqwarmed/sdk_src/public/matsys_controls/potterywheelpanel.h

161 lines
4.4 KiB
C++

//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======
//
// Purpose:
//
//=============================================================================
#ifndef POTTERYWHEELPANEL_H
#define POTTERYWHEELPANEL_H
#ifdef _WIN32
#pragma once
#endif
#include "vgui_controls/EditablePanel.h"
#include "materialsystem/materialsystemutil.h"
#include "mathlib/camera.h"
//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
class IManipulator;
class CPotteryWheelManip;
class CBaseManipulator;
class CTransformManipulator;
class CRotationManipulator;
class CTranslationManipulator;
class CZoomManipulator;
class CDmxElement;
namespace vgui
{
class IScheme;
}
//-----------------------------------------------------------------------------
// Pottery wheel Panel
//-----------------------------------------------------------------------------
class CPotteryWheelPanel : public vgui::EditablePanel
{
DECLARE_CLASS_SIMPLE( CPotteryWheelPanel, vgui::EditablePanel );
public:
// constructor, destructor
CPotteryWheelPanel( vgui::Panel *pParent, const char *pName );
virtual ~CPotteryWheelPanel();
// Overriden methods of vgui::Panel
virtual void Paint();
virtual void OnKeyCodePressed ( vgui::KeyCode code );
virtual void OnKeyCodeReleased( vgui::KeyCode code );
virtual void OnMousePressed ( vgui::MouseCode code );
virtual void OnMouseDoublePressed( vgui::MouseCode code );
virtual void OnMouseReleased( vgui::MouseCode code );
virtual void OnCursorMoved( int x, int y );
virtual void OnMouseWheeled( int delta );
virtual void OnTick();
virtual void OnMouseCaptureLost();
// Sets the camera to look at the the thing we're spinning around
void LookAt( const Vector &vecCenter, float flRadius );
void LookAt( float flRadius );
void ComputePanelPosition( const Vector &vecPosition, Vector2D *pPanelPos );
void SetBackgroundColor( int r, int g, int b );
void SetBackgroundColor( const Color& c );
const Color& GetBackgroundColor() const;
void SetGridColor( int r, int g, int b );
// Light probe
void SetLightProbe( CDmxElement *pLightProbe );
// Camera.
int GetCameraFOV( void );
void SetCameraFOV( float flFOV );
void SetCameraPositionAndAngles( const Vector &vecPos, const QAngle &angDir );
void SetCameraOffset( const Vector &vecOffset );
void ResetCameraPivot( void );
void ComputeCameraTransform( matrix3x4_t *pWorldToCamera );
void UpdateCameraTransform();
virtual void ResetView();
// Allow the parent to be notified of mouse actions
void SetParentMouseNotify( bool bParentMouseNotify );
private:
// Inherited classes must implement this
virtual void OnPaint3D() = 0;
protected:
enum ManipulationMode_t
{
CAMERA_ROTATE,
CAMERA_TRANSLATE,
CAMERA_ZOOM,
LIGHT_MODE,
};
virtual void EnterManipulationMode( ManipulationMode_t manipMode, bool bMouseCapture = true, vgui::MouseCode mouseCode = vgui::MouseCode( -1 ) );
void Select();
void AcceptManipulation( bool bReleaseMouseCapture = true );
void CancelManipulation();
void EnableMouseCapture( bool enable, vgui::MouseCode code = vgui::MouseCode( -1 ) );
bool WarpMouse( int &x, int &y );
void CreateDefaultLights();
MaterialLightingState_t m_LightingState;
matrix3x4_t m_LightToWorld[MATERIAL_MAX_LIGHT_COUNT];
IManipulator *m_pCurrentManip;
int m_nManipStartX, m_nManipStartY;
bool HasLightProbe() const;
ITexture *GetLightProbeCubemap( bool bHDR );
void DrawGrid();
CMaterialReference m_Wireframe;
private:
void SetupRenderState( int nDisplayWidth, int nDisplayHeight );
void DestroyLights();
CMaterialReference m_LightProbeBackground;
CMaterialReference m_LightProbeHDRBackground;
CTextureReference m_LightProbeCubemap;
CTextureReference m_LightProbeHDRCubemap;
Camera_t m_Camera;
matrix3x4_t m_CameraPivot;
Color m_ClearColor;
Color m_GridColor;
Vector m_vecCameraOffset;
CRotationManipulator *m_pCameraRotate;
CTranslationManipulator *m_pCameraTranslate;
CZoomManipulator *m_pCameraZoom;
CPotteryWheelManip *m_pLightManip;
vgui::MouseCode m_nCaptureMouseCode;
int m_xoffset, m_yoffset;
bool m_bHasLightProbe : 1;
bool m_bParentMouseNotify : 1;
CPanelAnimationVar( bool, m_bUseParentBG, "useparentbg", "0" );
};
#endif // SIMPLEPOTTERYWHEELPANEL_H