#pragma once

#include "terrain.h"

//##########################################################################
//#############################    DoorFrame    ################################
//##########################################################################

class DoorFrame : public UnscalableTerrain
{
public:
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Test Instance support
//
	Logical TestInstance() const;

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Shared Data support
//
public:
	static Derivation *GetClassDerivations();
	static SharedData DefaultData;

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Model support
//
	enum
	{
		BasicSubsystemCount
	};

public:
	typedef void (DoorFrame::*Performance)(Scalar time_slice);

	void SetPerformance(Performance performance)
	{
		Check(this);
		activePerformance = (Simulation::Performance)performance;
	}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Construction and Destruction
//
public:
	static Logical CreateMakeMessage(MakeMessage *creation_message, NotationFile *model_file, const ResourceDirectories *directories);
	static ResourceDescription::ResourceID CreateSubsystemStream(ResourceFile *resource_file, const char *model_name, NotationFile *model_file, const ResourceDirectories *directories);

	static DoorFrame* Make(MakeMessage *creation_message);

	DoorFrame(MakeMessage *creation_message, SharedData &virtual_data = DefaultData);
	~DoorFrame();
};