////////////////////////////////////////////////////////////////////////////////
//
// Copyright 2016 RWS Inc, All Rights Reserved
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of version 2 of the GNU General Public License as published by
// the Free Software Foundation
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
// InputSettings.cpp
// Project: Nostril (aka Postal)
//
// History:
//		03/31/97 JMI	Started.
//
//		04/25/97	JMI	Added execute input.
//
//		05/13/97	JMI	Changed 'Run' to 'Walk'.
//							Also, added 'Suicide' and 'NextLevel'.
//
//		05/14/97	JMI	Changed key description of Next Level to "NextLevel" b/c
//							prefs does not seem to handle spaces in the var name
//							correctly.
//
//		05/14/97	JMI	Added pick up.
//
//		06/09/97	JMI	Swapped default keys for Strafe and Fire.
//
//		06/10/97	JMI	Changed m_dDegreesPerSec to m_dMovingSlowDegreesPerSec and
//							added m_dMovingFastDegreesPerSec, m_dStillSlowDegreesPerSec,
//							m_dStillFastDegreesPerSec, and m_sTapRotationDegrees.
//
//		06/15/97 MJR	Removed NextLevel.
//
//		07/03/97	JMI	Moved InputInfo and ms_ainputinfo into CInputSettings.
//
//		07/06/97	JMI	Changed m_au8PlayKeys[] from a U8 array to a short array,
//							m_asPlayKeys[].
//							Also, changed g_apszButtonDescriptions to 
//							g_apszMouseButtonDescriptions.
//							Also, changed m_asPlayButtons to m_asPlayMouseButtons.
//
//		07/07/97	JMI	Added m_dMouseSensitivityX and m_dMouseSensitivityY.
//
//		07/16/97	JMI	Added Weapon10 enum.
//
//		07/25/97	JMI	Removed PickUp enum and associated array entries.
//
//		08/04/97	JMI	Added DefaultRotations().
//							Also, rotations (except for tap) were not saving with the
//							same var names they were loading with.  Fixed.
//
//		08/10/97	JMI	Changed defaults for mouse buttons to typical Doom mouse 
//							player style.
//							Added StrafeLeft and StrafeRight inputs.
//							Also, changed Jump to Revive.
//
//		08/12/97	JMI	Removed StrafeLeft and StrafeRight inputs.  Replaced with
//							Strafe2 which can get you the same thing if you combine 
//							both strafes with an turn arrow key.
//							Also, added Run2 which is handy for similar reasons.
//
//		08/24/97	JMI	Moved Execute and Suicide to before the weapons and changed
//							the weapon descriptions to reflect the actual weapons.
//							Also, changed 'No Weapon' to be weapon 0 and 'Mines' to be
//							weapon 10.
//							Also, changed names for Strafe to Strafe1 and Run to Run1.
//
//		08/27/97	JMI	Changed Run1 to Run, Run2 to Run_, Strafe1 to Strafe, and
//							Strafe2 to Strafe_.  The reason I don't want to set them
//							to the same value is b/c these are the values used to 
//							write them to the INI and have to be different.  The deal
//							with using the _ is that it doesn't show up in Smash.fnt
//							so it looks fine.  Cheezy, I know, but quick 
//							implementation!
//
//		08/27/97	JMI	Changed Run_ to Run. and Strafe_ to Strafe. .
//
//		08/27/97	JMI	Added pszSaveName to InputInfo.  Now saves using 
//							pszSaveName.
//
//		08/27/97	JMI	Added Fire2.
//
//		10/10/97	JMI	Added m_sUseJoystick, JoyButtons, InputInfo.sJoyButtons.
//
//////////////////////////////////////////////////////////////////////////////
//
// Implementation for CInputSettings object.  Each instance contains settings
// for Postal input.
//
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// C Headers -- Must be included before RSPiX.h b/c RSPiX utilizes SHMalloc.
//////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// RSPiX Headers.
///////////////////////////////////////////////////////////////////////////////
#include "RSPiX.h"

///////////////////////////////////////////////////////////////////////////////
// Postal Headers.
///////////////////////////////////////////////////////////////////////////////

#include "InputSettings.h"
#include "game.h"
#include "keys.h"

