From 2e3c03f3f770532b66582cbe46162b0c4c6cce3d Mon Sep 17 00:00:00 2001 From: Sai Vemprala Date: Wed, 16 Dec 2020 09:50:09 -0800 Subject: [PATCH 1/2] Control manual camera speed through LShift and LCtrl --- .../AirSim/Source/ManualPoseController.cpp | 25 +++++++++++++++++-- .../AirSim/Source/ManualPoseController.h | 7 ++++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/Unreal/Plugins/AirSim/Source/ManualPoseController.cpp b/Unreal/Plugins/AirSim/Source/ManualPoseController.cpp index b2e322e77a..a6e84630a8 100644 --- a/Unreal/Plugins/AirSim/Source/ManualPoseController.cpp +++ b/Unreal/Plugins/AirSim/Source/ManualPoseController.cpp @@ -13,7 +13,7 @@ void UManualPoseController::initializeForPlay() left_yaw_mapping_ = FInputAxisKeyMapping("inputManualLeftYaw", EKeys::A); right_yaw_mapping_ = FInputAxisKeyMapping("inputManualRightYaw", EKeys::D); left_roll_mapping_ = FInputAxisKeyMapping("inputManualLefRoll", EKeys::Q); right_roll_mapping_ = FInputAxisKeyMapping("inputManualRightRoll", EKeys::E); up_pitch_mapping_ = FInputAxisKeyMapping("inputManualUpPitch", EKeys::W); down_pitch_mapping_ = FInputAxisKeyMapping("inputManualDownPitch", EKeys::S); - + inc_speed_mapping_ = FInputAxisKeyMapping("inputManualSpeedIncrease", EKeys::LeftShift); dec_speed_mapping_ = FInputAxisKeyMapping("inputManualSpeedDecrease", EKeys::LeftControl); input_positive_ = inpute_negative_ = last_velocity_ = FVector::ZeroVector; } @@ -22,6 +22,7 @@ void UManualPoseController::clearBindings() left_binding_ = right_binding_ = up_binding_ = down_binding_ = nullptr; forward_binding_ = backward_binding_ = left_yaw_binding_ = up_pitch_binding_ = nullptr; right_yaw_binding_ = down_pitch_binding_ = left_roll_binding_ = right_roll_binding_ = nullptr; + inc_speed_binding_ = dec_speed_binding_ = nullptr; } void UManualPoseController::setActor(AActor* actor) @@ -97,6 +98,10 @@ void UManualPoseController::removeInputBindings() UAirBlueprintLib::RemoveAxisBinding(up_pitch_mapping_, up_pitch_binding_, actor_); if (down_pitch_binding_) UAirBlueprintLib::RemoveAxisBinding(down_pitch_mapping_, down_pitch_binding_, actor_); + if (inc_speed_binding_) + UAirBlueprintLib::RemoveAxisBinding(inc_speed_mapping_, inc_speed_binding_, actor_); + if (dec_speed_binding_) + UAirBlueprintLib::RemoveAxisBinding(dec_speed_mapping_, dec_speed_binding_, actor_); clearBindings(); } @@ -117,6 +122,8 @@ void UManualPoseController::setupInputBindings() right_roll_binding_ = & UAirBlueprintLib::BindAxisToKey(right_roll_mapping_, actor_, this, &UManualPoseController::inputManualRightRoll); up_pitch_binding_ = & UAirBlueprintLib::BindAxisToKey(up_pitch_mapping_, actor_, this, &UManualPoseController::inputManualUpPitch); down_pitch_binding_ = & UAirBlueprintLib::BindAxisToKey(down_pitch_mapping_, actor_, this, &UManualPoseController::inputManualDownPitch); + inc_speed_binding_ = &UAirBlueprintLib::BindAxisToKey(inc_speed_mapping_, actor_, this, &UManualPoseController::inputManualSpeedIncrease); + dec_speed_binding_ = &UAirBlueprintLib::BindAxisToKey(dec_speed_mapping_, actor_, this, &UManualPoseController::inputManualSpeedDecrease); } void UManualPoseController::updateDeltaPosition(float dt) @@ -124,7 +131,7 @@ void UManualPoseController::updateDeltaPosition(float dt) FVector input = input_positive_ - inpute_negative_; if (!FMath::IsNearlyZero(input.SizeSquared())) { if (FMath::IsNearlyZero(acceleration_)) - last_velocity_ = input * 1000; + last_velocity_ = input * speed_scaler_; else last_velocity_ += input * (acceleration_ * dt); delta_position_ += actor_->GetActorRotation().RotateVector(last_velocity_ * dt); @@ -133,6 +140,20 @@ void UManualPoseController::updateDeltaPosition(float dt) } } +void UManualPoseController::inputManualSpeedIncrease(float val) +{ + if (!FMath::IsNearlyEqual(val, 0.f)) + speed_scaler_ += val * 20; +} +void UManualPoseController::inputManualSpeedDecrease(float val) +{ + if (!FMath::IsNearlyEqual(val, 0.f)) + speed_scaler_ -= val * 20; + + if (speed_scaler_ <= 0.0) + speed_scaler_ = 20.0; +} + void UManualPoseController::inputManualLeft(float val) { inpute_negative_.Y = val; diff --git a/Unreal/Plugins/AirSim/Source/ManualPoseController.h b/Unreal/Plugins/AirSim/Source/ManualPoseController.h index 91d6e123c9..a9f0de5abf 100644 --- a/Unreal/Plugins/AirSim/Source/ManualPoseController.h +++ b/Unreal/Plugins/AirSim/Source/ManualPoseController.h @@ -32,6 +32,8 @@ class AIRSIM_API UManualPoseController : public UObject { void inputManualRightRoll(float val); void inputManualUpPitch(float val); void inputManualDownPitch(float val); + void inputManualSpeedIncrease(float val); + void inputManualSpeedDecrease(float val); void setupInputBindings(); void removeInputBindings(); @@ -41,18 +43,19 @@ class AIRSIM_API UManualPoseController : public UObject { FInputAxisBinding *left_binding_, *right_binding_, *up_binding_, *down_binding_; FInputAxisBinding *forward_binding_, *backward_binding_, *left_yaw_binding_, *right_yaw_binding_; FInputAxisBinding *up_pitch_binding_, *down_pitch_binding_, *left_roll_binding_, *right_roll_binding_; + FInputAxisBinding* inc_speed_binding_, *dec_speed_binding_; FInputAxisKeyMapping left_mapping_, right_mapping_, up_mapping_, down_mapping_; FInputAxisKeyMapping forward_mapping_, backward_mapping_, left_yaw_mapping_, right_yaw_mapping_; FInputAxisKeyMapping up_pitch_mapping_, down_pitch_mapping_, left_roll_mapping_, right_roll_mapping_; - + FInputAxisKeyMapping inc_speed_mapping_, dec_speed_mapping_; FVector delta_position_; FRotator delta_rotation_; AActor *actor_; - float acceleration_ = 0; + float acceleration_ = 0, speed_scaler_ = 1000; FVector input_positive_, inpute_negative_; FVector last_velocity_; }; \ No newline at end of file From f33bce58a7831f47c224e399e8b0cba39b7318ca Mon Sep 17 00:00:00 2001 From: zimmy87 Date: Mon, 7 Jun 2021 07:35:27 -0700 Subject: [PATCH 2/2] apply style from clang-format --- .../AirSim/Source/ManualPoseController.cpp | 49 +++++++++++-------- .../AirSim/Source/ManualPoseController.h | 11 +++-- 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/Unreal/Plugins/AirSim/Source/ManualPoseController.cpp b/Unreal/Plugins/AirSim/Source/ManualPoseController.cpp index a6e84630a8..87cf0bacd0 100644 --- a/Unreal/Plugins/AirSim/Source/ManualPoseController.cpp +++ b/Unreal/Plugins/AirSim/Source/ManualPoseController.cpp @@ -1,19 +1,25 @@ #include "ManualPoseController.h" #include "AirBlueprintLib.h" - void UManualPoseController::initializeForPlay() { actor_ = nullptr; clearBindings(); - left_mapping_ = FInputAxisKeyMapping("inputManualArrowLeft", EKeys::Left); right_mapping_ = FInputAxisKeyMapping("inputManualArrowRight", EKeys::Right); - forward_mapping_= FInputAxisKeyMapping("inputManualForward", EKeys::Up); backward_mapping_ = FInputAxisKeyMapping("inputManualBackward", EKeys::Down); - up_mapping_ = FInputAxisKeyMapping("inputManualArrowUp", EKeys::PageUp); down_mapping_ = FInputAxisKeyMapping("inputManualArrowDown", EKeys::PageDown); - left_yaw_mapping_ = FInputAxisKeyMapping("inputManualLeftYaw", EKeys::A); right_yaw_mapping_ = FInputAxisKeyMapping("inputManualRightYaw", EKeys::D); - left_roll_mapping_ = FInputAxisKeyMapping("inputManualLefRoll", EKeys::Q); right_roll_mapping_ = FInputAxisKeyMapping("inputManualRightRoll", EKeys::E); - up_pitch_mapping_ = FInputAxisKeyMapping("inputManualUpPitch", EKeys::W); down_pitch_mapping_ = FInputAxisKeyMapping("inputManualDownPitch", EKeys::S); - inc_speed_mapping_ = FInputAxisKeyMapping("inputManualSpeedIncrease", EKeys::LeftShift); dec_speed_mapping_ = FInputAxisKeyMapping("inputManualSpeedDecrease", EKeys::LeftControl); + left_mapping_ = FInputAxisKeyMapping("inputManualArrowLeft", EKeys::Left); + right_mapping_ = FInputAxisKeyMapping("inputManualArrowRight", EKeys::Right); + forward_mapping_ = FInputAxisKeyMapping("inputManualForward", EKeys::Up); + backward_mapping_ = FInputAxisKeyMapping("inputManualBackward", EKeys::Down); + up_mapping_ = FInputAxisKeyMapping("inputManualArrowUp", EKeys::PageUp); + down_mapping_ = FInputAxisKeyMapping("inputManualArrowDown", EKeys::PageDown); + left_yaw_mapping_ = FInputAxisKeyMapping("inputManualLeftYaw", EKeys::A); + right_yaw_mapping_ = FInputAxisKeyMapping("inputManualRightYaw", EKeys::D); + left_roll_mapping_ = FInputAxisKeyMapping("inputManualLefRoll", EKeys::Q); + right_roll_mapping_ = FInputAxisKeyMapping("inputManualRightRoll", EKeys::E); + up_pitch_mapping_ = FInputAxisKeyMapping("inputManualUpPitch", EKeys::W); + down_pitch_mapping_ = FInputAxisKeyMapping("inputManualDownPitch", EKeys::S); + inc_speed_mapping_ = FInputAxisKeyMapping("inputManualSpeedIncrease", EKeys::LeftShift); + dec_speed_mapping_ = FInputAxisKeyMapping("inputManualSpeedDecrease", EKeys::LeftControl); input_positive_ = inpute_negative_ = last_velocity_ = FVector::ZeroVector; } @@ -110,18 +116,18 @@ void UManualPoseController::setupInputBindings() { UAirBlueprintLib::EnableInput(actor_); - left_binding_ = & UAirBlueprintLib::BindAxisToKey(left_mapping_, actor_, this, &UManualPoseController::inputManualLeft); - right_binding_ = & UAirBlueprintLib::BindAxisToKey(right_mapping_, actor_, this, &UManualPoseController::inputManualRight); - forward_binding_ = & UAirBlueprintLib::BindAxisToKey(forward_mapping_, actor_, this, &UManualPoseController::inputManualForward); - backward_binding_ = & UAirBlueprintLib::BindAxisToKey(backward_mapping_, actor_, this, &UManualPoseController::inputManualBackward); - up_binding_ = & UAirBlueprintLib::BindAxisToKey(up_mapping_, actor_, this, &UManualPoseController::inputManualMoveUp); - down_binding_ = & UAirBlueprintLib::BindAxisToKey(down_mapping_, actor_, this, &UManualPoseController::inputManualDown); - left_yaw_binding_ = & UAirBlueprintLib::BindAxisToKey(left_yaw_mapping_, actor_, this, &UManualPoseController::inputManualLeftYaw); - right_yaw_binding_ = & UAirBlueprintLib::BindAxisToKey(right_yaw_mapping_, actor_, this, &UManualPoseController::inputManualRightYaw); - left_roll_binding_ = & UAirBlueprintLib::BindAxisToKey(left_roll_mapping_, actor_, this, &UManualPoseController::inputManualLeftRoll); - right_roll_binding_ = & UAirBlueprintLib::BindAxisToKey(right_roll_mapping_, actor_, this, &UManualPoseController::inputManualRightRoll); - up_pitch_binding_ = & UAirBlueprintLib::BindAxisToKey(up_pitch_mapping_, actor_, this, &UManualPoseController::inputManualUpPitch); - down_pitch_binding_ = & UAirBlueprintLib::BindAxisToKey(down_pitch_mapping_, actor_, this, &UManualPoseController::inputManualDownPitch); + left_binding_ = &UAirBlueprintLib::BindAxisToKey(left_mapping_, actor_, this, &UManualPoseController::inputManualLeft); + right_binding_ = &UAirBlueprintLib::BindAxisToKey(right_mapping_, actor_, this, &UManualPoseController::inputManualRight); + forward_binding_ = &UAirBlueprintLib::BindAxisToKey(forward_mapping_, actor_, this, &UManualPoseController::inputManualForward); + backward_binding_ = &UAirBlueprintLib::BindAxisToKey(backward_mapping_, actor_, this, &UManualPoseController::inputManualBackward); + up_binding_ = &UAirBlueprintLib::BindAxisToKey(up_mapping_, actor_, this, &UManualPoseController::inputManualMoveUp); + down_binding_ = &UAirBlueprintLib::BindAxisToKey(down_mapping_, actor_, this, &UManualPoseController::inputManualDown); + left_yaw_binding_ = &UAirBlueprintLib::BindAxisToKey(left_yaw_mapping_, actor_, this, &UManualPoseController::inputManualLeftYaw); + right_yaw_binding_ = &UAirBlueprintLib::BindAxisToKey(right_yaw_mapping_, actor_, this, &UManualPoseController::inputManualRightYaw); + left_roll_binding_ = &UAirBlueprintLib::BindAxisToKey(left_roll_mapping_, actor_, this, &UManualPoseController::inputManualLeftRoll); + right_roll_binding_ = &UAirBlueprintLib::BindAxisToKey(right_roll_mapping_, actor_, this, &UManualPoseController::inputManualRightRoll); + up_pitch_binding_ = &UAirBlueprintLib::BindAxisToKey(up_pitch_mapping_, actor_, this, &UManualPoseController::inputManualUpPitch); + down_pitch_binding_ = &UAirBlueprintLib::BindAxisToKey(down_pitch_mapping_, actor_, this, &UManualPoseController::inputManualDownPitch); inc_speed_binding_ = &UAirBlueprintLib::BindAxisToKey(inc_speed_mapping_, actor_, this, &UManualPoseController::inputManualSpeedIncrease); dec_speed_binding_ = &UAirBlueprintLib::BindAxisToKey(dec_speed_mapping_, actor_, this, &UManualPoseController::inputManualSpeedDecrease); } @@ -135,7 +141,8 @@ void UManualPoseController::updateDeltaPosition(float dt) else last_velocity_ += input * (acceleration_ * dt); delta_position_ += actor_->GetActorRotation().RotateVector(last_velocity_ * dt); - } else { + } + else { delta_position_ = last_velocity_ = FVector::ZeroVector; } } diff --git a/Unreal/Plugins/AirSim/Source/ManualPoseController.h b/Unreal/Plugins/AirSim/Source/ManualPoseController.h index a9f0de5abf..5a4b5aa85a 100644 --- a/Unreal/Plugins/AirSim/Source/ManualPoseController.h +++ b/Unreal/Plugins/AirSim/Source/ManualPoseController.h @@ -7,7 +7,8 @@ #include "ManualPoseController.generated.h" UCLASS() -class AIRSIM_API UManualPoseController : public UObject { +class AIRSIM_API UManualPoseController : public UObject +{ GENERATED_BODY() public: @@ -35,15 +36,15 @@ class AIRSIM_API UManualPoseController : public UObject { void inputManualSpeedIncrease(float val); void inputManualSpeedDecrease(float val); - void setupInputBindings(); + void setupInputBindings(); void removeInputBindings(); void clearBindings(); private: FInputAxisBinding *left_binding_, *right_binding_, *up_binding_, *down_binding_; FInputAxisBinding *forward_binding_, *backward_binding_, *left_yaw_binding_, *right_yaw_binding_; - FInputAxisBinding *up_pitch_binding_, *down_pitch_binding_, *left_roll_binding_, *right_roll_binding_; - FInputAxisBinding* inc_speed_binding_, *dec_speed_binding_; + FInputAxisBinding *up_pitch_binding_, *down_pitch_binding_, *left_roll_binding_, *right_roll_binding_; + FInputAxisBinding *inc_speed_binding_, *dec_speed_binding_; FInputAxisKeyMapping left_mapping_, right_mapping_, up_mapping_, down_mapping_; FInputAxisKeyMapping forward_mapping_, backward_mapping_, left_yaw_mapping_, right_yaw_mapping_; @@ -53,7 +54,7 @@ class AIRSIM_API UManualPoseController : public UObject { FVector delta_position_; FRotator delta_rotation_; - AActor *actor_; + AActor* actor_; float acceleration_ = 0, speed_scaler_ = 1000; FVector input_positive_, inpute_negative_;