You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
3.4 KiB
129 lines
3.4 KiB
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================
|
|
|
|
#ifndef MANIPULATOR_H
|
|
#define MANIPULATOR_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "vgui_controls/Panel.h"
|
|
#include "mathlib/vector.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Manipulator interface
|
|
//-----------------------------------------------------------------------------
|
|
class IManipulator
|
|
{
|
|
public:
|
|
virtual ~IManipulator(){}
|
|
virtual void OnBeginManipulation( void ) = 0;
|
|
virtual void OnAcceptManipulation( void ) = 0;
|
|
virtual void OnCancelManipulation( void ) = 0;
|
|
|
|
virtual void OnTick( void ) = 0;
|
|
|
|
virtual void OnCursorMoved( int x, int y ) = 0;
|
|
virtual void OnMousePressed( vgui::MouseCode code, int x, int y ) = 0;
|
|
virtual void OnMouseReleased( vgui::MouseCode code, int x, int y ) = 0;
|
|
virtual void OnMouseWheeled( int delta ) = 0;
|
|
|
|
virtual void SetViewportSize( int w, int h ) = 0;
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Base class helper for implementing manipulators
|
|
//-----------------------------------------------------------------------------
|
|
class CBaseManipulator : public IManipulator
|
|
{
|
|
public:
|
|
CBaseManipulator()
|
|
{
|
|
m_nViewport[ 0 ] = m_nViewport[ 1 ] = 0;
|
|
}
|
|
|
|
virtual void OnTick( void ) {};
|
|
|
|
virtual void OnBeginManipulation( void ) {}
|
|
virtual void OnAcceptManipulation( void ) {};
|
|
virtual void OnCancelManipulation( void ) {};
|
|
|
|
virtual void OnCursorMoved( int x, int y ) {};
|
|
virtual void OnMousePressed( vgui::MouseCode code, int x, int y ) {};
|
|
virtual void OnMouseReleased( vgui::MouseCode code, int x, int y ) {};
|
|
virtual void OnMouseWheeled( int delta ) {};
|
|
|
|
virtual void SetViewportSize( int w, int h )
|
|
{
|
|
m_nViewport[ 0 ] = w;
|
|
m_nViewport[ 1 ] = h;
|
|
}
|
|
|
|
protected:
|
|
int m_nViewport[ 2 ];
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Base class for manipulators which operate on transforms
|
|
//-----------------------------------------------------------------------------
|
|
class CTransformManipulator : public CBaseManipulator
|
|
{
|
|
public:
|
|
CTransformManipulator( matrix3x4_t *pTransform );
|
|
|
|
void SetTransform( matrix3x4_t *transform );
|
|
matrix3x4_t *GetTransform();
|
|
|
|
protected:
|
|
matrix3x4_t *m_pTransform;
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Standard maya-like transform manipulator
|
|
//-----------------------------------------------------------------------------
|
|
class CPotteryWheelManip : public CTransformManipulator
|
|
{
|
|
public:
|
|
CPotteryWheelManip( matrix3x4_t *pTransform );
|
|
|
|
virtual void OnBeginManipulation( void );
|
|
virtual void OnAcceptManipulation( void );
|
|
virtual void OnCancelManipulation( void );
|
|
|
|
virtual void OnTick( void );
|
|
|
|
virtual void OnCursorMoved( int x, int y );
|
|
virtual void OnMousePressed( vgui::MouseCode code, int x, int y );
|
|
virtual void OnMouseReleased( vgui::MouseCode code, int x, int y );
|
|
virtual void OnMouseWheeled( int delta );
|
|
|
|
// Sets the zoom level
|
|
void SetZoom( float flZoom );
|
|
|
|
protected:
|
|
int m_lastx, m_lasty;
|
|
|
|
float m_zoom;
|
|
float m_altitude, m_azimuth;
|
|
//vec3 m_lookat
|
|
|
|
float m_prevZoom;
|
|
float m_prevAltitude, m_prevAzimuth;
|
|
|
|
float m_flLastMouseTime;
|
|
float m_flLastTickTime;
|
|
float m_flSpin;
|
|
bool m_bSpin;
|
|
|
|
void UpdateTransform( void );
|
|
void UpdateZoom( float delta );
|
|
};
|
|
|
|
|
|
#endif // MANIPULATOR_H
|