Compare commits

...

2 Commits

Author SHA1 Message Date
OusmBlueNinja
ca427b043f Added More Icons 2024-12-31 22:47:05 -06:00
OusmBlueNinja
605641db7f Added Icons 2024-12-31 22:31:58 -06:00
10 changed files with 1686 additions and 305 deletions

View File

@ -19,7 +19,7 @@ DockId=0x00000002,0
Pos=374,27 Pos=374,27
Size=1212,770 Size=1212,770
Collapsed=0 Collapsed=0
DockId=0x00000017,0 DockId=0x0000001F,0
[Window][Performance] [Window][Performance]
Pos=8,774 Pos=8,774
@ -49,7 +49,7 @@ DockId=0x0000000B,0
Pos=374,27 Pos=374,27
Size=1202,849 Size=1202,849
Collapsed=0 Collapsed=0
DockId=0x00000017,0 DockId=0x0000001F,0
[Window][Lua Text Editor] [Window][Lua Text Editor]
Pos=8,481 Pos=8,481
@ -68,26 +68,26 @@ Size=1920,1177
Collapsed=0 Collapsed=0
[Window][Inspector##InspectorWindow] [Window][Inspector##InspectorWindow]
Pos=1536,27 Pos=1492,30
Size=376,1142 Size=420,1139
Collapsed=0 Collapsed=0
DockId=0x00000016,0 DockId=0x00000016,0
[Window][Editor##EditorWindow] [Window][Editor##EditorWindow]
Pos=332,27 Pos=332,30
Size=1202,776 Size=1158,430
Collapsed=0 Collapsed=0
DockId=0x00000017,0 DockId=0x0000001F,0
[Window][Performance##performance] [Window][Performance##performance]
Pos=8,761 Pos=8,746
Size=322,408 Size=322,423
Collapsed=0 Collapsed=0
DockId=0x0000001C,0 DockId=0x0000001C,0
[Window][Logger##logger] [Window][Logger##logger]
Pos=332,805 Pos=332,348
Size=1202,364 Size=518,364
Collapsed=0 Collapsed=0
DockId=0x00000019,0 DockId=0x00000019,0
@ -104,8 +104,8 @@ Collapsed=0
DockId=0x0000000F,0 DockId=0x0000000F,0
[Window][Scene Window##SceneWindow] [Window][Scene Window##SceneWindow]
Pos=8,27 Pos=8,30
Size=322,732 Size=322,714
Collapsed=0 Collapsed=0
DockId=0x0000001B,0 DockId=0x0000001B,0
@ -116,8 +116,8 @@ Collapsed=0
DockId=0x00000011,0 DockId=0x00000011,0
[Window][Profiler] [Window][Profiler]
Pos=935,805 Pos=332,805
Size=599,364 Size=1158,364
Collapsed=0 Collapsed=0
DockId=0x0000001A,0 DockId=0x0000001A,0
@ -127,19 +127,56 @@ Size=1202,364
Collapsed=0 Collapsed=0
DockId=0x00000019,1 DockId=0x00000019,1
[Window][Logger##logger]
Pos=332,752
Size=1158,417
Collapsed=0
DockId=0x0000001E,0
[Window][ Logger##logger]
Pos=332,828
Size=1187,341
Collapsed=0
DockId=0x00000020,1
[Window][ Editor##EditorWindow]
Pos=332,30
Size=1187,796
Collapsed=0
DockId=0x0000001F,0
[Window][ Inspector##InspectorWindow]
Pos=1521,30
Size=391,1139
Collapsed=0
DockId=0x00000022,0
[Window][ Profiler]
Pos=332,828
Size=1187,341
Collapsed=0
DockId=0x00000020,0
[Table][0xE9E836E4,4] [Table][0xE9E836E4,4]
Column 0 Weight=1.2999 Column 0 Weight=1.2999
Column 1 Weight=1.0439 Column 1 Weight=1.0439
Column 2 Weight=0.6474 Column 2 Weight=0.6474
Column 3 Weight=1.0088 Column 3 Weight=1.0088
[Table][0x08173DEA,4]
Column 0 Weight=1.0000
Column 1 Weight=1.0000
Column 2 Weight=1.0000
Column 3 Weight=1.0000
[Docking][Data] [Docking][Data]
DockSpace ID=0x14621557 Window=0x3DA2F1DE Pos=8,50 Size=1904,1142 Split=X Selected=0xF7365A5A DockSpace ID=0x14621557 Window=0x3DA2F1DE Pos=8,53 Size=1904,1139 Split=X Selected=0xF7365A5A
DockNode ID=0x00000013 Parent=0x14621557 SizeRef=322,1142 Split=Y Selected=0x818D04BB DockNode ID=0x00000021 Parent=0x14621557 SizeRef=871,1139 Split=X
DockNode ID=0x0000001B Parent=0x00000013 SizeRef=264,456 HiddenTabBar=1 Selected=0x1D5D92B6 DockNode ID=0x00000013 Parent=0x00000021 SizeRef=322,1142 Split=Y Selected=0x818D04BB
DockNode ID=0x0000001C Parent=0x00000013 SizeRef=264,254 HiddenTabBar=1 Selected=0x818D04BB DockNode ID=0x0000001B Parent=0x00000013 SizeRef=264,714 HiddenTabBar=1 Selected=0x1D5D92B6
DockNode ID=0x00000014 Parent=0x14621557 SizeRef=1580,1142 Split=X DockNode ID=0x0000001C Parent=0x00000013 SizeRef=264,423 HiddenTabBar=1 Selected=0x818D04BB
DockNode ID=0x00000015 Parent=0x00000014 SizeRef=1202,1142 Split=X DockNode ID=0x00000014 Parent=0x00000021 SizeRef=547,1142 Split=X
DockNode ID=0x00000015 Parent=0x00000014 SizeRef=1158,1142 Split=X
DockNode ID=0x00000011 Parent=0x00000015 SizeRef=265,1142 Selected=0x1D5D92B6 DockNode ID=0x00000011 Parent=0x00000015 SizeRef=265,1142 Selected=0x1D5D92B6
DockNode ID=0x00000012 Parent=0x00000015 SizeRef=1259,1142 Split=X DockNode ID=0x00000012 Parent=0x00000015 SizeRef=1259,1142 Split=X
DockNode ID=0x00000009 Parent=0x00000012 SizeRef=364,1142 Split=Y Selected=0x3DC5AC3F DockNode ID=0x00000009 Parent=0x00000012 SizeRef=364,1142 Split=Y Selected=0x3DC5AC3F
@ -153,14 +190,19 @@ DockSpace ID=0x14621557 Window=0x3DA2F1DE Pos=8,50 Size=1904
DockNode ID=0x00000001 Parent=0x00000008 SizeRef=1202,1142 Split=Y Selected=0xDF0EC458 DockNode ID=0x00000001 Parent=0x00000008 SizeRef=1202,1142 Split=Y Selected=0xDF0EC458
DockNode ID=0x00000003 Parent=0x00000001 SizeRef=1202,849 Split=Y Selected=0xDF0EC458 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=1202,849 Split=Y Selected=0xDF0EC458
DockNode ID=0x0000000D Parent=0x00000003 SizeRef=1202,571 Split=Y Selected=0xDFF75B3F DockNode ID=0x0000000D Parent=0x00000003 SizeRef=1202,571 Split=Y Selected=0xDFF75B3F
DockNode ID=0x00000017 Parent=0x0000000D SizeRef=1202,776 CentralNode=1 Selected=0xDFF75B3F DockNode ID=0x00000017 Parent=0x0000000D SizeRef=1202,776 Split=Y Selected=0xDFF75B3F
DockNode ID=0x0000001D Parent=0x00000017 SizeRef=518,720 Split=Y Selected=0xDFF75B3F
DockNode ID=0x0000001F Parent=0x0000001D SizeRef=518,796 CentralNode=1 Selected=0x9A7B23B9
DockNode ID=0x00000020 Parent=0x0000001D SizeRef=518,341 Selected=0x7A66B86B
DockNode ID=0x0000001E Parent=0x00000017 SizeRef=518,417 Selected=0xC74E1AEE
DockNode ID=0x00000018 Parent=0x0000000D SizeRef=1202,364 Split=X Selected=0x1C0788A1 DockNode ID=0x00000018 Parent=0x0000000D SizeRef=1202,364 Split=X Selected=0x1C0788A1
DockNode ID=0x00000019 Parent=0x00000018 SizeRef=601,364 Selected=0x1C0788A1 DockNode ID=0x00000019 Parent=0x00000018 SizeRef=601,364 Selected=0x1C0788A1
DockNode ID=0x0000001A Parent=0x00000018 SizeRef=599,364 Selected=0x9B5D3198 DockNode ID=0x0000001A Parent=0x00000018 SizeRef=599,364 Selected=0x9B5D3198
DockNode ID=0x0000000E Parent=0x00000003 SizeRef=1202,569 Selected=0xE98146C5 DockNode ID=0x0000000E Parent=0x00000003 SizeRef=1202,569 Selected=0xE98146C5
DockNode ID=0x00000004 Parent=0x00000001 SizeRef=1202,291 Selected=0x9DD4E196 DockNode ID=0x00000004 Parent=0x00000001 SizeRef=1202,291 Selected=0x9DD4E196
DockNode ID=0x00000002 Parent=0x00000008 SizeRef=334,1142 HiddenTabBar=1 Selected=0x36DC96AB DockNode ID=0x00000002 Parent=0x00000008 SizeRef=334,1142 HiddenTabBar=1 Selected=0x36DC96AB
DockNode ID=0x00000016 Parent=0x00000014 SizeRef=376,1142 HiddenTabBar=1 Selected=0x8D0E8380 DockNode ID=0x00000016 Parent=0x00000014 SizeRef=420,1142 Selected=0x8D0E8380
DockNode ID=0x00000022 Parent=0x14621557 SizeRef=391,1139 Selected=0xD1D25642
DockSpace ID=0xC6145A92 Pos=8,27 Size=1904,1142 Split=X DockSpace ID=0xC6145A92 Pos=8,27 Size=1904,1142 Split=X
DockNode ID=0x0000000F Parent=0xC6145A92 SizeRef=301,1142 Selected=0xA8433A03 DockNode ID=0x0000000F Parent=0xC6145A92 SizeRef=301,1142 Selected=0xA8433A03
DockNode ID=0x00000010 Parent=0xC6145A92 SizeRef=1601,1142 CentralNode=1 DockNode ID=0x00000010 Parent=0xC6145A92 SizeRef=1601,1142 CentralNode=1

View File

@ -21,6 +21,7 @@
#include "Windows/LoggerWindow.h" #include "Windows/LoggerWindow.h"
#include "Windows/InspectorWindow.h" #include "Windows/InspectorWindow.h"
#include "Windows/SceneWindow.h" #include "Windows/SceneWindow.h"
#include "Windows/Icons.h"
#include "Windows/ProfilerWindow.h" #include "Windows/ProfilerWindow.h"
@ -49,10 +50,8 @@ SceneManager g_SceneManager;
std::vector<std::shared_ptr<GameObject>> g_GameObjects; std::vector<std::shared_ptr<GameObject>> g_GameObjects;
std::shared_ptr<CameraComponent> g_RuntimeCameraObject; std::shared_ptr<CameraComponent> g_RuntimeCameraObject;
int g_GPU_Triangles_drawn_to_screen = 0; int g_GPU_Triangles_drawn_to_screen = 0;
GameObject *g_SelectedObject; // Pointer to the currently selected object GameObject *g_SelectedObject; // Pointer to the currently selected object
@ -110,6 +109,40 @@ bool MyEngine::Init(int width, int height, const std::string &title)
ImGui::GetIO().ConfigFlags |= ImGuiConfigFlags_DockingEnable | ImGuiConfigFlags_ViewportsEnable; ImGui::GetIO().ConfigFlags |= ImGuiConfigFlags_DockingEnable | ImGuiConfigFlags_ViewportsEnable;
#endif #endif
// Path to your font files
const char *regularFontPath = "assets/fonts/Roboto-Medium.ttf"; // Replace with your font file path
const char *fontAwesomePath = "assets/fonts/fa-solid-900.ttf"; // Replace with Font Awesome font path
float fontSize = 16.0f; // Font size for both regular font and icons
// Load the regular font
ImFont *regularFont = io.Fonts->AddFontFromFileTTF(regularFontPath, fontSize);
if (!regularFont)
{
fprintf(stderr, "Failed to load regular font: %s\n", regularFontPath);
return false;
}
// Configure Font Awesome
ImFontConfig fontAwesomeConfig;
fontAwesomeConfig.MergeMode = true; // Merge into the main font
fontAwesomeConfig.PixelSnapH = true; // Snap pixels for better alignment
fontAwesomeConfig.GlyphOffset.y = 2.0f; // Adjust vertical alignment (tweak this value if needed)
// Define the glyph range for Font Awesome
static const ImWchar fontAwesomeRanges[] = {ICON_MIN_FA, ICON_MAX_FA, 0};
// Load Font Awesome and merge it into the regular font
ImFont *fontAwesomeFont = io.Fonts->AddFontFromFileTTF(fontAwesomePath, fontSize, &fontAwesomeConfig, fontAwesomeRanges);
if (!fontAwesomeFont)
{
fprintf(stderr, "Failed to load Font Awesome font: %s\n", fontAwesomePath);
return false;
}
// Build the fonts
io.Fonts->Build();
// (Optional) Multi-viewport // (Optional) Multi-viewport
// io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;
@ -131,7 +164,7 @@ bool MyEngine::Init(int width, int height, const std::string &title)
m_GameRunning = false; m_GameRunning = false;
m_FirstTickGameRunning = true; m_FirstTickGameRunning = true;
m_showProfiler = false; m_showProfiler = true;
g_LoggerWindow = m_LoggerWindow.get(); g_LoggerWindow = m_LoggerWindow.get();
@ -204,7 +237,6 @@ void MyEngine::Run()
DEBUG_PRINT("Save path: %s", savePath.c_str()); DEBUG_PRINT("Save path: %s", savePath.c_str());
g_SceneManager.SaveScene(g_GameObjects, savePath); g_SceneManager.SaveScene(g_GameObjects, savePath);
ScopedTimer LUA_INIT_timer("GameObjectsScriptInit"); ScopedTimer LUA_INIT_timer("GameObjectsScriptInit");
for (auto &Gameobject : g_GameObjects) for (auto &Gameobject : g_GameObjects)
{ {
@ -241,8 +273,6 @@ void MyEngine::Run()
for (auto &Gameobject : g_GameObjects) for (auto &Gameobject : g_GameObjects)
{ {
Gameobject->Update(frame_delta); Gameobject->Update(frame_delta);
} }
} }

View File

@ -49,7 +49,7 @@ private:
bool m_GameRunning = false; bool m_GameRunning = false;
bool m_FirstTickGameRunning = true; bool m_FirstTickGameRunning = true;
bool m_showProfiler = false; bool m_showProfiler = true;
// Windows // Windows
std::unique_ptr<RenderWindow> m_RenderWindow; std::unique_ptr<RenderWindow> m_RenderWindow;

View File

@ -2,6 +2,7 @@
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
#include <stdexcept>
#include <sstream> #include <sstream>
#include <cstring> #include <cstring>
#include <GL/glew.h> #include <GL/glew.h>
@ -71,8 +72,9 @@ AssetManager::AssetVariant AssetManager::loadAssetFromDisk(AssetType type, const
} }
else else
{ {
throw std::runtime_error("Failed to load shader: " + path); g_LoggerWindow->AddLog("Failed to load Shader", ImVec4(1.0f, 0.01f, 0.01f, 1.0f));
} }
break;
} }
case AssetType::MODEL: case AssetType::MODEL:
{ {
@ -84,12 +86,15 @@ AssetManager::AssetVariant AssetManager::loadAssetFromDisk(AssetType type, const
} }
else else
{ {
throw std::runtime_error("Failed to load model: " + path); g_LoggerWindow->AddLog("Failed to load model: %s", ImVec4(1.0f, 0.01f, 0.01f, 1.0f), path.c_str());
} }
break;
} }
default: default:
throw std::invalid_argument("Unknown AssetType"); g_LoggerWindow->AddLog("Unknown Asset Type", ImVec4(1.0f, 0.01f, 0.01f, 1.0f));
break;
} }
throw std::runtime_error("Failed to load Asset: " + path);
} }
std::string AssetManager::generateKey(AssetType type, const std::string &path) std::string AssetManager::generateKey(AssetType type, const std::string &path)

View File

@ -213,6 +213,9 @@ public:
//} //}
// 3) Not loaded yet // 3) Not loaded yet
try
{
AssetVariant assetData = loadAssetFromDisk(type, path); AssetVariant assetData = loadAssetFromDisk(type, path);
if (assetData.valueless_by_exception()) if (assetData.valueless_by_exception())
@ -220,13 +223,16 @@ public:
DEBUG_PRINT("[AssetManager] Failed to load asset: %s", path.c_str()); DEBUG_PRINT("[AssetManager] Failed to load asset: %s", path.c_str());
return nullptr; // For smart pointers, return nullptr on failure return nullptr; // For smart pointers, return nullptr on failure
} }
// 4) Store in cache
m_AssetMap[key] = assetData; m_AssetMap[key] = assetData;
// 5) Return the loaded asset
return std::get<std::shared_ptr<T>>(assetData); return std::get<std::shared_ptr<T>>(assetData);
} }
catch (const std::exception &e)
{
std::cout << "Exception caught: " << e.what() << '\n';
}
return nullptr;
}
void DebugAssetMap(); void DebugAssetMap();

1416
src/Windows/Icons.h Normal file

File diff suppressed because it is too large Load Diff

View File

@ -6,6 +6,8 @@
#include <vector> #include <vector>
#include "Icons.h"
extern std::vector<GameObject> g_GameObjects; extern std::vector<GameObject> g_GameObjects;
extern GameObject *g_SelectedObject; // Pointer to the currently selected object extern GameObject *g_SelectedObject; // Pointer to the currently selected object
extern std::shared_ptr<CameraComponent> g_RuntimeCameraObject; extern std::shared_ptr<CameraComponent> g_RuntimeCameraObject;
@ -21,7 +23,7 @@ void InspectorWindow::Show()
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6, 4)); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6, 4));
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(10, 10)); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(10, 10));
if (ImGui::Begin("Inspector##InspectorWindow")) if (ImGui::Begin(ICON_FA_MAGNIFYING_GLASS " Inspector##InspectorWindow"))
{ {
// Title label (white text) // Title label (white text)
if (g_SelectedObject) if (g_SelectedObject)
@ -33,6 +35,8 @@ void InspectorWindow::Show()
return; return;
} }
ImVec2 size = ImGui::GetContentRegionAvail();
// Display object name and component count // Display object name and component count
ImGui::Text("Editing Object: %s", g_SelectedObject->name.c_str()); ImGui::Text("Editing Object: %s", g_SelectedObject->name.c_str());
ImGui::Text("Components: %d", g_SelectedObject->GetComponentCount()); ImGui::Text("Components: %d", g_SelectedObject->GetComponentCount());
@ -171,13 +175,12 @@ void InspectorWindow::Show()
{ {
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
bool transformOpen = ImGui::CollapsingHeader("Transform##Main", ImGuiTreeNodeFlags_DefaultOpen); bool transformOpen = ImGui::CollapsingHeader(ICON_FA_CIRCLE_NODES " Transform##Main", ImGuiTreeNodeFlags_DefaultOpen);
ImGui::PopStyleColor(); ImGui::PopStyleColor();
// Transform* transform = &g_SelectedObject->transform; // Transform* transform = &g_SelectedObject->transform;
// printf("%p\n", &transform); // printf("%p\n", &transform);
if (transformOpen) if (transformOpen)
{ {
if (ImGui::IsItemHovered()) if (ImGui::IsItemHovered())
{ {
ImGui::BeginTooltip(); ImGui::BeginTooltip();
@ -185,196 +188,62 @@ void InspectorWindow::Show()
ImGui::EndTooltip(); ImGui::EndTooltip();
} }
// ----------------------------------- const char *axisNames[3] = {"X", "Y", "Z"};
// Position
// -----------------------------------
ImGui::TextUnformatted("Position");
ImGui::Spacing();
{
// We'll assign colors for X, Y, Z buttons
// (normal, hovered, active)
static const ImVec4 colX = ImVec4(1.0f, 0.4f, 0.4f, 1.0f); static const ImVec4 colX = ImVec4(1.0f, 0.4f, 0.4f, 1.0f);
static const ImVec4 colXHover = ImVec4(1.0f, 0.6f, 0.6f, 1.0f);
static const ImVec4 colXActive = ImVec4(1.0f, 0.2f, 0.2f, 1.0f);
static const ImVec4 colY = ImVec4(0.4f, 1.0f, 0.4f, 1.0f); static const ImVec4 colY = ImVec4(0.4f, 1.0f, 0.4f, 1.0f);
static const ImVec4 colYHover = ImVec4(0.6f, 1.0f, 0.6f, 1.0f);
static const ImVec4 colYActive = ImVec4(0.2f, 1.0f, 0.2f, 1.0f);
static const ImVec4 colZ = ImVec4(0.4f, 0.4f, 1.0f, 1.0f); static const ImVec4 colZ = ImVec4(0.4f, 0.4f, 1.0f, 1.0f);
static const ImVec4 colXHover = ImVec4(1.0f, 0.6f, 0.6f, 1.0f);
static const ImVec4 colYHover = ImVec4(0.6f, 1.0f, 0.6f, 1.0f);
static const ImVec4 colZHover = ImVec4(0.6f, 0.6f, 1.0f, 1.0f); static const ImVec4 colZHover = ImVec4(0.6f, 0.6f, 1.0f, 1.0f);
static const ImVec4 colXActive = ImVec4(1.0f, 0.2f, 0.2f, 1.0f);
static const ImVec4 colYActive = ImVec4(0.2f, 1.0f, 0.2f, 1.0f);
static const ImVec4 colZActive = ImVec4(0.2f, 0.2f, 1.0f, 1.0f); static const ImVec4 colZActive = ImVec4(0.2f, 0.2f, 1.0f, 1.0f);
const char *axisNames[3] = {"X", "Y", "Z"}; int ittr = 0;
// We'll reference transform.position here
float *pos = glm::value_ptr(transform->position); auto drawTransformRow = [&](const char *label, float *values)
{
ImGui::TextUnformatted(label);
ImGui::SameLine(90); // Align labels to a fixed width
ImVec4 colors[3][3] = {
{colX, colXHover, colXActive},
{colY, colYHover, colYActive},
{colZ, colZHover, colZActive}};
ImGui::PushID("PositionRow");
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
{ {
// Determine color set ImGui::PushStyleColor(ImGuiCol_Button, colors[i][0]);
ImVec4 col, colH, colA; ImGui::PushStyleColor(ImGuiCol_ButtonHovered, colors[i][1]);
if (i == 0) ImGui::PushStyleColor(ImGuiCol_ButtonActive, colors[i][2]);
std::string name = std::string(axisNames[i]) + "##" + std::to_string(ittr);
if (ImGui::Button(name.c_str(), ImVec2(20, 0)))
{ {
col = colX; // No action on click
colH = colXHover;
colA = colXActive;
}
else if (i == 1)
{
col = colY;
colH = colYHover;
colA = colYActive;
}
else
{
col = colZ;
colH = colZHover;
colA = colZActive;
}
// Push color style for button
ImGui::PushStyleColor(ImGuiCol_Button, col);
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, colH);
ImGui::PushStyleColor(ImGuiCol_ButtonActive, colA);
// Small button with the axis name
if (ImGui::Button(axisNames[i], ImVec2(20, 0)))
{
// No action on click, but we have a box with color
}
ImGui::PopStyleColor(3);
ImGui::SameLine();
ImGui::SetNextItemWidth(60.0f);
ImGui::DragFloat((std::string("##Pos") + axisNames[i]).c_str(), &pos[i], 0.1f);
if (i < 2)
ImGui::SameLine(0, 15);
}
ImGui::PopID();
}
ImGui::Spacing();
ImGui::Separator();
// -----------------------------------
// Rotation
// -----------------------------------
ImGui::TextUnformatted("Rotation");
ImGui::Spacing();
{
// Same approach, but referencing transform.rotation
const char *axisNames[3] = {"X", "Y", "Z"};
float *rot = glm::value_ptr(transform->rotation);
// We can reuse the same color sets
ImGui::PushID("RotationRow");
for (int i = 0; i < 3; i++)
{
// Decide color sets for X, Y, Z
ImVec4 col, colH, colA;
if (i == 0)
{
col = ImVec4(1.0f, 0.4f, 0.4f, 1.0f);
colH = ImVec4(1.0f, 0.6f, 0.6f, 1.0f);
colA = ImVec4(1.0f, 0.2f, 0.2f, 1.0f);
}
else if (i == 1)
{
col = ImVec4(0.4f, 1.0f, 0.4f, 1.0f);
colH = ImVec4(0.6f, 1.0f, 0.6f, 1.0f);
colA = ImVec4(0.2f, 1.0f, 0.2f, 1.0f);
}
else
{
col = ImVec4(0.4f, 0.4f, 1.0f, 1.0f);
colH = ImVec4(0.6f, 0.6f, 1.0f, 1.0f);
colA = ImVec4(0.2f, 0.2f, 1.0f, 1.0f);
}
ImGui::PushStyleColor(ImGuiCol_Button, col);
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, colH);
ImGui::PushStyleColor(ImGuiCol_ButtonActive, colA);
if (ImGui::Button(axisNames[i], ImVec2(20, 0)))
{
// No action
} }
ImGui::PopStyleColor(3); ImGui::PopStyleColor(3);
ImGui::SameLine(); ImGui::SameLine();
ImGui::SetNextItemWidth(60.0f); ImGui::SetNextItemWidth(60.0f); // Adjust field width to be more compact
ImGui::DragFloat((std::string("##Rot") + axisNames[i]).c_str(), &rot[i], 0.1f); ImGui::DragFloat((std::string("##") + label + axisNames[i]).c_str(), &values[i], 0.1f);
if (i < 2) if (i < 2)
ImGui::SameLine(0, 15); ImGui::SameLine(0, 5); // Reduce spacing between fields
}
ImGui::PopID();
} }
};
ImGui::Spacing(); // Position Row
ImGui::Separator(); drawTransformRow("Position", glm::value_ptr(transform->position));
ittr += 1;
// ----------------------------------- // Rotation Row
// Scale drawTransformRow("Rotation", glm::value_ptr(transform->rotation));
// ----------------------------------- ittr += 1;
ImGui::TextUnformatted("Scale");
ImGui::Spacing();
{ // Scale Row
const char *axisNames[3] = {"X", "Y", "Z"}; drawTransformRow("Scale", glm::value_ptr(transform->scale));
float *scl = glm::value_ptr(transform->scale);
ImGui::PushID("ScaleRow");
for (int i = 0; i < 3; i++)
{
// same color approach
ImVec4 col, colH, colA;
if (i == 0)
{
col = ImVec4(1.0f, 0.4f, 0.4f, 1.0f);
colH = ImVec4(1.0f, 0.6f, 0.6f, 1.0f);
colA = ImVec4(1.0f, 0.2f, 0.2f, 1.0f);
}
else if (i == 1)
{
col = ImVec4(0.4f, 1.0f, 0.4f, 1.0f);
colH = ImVec4(0.6f, 1.0f, 0.6f, 1.0f);
colA = ImVec4(0.2f, 1.0f, 0.2f, 1.0f);
}
else
{
col = ImVec4(0.4f, 0.4f, 1.0f, 1.0f);
colH = ImVec4(0.6f, 0.6f, 1.0f, 1.0f);
colA = ImVec4(0.2f, 0.2f, 1.0f, 1.0f);
}
ImGui::PushStyleColor(ImGuiCol_Button, col);
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, colH);
ImGui::PushStyleColor(ImGuiCol_ButtonActive, colA);
if (ImGui::Button(axisNames[i], ImVec2(20, 0)))
{
// No action
}
ImGui::PopStyleColor(3);
ImGui::SameLine();
ImGui::SetNextItemWidth(60.0f);
ImGui::DragFloat((std::string("##Scl") + axisNames[i]).c_str(), &scl[i], 0.1f);
if (i < 2)
ImGui::SameLine(0, 15);
}
ImGui::PopID();
}
ImGui::Spacing();
ImGui::Separator();
} }
} }
@ -384,7 +253,7 @@ void InspectorWindow::Show()
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
// Create a collapsing header for the Camera component // Create a collapsing header for the Camera component
bool cameraOpen = ImGui::CollapsingHeader("Camera##CamerInspector", ImGuiTreeNodeFlags_DefaultOpen); bool cameraOpen = ImGui::CollapsingHeader(ICON_FA_CAMERA "Camera##CamerInspector", ImGuiTreeNodeFlags_DefaultOpen);
ImGui::PopStyleColor(); // Revert text color ImGui::PopStyleColor(); // Revert text color
if (cameraOpen) if (cameraOpen)
@ -541,7 +410,7 @@ void InspectorWindow::Show()
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
// Create a collapsing header for the MeshComponent // Create a collapsing header for the MeshComponent
bool meshOpen = ImGui::CollapsingHeader("Mesh##Main", ImGuiTreeNodeFlags_DefaultOpen); bool meshOpen = ImGui::CollapsingHeader(ICON_FA_CUBE " Mesh##Main", ImGuiTreeNodeFlags_DefaultOpen);
ImGui::PopStyleColor(); ImGui::PopStyleColor();
if (meshOpen) if (meshOpen)
@ -561,21 +430,28 @@ void InspectorWindow::Show()
} }
// --- Submeshes Information --- // --- Submeshes Information ---
ImGui::Separator(); ImGui::Indent();
ImGui::Text("Submeshes:"); if (ImGui::CollapsingHeader("Submeshes", ImGuiTreeNodeFlags_None))
{
// Check if the model is loaded // Check if the model is loaded
if (mesh) if (mesh)
{ {
// Iterate through each Submesh // Iterate through each Submesh
ImGui::Indent();
for (size_t sm = 0; sm < mesh->submeshes.size(); ++sm) for (size_t sm = 0; sm < mesh->submeshes.size(); ++sm)
{ {
const Submesh &submesh = mesh->submeshes[sm]; const Submesh &submesh = mesh->submeshes[sm];
std::string header = "Submesh " + std::to_string(sm + 1) + "##Submesh" + std::to_string(sm); std::string header = "Submesh " + std::to_string(sm + 1) + "##Submesh" + std::to_string(sm);
// Create a collapsing header for each Submesh // Create a collapsing header for each Submesh
if (ImGui::CollapsingHeader(header.c_str(), ImGuiTreeNodeFlags_DefaultOpen)) if (ImGui::CollapsingHeader(header.c_str(), ImGuiTreeNodeFlags_None))
{ {
ImGui::Indent();
size = ImGui::GetContentRegionAvail();
// --- Submesh VAO (Read-Only) --- // --- Submesh VAO (Read-Only) ---
ImGui::Text("VAO: %d", static_cast<int>(submesh.vao)); ImGui::Text("VAO: %d", static_cast<int>(submesh.vao));
@ -608,8 +484,7 @@ void InspectorWindow::Show()
if (texture.id != 0) if (texture.id != 0)
{ {
// Adjust the size as needed // Adjust the size as needed
ImVec2 imageSize = ImVec2(100, 100); // Example size ImGui::Image(static_cast<ImTextureID>(texture.id), ImVec2(size.x, size.x), ImVec2(0, 0), ImVec2(1, 1));
ImGui::Image(static_cast<ImTextureID>(texture.id), imageSize, ImVec2(0, 0), ImVec2(1, 1));
} }
else else
{ {
@ -619,23 +494,26 @@ void InspectorWindow::Show()
ImGui::Separator(); ImGui::Separator();
} }
} }
ImGui::Unindent();
ImGui::Separator(); ImGui::Separator();
} }
} }
ImGui::Unindent();
} }
else else
{ {
ImGui::TextColored(ImVec4(1.0f, 0.0f, 0.0f, 1.0f), "No model loaded."); ImGui::TextColored(ImVec4(1.0f, 0.0f, 0.0f, 1.0f), "No model loaded.");
} }
} }
ImGui::Separator(); ImGui::Unindent();
}
} }
if (script && g_SelectedObject) if (script && g_SelectedObject)
{ {
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
bool scriptOpen = ImGui::CollapsingHeader("Script##Main", ImGuiTreeNodeFlags_DefaultOpen); bool scriptOpen = ImGui::CollapsingHeader(ICON_FA_SCROLL " Script##Main", ImGuiTreeNodeFlags_DefaultOpen);
ImGui::PopStyleColor(); ImGui::PopStyleColor();
if (scriptOpen) if (scriptOpen)

View File

@ -4,6 +4,7 @@
#include "imgui.h" #include "imgui.h"
#include <cstdarg> #include <cstdarg>
#include <cstdio> #include <cstdio>
#include "Icons.h"
// Helper function to format strings // Helper function to format strings
static std::string FormatString(const char* fmt, va_list args) { static std::string FormatString(const char* fmt, va_list args) {
@ -33,7 +34,7 @@ void LoggerWindow::AddLog(const char* fmt, std::optional<ImVec4> color, ...) {
} }
void LoggerWindow::Show() { void LoggerWindow::Show() {
ImGui::Begin("Logger##logger"); ImGui::Begin(ICON_FA_TERMINAL " Logger##logger");
if (ImGui::Button("Clear")) { if (ImGui::Button("Clear")) {
m_Logs.clear(); m_Logs.clear();

View File

@ -3,6 +3,7 @@
#include <algorithm> #include <algorithm>
#include <string> #include <string>
#include <iostream> // For debug statements #include <iostream> // For debug statements
#include "Icons.h"
// Constructor // Constructor
ProfilerWindow::ProfilerWindow() ProfilerWindow::ProfilerWindow()
@ -98,7 +99,7 @@ void ProfilerWindow::Show()
} }
// Begin ImGui window with improved styling // Begin ImGui window with improved styling
ImGui::Begin("Profiler", nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_HorizontalScrollbar); ImGui::Begin(ICON_FA_GAUGE " Profiler", nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_HorizontalScrollbar);
const auto &data = Profiler::Get().GetLastFrameData(); const auto &data = Profiler::Get().GetLastFrameData();

View File

@ -24,6 +24,8 @@ extern std::vector<std::shared_ptr<GameObject>> g_GameObjects;
#include "Engine/AssetManager.h" #include "Engine/AssetManager.h"
#include "Rendering/Shader.h" #include "Rendering/Shader.h"
#include "Icons.h"
// Extern reference to our global (or extern) asset manager // Extern reference to our global (or extern) asset manager
extern AssetManager g_AssetManager; extern AssetManager g_AssetManager;
@ -250,7 +252,7 @@ bool PlayPauseButton(const char *label, bool *isPlaying, ImVec2 Size)
void RenderWindow::Show(bool *GameRunning) void RenderWindow::Show(bool *GameRunning)
{ {
ImGui::Begin("Editor##EditorWindow"); ImGui::Begin(ICON_FA_GAMEPAD " Editor##EditorWindow");
if (!m_Initialized) if (!m_Initialized)
{ {