//=============================================================================
//	eWxJoystick::OnEvent
//-----------------------------------------------------------------------------
void eWxJoystick::OnEvent(wxJoystickEvent& event)
{
#if wxUSE_JOYSTICK
	if(event.GetEventType() == wxEVT_JOY_BUTTON_DOWN || event.GetEventType() == wxEVT_JOY_BUTTON_UP)
	{
		ProcessButton(JB_FIRE, event.ButtonIsDown(), 'f');
	}
	else if(event.GetEventType() == wxEVT_JOY_MOVE)
	{
		int range_x = joy->GetXMax() - joy->GetXMin();
		int range_y = joy->GetYMax() - joy->GetYMin();
		ProcessButton(JB_UP,	event.GetPosition().y < joy->GetYMin() + range_y/4, 'u');
		ProcessButton(JB_DOWN,	event.GetPosition().y > joy->GetYMax() - range_y/4, 'd');
		ProcessButton(JB_LEFT,	event.GetPosition().x < joy->GetXMin() + range_x/4, 'l');
		ProcessButton(JB_RIGHT,	event.GetPosition().x > joy->GetXMax() - range_x/4, 'r');
	}
#endif//wxUSE_JOYSTICK
}
Exemple #2
0
void MyCanvas::OnJoystickEvent(wxJoystickEvent& event)
{
    // We don't have valid (x, y) coordinates for z-move events.
    if ( !event.IsZMove() )
    {
        wxClientDC dc(this);

        wxPoint pt(event.GetPosition());

        // if negative positions are possible then shift everything up
        int xmin = wxGetApp().m_minX;
        int xmax = wxGetApp().m_maxX;
        int ymin = wxGetApp().m_minY;
        int ymax = wxGetApp().m_maxY;
        if (xmin < 0) {
            xmax += abs(xmin);
            pt.x += abs(xmin);
        }
        if (ymin < 0) {
            ymax += abs(ymin);
            pt.y += abs(ymin);
        }

        // Scale to canvas size
        int cw, ch;
        GetSize(&cw, &ch);

        pt.x = (long) (((double)pt.x/(double)xmax) * cw);
        pt.y = (long) (((double)pt.y/(double)ymax) * ch);

        if (xpos > -1 && ypos > -1 && event.IsMove() && event.ButtonIsDown())
        {
            dc.SetPen(*wxBLACK_PEN);
            dc.DrawLine(xpos, ypos, pt.x, pt.y);
        }

        xpos = pt.x;
        ypos = pt.y;
    }

#if wxUSE_STATUSBAR
    wxString buf;
    if (event.ButtonDown())
        buf.Printf(wxT("Joystick (%ld, %ld) #%i Fire!"), xpos, ypos, event.GetButtonChange());
    else
        buf.Printf(wxT("Joystick (%ld, %ld)  "), xpos, ypos);

    /*
        for(int i = 0; i < nButtons; ++i)
        {
            buf += wxString(wxT("[")) +
            ((event.GetButtonState() & (1 << i)) ? wxT("Y") : wxT("N")) + wxString(wxT("]"));
        }
    */

    frame->SetStatusText(buf);
#endif // wxUSE_STATUSBAR

#if wxUSE_SOUND
    if (event.ButtonDown() && wxGetApp().m_fire.IsOk())
    {
        wxGetApp().m_fire.Play();
    }
#endif // wxUSE_SOUND
}