// WalkDlg.cpp : : Implementation file
//

#include "stdafx.h"
#include "RemoteTest.h"
#include "WalkDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CWalkDlg  dialog


CWalkDlg::CWalkDlg(CVAIBO *vaibo, CWnd* pParent /*=NULL*/)
	: CDialog(CWalkDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CWalkDlg)
	m_nForward = 0;
	m_nBack = 0;
	m_nLeft = 0;
	m_nRight = 0;
	//}}AFX_DATA_INIT
	m_bParam = FALSE;
	m_vaibo = vaibo;
	m_pParent = pParent;
}


void CWalkDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CWalkDlg)
	DDX_Control(pDX, IDC_COMBO_WALK_EX, m_WlakStyle);
	DDX_Text(pDX, IDC_EDIT_FORWARD, m_nForward);
	DDX_Text(pDX, IDC_EDIT_BACK, m_nBack);
	DDX_Text(pDX, IDC_EDIT_LEFT, m_nLeft);
	DDV_MinMaxUInt(pDX, m_nLeft, 0, 360);
	DDX_Text(pDX, IDC_EDIT_RIGHT, m_nRight);
	DDV_MinMaxUInt(pDX, m_nRight, 0, 360);
	DDX_Control(pDX, IDC_COMBO_TARGET, m_comboTarget);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CWalkDlg, CDialog)
	//{{AFX_MSG_MAP(CWalkDlg)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_BTN_FORWARD, OnBtnForward)
	ON_BN_CLICKED(IDC_BTN_BACK, OnBtnBack)
	ON_BN_CLICKED(IDC_BTN_LEFT, OnBtnLeft)
	ON_BN_CLICKED(IDC_BTN_RIGHT, OnBtnRight)
	ON_BN_CLICKED(IDC_BTN_STOP, OnBtnStop)
	ON_BN_CLICKED(IDC_CHK_PARAM, OnCheckParam)
	ON_BN_CLICKED(IDC_RADIO_SLOW, OnRadioSlow)
	ON_BN_CLICKED(IDC_RADIO_NORMAL, OnRadioNormal)
	ON_BN_CLICKED(IDC_RADIO_FAST, OnRadioFast)
	ON_CBN_SELCHANGE(IDC_COMBO_WALK_EX, OnSelchangeComboWalkEx)
	ON_BN_CLICKED(IDC_BTN_LEFT_CIRCLE, OnBtnLeftCircle)
	ON_BN_CLICKED(IDC_BTN_RIGHT_CIRCLE, OnBtnRightCircle)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CWalkDlg message handlers

void CWalkDlg::OnDestroy()
{
	CDialog::OnDestroy();
}

