#pragma once

#include <Adept\Entity.hpp>
#include "MW4\rail_move.hpp"
#include "MW4\Path.hpp"
#include <ElementRenderer\LineCloudElement.hpp>
#include <Adept\DropZone.hpp>
#include <MW4\Objective.hpp>
#include <MW4\CameraShip.hpp>
#include <Adept\LightManager.hpp>
#include<Stuff\StuffHeaders.hpp>

typedef Adept::Entity__CreateMessage			EditorWaypoint__CreateMessage;
typedef Adept::Entity__Message					EditorWaypoint__Message;

class EditorWaypoint : public Adept::Entity
{
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//
		typedef EditorWaypoint__CreateMessage				CreateMessage;
		typedef EditorWaypoint__Message						Message;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static EditorWaypoint* 
			Make(
				CreateMessage *message,
				Adept::ReplicatorID *base_id
			);

	protected:
		EditorWaypoint(
			ClassData *class_data,
			CreateMessage *message,
			Adept::ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~EditorWaypoint();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData
			*DefaultData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test Support
	//
	public:
		void
      	TestInstance();

};

class EditorMovementPath;

typedef Adept::Entity__CreateMessage			EditorPathNode__CreateMessage;
typedef Adept::Entity__Message					EditorPathNode__Message;

class EditorPathNode :
	public EditorWaypoint
{
public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//
		typedef EditorPathNode__CreateMessage				CreateMessage;
		typedef EditorPathNode__Message						Message;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static EditorPathNode* 
			Make(
				CreateMessage *message,
				Adept::ReplicatorID *base_id
			);

	protected:
		EditorPathNode(
			ClassData *class_data,
			CreateMessage *message,
			Adept::ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~EditorPathNode();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData
			*DefaultData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test Support
	//
	public:
		void
      	TestInstance();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Class Data
	//
	public:
		Stuff::SlotOf<EditorMovementPath*>	pathSlot;
		int					index;
		EditorPathNode*		nextnode;
		EditorPathNode*		prevnode;

		ElementRenderer::LineCloudElement* m_PathLinkLineCloud;
		Stuff::Point3D	m_PathLinkPointData[2];
		Stuff::RGBAColor m_PathLinkColorData[2];
		unsigned m_PathLinkPointCount;

		void CreateLink();

		void UpdateLinkPointData(bool calledFromOtherNode = false);

		void ShowLink(bool show)
		{
			if (show)
			{
				m_PathLinkLineCloud->SetNeverCullMode();
			}
			else
				m_PathLinkLineCloud->SetAlwaysCullMode();

			m_PathLinkLineCloud->Sync();
		}

		void SetLinkColor(Stuff::RGBAColor rgb)
		{
			m_PathLinkColorData[0] = m_PathLinkColorData[1] = rgb;
		}

		void InsertNode(EditorPathNode* node);
};

typedef Adept::Entity__CreateMessage			EditorMovementPath__CreateMessage;
typedef Adept::Entity__Message					EditorMovementPath__Message;

class EditorMovementPath : public Adept::Entity
{
public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//
		typedef EditorMovementPath__CreateMessage				CreateMessage;
		typedef EditorMovementPath__Message						Message;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static EditorMovementPath* 
			Make(
				CreateMessage *message,
				Adept::ReplicatorID *base_id
			);

	protected:
		EditorMovementPath(
			ClassData *class_data,
			CreateMessage *message,
			Adept::ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~EditorMovementPath();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData
			*DefaultData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test Support
	//
	public:
		void
      	TestInstance();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Class Data
	//
	public:
		Stuff::SlotOf<MechWarrior4::Path*>	pathSlot;
		Stuff::ChainOf<EditorPathNode*> pathNodes;
};

typedef Adept::Entity__CreateMessage			EditorBoundaryNode__CreateMessage;
typedef Adept::Entity__Message					EditorBoundaryNode__Message;

class EditorBoundaryNode :
	public EditorWaypoint
{
public:
		static void
			InitializeClass();
		static void
			TerminateClass();


	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//
		typedef EditorBoundaryNode__CreateMessage				CreateMessage;
		typedef EditorBoundaryNode__Message						Message;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static EditorBoundaryNode* 
			Make(
				CreateMessage *message,
				Adept::ReplicatorID *base_id
			);

	protected:
		EditorBoundaryNode(
			ClassData *class_data,
			CreateMessage *message,
			Adept::ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~EditorBoundaryNode();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData
			*DefaultData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test Support
	//
	public:
		void
      	TestInstance();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Class Data
	//
		int					index;
		EditorBoundaryNode*	nextnode;
		EditorBoundaryNode*	prevnode;
		DynamicArrayOf<Stuff::Vector2DOf<Stuff::Scalar> > *myBoundary;
		EditorBoundaryNode* firstBoundaryNode;

		ElementRenderer::LineCloudElement* m_PathLinkLineCloud;
		Stuff::Point3D	m_PathLinkPointData[2];
		Stuff::RGBAColor m_PathLinkColorData[2];
		unsigned m_PathLinkPointCount;

		void CreateLink();

		void UpdateLinkPointData(bool calledFromOtherNode = false);

		void ShowLink(bool show)
		{
			if (show)
			{
				m_PathLinkLineCloud->SetNeverCullMode();
			}
			else
				m_PathLinkLineCloud->SetAlwaysCullMode();

			m_PathLinkLineCloud->Sync();
		}

		void SetLinkColor(Stuff::RGBAColor rgb)
		{
			m_PathLinkColorData[0] = m_PathLinkColorData[1] = rgb;
		}

		void InsertNode(EditorBoundaryNode* node);

		bool CheckValidPos();
};


// accessed through MW4AI::g_MissionGraph

typedef Adept::Entity__CreateMessage			EditorLatticeNode__CreateMessage;
typedef Adept::Entity__Message					EditorLatticeNode__Message;


class EditorLatticeNode :
	public EditorWaypoint
{
public:
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//
		typedef EditorLatticeNode__CreateMessage				CreateMessage;
		typedef EditorLatticeNode__Message						Message;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static EditorLatticeNode* 
			Make(
				CreateMessage *message,
				Adept::ReplicatorID *base_id
			);

	protected:
		EditorLatticeNode(
			ClassData *class_data,
			CreateMessage *message,
			Adept::ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~EditorLatticeNode();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData
			*DefaultData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test Support
	//
	public:
		void
      	TestInstance();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Class Data
	//
	public:
		MW4AI::CRailNode*	railNode;
};


typedef Adept::Entity__CreateMessage			EditorDropZonePoint__CreateMessage;
typedef Adept::Entity__Message					EditorDropZonePoint__Message;

class EditorDropNode;

class EditorDropZonePoint :
	public EditorWaypoint
{
public:
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//
		typedef EditorDropZonePoint__CreateMessage				CreateMessage;
		typedef EditorDropZonePoint__Message						Message;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static EditorDropZonePoint* 
			Make(
				CreateMessage *message,
				Adept::ReplicatorID *base_id
			);

	protected:
		EditorDropZonePoint(
			ClassData *class_data,
			CreateMessage *message,
			Adept::ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~EditorDropZonePoint();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData
			*DefaultData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test Support
	//
	public:
		void
      	TestInstance();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Class Data
	//
	EditorDropNode* dropNode;
	Stuff::Point3D			offset;

	ElementRenderer::LineCloudElement* m_PointLineCloud;
	Stuff::Point3D	m_PointData[2];
	Stuff::RGBAColor m_PointColorData[2];
	unsigned m_PointCount;

	
	void CreateLink();
	void UpdateLinkPointData();
	void ShowLink(bool show)
	{
		if (show)
		{
			m_PointLineCloud->SetNeverCullMode();
		}
		else
			m_PointLineCloud->SetAlwaysCullMode();

		m_PointLineCloud->Sync();
	}

	void SetLinkColor(Stuff::RGBAColor rgb)
	{
		m_PointColorData[0] = m_PointColorData[1] = rgb;
	}
};


typedef Adept::Entity__CreateMessage			EditorDropNode__CreateMessage;
typedef Adept::Entity__Message					EditorDropNode__Message;


class EditorDropNode :
	public EditorWaypoint
{
public:
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//
		typedef EditorDropNode__CreateMessage				CreateMessage;
		typedef EditorDropNode__Message						Message;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static EditorDropNode* 
			Make(
				CreateMessage *message,
				Adept::ReplicatorID *base_id
			);

	protected:
		EditorDropNode(
			ClassData *class_data,
			CreateMessage *message,
			Adept::ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~EditorDropNode();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData
			*DefaultData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test Support
	//
	public:
		void
      	TestInstance();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Class Data
	//
	public:
		Adept::DropZone*	dropZone;

		Stuff::ChainOf<EditorDropZonePoint*> pointChain;

		void SetDropZone(Adept::DropZone* zone);
		void UpdatePoints();
		void MakePointsResource(const char *resource_name);
};



typedef Adept::Entity__CreateMessage			EditorObjectiveMarker__CreateMessage;
typedef Adept::Entity__Message					EditorObjectiveMarker__Message;


class EditorObjectiveMarker :
	public EditorWaypoint
{
public:
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//
		typedef EditorObjectiveMarker__CreateMessage				CreateMessage;
		typedef EditorObjectiveMarker__Message						Message;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static EditorObjectiveMarker* 
			Make(
				CreateMessage *message,
				Adept::ReplicatorID *base_id
			);

	protected:
		EditorObjectiveMarker(
			ClassData *class_data,
			CreateMessage *message,
			Adept::ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~EditorObjectiveMarker();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData
			*DefaultData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test Support
	//
	public:
		void
      	TestInstance();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Class Data
	//
	public:

		MechWarrior4::Objective*	objective;

		void SetObjective(MechWarrior4::Objective* obj);
};


typedef Adept::Entity__CreateMessage			EditorLight__CreateMessage;
typedef Adept::Entity__Message					EditorLight__Message;

class EditorLight : public Adept::Entity
{
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//
		typedef EditorLight__CreateMessage				CreateMessage;
		typedef EditorLight__Message						Message;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static EditorLight* 
			Make(
				CreateMessage *message,
				Adept::ReplicatorID *base_id
			);

	protected:
		EditorLight(
			ClassData *class_data,
			CreateMessage *message,
			Adept::ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~EditorLight();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData
			*DefaultData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test Support
	//
	public:
		void
      	TestInstance();

		gosFX::Light*
			light;

		gosFX::LightManager::Info
			lightInfo;

		Stuff::Scalar
			lastIntensity;

		void SetColor(Stuff::Scalar Red, Stuff::Scalar Green, Stuff::Scalar Blue);
		void SetLightToWorldMatrix(Stuff::LinearMatrix4D matrix);
		void UpdateLight();
		void LightSwitch();
		void SetLight(gosFX::Light* gosLight = NULL);
};



typedef Adept::Entity__CreateMessage			EditorAmbientLight__CreateMessage;
typedef Adept::Entity__Message					EditorAmbientLight__Message;

class EditorAmbientLight : public EditorLight
{
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//
		typedef EditorAmbientLight__CreateMessage				CreateMessage;
		typedef EditorAmbientLight__Message						Message;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static EditorAmbientLight* 
			Make(
				CreateMessage *message,
				Adept::ReplicatorID *base_id
			);

	protected:
		EditorAmbientLight(
			ClassData *class_data,
			CreateMessage *message,
			Adept::ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~EditorAmbientLight();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData
			*DefaultData;

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


typedef Adept::Entity__CreateMessage			EditorInfiniteLight__CreateMessage;
typedef Adept::Entity__Message					EditorInfiniteLight__Message;

class EditorInfiniteLight : public EditorLight
{
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//
		typedef EditorInfiniteLight__CreateMessage				CreateMessage;
		typedef EditorInfiniteLight__Message						Message;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static EditorInfiniteLight* 
			Make(
				CreateMessage *message,
				Adept::ReplicatorID *base_id
			);

	protected:
		EditorInfiniteLight(
			ClassData *class_data,
			CreateMessage *message,
			Adept::ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~EditorInfiniteLight();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData
			*DefaultData;

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


typedef Adept::Entity__CreateMessage			EditorPointLight__CreateMessage;
typedef Adept::Entity__Message					EditorPointLight__Message;

class EditorPointLight : public EditorLight
{
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//
		typedef EditorPointLight__CreateMessage				CreateMessage;
		typedef EditorPointLight__Message						Message;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static EditorPointLight* 
			Make(
				CreateMessage *message,
				Adept::ReplicatorID *base_id
			);

	protected:
		EditorPointLight(
			ClassData *class_data,
			CreateMessage *message,
			Adept::ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~EditorPointLight();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData
			*DefaultData;

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


typedef Adept::Entity__CreateMessage			EditorSpotLight__CreateMessage;
typedef Adept::Entity__Message					EditorSpotLight__Message;

class EditorSpotLight : public EditorLight
{
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//
		typedef EditorSpotLight__CreateMessage				CreateMessage;
		typedef EditorSpotLight__Message						Message;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static EditorSpotLight* 
			Make(
				CreateMessage *message,
				Adept::ReplicatorID *base_id
			);

	protected:
		EditorSpotLight(
			ClassData *class_data,
			CreateMessage *message,
			Adept::ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~EditorSpotLight();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData
			*DefaultData;

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


typedef Adept::Entity__CreateMessage			EditorCameraShip__CreateMessage;
typedef Adept::Entity__Message					EditorCameraShip__Message;

class EditorCameraShip : public Adept::Entity
{
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//
		typedef EditorCameraShip__CreateMessage				CreateMessage;
		typedef EditorCameraShip__Message						Message;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static EditorCameraShip* 
			Make(
				CreateMessage *message,
				Adept::ReplicatorID *base_id
			);

	protected:
		EditorCameraShip(
			ClassData *class_data,
			CreateMessage *message,
			Adept::ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~EditorCameraShip();

	public:
		MechWarrior4::CameraShip*	cameraShip;


		void SetCameraShip(MechWarrior4::CameraShip* ship);

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData
			*DefaultData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test Support
	//
	public:
		void
      	TestInstance();

};