Add building ghost preview
This commit is contained in:
@@ -2,13 +2,14 @@
|
||||
|
||||
#include "AgrarianBuildingPlacementComponent.h"
|
||||
#include "AgrarianInventoryComponent.h"
|
||||
#include "DrawDebugHelpers.h"
|
||||
#include "GameFramework/Pawn.h"
|
||||
#include "GameFramework/Controller.h"
|
||||
#include "Engine/World.h"
|
||||
|
||||
UAgrarianBuildingPlacementComponent::UAgrarianBuildingPlacementComponent()
|
||||
{
|
||||
PrimaryComponentTick.bCanEverTick = false;
|
||||
PrimaryComponentTick.bCanEverTick = true;
|
||||
SetIsReplicatedByDefault(true);
|
||||
}
|
||||
|
||||
@@ -55,6 +56,16 @@ bool UAgrarianBuildingPlacementComponent::GetPlacementPreview(FTransform& OutTra
|
||||
return true;
|
||||
}
|
||||
|
||||
bool UAgrarianBuildingPlacementComponent::GetPlacementPreviewState(FTransform& OutTransform, FText& FailureReason) const
|
||||
{
|
||||
if (!GetPlacementPreview(OutTransform, FailureReason))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return CanPlaceAtTransform(ActiveBuildClass, OutTransform, FailureReason);
|
||||
}
|
||||
|
||||
bool UAgrarianBuildingPlacementComponent::CanPlaceAtTransform(TSubclassOf<AActor> BuildClass, const FTransform& PlacementTransform, FText& FailureReason) const
|
||||
{
|
||||
if (!BuildClass)
|
||||
@@ -148,6 +159,38 @@ void UAgrarianBuildingPlacementComponent::ServerPlaceBuildable_Implementation(TS
|
||||
OnBuildPlaced.Broadcast(PlacedActor);
|
||||
}
|
||||
|
||||
void UAgrarianBuildingPlacementComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
|
||||
{
|
||||
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
|
||||
|
||||
if (!bShowGhostPreview || !ActiveBuildClass || !GetWorld())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
FTransform PreviewTransform;
|
||||
FText FailureReason;
|
||||
const bool bCanPlace = GetPlacementPreviewState(PreviewTransform, FailureReason);
|
||||
const FColor PreviewColor = bCanPlace ? ValidGhostPreviewColor : InvalidGhostPreviewColor;
|
||||
const FVector PreviewExtent(
|
||||
FMath::Max(PlacementProbeRadius, 25.0f),
|
||||
FMath::Max(PlacementProbeRadius, 25.0f),
|
||||
FMath::Max(PlacementProbeRadius * 0.5f, 25.0f));
|
||||
|
||||
DrawDebugBox(
|
||||
GetWorld(),
|
||||
PreviewTransform.GetLocation() + FVector(0.0f, 0.0f, PreviewExtent.Z),
|
||||
PreviewExtent,
|
||||
PreviewTransform.GetRotation(),
|
||||
PreviewColor,
|
||||
false,
|
||||
GhostPreviewLifetimeSeconds,
|
||||
0,
|
||||
GhostPreviewLineThickness);
|
||||
|
||||
OnBuildPreviewUpdated.Broadcast(bCanPlace, PreviewTransform, FailureReason);
|
||||
}
|
||||
|
||||
bool UAgrarianBuildingPlacementComponent::HasPlacementCost(FText& FailureReason) const
|
||||
{
|
||||
const UAgrarianInventoryComponent* Inventory = GetOwner() ? GetOwner()->FindComponentByClass<UAgrarianInventoryComponent>() : nullptr;
|
||||
|
||||
Reference in New Issue
Block a user