highlight enemies
This commit is contained in:
parent
16eddc8849
commit
adfe961cef
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -5,8 +5,10 @@
|
||||
|
||||
void AAuraEnemy::HighlightActor()
|
||||
{
|
||||
bHighlighted = true;
|
||||
}
|
||||
|
||||
void AAuraEnemy::UnHighlightActor()
|
||||
{
|
||||
bHighlighted = false;
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user