mirror of
https://github.com/Ed94/Cog.git
synced 2026-08-03 05:08:13 +00:00
add possession in selection window
This commit is contained in:
@@ -14,37 +14,6 @@ void FCogAbilityModule::ShutdownModule()
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
ACogAbilityReplicator* FCogAbilityModule::GetLocalReplicator()
|
||||
{
|
||||
return LocalReplicator;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void FCogAbilityModule::SetLocalReplicator(ACogAbilityReplicator* Value)
|
||||
{
|
||||
LocalReplicator = Value;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
ACogAbilityReplicator* FCogAbilityModule::GetRemoteReplicator(const APlayerController* PlayerController)
|
||||
{
|
||||
for (ACogAbilityReplicator* Replicator : RemoteReplicators)
|
||||
{
|
||||
if (Replicator->GetPlayerController() == PlayerController)
|
||||
{
|
||||
return Replicator;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void FCogAbilityModule::AddRemoteReplicator(ACogAbilityReplicator* Value)
|
||||
{
|
||||
RemoteReplicators.Add(Value);
|
||||
}
|
||||
|
||||
#undef LOCTEXT_NAMESPACE
|
||||
|
||||
IMPLEMENT_MODULE(FCogAbilityModule, CogAbility)
|
||||
|
||||
@@ -9,13 +9,37 @@
|
||||
#include "Net/UnrealNetwork.h"
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void ACogAbilityReplicator::Create(APlayerController* Controller)
|
||||
ACogAbilityReplicator* ACogAbilityReplicator::Spawn(APlayerController* Controller)
|
||||
{
|
||||
if (Controller->GetWorld()->GetNetMode() != NM_Client)
|
||||
if (Controller->GetWorld()->GetNetMode() == NM_Client)
|
||||
{
|
||||
FActorSpawnParameters SpawnInfo;
|
||||
SpawnInfo.Owner = Controller;
|
||||
Controller->GetWorld()->SpawnActor<ACogAbilityReplicator>(SpawnInfo);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
FActorSpawnParameters SpawnInfo;
|
||||
SpawnInfo.Owner = Controller;
|
||||
return Controller->GetWorld()->SpawnActor<ACogAbilityReplicator>(SpawnInfo);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
ACogAbilityReplicator* ACogAbilityReplicator::GetLocalReplicator(UWorld& World)
|
||||
{
|
||||
for (TActorIterator<ACogAbilityReplicator> It(&World, ACogAbilityReplicator::StaticClass()); It; ++It)
|
||||
{
|
||||
ACogAbilityReplicator* Replicator = *It;
|
||||
return Replicator;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void ACogAbilityReplicator::GetRemoteReplicators(UWorld& World, TArray<ACogAbilityReplicator*>& Replicators)
|
||||
{
|
||||
for (TActorIterator<ACogAbilityReplicator> It(&World, ACogAbilityReplicator::StaticClass()); It; ++It)
|
||||
{
|
||||
ACogAbilityReplicator* Replicator = Cast<ACogAbilityReplicator>(*It);
|
||||
Replicators.Add(Replicator);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,18 +74,6 @@ void ACogAbilityReplicator::BeginPlay()
|
||||
Super::BeginPlay();
|
||||
|
||||
OwnerPlayerController = Cast<APlayerController>(GetOwner());
|
||||
|
||||
if (OwnerPlayerController != nullptr)
|
||||
{
|
||||
if (OwnerPlayerController->IsLocalController())
|
||||
{
|
||||
FCogAbilityModule::Get().SetLocalReplicator(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
FCogAbilityModule::Get().AddRemoteReplicator(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -117,8 +117,7 @@ void UCogAbilityWindow_Abilities::RenderAbiltiesMenu(AActor* Selection)
|
||||
|
||||
if (ImGui::MenuItem(TCHAR_TO_ANSI(*GetNameSafe(AbilityClass))))
|
||||
{
|
||||
FCogAbilityModule& Module = FCogAbilityModule::Get();
|
||||
if (ACogAbilityReplicator* Replicator = Module.GetLocalReplicator())
|
||||
if (ACogAbilityReplicator* Replicator = ACogAbilityReplicator::GetLocalReplicator(*GetWorld()))
|
||||
{
|
||||
Replicator->GiveAbility(Selection, AbilityClass);
|
||||
}
|
||||
@@ -431,8 +430,7 @@ void UCogAbilityWindow_Abilities::GameTick(float DeltaTime)
|
||||
{
|
||||
if (AActor* Selection = GetSelection())
|
||||
{
|
||||
FCogAbilityModule& Module = FCogAbilityModule::Get();
|
||||
if (ACogAbilityReplicator* Replicator = Module.GetLocalReplicator())
|
||||
if (ACogAbilityReplicator* Replicator = ACogAbilityReplicator::GetLocalReplicator(*GetWorld()))
|
||||
{
|
||||
Replicator->RemoveAbility(Selection, AbilityHandleToRemove);
|
||||
}
|
||||
|
||||
@@ -59,8 +59,7 @@ void UCogAbilityWindow_Cheats::SetCheatsAsset(const UCogAbilityDataAsset_Cheats*
|
||||
return;
|
||||
}
|
||||
|
||||
FCogAbilityModule& Module = FCogAbilityModule::Get();
|
||||
ACogAbilityReplicator* Replicator = Module.GetLocalReplicator();
|
||||
ACogAbilityReplicator* Replicator = ACogAbilityReplicator::GetLocalReplicator(*GetWorld());
|
||||
if (Replicator == nullptr)
|
||||
{
|
||||
return;
|
||||
@@ -274,8 +273,7 @@ void UCogAbilityWindow_Cheats::RequestCheat(AActor* ControlledActor, AActor* Sel
|
||||
Actors.Add(SelectedActor);
|
||||
}
|
||||
|
||||
FCogAbilityModule& Module = FCogAbilityModule::Get();
|
||||
if (ACogAbilityReplicator* Replicator = Module.GetLocalReplicator())
|
||||
if (ACogAbilityReplicator* Replicator = ACogAbilityReplicator::GetLocalReplicator(*GetWorld()))
|
||||
{
|
||||
Replicator->ApplyCheat(ControlledActor, Actors, Cheat);
|
||||
}
|
||||
|
||||
@@ -23,8 +23,7 @@ void UCogAbilityWindow_Tweaks::RenderContent()
|
||||
return;
|
||||
}
|
||||
|
||||
FCogAbilityModule& Module = FCogAbilityModule::Get();
|
||||
ACogAbilityReplicator* Replicator = Module.GetLocalReplicator();
|
||||
ACogAbilityReplicator* Replicator = ACogAbilityReplicator::GetLocalReplicator(*GetWorld());
|
||||
if (Replicator == nullptr)
|
||||
{
|
||||
return;
|
||||
|
||||
@@ -3,28 +3,15 @@
|
||||
#include "CoreMinimal.h"
|
||||
#include "Modules/ModuleManager.h"
|
||||
|
||||
class ACogAbilityReplicator;
|
||||
class APlayerController;
|
||||
|
||||
class COGABILITY_API FCogAbilityModule : public IModuleInterface
|
||||
{
|
||||
public:
|
||||
|
||||
static inline FCogAbilityModule& Get()
|
||||
{
|
||||
return FModuleManager::LoadModuleChecked<FCogAbilityModule>("CogAbility");
|
||||
}
|
||||
static inline FCogAbilityModule& Get() { return FModuleManager::LoadModuleChecked<FCogAbilityModule>("CogAbility"); }
|
||||
|
||||
/** IModuleInterface implementation */
|
||||
virtual void StartupModule() override;
|
||||
|
||||
virtual void ShutdownModule() override;
|
||||
|
||||
ACogAbilityReplicator* GetLocalReplicator();
|
||||
void SetLocalReplicator(ACogAbilityReplicator* Value);
|
||||
ACogAbilityReplicator* GetRemoteReplicator(const APlayerController* PlayerController);
|
||||
void AddRemoteReplicator(ACogAbilityReplicator* Value);
|
||||
|
||||
private:
|
||||
TObjectPtr<ACogAbilityReplicator> LocalReplicator;
|
||||
TArray<TObjectPtr<ACogAbilityReplicator>> RemoteReplicators;
|
||||
};
|
||||
|
||||
@@ -18,7 +18,11 @@ class COGABILITY_API ACogAbilityReplicator : public AActor
|
||||
|
||||
public:
|
||||
|
||||
static void Create(APlayerController* Controller);
|
||||
static ACogAbilityReplicator* Spawn(APlayerController* Controller);
|
||||
|
||||
static ACogAbilityReplicator* GetLocalReplicator(UWorld& World);
|
||||
|
||||
static void GetRemoteReplicators(UWorld& World, TArray<ACogAbilityReplicator*>& Replicators);
|
||||
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "CogWindow.h"
|
||||
#include "CogAbilityWindow_Tweaks.generated.h"
|
||||
|
||||
class ACogAbilityReplicator;
|
||||
class UCogAbilityDataAsset_Tweaks;
|
||||
|
||||
UCLASS()
|
||||
|
||||
Reference in New Issue
Block a user