From 2cc42bf196dcc020310b29f9e1af191cf58103eb Mon Sep 17 00:00:00 2001 From: Arnaud Jamin Date: Fri, 7 Feb 2025 23:50:25 -0500 Subject: [PATCH] CogEngine: Add BuildInfo window to display the build changelist, target, and so on. --- .../Private/CogEngineWindow_BuildInfo.cpp | 117 ++++++++++++++++++ .../Public/CogEngineWindow_BuildInfo.h | 114 +++++++++++++++++ .../CogAll/Source/CogAll/Private/CogAll.cpp | 5 +- 3 files changed, 235 insertions(+), 1 deletion(-) create mode 100644 Plugins/Cog/Source/CogEngine/Private/CogEngineWindow_BuildInfo.cpp create mode 100644 Plugins/Cog/Source/CogEngine/Public/CogEngineWindow_BuildInfo.h diff --git a/Plugins/Cog/Source/CogEngine/Private/CogEngineWindow_BuildInfo.cpp b/Plugins/Cog/Source/CogEngine/Private/CogEngineWindow_BuildInfo.cpp new file mode 100644 index 0000000..84acc02 --- /dev/null +++ b/Plugins/Cog/Source/CogEngine/Private/CogEngineWindow_BuildInfo.cpp @@ -0,0 +1,117 @@ +#include "CogEngineWindow_BuildInfo.h" + +#include "CogImguiHelper.h" +#include "imgui.h" +#include "BuildSettings.h" +#include "GenericPlatform/GenericPlatformMisc.h" + +//-------------------------------------------------------------------------------------------------------------------------- +void FCogEngineWindow_BuildInfo::Initialize() +{ + FCogWindow::Initialize(); + + Config = GetConfig(); + + BuildText(); +} + +//-------------------------------------------------------------------------------------------------------------------------- +void FCogEngineWindow_BuildInfo::RenderHelp() +{ + ImGui::Text( + "This window can be used to display the build information such as the build version, changelist, date, target, and so on." + ); +} + +//-------------------------------------------------------------------------------------------------------------------------- +void FCogEngineWindow_BuildInfo::RenderTick(float DeltaTime) +{ + FCogWindow::RenderTick(DeltaTime); + + if (FApp::GetBuildTargetType() == EBuildTargetType::Editor) + { + if (Config->ShowInEditor == false) + { return; } + } + else + { + if (Config->ShowInPackage == false) + { return;} + } + + const auto TextStr = StringCast(*Text); + ImDrawList* DrawList = Config->ShowInForeground ? ImGui::GetForegroundDrawList() : ImGui::GetBackgroundDrawList(); + const ImVec2 WindowPadding = ImGui::GetStyle().WindowPadding; + const ImVec2 TextSize = ImGui::CalcTextSize(TextStr.Get(), nullptr, false); + const ImVec2 RectSize = TextSize + WindowPadding * 2; + const ImVec2 Pos = FCogWindowWidgets::ComputeScreenCornerLocation(Config->Alignment, Config->Padding); + const ImVec2 AlignedPos = Pos - (FCogImguiHelper::ToImVec2(Config->Alignment) * RectSize); + + DrawList->AddRectFilled(AlignedPos, AlignedPos + RectSize, FCogImguiHelper::ToImU32(Config->BackgroundColor), Config->Rounding); + DrawList->AddRect(AlignedPos, AlignedPos + RectSize, FCogImguiHelper::ToImU32(Config->BorderColor), Config->Rounding); + DrawList->AddText(AlignedPos + WindowPadding, FCogImguiHelper::ToImU32(Config->TextColor), TextStr.Get()); +} + +//-------------------------------------------------------------------------------------------------------------------------- +void FCogEngineWindow_BuildInfo::RenderContent() +{ + Super::RenderContent(); + + FCogWindowWidgets::ThinSeparatorText("Build Properties"); + + if (ImGui::BeginChild("Settings", ImVec2(-1, 100 * GetDpiScale()), ImGuiChildFlags_FrameStyle | ImGuiChildFlags_Borders | ImGuiChildFlags_ResizeY)) + { + if (ImGui::Checkbox("Branch Name", &Config->ShowBranchName)) { BuildText(); } + if (ImGui::Checkbox("Build Date", &Config->ShowBuildDate)) { BuildText(); } + if (ImGui::Checkbox("Build Configuration", &Config->ShowBuildConfiguration)) { BuildText(); } + if (ImGui::Checkbox("Build User", &Config->ShowBuildUser)) { BuildText(); } + if (ImGui::Checkbox("Build Machine", &Config->ShowBuildMachine)) { BuildText(); } + if (ImGui::Checkbox("Build Target Type", &Config->ShowBuildTargetType)) { BuildText(); } + if (ImGui::Checkbox("Current Change list", &Config->ShowCurrentChangelist)) { BuildText(); } + if (ImGui::Checkbox("Compatible Change list", &Config->ShowCompatibleChangelist)) { BuildText(); } + } + ImGui::EndChild(); + + FCogWindowWidgets::ThinSeparatorText("Display"); + + ImGui::Checkbox("Show In Editor", &Config->ShowInEditor); + ImGui::Checkbox("Show In Package", &Config->ShowInPackage); + ImGui::Checkbox("Show In Foreground", &Config->ShowInForeground); + + FCogWindowWidgets::SetNextItemToShortWidth(); + ImGui::SliderFloat2("Alignment", &Config->Alignment.X, 0, 1.0f, "%.2f"); + + FCogWindowWidgets::SetNextItemToShortWidth(); + ImGui::SliderInt2("Padding", &Config->Padding.X, 0, 100); + + FCogWindowWidgets::SetNextItemToShortWidth(); + ImGui::SliderInt("Rounding", &Config->Rounding, 0, 12); + + constexpr ImGuiColorEditFlags ColorEditFlags = ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_AlphaPreviewHalf; + FCogImguiHelper::ColorEdit4("Background Color", Config->BackgroundColor, ColorEditFlags); + FCogImguiHelper::ColorEdit4("Border Color", Config->BorderColor, ColorEditFlags); + FCogImguiHelper::ColorEdit4("Text Color", Config->TextColor, ColorEditFlags); + + ImGui::Separator(); + + if (ImGui::Button("Reset Settings", ImVec2(-1, 0))) + { + ResetConfig(); + } +} + +//-------------------------------------------------------------------------------------------------------------------------- +void FCogEngineWindow_BuildInfo::BuildText() +{ + FStringBuilderBase S; + if (Config->ShowBranchName) { S.Append(BuildSettings::GetBranchName()); S.Append(" "); } + if (Config->ShowBuildDate) { S.Append(BuildSettings::GetBuildDate()); S.Append(" "); } + if (Config->ShowBuildConfiguration) { S.Append(LexToString(FApp::GetBuildConfiguration())); S.Append(" "); } + if (Config->ShowBuildTargetType) { S.Append(LexToString(FApp::GetBuildTargetType())); S.Append(" "); } + if (Config->ShowBuildUser) { S.Append(BuildSettings::GetBuildUser()); S.Append(" "); } + if (Config->ShowBuildMachine) { S.Append(BuildSettings::GetBuildMachine()); S.Append(" "); } + if (Config->ShowCurrentChangelist) { S.Appendf(TEXT("%d"), BuildSettings::GetCurrentChangelist()); S.Append(" "); } + if (Config->ShowCompatibleChangelist) { S.Appendf(TEXT("%d"),BuildSettings::GetCompatibleChangelist()); } + + Text = FString(S).TrimEnd(); +} \ No newline at end of file diff --git a/Plugins/Cog/Source/CogEngine/Public/CogEngineWindow_BuildInfo.h b/Plugins/Cog/Source/CogEngine/Public/CogEngineWindow_BuildInfo.h new file mode 100644 index 0000000..14a02ee --- /dev/null +++ b/Plugins/Cog/Source/CogEngine/Public/CogEngineWindow_BuildInfo.h @@ -0,0 +1,114 @@ +#pragma once + +#include "CoreMinimal.h" +#include "CogWindow.h" +#include "CogWindowWidgets.h" +#include "CogEngineWindow_BuildInfo.generated.h" + +class UCogEngineConfig_BuildInfo; + +class COGENGINE_API FCogEngineWindow_BuildInfo : public FCogWindow +{ + typedef FCogWindow Super; + +public: + + virtual void Initialize() override; + + virtual void RenderHelp() override; + + virtual void RenderTick(float DeltaTime) override; + + virtual void RenderContent() override; + +protected: + + void BuildText(); + + TWeakObjectPtr Config; + + FString Text; +}; + +//-------------------------------------------------------------------------------------------------------------------------- +UCLASS(Config = Cog) +class UCogEngineConfig_BuildInfo : public UCogCommonConfig +{ + GENERATED_BODY() + +public: + + UPROPERTY(Config) + bool ShowInEditor = false; + + UPROPERTY(Config) + bool ShowInPackage = true; + + UPROPERTY(Config) + bool ShowBranchName = false; + + UPROPERTY(Config) + bool ShowBuildDate = true; + + UPROPERTY(Config) + bool ShowCurrentChangelist = true; + + UPROPERTY(Config) + bool ShowCompatibleChangelist = false; + + UPROPERTY(Config) + bool ShowBuildConfiguration = true; + + UPROPERTY(Config) + bool ShowBuildUser = false; + + UPROPERTY(Config) + bool ShowBuildMachine = false; + + UPROPERTY(Config) + bool ShowBuildTargetType = true; + + UPROPERTY(Config) + bool ShowInForeground = true; + + UPROPERTY(Config) + FVector2f Alignment = { 0, 1 }; + + UPROPERTY(Config) + FIntVector2 Padding = { 10, 10 }; + + UPROPERTY(Config) + int32 Rounding = 6; + + UPROPERTY(Config) + FColor BackgroundColor = FColor(0, 0, 0, 80); + + UPROPERTY(Config) + FColor BorderColor = FColor(255, 255, 255, 50); + + UPROPERTY(Config) + FColor TextColor = FColor(255, 255, 255, 100); + + virtual void Reset() override + { + Super::Reset(); + + ShowInEditor = false; + ShowInPackage = true; + ShowInForeground = true; + ShowBranchName = false; + ShowBuildDate = true; + ShowCurrentChangelist = true; + ShowCompatibleChangelist = false; + ShowBuildConfiguration = true; + ShowBuildUser = false; + ShowBuildMachine = false; + ShowBuildTargetType = true; + Alignment = { 0, 1 }; + Padding = { 10, 10 }; + Rounding = 6; + BackgroundColor = FColor(0, 0, 0, 80); + BorderColor = FColor(255, 255, 255, 50); + TextColor = FColor(255, 255, 255, 100); + } +}; \ No newline at end of file diff --git a/Plugins/CogAll/Source/CogAll/Private/CogAll.cpp b/Plugins/CogAll/Source/CogAll/Private/CogAll.cpp index c9c9cfb..8cb9d2d 100644 --- a/Plugins/CogAll/Source/CogAll/Private/CogAll.cpp +++ b/Plugins/CogAll/Source/CogAll/Private/CogAll.cpp @@ -9,6 +9,7 @@ #include "CogAbilityWindow_Tweaks.h" #include "CogAIWindow_BehaviorTree.h" #include "CogAIWindow_Blackboard.h" +#include "CogEngineWindow_BuildInfo.h" #include "CogEngineWindow_Cheats.h" #include "CogEngineWindow_CollisionTester.h" #include "CogEngineWindow_CollisionViewer.h" @@ -45,6 +46,8 @@ void Cog::AddAllWindows(UCogWindowManager& CogWindowManager) //--------------------------------------- // Engine //--------------------------------------- + CogWindowManager.AddWindow("Engine.Build Info"); + CogWindowManager.AddWindow("Engine.Collision Tester"); CogWindowManager.AddWindow("Engine.Collision Viewer"); @@ -95,7 +98,7 @@ void Cog::AddAllWindows(UCogWindowManager& CogWindowManager) CogWindowManager.AddWindow("Engine.Time Scale"); CogWindowManager.AddWindow("Engine.Transform"); - + //--------------------------------------- // Abilities //---------------------------------------