本文整理汇总了C++中FVector::Equals方法的典型用法代码示例。如果您正苦于以下问题:C++ FVector::Equals方法的具体用法?C++ FVector::Equals怎么用?C++ FVector::Equals使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FVector
的用法示例。
在下文中一共展示了FVector::Equals方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: IsBarrelMoving
bool UTankAimingComponent::IsBarrelMoving() const
{
if (!ensure(Barrel)) { return false; }
FVector BarrelForward = Barrel->GetForwardVector();
return !BarrelForward.Equals(AimForwardDirection, DeltaTolerance);
}
示例2: FollowPathSegment
void UCrowdFollowingComponent::FollowPathSegment(float DeltaTime)
{
if (!bEnableCrowdSimulation)
{
Super::FollowPathSegment(DeltaTime);
return;
}
if (bUpdateDirectMoveVelocity)
{
const FVector CurrentTargetPt = DestinationActor.IsValid() ? DestinationActor->GetActorLocation() : GetCurrentTargetLocation();
const FVector AgentLoc = GetCrowdAgentLocation();
const FVector NewDirection = (CurrentTargetPt - AgentLoc).GetSafeNormal();
const bool bDirectionChanged = !NewDirection.Equals(CrowdAgentMoveDirection);
if (bDirectionChanged)
{
CurrentDestination.Set(Path->GetBaseActor(), CurrentTargetPt);
CrowdAgentMoveDirection = NewDirection;
MoveSegmentDirection = NewDirection;
UCrowdManager* Manager = UCrowdManager::GetCurrent(GetWorld());
Manager->SetAgentMoveDirection(this, NewDirection);
UE_VLOG(GetOwner(), LogCrowdFollowing, Log, TEXT("Updated direct move direction for crowd agent."));
}
}
UpdateMoveFocus();
}
示例3: AreSymmetricRotations
bool UCapsuleComponent::AreSymmetricRotations(const FQuat& A, const FQuat& B, const FVector& Scale3D) const
{
if (Scale3D.X != Scale3D.Y)
{
return false;
}
const FVector AUp = A.GetAxisZ();
const FVector BUp = B.GetAxisZ();
return AUp.Equals(BUp);
}
示例4: IsSame
/** Check if this vertex is in the same place as given point */
FORCEINLINE bool IsSame( const FVector &v )
{
const float eps = 0.01f;
return v.Equals( Position, eps );
}
示例5: NotEqual_VectorVector
bool UKismetMathLibrary::NotEqual_VectorVector(FVector A, FVector B, float ErrorTolerance)
{
return !A.Equals(B, ErrorTolerance);
}
示例6: TickAssetPlayer
void UBlendSpaceBase::TickAssetPlayer(FAnimTickRecord& Instance, struct FAnimNotifyQueue& NotifyQueue, FAnimAssetTickContext& Context) const
{
const float DeltaTime = Context.GetDeltaTime();
float MoveDelta = Instance.PlayRateMultiplier * DeltaTime;
// this happens even if MoveDelta == 0.f. This still should happen if it is being interpolated
// since we allow setting position of blendspace, we can't ignore MoveDelta == 0.f
// also now we don't have to worry about not following if DeltaTime = 0.f
{
// first filter input using blend filter
const FVector BlendSpacePosition(Instance.BlendSpace.BlendSpacePositionX, Instance.BlendSpace.BlendSpacePositionY, 0.f);
const FVector BlendInput = FilterInput(Instance.BlendSpace.BlendFilter, BlendSpacePosition, DeltaTime);
EBlendSpaceAxis AxisToScale = GetAxisToScale();
if (AxisToScale != BSA_None)
{
float FilterMultiplier = 1.f;
// first use multiplier using new blendinput
// new filtered input is going to be used for sampling animation
// so we'll need to change playrate if you'd like to not slide foot
if ( !BlendSpacePosition.Equals(BlendInput) )
{
// apply speed change if you want,
if (AxisToScale == BSA_X)
{
if (BlendInput.X != 0.f)
{
FilterMultiplier = BlendSpacePosition.X / BlendInput.X;
}
}
else if (AxisToScale == BSA_Y)
{
if (BlendInput.Y != 0.f)
{
FilterMultiplier = BlendSpacePosition.Y / BlendInput.Y;
}
}
}
// now find if clamped input is different
// if different, then apply scale to fit in
FVector ClampedInput = ClampBlendInput(BlendInput);
if ( !ClampedInput.Equals(BlendInput) )
{
// apply speed change if you want,
if (AxisToScale == BSA_X)
{
if (ClampedInput.X != 0.f)
{
FilterMultiplier *= BlendInput.X / ClampedInput.X;
}
}
else if (AxisToScale == BSA_Y)
{
if (ClampedInput.Y != 0.f)
{
FilterMultiplier *= BlendInput.Y / ClampedInput.Y;
}
}
}
MoveDelta *= FilterMultiplier;
UE_LOG(LogAnimation, Log, TEXT("BlendSpace(%s) - BlendInput(%s) : FilteredBlendInput(%s), FilterMultiplier(%0.2f)"), *GetName(), *BlendSpacePosition.ToString(), *BlendInput.ToString(), FilterMultiplier );
}
check(Instance.BlendSpace.BlendSampleDataCache);
// For Target weight interpolation, we'll need to save old data, and interpolate to new data
TArray<FBlendSampleData>& OldSampleDataList = FBlendSpaceScratchData::Get().OldSampleDataList;
TArray<FBlendSampleData>& NewSampleDataList = FBlendSpaceScratchData::Get().NewSampleDataList;
check(!OldSampleDataList.Num() && !NewSampleDataList.Num()); // this must be called non-recursively
OldSampleDataList.Append(*Instance.BlendSpace.BlendSampleDataCache);
// get sample data based on new input
// consolidate all samples and sort them, so that we can handle from biggest weight to smallest
Instance.BlendSpace.BlendSampleDataCache->Reset();
// new sample data that will be used for evaluation
TArray<FBlendSampleData> & SampleDataList = *Instance.BlendSpace.BlendSampleDataCache;
// get sample data from blendspace
if (GetSamplesFromBlendInput(BlendInput, NewSampleDataList))
{
float NewAnimLength=0.f;
float PreInterpAnimLength = 0.f;
// if target weight interpolation is set
if (TargetWeightInterpolationSpeedPerSec > 0.f)
{
UE_LOG(LogAnimation, Verbose, TEXT("Target Weight Interpolation: Target Samples "));
// recalculate AnimLength based on weight of target animations - this is used for scaling animation later (change speed)
PreInterpAnimLength = GetAnimationLengthFromSampleData(NewSampleDataList);
UE_LOG(LogAnimation, Verbose, TEXT("BlendSpace(%s) - BlendInput(%s) : PreAnimLength(%0.5f) "), *GetName(), *BlendInput.ToString(), PreInterpAnimLength);
// target weight interpolation
if (InterpolateWeightOfSampleData(DeltaTime, OldSampleDataList, NewSampleDataList, SampleDataList))
{
// now I need to normalize
FBlendSampleData::NormalizeDataWeight(SampleDataList);
}
//.........这里部分代码省略.........
示例7: TickAssetPlayerInstance
void UBlendSpaceBase::TickAssetPlayerInstance(const FAnimTickRecord& Instance, class UAnimInstance* InstanceOwner, FAnimAssetTickContext& Context) const
{
const float DeltaTime = Context.GetDeltaTime();
float MoveDelta = Instance.PlayRateMultiplier * DeltaTime;
// this happens even if MoveDelta == 0.f. This still should happen if it is being interpolated
// since we allow setting position of blendspace, we can't ignore MoveDelta == 0.f
// also now we don't have to worry about not following if DeltaTime = 0.f
{
// first filter input using blend filter
const FVector BlendInput = FilterInput(Instance.BlendFilter, Instance.BlendSpacePosition, DeltaTime);
EBlendSpaceAxis AxisToScale = GetAxisToScale();
if (AxisToScale != BSA_None)
{
float FilterMultiplier = 1.f;
// first use multiplier using new blendinput
// new filtered input is going to be used for sampling animation
// so we'll need to change playrate if you'd like to not slide foot
if ( !Instance.BlendSpacePosition.Equals(BlendInput) )
{
// apply speed change if you want,
if (AxisToScale == BSA_X)
{
if (BlendInput.X != 0.f)
{
FilterMultiplier = Instance.BlendSpacePosition.X / BlendInput.X;
}
}
else if (AxisToScale == BSA_Y)
{
if (BlendInput.Y != 0.f)
{
FilterMultiplier = Instance.BlendSpacePosition.Y / BlendInput.Y;
}
}
}
// now find if clamped input is different
// if different, then apply scale to fit in
FVector ClampedInput = ClampBlendInput(BlendInput);
if ( !ClampedInput.Equals(BlendInput) )
{
// apply speed change if you want,
if (AxisToScale == BSA_X)
{
if (ClampedInput.X != 0.f)
{
FilterMultiplier *= BlendInput.X / ClampedInput.X;
}
}
else if (AxisToScale == BSA_Y)
{
if (ClampedInput.Y != 0.f)
{
FilterMultiplier *= BlendInput.Y / ClampedInput.Y;
}
}
}
MoveDelta *= FilterMultiplier;
UE_LOG(LogAnimation, Log, TEXT("BlendSpace(%s) - BlendInput(%s) : FilteredBlendInput(%s), FilterMultiplier(%0.2f)"), *GetName(), *Instance.BlendSpacePosition.ToString(), *BlendInput.ToString(), FilterMultiplier );
}
check(Instance.BlendSampleDataCache);
// For Target weight interpolation, we'll need to save old data, and interpolate to new data
static TArray<FBlendSampleData> OldSampleDataList;
static TArray<FBlendSampleData> NewSampleDataList;
check(IsInGameThread() && !OldSampleDataList.Num() && !NewSampleDataList.Num()); // this must be called non-recursively on the game thread
OldSampleDataList.Append(*Instance.BlendSampleDataCache);
// get sample data based on new input
// consolidate all samples and sort them, so that we can handle from biggest weight to smallest
Instance.BlendSampleDataCache->Reset();
// new sample data that will be used for evaluation
TArray<FBlendSampleData> & SampleDataList = *Instance.BlendSampleDataCache;
// get sample data from blendspace
if (GetSamplesFromBlendInput(BlendInput, NewSampleDataList))
{
float NewAnimLength=0;
// if target weight interpolation is set
if (TargetWeightInterpolationSpeedPerSec > 0.f)
{
UE_LOG(LogAnimation, Verbose, TEXT("Target Weight Interpolation: Target Samples "));
// recalculate AnimLength based on weight of target animations - this is used for scaling animation later (change speed)
float PreInterpAnimLength = GetAnimationLengthFromSampleData(NewSampleDataList);
UE_LOG(LogAnimation, Verbose, TEXT("BlendSpace(%s) - BlendInput(%s) : PreAnimLength(%0.5f) "), *GetName(), *BlendInput.ToString(), PreInterpAnimLength);
// target weight interpolation
if (InterpolateWeightOfSampleData(DeltaTime, OldSampleDataList, NewSampleDataList, SampleDataList))
{
// now I need to normalize
NormalizeSampleDataWeight(SampleDataList);
}
else
{
//.........这里部分代码省略.........
示例8: Tick
void AMyCharacter::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
// Get mouse position
APlayerController* pc = Cast<APlayerController>(GetController());
float mouseX = 0.f;
float mouseY = 0.f;
FVector mousePos = FVector::ZeroVector;
if (pc->GetMousePosition(mouseX, mouseY))
{
mousePos = FVector(mouseX, mouseY, 0.0f);
// UE_LOG(LogTemp, Warning, TEXT("Mouse X %f: MouseY %f"), mouseX, mouseY);
}
// Calculate look at direction
const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
FVector middleOfScreen = FVector(ViewportSize.X / 2, ViewportSize.Y / 2, 0.0f);
FVector directionToMouse = mousePos - middleOfScreen;
FRotator UpperBodyRot = directionToMouse.Rotation();
UpperBodyRot.Roll = -90.0f;
UpperBodyRot.Pitch = 0.0f;
UpperBodyRot.Yaw = UpperBodyRot.Yaw + 90.0f;
UpperBodyFB->SetWorldRotation(UpperBodyRot);
// Determine Heading of lower Body
FVector upperBodyVec = UpperBodyRot.Vector();
upperBodyVec.Normalize();
FVector vel = GetVelocity();
vel.Z = 0.0f; // Ignore the movement in the vertical direction like when he is falling.
// Calculate Movement Vector
if (!vel.Equals(FVector::ZeroVector))
{
MovementDirectionVec = vel;
}
MovementDirectionVec.Normalize();
// Calculate Angle
float dotProduct = FVector::DotProduct(upperBodyVec, MovementDirectionVec);
float magnitudes = upperBodyVec.Size() * MovementDirectionVec.Size();
float AimAtAngle = FMath::RadiansToDegrees(acosf(dotProduct / magnitudes));
FVector sideVector = UpperBodyRot.Vector().RotateAngleAxis(90.0f, FVector(0, 0, 1));
// Greater than 0 is left, Less than zero is right
float sideDirection = FVector::DotProduct(sideVector, MovementDirectionVec);
// He is looking left
if (sideDirection < 0 && AimAtAngle > StrafingStartAngle && AimAtAngle < StrafingEndAngle)
{
CurMovementAction = EMovementActions::STRAFING_LEFT;
}
// He is looking right
if (sideDirection > 0 && AimAtAngle > StrafingStartAngle && AimAtAngle < StrafingEndAngle)
{
CurMovementAction = EMovementActions::STRAFING_RIGHT;
}
// Is he moving forward in relation to where he is facing
if (AimAtAngle < StrafingStartAngle)
{
CurMovementAction = EMovementActions::MOVING_FORWARDS;
}
// Is he moving backward in relation to where he is facing
if (AimAtAngle > StrafingEndAngle)
{
CurMovementAction = EMovementActions::MOVING_BACKWARDS;
}
// Debug
// Draw Vectors for debugging
// UE_LOG(LogTemp, Warning, TEXT("Angle %f"), AimAtAngle);
DrawDebugLine(GetWorld(), UpperBodyFB->GetComponentLocation(), UpperBodyFB->GetComponentLocation() + (upperBodyVec * 500), FColor::Red, false, -1, 0, 12.333);
DrawDebugLine(GetWorld(), UpperBodyFB->GetComponentLocation(), UpperBodyFB->GetComponentLocation() + (sideVector * 500), FColor::Green, false, -1, 0, 12.333);
DrawDebugLine(GetWorld(), GetActorLocation(), GetActorLocation() + (MovementDirectionVec * 500), FColor::Yellow, false, -1, 0, 12.333);
// Movement
// UE_LOG(LogTemp, Warning, TEXT("Moving Forward %d, Strafing Left %d, Moving Backward %d, Strafing Right %d"), bIsMovingForwards, bIsStrafingLeft, bIsMovingBackwards, bIsStrafingRight);
// UE_LOG(LogTemp, Warning, TEXT("Dot Product: %f"), dotProduct);
// UE_LOG(LogTemp, Warning, TEXT("Side Direction: %f"), sideDirection);
UE_LOG(LogTemp, Warning, TEXT("MovementDirectionVec: X = %f, Y = %f, Z = %f"), MovementDirectionVec.X, MovementDirectionVec.Y, MovementDirectionVec.Z);
switch (CurMovementAction)
{
case EMovementActions::STRAFING_LEFT:
//.........这里部分代码省略.........