private async void TranslateGestureForUAV1(GestureRecongizedArgs args) { FlightOperationMode _mode = _uav.mode; if (_mode == FlightOperationMode.landingOrTakingOff) { return; } // Switch Mode if (args.rightHandGesture.leftRightGestureArgs == LeftRightGesture.Right) { if (_mode == FlightOperationMode.idle) { await SwitchMode(FlightOperationMode.navigate, _uav); } else { await SwitchMode(FlightOperationMode.idle, _uav); } } // Control landing and takeoff if (_mode == FlightOperationMode.idle) { if (args.rightHandGesture.upwardDownwardGestureArgs == UpwardDownwardGesture.Down && !_uav.isLanded) { await SwitchMode(FlightOperationMode.landingOrTakingOff, _uav); await _uav.landing(); await SwitchMode(FlightOperationMode.idle, _uav); } else if (args.rightHandGesture.upwardDownwardGestureArgs == UpwardDownwardGesture.Up && _uav.isLanded) { await SwitchMode(FlightOperationMode.landingOrTakingOff, _uav); await _uav.takeOff(); await SwitchMode(FlightOperationMode.idle, _uav); } } }
protected async Task SwitchMode(FlightOperationMode newMode, Flight u, int delay = 0) { if (u.isSwitchingMode) { return; } if (u != null && u.isConnected) { u.isSwitchingMode = true; FlightModeChangedArgs args = new FlightModeChangedArgs(); args.from = _uav.mode; args.to = newMode; _uav.mode = newMode; if (delay > 0) { await Task.Delay(delay); } u.isSwitchingMode = false; FlightModeChanged.Invoke(this, args); } }
private async void TranslateGestureForUAV2(GestureRecongizedArgs args) { FlightOperationMode _mode = _uav2.mode; if (_uav2.mode == FlightOperationMode.landingOrTakingOff) { return; } if (args.leftHandGesture.leftRightGestureArgs == LeftRightGesture.Left) { if (_mode == FlightOperationMode.idle) { await SwitchMode(FlightOperationMode.navigate, _uav, 3000); } else { await SwitchMode(FlightOperationMode.idle, _uav, 3000); } } if (_mode == FlightOperationMode.idle) { if (args.leftHandGesture.upwardDownwardGestureArgs == UpwardDownwardGesture.Down && !_uav2.isLanded) { await SwitchMode(FlightOperationMode.landingOrTakingOff, _uav2); await _uav2.landing(); await SwitchMode(FlightOperationMode.idle, _uav2); } else if (args.leftHandGesture.upwardDownwardGestureArgs == UpwardDownwardGesture.Up && _uav2.isLanded) { await SwitchMode(FlightOperationMode.landingOrTakingOff, _uav2); await _uav2.takeOff(); await SwitchMode(FlightOperationMode.idle, _uav2); } } }