82 - Crosshair Spread
This commit is contained in:
parent
e75c93aeb4
commit
afa339d8c1
|
@ -74,6 +74,25 @@ void UCombatComponent::SetHUDCrosshairs(float DeltaTime)
|
||||||
HUDPackage.CrosshairsBottom = nullptr;
|
HUDPackage.CrosshairsBottom = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Calculate crosshair spread
|
||||||
|
// Velocity [0, 600] -> Spread [0, 1]
|
||||||
|
const FVector2D WalkSpeedRange(0.f, Character->GetCharacterMovement()->MaxWalkSpeed);
|
||||||
|
const FVector2D VelocityMultiplierRange(0.f, 1.f);
|
||||||
|
FVector Velocity = Character->GetVelocity();
|
||||||
|
Velocity.Z = 0.f;
|
||||||
|
|
||||||
|
CrosshairVelocityFactor = FMath::GetMappedRangeValueClamped(WalkSpeedRange, VelocityMultiplierRange, Velocity.Size());
|
||||||
|
|
||||||
|
if (Character->GetCharacterMovement()->IsFalling())
|
||||||
|
{
|
||||||
|
CrosshairInAirFactor = FMath::FInterpTo(CrosshairInAirFactor, 2.25f, DeltaTime, 2.25f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CrosshairInAirFactor = FMath::FInterpTo(CrosshairInAirFactor, 0.f, DeltaTime, 30.f);
|
||||||
|
}
|
||||||
|
|
||||||
|
HUDPackage.CrosshairSpread = CrosshairVelocityFactor + CrosshairInAirFactor;
|
||||||
HUD->SetHUDPackage(HUDPackage);
|
HUD->SetHUDPackage(HUDPackage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,4 +62,11 @@ private:
|
||||||
float AimWalkSpeed;
|
float AimWalkSpeed;
|
||||||
|
|
||||||
bool bFireButtonPressed;
|
bool bFireButtonPressed;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HUD and Crosshairs
|
||||||
|
*/
|
||||||
|
|
||||||
|
float CrosshairVelocityFactor;
|
||||||
|
float CrosshairInAirFactor;
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,42 +7,48 @@ void ABlasterHUD::DrawHUD()
|
||||||
{
|
{
|
||||||
Super::DrawHUD();
|
Super::DrawHUD();
|
||||||
|
|
||||||
FVector2D ViewportSize;
|
|
||||||
if (GEngine)
|
if (GEngine)
|
||||||
{
|
{
|
||||||
|
FVector2D ViewportSize;
|
||||||
GEngine->GameViewport->GetViewportSize(ViewportSize);
|
GEngine->GameViewport->GetViewportSize(ViewportSize);
|
||||||
const FVector2D ViewportCenter(ViewportSize.X / 2.f, ViewportSize.Y / 2.f);
|
const FVector2D ViewportCenter(ViewportSize.X / 2.f, ViewportSize.Y / 2.f);
|
||||||
|
|
||||||
|
const float SpreadScaled = CrosshairSpreadMax * HUDPackage.CrosshairSpread;
|
||||||
if (HUDPackage.CrosshairsCenter)
|
if (HUDPackage.CrosshairsCenter)
|
||||||
{
|
{
|
||||||
DrawCrosshair(HUDPackage.CrosshairsCenter, ViewportCenter);
|
const FVector2D Spread(0.f, 0.f);
|
||||||
|
DrawCrosshair(HUDPackage.CrosshairsCenter, ViewportCenter, Spread);
|
||||||
}
|
}
|
||||||
if (HUDPackage.CrosshairsLeft)
|
if (HUDPackage.CrosshairsLeft)
|
||||||
{
|
{
|
||||||
DrawCrosshair(HUDPackage.CrosshairsLeft, ViewportCenter);
|
const FVector2D Spread(-SpreadScaled, 0.f);
|
||||||
|
DrawCrosshair(HUDPackage.CrosshairsLeft, ViewportCenter, Spread);
|
||||||
}
|
}
|
||||||
if (HUDPackage.CrosshairsRight)
|
if (HUDPackage.CrosshairsRight)
|
||||||
{
|
{
|
||||||
DrawCrosshair(HUDPackage.CrosshairsRight, ViewportCenter);
|
const FVector2D Spread(SpreadScaled, 0.f);
|
||||||
|
DrawCrosshair(HUDPackage.CrosshairsRight, ViewportCenter, Spread);
|
||||||
}
|
}
|
||||||
if (HUDPackage.CrosshairsTop)
|
if (HUDPackage.CrosshairsTop)
|
||||||
{
|
{
|
||||||
DrawCrosshair(HUDPackage.CrosshairsTop, ViewportCenter);
|
const FVector2D Spread(0.f, -SpreadScaled);
|
||||||
|
DrawCrosshair(HUDPackage.CrosshairsTop, ViewportCenter, Spread);
|
||||||
}
|
}
|
||||||
if (HUDPackage.CrosshairsBottom)
|
if (HUDPackage.CrosshairsBottom)
|
||||||
{
|
{
|
||||||
DrawCrosshair(HUDPackage.CrosshairsBottom, ViewportCenter);
|
const FVector2D Spread(0.f, SpreadScaled);
|
||||||
|
DrawCrosshair(HUDPackage.CrosshairsBottom, ViewportCenter, Spread);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ABlasterHUD::DrawCrosshair(UTexture2D* Texture, FVector2D ViewportCenter)
|
void ABlasterHUD::DrawCrosshair(UTexture2D* Texture, FVector2D ViewportCenter, FVector2D Spread)
|
||||||
{
|
{
|
||||||
const float TextureWidth = Texture->GetSizeX();
|
const float TextureWidth = Texture->GetSizeX();
|
||||||
const float TextureHeight = Texture->GetSizeY();
|
const float TextureHeight = Texture->GetSizeY();
|
||||||
const FVector2D TextureDrawPoint(
|
const FVector2D TextureDrawPoint(
|
||||||
ViewportCenter.X - (TextureWidth / 2.f),
|
ViewportCenter.X - (TextureWidth / 2.f) + Spread.X,
|
||||||
ViewportCenter.Y - (TextureHeight / 2.f)
|
ViewportCenter.Y - (TextureHeight / 2.f) + Spread.Y
|
||||||
);
|
);
|
||||||
|
|
||||||
DrawTexture(
|
DrawTexture(
|
||||||
|
|
|
@ -17,6 +17,7 @@ public:
|
||||||
UTexture2D* CrosshairsRight;
|
UTexture2D* CrosshairsRight;
|
||||||
UTexture2D* CrosshairsTop;
|
UTexture2D* CrosshairsTop;
|
||||||
UTexture2D* CrosshairsBottom;
|
UTexture2D* CrosshairsBottom;
|
||||||
|
float CrosshairSpread;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -33,7 +34,10 @@ public:
|
||||||
private:
|
private:
|
||||||
FHUDPackage HUDPackage;
|
FHUDPackage HUDPackage;
|
||||||
|
|
||||||
void DrawCrosshair(UTexture2D* Texture, FVector2D ViewportCenter);
|
void DrawCrosshair(UTexture2D* Texture, FVector2D ViewportCenter, FVector2D Spread);
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere)
|
||||||
|
float CrosshairSpreadMax = 16.f;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FORCEINLINE void SetHUDPackage(const FHUDPackage& Package) { HUDPackage = Package; };
|
FORCEINLINE void SetHUDPackage(const FHUDPackage& Package) { HUDPackage = Package; };
|
||||||
|
|
Loading…
Reference in New Issue