Exemplo n.º 1
0
void _XWindow_TrainingSpell::Upgrade(void)
{
	m_SuccessPoint = 0;

	DeleteGauge(m_SuccessPoint);

//	m_GaugeGradeImage->SetClipRect(0, 82, (m_SuccessPoint*19), 93);

	m_TrainingGrade++;
	SetBackground(m_WindowPosition.x, m_WindowPosition.y);
	ShowGrade(TRUE);

	ResetMousePos();

	_XPlayInterfaceSound(ID_SR_INTERFACE_TRA_UP01_WAV);
}
Exemplo n.º 2
0
void CLFE_Input::CaptureMouse()
{
    if(NULL == m_pMouseState)
    {
        return;
    }

    m_pMouseState->m_nRelX = 0;
    m_pMouseState->m_nRelY = 0;
    m_pMouseState->m_nRelZ = 0;

    DIDEVICEOBJECTDATA diBuff[MOUSE_DX_BUFFERSIZE];
    DWORD entries = MOUSE_DX_BUFFERSIZE;

    HRESULT hr = m_pMouse->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), diBuff, &entries, 0);
    if( hr != DI_OK )
    {
        hr = m_pMouse->Acquire();
        while( hr == DIERR_INPUTLOST )
            hr = m_pMouse->Acquire();

        hr = m_pMouse->GetDeviceData( sizeof(DIDEVICEOBJECTDATA), diBuff, &entries, 0 );

        if( FAILED(hr) )
        {
            ResetMousePos();
            return;
        }
    }

    bool axesMoved = false;

    for(unsigned int i = 0; i < entries; ++i )
    {
        switch( diBuff[i].dwOfs )
        {
        case DIMOFS_BUTTON0:
            if(!DoMouseClick(0, diBuff[i])) return;
            break;
        case DIMOFS_BUTTON1:
            if(!DoMouseClick(1, diBuff[i])) return;
            break;
        case DIMOFS_BUTTON2:
            if(!DoMouseClick(2, diBuff[i])) return;
            break;
        case DIMOFS_BUTTON3:
            if(!DoMouseClick(3, diBuff[i])) return;
            break;
        case DIMOFS_BUTTON4:
            if(!DoMouseClick(4, diBuff[i])) return;
            break;
        case DIMOFS_BUTTON5:
            if(!DoMouseClick(5, diBuff[i])) return;
            break;
        case DIMOFS_BUTTON6:
            if(!DoMouseClick(6, diBuff[i])) return;
            break;
        case DIMOFS_BUTTON7:
            if(!DoMouseClick(7, diBuff[i])) return;
            break;
        case DIMOFS_X:
            m_pMouseState->m_nRelX += diBuff[i].dwData;
            axesMoved = true;
            break;
        case DIMOFS_Y:
            m_pMouseState->m_nRelY += diBuff[i].dwData;
            axesMoved = true;
            break;
        case DIMOFS_Z:
            m_pMouseState->m_nRelZ += diBuff[i].dwData;
            axesMoved = true;
            break;
        default:
            break;
        } //end switch
    }//end for

    if( axesMoved )
    {
        if( m_dwMouseCoopSetting & DISCL_NONEXCLUSIVE )
        {
            //DirectInput provides us with meaningless values, so correct that
            POINT point;
            GetCursorPos(&point);
            ScreenToClient(m_hWnd, &point);
            m_pMouseState->m_nAbsX = point.x;
            m_pMouseState->m_nAbsY = point.y;
        }
        else
        {
            m_pMouseState->m_nAbsX +=  m_pMouseState->m_nRelX;
            m_pMouseState->m_nAbsY +=  m_pMouseState->m_nRelY;
        }
        m_pMouseState->m_nAbsZ +=  m_pMouseState->m_nRelZ;

        //Clip values to window
        if( m_pMouseState->m_nAbsX < 0 )
            m_pMouseState->m_nAbsX = 0;
        else if( m_pMouseState->m_nAbsX > m_pMouseState->m_nWindowWidth )
            m_pMouseState->m_nAbsX = m_pMouseState->m_nWindowWidth;
        if( m_pMouseState->m_nAbsY < 0 )
            m_pMouseState->m_nAbsY = 0;
        else if( m_pMouseState->m_nAbsY > m_pMouseState->m_nWindowHeight )
            m_pMouseState->m_nAbsY = m_pMouseState->m_nWindowHeight;

        //Do the move
        if( m_pMouseListener && m_bBuffered )
            m_pMouseListener->MouseMoved(m_pMouseState);
    }
}
Exemplo n.º 3
0
BOOL _XWindow_TrainingSpell::Process(_XGUIObject*& pfocusobject)
{
	if(!this->m_Enable)
		return FALSE;

	if(!this->m_ShowWindow)
		return FALSE;

	if(m_bComplete)
	{
		ResetMousePos();
	}

	// TODO
	if((g_LocalSystemTime - m_TrainingStartTime > 1500) && m_TrainingStartTime != 0)
	{
		if(m_PrevMoveTime == 0)
			m_PrevMoveTime = g_LocalSystemTime;

		DWORD elapsedtime = g_LocalSystemTime - m_PrevMoveTime;

		if(m_MouseMoveStartTime > 0)
		{
			// 마우스 입력
			if(!m_bFailPeriod)
			{
				MouseState* mousestate = gpInput->GetMouseState();
				if(mousestate)
				{
					if(mousestate->bButton[0])
					{
						m_LeftClickForce += m_MouseVelocity * 0.005 * elapsedtime;
						m_RightClickForce = 0.0f;

	//					_XDWINPRINT("LEFT CLICK [left : %f]", m_LeftClickForce);
					}
					else
						m_LeftClickForce = 0.0f;
					if(mousestate->bButton[1])
					{
						m_RightClickForce += m_MouseVelocity * 0.005 * elapsedtime;
						m_LeftClickForce = 0.0f;

	//					_XDWINPRINT("RIGHT CLICK [right : %f]", m_RightClickForce);
					}
					else
						m_RightClickForce = 0.0f;
				}

				// 마우스 움직임
				if(g_LocalSystemTime - m_MouseMoveStartTime <= m_MouseForceKeepTime)
				{
					if(m_MouseDir == MOUSE_DIR_LEFT)
					{
						// 왼쪽으로
						FLOAT velocity = m_MouseVelocity + m_LeftClickForce - m_RightClickForce;

	//					_XDWINPRINT("Velocity [left : %f  / right : %f  / total : %f]", m_LeftClickForce, m_RightClickForce, velocity);

						m_MousePosX = m_MousePosX - elapsedtime * 0.1f * velocity;
						m_CurrentMousePos.x = (int)m_MousePosX;
					}
					else
					{
						// 오른쪽으로
						FLOAT velocity = m_MouseVelocity + m_RightClickForce - m_LeftClickForce;

	//					_XDWINPRINT("Velocity [left : %f  / right : %f  / total : %f]", m_LeftClickForce, m_RightClickForce, velocity);

						m_MousePosX = m_MousePosX + elapsedtime * 0.1f * velocity;
						m_CurrentMousePos.x = (int)m_MousePosX;
					}
				}
				else
				{
					if(!m_bFailPeriod)
					{
						m_MouseMoveStartTime = 0;		// Keeptime 지남, 다시 판정
						m_MousePosX = m_CurrentMousePos.x;
					}
					else
					{
						if(g_LocalSystemTime - m_FailStartTime >= 1000)
						{
							_XDWINPRINT("ERROR ===============================");
						}
					}
				}
			}

			BOOL	bInValidArea = FALSE;
			if(!m_bWaitForServerRes)
			{
				// 성공, 실패 판정은 서버로부터의 답을 기다리고 있을 때는 하지 않는다.

				if(m_CurrentMousePos.x >= m_ValidAreaStart && m_CurrentMousePos.x <= m_ValidAreaEnd)
				{
					if(m_StaySuccessAreaTime == 0)
						m_StaySuccessAreaTime = g_LocalSystemTime;

					bInValidArea = TRUE;
					if(g_LocalSystemTime - m_StaySuccessAreaTime > m_StaySuccessKeepTime)
					{
						if(gApp->m_bHasFocus)
							DecideSuccess();
					}
				}
				if(!bInValidArea)
					m_StaySuccessAreaTime = 0;

				if(m_CurrentMousePos.x >= m_MouseEndPos.x-3)
				{
					if(m_FailStartTime == 0)
					{
						_XDWINPRINT("MISS===");
						DecideMiss();
						m_FailStartTime = g_LocalSystemTime;
						m_bFailPeriod = TRUE;
					}
					
					if(g_LocalSystemTime - m_FailStartTime <= 1000)
						m_CurrentMousePos.x = m_MouseEndPos.x;
					else
						ResetMousePos();	// 다시 시작
				}
				if(m_CurrentMousePos.x <= m_MouseStartPos.x+3)
				{
					if(m_FailStartTime == 0)
					{
						_XDWINPRINT("MISS===");
						DecideMiss();
						m_FailStartTime = g_LocalSystemTime;
						m_bFailPeriod = TRUE;
					}
					
					if(g_LocalSystemTime - m_FailStartTime <= 1000)
						m_CurrentMousePos.x = m_MouseStartPos.x;
					else
						ResetMousePos();	// 다시 시작
				}
			}
		}

		if(m_MouseMoveStartTime == 0 && !m_bComplete)
		{
			// 인력, 지속시간, 속도 지정
			DecideMouseProperty();
			m_MouseMoveStartTime = g_LocalSystemTime;
//			_XDWINPRINT("DECIDE MOUSE PROPERTY [Dir : %d / KeepTime : %d / Velocity : %f]", m_MouseDir, m_MouseForceKeepTime, m_MouseVelocity);
		}

		m_PrevMoveTime = g_LocalSystemTime;
	}

	if(!_XWindow_Training::Process(pfocusobject))
		return FALSE;

	return TRUE;
}