From 7f88f5d53a9c8bc631a2c4868e87de3a65972dcd Mon Sep 17 00:00:00 2001 From: Arnaud Jamin Date: Mon, 30 Oct 2023 23:44:24 -0400 Subject: [PATCH] CogWindow: Rename CreateWindow to AddWindow to prevent name conflict with windows headers CogSample : Projectile progress --- .../Actors/BP_Base_ProjectileLauncher.uasset | Bin 95879 -> 96469 bytes .../4/98/HCM4KXTG2Y2G1I0BTX2UNY.uasset | Bin 5600 -> 5766 bytes .../E/HA/CXMK7W9FIGA0C2MR0GYXOO.uasset | Bin 5778 -> 6003 bytes .../CogWindow/Private/CogWindowManager.cpp | 10 ++-- .../CogWindow/Public/CogWindowManager.h | 2 +- Source/CogSample/CogSampleGameState.cpp | 54 +++++++++--------- .../CogSample/CogSamplePlayerController.cpp | 4 +- .../CogSampleProjectileComponent.cpp | 46 ++++++++++----- .../CogSample/CogSampleProjectileComponent.h | 3 + TODO.txt | 1 + 10 files changed, 73 insertions(+), 47 deletions(-) diff --git a/Content/Core/Actors/BP_Base_ProjectileLauncher.uasset b/Content/Core/Actors/BP_Base_ProjectileLauncher.uasset index e5da814fdbcb4287187cb66d182478116cadefc2..a9010120c1eb6648197fb6be61dd445e2f7e1bee 100644 GIT binary patch delta 4044 zcmZuz3vg8B6~5Q11bIU?$z9ks+1>0TJX;b2 z0%CX_@FHp<0*YkN$bykN1=3njk%9&6hze#pt)o>QP6w)v(DVPhek{c6iS#V0dTDzc-%w@Y5MvBCqAXb4rfEx4@mywE~2PKlka=drc7DCgDMT zhC?7buv#=F==~8v&7Qkze>fyzf1)gozZcvWj+e#XhxT2x54#_fLy}Q{F)V1eTT}sH zG`bV@XiJjCWsw^0BW#P-aD1{+KUf#EyFXNuwMD8{uxdhWj#PU2QX{@q=MJ#v5hvu3tNBCmi3Z;eNvD58=X0Su9wt zop%vVSfOFa+KB7!7;xd8lt5qB;e7mjMHEhN8;;mK3FFsVQ0F{=FRZPBr?ILf79-n6 zzy>t5q%$4Zh-2m@V@F#WY{H(lYIp|SzfQ-Db_;Aq_nLIv+dc`~Tas`|QxyK#J_0(? z@YF=ug2rj-gJ%m~p;fR8AZ*3c`ROsGLcP!|__$;nx?4Yj?VRn?r!3g+v*41B8npV8 z@YKdAyxw7fo#=L&ao)Nb*u~@dWZiIhjxk~E`e;yzA%J6DDX^QdSWQBfkRw=yY9XeJ|BM6ZTPd7E@hlg+^oV@@@J)-&2*Me`%;pcNX}}TMgBl|4ZkQ$M{8>u z9OjJ7I-5sp4)v;tTUjVJ#$@5qn#i_<_ACbz?XtL^JURoR8^?4k#n=^-u%(?(j5X+s z`DZq)GpzQEgRwDNnS5o_T1>KHI>`K6VHI1GoRVCf^d{~c+Tp@ z_-02Ee!6-m#;;34=HWQMRc!Yb_r<1$-I8D}S*F1%GT&_GS#66+#_D3BIGBcsu*{>8 z$yYD#n^uY$B~bzY`hxK|vr~@?K8V)Q0HFKwWL$Fg5bbjURp(TAgn3F3(&)`5j|s$? zz+%QP0wYPujJNhD(<pi-M&e7w$tU#q{r)ld(wPa68)!Q`6=*r#ji96N1KiR#5tWlE z?3A#HXk+o_kq;pkuf6;TE)67-G!N?zmg9VF2eCcd{0DF0ano&XHv2H$$O&C%t~@170h^J zKdWR7?WC(?@%m92<1Xi8Mpq(M?x+ZvvS!ew{8=*wx@7)Ym-dL1#g@KQoO)qGu+Z3c zI1@829mDU>G~%fP62_dZ!mY0vSlNixjD~kR!p&?rSeZzYhgIjMQ=uY2C-crFgUrL^ zeIvT;z>jC5A*5LznEhS>1dd$3L)~P)0#`mx&^;K8z++dZjvn}3-FauTuKHzB5Wb^- zF%>lRf>0j(+ag5Lx_ExXUOHSH3+!ZL=!E^@85-KNC5}}1CuLMnKd|M8GF{j(lHt4` za>qqXq21#7i|0o&GETKLXdp1E`4RI(y#CX6*br#BHx^(UZofZTyanoQD`Xq0MnHG< zns3UwuU=gJq4lRW)mQ~1jz_=^-L5)VueQ}en7SkkT1-ZwvbvhxE~n!3N!BKt*Q+mV z@VPwF|45}8#jbc1XM-XL>1tFA6g+1olIVPhQpbeD&ZOPMRHOL(9;fuAt;w(Gt*)g~ zt*zPJq)1gB*RPZYpQA}pzmA5u`Fee=V)HaCQ@m2c1Lt1J=JD88N;YSsc-aKHlca$VN7 zU{1>&zGZ@-QjP1?r*ptB9pq6pH95Qvms2XEQD|~Fmr9kbipS$lVD#0!lJN?Zx zL7~QbrDd+=jC~nXXTgT-X`rYK<*{Wm?rtXG=erh?|ghD zuj2EOOYbE0UJjfe)JFkTE_W&(^+pWDuC>~nQoSNIDR!F5X18zUWXbJuG}}Cmrj?AV zQKA~q^tziI4K^RkA*H@T@y+%soTNr+Qd(`!hTxFbS2~+khD5$uF0PT9CJ{j^`g6&Zc&`3f9QIAvuX3}=`8ae%-rw(_y4~8 z-+O1_vqyd{_x-v%L1W+8`ti*0hQgMJw#w#XNfN#b?&y-`z&-zYN+0iSjypxpx$+tY zgF#xwo1@j4{=UfW@5GK!h{e7M0{^hzXWL=~{>>*oyMydc25gActG`zH_LcME)^Lc# zs}t1dh!yy0{tE6TY#*-Rs5rfP;`8VgGyuN9hD!RjA-*!d#Jp`w06LE7+DI@WHbc+(Gy! z^ArrJ0>5jaf*piksZells-W_F4a7&oAO@rK0)MzpS!^bJ?K#{>_|9|KmL~8IJW6~A z;ZN%o4Cx!N`f+@amg*QrS0r75(r?p`WnfWBBnGVrgmvhCO_y!rGPo=*kF#(l&cLP9 z-OA-~M$S%tJJ}{$%_UoqSJF8%Mdp%^#j_`H>+yU>434Q;jSb6-;b*9yYm@m~u=`aB zC%XbLq#+bG$Z7`KZRz)5XdeAe2qI8RWMR&ZBPz*~ z8}4|$37hL;apD^<;Uju>tqRCyr(?Bbb<37dokr)*CEH9K?3+X1Tsa3{g;|`H6quHo zRCbVx4#QU`!%nKM6;taQv8;9+i1I12sZJ~##^~!MQ_CP*kn5Ty*PK<=LJ_RTRyhlH zYIY9bcHx8CN{m>Og0|(ccy5E*mPLM60W(#F^(&2b7-*-Fyy=t|s|%ZvG~%+#egkjvw34V1J@?c=$iFr>|5#UkzL-+X5317 zu=)2*Jmc}5lhulKj8)c5G3?1sY@(fvbDwYl`8Z{AT#M!r;(AKSsl095+7>n_bChTOEt3WdV50H35!pbGzU-=yorFV{&L& zbpZa`9R|lScv%v3p*~YLd^T6dE$5byd^g4DaNn{(>}^iLqqSLZf<_2Ik`w8w%Yu^w ziG*R2X9n~P$OqtIPbl`RkHu-W0Q|}m2wrT@%)?ZBfK>nHOEJ>ro?uYXPXcxy&6nc5 zQveL;K9xlGs~rj0e<_iyho`=HflXU9mrR$DY8Xw`il#alaM9@)+HS=~Z|A9=$4w_K zc&=RlBR)Kkfd6SL#C@M=2(3O-PVp95uI#EmsAvrF;}c2fc(0LcBeu8C#)*3cOzjB! zAHvpFD}Hcd6vdeF?ul@);KTiKI95u;`u2EqNm@L1PLNZ1xXXlN&mWR)+U1u++@jDUQG6Cd~i$bnKvSG>w+V%w>B>7%YEJVluC$fX2& z`lP8gxaLSYZjnw(L02LHOnCQX685(hu%l9#6`RgDz>M0RQziMR^lnocaVnZ-Ir(P{ zL02lMLPrKdUDsX)EIXy4FarxGcYBxI3i6mxzbgVmx<_HrrT{#1B#?Y&yn1pX=^i56 zB6S}XA;K*8h;@toK0WJ}nNm7`DID}nU1gzc+K)*Q?APJPouyx4T(l{l%6xU}0xBWB zGuSFk#c$4!lnWDw*DfXQKm3u3BB++cCOm5h*;Y#PMcO5B`fWSLN?W9Oh!ALAeyrn5 ze-d84HCnpx>7Rf~YLxzXU8{P=B8|N{Ir9Jfjotcqvnpd5&vEb3|5(%M72&w4bg|D+ zx)zrD*U;j^(xL1DY`K!H(TDv{R*Gl)O_KZjDXI~^F#i$c9WuNGnwrGs5D3S#CmyJj zI-iUOXcDzW5XnCV(N+isP1D(vKfJs0+o^3&7w`4tf7>WF7eQFhM0lVQua-c#m?A)d zs2K(U;_)F+FRsynpE%DC{w%se$-12h8u5NU6pO~8@H<``Bt{j%7;kt0X#570V20R7 z?}{eSxhnCUdv9fKXs`G|*b{qC7V_>1f`6$(;wjx(j@nA6M_p3xtPxB7AyU)^L#TLY z1YCG!9xWF;J@vIU+BuHudZ&6;t)r%HiK}+0TAkvDSTXLf#g zxiDtUsRA)Y2Q!0*Q7Sg|9A~-5Rm*W=SsCQg|IZpxp94YS-*iwvZVW|asqNJ+hesP< z;i_L;?bNwzo#j<^Rj!%@abXJFfHJWaU{ro?wR0)UbVXI2Q|sf@F0HTjRJp6G${ikx z*Txq+>&T;>q+Ml8S(%uXvNBm~OKBjZff!gE{e@|irbwHExfOAGc{2aUHM;r_5PG*&y9kc6*uSjdc4yPTXN)otnb?cG(#=;fIu`dglNjB&fCNjond7tbE}(o3_t zhv&5eNw!R)wwYfr3W;r-r!~#lE%jTAAImgi=T9Nb+gS{rfI(5q0w~t}{j<`T=;>eQ xpNTG9=RdZ6t9SPTxHx?9*ne;k%g&7!BctHvn z7+Qcd2!p_89Zu2O^GCd=nSYWqIko%K3F$ODj0F?xZL6pJB|3I)!fPq07 zC=e#LS)Qqi*-RJ6)^|_LP1SeKFG|&SOfJbUD%N)jh<8dXPK^&J%FjwoF3HSE^+_zv zOU_6wV)%2Fdy(km_dMd0H?rRLP|o3L*Z)Bq|40WAo{@ON@Phqx$AR2wS#9q1dK z$rD9|F=W01WpqI@lleF}c=e&`zW_x|F+@KDMYXVsT4EKo0*S(1XaY6+{p9@|@{DGa z**WDwb^=-Ya8@{+RnMu;YX;Q;qBKBe!Ch|&mH7vBkr9e5R#2J0lh<=1!T~M{RBs4U z&j|}5>&f;&*ZiJr&!xreLG22-X ztn4nAqS_yz5~zh>${fl8B~eExn^SnQ3b)ndecS?*^SDKryo6zvF#epppIe!!MFdGe zo=2H6d-6sRk;xZ?*eA#Fs7U?=S^)wqK;zhf7{q@M#6Kp_=8@O@1Y|KoML$AS!T2Ab ze2_a9 z9MZg6P?7II5$(x=9Kxb%P!U}y{S7E%43ZH(ZdkY z2a8xj)%*bJG6b2-_-FD{E@dVGfysqJ;*%A*mDNB7LRB&R1hRF2oDI8Hcyj>hV~h}) zxe(=zK;?gtl!GKqAu1R^iNz7hP8OPcirZ@P6E1EFLUT`X%UR0PT+4NSFkbdtrEzIc3a861ubUjkA|W+u>@~!{G|FFsafz@)N6O`RuT&=~I zp|Lk+X^AouF(q3sRrdvWERIQ}?{L^62qAD6%==lA=)$OeocKYjXTn(X!oo9^!>%#ZODn?oq_C zDdfInwXmw1sTWS$LbMpBZB1D5yv^eiEJstW3bU~qT~Mx8xY%RF#H)8iETNE zyQ_eE{w9i$a6(*l>N}Qlf!K%sj=P=@Ba*|!v;wBVn4ML7Mf1~KT$58vB)a#BTGM}p N5lQ{eS;unge*;zBBpCnz delta 1476 zcmbW1O=wd=5P)aXq)AMIY2M3UP12aZrZtIC<8Kp;Ka>i35J68WHC{aQB-E4SAb2Q> z)$ybk5l@nXnxj`ikQRyuK|Fe@AgI-9jej#QyZQ{TQXF_Yvoqh$?3=gymP$8@vkUfy z9{^j9i9o#$Py>LhjRum63;p_VwQB<^8Rx zyGN!U&)4v}h=>~A7spa%!cK)4`XfI{xO|RWXF}~E+p=iq?9T-j`(I$*dE1quz@Y;Z zMSSW^*l*pe&fuc+QFBygC`kQ-(rl8pxq{+~GWMCck_9&+ePyYaiQBO{*8~NAB2aC@ zT(~zOb9+`#_*cF$3r@Yrb|cmVcuxs;TY#$YP8nl0yhbj+Ms9@a8)Egw=E7>%W={E3 zH~7MR``XFBNBy(I@a&2J&4URTA2q{rBZTg6j&SgVVTcvY)X;b&Sbt9V89&IJV`=+O(&xJ3A0 z!V>8!$WmM5IHhaRg!J?hNg^WnP>*yQ5;WJ~@7bZI#)%0#*h;YF=3~K("Spacing 1", false)); - SpaceWindows.Add(CreateWindow("Spacing 2", false)); - SpaceWindows.Add(CreateWindow("Spacing 3", false)); - SpaceWindows.Add(CreateWindow("Spacing 4", false)); + SpaceWindows.Add(AddWindow("Spacing 1", false)); + SpaceWindows.Add(AddWindow("Spacing 2", false)); + SpaceWindows.Add(AddWindow("Spacing 3", false)); + SpaceWindows.Add(AddWindow("Spacing 4", false)); - SettingsWindow = CreateWindow("Window.Settings", false); + SettingsWindow = AddWindow("Window.Settings", false); ConsoleCommands.Add(IConsoleManager::Get().RegisterConsoleCommand( *ToggleInputCommand, diff --git a/Plugins/Cog/Source/CogWindow/Public/CogWindowManager.h b/Plugins/Cog/Source/CogWindow/Public/CogWindowManager.h index fc113ca..13c254f 100644 --- a/Plugins/Cog/Source/CogWindow/Public/CogWindowManager.h +++ b/Plugins/Cog/Source/CogWindow/Public/CogWindowManager.h @@ -85,7 +85,7 @@ public: const UObject* GetAsset(const TSubclassOf AssetClass); template - T* CreateWindow(const FString& Name, bool AddToMainMenu = true) + T* AddWindow(const FString& Name, bool AddToMainMenu = true) { T* Window = new T(); AddWindow(Window, Name, AddToMainMenu); diff --git a/Source/CogSample/CogSampleGameState.cpp b/Source/CogSample/CogSampleGameState.cpp index c24bb30..04e9778 100644 --- a/Source/CogSample/CogSampleGameState.cpp +++ b/Source/CogSample/CogSampleGameState.cpp @@ -123,15 +123,15 @@ void ACogSampleGameState::InitializeCog() //--------------------------------------- // Engine //--------------------------------------- - CogWindowManager->CreateWindow("Engine.Collision"); + CogWindowManager->AddWindow("Engine.Collision"); - CogWindowManager->CreateWindow("Engine.Command Bindings"); + CogWindowManager->AddWindow("Engine.Command Bindings"); - CogWindowManager->CreateWindow("Engine.Debug Settings"); + CogWindowManager->AddWindow("Engine.Debug Settings"); - CogWindowManager->CreateWindow("Engine.ImGui"); + CogWindowManager->AddWindow("Engine.ImGui"); - FCogEngineWindow_Inspector* Inspector = CogWindowManager->CreateWindow("Engine.Inspector"); + FCogEngineWindow_Inspector* Inspector = CogWindowManager->AddWindow("Engine.Inspector"); Inspector->AddFavorite(GEngine->GetGameUserSettings(), [](UObject* Object) { if (UGameUserSettings* UserSettings = Cast(Object)) @@ -140,60 +140,60 @@ void ACogSampleGameState::InitializeCog() } }); - CogWindowManager->CreateWindow("Engine.Log Categories"); + CogWindowManager->AddWindow("Engine.Log Categories"); - CogWindowManager->CreateWindow("Engine.Net Emulation"); + CogWindowManager->AddWindow("Engine.Net Emulation"); - CogWindowManager->CreateWindow("Engine.Output Log"); + CogWindowManager->AddWindow("Engine.Output Log"); - CogWindowManager->CreateWindow("Engine.Metrics"); + CogWindowManager->AddWindow("Engine.Metrics"); - CogWindowManager->CreateWindow("Engine.Plots"); + CogWindowManager->AddWindow("Engine.Plots"); - FCogEngineWindow_Selection* SelectionWindow = CogWindowManager->CreateWindow("Engine.Selection"); + FCogEngineWindow_Selection* SelectionWindow = CogWindowManager->AddWindow("Engine.Selection"); SelectionWindow->SetActorClasses({ ACharacter::StaticClass(), AActor::StaticClass(), AGameModeBase::StaticClass(), AGameStateBase::StaticClass() }); SelectionWindow->SetTraceType(UEngineTypes::ConvertToTraceType(ECollisionChannel::ECC_Pawn)); - CogWindowManager->CreateWindow("Engine.Scalability"); + CogWindowManager->AddWindow("Engine.Scalability"); - CogWindowManager->CreateWindow("Engine.Skeleton"); + CogWindowManager->AddWindow("Engine.Skeleton"); - CogWindowManager->CreateWindow("Engine.Spawns"); + CogWindowManager->AddWindow("Engine.Spawns"); - FCogEngineWindow_Stats* StatsWindow = CogWindowManager->CreateWindow("Engine.Stats"); + FCogEngineWindow_Stats* StatsWindow = CogWindowManager->AddWindow("Engine.Stats"); - CogWindowManager->CreateWindow("Engine.Time Scale"); + CogWindowManager->AddWindow("Engine.Time Scale"); //--------------------------------------- // Abilities //--------------------------------------- - CogWindowManager->CreateWindow("Gameplay.Abilities"); + CogWindowManager->AddWindow("Gameplay.Abilities"); - CogWindowManager->CreateWindow("Gameplay.Attributes"); + CogWindowManager->AddWindow("Gameplay.Attributes"); - CogWindowManager->CreateWindow("Gameplay.Cheats"); + CogWindowManager->AddWindow("Gameplay.Cheats"); - CogWindowManager->CreateWindow("Gameplay.Effects"); + CogWindowManager->AddWindow("Gameplay.Effects"); - CogWindowManager->CreateWindow("Gameplay.Pools"); + CogWindowManager->AddWindow("Gameplay.Pools"); - CogWindowManager->CreateWindow("Gameplay.Tags"); + CogWindowManager->AddWindow("Gameplay.Tags"); - CogWindowManager->CreateWindow("Gameplay.Tweaks"); + CogWindowManager->AddWindow("Gameplay.Tweaks"); //--------------------------------------- // AI //--------------------------------------- - CogWindowManager->CreateWindow("AI.Behavior Tree"); + CogWindowManager->AddWindow("AI.Behavior Tree"); - CogWindowManager->CreateWindow("AI.Blackboard"); + CogWindowManager->AddWindow("AI.Blackboard"); //--------------------------------------- // Input //--------------------------------------- - CogWindowManager->CreateWindow("Input.Actions"); + CogWindowManager->AddWindow("Input.Actions"); - CogWindowManager->CreateWindow("Input.Gamepad"); + CogWindowManager->AddWindow("Input.Gamepad"); //--------------------------------------- // Main Menu Widget diff --git a/Source/CogSample/CogSamplePlayerController.cpp b/Source/CogSample/CogSamplePlayerController.cpp index ab9c779..6f46c35 100644 --- a/Source/CogSample/CogSamplePlayerController.cpp +++ b/Source/CogSample/CogSamplePlayerController.cpp @@ -226,6 +226,8 @@ const ACogSamplePlayerController* ACogSamplePlayerController::GetFirstLocalPlaye //-------------------------------------------------------------------------------------------------------------------------- float ACogSamplePlayerController::GetClientLag() const { - return (PlayerState != nullptr && GetNetMode() != NM_Standalone) ? (0.0001f * 0.5f * PlayerState->ExactPing) : 0.f; + const float Ping = (PlayerState != nullptr && GetNetMode() != NM_Standalone) ? PlayerState->ExactPing : 0.0f; + const float HalfPingInSeconds = Ping * 0.0001f * 0.5f; + return HalfPingInSeconds; } diff --git a/Source/CogSample/CogSampleProjectileComponent.cpp b/Source/CogSample/CogSampleProjectileComponent.cpp index dcea728..339bfd2 100644 --- a/Source/CogSample/CogSampleProjectileComponent.cpp +++ b/Source/CogSample/CogSampleProjectileComponent.cpp @@ -82,6 +82,8 @@ void UCogSampleProjectileComponent::BeginPlay() Creator = UCogSampleFunctionLibrary_Gameplay::GetCreator(GetOwner()); SpawnPrediction = GetOwner()->FindComponentByClass(); + COG_LOG_OBJECT(LogCogProjectile, ELogVerbosity::Verbose, Creator.Get(), TEXT("Projectile:%s - Role:%s - IsActive:%d"), *GetNameSafe(GetOwner()), *GetRoleName(), IsActive()); + RegisterAllEffects(); Collision = Cast(CollisionReference.GetComponent(GetOwner())); @@ -98,13 +100,17 @@ void UCogSampleProjectileComponent::BeginPlay() if (GetOwner()->GetLocalRole() != ROLE_Authority) { - Activate(false); + //----------------------------------------------------------------------------------------------- + // Must force the activation because the server might have already replicated the IsActive flag. + //----------------------------------------------------------------------------------------------- + Activate(true); } } //-------------------------------------------------------------------------------------------------------------------------- void UCogSampleProjectileComponent::Activate(bool bReset) { + COG_LOG_OBJECT(LogCogProjectile, ELogVerbosity::Verbose, Creator.Get(), TEXT("Projectile:%s - Role:%s - bReset:%d"), *GetNameSafe(GetOwner()), *GetRoleName(), bReset); //------------------------------------------------------------------------------------------------ // Save the spawn location and rotation and get them replicated because, we want remote clients @@ -126,8 +132,6 @@ void UCogSampleProjectileComponent::Activate(bool bReset) Velocity = ServerSpawnVelocity; } - Super::Activate(bReset); - #if ENABLE_COG DrawDebugCurrentState(FColor::Green); if (FCogDebugLog::IsLogCategoryActive(LogCogProjectile)) @@ -148,6 +152,7 @@ void UCogSampleProjectileComponent::Activate(bool bReset) } } + Super::Activate(bReset); } //-------------------------------------------------------------------------------------------------------------------------- @@ -205,7 +210,7 @@ void UCogSampleProjectileComponent::TickComponent(float DeltaTime, enum ELevelTi //-------------------------------------------------------------------------------------------------------------------------- void UCogSampleProjectileComponent::Catchup(float CatchupDuration) { - COG_LOG_OBJECT(LogCogProjectile, ELogVerbosity::Verbose, Creator.Get(), TEXT("Projectile:%s - Role:%s - CatchupDuration:%0.2f"), *GetName(), *GetRoleName(), CatchupDuration); + COG_LOG_OBJECT(LogCogProjectile, ELogVerbosity::Verbose, Creator.Get(), TEXT("Projectile:%s - Role:%s - CatchupDuration:%dms"), *GetNameSafe(GetOwner()), *GetRoleName(), (int32)(CatchupDuration * 1000)); IsCatchingUp = true; TickComponent(CatchupDuration, LEVELTICK_All, nullptr); @@ -319,10 +324,10 @@ bool UCogSampleProjectileComponent::ShouldProcessOverlap(AActor* OtherActor, UPr void UCogSampleProjectileComponent::OnCollisionOverlapBegin(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool IsFromSweep, const FHitResult& SweepHit) { COG_LOG_OBJECT(LogCogProjectile, ELogVerbosity::Verbose, Creator.Get(), TEXT("Projectile:%s - Role:%s - Other:%s - Comp:%s"), - *GetName(), + *GetNameSafe(GetOwner()), *GetRoleName(), - OtherActor != nullptr ? *OtherActor->GetName() : TEXT("NULL"), - OtherComp != nullptr ? *OtherComp->GetName() : TEXT("NULL")); + *GetNameSafe(OtherActor), + *GetNameSafe(OtherComp)); if (ShouldProcessOverlap(OtherActor, OtherComp, false) == false) { @@ -379,10 +384,10 @@ void UCogSampleProjectileComponent::OnCollisionOverlapBegin(UPrimitiveComponent* void UCogSampleProjectileComponent::OnAssistanceOverlapBegin(UPrimitiveComponent* overlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool IsFromSweep, const FHitResult& Hit) { COG_LOG_OBJECT(LogCogProjectile, ELogVerbosity::Verbose, Creator.Get(), TEXT("Projectile:%s - Role:%s - Other:%s - Comp:%s"), - *GetName(), + *GetNameSafe(GetOwner()), *GetRoleName(), - OtherActor != nullptr ? *OtherActor->GetName() : TEXT("NULL"), - OtherComp != nullptr ? *OtherComp->GetName() : TEXT("NULL")); + *GetNameSafe(OtherActor), + *GetNameSafe(OtherComp)); //------------------------------------------------------------------------------------- // Call ShouldProcessOverlap with a requirement of a valid actor because the @@ -432,10 +437,10 @@ void UCogSampleProjectileComponent::OnAssistanceOverlapBegin(UPrimitiveComponent void UCogSampleProjectileComponent::TryHit(const FHitResult& HitResult) { COG_LOG_OBJECT(LogCogProjectile, ELogVerbosity::Verbose, Creator.Get(), TEXT("Projectile:%s - Role:%s - Other:%s - Comp:%s - Bone:%s"), - *GetName(), + *GetNameSafe(GetOwner()), *GetRoleName(), - HitResult.GetActor() != nullptr ? *HitResult.GetActor()->GetName() : TEXT("NULL"), - HitResult.GetComponent() != nullptr ? *HitResult.GetComponent()->GetName() : TEXT("NULL"), + *GetNameSafe(HitResult.GetActor()), + *GetNameSafe(HitResult.GetComponent()), *HitResult.BoneName.ToString()); //----------------------------------------------------------------------------------------- @@ -461,6 +466,19 @@ void UCogSampleProjectileComponent::TryHit(const FHitResult& HitResult) } } +//-------------------------------------------------------------------------------------------------------------------------- +void UCogSampleProjectileComponent::StopSimulating(const FHitResult& HitResult) +{ + COG_LOG_OBJECT(LogCogProjectile, ELogVerbosity::Verbose, Creator.Get(), TEXT("Projectile:%s - Role:%s - Other:%s - Comp:%s - Bone:%s"), + *GetNameSafe(GetOwner()), + *GetRoleName(), + *GetNameSafe(HitResult.GetActor()), + *GetNameSafe(HitResult.GetComponent()), + *HitResult.BoneName.ToString()); + + Super::StopSimulating(HitResult); +} + //-------------------------------------------------------------------------------------------------------------------------- void UCogSampleProjectileComponent::ClearHitActors() { @@ -534,3 +552,5 @@ FString UCogSampleProjectileComponent::GetRoleName() const return SpawnPrediction->GetRoleName(); } + + diff --git a/Source/CogSample/CogSampleProjectileComponent.h b/Source/CogSample/CogSampleProjectileComponent.h index c4d5448..b408bf0 100644 --- a/Source/CogSample/CogSampleProjectileComponent.h +++ b/Source/CogSample/CogSampleProjectileComponent.h @@ -57,6 +57,9 @@ public: virtual void Activate(bool bReset) override; + virtual void StopSimulating(const FHitResult& HitResult) override; + + UFUNCTION(BlueprintCallable) void ClearHitActors(); diff --git a/TODO.txt b/TODO.txt index 727bf48..2ef9bcd 100644 --- a/TODO.txt +++ b/TODO.txt @@ -11,6 +11,7 @@ - CogEngine: make a better widget for CheckBoxState for input shortcuts - CogEngine: save active log categories - CogEngine: add menu on the PlotWindow wih the controls +- CogEngine: Improve collision window: Add Query Type, Single or Multi, By Channel or Object Type, Object Type. - CogSample: Add a custom window in sample (changing the character faction) - CogSample: Create more abilities