#pragma once

#include "..\munga\subsystm.h"
#include "..\munga\controls.h"

class VTV;

//##########################################################################
//########################    Subsystem    #################################
//##########################################################################

class VTVSubsystem : public Subsystem
{
	friend class VTV;

//##########################################################################
// Shared Data Support
//
public:
	static Derivation *GetClassDerivations();
	static SharedData DefaultData;

//##########################################################################
// Messaging support
//

// No messages handled here

//##########################################################################
// Construction and Destruction Support
//
public:
	~VTVSubsystem();

	Logical TestInstance() const;

protected:
	VTVSubsystem(VTV *entity, int subsystem_id, SubsystemResource *model, SharedData &shared_data, void *control_destination = NULL, Receiver::MessageID message_id = (Receiver::MessageID) 0);

//##########################################################################
// Model support
//
public:
	VTV* GetEntity()	{ return (VTV*)Subsystem::GetEntity(); }

//##########################################################################
// Mapping support
//
protected:
	void EnterConfiguration(ControlsButton *direct_target, Receiver *receiver, Receiver::MessageID active_message_id, Receiver::MessageID config_message_id);
	void ExitConfiguration();

	// 'controlDestination' is a pointer to the "thing" that a button
	// is mapped to (if 'direct-mapped'), and 'controlMessageID' indicates
	// the message ID that the button is mapped to (if 'event-mapped').
	// These values must be set appropriately in order for gauges to be
	// able to determine ownership of mapped buttons.
	void *controlDestination;		// OBSOLETE?

	Receiver::MessageID controlMessageID;	// OBSOLETE?
};
