#pragma once

#include "MW4.hpp"
#include "Subsystem.hpp"
#include <Adept\EntityClassData.hpp>

namespace MechWarrior4
{
	class Entity__ClassData;

	//##########################################################################
	//#####################    Subsystem::ClassData    #########################
	//##########################################################################

	class Subsystem__ClassData:
		public Adept::Entity__ClassData
	{
	public:
		typedef Entity__ClassData			BaseClass;

		Subsystem__ClassData(
			Stuff::RegisteredClass::ClassID class_id,
			const char* class_name,
			Adept::Replicator::ClassData *parent_class,
			int message_count,
			const Adept::Receiver::MessageEntry *message_handlers,
			Adept::Entity::Factory entity_factory,
			Adept::Entity::CreateMessage::Factory message_factory,
			Adept::Entity::ExecutionStateEngine::ClassData *execution_state,
			Adept::Entity::GameModel::Factory model_factory,
			Adept::Entity::GameModel::Factory obb_factory,
			Adept::Entity::GameModel::ReadAndVerifier verifier,
			Adept::Entity::GameModel::ModelWrite model_write_to_text,
			Adept::Entity::GameModel::ModelSave model_save_to_text,
			Subsystem::StreamCreate create_stream
		):
			Adept::Entity__ClassData(
				class_id,
				class_name,
				parent_class,
				message_count,
				message_handlers,
				entity_factory,
				message_factory,
				execution_state,
				model_factory,
				obb_factory,
				verifier,
				model_write_to_text,
				model_save_to_text
			)
		{
			streamCreate = create_stream;
		}

		Subsystem::StreamCreate
			streamCreate;
	};
}