#include <kos.h>

//////////////////////////////////////////////////////////////////////////////
// Module specific macros.
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// Module specific typedefs.
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// Exported (extern) variables.
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// Module specific (static) variables / Instantiate class statics.
//////////////////////////////////////////////////////////////////////////////

// Assisted/Standard
CInputSettings::InputInfo	CInputSettings::ms_ainputinfo[CInputSettings::NumInputFunctions]	=
	{	// Description			Save Name			Default Joy Button(s)
		//	===========			===========			=====================
		{	"Turn Left",		"Left",				0,					},
		{	"Turn Right",		"Right",			0,					},
		{	"Forward",			"Forward",			0,					},
		{	"Backward",			"Backward",			0,					},
		{	"Up",				"Up",				0,					},
		{	"Down",				"Down",				0,					},
		{	"Left",				"MoveLeft",			0,					},
		{	"Right",			"MoveRight",		0,					},
		{	"Strafe Left",		"StrafeLeft",		0,					},
		{	"Strafe Right",		"StrafeRight",		0,					},
		{	"Walk",				"Run1",				0,					},
		{	"Walk",				"Run2",				0,					},
		{	"Strafe",			"Strafe1",			RSP_JOY_BUT_1,		},
		{	"Strafe",			"Strafe2",			0,					},
		{	"Fire",				"Fire",				RSP_JOY_BUT_17,		},
		{	"Fire",				"Fire2",			0,					},
		{	"Fire Left",		"FireLeft",			0,					},
		{	"Fire Right",		"FireRight",		0,					},
		{	"Fire Up",			"FireUp",			0,					},
		{	"Fire Down",		"FireDown",			0,					},
		{	"Duck",				"Duck",				RSP_JOY_BUT_16,		},
		{	"Rejuvenate",		"Rejuvenate",		RSP_JOY_BUT_2,		},
		{	"Execute",			"Execute",			RSP_JOY_BUT_4,		},
		{	"Suicide",			"Suicide",			RSP_JOY_BUT_3,		},
		{	"Next Level",		"NextLevel",		RSP_JOY_BUT_1,		},
		{	"Next Weapon",		"NextWeapon",		RSP_JOY_BUT_11,		},
		{	"Prev Weapon",		"PrevWeapon",		RSP_JOY_BUT_10,		},
		{	"NoWeapon",			"NoWeapon",			0,					},
		{	"MachineGun",		"MachineGun",		0,					},
		{	"Shotgun",			"Shotgun",			0,					},
		{	"SprayCannon",		"SprayCannon",		0,					},
		{	"Grenades",			"Grenades",			RSP_JOY_BUT_8,		},
		{	"Missiles",			"Missiles",			0,					},
		{	"Heatseekers",		"Heatseekers",		0,					},
		{	"Molotovs",			"Molotovs",			RSP_JOY_BUT_9,		},
		{	"Napalm",			"Napalm",			0,					},
		{	"Flamer",			"Flamer",			0,					},
		{	"Mines",			"Mines",			0,					},
	};