void CWalkDlg::OnBtnForward()
{
	int		speed;

	UpdateData();
	speed = GetCheckedRadioButton( IDC_RADIO_SLOW, IDC_RADIO_FAST );
	int nWlakStyle = m_WlakStyle.GetCurSel();

	if ( m_bParam ) {
		if (nWlakStyle == 0) {	// normal
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_FORWARD_SLOW, 0, m_nForward );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_FORWARD, 0, m_nForward );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_FORWARD_FAST, 0, m_nForward );
				break;
			}
		} else if (nWlakStyle == 1) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_FORWARD_CSLOW, 0, m_nForward );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_FORWARD_CNORMAL, 0, m_nForward );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_FORWARD_CFAST, 0, m_nForward );
				break;
			}
		} else if (nWlakStyle == 2) {
			DoWalking( DW_FORWARD_SMALL, 0, m_nForward );
		} else if (nWlakStyle == 3) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_FORWARD_CAREFUL, 0, m_nForward );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_FORWARD_CAREFUL, 0, m_nForward );break;
				case IDC_RADIO_FAST   :DoWalking( DW_FORWARD_FASTCAREFUL, 0, m_nForward );break;
			}
		} else if (nWlakStyle == 4) {
			DoWalking( DW_FORWARD_BABY, 0, m_nForward );
		} else if (nWlakStyle == 5) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_FORWARD_KSLOW, 0, m_nForward );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_FORWARD_KNORMAL, 0, m_nForward );break;
				case IDC_RADIO_FAST   :DoWalking( DW_FORWARD_KNORMAL, 0, m_nForward );break;
			}
		}
	} else {
		if (nWlakStyle == 0) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_FORWARD_SLOW );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_FORWARD );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_FORWARD_FAST );
				break;
			}
		} else if (nWlakStyle == 1) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_FORWARD_CSLOW );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_FORWARD_CNORMAL );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_FORWARD_CFAST );
				break;
			}
		} else if (nWlakStyle == 2) {
			DoWalking( DW_FORWARD_SMALL );
		} else if (nWlakStyle == 3) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_FORWARD_CAREFUL );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_FORWARD_CAREFUL );break;
				case IDC_RADIO_FAST   :DoWalking( DW_FORWARD_FASTCAREFUL );break;
			}
		} else if (nWlakStyle == 4) {
			DoWalking( DW_FORWARD_BABY );
		} else if (nWlakStyle == 5) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_FORWARD_KSLOW );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_FORWARD_KNORMAL );break;
				case IDC_RADIO_FAST   :DoWalking( DW_FORWARD_KNORMAL );break;
			}
		}
	}
	m_walkKind = DW_FORWARD;

	// Send a message for the movement to the 3D model display.
	float	fSpeed = 0.0f;
	switch ( speed ) {
		case IDC_RADIO_SLOW :
			fSpeed = 2.0f;
			break;
		case IDC_RADIO_NORMAL :
			fSpeed = 4.0f;
			break;
		case IDC_RADIO_FAST :
			fSpeed = 8.0f;
			break;
	}
	::SendMessage( m_pParent->m_hWnd, WM_REMOTETEST_MOVEAIBO3D, 1, ( LPARAM )fSpeed );

}

void CWalkDlg::OnBtnBack()
{
	UpdateData();
	int	speed = GetCheckedRadioButton( IDC_RADIO_SLOW, IDC_RADIO_FAST );
	int nWlakStyle = m_WlakStyle.GetCurSel();
	if ( m_bParam ) {
		if (nWlakStyle == 0) {
			DoWalking( DW_BACK, 0, m_nBack );
		} else if (nWlakStyle == 1) {
			switch ( speed ) {
				case IDC_RADIO_NORMAL :DoWalking( DW_BACK_CNORMAL, 0, m_nBack );break;
			}
		} else if (nWlakStyle == 2) {
			DoWalking( DW_BACK_SMALL, 0, m_nBack );
		} else if (nWlakStyle == 3) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_BACK_CAREFUL, 0, m_nBack );
				case IDC_RADIO_NORMAL :DoWalking( DW_BACK_CAREFUL, 0, m_nBack );
			}
		} else if (nWlakStyle == 4) {
			DoWalking( DW_BACK_BABY, 0, m_nBack );
		} else if (nWlakStyle == 5) {
			switch ( speed ) {
				case IDC_RADIO_NORMAL :DoWalking( DW_BACK_KNORMAL, 0, m_nBack );
				case IDC_RADIO_FAST   :DoWalking( DW_BACK_KNORMAL, 0, m_nBack );
			}
		}
	} else {
		if (nWlakStyle == 0) {
			DoWalking( DW_BACK );
		} else if (nWlakStyle == 1) {
			switch ( speed ) {
				case IDC_RADIO_NORMAL :DoWalking( DW_BACK_CNORMAL );break;
			}
		} else if (nWlakStyle == 2) {
			DoWalking( DW_BACK_SMALL );
		} else if (nWlakStyle == 3) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_BACK_CAREFUL );
				case IDC_RADIO_NORMAL :DoWalking( DW_BACK_CAREFUL );
			}
		} else if (nWlakStyle == 4) {
			DoWalking( DW_BACK_BABY );
		} else if (nWlakStyle == 5) {
			switch ( speed ) {
				case IDC_RADIO_NORMAL :DoWalking( DW_BACK_KNORMAL );
				case IDC_RADIO_FAST   :DoWalking( DW_BACK_KNORMAL );
			}
		}
	}
	m_walkKind = -1;


	float	fSpeed = 0.0f;
	switch ( speed ) {
		case IDC_RADIO_SLOW :
			fSpeed = -2.0f;
			break;
		case IDC_RADIO_NORMAL :
			fSpeed = -4.0f;
			break;
		case IDC_RADIO_FAST :
			fSpeed = -8.0f;
			break;
	}
	::SendMessage( m_pParent->m_hWnd, WM_REMOTETEST_MOVEAIBO3D, 1, ( LPARAM )fSpeed );
}

