13. "Highlight Enemies"
This commit is contained in:
@ -1,12 +1,14 @@
|
||||
#include "GasaCharacter.h"
|
||||
|
||||
#include "Camera/CameraComponent.h"
|
||||
#include "Components/CapsuleComponent.h"
|
||||
#include "GameFramework/CharacterMovementComponent.h"
|
||||
#include "GameFramework/SpringArmComponent.h"
|
||||
#include "Kismet/KismetSystemLibrary.h"
|
||||
|
||||
void AGasaCharacter::SetHighlight(EHighlight desired)
|
||||
void AGasaCharacter::SetHighlight(EHighlight Desired)
|
||||
{
|
||||
|
||||
HighlightState = Desired;
|
||||
}
|
||||
|
||||
AGasaCharacter::AGasaCharacter()
|
||||
@ -48,3 +50,29 @@ void AGasaCharacter::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
}
|
||||
|
||||
void AGasaCharacter::Tick(float DeltaSeconds)
|
||||
{
|
||||
Super::Tick(DeltaSeconds);
|
||||
|
||||
switch (HighlightState)
|
||||
{
|
||||
case EHighlight::Disabled:
|
||||
break;
|
||||
case EHighlight::Enabled:
|
||||
{
|
||||
UCapsuleComponent* Capsule = GetCapsuleComponent();
|
||||
|
||||
UKismetSystemLibrary::DrawDebugCapsule(this
|
||||
, Capsule->GetComponentLocation()
|
||||
, Capsule->GetScaledCapsuleHalfHeight()
|
||||
, Capsule->GetScaledCapsuleRadius()
|
||||
, Capsule->GetComponentRotation()
|
||||
, FLinearColor(0.8, 0.32, 0.05f, 1.f)
|
||||
, 0.f
|
||||
, 1.f
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,13 @@
|
||||
|
||||
#include "GasaCharacter.generated.h"
|
||||
|
||||
UENUM(BlueprintType)
|
||||
enum class EHighlight : uint8
|
||||
{
|
||||
Disabled,
|
||||
Enabled,
|
||||
};
|
||||
|
||||
UCLASS(Abstract)
|
||||
class GASA_API AGasaCharacter : public ACharacter
|
||||
{
|
||||
@ -25,10 +32,11 @@ public:
|
||||
|
||||
// This will be implemented in the base until it needs to be lifted into an abstraction.
|
||||
#pragma region Highlighting
|
||||
void SetHighlight( EHighlight desired );
|
||||
EHighlight HighlightState;
|
||||
void SetHighlight( EHighlight Desired );
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
FORCEINLINE void Highlight() { SetHighlight(EHighlight::Disabled); };
|
||||
FORCEINLINE void Highlight() { SetHighlight(EHighlight::Enabled); };
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
FORCEINLINE void Dehighlight() { SetHighlight(EHighlight::Disabled); };
|
||||
@ -38,5 +46,7 @@ public:
|
||||
|
||||
#pragma region Actor
|
||||
void BeginPlay() override;
|
||||
|
||||
void Tick(float DeltaSeconds) override;
|
||||
#pragma endregion Actor
|
||||
};
|
||||
|
@ -1 +1,6 @@
|
||||
#include "PlayerCharacter.h"
|
||||
#include "PlayerCharacter.h"
|
||||
|
||||
APlayerCharacter::APlayerCharacter()
|
||||
{
|
||||
PrimaryActorTick.bCanEverTick = true;
|
||||
}
|
||||
|
@ -10,5 +10,5 @@ class GASA_API APlayerCharacter : public AGasaCharacter
|
||||
GENERATED_BODY()
|
||||
public:
|
||||
|
||||
|
||||
APlayerCharacter();
|
||||
};
|
||||
|
@ -10,6 +10,8 @@ public class Gasa : ModuleRules
|
||||
{
|
||||
public Gasa(ReadOnlyTargetRules Target) : base(Target)
|
||||
{
|
||||
bUseUnity = false;
|
||||
|
||||
#region Engine
|
||||
PrivateIncludePathModuleNames.AddRange(new string[] {
|
||||
"Core",
|
||||
@ -29,12 +31,18 @@ public class Gasa : ModuleRules
|
||||
"InputCore",
|
||||
"NetCore",
|
||||
"Niagara",
|
||||
"UMG",
|
||||
});
|
||||
#endregion Engine
|
||||
|
||||
#region Plugins
|
||||
if (Target.Configuration != UnrealTargetConfiguration.Shipping && Target.Type != TargetRules.TargetType.Server)
|
||||
{
|
||||
PrivateDefinitions.AddRange(new string[]
|
||||
{
|
||||
"ENABLE_COG=true",
|
||||
});
|
||||
|
||||
PrivateIncludePathModuleNames.AddRange( new string[]
|
||||
{
|
||||
"CogCommon",
|
||||
|
@ -2,15 +2,21 @@
|
||||
#include "CoreMinimal.h"
|
||||
// #define private protected
|
||||
|
||||
UENUM(BlueprintType)
|
||||
enum class EHighlight
|
||||
{
|
||||
Disabled,
|
||||
Enabled,
|
||||
};
|
||||
#include "CogCommon.h"
|
||||
|
||||
#pragma region Engine Forwards
|
||||
class UCameraComponent;
|
||||
class UInputAction;
|
||||
struct FInputActionValue;
|
||||
class UInputMappingContext;
|
||||
class USpringArmComponent;
|
||||
#pragma endregion Engine Forwards
|
||||
|
||||
#pragma region Engine Plugin Forwards
|
||||
class UCogWindowManager;
|
||||
#pragma endregion Engine Plugin Forwards
|
||||
|
||||
#pragma region Gasa Forwards
|
||||
class AGasaCharacter;
|
||||
#pragma endregion Gasa Forwards
|
||||
|
||||
|
34
Project/Source/Gasa/GasaGameState.cpp
Normal file
34
Project/Source/Gasa/GasaGameState.cpp
Normal file
@ -0,0 +1,34 @@
|
||||
#include "GasaGameState.h"
|
||||
|
||||
#include "CogAll.h"
|
||||
#include "CogWindowManager.h"
|
||||
|
||||
AGasaGameState::AGasaGameState()
|
||||
{
|
||||
// Enable ticking
|
||||
PrimaryActorTick.bCanEverTick = true;
|
||||
PrimaryActorTick.SetTickFunctionEnable(true);
|
||||
PrimaryActorTick.bStartWithTickEnabled = true;
|
||||
}
|
||||
|
||||
#pragma region GameState
|
||||
void AGasaGameState::BeginPlay()
|
||||
{
|
||||
#if ENABLE_COG
|
||||
CogWindowManager = NewObject<UCogWindowManager>(this);
|
||||
CogWindowManagerRef = CogWindowManager;
|
||||
|
||||
// Add all the built-in windows
|
||||
Cog::AddAllWindows(*CogWindowManager);
|
||||
#endif //ENABLE_COG
|
||||
}
|
||||
|
||||
void AGasaGameState::Tick(float DeltaSeconds)
|
||||
{
|
||||
Super::Tick(DeltaSeconds);
|
||||
|
||||
#if ENABLE_COG
|
||||
CogWindowManager->Tick(DeltaSeconds);
|
||||
#endif //ENABLE_COG
|
||||
}
|
||||
#pragma endregion GameState
|
30
Project/Source/Gasa/GasaGameState.h
Normal file
30
Project/Source/Gasa/GasaGameState.h
Normal file
@ -0,0 +1,30 @@
|
||||
#pragma once
|
||||
|
||||
#include "GameFramework/GameState.h"
|
||||
#include "GasaCommon.h"
|
||||
|
||||
#include "GasaGameState.generated.h"
|
||||
|
||||
UCLASS(Blueprintable)
|
||||
class GASA_API AGasaGameState : public AGameState
|
||||
{
|
||||
GENERATED_BODY()
|
||||
public:
|
||||
#pragma region Cog
|
||||
// To make sure it doesn't get garbage collected.
|
||||
UPROPERTY()
|
||||
TObjectPtr<UObject> CogWindowManagerRef = nullptr;
|
||||
|
||||
#if ENABLE_COG
|
||||
TObjectPtr<UCogWindowManager> CogWindowManager = nullptr;
|
||||
#endif // ENABLE_COG
|
||||
#pragma endregion Cog
|
||||
|
||||
AGasaGameState();
|
||||
|
||||
#pragma region GameState
|
||||
void BeginPlay() override;
|
||||
|
||||
void Tick(float DeltaSeconds) override;
|
||||
#pragma endregion GameState
|
||||
};
|
@ -3,6 +3,7 @@
|
||||
#include "Engine/LocalPlayer.h"
|
||||
#include "EnhancedInputComponent.h"
|
||||
#include "EnhancedInputSubsystems.h"
|
||||
#include "Character/GasaCharacter.h"
|
||||
|
||||
AGasaPlayerController::AGasaPlayerController()
|
||||
{
|
||||
@ -53,6 +54,44 @@ void AGasaPlayerController::Move(FInputActionValue const& ActionValue)
|
||||
}
|
||||
|
||||
#pragma region PlayerController
|
||||
void AGasaPlayerController::PlayerTick(float DeltaTime)
|
||||
{
|
||||
Super::PlayerTick(DeltaTime);
|
||||
|
||||
// Cursor Trace
|
||||
for (int32 do_once = 0; do_once != 1; ++ do_once)
|
||||
{
|
||||
FHitResult CursorHit;
|
||||
GetHitResultUnderCursor(ECC_Pawn, false, CursorHit);
|
||||
if (! CursorHit.bBlockingHit)
|
||||
break;
|
||||
|
||||
HoverPrev = HoverCurr;
|
||||
HoverCurr = Cast<AGasaCharacter>(CursorHit.GetActor());
|
||||
if (HoverPrev == nullptr)
|
||||
{
|
||||
// We didn't have a prev to de-highlight so we just need to highlight newly detected character.
|
||||
if (HoverCurr)
|
||||
HoverCurr->Highlight();
|
||||
|
||||
// No matter what we need to not go to the next case as there is no previous.
|
||||
break;
|
||||
}
|
||||
//else Previous is valid...
|
||||
|
||||
// We are no longer hovering the previous with no new character, we just need to de-highlight previous.
|
||||
if ( HoverCurr == nullptr )
|
||||
HoverPrev->Dehighlight();
|
||||
|
||||
// We had a prev and curr change between frames. They both don't match; we need to switch highlighting.
|
||||
else if ( HoverPrev != HoverCurr )
|
||||
{
|
||||
HoverPrev->Dehighlight();
|
||||
HoverCurr->Highlight();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AGasaPlayerController::SetupInputComponent()
|
||||
{
|
||||
Super::SetupInputComponent();
|
||||
|
@ -13,6 +13,12 @@ class GASA_API AGasaPlayerController : public APlayerController
|
||||
public:
|
||||
|
||||
#pragma region Input
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
|
||||
AGasaCharacter* HoverPrev;
|
||||
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
|
||||
AGasaCharacter* HoverCurr;
|
||||
|
||||
UPROPERTY(EditAnywhere, Category="Input")
|
||||
TObjectPtr<UInputMappingContext> IMC;
|
||||
|
||||
@ -25,6 +31,8 @@ public:
|
||||
void Move(FInputActionValue const& ActionValue);
|
||||
|
||||
#pragma region PlayerController
|
||||
void PlayerTick(float DeltaTime) override;
|
||||
|
||||
void SetupInputComponent() override;
|
||||
#pragma endregion PlayerController
|
||||
|
||||
|
0
Project/Source/Gasa/GasaViewport.cpp
Normal file
0
Project/Source/Gasa/GasaViewport.cpp
Normal file
15
Project/Source/Gasa/GasaViewport.h
Normal file
15
Project/Source/Gasa/GasaViewport.h
Normal file
@ -0,0 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
#include "Blueprint/GameViewportSubsystem.h"
|
||||
|
||||
#include "GasaViewport.generated.h"
|
||||
|
||||
UCLASS()
|
||||
class GASA_API UGasaViewportSubsystem : public UGameViewportSubsystem
|
||||
{
|
||||
GENERATED_BODY()
|
||||
public:
|
||||
// UGasaViewportSubsystem();
|
||||
|
||||
|
||||
};
|
@ -11,6 +11,8 @@ public class GasaEditorTarget : TargetRules
|
||||
|
||||
DefaultBuildSettings = BuildSettingsVersion.Latest;
|
||||
|
||||
bUseUnityBuild = false;
|
||||
|
||||
ExtraModuleNames.Add("Gasa");
|
||||
ExtraModuleNames.Add("GasaEditor");
|
||||
}
|
||||
|
Reference in New Issue
Block a user