/// <summary> /// Triggers every time we've got a new target lock, updates the aiming of the rocket launcher to match /// </summary> private void TrackAndFireThread() { _frameLock.WaitOne(); currentCenter[0] = _currentFrame.Size.Width / 2; currentCenter[1] = _currentFrame.Size.Height / 2; _frameLock.Release(); while (_ParticleFilterRunning) { bool centered = _Centered.WaitOne(1000); if (centered) { int[] center = pf.findCenter(); int xoffset = currentCenter[0] - center[0]; int yoffset = currentCenter[1] - center[1]; currentCenter[0] = center[0]; currentCenter[1] = center[1]; if (xoffset > 1) { _Commander.Left(xoffset * _pixelsToMilliseconds); Pause.WaitOne(xoffset * 4); //movements get lost if they're sent too closely together } if (xoffset < 1) { xoffset = Math.Abs(xoffset); _Commander.Right(xoffset * _pixelsToMilliseconds); Pause.WaitOne(xoffset * 4); //movements get lost if they're sent too closely together } if (yoffset > 1) { _Commander.Up(yoffset * _pixelsToMilliseconds); Pause.WaitOne(xoffset * 4); //movements get lost if they're sent too closely together } if (yoffset < 1) { yoffset = Math.Abs(yoffset); _Commander.Down(yoffset * _pixelsToMilliseconds); Pause.WaitOne(xoffset * 4); //movements get lost if they're sent too closely together } Pause.WaitOne(500); //Prevent Jerking motions } } }
private void Button_Click(object sender, EventArgs e) { Button button = (Button)sender; switch (Convert.ToInt32(button.Tag)) { case 1: for (int i = 1; i < 4; i++) { launcher.Down(25); launcher.Left(25); } break; case 2: launcher.Down(25 * trackBar2.Value); break; case 3: for (int i = 1; i < 4; i++) { launcher.Down(25); launcher.Right(25); } break; case 4: launcher.Left(25 * trackBar2.Value); break; case 5: SmoothMove(100, Direction.Left); SmoothMove(100, Direction.Right); break; case 6: launcher.Right(25 * trackBar2.Value); break; case 7: for (int i = 1; i < 4; i++) { launcher.Up(25); launcher.Left(25); } break; case 8: launcher.Up(25 * trackBar2.Value); break; case 9: for (int i = 1; i < 4; i++) { launcher.Up(25); launcher.Right(25); } break; default: break; } }