void CWalkDlg::OnBtnLeft()
{
	int		speed;

	UpdateData();
	speed = GetCheckedRadioButton( IDC_RADIO_SLOW, IDC_RADIO_FAST );
	int nWlakStyle = m_WlakStyle.GetCurSel();
	if ( m_bParam ) {
		if (nWlakStyle == 0) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_TURN_LEFT_SLOW, m_nLeft, 0 );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_TURN_LEFT, m_nLeft, 0 );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_TURN_LEFT_FAST, m_nLeft, 0 );
				break;
			}
		} else if (nWlakStyle == 1) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_TURN_LEFT_CSLOW, m_nLeft, 0 );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_TURN_LEFT_CNORMAL, m_nLeft, 0 );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_TURN_LEFT_CFAST, m_nLeft, 0 );
				break;
			}
		} else if (nWlakStyle == 2) {
			DoWalking( DW_TURN_LEFT_SMALL, m_nLeft, 0 );
		} else if (nWlakStyle == 3) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_TURN_LEFT_CAREFUL, m_nLeft, 0 );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_TURN_LEFT_CAREFUL, m_nLeft, 0 );break;
				case IDC_RADIO_FAST   :DoWalking( DW_TURN_LEFT_FASTCAREFUL, m_nLeft, 0 );break;
			}
		} else if (nWlakStyle == 4) {
			DoWalking( DW_TURN_LEFT_BABY, m_nLeft, 0 );
		} else if (nWlakStyle == 5) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_TURN_LEFT_KSLOW, m_nLeft, 0 );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_TURN_LEFT_KNORMAL, m_nLeft, 0 );break;
				case IDC_RADIO_FAST   :DoWalking( DW_TURN_LEFT_KNORMAL, m_nLeft, 0 );break;
			}
		} else if (nWlakStyle == 6) {
			DoWalking( DW_CIRCLE_LEFT_NORMAL, m_nLeft, 0 );
		}
	} else {
		if (nWlakStyle == 0) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_TURN_LEFT_SLOW );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_TURN_LEFT );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_TURN_LEFT_FAST );
				break;
			}
		} else if (nWlakStyle == 1) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_TURN_LEFT_CSLOW );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_TURN_LEFT_CNORMAL );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_TURN_LEFT_CFAST );
				break;
			}
		} else if (nWlakStyle == 2) {
			DoWalking( DW_TURN_LEFT_SMALL );
		} else if (nWlakStyle == 3) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_TURN_LEFT_CAREFUL );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_TURN_LEFT_CAREFUL );break;
				case IDC_RADIO_FAST   :DoWalking( DW_TURN_LEFT_FASTCAREFUL );break;
			}
		} else if (nWlakStyle == 4) {
			DoWalking( DW_TURN_LEFT_BABY );
		} else if (nWlakStyle == 5) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_TURN_LEFT_KSLOW );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_TURN_LEFT_KNORMAL );break;
				case IDC_RADIO_FAST   :DoWalking( DW_TURN_LEFT_KNORMAL );break;
			}
		} else if (nWlakStyle == 6) {
			DoWalking( DW_CIRCLE_LEFT_NORMAL );
		}
	}
	m_walkKind = DW_TURN_LEFT;

	float	fSpeed = 0.0f;
	switch ( speed ) {
		case IDC_RADIO_SLOW :
			fSpeed = 5.0f;
			break;
		case IDC_RADIO_NORMAL :
			fSpeed = 10.0f;
			break;
		case IDC_RADIO_FAST :
			fSpeed = 20.0f;
			break;
	}
	::SendMessage( m_pParent->m_hWnd, WM_REMOTETEST_MOVEAIBO3D, 2, ( LPARAM )fSpeed );
}

