#pragma once

#include "MW4.hpp"

#include "Cultural.hpp"


namespace MechWarrior4
{

	typedef Cultural__Message							WaterCultural__Message;
	typedef Cultural__ClassData							WaterCultural__ClassData;
	typedef Cultural__ExecutionStateEngine				WaterCultural__ExecutionStateEngine;
	typedef Cultural__CreateMessage						WaterCultural__CreateMessage;
	typedef Cultural__GameModel							WaterCultural__GameModel;

class WaterCultural:
	public Cultural
	{
	public:

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance Support
	//

	typedef WaterCultural__CreateMessage				CreateMessage;
	typedef WaterCultural__GameModel					GameModel;
	typedef WaterCultural__ExecutionStateEngine			ExecutionStateEngine;
	typedef WaterCultural__Message						Message;
	typedef WaterCultural__ClassData					ClassData;

    typedef Cultural   BaseClass;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//

	public:
		static void 
			InitializeClass();
		static void	
			TerminateClass();

	public:
		static WaterCultural* 
			Make(CreateMessage *message,ReplicatorID *base_id);

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

		~WaterCultural();

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

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Game Model Support
	//
	public:
		const GameModel*
			GetGameModel()
			{
				Check_Object(this);
				return Cast_Pointer(const GameModel*,gameModelResource.GetPointer());
			}

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

}

