Added some helper functions, and make a theme

This commit is contained in:
OusmBlueNinja 2025-05-09 16:10:34 -05:00
parent afb3a254a6
commit ccb4100814
13 changed files with 4817 additions and 1829 deletions

View File

@ -1,6 +1,8 @@
# Create-Engine
A 2d Game engine written in **pure** C
[Get Perks!](https://buymeacoffee.com/gigabitestudios)
A 2d Game engine written in C++
## Compileing
@ -8,13 +10,13 @@ Go to the build.py and update the inclued paths, and everything under 'Config'
run
`python3 build.py clean`
`python3 ./Remake/remake/remake.py clean`
then
`python3 build.py run`
`python3 ./Remake/remake/remake.py run`
Then wait for it to compile and run.
![screenshot](images/image.png)
![Build System Screenshot](images/screenshot.png)

BIN
images/image.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 KiB

View File

@ -10,24 +10,24 @@ Collapsed=1
[Window][WindowOverViewport_11111111]
Pos=0,19
Size=1280,701
Size=1920,1158
Collapsed=0
[Window][Inspector]
Pos=913,19
Size=367,202
Pos=1553,19
Size=367,659
Collapsed=0
DockId=0x00000018,0
[Window][Scene Tree]
Pos=0,19
Size=341,350
Size=341,579
Collapsed=0
DockId=0x0000000F,0
[Window][Viewport]
Pos=343,19
Size=568,202
Size=1208,659
Collapsed=0
DockId=0x00000017,0
@ -36,14 +36,14 @@ Size=1280,19
Collapsed=0
[Window][Performance Info]
Pos=1107,223
Size=173,268
Pos=1628,680
Size=292,268
Collapsed=0
DockId=0x00000019,0
[Window][Console]
Pos=343,223
Size=549,497
Pos=343,680
Size=927,497
Collapsed=0
DockId=0x0000001B,0
@ -78,8 +78,8 @@ Collapsed=0
DockId=0x00000015,1
[Window][Color Correction]
Pos=1107,493
Size=173,227
Pos=1628,950
Size=292,227
Collapsed=0
DockId=0x0000001A,0
@ -113,8 +113,8 @@ Collapsed=0
DockId=0x0000000E,0
[Window][Audio Output]
Pos=1076,223
Size=29,497
Pos=1577,680
Size=49,497
Collapsed=0
DockId=0x00000012,0
@ -125,8 +125,8 @@ Collapsed=0
DockId=0x0000000D,0
[Window][Resources]
Pos=0,371
Size=341,349
Pos=0,600
Size=341,577
Collapsed=0
DockId=0x00000010,0
@ -136,11 +136,16 @@ Size=550,695
Collapsed=0
[Window][Lua Globals]
Pos=894,223
Size=180,497
Pos=1272,680
Size=303,497
Collapsed=0
DockId=0x0000001C,0
[Window][Import Assets]
Pos=626,263
Size=536,391
Collapsed=0
[Table][0x96376740,2]
RefScale=13
Column 0 Weight=1.0000
@ -152,8 +157,13 @@ Column 0 Width=102
Column 1 Width=50
Column 2 Weight=1.0000
[Table][0x8E3245A2,2]
RefScale=13
Column 0 Weight=1.0000
Column 1 Width=120
[Docking][Data]
DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1280,701 Split=X
DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1920,1158 Split=X
DockNode ID=0x00000005 Parent=0x11111111 SizeRef=989,1158 Split=X
DockNode ID=0x00000001 Parent=0x00000005 SizeRef=341,701 Split=Y Selected=0x12EF0F59
DockNode ID=0x00000003 Parent=0x00000001 SizeRef=342,637 Split=Y Selected=0x12EF0F59

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,3 @@
[LINK] g++ src\build\Engine.o src\build\main.o src\build\Renderer.o src\build\Components\AnimationComponent.o src\build\Components\AudioPlayerComponent.o src\build\Components\CameraComponent.o src\build\Components\LightComponent.o src\build\Components\ParticleComponent.o src\build\Components\PathFollowerComponent.o src\build\Components\PhysicsComponent.o src\build\Components\ScriptComponent.o src\build\Components\SpriteComponent.o src\build\Components\TextComonent.o src\build\Components\TilemapComponent.o src\build\core\audio\AudioEngine.o src\build\core\functions\Prefab.o src\build\core\functions\ScenePacker.o src\build\core\scripts\LuaGlobalBridge.o src\build\core\scripts\ScriptCore.o src\build\core\utils\AssetManager.o src\build\core\utils\EngineConfig.o src\build\core\utils\ExceptionHandler.o src\build\core\utils\FileDialog.o src\build\core\utils\input.o src\build\core\utils\LoadingWindow.o src\build\core\utils\Logging.o src\build\core\utils\Popup.o src\build\core\utils\Profiler.o src\build\core\utils\Texture.o src\build\core\utils\utils.o src\build\editor\windows\AssetBrowser.o src\build\editor\windows\AudioInfo.o src\build\editor\windows\Inspector.o src\build\editor\windows\LuaGlobals.o src\build\Entitys\Object.o src\build\utils\GameObjectsList.o src\build\utils\Shader.o src\build\utils\UID.o src\build\lapi.o src\build\lauxlib.o src\build\lbaselib.o src\build\lcode.o src\build\lcorolib.o src\build\lctype.o src\build\ldblib.o src\build\ldebug.o src\build\ldo.o src\build\ldump.o src\build\lfunc.o src\build\lgc.o src\build\linit.o src\build\liolib.o src\build\llex.o src\build\lmathlib.o src\build\lmem.o src\build\loadlib.o src\build\lobject.o src\build\lopcodes.o src\build\loslib.o src\build\lparser.o src\build\lstate.o src\build\lstring.o src\build\lstrlib.o src\build\ltable.o src\build\ltablib.o src\build\ltm.o src\build\lua.o src\build\luac.o src\build\lundump.o src\build\lutf8lib.o src\build\lvm.o src\build\lzio.o src\build\imgui.o src\build\imgui_demo.o src\build\imgui_draw.o src\build\imgui_impl_glfw.o src\build\imgui_impl_opengl3.o src\build\imgui_tables.o src\build\imgui_widgets.o src\build\aabb.o src\build\arena_allocator.o src\build\array.o src\build\bitset.o src\build\body.o src\build\broad_phase.o src\build\constraint_graph.o src\build\contact.o src\build\contact_solver.o src\build\core.o src\build\distance.o src\build\distance_joint.o src\build\dynamic_tree.o src\build\geometry.o src\build\hull.o src\build\id_pool.o src\build\island.o src\build\joint.o src\build\manifold.o src\build\math_functions.o src\build\motor_joint.o src\build\mouse_joint.o src\build\mover.o src\build\prismatic_joint.o src\build\revolute_joint.o src\build\sensor.o src\build\shape.o src\build\solver.o src\build\solver_set.o src\build\table.o src\build\timer.o src\build\types.o src\build\weld_joint.o src\build\wheel_joint.o src\build\world.o src\build\xxhash.o src\build\miniaudio.o src\build\ImGuizmo.o -o src\build\app.exe -LC:\msys64\mingw64\lib -lglfw3 -lglew32 -lopengl32 -lgdi32 -lyaml-cpp -lcomdlg32 -lssl -lcrypto -ldbghelp -lz -lfreetype
[COMPILE] g++ -std=c++20 -Wall -g -DGLM_ENABLE_EXPERIMENTAL -O2 -static -static-libstdc++ -static-libgcc -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -Isrc/vendor/xxhash -Isrc/vendor/miniaudio -Isrc/vendor/imguizmo -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Engine.cpp -o src\build\Engine.o
[LINK] g++ src\build\Engine.o src\build\main.o src\build\Renderer.o src\build\Components\AnimationComponent.o src\build\Components\AudioPlayerComponent.o src\build\Components\CameraComponent.o src\build\Components\LightComponent.o src\build\Components\ParticleComponent.o src\build\Components\PathFollowerComponent.o src\build\Components\PhysicsComponent.o src\build\Components\ScriptComponent.o src\build\Components\SpriteComponent.o src\build\Components\TextComonent.o src\build\Components\TilemapComponent.o src\build\core\audio\AudioEngine.o src\build\core\functions\Prefab.o src\build\core\functions\ScenePacker.o src\build\core\scripts\LuaGlobalBridge.o src\build\core\scripts\ScriptCore.o src\build\core\utils\AssetManager.o src\build\core\utils\EngineConfig.o src\build\core\utils\ExceptionHandler.o src\build\core\utils\FileDialog.o src\build\core\utils\input.o src\build\core\utils\LoadingWindow.o src\build\core\utils\Logging.o src\build\core\utils\Popup.o src\build\core\utils\Profiler.o src\build\core\utils\Texture.o src\build\core\utils\utils.o src\build\editor\utils\Themes.o src\build\editor\windows\AssetBrowser.o src\build\editor\windows\AudioInfo.o src\build\editor\windows\Inspector.o src\build\editor\windows\LuaGlobals.o src\build\Entitys\Object.o src\build\utils\GameObjectsList.o src\build\utils\Shader.o src\build\utils\UID.o src\build\lapi.o src\build\lauxlib.o src\build\lbaselib.o src\build\lcode.o src\build\lcorolib.o src\build\lctype.o src\build\ldblib.o src\build\ldebug.o src\build\ldo.o src\build\ldump.o src\build\lfunc.o src\build\lgc.o src\build\linit.o src\build\liolib.o src\build\llex.o src\build\lmathlib.o src\build\lmem.o src\build\loadlib.o src\build\lobject.o src\build\lopcodes.o src\build\loslib.o src\build\lparser.o src\build\lstate.o src\build\lstring.o src\build\lstrlib.o src\build\ltable.o src\build\ltablib.o src\build\ltm.o src\build\lua.o src\build\luac.o src\build\lundump.o src\build\lutf8lib.o src\build\lvm.o src\build\lzio.o src\build\imgui.o src\build\imgui_demo.o src\build\imgui_draw.o src\build\imgui_impl_glfw.o src\build\imgui_impl_opengl3.o src\build\imgui_tables.o src\build\imgui_widgets.o src\build\aabb.o src\build\arena_allocator.o src\build\array.o src\build\bitset.o src\build\body.o src\build\broad_phase.o src\build\constraint_graph.o src\build\contact.o src\build\contact_solver.o src\build\core.o src\build\distance.o src\build\distance_joint.o src\build\dynamic_tree.o src\build\geometry.o src\build\hull.o src\build\id_pool.o src\build\island.o src\build\joint.o src\build\manifold.o src\build\math_functions.o src\build\motor_joint.o src\build\mouse_joint.o src\build\mover.o src\build\prismatic_joint.o src\build\revolute_joint.o src\build\sensor.o src\build\shape.o src\build\solver.o src\build\solver_set.o src\build\table.o src\build\timer.o src\build\types.o src\build\weld_joint.o src\build\wheel_joint.o src\build\world.o src\build\xxhash.o src\build\miniaudio.o src\build\ImGuizmo.o -o src\build\app.exe -LC:\msys64\mingw64\lib -lglfw3 -lglew32 -lopengl32 -lgdi32 -lyaml-cpp -lcomdlg32 -lssl -lcrypto -ldbghelp -lz -lfreetype
[ERROR] Interrupted by user.

File diff suppressed because it is too large Load Diff

View File

@ -33,6 +33,9 @@
#include "editor/windows/AudioInfo.h"
#include "editor/windows/LuaGlobals.h"
#include "editor/utils/Themes.h"
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <imgui.h>
@ -505,6 +508,9 @@ void Engine::Init()
glfwSwapInterval(0); // No VSync
glewInit();
glfwSetDropCallback(window, GLFWDropCallback);
g_engineConfig.LoadFromFile();
Logger::LogOk("Config Core");
@ -513,6 +519,7 @@ void Engine::Init()
ImGuiIO &io = ImGui::GetIO();
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
ImGui::StyleColorsDark();
SetupImGuiStyle_Windark();
ImGui_ImplGlfw_InitForOpenGL(window, true);
ImGui_ImplOpenGL3_Init((std::string("#version ") + g_engineConfig.gl_version).c_str());
m_Reserved_draws = 0;

View File

@ -16,6 +16,66 @@ std::unordered_map<uint64_t, std::shared_ptr<AssetInfo>> AssetManager::s_Assets;
std::unordered_map<std::string, uint64_t> AssetManager::s_PathToUAID;
uint64_t AssetManager::s_NextUAID = 1;
AssetType AssetManager::AssetTypeFromExtension(std::string ext)
{
// strip leading dot
if (!ext.empty() && ext.front() == '.')
ext.erase(0, 1);
// lowercase
std::transform(ext.begin(), ext.end(), ext.begin(), ::tolower);
// — Image formats —
if (ext=="png" || ext=="jpg" || ext=="jpeg" || ext=="bmp" ||
ext=="tga" || ext=="gif" || ext=="dds" || ext=="webp" ||
ext=="hdr")
return AssetType::Image;
// — Audio formats —
if (ext=="wav" || ext=="mp3" || ext=="ogg" || ext=="flac" ||
ext=="aac" || ext=="mid" || ext=="midi" || ext=="mod" ||
ext=="xm")
return AssetType::Audio;
// — Font formats —
if (ext=="ttf" || ext=="otf" || ext=="woff" || ext=="woff2"||
ext=="fnt")
return AssetType::Font;
// — Shader formats —
if (ext=="vert" || ext=="frag" || ext=="glsl" || ext=="hlsl" ||
ext=="shader" || ext=="spv" || ext=="cg" ||
ext=="geom" || ext=="tesc" || ext=="tese" || ext=="comp")
return AssetType::Shader;
// — Script formats —
if (ext=="lua" || ext=="js" || ext=="ts" ||
ext=="py" || ext=="cs" || ext=="rb")
return AssetType::Script;
// — Scene / data formats —
if (ext=="scene"|| ext=="json"|| ext=="yaml"|| ext=="yml" ||
ext=="xml")
return AssetType::Scene;
// — Video formats —
if (ext=="mp4" || ext=="avi" || ext=="mov" || ext=="webm"||
ext=="ogv" || ext=="mkv" || ext=="mpg" || ext=="mpeg"||
ext=="flv" || ext=="m4v")
return AssetType::Video;
// — Prefab format —
if (ext=="cpfb")
return AssetType::Prefab;
// — Fallback —
return AssetType::Unknown;
}
const char *MiniaudioResultToString(ma_result result)
{
switch (result)
@ -227,6 +287,15 @@ void AssetManager::LoadAssetAsync(const std::string &path, AssetType type)
void AssetManager::LoadImageInternal(const std::string &path, uint64_t uaid)
{
std::string ext = GetFileExtension_Name(path);
std::transform(ext.begin(), ext.end(), ext.begin(), ::tolower);
if (ext == "webp")
{
Logger::LogError("[AssetManager] WebP images are not supported: %s", path.c_str());
return;
}
auto it = s_Assets.find(uaid);
if (it == s_Assets.end())
return;

View File

@ -14,18 +14,28 @@ using UAssetID = uint64_t;
class Object;
#define ASSET_TEXTURE "ASSET_TEXTURE"
#define ASSET_AUDIO "ASSET_AUDIO"
#define ASSET_PREFAB "ASSET_PREFAB"
#define ASSET_FONT "ASSET_FONT"
#define ASSET_TEXTURE "ASSET_TEXTURE"
#define ASSET_AUDIO "ASSET_AUDIO"
#define ASSET_FONT "ASSET_FONT"
#define ASSET_SHADER "ASSET_SHADER"
#define ASSET_SCRIPT "ASSET_SCRIPT"
#define ASSET_SCENE "ASSET_SCENE"
#define ASSET_VIDEO "ASSET_VIDEO"
#define ASSET_PREFAB "ASSET_PREFAB"
#define ASSET_UNKNOWN "ASSET_UNKNOWN"
#define ASSET_TYPE_LIST \
X(Image) \
X(Audio) \
X(Prefab) \
X(Font) \
X(Prefab) \
X(Shader) \
X(Script) \
X(Scene) \
X(Video) \
X(Unknown)
enum class AssetType {
@ -149,6 +159,10 @@ public:
static uint64_t GenerateUAID();
static AssetType AssetTypeFromExtension(std::string ext);
private:
static std::unordered_map<uint64_t, std::shared_ptr<AssetInfo>> s_Assets;
static std::unordered_map<std::string, uint64_t> s_PathToUAID;

View File

@ -0,0 +1,93 @@
#include <imgui.h>
void SetupImGuiStyle_Windark()
{
// Windark style by DestroyerDarkNess from ImThemes
ImGuiStyle& style = ImGui::GetStyle();
style.Alpha = 1.0f;
style.DisabledAlpha = 0.6000000238418579f;
style.WindowPadding = ImVec2(8.0f, 8.0f);
style.WindowRounding = 8.399999618530273f;
style.WindowBorderSize = 1.0f;
style.WindowMinSize = ImVec2(32.0f, 32.0f);
style.WindowTitleAlign = ImVec2(0.0f, 0.5f);
style.WindowMenuButtonPosition = ImGuiDir_Right;
style.ChildRounding = 3.0f;
style.ChildBorderSize = 1.0f;
style.PopupRounding = 3.0f;
style.PopupBorderSize = 1.0f;
style.FramePadding = ImVec2(4.0f, 3.0f);
style.FrameRounding = 3.0f;
style.FrameBorderSize = 1.0f;
style.ItemSpacing = ImVec2(8.0f, 4.0f);
style.ItemInnerSpacing = ImVec2(4.0f, 4.0f);
style.CellPadding = ImVec2(4.0f, 2.0f);
style.IndentSpacing = 21.0f;
style.ColumnsMinSpacing = 6.0f;
style.ScrollbarSize = 5.599999904632568f;
style.ScrollbarRounding = 18.0f;
style.GrabMinSize = 10.0f;
style.GrabRounding = 3.0f;
style.TabRounding = 3.0f;
style.TabBorderSize = 0.0f;
style.ColorButtonPosition = ImGuiDir_Right;
style.ButtonTextAlign = ImVec2(0.5f, 0.5f);
style.SelectableTextAlign = ImVec2(0.0f, 0.0f);
style.Colors[ImGuiCol_Text] = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
style.Colors[ImGuiCol_TextDisabled] = ImVec4(0.6000000238418579f, 0.6000000238418579f, 0.6000000238418579f, 1.0f);
style.Colors[ImGuiCol_WindowBg] = ImVec4(0.125490203499794f, 0.125490203499794f, 0.125490203499794f, 1.0f);
style.Colors[ImGuiCol_ChildBg] = ImVec4(0.125490203499794f, 0.125490203499794f, 0.125490203499794f, 1.0f);
style.Colors[ImGuiCol_PopupBg] = ImVec4(0.168627455830574f, 0.168627455830574f, 0.168627455830574f, 1.0f);
style.Colors[ImGuiCol_Border] = ImVec4(0.250980406999588f, 0.250980406999588f, 0.250980406999588f, 1.0f);
style.Colors[ImGuiCol_BorderShadow] = ImVec4(0.0f, 0.0f, 0.0f, 0.0f);
style.Colors[ImGuiCol_FrameBg] = ImVec4(0.168627455830574f, 0.168627455830574f, 0.168627455830574f, 1.0f);
style.Colors[ImGuiCol_FrameBgHovered] = ImVec4(0.2156862765550613f, 0.2156862765550613f, 0.2156862765550613f, 1.0f);
style.Colors[ImGuiCol_FrameBgActive] = ImVec4(0.250980406999588f, 0.250980406999588f, 0.250980406999588f, 1.0f);
style.Colors[ImGuiCol_TitleBg] = ImVec4(0.125490203499794f, 0.125490203499794f, 0.125490203499794f, 1.0f);
style.Colors[ImGuiCol_TitleBgActive] = ImVec4(0.168627455830574f, 0.168627455830574f, 0.168627455830574f, 1.0f);
style.Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.125490203499794f, 0.125490203499794f, 0.125490203499794f, 1.0f);
style.Colors[ImGuiCol_MenuBarBg] = ImVec4(0.168627455830574f, 0.168627455830574f, 0.168627455830574f, 1.0f);
style.Colors[ImGuiCol_ScrollbarBg] = ImVec4(0.125490203499794f, 0.125490203499794f, 0.125490203499794f, 1.0f);
style.Colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.250980406999588f, 0.250980406999588f, 0.250980406999588f, 1.0f);
style.Colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.3019607961177826f, 0.3019607961177826f, 0.3019607961177826f, 1.0f);
style.Colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.3490196168422699f, 0.3490196168422699f, 0.3490196168422699f, 1.0f);
style.Colors[ImGuiCol_CheckMark] = ImVec4(0.0f, 0.4705882370471954f, 0.843137264251709f, 1.0f);
style.Colors[ImGuiCol_SliderGrab] = ImVec4(0.0f, 0.4705882370471954f, 0.843137264251709f, 1.0f);
style.Colors[ImGuiCol_SliderGrabActive] = ImVec4(0.0f, 0.3294117748737335f, 0.6000000238418579f, 1.0f);
style.Colors[ImGuiCol_Button] = ImVec4(0.168627455830574f, 0.168627455830574f, 0.168627455830574f, 1.0f);
style.Colors[ImGuiCol_ButtonHovered] = ImVec4(0.2156862765550613f, 0.2156862765550613f, 0.2156862765550613f, 1.0f);
style.Colors[ImGuiCol_ButtonActive] = ImVec4(0.250980406999588f, 0.250980406999588f, 0.250980406999588f, 1.0f);
style.Colors[ImGuiCol_Header] = ImVec4(0.2156862765550613f, 0.2156862765550613f, 0.2156862765550613f, 1.0f);
style.Colors[ImGuiCol_HeaderHovered] = ImVec4(0.250980406999588f, 0.250980406999588f, 0.250980406999588f, 1.0f);
style.Colors[ImGuiCol_HeaderActive] = ImVec4(0.3019607961177826f, 0.3019607961177826f, 0.3019607961177826f, 1.0f);
style.Colors[ImGuiCol_Separator] = ImVec4(0.2156862765550613f, 0.2156862765550613f, 0.2156862765550613f, 1.0f);
style.Colors[ImGuiCol_SeparatorHovered] = ImVec4(0.250980406999588f, 0.250980406999588f, 0.250980406999588f, 1.0f);
style.Colors[ImGuiCol_SeparatorActive] = ImVec4(0.3019607961177826f, 0.3019607961177826f, 0.3019607961177826f, 1.0f);
style.Colors[ImGuiCol_ResizeGrip] = ImVec4(0.2156862765550613f, 0.2156862765550613f, 0.2156862765550613f, 1.0f);
style.Colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.250980406999588f, 0.250980406999588f, 0.250980406999588f, 1.0f);
style.Colors[ImGuiCol_ResizeGripActive] = ImVec4(0.3019607961177826f, 0.3019607961177826f, 0.3019607961177826f, 1.0f);
style.Colors[ImGuiCol_Tab] = ImVec4(0.168627455830574f, 0.168627455830574f, 0.168627455830574f, 1.0f);
style.Colors[ImGuiCol_TabHovered] = ImVec4(0.2156862765550613f, 0.2156862765550613f, 0.2156862765550613f, 1.0f);
style.Colors[ImGuiCol_TabActive] = ImVec4(0.250980406999588f, 0.250980406999588f, 0.250980406999588f, 1.0f);
style.Colors[ImGuiCol_TabUnfocused] = ImVec4(0.168627455830574f, 0.168627455830574f, 0.168627455830574f, 1.0f);
style.Colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.2156862765550613f, 0.2156862765550613f, 0.2156862765550613f, 1.0f);
style.Colors[ImGuiCol_PlotLines] = ImVec4(0.0f, 0.4705882370471954f, 0.843137264251709f, 1.0f);
style.Colors[ImGuiCol_PlotLinesHovered] = ImVec4(0.0f, 0.3294117748737335f, 0.6000000238418579f, 1.0f);
style.Colors[ImGuiCol_PlotHistogram] = ImVec4(0.0f, 0.4705882370471954f, 0.843137264251709f, 1.0f);
style.Colors[ImGuiCol_PlotHistogramHovered] = ImVec4(0.0f, 0.3294117748737335f, 0.6000000238418579f, 1.0f);
style.Colors[ImGuiCol_TableHeaderBg] = ImVec4(0.1882352977991104f, 0.1882352977991104f, 0.2000000029802322f, 1.0f);
style.Colors[ImGuiCol_TableBorderStrong] = ImVec4(0.3098039329051971f, 0.3098039329051971f, 0.3490196168422699f, 1.0f);
style.Colors[ImGuiCol_TableBorderLight] = ImVec4(0.2274509817361832f, 0.2274509817361832f, 0.2470588237047195f, 1.0f);
style.Colors[ImGuiCol_TableRowBg] = ImVec4(0.0f, 0.0f, 0.0f, 0.0f);
style.Colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.0f, 1.0f, 1.0f, 0.05999999865889549f);
style.Colors[ImGuiCol_TextSelectedBg] = ImVec4(0.0f, 0.4705882370471954f, 0.843137264251709f, 1.0f);
style.Colors[ImGuiCol_DragDropTarget] = ImVec4(1.0f, 1.0f, 0.0f, 0.8999999761581421f);
style.Colors[ImGuiCol_NavHighlight] = ImVec4(0.2588235437870026f, 0.5882353186607361f, 0.9764705896377563f, 1.0f);
style.Colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.0f, 1.0f, 1.0f, 0.699999988079071f);
style.Colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.800000011920929f, 0.800000011920929f, 0.800000011920929f, 0.2000000029802322f);
style.Colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.800000011920929f, 0.800000011920929f, 0.800000011920929f, 0.3499999940395355f);
}