// Assisted-alt
CInputSettings::InputInfo	CInputSettings::ms_ainputinfoalt[CInputSettings::NumInputFunctions]	=
	{	// Description			Save Name			Default Joy Button(s)
		//	===========			===========			=====================
		{	"Turn Left",		"Left",				0,					},
		{	"Turn Right",		"Right",			0,					},
		{	"Forward",			"Forward",			0,					},
		{	"Backward",			"Backward",			0,					},
		{	"Up",				"Up",				0,					},
		{	"Down",				"Down",				0,					},
		{	"Left",				"MoveLeft",			0,					},
		{	"Right",			"MoveRight",		0,					},
		{	"Strafe Left",		"StrafeLeft",		0,					},
		{	"Strafe Right",		"StrafeRight",		0,					},
		{	"Walk",				"Run1",				0,					},
		{	"Walk",				"Run2",				0,					},
		{	"Strafe",			"Strafe1",			RSP_JOY_BUT_16,		},
		{	"Strafe",			"Strafe2",			0,					},
		{	"Fire",				"Fire",				RSP_JOY_BUT_17,		},
		{	"Fire",				"Fire2",			0,					},
		{	"Fire Left",		"FireLeft",			0,					},
		{	"Fire Right",		"FireRight",		0,					},
		{	"Fire Up",			"FireUp",			0,					},
		{	"Fire Down",		"FireDown",			0,					},
		{	"Duck",				"Duck",				RSP_JOY_BUT_1,		},
		{	"Rejuvenate",		"Rejuvenate",		RSP_JOY_BUT_2,		},
		{	"Execute",			"Execute",			RSP_JOY_BUT_4,		},
		{	"Suicide",			"Suicide",			RSP_JOY_BUT_3,		},
		{	"Next Level",		"NextLevel",		RSP_JOY_BUT_1,		},
		{	"Next Weapon",		"NextWeapon",		RSP_JOY_BUT_11,		},
		{	"Prev Weapon",		"PrevWeapon",		RSP_JOY_BUT_10,		},
		{	"NoWeapon",			"NoWeapon",			0,					},
		{	"MachineGun",		"MachineGun",		0,					},
		{	"Shotgun",			"Shotgun",			0,					},
		{	"SprayCannon",		"SprayCannon",		0,					},
		{	"Grenades",			"Grenades",			RSP_JOY_BUT_8,		},
		{	"Missiles",			"Missiles",			0,					},
		{	"Heatseekers",		"Heatseekers",		0,					},
		{	"Molotovs",			"Molotovs",			RSP_JOY_BUT_9,		},
		{	"Napalm",			"Napalm",			0,					},
		{	"Flamer",			"Flamer",			0,					},
		{	"Mines",			"Mines",			0,					},
	};


// Wingman
CInputSettings::InputInfo	CInputSettings::ms_ainputinfowingman[CInputSettings::NumInputFunctions]	=
	{	// Description			Save Name			Default Joy Button(s)
		//	===========			===========			=====================
		{	"Turn Left",		"Left",				0,					},
		{	"Turn Right",		"Right",			0,					},
		{	"Forward",			"Forward",			0,					},
		{	"Backward",			"Backward",			0,					},
		{	"Up",				"Up",				0,					},
		{	"Down",				"Down",				0,					},
		{	"Left",				"MoveLeft",			0,					},
		{	"Right",			"MoveRight",		0,					},
		{	"Strafe Left",		"StrafeLeft",		0,					},
		{	"Strafe Right",		"StrafeRight",		0,					},
		{	"Walk",				"Run1",				0,					},
		{	"Walk",				"Run2",				0,					},
		{	"Strafe",			"Strafe1",			0,					},
		{	"Strafe",			"Strafe2",			0,					},
		{	"Fire",				"Fire",				RSP_JOY_BUT_17,		},
		{	"Fire",				"Fire2",			0,					},
		{	"Fire Left",		"FireLeft",			0,					},
		{	"Fire Right",		"FireRight",		0,					},
		{	"Fire Up",			"FireUp",			0,					},
		{	"Fire Down",		"FireDown",			0,					},
		{	"Duck",				"Duck",				RSP_JOY_BUT_16,		},
		{	"Rejuvenate",		"Rejuvenate",		RSP_JOY_BUT_16,		},
		{	"Execute",			"Execute",			RSP_JOY_BUT_8,		},
		{	"Suicide",			"Suicide",			RSP_JOY_BUT_9,		},
		{	"Next Level",		"NextLevel",		0,					},
		{	"Next Weapon",		"NextWeapon",		RSP_JOY_BUT_11,		},
		{	"Prev Weapon",		"PrevWeapon",		RSP_JOY_BUT_10,		},
		{	"NoWeapon",			"NoWeapon",			0,					},
		{	"MachineGun",		"MachineGun",		0,					},
		{	"Shotgun",			"Shotgun",			0,					},
		{	"SprayCannon",		"SprayCannon",		0,					},
		{	"Grenades",			"Grenades",			0,					},
		{	"Missiles",			"Missiles",			0,					},
		{	"Heatseekers",		"Heatseekers",		0,					},
		{	"Molotovs",			"Molotovs",			0,					},
		{	"Napalm",			"Napalm",			0,					},
		{	"Flamer",			"Flamer",			0,					},
		{	"Mines",			"Mines",			0,					},
	};

