//============================================================================= // 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 }
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 }