mirror of
https://github.com/Ed94/Cog.git
synced 2026-07-15 05:51:29 -07:00
add possession in selection window
This commit is contained in:
@@ -136,6 +136,8 @@ void ACogSampleGameState::TickCog(float DeltaSeconds)
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void ACogSampleGameState::InitializeCog()
|
||||
{
|
||||
RegisterCommand(TEXT("Cog.ToggleInput"), TEXT(""), FConsoleCommandWithArgsDelegate::CreateUObject(this, &ACogSampleGameState::CogToggleInput));
|
||||
|
||||
TSharedPtr<SCogImguiWidget> Widget = FCogImguiModule::Get().CreateImGuiViewport(GEngine->GameViewport, [this](float DeltaTime) { RenderCog(DeltaTime); });
|
||||
FCogImguiModule::Get().SetToggleInputKey(FCogImGuiKeyInfo(EKeys::Insert));
|
||||
|
||||
@@ -225,4 +227,21 @@ void ACogSampleGameState::RenderCog(float DeltaTime)
|
||||
FCogDebugDrawImGui::Draw();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void ACogSampleGameState::RegisterCommand(const TCHAR* Name, const TCHAR* Help, const FConsoleCommandWithArgsDelegate& Command)
|
||||
{
|
||||
IConsoleManager& ConsoleManager = IConsoleManager::Get();
|
||||
if (!ConsoleManager.FindConsoleObject(Name))
|
||||
{
|
||||
ConsoleManager.RegisterConsoleCommand(Name, Help, Command, ECVF_Cheat);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void ACogSampleGameState::CogToggleInput(const TArray<FString>& Args)
|
||||
{
|
||||
FCogImguiModule::Get().ToggleEnableInput();
|
||||
}
|
||||
|
||||
|
||||
#endif //USE_COG
|
||||
|
||||
@@ -13,8 +13,11 @@ class ACogSampleGameState : public AGameStateBase
|
||||
GENERATED_BODY()
|
||||
|
||||
ACogSampleGameState(const FObjectInitializer& ObjectInitializer);
|
||||
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
|
||||
|
||||
virtual void Tick(float DeltaSeconds) override;
|
||||
|
||||
private:
|
||||
@@ -23,10 +26,18 @@ private:
|
||||
TObjectPtr<UObject> CogWindowManagerRef = nullptr;
|
||||
|
||||
#if USE_COG
|
||||
|
||||
void InitializeCog();
|
||||
|
||||
void TickCog(float DeltaTime);
|
||||
|
||||
void RenderCog(float DeltaTime);
|
||||
|
||||
void RegisterCommand(const TCHAR* Name, const TCHAR* Help, const FConsoleCommandWithArgsDelegate& Command);
|
||||
|
||||
void CogToggleInput(const TArray<FString>& Args);
|
||||
|
||||
TObjectPtr<UCogWindowManager> CogWindowManager = nullptr;
|
||||
|
||||
#endif //USE_COG
|
||||
};
|
||||
|
||||
@@ -29,9 +29,9 @@ namespace CogSampleLog
|
||||
|
||||
FCogDebugLog::AddLogCategory(LogCogAbility, "Ability");
|
||||
FCogDebugLog::AddLogCategory(LogAbilitySystem, "Ability System");
|
||||
FCogDebugLog::AddLogCategory(LogCogBaseAimRotation, "BaseAimRotation");
|
||||
FCogDebugLog::AddLogCategory(LogCogBaseAimRotation, "Base Aim Rotation");
|
||||
FCogDebugLog::AddLogCategory(LogCogCollision, "Collision");
|
||||
FCogDebugLog::AddLogCategory(LogCogControlRotation, "ControlRotation");
|
||||
FCogDebugLog::AddLogCategory(LogCogControlRotation, "Control Rotation");
|
||||
FCogDebugLog::AddLogCategory(LogCogInput, "Input");
|
||||
FCogDebugLog::AddLogCategory(LogCogPosition, "Position");
|
||||
FCogDebugLog::AddLogCategory(LogCogPossession, "Possession");
|
||||
|
||||
@@ -26,9 +26,9 @@ void ACogSamplePlayerController::BeginPlay()
|
||||
Super::BeginPlay();
|
||||
|
||||
#if USE_COG
|
||||
ACogDebugReplicator::Create(this);
|
||||
ACogAbilityReplicator::Create(this);
|
||||
ACogEngineReplicator::Create(this);
|
||||
ACogDebugReplicator::Spawn(this);
|
||||
ACogAbilityReplicator::Spawn(this);
|
||||
ACogEngineReplicator::Spawn(this);
|
||||
#endif //USE_COG
|
||||
}
|
||||
|
||||
@@ -59,14 +59,14 @@ void ACogSamplePlayerController::OnPossess(APawn* InPawn)
|
||||
}
|
||||
}
|
||||
|
||||
ControlledCharacter = Cast<ACogSampleCharacter>(InPawn);
|
||||
PossessedCharacter = Cast<ACogSampleCharacter>(InPawn);
|
||||
|
||||
if (InitialControlledCharacter == nullptr)
|
||||
if (InitialPossessedCharacter == nullptr)
|
||||
{
|
||||
InitialControlledCharacter = ControlledCharacter;
|
||||
InitialPossessedCharacter = PossessedCharacter;
|
||||
}
|
||||
|
||||
OnControlledCharacterChanged.Broadcast(this, ControlledCharacter.Get(), OldControlledCharacter);
|
||||
OnControlledCharacterChanged.Broadcast(this, PossessedCharacter.Get(), OldControlledCharacter);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
@@ -78,26 +78,26 @@ void ACogSamplePlayerController::AcknowledgePossession(APawn* NewPawn)
|
||||
|
||||
Super::AcknowledgePossession(NewPawn);
|
||||
|
||||
if (InitialControlledCharacter == nullptr)
|
||||
if (InitialPossessedCharacter == nullptr)
|
||||
{
|
||||
InitialControlledCharacter = Cast<ACogSampleCharacter>(NewPawn);
|
||||
InitialPossessedCharacter = Cast<ACogSampleCharacter>(NewPawn);
|
||||
}
|
||||
|
||||
if (ControlledCharacter != nullptr)
|
||||
if (PossessedCharacter != nullptr)
|
||||
{
|
||||
ControlledCharacter->AcknowledgeUnpossession();
|
||||
PossessedCharacter->AcknowledgeUnpossession();
|
||||
}
|
||||
|
||||
ControlledCharacter = Cast<ACogSampleCharacter>(NewPawn);
|
||||
ControlledCharacter->AcknowledgePossession(this);
|
||||
PossessedCharacter = Cast<ACogSampleCharacter>(NewPawn);
|
||||
PossessedCharacter->AcknowledgePossession(this);
|
||||
|
||||
OnControlledCharacterChanged.Broadcast(this, ControlledCharacter.Get(), OldControlledCharacter);
|
||||
OnControlledCharacterChanged.Broadcast(this, PossessedCharacter.Get(), OldControlledCharacter);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void ACogSamplePlayerController::ControlCharacter(ACogSampleCharacter* NewCharacter)
|
||||
void ACogSamplePlayerController::SetPossession(APawn* NewPawn)
|
||||
{
|
||||
if (NewCharacter == nullptr || GetPawn() == NewCharacter)
|
||||
if (NewPawn == nullptr || GetPawn() == NewPawn)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -105,10 +105,10 @@ void ACogSamplePlayerController::ControlCharacter(ACogSampleCharacter* NewCharac
|
||||
//-------------------------------------------------------------------------------------------
|
||||
// Unplug the current controller so it doesn't conflict with the newly assigned controller
|
||||
//-------------------------------------------------------------------------------------------
|
||||
AController* OldController = NewCharacter->GetController();
|
||||
AController* OldController = NewPawn->GetController();
|
||||
if (OldController != nullptr)
|
||||
{
|
||||
COG_LOG_OBJECT(LogCogPossession, ELogVerbosity::Verbose, this, TEXT("%s unpossess %s"), *GetNameSafe(OldController), *GetNameSafe(NewCharacter));
|
||||
COG_LOG_OBJECT(LogCogPossession, ELogVerbosity::Verbose, this, TEXT("%s unpossess %s"), *GetNameSafe(OldController), *GetNameSafe(NewPawn));
|
||||
OldController->UnPossess();
|
||||
}
|
||||
|
||||
@@ -123,8 +123,8 @@ void ACogSamplePlayerController::ControlCharacter(ACogSampleCharacter* NewCharac
|
||||
COG_LOG_OBJECT(LogCogPossession, ELogVerbosity::Verbose, this, TEXT("%s unpossess %s"), *GetNameSafe(this), *GetNameSafe(GetPawn()));
|
||||
UnPossess();
|
||||
|
||||
COG_LOG_OBJECT(LogCogPossession, ELogVerbosity::Verbose, this, TEXT("%s possess %s"), *GetNameSafe(this), *GetNameSafe(NewCharacter));
|
||||
Possess(NewCharacter);
|
||||
COG_LOG_OBJECT(LogCogPossession, ELogVerbosity::Verbose, this, TEXT("%s possess %s"), *GetNameSafe(this), *GetNameSafe(NewPawn));
|
||||
Possess(NewPawn);
|
||||
|
||||
//-------------------------------------------------------------------------------------------
|
||||
// Replug the initial controller on the old character. For example, replug the initial
|
||||
@@ -139,9 +139,9 @@ void ACogSamplePlayerController::ControlCharacter(ACogSampleCharacter* NewCharac
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void ACogSamplePlayerController::ResetControlledPawn()
|
||||
void ACogSamplePlayerController::ResetPossession()
|
||||
{
|
||||
ControlCharacter(InitialControlledCharacter.Get());
|
||||
SetPossession(InitialPossessedCharacter.Get());
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
@@ -170,9 +170,9 @@ void ACogSamplePlayerController::TickTargeting(float DeltaSeconds)
|
||||
}
|
||||
|
||||
#if USE_COG
|
||||
if (Target != nullptr && ControlledCharacter != nullptr)
|
||||
if (Target != nullptr && PossessedCharacter != nullptr)
|
||||
{
|
||||
FCogDebugDraw::Segment(LogCogTargetAcquisition, ControlledCharacter.Get(), ControlledCharacter->GetActorLocation(), Target->GetActorLocation(), FColor::White, false);
|
||||
FCogDebugDraw::Segment(LogCogTargetAcquisition, PossessedCharacter.Get(), PossessedCharacter->GetActorLocation(), Target->GetActorLocation(), FColor::White, false);
|
||||
}
|
||||
#endif //USE_COG
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "AbilitySystemInterface.h"
|
||||
#include "CogInterfacePossessor.h"
|
||||
#include "GameFramework/PlayerController.h"
|
||||
#include "CogSamplePlayerController.generated.h"
|
||||
|
||||
@@ -15,7 +16,9 @@ DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FCogSampleControlledCharacterChan
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
UCLASS(config=Game)
|
||||
class ACogSamplePlayerController : public APlayerController
|
||||
class ACogSamplePlayerController
|
||||
: public APlayerController
|
||||
, public ICogInterfacePossessor
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
@@ -28,18 +31,18 @@ public:
|
||||
virtual void Tick(float DeltaSeconds) override;
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
// Control
|
||||
// Possession
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
UFUNCTION(BlueprintCallable)
|
||||
virtual void SetPossession(APawn* NewPawn) override;
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
virtual void ResetPossession() override;
|
||||
|
||||
virtual void OnPossess(APawn* NewPawn) override;
|
||||
|
||||
virtual void AcknowledgePossession(APawn* NewPawn) override;
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void ControlCharacter(ACogSampleCharacter* NewCharacter);
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void ResetControlledPawn();
|
||||
|
||||
UPROPERTY(BlueprintAssignable)
|
||||
FCogSampleControlledCharacterChangedEventDelegate OnControlledCharacterChanged;
|
||||
|
||||
@@ -57,14 +60,14 @@ public:
|
||||
private:
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
// Control
|
||||
// Possession
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
UPROPERTY(BlueprintReadonly, meta = (AllowPrivateAccess = "true"))
|
||||
TWeakObjectPtr<ACogSampleCharacter> ControlledCharacter = nullptr;
|
||||
TWeakObjectPtr<ACogSampleCharacter> PossessedCharacter = nullptr;
|
||||
|
||||
UPROPERTY(BlueprintReadonly, meta = (AllowPrivateAccess = "true"))
|
||||
TWeakObjectPtr<ACogSampleCharacter> InitialControlledCharacter = nullptr;
|
||||
TWeakObjectPtr<ACogSampleCharacter> InitialPossessedCharacter = nullptr;
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
// Targeting
|
||||
|
||||
Reference in New Issue
Block a user