// Reversed
CInputSettings::InputInfo	CInputSettings::ms_ainputinforeversed[CInputSettings::NumInputFunctions]	=
	{	// Description			Save Name			Default Joy Button(s)
		//	===========			===========			=====================
		{	"Turn Left",		"Left",				0,					},
		{	"Turn Right",		"Right",			0,					},
		{	"Forward",			"Forward",			0,					},
		{	"Backward",			"Backward",			0,					},
		{	"Up",				"Up",				0,					},
		{	"Down",				"Down",				0,					},
		{	"Left",				"MoveLeft",			0,					},
		{	"Right",			"MoveRight",		0,					},
		{	"Strafe Left",		"StrafeLeft",		0,					},
		{	"Strafe Right",		"StrafeRight",		0,					},
		{	"Walk",				"Run1",				0,					},
		{	"Walk",				"Run2",				0,					},
		{	"Strafe",			"Strafe1",			0,					},
		{	"Strafe",			"Strafe2",			0,					},
		{	"Fire",				"Fire",				RSP_JOY_BUT_16,		},
		{	"Fire",				"Fire2",			0,					},
		{	"Fire Left",		"FireLeft",			0,					},
		{	"Fire Right",		"FireRight",		0,					},
		{	"Fire Up",			"FireUp",			0,					},
		{	"Fire Down",		"FireDown",			0,					},
		{	"Duck",				"Duck",				RSP_JOY_BUT_17,		},
		{	"Rejuvenate",		"Rejuvenate",		RSP_JOY_BUT_17,		},
		{	"Execute",			"Execute",			RSP_JOY_BUT_8,		},
		{	"Suicide",			"Suicide",			RSP_JOY_BUT_9,		},
		{	"Next Level",		"NextLevel",		0,					},
		{	"Next Weapon",		"NextWeapon",		RSP_JOY_BUT_11,		},
		{	"Prev Weapon",		"PrevWeapon",		RSP_JOY_BUT_10,		},
		{	"NoWeapon",			"NoWeapon",			0,					},
		{	"MachineGun",		"MachineGun",		0,					},
		{	"Shotgun",			"Shotgun",			0,					},
		{	"SprayCannon",		"SprayCannon",		0,					},
		{	"Grenades",			"Grenades",			0,					},
		{	"Missiles",			"Missiles",			0,					},
		{	"Heatseekers",		"Heatseekers",		0,					},
		{	"Molotovs",			"Molotovs",			0,					},
		{	"Napalm",			"Napalm",			0,					},
		{	"Flamer",			"Flamer",			0,					},
		{	"Mines",			"Mines",			0,					},
	};

// Twin-Stick
CInputSettings::InputInfo	CInputSettings::ms_ainputinfoextended[CInputSettings::NumInputFunctions]	=
	{	// Description			Save Name			Default Joy Button(s)
		//	===========			===========			=====================
		{	"Turn Left",		"Left",				0,					},
		{	"Turn Right",		"Right",			0,					},
		{	"Forward",			"Forward",			0,					},
		{	"Backward",			"Backward",			0,					},
		{	"Up",				"Up",				0,					},
		{	"Down",				"Down",				0,					},
		{	"Left",				"MoveLeft",			0,					},
		{	"Right",			"MoveRight",		0,					},
		{	"Strafe Left",		"StrafeLeft",		0,					},
		{	"Strafe Right",		"StrafeRight",		0,					},
		{	"Walk",				"Run1",				0,					},
		{	"Walk",				"Run2",				0,					},
		{	"Strafe",			"Strafe1",			0,					},
		{	"Strafe",			"Strafe2",			0,					},
		{	"Fire",				"Fire",				RSP_JOY_BUT_1,		},
		{	"Fire",				"Fire2",			0,					},
		{	"Fire Left",		"FireLeft",			0,					},
		{	"Fire Right",		"FireRight",		0,					},
		{	"Fire Up",			"FireUp",			0,					},
		{	"Fire Down",		"FireDown",			0,					},
		{	"Duck",				"Duck",				RSP_JOY_BUT_3,		},
		{	"Rejuvenate",		"Rejuvenate",		RSP_JOY_BUT_3,		},
		{	"Execute",			"Execute",			RSP_JOY_BUT_5,		},
		{	"Suicide",			"Suicide",			0,					},
		{	"Next Level",		"NextLevel",		0,					},
		{	"Next Weapon",		"NextWeapon",		RSP_JOY_BUT_2,		},
		{	"Prev Weapon",		"PrevWeapon",		RSP_JOY_BUT_4,		},
		{	"NoWeapon",			"NoWeapon",			0,					},
		{	"MachineGun",		"MachineGun",		0,					},
		{	"Shotgun",			"Shotgun",			0,					},
		{	"SprayCannon",		"SprayCannon",		0,					},
		{	"Grenades",			"Grenades",			0,					},
		{	"Missiles",			"Missiles",			0,					},
		{	"Heatseekers",		"Heatseekers",		0,					},
		{	"Molotovs",			"Molotovs",			0,					},
		{	"Napalm",			"Napalm",			0,					},
		{	"Flamer",			"Flamer",			0,					},
		{	"Mines",			"Mines",			0,					},
	};


