From 91a18306e4df4d6386c3068a3a5234cbbcc5261e Mon Sep 17 00:00:00 2001 From: Arnaud Jamin Date: Tue, 10 Oct 2023 11:26:37 -0400 Subject: [PATCH] add remove ability --- Content/Core/Debug/Cheats/AM_Cheat.uasset | Bin 0 -> 11460 bytes .../Core/Debug/Cheats/GA_Cheat_Debug.uasset | Bin 27674 -> 54919 bytes Content/Core/Debug/Cheats/GE_Cheat.uasset | Bin 6078 -> 6060 bytes Content/Core/Debug/DA_Debug_Abilities.uasset | Bin 2036 -> 1850 bytes .../T_Cheat.uasset} | Bin 11216 -> 11162 bytes .../Private/CogAbilityReplicator.cpp | 35 ++++++++++- .../Private/CogAbilityWindow_Abilities.cpp | 55 +++++++++++------- .../Private/CogAbilityWindow_Effects.cpp | 10 +--- .../CogAbility/Public/CogAbilityReplicator.h | 7 ++- .../Public/CogAbilityWindow_Abilities.h | 4 +- .../Private/CogEngineWindow_DebugSettings.cpp | 2 +- .../Private/CogEngineWindow_OutputLog.cpp | 52 ++++++++--------- .../Private/CogEngineWindow_Skeleton.cpp | 11 ++++ .../Public/CogEngineWindow_Skeleton.h | 7 ++- 14 files changed, 122 insertions(+), 61 deletions(-) create mode 100644 Content/Core/Debug/Cheats/AM_Cheat.uasset rename Content/Core/{Debug/Cheats/T_Effect_Cheat.uasset => Textures/T_Cheat.uasset} (53%) diff --git a/Content/Core/Debug/Cheats/AM_Cheat.uasset b/Content/Core/Debug/Cheats/AM_Cheat.uasset new file mode 100644 index 0000000000000000000000000000000000000000..fa13ce37a97e90f3189fd95dfa37fcec5776eee4 GIT binary patch literal 11460 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 UQiefnhnm=ywq1QIrF4U^=Bj7~CfW&#Aog5s{Y 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 literal 27674 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 QqB-53{&faF8v+0S0KUt@SO5S3 diff --git a/Content/Core/Debug/Cheats/GE_Cheat.uasset b/Content/Core/Debug/Cheats/GE_Cheat.uasset index b604b1e68428356f3938f91248981bd18600f911..fbb9e3050a2435d28767ba7ef5f69316f80525ee 100644 GIT binary patch delta 295 zcmdm|zeaz;9>)C>_gXN9P5h=~5yr;Az|O$HpvK9-AOxgA{A1ie1`u%ZK(HE+K4qqL6vN2>K(Jqgfk6x?P_y|tBP-KnX%=-A86a2R zJux>`-#Nc1RX-%PqNKDawOBtS-Z>*Rv4kPiW`EpfCzijA0vtet0L_V^d=M zy19~VITPcT$%>rTjQc0Ya>g?q7M=iz6S0&+HQ?&dM(1^|?XQVIY7 delta 271 zcmZ3ZzfXU{9>$9k_gXM!O#G%}k-^5mz|O$HV8O}2AOxgA{2Sar1`x>bK(GanUO4&W z+g7jT?#o_h7e8Z{@R}UOn4{PQl;{$ND29>$f#9MD1A`b)pl|bYMph<9^@#_ig+t<9 z)6!CtOX8g~QWHxU_RHj)ocxAaeX}{sUq*3$pkg!yZt0a%C%dpIF@D*c&bFM1@#|!M zPHV=Clf60PnXZaXF65G%e2UY7QFSsmS3Fak*knc?)yWgNESVlbm>+>mZt=-F+;L2G b;$X>*+*248CcE+IvFZSweROjrk1;m@KoCn^ diff --git a/Content/Core/Debug/DA_Debug_Abilities.uasset b/Content/Core/Debug/DA_Debug_Abilities.uasset index b43d4558a631255486212b947ec00dbd3a6dad96..e21228fb90058a633a29983e7f7287d1e524d3ac 100644 GIT binary patch delta 482 zcmeyuzl(2z0m}q728PLAOd5g=Kp+Ifsf-{N1B1iFTpbGsW(Ec(Ajg1(fdQzH0mT0R zWP`vTAPvGitPBjw+q}Z6e=YUdvUXR?sZZt`Ctj3b6q@)dSkV_K$;J-R03-hc0mxdQ z6a&}fIL3<2(o7PJlLMH8>N%lmxS;eOpi(|48{`fc;D9o?q4aN{Ivyw+pSoW_b^N&1 zF);{C_GXbcgc&aYRSKeDp1@|jz~tF1@@oHph9hZU;DvHPjx>d`C$LTCV6{^Fi>4GD z`amTh!yTbYkFrh9V6|ceMaTcit64+XKmpdmwwaa9l#vw_8TOOy*~P_RZUx2+1VA(t Hu(tpJ5T`>@ delta 640 zcmdnR_l19g0gD?u1H)uiCJiA5AP@oKR7MbsfngEzC(!x4P&PhwKY;24@u(A;e2`h*5N0|!7NDwuVFm`+Oc$Cg z$Rh8DO&3fIS=V2n8=!`PDLyC%kwQA2g-HlNYiGGu5+C-o|3Z12PjR z|NkElPmW=cm@L3*$+is`fmZCB{aH;JSwV^8|Kvm#VL6bgu%KcFaXjX4SMeNg#~|Kn)7YAQl4r2Lg~Y^?^bvn>!f= z87FUH`of)>5}a9;$`H%DH)QfW<~Tv1GZ;McN&@mT^GX=%N!NJ1zECn&82r4=W~NP5{L>tKb-z>J4-fu^fMnJ}|f zK!Z(cvb>Z6ConC80mozyDJNx6QUU>VQxL9Go4i)az?!f+WVeA#B+DLc;_Z ImG^Q006v7n{{R30 delta 1433 zcmbVMT}TvB6ux(Lb!ON6$=2D~b#-?ASw!8@2zn4r-L@?92a%K@WvfvuQ*hUZATo)h z7j@$hNEki%5(E(qN-yC9AW}jP^&oc7?48loqMrkE&pF?B?!D*Sb9V1_ zzwJ)+G_6U51PLMP@#qyz4Udd!>QU|7*nk=y)S~g2+SM27@7K=9`wX8264J=N1VxJw zD%_c_Y@q@n8O&P|3CS{0Li}hjIl(l3s*5?RB}Zx!lP&WL6LXGJpR#pfYV~{jtuWZ< z9?UIHW&@>N6{Vl$Y24VuHk>X&Yg@LMV8$wg&gj=^9`)>JW^**AwT)cR!Xv}+=*3}e zlsws(cn>qSZ!nwIrEjKPrnxLd(y7J9hT<{O`DL~m2JJKIKUBU{IP_BYX3SG5hn=+R zS&j`{y$f$LL(~VGnL%UqLZgtytX9GF6NZ1^@YjW6v4)+4;)8VyJD7wRRxjc{j5}mu zQwFvm1|1#z{nsSO^B(}kZ-*^0Vylxax6e`UsI?`xKHY|w91+_`uN777jL>JGIlCQa zdF&6xB=u!ylc@fp+E&)iW!420%wuN=G`VimNASv3W($R&UH0kDg2yxk0cXLbB9F0~ z5QXb>t_h}52shnr4QB7tIE5WVQH+%>csG(h6JXlQZ8zk|5>+55pB&%G+d0oBHASc~ zzz8WEw=zP%oP!G2DP$=J-CRG!#F)rQ1&gvrG?N$Mo!ngFNHS!17TdLyL4&8J?$2>M zYr{kT>z>NLzsCnFO1^&0`#POX=Z2V11JJ8f!3(99=0R^jqPfQSd{yjF?w6{GWw5d5~H2KJJrhZs1@t>DUvQog@eeaif51bJliW vVa%EtoCy_yD$#s-DW&Xmm=3rPEBrXCV64f{K|U5%tBjFH&ZmC}JQscf0G-Yg diff --git a/Plugins/CogAbility/Source/CogAbility/Private/CogAbilityReplicator.cpp b/Plugins/CogAbility/Source/CogAbility/Private/CogAbilityReplicator.cpp index 85a83df..d2b2eef 100644 --- a/Plugins/CogAbility/Source/CogAbility/Private/CogAbilityReplicator.cpp +++ b/Plugins/CogAbility/Source/CogAbility/Private/CogAbilityReplicator.cpp @@ -133,7 +133,7 @@ bool ACogAbilityReplicator::IsCheatActive(const AActor* EffectTarget, const FCog } //-------------------------------------------------------------------------------------------------------------------------- -void ACogAbilityReplicator::GiveAbility(AActor* Target, TSubclassOf AbilityClass) +void ACogAbilityReplicator::GiveAbility(AActor* Target, TSubclassOf AbilityClass) const { Server_GiveAbility(Target, AbilityClass); } @@ -148,12 +148,12 @@ void ACogAbilityReplicator::Server_GiveAbility_Implementation(AActor* TargetActo return; } - if (IsValid(AbilityClass) == false) + if (AbilitySystem->IsOwnerActorAuthoritative() == false) { return; } - if (AbilitySystem->IsOwnerActorAuthoritative() == false) + if (IsValid(AbilityClass) == false) { return; } @@ -162,6 +162,35 @@ void ACogAbilityReplicator::Server_GiveAbility_Implementation(AActor* TargetActo AbilitySystem->GiveAbility(Spec); } +//-------------------------------------------------------------------------------------------------------------------------- +void ACogAbilityReplicator::RemoveAbility(AActor* TargetActor, const FGameplayAbilitySpecHandle& Handle) const +{ + Server_RemoveAbility(TargetActor, Handle); +} + +//-------------------------------------------------------------------------------------------------------------------------- +void ACogAbilityReplicator::Server_RemoveAbility_Implementation(AActor* TargetActor, const FGameplayAbilitySpecHandle& Handle) const +{ + UAbilitySystemComponent* AbilitySystem = UAbilitySystemGlobals::GetAbilitySystemComponentFromActor(TargetActor, true); + + if (AbilitySystem == nullptr) + { + return; + } + + if (AbilitySystem->IsOwnerActorAuthoritative() == false) + { + return; + } + + if (Handle.IsValid() == false) + { + return; + } + + AbilitySystem->SetRemoveAbilityOnEnd(Handle); +} + //-------------------------------------------------------------------------------------------------------------------------- void ACogAbilityReplicator::ResetAllTweaks() { diff --git a/Plugins/CogAbility/Source/CogAbility/Private/CogAbilityWindow_Abilities.cpp b/Plugins/CogAbility/Source/CogAbility/Private/CogAbilityWindow_Abilities.cpp index 3c9792b..f200bad 100644 --- a/Plugins/CogAbility/Source/CogAbility/Private/CogAbilityWindow_Abilities.cpp +++ b/Plugins/CogAbility/Source/CogAbility/Private/CogAbilityWindow_Abilities.cpp @@ -68,7 +68,7 @@ void UCogAbilityWindow_Abilities::RenderOpenAbilities() bool Open = true; if (ImGui::Begin(TCHAR_TO_ANSI(*GetAbilityName(Ability)), &Open)) { - RenderAbilityInfo(*Spec); + RenderAbilityInfo(*AbilitySystemComponent, *Spec); ImGui::End(); } @@ -98,18 +98,6 @@ void UCogAbilityWindow_Abilities::RenderContent() RenderAbiltiesMenu(Selection); - //TArray& Abilities = AbilitySystemComponent->GetActivatableAbilities(); - //static int FocusedAbilityIndex = INDEX_NONE; - //if (FocusedAbilityIndex != INDEX_NONE && FocusedAbilityIndex < Abilities.Num()) - //{ - // RenderAbilityInfo(Abilities[FocusedAbilityIndex]); - // if (ImGui::Button("Close", ImVec2(-1, 0))) - // { - // FocusedAbilityIndex = INDEX_NONE; - // } - // ImGui::Spacing(); - //} - RenderAbilitiesTable(*AbilitySystemComponent); } @@ -215,7 +203,7 @@ void UCogAbilityWindow_Abilities::RenderAbilitiesTable(UAbilitySystemComponent& if (ImGui::IsItemHovered()) { FCogWindowWidgets::BeginTableTooltip(); - RenderAbilityInfo(Spec); + RenderAbilityInfo(AbilitySystemComponent, Spec); FCogWindowWidgets::EndTableTooltip(); } @@ -291,11 +279,10 @@ void UCogAbilityWindow_Abilities::RenderAbilityContextMenu(UAbilitySystemCompone ImGui::CloseCurrentPopup(); } - //if (ImGui::Button("Open Properties")) - //{ - // GetOwner()->GetPropertyGrid()->Open(BaseAbility); - // ImGui::CloseCurrentPopup(); - //} + if (ImGui::Button("Remove")) + { + AbilityHandleToRemove = Spec.Handle; + } ImGui::EndPopup(); } @@ -326,7 +313,7 @@ FString UCogAbilityWindow_Abilities::GetAbilityName(const UGameplayAbility* Abil } //-------------------------------------------------------------------------------------------------------------------------- -void UCogAbilityWindow_Abilities::RenderAbilityInfo(FGameplayAbilitySpec& Spec) +void UCogAbilityWindow_Abilities::RenderAbilityInfo(const UAbilitySystemComponent& AbilitySystemComponent, FGameplayAbilitySpec& Spec) { UGameplayAbility* Ability = Spec.GetPrimaryInstance(); if (Ability == nullptr) @@ -334,6 +321,11 @@ void UCogAbilityWindow_Abilities::RenderAbilityInfo(FGameplayAbilitySpec& Spec) Ability = Spec.Ability; } + if (Ability == nullptr) + { + return; + } + if (ImGui::BeginTable("Ability", 2, ImGuiTableFlags_Borders)) { const ImVec4 TextColor(1.0f, 1.0f, 1.0f, 0.5f); @@ -377,6 +369,15 @@ void UCogAbilityWindow_Abilities::RenderAbilityInfo(FGameplayAbilitySpec& Spec) ImGui::TableNextColumn(); ImGui::Text("%u", Spec.ActiveCount); + //------------------------ + // Cooldown + //------------------------ + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::TextColored(TextColor, "Cooldown"); + ImGui::TableNextColumn(); + RenderAbilityCooldown(AbilitySystemComponent, *Ability); + //------------------------ // Handle //------------------------ @@ -425,6 +426,20 @@ void UCogAbilityWindow_Abilities::GameTick(float DeltaTime) ProcessAbilityActivation(AbilityHandleToActivate); AbilityHandleToActivate = FGameplayAbilitySpecHandle(); } + + if (AbilityHandleToRemove.IsValid()) + { + if (AActor* Selection = GetSelection()) + { + FCogAbilityModule& Module = FCogAbilityModule::Get(); + if (ACogAbilityReplicator* Replicator = Module.GetLocalReplicator()) + { + Replicator->RemoveAbility(Selection, AbilityHandleToRemove); + } + } + + AbilityHandleToRemove = FGameplayAbilitySpecHandle(); + } } //-------------------------------------------------------------------------------------------------------------------------- diff --git a/Plugins/CogAbility/Source/CogAbility/Private/CogAbilityWindow_Effects.cpp b/Plugins/CogAbility/Source/CogAbility/Private/CogAbilityWindow_Effects.cpp index 95c0921..9305d37 100644 --- a/Plugins/CogAbility/Source/CogAbility/Private/CogAbilityWindow_Effects.cpp +++ b/Plugins/CogAbility/Source/CogAbility/Private/CogAbilityWindow_Effects.cpp @@ -295,14 +295,10 @@ FString UCogAbilityWindow_Effects::GetEffectName(const UGameplayEffect& Effect) //-------------------------------------------------------------------------------------------------------------------------- void UCogAbilityWindow_Effects::RenderRemainingTime(const UAbilitySystemComponent& AbilitySystemComponent, const FActiveGameplayEffect& ActiveEffect) { - float StartTime = ActiveEffect.StartWorldTime; - float Duration = ActiveEffect.GetDuration(); + const float StartTime = ActiveEffect.StartWorldTime; + const float Duration = ActiveEffect.GetDuration(); - if (Duration <= 0) - { - ImGui::Text("NA"); - } - else + if (Duration >= 0) { UWorld* World = AbilitySystemComponent.GetWorld(); const float RemainingTime = StartTime + Duration - World->GetTimeSeconds(); diff --git a/Plugins/CogAbility/Source/CogAbility/Public/CogAbilityReplicator.h b/Plugins/CogAbility/Source/CogAbility/Public/CogAbilityReplicator.h index 3e44b5e..168b844 100644 --- a/Plugins/CogAbility/Source/CogAbility/Public/CogAbilityReplicator.h +++ b/Plugins/CogAbility/Source/CogAbility/Public/CogAbilityReplicator.h @@ -28,7 +28,9 @@ public: static bool IsCheatActive(const AActor* EffectTarget, const FCogAbilityCheat& Cheat); - void GiveAbility(AActor* TargetActor, TSubclassOf AbilityClass); + void GiveAbility(AActor* TargetActor, TSubclassOf AbilityClass) const; + + void RemoveAbility(AActor* TargetActor, const FGameplayAbilitySpecHandle& Handle) const; void ResetAllTweaks(); @@ -50,6 +52,9 @@ private: UFUNCTION(Reliable, Server) void Server_GiveAbility(AActor* TargetActor, TSubclassOf AbilityClass) const; + UFUNCTION(Reliable, Server) + void Server_RemoveAbility(AActor* TargetActor, const FGameplayAbilitySpecHandle& Handle) const; + UFUNCTION(Reliable, Server) void Server_ResetAllTweaks(); diff --git a/Plugins/CogAbility/Source/CogAbility/Public/CogAbilityWindow_Abilities.h b/Plugins/CogAbility/Source/CogAbility/Public/CogAbilityWindow_Abilities.h index a1b3ce9..85984ba 100644 --- a/Plugins/CogAbility/Source/CogAbility/Public/CogAbilityWindow_Abilities.h +++ b/Plugins/CogAbility/Source/CogAbility/Public/CogAbilityWindow_Abilities.h @@ -41,7 +41,7 @@ protected: virtual void RenderOpenAbilities(); - virtual void RenderAbilityInfo(FGameplayAbilitySpec& Spec); + virtual void RenderAbilityInfo(const UAbilitySystemComponent& AbilitySystemComponent, FGameplayAbilitySpec& Spec); virtual void ProcessAbilityActivation(FGameplayAbilitySpecHandle Handle); @@ -57,5 +57,7 @@ private: FGameplayAbilitySpecHandle AbilityHandleToActivate; + FGameplayAbilitySpecHandle AbilityHandleToRemove; + TArray OpenedAbilities; }; diff --git a/Plugins/CogEngine/Source/CogEngine/Private/CogEngineWindow_DebugSettings.cpp b/Plugins/CogEngine/Source/CogEngine/Private/CogEngineWindow_DebugSettings.cpp index 7ff0386..3fea784 100644 --- a/Plugins/CogEngine/Source/CogEngine/Private/CogEngineWindow_DebugSettings.cpp +++ b/Plugins/CogEngine/Source/CogEngine/Private/CogEngineWindow_DebugSettings.cpp @@ -7,7 +7,7 @@ void UCogEngineWindow_DebugSettings::RenderHelp() { ImGui::Text( - "This window can be used to setup how the debug display is drawn. " + "This window can be used to tweak how the debug display is drawn. " "Check each item for more info. " ); } diff --git a/Plugins/CogEngine/Source/CogEngine/Private/CogEngineWindow_OutputLog.cpp b/Plugins/CogEngine/Source/CogEngine/Private/CogEngineWindow_OutputLog.cpp index cd40262..f7b6506 100644 --- a/Plugins/CogEngine/Source/CogEngine/Private/CogEngineWindow_OutputLog.cpp +++ b/Plugins/CogEngine/Source/CogEngine/Private/CogEngineWindow_OutputLog.cpp @@ -6,32 +6,6 @@ char ImGuiTextBuffer::EmptyString[1] = { 0 }; -//-------------------------------------------------------------------------------------------------------------------------- -// FCogLogOutputDevice -//-------------------------------------------------------------------------------------------------------------------------- -UCogLogOutputDevice::UCogLogOutputDevice() -{ - GLog->AddOutputDevice(this); -} - -//-------------------------------------------------------------------------------------------------------------------------- -UCogLogOutputDevice::~UCogLogOutputDevice() -{ - if (GLog != nullptr) - { - GLog->RemoveOutputDevice(this); - } -} - -//-------------------------------------------------------------------------------------------------------------------------- -void UCogLogOutputDevice::Serialize(const TCHAR* Message, ELogVerbosity::Type Verbosity, const class FName& Category) -{ - if (OutputLog != nullptr) - { - OutputLog->AddLog(Message, Verbosity, Category); - } -} - //-------------------------------------------------------------------------------------------------------------------------- // FCogWindow_Log //-------------------------------------------------------------------------------------------------------------------------- @@ -302,3 +276,29 @@ void UCogEngineWindow_OutputLog::RenderContent() ImGui::EndChild(); } } + +//-------------------------------------------------------------------------------------------------------------------------- +// FCogLogOutputDevice +//-------------------------------------------------------------------------------------------------------------------------- +UCogLogOutputDevice::UCogLogOutputDevice() +{ + GLog->AddOutputDevice(this); +} + +//-------------------------------------------------------------------------------------------------------------------------- +UCogLogOutputDevice::~UCogLogOutputDevice() +{ + if (GLog != nullptr) + { + GLog->RemoveOutputDevice(this); + } +} + +//-------------------------------------------------------------------------------------------------------------------------- +void UCogLogOutputDevice::Serialize(const TCHAR* Message, ELogVerbosity::Type Verbosity, const class FName& Category) +{ + if (OutputLog != nullptr) + { + OutputLog->AddLog(Message, Verbosity, Category); + } +} \ No newline at end of file diff --git a/Plugins/CogEngine/Source/CogEngine/Private/CogEngineWindow_Skeleton.cpp b/Plugins/CogEngine/Source/CogEngine/Private/CogEngineWindow_Skeleton.cpp index 4962a7d..a956dd7 100644 --- a/Plugins/CogEngine/Source/CogEngine/Private/CogEngineWindow_Skeleton.cpp +++ b/Plugins/CogEngine/Source/CogEngine/Private/CogEngineWindow_Skeleton.cpp @@ -11,6 +11,17 @@ UCogEngineWindow_Skeleton::UCogEngineWindow_Skeleton() bHasMenu = true; } +//-------------------------------------------------------------------------------------------------------------------------- +void UCogEngineWindow_Skeleton::RenderHelp() +{ + ImGui::Text( + "This window display the bone hierarchy and the skeleton debug draw of the selected actor if it has a Skeletal Mesh. " + "Mouse over a bone to highlight it. " + "Right click a bone to access more debug display. " + "Use the [Ctrl] key to toggle the bone debug draw recursively. " + ); +} + //-------------------------------------------------------------------------------------------------------------------------- void UCogEngineWindow_Skeleton::OnSelectionChanged(AActor* OldSelection, AActor* NewSelection) { diff --git a/Plugins/CogEngine/Source/CogEngine/Public/CogEngineWindow_Skeleton.h b/Plugins/CogEngine/Source/CogEngine/Public/CogEngineWindow_Skeleton.h index a43d8f8..6f68065 100644 --- a/Plugins/CogEngine/Source/CogEngine/Public/CogEngineWindow_Skeleton.h +++ b/Plugins/CogEngine/Source/CogEngine/Public/CogEngineWindow_Skeleton.h @@ -31,11 +31,14 @@ class COGENGINE_API UCogEngineWindow_Skeleton : public UCogWindow public: UCogEngineWindow_Skeleton(); - virtual void RenderContent() override; - virtual void RenderTick(float DeltaTime) override; + virtual void RenderHelp() override; protected: + virtual void RenderContent() override; + + virtual void RenderTick(float DeltaTime) override; + virtual void OnSelectionChanged(AActor* OldSelection, AActor* NewSelection) override; private: