// Node.h

#ifndef _NODE_H_
#define _NODE_H_


#include "Types.h"
#include "Misc.h"
#include "List.h"
#include "Box.h"
#include "TwinVert.h"


typedef enum
{
	NODE_HEAD,
	NODE_JAW,
	NODE_MOUTH,
	NODE_LOWER_LIP,
	NODE_UPPER_LIP,
	NODE_EYES,
	NODE_BROW,
	NODE_COUNT
} ENode;


class CNode
{
	private:

		CList<CBox>
			Tags,
			UnTags;
		CTwinVert
			Base,
			*VertList;
		bool32
			AllTagged;

		bool32 ContainsPoint( Vector3 *v );


	public:

		CList<CBox>
			Shared;
		ENode
			Type;
		s32
			NumVerts,
			*VertNums,
			*Reorder;


		CNode();
		~CNode();

		void Tag( const char *name );
		void UnTag( const char *name );
		void TagAll();
		void SetBase( const char *name );
		void AddShared( const char *name );
		void Grab( const char *name );
		void CalcReorder();
		Vector3 *GetBase( const s32 frame );
		Vector3 *GetVert( const s32 frame, const s32 index );
};


ENode FindNode( const char *name );


#endif
