Working on Asset Manager Explorer

This commit is contained in:
Chewico 2025-07-02 23:01:54 +02:00
parent c4d9dd300b
commit a02469b935
15 changed files with 103 additions and 53 deletions

View File

@ -30,7 +30,7 @@ DockId=0x00000005,1
Pos=0,439
Size=1280,281
Collapsed=0
DockId=0x00000004,1
DockId=0x00000004,0
[Window][TreePannel]
Pos=0,24
@ -76,7 +76,7 @@ DockId=0x00000005,2
Pos=0,439
Size=1280,281
Collapsed=0
DockId=0x00000004,2
DockId=0x00000004,1
[Docking][Data]
DockSpace ID=0xA1672E74 Window=0x4647B76E Pos=0,24 Size=1280,696 Split=Y Selected=0x34A4C10F

View File

@ -27,6 +27,9 @@ namespace Deer {
// dir
std::string getDirNameById(AssetType, std::string& dir, int i);
std::string getParentPath(std::string&);
std::string getParentPathName(std::string&);
// INTERNAL
const char* getAssetTypePath(AssetType);
const char* getAssetTypeExtension(AssetType);

View File

@ -1,6 +0,0 @@
#pragma once
namespace Deer {
namespace EditorEngine {
}
}

View File

@ -100,6 +100,14 @@ namespace Deer {
return dirData.elements[i].stem().string();
}
std::string getParentPath(std::string& path) {
return Path(path).parent_path().string();
}
std::string getParentPathName(std::string& path) {
return Path(path).parent_path().stem().string();
}
std::string getAssetTypePathById(AssetType type, std::string& dir,
int i) {
const char* resourcePath = getAssetTypePath(type);

View File

@ -42,6 +42,10 @@ namespace Deer {
scriptEngine->SetDefaultNamespace("Engine");
REGISTER_GLOBAL_FUNC("void print(const string& in)", print);
REGISTER_GLOBAL_FUNC("string getParentPath(const string&in)",
getParentPath);
REGISTER_GLOBAL_FUNC("string getParentPathName(const string&in)",
getParentPathName);
scriptEngine->SetDefaultNamespace("");
scriptEngine->SetDefaultNamespace("UI");

View File

@ -6,7 +6,15 @@ class AssetExplorer : DockPanel {
UI::setupAutomaticColumns(128);
if (searchAssetType == AssetType::None) {
searchAssetType = renderGenerics();
searchAssetType = renderRootAssets();
}
if (searchAssetType == AssetType::Mesh) {
currentPath = renderMeshExplorer(currentPath);
if (currentPath == "..") {
searchAssetType = AssetType::None;
currentPath = "";
}
}
}
}

View File

@ -10,3 +10,31 @@ bool drawFolder(string&in name) {
UI::nextColumn();
return click;
}
bool drawFile(string&in name) {
bool click = false;
UI::drawIconCentered("file", 64);
if (UI::isItemClicked(0) and UI::isMouseDoubleClicked(0)) {
click = true;
}
UI::textCenter(name);
UI::nextColumn();
return click;
}
bool drawFile(string&in name, string&in dragId, any dragData, string&in overlay) {
bool click = false;
UI::drawIconCentered("file", 64);
if (UI::isItemClicked(0) and UI::isMouseDoubleClicked(0)) {
click = true;
}
UI::dragDropSource(dragId,
dragData,
overlay);
UI::textCenter(name);
UI::nextColumn();
return click;
}

View File

@ -1,46 +1,33 @@
class MeshExplorer : DockPanel {
string currentPath = "";
string renderMeshExplorer(string&in dir) {
string return_dir = dir;
void onRender() {
UI::setupAutomaticColumns(128);
// To avoid problems we will cache the current path
const string cache_currentPath = currentPath;
if (cache_currentPath != "") {
UI::drawIconCentered("folder", 64);
if (UI::isItemClicked(0) and UI::isMouseDoubleClicked(0)) {
currentPath = "";
if (dir == "") {
if (drawFolder("Assets/..")) {
return_dir = "..";
}
UI::textCenter(cache_currentPath + "/..");
UI::nextColumn();
}
if (dir != "" && drawFolder(Engine::getParentPathName(dir) + "/..")) {
return_dir = Engine::getParentPath(dir);
}
AssetType resourceType = AssetType::Mesh;
int dirCount = Assets::getDirCount(resourceType, cache_currentPath);
int dirCount = Assets::getDirCount(resourceType, dir);
for (int i = 0; i < dirCount; i++) {
UI::drawIconCentered("folder", 64);
if (UI::isItemClicked(0) and UI::isMouseDoubleClicked(0)) {
Engine::print(Assets::getDirPathById(AssetType::Mesh, cache_currentPath, i));
currentPath = Assets::getDirPathById(AssetType::Mesh, cache_currentPath, i);
if (drawFolder(Assets::getDirNameById(AssetType::Mesh, dir, i))) {
return_dir = Assets::getDirPathById(AssetType::Mesh, dir, i);
}
}
UI::textCenter(Assets::getDirNameById(AssetType::Mesh, cache_currentPath, i));
UI::nextColumn();
}
//int meshCount = Assets::getAssetCount(AssetType::Mesh, dir);
//for (int i = 0; i < meshCount; i++) {
// drawFile(
// Assets::getAssetNameById(AssetType::Mesh, dir, i),
// "MESH",
// any(Assets::getAssetTypePathById(AssetType::Mesh, dir, i)),
// Assets::getAssetTypePathById(AssetType::Mesh, dir, i));
//}
int meshCount = Assets::getAssetCount(AssetType::Mesh, cache_currentPath);
for (int i = 0; i < meshCount; i++) {
UI::drawIconCentered("file", 64);
UI::dragDropSource("MESH",
any(Assets::getAssetTypePathById(AssetType::Mesh, cache_currentPath, i)),
Assets::getAssetTypePathById(AssetType::Mesh, cache_currentPath, i));
UI::textCenter(Assets::getAssetNameById(AssetType::Mesh, cache_currentPath, i));
UI::nextColumn();
}
UI::endColumns();
}
return return_dir;
}

View File

@ -1,5 +1,5 @@
// Here we render the base folders
AssetType renderGenerics() {
AssetType renderRootAssets() {
AssetType selectedAssetType = AssetType::None;
if (drawFolder("Scripts")) selectedAssetType = AssetType::None;

View File

@ -389,6 +389,8 @@ namespace Assets { int getDirCount(AssetType, const string&in); }
namespace Assets { string getDirPathById(AssetType, const string&in, int); }
namespace Assets { string getDirNameById(AssetType, const string&in, int); }
namespace Engine { void print(const string&in); }
namespace Engine { string getParentPath(const string&in); }
namespace Engine { string getParentPathName(const string&in); }
namespace UI { void treeNodeLeaf(const string&in, bool); }
namespace UI { bool treeNode(const string&in, bool, any@, ReciverFunc@); }
namespace UI { bool componentNode(const string&in, any@, ReciverFunc@); }
@ -792,6 +794,8 @@ namespace Assets { int getDirCount(AssetType, const string&in); }
namespace Assets { string getDirPathById(AssetType, const string&in, int); }
namespace Assets { string getDirNameById(AssetType, const string&in, int); }
namespace Engine { void print(const string&in); }
namespace Engine { string getParentPath(const string&in); }
namespace Engine { string getParentPathName(const string&in); }
namespace UI { void treeNodeLeaf(const string&in, bool); }
namespace UI { bool treeNode(const string&in, bool, any@, ReciverFunc@); }
namespace UI { bool componentNode(const string&in, any@, ReciverFunc@); }

View File

@ -389,6 +389,8 @@ namespace Assets { int getDirCount(AssetType, const string&in); }
namespace Assets { string getDirPathById(AssetType, const string&in, int); }
namespace Assets { string getDirNameById(AssetType, const string&in, int); }
namespace Engine { void print(const string&in); }
namespace Engine { string getParentPath(const string&in); }
namespace Engine { string getParentPathName(const string&in); }
namespace UI { void treeNodeLeaf(const string&in, bool); }
namespace UI { bool treeNode(const string&in, bool, any@, ReciverFunc@); }
namespace UI { bool componentNode(const string&in, any@, ReciverFunc@); }
@ -792,6 +794,8 @@ namespace Assets { int getDirCount(AssetType, const string&in); }
namespace Assets { string getDirPathById(AssetType, const string&in, int); }
namespace Assets { string getDirNameById(AssetType, const string&in, int); }
namespace Engine { void print(const string&in); }
namespace Engine { string getParentPath(const string&in); }
namespace Engine { string getParentPathName(const string&in); }
namespace UI { void treeNodeLeaf(const string&in, bool); }
namespace UI { bool treeNode(const string&in, bool, any@, ReciverFunc@); }
namespace UI { bool componentNode(const string&in, any@, ReciverFunc@); }

View File

@ -389,6 +389,8 @@ namespace Assets { int getDirCount(AssetType, const string&in); }
namespace Assets { string getDirPathById(AssetType, const string&in, int); }
namespace Assets { string getDirNameById(AssetType, const string&in, int); }
namespace Engine { void print(const string&in); }
namespace Engine { string getParentPath(const string&in); }
namespace Engine { string getParentPathName(const string&in); }
namespace UI { void treeNodeLeaf(const string&in, bool); }
namespace UI { bool treeNode(const string&in, bool, any@, ReciverFunc@); }
namespace UI { bool componentNode(const string&in, any@, ReciverFunc@); }
@ -792,6 +794,8 @@ namespace Assets { int getDirCount(AssetType, const string&in); }
namespace Assets { string getDirPathById(AssetType, const string&in, int); }
namespace Assets { string getDirNameById(AssetType, const string&in, int); }
namespace Engine { void print(const string&in); }
namespace Engine { string getParentPath(const string&in); }
namespace Engine { string getParentPathName(const string&in); }
namespace UI { void treeNodeLeaf(const string&in, bool); }
namespace UI { bool treeNode(const string&in, bool, any@, ReciverFunc@); }
namespace UI { bool componentNode(const string&in, any@, ReciverFunc@); }

View File

@ -389,6 +389,8 @@ namespace Assets { int getDirCount(AssetType, const string&in); }
namespace Assets { string getDirPathById(AssetType, const string&in, int); }
namespace Assets { string getDirNameById(AssetType, const string&in, int); }
namespace Engine { void print(const string&in); }
namespace Engine { string getParentPath(const string&in); }
namespace Engine { string getParentPathName(const string&in); }
namespace UI { void treeNodeLeaf(const string&in, bool); }
namespace UI { bool treeNode(const string&in, bool, any@, ReciverFunc@); }
namespace UI { bool componentNode(const string&in, any@, ReciverFunc@); }
@ -792,6 +794,8 @@ namespace Assets { int getDirCount(AssetType, const string&in); }
namespace Assets { string getDirPathById(AssetType, const string&in, int); }
namespace Assets { string getDirNameById(AssetType, const string&in, int); }
namespace Engine { void print(const string&in); }
namespace Engine { string getParentPath(const string&in); }
namespace Engine { string getParentPathName(const string&in); }
namespace UI { void treeNodeLeaf(const string&in, bool); }
namespace UI { bool treeNode(const string&in, bool, any@, ReciverFunc@); }
namespace UI { bool componentNode(const string&in, any@, ReciverFunc@); }

View File

@ -389,6 +389,8 @@ namespace Assets { int getDirCount(AssetType, const string&in); }
namespace Assets { string getDirPathById(AssetType, const string&in, int); }
namespace Assets { string getDirNameById(AssetType, const string&in, int); }
namespace Engine { void print(const string&in); }
namespace Engine { string getParentPath(const string&in); }
namespace Engine { string getParentPathName(const string&in); }
namespace UI { void treeNodeLeaf(const string&in, bool); }
namespace UI { bool treeNode(const string&in, bool, any@, ReciverFunc@); }
namespace UI { bool componentNode(const string&in, any@, ReciverFunc@); }