initial
This commit is contained in:
201
public/movieobjects/dmeselection.h
Normal file
201
public/movieobjects/dmeselection.h
Normal file
@ -0,0 +1,201 @@
|
||||
//====== Copyright <20> 1996-2006, Valve Corporation, All rights reserved. =======
|
||||
//
|
||||
// A class representing a subselection of something like a mesh
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DMECOMPONENT_H
|
||||
#define DMECOMPONENT_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/dmattributevar.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeComponent : public CDmElement
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeComponent, CDmElement );
|
||||
|
||||
public:
|
||||
enum Component_t
|
||||
{
|
||||
COMP_INVALID = -1,
|
||||
|
||||
COMP_VTX,
|
||||
COMP_FACE,
|
||||
|
||||
STANDARD_COMP_COUNT
|
||||
};
|
||||
|
||||
// resolve internal data from changed attributes
|
||||
virtual void Resolve();
|
||||
|
||||
// What type of component is this
|
||||
Component_t Type() const;
|
||||
|
||||
// How many pieces are in this component
|
||||
virtual int Count() const;
|
||||
|
||||
// Are there no pieces in this component
|
||||
bool IsEmpty() const;
|
||||
|
||||
// Are all possible pieces in this component
|
||||
bool IsComplete() const;
|
||||
|
||||
// Is this an equivalent component to another component
|
||||
virtual bool IsEqual( const CDmeComponent *pRhs ) const;
|
||||
|
||||
// Reset to an empty selection
|
||||
virtual void Clear();
|
||||
|
||||
protected:
|
||||
|
||||
CDmaVar< int > m_Type;
|
||||
CDmaVar< bool > m_bComplete;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// The default type is invalid
|
||||
//-----------------------------------------------------------------------------
|
||||
inline CDmeComponent::Component_t CDmeComponent::Type() const
|
||||
{
|
||||
const int type( m_Type.Get() );
|
||||
if ( type < 0 || type >= STANDARD_COMP_COUNT )
|
||||
return COMP_INVALID;
|
||||
|
||||
return static_cast< Component_t >( type );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Are there no pieces in this component
|
||||
//-----------------------------------------------------------------------------
|
||||
inline int CDmeComponent::Count() const
|
||||
{
|
||||
Assert( 0 );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Are there no pieces in this component
|
||||
//-----------------------------------------------------------------------------
|
||||
inline bool CDmeComponent::IsEmpty() const
|
||||
{
|
||||
return Count() == 0;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Are all possible pieces in this component
|
||||
//-----------------------------------------------------------------------------
|
||||
inline bool CDmeComponent::IsEqual( const CDmeComponent *pRhs ) const
|
||||
{
|
||||
return Type() == pRhs->Type() && Count() == pRhs->Count() && IsComplete() == pRhs->IsComplete();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Are all possible pieces in this component
|
||||
//-----------------------------------------------------------------------------
|
||||
inline bool CDmeComponent::IsComplete() const
|
||||
{
|
||||
return m_bComplete.Get();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Reset to an empty selection
|
||||
//-----------------------------------------------------------------------------
|
||||
inline void CDmeComponent::Clear()
|
||||
{
|
||||
m_bComplete.Set( false );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDmeSingleIndexedComponent : public CDmeComponent
|
||||
{
|
||||
DEFINE_ELEMENT( CDmeSingleIndexedComponent, CDmeComponent );
|
||||
|
||||
public:
|
||||
// resolve internal data from changed attributes
|
||||
virtual void Resolve();
|
||||
|
||||
// From CDmeComponent
|
||||
virtual int Count() const;
|
||||
|
||||
bool SetType( Component_t type );
|
||||
|
||||
void AddComponent( int component, float weight = 1.0f );
|
||||
|
||||
void AddComponents( const CUtlVector< int > &components );
|
||||
|
||||
void AddComponents( const CUtlVector< int > &components, const CUtlVector< float > &weights );
|
||||
|
||||
void RemoveComponent( int component );
|
||||
|
||||
bool GetComponent( int index, int &component, float &weight ) const;
|
||||
|
||||
bool GetWeight( int component, float &weight ) const;
|
||||
|
||||
void GetComponents( CUtlVector< int > &components ) const;
|
||||
|
||||
void GetComponents( CUtlVector< int > &components, CUtlVector< float > &weights ) const;
|
||||
|
||||
void SetComplete( int nComplete );
|
||||
|
||||
int GetComplete() const;
|
||||
|
||||
bool HasComponent( int component ) const;
|
||||
|
||||
virtual void Clear();
|
||||
|
||||
void Add( const CDmeSingleIndexedComponent &rhs );
|
||||
|
||||
void Add( const CDmeSingleIndexedComponent *pRhs ) { Assert( pRhs ); Add( *pRhs ); }
|
||||
|
||||
void Union( const CDmeSingleIndexedComponent &rhs ) { Add( rhs ); }
|
||||
|
||||
void Union( const CDmeSingleIndexedComponent *pRhs ) { Assert( pRhs ); Add( *pRhs ); }
|
||||
|
||||
CDmeSingleIndexedComponent &operator+=( const CDmeSingleIndexedComponent &rhs ) { Add( rhs ); return *this; }
|
||||
|
||||
void Subtract( const CDmeSingleIndexedComponent &rhs );
|
||||
|
||||
void Subtract( const CDmeSingleIndexedComponent *pRhs ) { Assert( pRhs ); Subtract( *pRhs ); }
|
||||
|
||||
void Complement( const CDmeSingleIndexedComponent &rhs ) { Subtract( rhs ); }
|
||||
|
||||
void Complement( const CDmeSingleIndexedComponent *pRhs ) { Assert( pRhs ); Subtract( *pRhs ); }
|
||||
|
||||
CDmeSingleIndexedComponent &operator-=( const CDmeSingleIndexedComponent &rhs ) { Subtract( rhs ); return *this; }
|
||||
|
||||
void Intersection( const CDmeSingleIndexedComponent &rhs );
|
||||
|
||||
void Intersection( const CDmeSingleIndexedComponent *pRhs ) { Assert( pRhs ); Intersection( *pRhs ); }
|
||||
|
||||
protected:
|
||||
int BinarySearch( int component ) const;
|
||||
|
||||
CDmaVar< int > m_CompleteCount;
|
||||
CDmaArray< int > m_Components;
|
||||
CDmaArray< float > m_Weights;
|
||||
};
|
||||
|
||||
|
||||
#endif // DMECOMPONENT_H
|
Reference in New Issue
Block a user