//////////////////////////////////////////////////////////////////////////////
// Module specific (static) protos.
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// Functions.
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// Set settings to default values
//////////////////////////////////////////////////////////////////////////////
CInputSettings::CInputSettings(void)
{
	// There is a separate function for these so outside sources can default
	// them at anytime.
	DefaultRotations();
	
	m_sUseJoy							= TRUE;

	// Set default inputs (in case no INI is loaded).
	LoadInputSet(Set1);		
}

//////////////////////////////////////////////////////////////////////////////
// Destructor
//////////////////////////////////////////////////////////////////////////////
CInputSettings::~CInputSettings()
	{
	}

void CInputSettings::LoadInputSet(int8_t inputSet)
{		
	CInputSettings::InputInfo *set;

	switch (inputSet)
	{
		// Assisted/standard.
		case JoyButtonSet::Set1:
			set = ms_ainputinfo;
			m_sJoyStartButton = 7;
			m_sJoyMenuUpButton = 8;
			m_sJoyMenuDownButton = 9;
			m_sJoyMenuLeftButton = 10;
			m_sJoyMenuRightButton = 11;
			m_sJoyMenuUpAxis = 3;
			m_sJoyMenuDownAxis = 2;
			m_sJoyMenuLeftAxis = 1;
			m_sJoyMenuRightAxis = 0;
			m_sJoyMenuConfirmButton = 1;
			m_sJoyMenuBackButton = 2;
			m_sJoyMenuBackButton2 = 5;
			m_sJoyMenuDeleteKeybindButton = 5;
		break;

		// Assisted/standard alternate.
		case JoyButtonSet::Set2:
			set = ms_ainputinfoalt;
			m_sJoyStartButton = 7;
			m_sJoyMenuUpButton = 8;
			m_sJoyMenuDownButton = 9;
			m_sJoyMenuLeftButton = 10;
			m_sJoyMenuRightButton = 11;
			m_sJoyMenuUpAxis = 3;
			m_sJoyMenuDownAxis = 2;
			m_sJoyMenuLeftAxis = 1;
			m_sJoyMenuRightAxis = 0;
			m_sJoyMenuConfirmButton = 1;
			m_sJoyMenuBackButton = 2;
			m_sJoyMenuBackButton2 = 5;
			m_sJoyMenuDeleteKeybindButton = 5;
		break;

		// Wingman.
		case JoyButtonSet::Set3:
			set = ms_ainputinfowingman;
			m_sJoyStartButton = 7;
			m_sJoyMenuUpButton = 8;
			m_sJoyMenuDownButton = 9;
			m_sJoyMenuLeftButton = 10;
			m_sJoyMenuRightButton = 11;				
			m_sJoyMenuConfirmButton = 1;
			m_sJoyMenuBackButton = 2;
			m_sJoyMenuBackButton2 = 5;
			m_sJoyMenuUpAxis = 3;
			m_sJoyMenuDownAxis = 2;
			m_sJoyMenuLeftAxis = 1;
			m_sJoyMenuRightAxis = 0;
			m_sJoyMenuDeleteKeybindButton = 5;
		break;

		// Reversed.
		case JoyButtonSet::Set4:
			set = ms_ainputinforeversed;
			m_sJoyStartButton = 7;
			m_sJoyMenuUpButton = 8;
			m_sJoyMenuDownButton = 9;
			m_sJoyMenuLeftButton = 10;
			m_sJoyMenuRightButton = 11;				
			m_sJoyMenuConfirmButton = 1;
			m_sJoyMenuBackButton = 2;
			m_sJoyMenuBackButton2 = 5;
			m_sJoyMenuUpAxis = 3;
			m_sJoyMenuDownAxis = 2;
			m_sJoyMenuLeftAxis = 1;
			m_sJoyMenuRightAxis = 0;
			m_sJoyMenuDeleteKeybindButton = 5;
		break;

		// Twinstick
		case JoyButtonSet::Set5:
			set = ms_ainputinfoextended;
			m_sJoyStartButton = 7;				
			m_sJoyMenuUpAxis = 3;
			m_sJoyMenuDownAxis = 2;
			m_sJoyMenuLeftAxis = 1;
			m_sJoyMenuRightAxis = 0;

			m_sJoyMenuUpAxis2 = 7;
			m_sJoyMenuDownAxis2 = 6;
			m_sJoyMenuLeftAxis2 = 5;
			m_sJoyMenuRightAxis2 = 4;
			
			m_sJoyMenuConfirmButton = 1;
			m_sJoyMenuBackButton = 2;
			m_sJoyMenuBackButton2 = 5;
			m_sJoyMenuConfirmButton2 = 3;
			m_sJoyMenuBackButton3 = 4;

			m_sJoyMenuDeleteKeybindButton = 5;
		break;
	}

	int16_t i;
	for (i = 0; i < NumInputFunctions; i++)
	{		
		m_asPlayJoyButtons[i]	= set[i].sDefJoyButtons;
	}
}

