only send force-feedback and buzz commands when they are not zero
This commit is contained in:
@@ -254,25 +254,31 @@ void ASGPlayerController::BeginPlay()
|
||||
|
||||
const USGBuzzCommand* BuzzCommand{Pimpl->GetBuzzCommand(
|
||||
ActorThumbTouching, ActorIndexTouching, ActorMiddleTouching, ActorRingTouching, ActorPinkyTouching)};
|
||||
Glove->SendHaptics(BuzzCommand);
|
||||
|
||||
const float Duration = FImpl::GetBuzzDuration(
|
||||
ActorThumbTouching, ActorIndexTouching, ActorMiddleTouching, ActorRingTouching, ActorPinkyTouching);
|
||||
|
||||
GetWorldTimerManager().ClearTimer(Pimpl->TouchBuzzStopTimer);
|
||||
|
||||
FTimerDelegate TouchBuzzStopHandler;
|
||||
TouchBuzzStopHandler.BindLambda([=]()-> void
|
||||
if (IsValid(BuzzCommand))
|
||||
{
|
||||
Glove->SendHaptics(USGBuzzCommand::Off(this));
|
||||
});
|
||||
Glove->SendHaptics(BuzzCommand);
|
||||
|
||||
GetWorldTimerManager().SetTimer(
|
||||
Pimpl->TouchBuzzStopTimer, TouchBuzzStopHandler, Duration, false, -1.0f);
|
||||
const float Duration = FImpl::GetBuzzDuration(
|
||||
ActorThumbTouching, ActorIndexTouching, ActorMiddleTouching, ActorRingTouching, ActorPinkyTouching);
|
||||
|
||||
GetWorldTimerManager().ClearTimer(Pimpl->TouchBuzzStopTimer);
|
||||
|
||||
FTimerDelegate TouchBuzzStopHandler;
|
||||
TouchBuzzStopHandler.BindLambda([=]()-> void
|
||||
{
|
||||
Glove->SendHaptics(USGBuzzCommand::Off(this));
|
||||
});
|
||||
|
||||
GetWorldTimerManager().SetTimer(
|
||||
Pimpl->TouchBuzzStopTimer, TouchBuzzStopHandler, Duration, false, -1.0f);
|
||||
}
|
||||
|
||||
const USGForceFeedbackCommand* ForceFeedbackCommand{Pimpl->GetForceFeedbackCommand(
|
||||
ActorThumbTouching, ActorIndexTouching, ActorMiddleTouching, ActorRingTouching, ActorPinkyTouching)};
|
||||
Glove->SendHaptics(ForceFeedbackCommand);
|
||||
if (IsValid(ForceFeedbackCommand))
|
||||
{
|
||||
Glove->SendHaptics(ForceFeedbackCommand);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -283,12 +289,24 @@ ASGPlayerController::FImpl::FImpl(ASGPlayerController* InOwner)
|
||||
|
||||
ASGPlayerController::FImpl::~FImpl() = default;
|
||||
|
||||
USGBuzzCommand* ASGPlayerController::FImpl::GetBuzzCommand(const AActor* ActorThumbTouching,
|
||||
const AActor* ActorIndexTouching,
|
||||
const AActor* ActorMiddleTouching,
|
||||
const AActor* ActorRingTouching,
|
||||
const AActor* ActorPinkyTouching) const
|
||||
USGBuzzCommand* ASGPlayerController::FImpl::GetBuzzCommand(
|
||||
const AActor* ActorThumbTouching,
|
||||
const AActor* ActorIndexTouching,
|
||||
const AActor* ActorMiddleTouching,
|
||||
const AActor* ActorRingTouching,
|
||||
const AActor* ActorPinkyTouching) const
|
||||
{
|
||||
const int32 ThumbBuzzLevel = GetBuzzLevel(ActorThumbTouching);
|
||||
const int32 IndexBuzzLevel = GetBuzzLevel(ActorIndexTouching);
|
||||
const int32 MiddleBuzzLevel = GetBuzzLevel(ActorMiddleTouching);
|
||||
const int32 RingBuzzLevel = GetBuzzLevel(ActorRingTouching);
|
||||
const int32 PinkyBuzzLevel = GetBuzzLevel(ActorThumbTouching);
|
||||
|
||||
if (ThumbBuzzLevel <= 0 && IndexBuzzLevel <= 0 && MiddleBuzzLevel <= 0 && RingBuzzLevel <= 0 && PinkyBuzzLevel <= 0)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
USGBuzzCommand* BuzzCommand = USGBuzzCommand::NewBuzzCommand(
|
||||
Owner,
|
||||
GetBuzzLevel(ActorThumbTouching),
|
||||
@@ -297,15 +315,29 @@ USGBuzzCommand* ASGPlayerController::FImpl::GetBuzzCommand(const AActor* ActorTh
|
||||
GetBuzzLevel(ActorRingTouching),
|
||||
GetBuzzLevel(ActorPinkyTouching)
|
||||
);
|
||||
|
||||
return BuzzCommand;
|
||||
}
|
||||
|
||||
USGForceFeedbackCommand* ASGPlayerController::FImpl::GetForceFeedbackCommand(const AActor* ActorThumbTouching,
|
||||
const AActor* ActorIndexTouching,
|
||||
const AActor* ActorMiddleTouching,
|
||||
const AActor* ActorRingTouching,
|
||||
const AActor* ActorPinkyTouching) const
|
||||
USGForceFeedbackCommand* ASGPlayerController::FImpl::GetForceFeedbackCommand(
|
||||
const AActor* ActorThumbTouching,
|
||||
const AActor* ActorIndexTouching,
|
||||
const AActor* ActorMiddleTouching,
|
||||
const AActor* ActorRingTouching,
|
||||
const AActor* ActorPinkyTouching) const
|
||||
{
|
||||
const int32 ThumbForceFeedbackLevel = GetForceFeedbackLevel(ActorThumbTouching);
|
||||
const int32 IndexForceFeedbackLevel = GetForceFeedbackLevel(ActorIndexTouching);
|
||||
const int32 MiddleForceFeedbackLevel = GetForceFeedbackLevel(ActorMiddleTouching);
|
||||
const int32 RingForceFeedbackLevel = GetForceFeedbackLevel(ActorRingTouching);
|
||||
const int32 PinkyForceFeedbackLevel = GetForceFeedbackLevel(ActorThumbTouching);
|
||||
|
||||
if (ThumbForceFeedbackLevel <= 0 && IndexForceFeedbackLevel <= 0 && MiddleForceFeedbackLevel <= 0
|
||||
&& RingForceFeedbackLevel <= 0 && PinkyForceFeedbackLevel <= 0)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
USGForceFeedbackCommand* ForceFeedbackCommand = USGForceFeedbackCommand::NewForceFeedbackCommand(
|
||||
Owner,
|
||||
GetForceFeedbackLevel(ActorThumbTouching),
|
||||
@@ -314,6 +346,7 @@ USGForceFeedbackCommand* ASGPlayerController::FImpl::GetForceFeedbackCommand(con
|
||||
GetForceFeedbackLevel(ActorRingTouching),
|
||||
GetForceFeedbackLevel(ActorPinkyTouching)
|
||||
);
|
||||
|
||||
return ForceFeedbackCommand;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user