highlight enemies

This commit is contained in:
ghostie 2025-08-30 15:10:56 -05:00
parent 16eddc8849
commit adfe961cef
7 changed files with 78 additions and 1 deletions

Binary file not shown.

View File

@ -5,8 +5,10 @@
void AAuraEnemy::HighlightActor()
{
bHighlighted = true;
}
void AAuraEnemy::UnHighlightActor()
{
bHighlighted = false;
}

View File

@ -5,12 +5,75 @@
#include "EnhancedInputSubsystems.h"
#include "EnhancedInputComponent.h"
#include "Interaction/EnemyInterface.h"
AAuraPlayerController::AAuraPlayerController()
{
bReplicates = true;
}
void AAuraPlayerController::PlayerTick(float DeltaTime)
{
Super::PlayerTick(DeltaTime);
CursorTrace();
}
void AAuraPlayerController::CursorTrace()
{
FHitResult CursorHit;
GetHitResultUnderCursor(ECC_Visibility, false, CursorHit);
if (!CursorHit.bBlockingHit)
return;
LastActor = ThisActor;
ThisActor = CursorHit.GetActor();
/*
* Line tracer from cursor. There are several scenarios:
* A. LastActor is null && ThisActor is null
* - Do nothing.
* B. LastActor is null && ThisActor is valid
* - Highlight ThisActor.
* C. LastActor is valid && ThisActor is null
* - UnHighlight LastActor
* D. Both actors are valid, but LastActor != ThisActor
* - UnHighlight LastActor.
* - Highlight ThisActor.
* E. Both actors are valid, and are the same actor
* - Do nothing.
*/
if (!LastActor)
{
if (ThisActor)
{
// Case B
ThisActor->HighlightActor();
}
// else Case A
}
else // LastActor is valid
{
if (!ThisActor)
{
// Case C
LastActor->UnHighlightActor();
}
else
{
// Both Actors are valid
if (LastActor != ThisActor)
{
// Case D
LastActor->UnHighlightActor();
ThisActor->HighlightActor();
}
// else do nothing
}
}
}
void AAuraPlayerController::BeginPlay()
{
Super::BeginPlay();
@ -52,4 +115,4 @@ void AAuraPlayerController::Move(const FInputActionValue& InputActionValue)
ControlledPawn->AddMovementInput(ForwardDirection, InputAxisVector.Y);
ControlledPawn->AddMovementInput(RightDirection, InputAxisVector.X);
}
}

View File

@ -18,4 +18,7 @@ class AURA_API AAuraEnemy : public AAuraCharacterBase, public IEnemyInterface
public:
virtual void HighlightActor() override;
virtual void UnHighlightActor() override;
UPROPERTY (BlueprintReadOnly)
bool bHighlighted = false;
};

View File

@ -9,6 +9,8 @@
class UInputMappingContext;
class UInputAction;
class IEnemyInterface;
struct FInputActionValue;
UCLASS()
@ -18,6 +20,7 @@ class AURA_API AAuraPlayerController : public APlayerController
public:
AAuraPlayerController ();
virtual void PlayerTick(float DeltaTime) override;
protected:
virtual void BeginPlay() override;
@ -31,4 +34,10 @@ private:
TObjectPtr<UInputAction> MoveAction;
void Move (const FInputActionValue &InputActionValue);
void CursorTrace ();
// for highlighting
TScriptInterface<IEnemyInterface> LastActor; // TScriptInterface must be used to hold interfaces
TScriptInterface<IEnemyInterface> ThisActor;
};