//========= Copyright Valve Corporation, All rights reserved. ============//
//
// The morph operator class - sets morph target weights on meshes
//
//=============================================================================

#ifndef DMEUNPACKOPERATORS_H
#define DMEUNPACKOPERATORS_H
#ifdef _WIN32
#pragma once
#endif

#include "movieobjects/dmeoperator.h"


//-----------------------------------------------------------------------------
// CDmeUnpackColorOperator - extracts floats from a color
//-----------------------------------------------------------------------------
class CDmeUnpackColorOperator : public CDmeOperator
{
	DEFINE_ELEMENT( CDmeUnpackColorOperator, CDmeOperator );

public:
	virtual bool IsDirty(); // ie needs to operate
	virtual void Operate();

	virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
	virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );

protected:
	CDmaVar< Color > m_color;
	CDmaVar< float> m_red;
	CDmaVar< float> m_green;
	CDmaVar< float> m_blue;
	CDmaVar< float> m_alpha;
};

//-----------------------------------------------------------------------------
// CDmeUnpackVector2Operator - extracts floats from a vector2
//-----------------------------------------------------------------------------
class CDmeUnpackVector2Operator : public CDmeOperator
{
	DEFINE_ELEMENT( CDmeUnpackVector2Operator, CDmeOperator );

public:
	virtual bool IsDirty(); // ie needs to operate
	virtual void Operate();

	virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
	virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );

protected:
	CDmaVar< Vector2D > m_vector;
	CDmaVar< float> m_x;
	CDmaVar< float> m_y;
};

//-----------------------------------------------------------------------------
// CDmeUnpackVector3Operator - extracts floats from a vector
//-----------------------------------------------------------------------------
class CDmeUnpackVector3Operator : public CDmeOperator
{
	DEFINE_ELEMENT( CDmeUnpackVector3Operator, CDmeOperator );

public:
	virtual bool IsDirty(); // ie needs to operate
	virtual void Operate();

	virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
	virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );

protected:
	CDmaVar< Vector > m_vector;
	CDmaVar< float> m_x;
	CDmaVar< float> m_y;
	CDmaVar< float> m_z;
};

//-----------------------------------------------------------------------------
// CDmeUnpackVector4Operator - extracts floats from a vector4
//-----------------------------------------------------------------------------
class CDmeUnpackVector4Operator : public CDmeOperator
{
	DEFINE_ELEMENT( CDmeUnpackVector4Operator, CDmeOperator );

public:
	virtual bool IsDirty(); // ie needs to operate
	virtual void Operate();

	virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
	virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );

protected:
	CDmaVar< Vector4D > m_vector;
	CDmaVar< float> m_x;
	CDmaVar< float> m_y;
	CDmaVar< float> m_z;
	CDmaVar< float> m_w;
};

//-----------------------------------------------------------------------------
// CDmeUnpackQAngleOperator - extracts floats from a qangle
//-----------------------------------------------------------------------------
class CDmeUnpackQAngleOperator : public CDmeOperator
{
	DEFINE_ELEMENT( CDmeUnpackQAngleOperator, CDmeOperator );

public:
	virtual bool IsDirty(); // ie needs to operate
	virtual void Operate();

	virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
	virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );

protected:
	CDmaVar< QAngle > m_qangle;
	CDmaVar< float> m_x;
	CDmaVar< float> m_y;
	CDmaVar< float> m_z;
};

//-----------------------------------------------------------------------------
// CDmeUnpackQuaternionOperator - extracts floats from a quaternion
//-----------------------------------------------------------------------------
class CDmeUnpackQuaternionOperator : public CDmeOperator
{
	DEFINE_ELEMENT( CDmeUnpackQuaternionOperator, CDmeOperator );

public:
	virtual bool IsDirty(); // ie needs to operate
	virtual void Operate();

	virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
	virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );

protected:
	CDmaVar< Quaternion > m_quaternion;
	CDmaVar< float> m_x;
	CDmaVar< float> m_y;
	CDmaVar< float> m_z;
	CDmaVar< float> m_w;
};

//-----------------------------------------------------------------------------
// CDmeUnpackVMatrixOperator - extracts floats from a VMatrix
//-----------------------------------------------------------------------------
class CDmeUnpackVMatrixOperator : public CDmeOperator
{
	DEFINE_ELEMENT( CDmeUnpackVMatrixOperator, CDmeOperator );

public:
	virtual bool IsDirty(); // ie needs to operate
	virtual void Operate();

	virtual void GetInputAttributes ( CUtlVector< CDmAttribute * > &attrs );
	virtual void GetOutputAttributes( CUtlVector< CDmAttribute * > &attrs );

protected:
	CDmaVar< VMatrix > m_vmatrix;
	CDmaVar< float > m_cells[ 16 ];
};


#endif // DMEUNPACKOPERATORS_H