View File

@ -0,0 +1,3 @@
#pragma once
void SetupImGuiStyle_Windark();

View File

@ -7,6 +7,19 @@
#include "../../core/utils/Logging.h"
#include "../../core/utils/LoadingWindow.h"
// AssetBrowser.cpp (or a shared file)
#include <GLFW/glfw3.h>
#include <vector>
#include <string>
static std::vector<std::string> g_DroppedFiles;
void GLFWDropCallback(GLFWwindow *window, int count, const char *paths[])
{
for (int i = 0; i < count; i++)
g_DroppedFiles.emplace_back(paths[i]);
}
static std::string assetSearchQuery;
static bool sortAscending = true;
static int sortMode = 0; // 0 = Name, 1 = Type, 2 = UAID
@ -18,8 +31,28 @@ static bool showFonts = true;
static std::vector<std::pair<std::string, AssetType>> pendingImports;
static bool showImportPopup = false;
void HandleFileDropsAsAssets()
{
if (!g_DroppedFiles.empty())
{
for (auto &path : g_DroppedFiles)
{
std::string ext = GetFileExtension_Name(path);
AssetType type = AssetManager::AssetTypeFromExtension(ext);
pendingImports.emplace_back(path, type);
}
g_DroppedFiles.clear();
showImportPopup = true;
}
}
void ShowAssetBrowser()
{
PROFILE_ENGINE_SCOPE("Editor::AssetBrowser");
if (!g_engineConfig.settings.show_asset_window)
@ -27,7 +60,9 @@ void ShowAssetBrowser()
// Open modal popup if needed
if (showImportPopup)
ImGui::OpenPopup("Import Preview");
ImGui::OpenPopup("Import Assets");
HandleFileDropsAsAssets();
ImGui::Begin("Resources");
@ -41,30 +76,7 @@ void ShowAssetBrowser()
for (const auto &path : paths)
{
std::string ext = GetFileExtension_Name(path);
AssetType type = AssetType::Unknown;
if (ext == "png" || ext == "jpg" || ext == "jpeg" ||
ext == "bmp" || ext == "tga" || ext == "gif" ||
ext == "dds")
{
type = AssetType::Image;
}
else if (ext == "wav" || ext == "mp3" || ext == "ogg" ||
ext == "flac" || ext == "aac")
{
type = AssetType::Audio;
}
else if (ext == "cpfb")
{
type = AssetType::Prefab;
}
// — Supported font formats —
else if (ext == "ttf" || ext == "otf" ||
ext == "woff" || ext == "woff2" ||
ext == "fnt")
{
type = AssetType::Font;
}
AssetType type = AssetManager::AssetTypeFromExtension(ext);
pendingImports.emplace_back(path, type);
}
@ -296,9 +308,9 @@ void ShowAssetBrowser()
ImGui::EndChild();
ImGui::End();
if (ImGui::BeginPopupModal("Import Preview", nullptr, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize))
if (ImGui::BeginPopupModal("Import Assets", nullptr, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize))
{
ImGui::TextWrapped("Review and confirm asset imports. Adjust type if needed.");
ImGui::TextWrapped("Confirm Imports");
ImGui::Spacing();
constexpr float tableWidth = 520.0f;
@ -318,8 +330,12 @@ void ShowAssetBrowser()
ImGui::TableSetColumnIndex(1);
const char *currentLabel =
type == AssetType::Image ? "Image" : type == AssetType::Audio ? "Audio"
: type == AssetType::Prefab ? "Prefab"
: type == AssetType::Font ? "Font"
: type == AssetType::Shader ? "Shader"
: type == AssetType::Script ? "Script"
: type == AssetType::Scene ? "Scene"
: type == AssetType::Video ? "Video"
: type == AssetType::Prefab ? "Prefab"
: "Unknown";
ImGui::SetNextItemWidth(-1);
@ -329,10 +345,18 @@ void ShowAssetBrowser()
type = AssetType::Image;
if (ImGui::Selectable("Audio", type == AssetType::Audio))
type = AssetType::Audio;
if (ImGui::Selectable("Prefab", type == AssetType::Prefab))
type = AssetType::Prefab;
if (ImGui::Selectable("Font", type == AssetType::Font))
type = AssetType::Font;
if (ImGui::Selectable("Shader", type == AssetType::Shader))
type = AssetType::Shader;
if (ImGui::Selectable("Script", type == AssetType::Script))
type = AssetType::Script;
if (ImGui::Selectable("Scene", type == AssetType::Scene))
type = AssetType::Scene;
if (ImGui::Selectable("Video", type == AssetType::Video))
type = AssetType::Video;
if (ImGui::Selectable("Prefab", type == AssetType::Prefab))
type = AssetType::Prefab;
ImGui::EndCombo();
}
}

View File

@ -11,6 +11,7 @@
#include "../../Components/SpriteComponent.h"
class GLFWwindow;
void ShowAssetBrowser();
void GLFWDropCallback(GLFWwindow* window, int count, const char* paths[]);