//////////////////////////////////////////////////////////////////////////////
// Read settings that are stored in preference file
//////////////////////////////////////////////////////////////////////////////
int16_t CInputSettings::LoadPrefs(
	RPrefs* pPrefs)
	{
		return 0;		
	}

//////////////////////////////////////////////////////////////////////////////
// Write settings that are stored in preference file
//////////////////////////////////////////////////////////////////////////////
int16_t CInputSettings::SavePrefs(
	RPrefs* pPrefs)
	{
	return 0;
	}

//////////////////////////////////////////////////////////////////////////////
// Load settings that are stored in game file
//////////////////////////////////////////////////////////////////////////////
int16_t CInputSettings::LoadGame(
	RFile* pFile)
	{
	return 0;
	}


//////////////////////////////////////////////////////////////////////////////
// Save settings that are stored in game file
//////////////////////////////////////////////////////////////////////////////
int16_t CInputSettings::SaveGame(
	RFile* pFile)
	{
	return 0;
	}


//////////////////////////////////////////////////////////////////////////////
// Temporarily set settings for demo mode (file is for saving current settings)
//////////////////////////////////////////////////////////////////////////////
int16_t CInputSettings::PreDemo(
	RFile* pFile)
	{
	// Store current keys?

	return 0;
	}


//////////////////////////////////////////////////////////////////////////////
// Restore settings to what they were prior to demo mode
//////////////////////////////////////////////////////////////////////////////
int16_t CInputSettings::PostDemo(
	RFile* pFile)
	{
	// Restore user keys?

	return 0;
	}


///////////////////////////////////////////////////////////////////////////////
// Set rotation values to the defaults.
///////////////////////////////////////////////////////////////////////////////
void CInputSettings::DefaultRotations(void)
	{
	m_dMovingSlowDegreesPerSec		= 400.0;
	m_dMovingFastDegreesPerSec		= 400.0;
	m_dStillSlowDegreesPerSec		= 400.0;
	m_dStillFastDegreesPerSec		= 400.0;
	m_sTapRotationDegrees			= 10;
	}

///////////////////////////////////////////////////////////////////////////////
// Internal functions.
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// EOF
///////////////////////////////////////////////////////////////////////////////