void CWalkDlg::OnBtnRight()
{
	int		speed;

	UpdateData();
	speed = GetCheckedRadioButton( IDC_RADIO_SLOW, IDC_RADIO_FAST );
	int nWlakStyle = m_WlakStyle.GetCurSel();
	if ( m_bParam ) {
		if (nWlakStyle == 0) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_TURN_RIGHT_SLOW, m_nRight, 0 );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_TURN_RIGHT, m_nRight, 0 );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_TURN_RIGHT_FAST, m_nRight, 0 );
				break;
			}
		} else if (nWlakStyle == 1) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_TURN_RIGHT_CSLOW, m_nRight, 0 );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_TURN_RIGHT_CNORMAL, m_nRight, 0 );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_TURN_RIGHT_CFAST, m_nRight, 0 );
				break;
			}
		} else if (nWlakStyle == 2) {
			DoWalking( DW_TURN_RIGHT_SMALL, m_nRight, 0 );
		} else if (nWlakStyle == 3) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_TURN_RIGHT_CAREFUL, m_nRight, 0 );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_TURN_RIGHT_CAREFUL, m_nRight, 0 );break;
				case IDC_RADIO_FAST   :DoWalking( DW_TURN_RIGHT_FASTCAREFUL, m_nRight, 0 );break;
			}
		} else if (nWlakStyle == 4) {
			DoWalking( DW_TURN_RIGHT_BABY, m_nRight, 0 );
		} else if (nWlakStyle == 5) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_TURN_RIGHT_KSLOW, m_nRight, 0 );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_TURN_RIGHT_KNORMAL, m_nRight, 0 );break;
				case IDC_RADIO_FAST   :DoWalking( DW_TURN_RIGHT_KNORMAL, m_nRight, 0 );break;
			}
		} else if (nWlakStyle == 6) {
			DoWalking( DW_CIRCLE_RIGHT_NORMAL, m_nRight, 0 );
		}
	} else {
		if (nWlakStyle == 0) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_TURN_RIGHT_SLOW );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_TURN_RIGHT );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_TURN_RIGHT_FAST );
				break;
			}
		} else if (nWlakStyle == 1) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_TURN_RIGHT_CSLOW );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_TURN_RIGHT_CNORMAL );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_TURN_RIGHT_CFAST );
				break;
			}
		} else if (nWlakStyle == 2) {
			DoWalking( DW_TURN_RIGHT_SMALL );
		} else if (nWlakStyle == 3) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_TURN_RIGHT_CAREFUL );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_TURN_RIGHT_CAREFUL );break;
				case IDC_RADIO_FAST   :DoWalking( DW_TURN_RIGHT_FASTCAREFUL );break;
			}
		} else if (nWlakStyle == 4) {
			DoWalking( DW_TURN_RIGHT_BABY );
		} else if (nWlakStyle == 5) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_TURN_RIGHT_KSLOW );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_TURN_RIGHT_KNORMAL );break;
				case IDC_RADIO_FAST   :DoWalking( DW_TURN_RIGHT_KNORMAL );break;
			}
		} else if (nWlakStyle == 6) {
			DoWalking( DW_CIRCLE_RIGHT_NORMAL );
		}
	}
	m_walkKind = DW_TURN_RIGHT;

	float	fSpeed = 0.0f;
	switch ( speed ) {
		case IDC_RADIO_SLOW :
			fSpeed = -5.0f;
			break;
		case IDC_RADIO_NORMAL :
			fSpeed = -10.0f;
			break;
		case IDC_RADIO_FAST :
			fSpeed = -20.0f;
			break;
	}
	::SendMessage( m_pParent->m_hWnd, WM_REMOTETEST_MOVEAIBO3D, 2, ( LPARAM )fSpeed );
}

