//===========================================================================//
// File: EntityClassData.hpp                                                 //
//---------------------------------------------------------------------------//
//   Date    Who  Modification                                               //
// --------  ---  ---------------------------------------------------------- //
// 11/29/94  JMA  Initial coding.                                            //
// 08/25/97  JMA  Infrastructure changes												  //
// 08/25/97  ECH	Infrastructure changes												  //
//---------------------------------------------------------------------------//
// Copyright (C) 1994-97, Virtual World Entertainment, Inc.                  //
// All Rights reserved worldwide                                             //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL               //
//===========================================================================//

#pragma once

#include "Adept.hpp"
#include "Replicator.hpp"
#include "Entity.hpp"
#include "Attribute.hpp"
#include "GameModelAttribute.hpp"

namespace Adept {

	//##########################################################################
	//#######################    Entity__ClassData    ##########################
	//##########################################################################

	class Entity__ClassData:
		public Replicator__ClassData
	{
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//
	public:
		Entity__ClassData(
			Stuff::RegisteredClass::ClassID class_id,
			const char* class_name,
			Replicator::ClassData *parent_class,
			int message_count,
			const Receiver::MessageEntry *message_handlers,
			Entity::Factory entity_factory,
			Entity::CreateMessage::Factory message_factory,
			Entity::ExecutionStateEngine::ClassData *execution_state,
			Entity__GameModel::Factory model_factory,
			Entity__GameModel::Factory obb_factory,
			Entity__GameModel::ReadAndVerifier verifier,
			Entity__GameModel::ModelWrite model_write_to_text,
			Entity__GameModel::ModelSave model_save_to_text
		);
		~Entity__ClassData();

		Entity::ExecutionStateEngine::ClassData
			*executionStateClass;
		Entity__GameModel::Factory 
			modelFactory,
			obbFactory;
		Entity__GameModel::ReadAndVerifier
			modelVerifier;
		Entity__GameModel::ModelWrite 
			modelWriteToText;
		Entity__GameModel::ModelSave
			modelSaveToText;
		int
			creationCount;

		AttributeTable
			attributeTable;
		ModelAttributeTable
			gameModelAttributeTable;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//
	public:
		void
			TestInstance();
	};

}