void CWalkDlg::OnBtnStop()
{
	DoWalking( DW_STOP );
	m_walkKind = -1;

	::SendMessage( m_pParent->m_hWnd, WM_REMOTETEST_MOVEAIBO3D, 0, ( LPARAM )0.0f );
}

void CWalkDlg::OnCheckParam()
{
	if ( m_bParam ) {
		m_bParam = false;
		editForward().EnableWindow( false );
		editBack().EnableWindow( false );
		editLeft().EnableWindow( false );
		editRight().EnableWindow( false );
	} else {
		m_bParam = true;
		editForward().EnableWindow();
		editBack().EnableWindow();
		editLeft().EnableWindow();
		editRight().EnableWindow();
	}
}

BOOL CWalkDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	CheckRadioButton( IDC_RADIO_SLOW, IDC_RADIO_FAST, IDC_RADIO_NORMAL );
	m_walkKind = -1;
	m_WlakStyle.SetCurSel(0);
	m_comboTarget.SetCurSel( E_TARGET_ILLEGAL );

	return TRUE;
}

void CWalkDlg::OnRadioSlow()
{
	if ( m_walkKind == DW_FORWARD ) {
		OnBtnForward();
	} else if ( m_walkKind == DW_TURN_LEFT ) {
		OnBtnLeft();
	} else if ( m_walkKind == DW_TURN_RIGHT ) {
		OnBtnRight();
	} else if ( m_walkKind == DW_CIRCLE_LEFT_NORMAL) {
		OnBtnLeftCircle();
	} else if ( m_walkKind == DW_CIRCLE_RIGHT_NORMAL) {
		OnBtnRightCircle();
	}
}

void CWalkDlg::OnRadioNormal()
{
	OnRadioSlow();
}

void CWalkDlg::OnRadioFast()
{
	OnRadioSlow();
}


void CWalkDlg::OnSelchangeComboWalkEx()
{
	UpdateData(TRUE);
	OnRadioSlow();
}

void CWalkDlg::OnBtnLeftCircle()
{
	int		speed;

	UpdateData();
	speed = GetCheckedRadioButton( IDC_RADIO_SLOW, IDC_RADIO_FAST );
	int nWlakStyle = m_WlakStyle.GetCurSel();
	if ( m_bParam ) {
		if (nWlakStyle == 0) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_CIRCLE_LEFT_SLOW, m_nLeft, 0 );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_CIRCLE_LEFT_NORMAL, m_nLeft, 0 );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_CIRCLE_LEFT_FAST, m_nLeft, 0 );
				break;
			}
		} else if (nWlakStyle == 1) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_CIRCLE_LEFT_CSLOW, m_nLeft, 0 );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_CIRCLE_LEFT_CNORMAL, m_nLeft, 0 );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_CIRCLE_LEFT_CFAST, m_nLeft, 0 );
				break;
			}
		} else if (nWlakStyle == 2) {
			DoWalking( DW_CIRCLE_LEFT_SMALL, m_nLeft, 0 );
		} else if (nWlakStyle == 3) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_CIRCLE_LEFT_CAREFUL, m_nLeft, 0 );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_CIRCLE_LEFT_CAREFUL, m_nLeft, 0 );break;
				case IDC_RADIO_FAST   :DoWalking( DW_CIRCLE_LEFT_FASTCAREFUL, m_nLeft, 0 );break;
			}
		} else if (nWlakStyle == 4) {
			DoWalking( DW_CIRCLE_LEFT_BABY, m_nLeft, 0 );
		} else if (nWlakStyle == 5) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_CIRCLE_LEFT_KSLOW, m_nLeft, 0 );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_CIRCLE_LEFT_KNORMAL, m_nLeft, 0 );break;
				case IDC_RADIO_FAST   :DoWalking( DW_CIRCLE_LEFT_KNORMAL, m_nLeft, 0 );break;
			}
		}
	} else {
		if (nWlakStyle == 0) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_CIRCLE_LEFT_SLOW );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_CIRCLE_LEFT_NORMAL );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_CIRCLE_LEFT_FAST );
				break;
			}
		} else if (nWlakStyle == 1) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_CIRCLE_LEFT_CSLOW );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_CIRCLE_LEFT_CNORMAL );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_CIRCLE_LEFT_CFAST );
				break;
			}
		} else if (nWlakStyle == 2) {
			DoWalking( DW_CIRCLE_LEFT_SMALL );
		} else if (nWlakStyle == 3) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_CIRCLE_LEFT_CAREFUL );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_CIRCLE_LEFT_KNORMAL );break;
				case IDC_RADIO_FAST   :DoWalking( DW_CIRCLE_LEFT_FASTCAREFUL );break;
			}
		} else if (nWlakStyle == 4) {
			DoWalking( DW_CIRCLE_LEFT_BABY );
		} else if (nWlakStyle == 5) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_CIRCLE_LEFT_KSLOW );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_CIRCLE_LEFT_KNORMAL );break;
				case IDC_RADIO_FAST   :DoWalking( DW_CIRCLE_LEFT_KNORMAL );break;
			}
		}
	}
	m_walkKind = DW_CIRCLE_LEFT_NORMAL;

	float	fSpeed = 0.0f;
	switch ( speed ) {
		case IDC_RADIO_SLOW :
			fSpeed = 5.0f;
			break;
		case IDC_RADIO_NORMAL :
			fSpeed = 10.0f;
			break;
		case IDC_RADIO_FAST :
			fSpeed = 20.0f;
			break;
	}
	::SendMessage( m_pParent->m_hWnd, WM_REMOTETEST_MOVEAIBO3D, 2, ( LPARAM )fSpeed );
}

void CWalkDlg::OnBtnRightCircle()
{
	int		speed;

	UpdateData();
	speed = GetCheckedRadioButton( IDC_RADIO_SLOW, IDC_RADIO_FAST );
	int nWlakStyle = m_WlakStyle.GetCurSel();
	if ( m_bParam ) {
		if (nWlakStyle == 0) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_CIRCLE_RIGHT_SLOW, m_nRight, 0 );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_CIRCLE_RIGHT_NORMAL, m_nRight, 0 );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_CIRCLE_RIGHT_FAST, m_nRight, 0 );
				break;
			}
		} else if (nWlakStyle == 1) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_CIRCLE_RIGHT_CSLOW, m_nRight, 0 );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_CIRCLE_RIGHT_CNORMAL, m_nRight, 0 );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_CIRCLE_RIGHT_CFAST, m_nRight, 0 );
				break;
			}
		} else if (nWlakStyle == 2) {
			DoWalking( DW_CIRCLE_RIGHT_SMALL, m_nRight, 0 );
		} else if (nWlakStyle == 3) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_CIRCLE_RIGHT_CAREFUL, m_nRight, 0 );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_CIRCLE_RIGHT_CAREFUL, m_nRight, 0 );break;
				case IDC_RADIO_FAST   :DoWalking( DW_CIRCLE_RIGHT_FASTCAREFUL, m_nRight, 0 );break;
			}
		} else if (nWlakStyle == 4) {
			DoWalking( DW_CIRCLE_RIGHT_BABY, m_nRight, 0 );
		} else if (nWlakStyle == 5) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_CIRCLE_RIGHT_KSLOW, m_nRight, 0 );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_CIRCLE_RIGHT_KNORMAL, m_nRight, 0 );break;
				case IDC_RADIO_FAST   :DoWalking( DW_CIRCLE_RIGHT_KNORMAL, m_nRight, 0 );break;
			}
		}
	} else {
		if (nWlakStyle == 0) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_CIRCLE_RIGHT_SLOW );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_CIRCLE_RIGHT_NORMAL );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_CIRCLE_RIGHT_FAST );
				break;
			}
		} else if (nWlakStyle == 1) {
			switch ( speed ) {
			case IDC_RADIO_SLOW :
				DoWalking( DW_CIRCLE_RIGHT_CSLOW );
				break;

			case IDC_RADIO_NORMAL :
				DoWalking( DW_CIRCLE_RIGHT_CNORMAL );
				break;

			case IDC_RADIO_FAST :
				DoWalking( DW_CIRCLE_RIGHT_CFAST );
				break;
			}
		} else if (nWlakStyle == 2) {
			DoWalking( DW_CIRCLE_RIGHT_SMALL );
		} else if (nWlakStyle == 3) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_CIRCLE_RIGHT_CAREFUL );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_CIRCLE_RIGHT_KNORMAL );break;
				case IDC_RADIO_FAST   :DoWalking( DW_CIRCLE_RIGHT_FASTCAREFUL );break;
			}
		} else if (nWlakStyle == 4) {
			DoWalking( DW_CIRCLE_RIGHT_BABY );
		} else if (nWlakStyle == 5) {
			switch ( speed ) {
				case IDC_RADIO_SLOW   :DoWalking( DW_CIRCLE_RIGHT_KSLOW );break;
				case IDC_RADIO_NORMAL :DoWalking( DW_CIRCLE_RIGHT_KNORMAL );break;
				case IDC_RADIO_FAST   :DoWalking( DW_CIRCLE_RIGHT_KNORMAL );break;
			}
		}
	}
	m_walkKind = DW_CIRCLE_RIGHT_NORMAL;

	float	fSpeed = 0.0f;
	switch ( speed ) {
		case IDC_RADIO_SLOW :
			fSpeed = 5.0f;
			break;
		case IDC_RADIO_NORMAL :
			fSpeed = 10.0f;
			break;
		case IDC_RADIO_FAST :
			fSpeed = 20.0f;
			break;
	}
	::SendMessage( m_pParent->m_hWnd, WM_REMOTETEST_MOVEAIBO3D, 2, ( LPARAM )fSpeed );
}

void	CWalkDlg::DoWalking( int walk, int angle, int distance, BOOL waitF )
{
	unsigned long	ulTarget;
	GetTargetID( ulTarget );

	if ( ulTarget == 0xFFFFFFFF ) {
		m_vaibo->DoWalking( walk, angle, distance, waitF );
	}
	else {
		m_vaibo->DoApproach( walk, ulTarget, waitF );
	}
}

void	CWalkDlg::GetTargetID( unsigned long& ulTarget )
{
	switch ( m_comboTarget.GetCurSel() ) {
		case E_TARGET_NONE:
			ulTarget = VAIBO_TARGET_NONE;
			break;
		case E_TARGET_PINK:
			ulTarget = VAIBO_TARGET_PINK;
			break;
		case E_TARGET_BALL:
			ulTarget = VAIBO_TARGET_BALL;
			break;
		case E_TARGET_BONE:
			ulTarget = VAIBO_TARGET_BONE;
			break;
		case E_TARGET_FACE:
			ulTarget = VAIBO_TARGET_FACE;
			break;
		case E_TARGET_CARD:
			ulTarget = VAIBO_TARGET_ECARD1;
			break;
		case E_TARGET_HAND:
			ulTarget = VAIBO_TARGET_HAND;
			break;
		case E_TARGET_ILLEGAL:
		default:
			ulTarget = 0xFFFFFFFF;
			break;
	}
}
