Working on tree pannel implementation in angelscript
This commit is contained in:
parent
a0e49a2690
commit
0ce75eeec8
@ -13,11 +13,11 @@
|
|||||||
#define DEER_VOXEL_ASPECT_PATH "voxels/aspect"
|
#define DEER_VOXEL_ASPECT_PATH "voxels/aspect"
|
||||||
#define DEER_VOXEL_TEXTURE_PATH "voxels/textures"
|
#define DEER_VOXEL_TEXTURE_PATH "voxels/textures"
|
||||||
#define DEER_VOXEL_SHADER_PATH "voxels/shaders"
|
#define DEER_VOXEL_SHADER_PATH "voxels/shaders"
|
||||||
#define DEER_DOCK_PANEL_PATH "editor"
|
#define DEER_EDITOR_PATH "editor"
|
||||||
#define DEER_UI_SCRIPT_PATH DEER_DOCK_PANEL_PATH
|
|
||||||
#define DEER_UI_ICON_PATH DEER_DOCK_PANEL_PATH
|
|
||||||
#define DEER_MESH_PATH "meshes"
|
#define DEER_MESH_PATH "meshes"
|
||||||
|
|
||||||
|
#define DEER_MESH_EXTENSION ".dmesh"
|
||||||
|
|
||||||
#define DEER_BIN_PATH "bin"
|
#define DEER_BIN_PATH "bin"
|
||||||
#define DEER_TEMP_PATH "tmp"
|
#define DEER_TEMP_PATH "tmp"
|
||||||
#define DEER_NULL_PATH "null"
|
#define DEER_NULL_PATH "null"
|
||||||
|
@ -13,14 +13,14 @@ namespace Deer {
|
|||||||
Core::argv = argv;
|
Core::argv = argv;
|
||||||
|
|
||||||
Log::init();
|
Log::init();
|
||||||
DEER_CORE_TRACE("Initializing");
|
DEER_CORE_INFO("Initializing");
|
||||||
|
|
||||||
Application* app = createApplication(argc, argv);
|
Application* app = createApplication(argc, argv);
|
||||||
|
|
||||||
int runResult = app->run();
|
int runResult = app->run();
|
||||||
delete app;
|
delete app;
|
||||||
|
|
||||||
DEER_CORE_TRACE("Deinitializing");
|
DEER_CORE_INFO("Deinitializing");
|
||||||
Log::shutdown();
|
Log::shutdown();
|
||||||
|
|
||||||
return runResult;
|
return runResult;
|
||||||
|
@ -26,15 +26,15 @@ namespace Deer {
|
|||||||
static inline Ref<spdlog::logger>& getScriptLogger() {
|
static inline Ref<spdlog::logger>& getScriptLogger() {
|
||||||
return scriptLogger;
|
return scriptLogger;
|
||||||
}
|
}
|
||||||
static inline Ref<spdlog::logger>& getUiEngineLogger() {
|
static inline Ref<spdlog::logger>& getEditorEngineLogger() {
|
||||||
return uiEngineLogger;
|
return EditorEngineLogger;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static Ref<spdlog::logger> coreLogger;
|
static Ref<spdlog::logger> coreLogger;
|
||||||
static Ref<spdlog::logger> clientLogger;
|
static Ref<spdlog::logger> clientLogger;
|
||||||
static Ref<spdlog::logger> scriptLogger;
|
static Ref<spdlog::logger> scriptLogger;
|
||||||
static Ref<spdlog::logger> uiEngineLogger;
|
static Ref<spdlog::logger> EditorEngineLogger;
|
||||||
};
|
};
|
||||||
} // namespace Deer
|
} // namespace Deer
|
||||||
|
|
||||||
@ -49,10 +49,10 @@ namespace Deer {
|
|||||||
#define DEER_SCRIPT_ERROR(...) Deer::Log::getScriptLogger()->error(__VA_ARGS__)
|
#define DEER_SCRIPT_ERROR(...) Deer::Log::getScriptLogger()->error(__VA_ARGS__)
|
||||||
|
|
||||||
|
|
||||||
#define DEER_UI_ENGINE_TRACE(...) Deer::Log::getUiEngineLogger()->trace(__VA_ARGS__)
|
#define DEER_UI_ENGINE_TRACE(...) Deer::Log::getEditorEngineLogger()->trace(__VA_ARGS__)
|
||||||
#define DEER_UI_ENGINE_INFO(...) Deer::Log::getUiEngineLogger()->info(__VA_ARGS__)
|
#define DEER_UI_ENGINE_INFO(...) Deer::Log::getEditorEngineLogger()->info(__VA_ARGS__)
|
||||||
#define DEER_UI_ENGINE_WARN(...) Deer::Log::getUiEngineLogger()->warn(__VA_ARGS__)
|
#define DEER_UI_ENGINE_WARN(...) Deer::Log::getEditorEngineLogger()->warn(__VA_ARGS__)
|
||||||
#define DEER_UI_ENGINE_ERROR(...) Deer::Log::getUiEngineLogger()->error(__VA_ARGS__)
|
#define DEER_UI_ENGINE_ERROR(...) Deer::Log::getEditorEngineLogger()->error(__VA_ARGS__)
|
||||||
|
|
||||||
#ifdef LINUX
|
#ifdef LINUX
|
||||||
#define DEER_CORE_ASSERT(condition, ...) \
|
#define DEER_CORE_ASSERT(condition, ...) \
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace Deer {
|
|
||||||
// This namespace implements all interface ported from c++ ImGui to an easier lua aproach with simplifications
|
|
||||||
namespace UIEngine {
|
|
||||||
void initialize();
|
|
||||||
void deinitialize();
|
|
||||||
|
|
||||||
void execute();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace DataStore {
|
|
||||||
int getIconId(const std::string& name);
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,7 +4,7 @@ namespace Deer {
|
|||||||
std::shared_ptr<spdlog::logger> Log::coreLogger;
|
std::shared_ptr<spdlog::logger> Log::coreLogger;
|
||||||
std::shared_ptr<spdlog::logger> Log::clientLogger;
|
std::shared_ptr<spdlog::logger> Log::clientLogger;
|
||||||
std::shared_ptr<spdlog::logger> Log::scriptLogger;
|
std::shared_ptr<spdlog::logger> Log::scriptLogger;
|
||||||
std::shared_ptr<spdlog::logger> Log::uiEngineLogger;
|
std::shared_ptr<spdlog::logger> Log::EditorEngineLogger;
|
||||||
|
|
||||||
void Log::init()
|
void Log::init()
|
||||||
{
|
{
|
||||||
@ -13,19 +13,19 @@ namespace Deer {
|
|||||||
coreLogger = spdlog::stdout_color_mt("Core");
|
coreLogger = spdlog::stdout_color_mt("Core");
|
||||||
clientLogger = spdlog::stdout_color_mt("Client");
|
clientLogger = spdlog::stdout_color_mt("Client");
|
||||||
scriptLogger = spdlog::stdout_color_mt("Script");
|
scriptLogger = spdlog::stdout_color_mt("Script");
|
||||||
uiEngineLogger = spdlog::stdout_color_mt("UI Engine");
|
EditorEngineLogger = spdlog::stdout_color_mt("UI Engine");
|
||||||
|
|
||||||
coreLogger->set_level(spdlog::level::level_enum::trace);
|
coreLogger->set_level(spdlog::level::level_enum::trace);
|
||||||
clientLogger->set_level(spdlog::level::level_enum::trace);
|
clientLogger->set_level(spdlog::level::level_enum::trace);
|
||||||
scriptLogger->set_level(spdlog::level::level_enum::trace);
|
scriptLogger->set_level(spdlog::level::level_enum::trace);
|
||||||
uiEngineLogger->set_level(spdlog::level::level_enum::trace);
|
EditorEngineLogger->set_level(spdlog::level::level_enum::trace);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Log::shutdown() {
|
void Log::shutdown() {
|
||||||
coreLogger.reset();
|
coreLogger.reset();
|
||||||
clientLogger.reset();
|
clientLogger.reset();
|
||||||
scriptLogger.reset();
|
scriptLogger.reset();
|
||||||
uiEngineLogger.reset();
|
EditorEngineLogger.reset();
|
||||||
|
|
||||||
spdlog::drop_all();
|
spdlog::drop_all();
|
||||||
}
|
}
|
||||||
|
@ -28,12 +28,9 @@ namespace Deer {
|
|||||||
return dirData_cache[dirId];
|
return dirData_cache[dirId];
|
||||||
}
|
}
|
||||||
|
|
||||||
Path idPath = rootPath;
|
Path idPath = rootPath / id;
|
||||||
if (id != "")
|
|
||||||
idPath /= id;
|
Path searchPath = idPath / subDir;
|
||||||
Path searchPath = idPath;
|
|
||||||
if (subDir != "")
|
|
||||||
searchPath /= subDir;
|
|
||||||
|
|
||||||
DirectoryData& dirData = dirData_cache[dirId];
|
DirectoryData& dirData = dirData_cache[dirId];
|
||||||
for (const auto& entry : std::filesystem::directory_iterator(searchPath)) {
|
for (const auto& entry : std::filesystem::directory_iterator(searchPath)) {
|
||||||
|
@ -129,7 +129,7 @@ namespace Deer {
|
|||||||
moduleName);
|
moduleName);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DEER_CORE_INFO("=== Loading Scripts ===");
|
DEER_CORE_TRACE("Loading Scripts ");
|
||||||
for (const auto& entry :
|
for (const auto& entry :
|
||||||
fs::recursive_directory_iterator(modulePath)) {
|
fs::recursive_directory_iterator(modulePath)) {
|
||||||
if (fs::is_regular_file(entry) &&
|
if (fs::is_regular_file(entry) &&
|
||||||
@ -141,8 +141,8 @@ namespace Deer {
|
|||||||
"script and try again. {0}",
|
"script and try again. {0}",
|
||||||
entry.path().generic_string().c_str());
|
entry.path().generic_string().c_str());
|
||||||
|
|
||||||
DEER_CORE_TRACE(" {0}",
|
//DEER_CORE_TRACE(" {0}",
|
||||||
entry.path().filename().string().c_str());
|
// entry.path().filename().string().c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (const fs::filesystem_error& e) {
|
} catch (const fs::filesystem_error& e) {
|
||||||
|
@ -34,8 +34,8 @@ namespace Deer {
|
|||||||
std::vector<Path> voxelsData;
|
std::vector<Path> voxelsData;
|
||||||
voxelsData = DataStore::getFiles(DEER_VOXEL_DATA_PATH, ".voxel");
|
voxelsData = DataStore::getFiles(DEER_VOXEL_DATA_PATH, ".voxel");
|
||||||
|
|
||||||
DEER_CORE_INFO("=== Loading voxels ===");
|
DEER_CORE_TRACE("Loading voxels");
|
||||||
DEER_CORE_TRACE(" default - air");
|
//DEER_CORE_TRACE(" default - air");
|
||||||
for (Path& voxel : voxelsData) {
|
for (Path& voxel : voxelsData) {
|
||||||
VoxelInfo voxelData;
|
VoxelInfo voxelData;
|
||||||
|
|
||||||
@ -61,9 +61,9 @@ namespace Deer {
|
|||||||
voxelData.name.c_str());
|
voxelData.name.c_str());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
DEER_CORE_TRACE(" {0} - {1}",
|
//DEER_CORE_TRACE(" {0} - {1}",
|
||||||
voxel.filename().generic_string().c_str(),
|
// voxel.filename().generic_string().c_str(),
|
||||||
voxelData.name);
|
// voxelData.name);
|
||||||
|
|
||||||
uint32_t id = voxelsInfo.size();
|
uint32_t id = voxelsInfo.size();
|
||||||
|
|
||||||
|
@ -1,131 +0,0 @@
|
|||||||
#include "DeerRender/UIEngine/UIEngine_Functions.h"
|
|
||||||
#include "DeerRender/UIEngine/UIEngine.h"
|
|
||||||
#include "DeerRender/UIEngine.h"
|
|
||||||
#include "DeerRender/UIEngine/DockPanelObject.h"
|
|
||||||
#include "Deer/Log.h"
|
|
||||||
#include "Deer/DataStore.h"
|
|
||||||
|
|
||||||
#include "angelscript.h"
|
|
||||||
#include "imgui.h"
|
|
||||||
|
|
||||||
namespace Deer {
|
|
||||||
namespace UIEngine {
|
|
||||||
int getMeshCount(std::string& dir) {
|
|
||||||
return DataStore::getDirData(DEER_MESH_PATH, dir, ".dmesh").elements.size();
|
|
||||||
}
|
|
||||||
std::string getMeshPath(std::string& dir, int i) {
|
|
||||||
const DirectoryData& dirData = DataStore::getDirData(DEER_MESH_PATH, dir, ".dmesh");
|
|
||||||
if (i < 0 || i >= dirData.elements.size()){
|
|
||||||
DEER_UI_ENGINE_ERROR("Invalid id {0} calling getMeshPath(..), mas size {1}", i, dirData.dirs.size());
|
|
||||||
if (currentDockPanelExecution) {
|
|
||||||
currentDockPanelExecution->invalidate();
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return dirData.elements[i].string();
|
|
||||||
}
|
|
||||||
std::string getMeshName(std::string& dir, int i) {
|
|
||||||
const DirectoryData& dirData = DataStore::getDirData(DEER_MESH_PATH, dir, ".dmesh");
|
|
||||||
if (i < 0 || i >= dirData.elements.size()){
|
|
||||||
DEER_UI_ENGINE_ERROR("Invalid id {0} calling getMeshName(..), mas size {1}", i, dirData.dirs.size());
|
|
||||||
if (currentDockPanelExecution) {
|
|
||||||
currentDockPanelExecution->invalidate();
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return dirData.elements[i].stem().string();
|
|
||||||
}
|
|
||||||
|
|
||||||
int getMeshDirCount(std::string& dir) {
|
|
||||||
return DataStore::getDirData(DEER_MESH_PATH, dir, ".dmesh").dirs.size();
|
|
||||||
}
|
|
||||||
std::string getMeshDirPath(std::string& dir, int i) {
|
|
||||||
const DirectoryData& dirData = DataStore::getDirData(DEER_MESH_PATH, dir, ".dmesh");
|
|
||||||
if (i < 0 || i >= dirData.dirs.size()){
|
|
||||||
DEER_UI_ENGINE_ERROR("Invalid id {0} calling getMeshDirPath(..), mas size {1}", i, dirData.dirs.size());
|
|
||||||
if (currentDockPanelExecution) {
|
|
||||||
currentDockPanelExecution->invalidate();
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return dirData.dirs[i].string();
|
|
||||||
}
|
|
||||||
std::string getMeshDirName(std::string& dir, int i) {
|
|
||||||
const DirectoryData& dirData = DataStore::getDirData(DEER_MESH_PATH, dir, ".dmesh");
|
|
||||||
if (i < 0 || i >= dirData.dirs.size()){
|
|
||||||
DEER_UI_ENGINE_ERROR("Invalid id {0} calling getMeshDirName(..), mas size {1}", i, dirData.dirs.size());
|
|
||||||
if (currentDockPanelExecution) {
|
|
||||||
currentDockPanelExecution->invalidate();
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return dirData.dirs[i].filename().string();
|
|
||||||
}
|
|
||||||
|
|
||||||
void textColor(float r, float g, float b, std::string& msg) {
|
|
||||||
ImGui::TextColored(ImVec4(r, g, b, 1.0f), "%s", msg.c_str());
|
|
||||||
}
|
|
||||||
void text(std::string& msg) {
|
|
||||||
ImGui::Text("%s", msg.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void drawIcon(std::string& name, int size) {
|
|
||||||
int iconId = DataStore::getIconId(name);
|
|
||||||
|
|
||||||
if (iconId < 0) {
|
|
||||||
DEER_UI_ENGINE_ERROR("Invalid icon name {0}", name.c_str());
|
|
||||||
if (currentDockPanelExecution) {
|
|
||||||
currentDockPanelExecution->invalidate();
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::Image((void*)(uint64_t)iconId,
|
|
||||||
ImVec2(size, size), ImVec2(0, 1),
|
|
||||||
ImVec2(1, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Interaction
|
|
||||||
bool isMouseClicked(int mouse) {
|
|
||||||
return ImGui::IsItemClicked(mouse);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool isMouseDoubleClicked(int mouse) {
|
|
||||||
return ImGui::IsMouseDoubleClicked(mouse);
|
|
||||||
}
|
|
||||||
|
|
||||||
void setupAutomaticColumns(int pixelSize) {
|
|
||||||
float width = ImGui::GetWindowContentRegionWidth();
|
|
||||||
|
|
||||||
if (width < pixelSize) {
|
|
||||||
ImGui::Columns();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int cols = (int)(width / (pixelSize));
|
|
||||||
float componentWidth = width / (float)cols;
|
|
||||||
|
|
||||||
ImGui::Columns(cols, 0, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void endColumns() {
|
|
||||||
ImGui::Columns();
|
|
||||||
}
|
|
||||||
|
|
||||||
void nextColumn() {
|
|
||||||
ImGui::NextColumn();
|
|
||||||
}
|
|
||||||
|
|
||||||
void errorCallback(const asSMessageInfo *msg, void *param) {
|
|
||||||
if (msg->type == asMSGTYPE_WARNING) {
|
|
||||||
DEER_UI_ENGINE_WARN("{0} : ({1}, {2}) : {3}", msg->section, msg->row, msg->col, msg->message);
|
|
||||||
} else if( msg->type == asMSGTYPE_INFORMATION ) {
|
|
||||||
DEER_UI_ENGINE_ERROR("{0} : ({1}, {2}) : {3}", msg->section, msg->row, msg->col, msg->message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void print(std::string& msg) {
|
|
||||||
DEER_UI_ENGINE_INFO("{0}", msg.c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include "DeerRender/UIEngine/Functions/UIEngine_TextFunctions.h"
|
|
||||||
#include "DeerRender/UIEngine/Functions/UIEngine_ColumnFunctions.h"
|
|
||||||
#include "DeerRender/UIEngine/Functions/UIEngine_ButtonFunctions.h"
|
|
||||||
#include "DeerRender/UIEngine/Functions/UIEngine_ButtonFunctions.h"
|
|
||||||
|
|
||||||
class asSMessageInfo;
|
|
||||||
namespace Deer {
|
|
||||||
namespace UIEngine {
|
|
||||||
// --- Mesh Data Store ---
|
|
||||||
|
|
||||||
// Returns the count of meshes in the dir relative to the mesh root dir
|
|
||||||
int getMeshCount(std::string& dir);
|
|
||||||
// Returns the path to the mesh with id i
|
|
||||||
std::string getMeshPath(std::string& dir, int i);
|
|
||||||
// Returns the name of the mesh with id i
|
|
||||||
std::string getMeshName(std::string& dir, int i);
|
|
||||||
|
|
||||||
// Returns the count of sub dirs in the dir relative to the mesh root dir
|
|
||||||
int getMeshDirCount(std::string& dir);
|
|
||||||
// Returns the path to the subDir in the dir relative to the mesh root dir
|
|
||||||
std::string getMeshDirPath(std::string& dir, int i);
|
|
||||||
// Returns the name of the subDir in the dir relative to the mesh root dir
|
|
||||||
std::string getMeshDirName(std::string& dir, int i);
|
|
||||||
|
|
||||||
// --- RENDERING ---
|
|
||||||
|
|
||||||
// TEXT
|
|
||||||
// Images
|
|
||||||
// TODO: Implement
|
|
||||||
void drawIcon(std::string& iconId, int size);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void errorCallback(const asSMessageInfo *msg, void *param);
|
|
||||||
// Prints in console a mesage
|
|
||||||
void print(std::string& msg);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,128 +0,0 @@
|
|||||||
#include "DeerRender/UIEngine/UIEngine_Functions.h"
|
|
||||||
#include "DeerRender/UIEngine/UIEngine.h"
|
|
||||||
#include "DeerRender/UIEngine/UIEngine_ErrorHandle.h"
|
|
||||||
|
|
||||||
namespace Deer {
|
|
||||||
void UIEngine::registerUIEngineFunctions() {
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"void textColor(float, float, float, const string& in)",
|
|
||||||
asFUNCTION(
|
|
||||||
Deer::UIEngine::textColor
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"void text(const string& in)",
|
|
||||||
asFUNCTION(
|
|
||||||
text
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"void drawIcon(const string& in, int)",
|
|
||||||
asFUNCTION(
|
|
||||||
Deer::UIEngine::drawIcon
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"bool isMouseClicked(int)",
|
|
||||||
asFUNCTION(
|
|
||||||
isMouseClicked
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"bool isMouseDoubleClicked(int)",
|
|
||||||
asFUNCTION(
|
|
||||||
isMouseDoubleClicked
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"void setupAutomaticColumns(int)",
|
|
||||||
asFUNCTION(
|
|
||||||
setupAutomaticColumns
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"void endColumns()",
|
|
||||||
asFUNCTION(
|
|
||||||
endColumns
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"void nextColumn()",
|
|
||||||
asFUNCTION(
|
|
||||||
nextColumn
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"void print(const string& in)",
|
|
||||||
asFUNCTION (
|
|
||||||
Deer::UIEngine::print
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"int getMeshCount(const string& in)",
|
|
||||||
asFUNCTION(
|
|
||||||
Deer::UIEngine::getMeshCount
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"string getMeshPath(const string& in, int)",
|
|
||||||
asFUNCTION(
|
|
||||||
Deer::UIEngine::getMeshPath
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"string getMeshName(const string& in, int)",
|
|
||||||
asFUNCTION(
|
|
||||||
Deer::UIEngine::getMeshName
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
|
|
||||||
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"int getMeshDirCount(const string& in)",
|
|
||||||
asFUNCTION(
|
|
||||||
Deer::UIEngine::getMeshDirCount
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"string getMeshDirPath(const string& in, int)",
|
|
||||||
asFUNCTION(
|
|
||||||
Deer::UIEngine::getMeshDirPath
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
|
|
||||||
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
|
||||||
"string getMeshDirName(const string& in, int)",
|
|
||||||
asFUNCTION(
|
|
||||||
Deer::UIEngine::getMeshDirName
|
|
||||||
),
|
|
||||||
asCALL_CDECL
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
@ -25,8 +25,8 @@ namespace Deer {
|
|||||||
|
|
||||||
voxelsAspect[0].definition.voxelName = VOXEL_INFO_TYPE_AIR;
|
voxelsAspect[0].definition.voxelName = VOXEL_INFO_TYPE_AIR;
|
||||||
|
|
||||||
DEER_CORE_INFO("=== Loading voxel aspect ===");
|
DEER_CORE_TRACE("Loading voxel aspect ");
|
||||||
DEER_CORE_TRACE(" default - air");
|
//DEER_CORE_TRACE(" default - air");
|
||||||
for (Path& voxelAspectPath : voxelsAspectPath) {
|
for (Path& voxelAspectPath : voxelsAspectPath) {
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
uint8_t* data = DataStore::readFile(voxelAspectPath, &size);
|
uint8_t* data = DataStore::readFile(voxelAspectPath, &size);
|
||||||
@ -56,14 +56,14 @@ namespace Deer {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEER_CORE_TRACE(" {0} - {1}",
|
//DEER_CORE_TRACE(" {0} - {1}",
|
||||||
voxelAspectPath.filename().generic_string().c_str(),
|
// voxelAspectPath.filename().generic_string().c_str(),
|
||||||
aspectDefinition.voxelName.c_str());
|
// aspectDefinition.voxelName.c_str());
|
||||||
|
|
||||||
voxelsAspect[voxelID].definition = aspectDefinition;
|
voxelsAspect[voxelID].definition = aspectDefinition;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEER_CORE_INFO("=== Extracting textures ===");
|
DEER_CORE_TRACE("Extracting textures ");
|
||||||
for (VoxelAspect& voxelAspect : voxelsAspect) {
|
for (VoxelAspect& voxelAspect : voxelsAspect) {
|
||||||
if (voxelsInfo[DataStore::getVoxelID(
|
if (voxelsInfo[DataStore::getVoxelID(
|
||||||
voxelAspect.definition.voxelName)]
|
voxelAspect.definition.voxelName)]
|
||||||
@ -93,8 +93,8 @@ namespace Deer {
|
|||||||
texturesIDs[faceTextureString] = textureID;
|
texturesIDs[faceTextureString] = textureID;
|
||||||
voxelAspect.textureFacesIDs[i] = textureID;
|
voxelAspect.textureFacesIDs[i] = textureID;
|
||||||
|
|
||||||
DEER_CORE_TRACE(" texture {0} - id: {1}",
|
//DEER_CORE_TRACE(" texture {0} - id: {1}",
|
||||||
faceTextureString.c_str(), textureID);
|
// faceTextureString.c_str(), textureID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,15 +36,15 @@ namespace Deer {
|
|||||||
stbi_set_flip_vertically_on_load(true);
|
stbi_set_flip_vertically_on_load(true);
|
||||||
stbi_flip_vertically_on_write(true);
|
stbi_flip_vertically_on_write(true);
|
||||||
|
|
||||||
DEER_CORE_INFO("=== Creating Texture Atlas ===");
|
DEER_CORE_TRACE("Creating Texture Atlas ");
|
||||||
for (auto& texture : texturesIDs) {
|
for (auto& texture : texturesIDs) {
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
uint8_t* fileData = DataStore::readFile(
|
uint8_t* fileData = DataStore::readFile(
|
||||||
Path(DEER_VOXEL_TEXTURE_PATH) / (texture.first + ".png"),
|
Path(DEER_VOXEL_TEXTURE_PATH) / (texture.first + ".png"),
|
||||||
&size);
|
&size);
|
||||||
|
|
||||||
DEER_CORE_TRACE(" {0}.png - {1}", texture.first.c_str(),
|
//DEER_CORE_TRACE(" {0}.png - {1}", texture.first.c_str(),
|
||||||
texture.second);
|
// texture.second);
|
||||||
if (fileData == nullptr) {
|
if (fileData == nullptr) {
|
||||||
DEER_CORE_ERROR("{0}.png does not exists",
|
DEER_CORE_ERROR("{0}.png does not exists",
|
||||||
texture.first.c_str());
|
texture.first.c_str());
|
||||||
|
@ -16,7 +16,6 @@ namespace Deer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
DEER_CORE_TRACE("OpenGL driver: {0}", (char*)glGetString(GL_VENDOR));
|
DEER_CORE_TRACE("OpenGL driver: {0}", (char*)glGetString(GL_VENDOR));
|
||||||
DEER_CORE_TRACE("Initialized glad");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenGLContext::swapBuffers() {
|
void OpenGLContext::swapBuffers() {
|
||||||
|
@ -210,7 +210,7 @@ namespace Deer {
|
|||||||
// Either of them. Don't leak shaders.
|
// Either of them. Don't leak shaders.
|
||||||
glDeleteShader(vertexShader);
|
glDeleteShader(vertexShader);
|
||||||
|
|
||||||
DEER_CORE_INFO(source);
|
DEER_CORE_TRACE(source);
|
||||||
|
|
||||||
// Use the infoLog as you see fit.
|
// Use the infoLog as you see fit.
|
||||||
DEER_CORE_ERROR("Error compiling fragment shader. \n{0}", infoLog);
|
DEER_CORE_ERROR("Error compiling fragment shader. \n{0}", infoLog);
|
||||||
|
@ -17,7 +17,8 @@ project "DeerStudio"
|
|||||||
"../Deer/vendor/imgui",
|
"../Deer/vendor/imgui",
|
||||||
"../Deer/vendor/glm",
|
"../Deer/vendor/glm",
|
||||||
"../Deer/vendor/ImGuizmo",
|
"../Deer/vendor/ImGuizmo",
|
||||||
"../Deer/vendor/entt/include"
|
"../Deer/vendor/entt/include",
|
||||||
|
"../Deer/vendor/angelScript/include"
|
||||||
}
|
}
|
||||||
|
|
||||||
links
|
links
|
||||||
|
@ -8,12 +8,11 @@
|
|||||||
#include "Deer/Voxel.h"
|
#include "Deer/Voxel.h"
|
||||||
#include "Deer/VoxelWorld.h"
|
#include "Deer/VoxelWorld.h"
|
||||||
#include "DeerRender/Mesh.h"
|
#include "DeerRender/Mesh.h"
|
||||||
#include "DeerRender/UIEngine.h"
|
#include "DeerStudio/EditorEngine.h"
|
||||||
|
|
||||||
#include "DeerStudio/Editor/Fonts.h"
|
#include "DeerStudio/Editor/Fonts.h"
|
||||||
#include "DeerStudio/Editor/GamePanel.h"
|
#include "DeerStudio/Editor/GamePanel.h"
|
||||||
#include "DeerStudio/Editor/Icons.h"
|
#include "DeerStudio/Editor/Icons.h"
|
||||||
#include "DeerStudio/Editor/MeshExplorer/MeshExplorer.h"
|
|
||||||
#include "DeerStudio/Editor/PropertiesPanel.h"
|
#include "DeerStudio/Editor/PropertiesPanel.h"
|
||||||
#include "DeerStudio/Editor/SceneExplorer.h"
|
#include "DeerStudio/Editor/SceneExplorer.h"
|
||||||
#include "DeerStudio/Editor/Terrain/TerrainEditor.h"
|
#include "DeerStudio/Editor/Terrain/TerrainEditor.h"
|
||||||
@ -31,7 +30,7 @@ namespace Deer {
|
|||||||
DataStore::loadVoxelsData();
|
DataStore::loadVoxelsData();
|
||||||
DataStore::loadVoxelsAspect();
|
DataStore::loadVoxelsAspect();
|
||||||
|
|
||||||
UIEngine::initialize();
|
EditorEngine::initialize();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +77,7 @@ namespace Deer {
|
|||||||
|
|
||||||
ScriptEngine::shutdownScriptEngine();
|
ScriptEngine::shutdownScriptEngine();
|
||||||
Panels.clear();
|
Panels.clear();
|
||||||
UIEngine::deinitialize();
|
EditorEngine::deinitialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeerStudioApplication::onRender(Timestep delta) {
|
void DeerStudioApplication::onRender(Timestep delta) {
|
||||||
@ -145,11 +144,9 @@ namespace Deer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---- PanelS -----
|
// ---- PanelS -----
|
||||||
// sceneExplorer_onImGUI();
|
EditorEngine::execute();
|
||||||
UIEngine::execute();
|
|
||||||
TreePanel::onImgui();
|
TreePanel::onImgui();
|
||||||
PropertiesPanel::onImgui();
|
PropertiesPanel::onImgui();
|
||||||
MeshExplorer::onImGui();
|
|
||||||
TerrainEditor::onImGui();
|
TerrainEditor::onImGui();
|
||||||
viewport_onImGui();
|
viewport_onImGui();
|
||||||
// ---- PanelS -----
|
// ---- PanelS -----
|
||||||
@ -228,7 +225,7 @@ namespace Deer {
|
|||||||
|
|
||||||
if (ImGui::BeginMenu("Interface")) {
|
if (ImGui::BeginMenu("Interface")) {
|
||||||
if (ImGui::MenuItem("Reload interface")) {
|
if (ImGui::MenuItem("Reload interface")) {
|
||||||
UIEngine::initialize();
|
EditorEngine::initialize();
|
||||||
}
|
}
|
||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,14 @@
|
|||||||
#include "DeerStudio/Editor/ActiveEntity.h"
|
#include "DeerStudio/Editor/ActiveEntity.h"
|
||||||
#include "DeerStudio/Editor/EditorPanel.h"
|
#include "DeerStudio/Editor/EditorPanel.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class asIScriptEngine;
|
||||||
|
class asIScriptObject;
|
||||||
|
class asIScriptModule;
|
||||||
|
class asIScriptContext;
|
||||||
|
|
||||||
|
|
||||||
namespace Deer {
|
namespace Deer {
|
||||||
class DeerStudioApplication : public Deer::Application {
|
class DeerStudioApplication : public Deer::Application {
|
||||||
public:
|
public:
|
||||||
|
@ -1,73 +0,0 @@
|
|||||||
#include "MeshExplorer.h"
|
|
||||||
|
|
||||||
#include "Deer/DataStore.h"
|
|
||||||
#include "Deer/Path.h"
|
|
||||||
#include "DeerStudio/Editor/EditorUtils.h"
|
|
||||||
#include "DeerStudio/Editor/Icons.h"
|
|
||||||
#include "imgui.h"
|
|
||||||
|
|
||||||
namespace Deer {
|
|
||||||
namespace MeshExplorer {
|
|
||||||
Path m_meshExplorerPath(DEER_NULL_PATH);
|
|
||||||
void drawFolder(const Path& path);
|
|
||||||
} // namespace MeshExplorer
|
|
||||||
|
|
||||||
void MeshExplorer::onImGui() {
|
|
||||||
if (m_meshExplorerPath == DEER_NULL_PATH) {
|
|
||||||
DataStore::createFolder(DataStore::rootPath / DEER_MESH_PATH);
|
|
||||||
m_meshExplorerPath = DEER_MESH_PATH;
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::Begin("Mesh Explorer", (bool*)0); // ImGuiWindowFlags_MenuBar
|
|
||||||
|
|
||||||
ImGui::TextColored(ImVec4(0.5f, 0.5f, 0.5f, 1.0f), "%s",
|
|
||||||
m_meshExplorerPath.generic_string().c_str());
|
|
||||||
|
|
||||||
setupColumns(ICON_MIN_SIZE + 80);
|
|
||||||
|
|
||||||
if (m_meshExplorerPath != DEER_MESH_PATH) {
|
|
||||||
drawFolder("..");
|
|
||||||
|
|
||||||
float cursorOffset =
|
|
||||||
(ICON_MIN_SIZE - ImGui::CalcTextSize("..").x) / 2;
|
|
||||||
ImGui::SetCursorPos(ImVec2(cursorOffset + ImGui::GetCursorPos().x,
|
|
||||||
ImGui::GetCursorPos().y));
|
|
||||||
ImGui::Text("..");
|
|
||||||
|
|
||||||
ImGui::NextColumn();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const auto& entry : std::filesystem::directory_iterator(
|
|
||||||
DataStore::rootPath / m_meshExplorerPath)) {
|
|
||||||
if (entry.is_directory())
|
|
||||||
drawFolder(entry.path());
|
|
||||||
else {
|
|
||||||
}
|
|
||||||
|
|
||||||
float cursorOffset =
|
|
||||||
(ICON_MIN_SIZE -
|
|
||||||
ImGui::CalcTextSize(entry.path().stem().string().c_str()).x) /
|
|
||||||
2;
|
|
||||||
ImGui::SetCursorPos(ImVec2(cursorOffset + ImGui::GetCursorPos().x,
|
|
||||||
ImGui::GetCursorPos().y));
|
|
||||||
ImGui::Text("%s", entry.path().stem().string().c_str());
|
|
||||||
|
|
||||||
ImGui::NextColumn();
|
|
||||||
}
|
|
||||||
ImGui::Columns();
|
|
||||||
ImGui::End();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MeshExplorer::drawFolder(const Path& path) {
|
|
||||||
ImGui::Image((void*)(uint64_t)Icons::folder_icon->getTextureID(),
|
|
||||||
ImVec2(ICON_MIN_SIZE, ICON_MIN_SIZE), ImVec2(0, 1),
|
|
||||||
ImVec2(1, 0));
|
|
||||||
|
|
||||||
if (ImGui::IsItemClicked(0) && ImGui::IsMouseDoubleClicked(0)) {
|
|
||||||
if (path == "..")
|
|
||||||
m_meshExplorerPath = m_meshExplorerPath.parent_path();
|
|
||||||
else
|
|
||||||
m_meshExplorerPath = path;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // namespace Deer
|
|
@ -1,7 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
namespace Deer {
|
|
||||||
namespace MeshExplorer {
|
|
||||||
void onImGui();
|
|
||||||
}
|
|
||||||
} // namespace Deer
|
|
@ -1,15 +1,21 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
class asIScriptEngine;
|
class asIScriptEngine;
|
||||||
class asIScriptObject;
|
|
||||||
class asIScriptModule;
|
class asIScriptModule;
|
||||||
class asIScriptContext;
|
class asIScriptContext;
|
||||||
|
|
||||||
namespace Deer {
|
namespace Deer {
|
||||||
namespace UIEngine {
|
// This namespace implements all interface ported from c++ ImGui to an easier lua aproach with simplifications
|
||||||
|
namespace EditorEngine {
|
||||||
struct DockPanelObject;
|
struct DockPanelObject;
|
||||||
|
|
||||||
|
void initialize();
|
||||||
|
void deinitialize();
|
||||||
|
|
||||||
|
void execute();
|
||||||
|
|
||||||
extern asIScriptEngine* scriptEngine;
|
extern asIScriptEngine* scriptEngine;
|
||||||
extern asIScriptModule* scriptModule;
|
extern asIScriptModule* scriptModule;
|
||||||
extern asIScriptContext* scriptContext;
|
extern asIScriptContext* scriptContext;
|
||||||
@ -17,8 +23,13 @@ namespace Deer {
|
|||||||
extern DockPanelObject* currentDockPanelExecution;
|
extern DockPanelObject* currentDockPanelExecution;
|
||||||
|
|
||||||
void loadScripts();
|
void loadScripts();
|
||||||
void registerUIEngineFunctions();
|
void registerEditorEngineFunctions();
|
||||||
|
void registerEditorEngineStructs();
|
||||||
void registerDockPanel();
|
void registerDockPanel();
|
||||||
void extractDockPanels();
|
void extractDockPanels();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace DataStore {
|
||||||
|
int getIconId(const std::string& name);
|
||||||
|
}
|
||||||
}
|
}
|
@ -2,7 +2,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace Deer {
|
namespace Deer {
|
||||||
namespace UIEngine {
|
namespace EditorEngine {
|
||||||
// TO IMPLEMENT
|
// TO IMPLEMENT
|
||||||
bool button(std::string&);
|
bool button(std::string&);
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
namespace Deer {
|
namespace Deer {
|
||||||
namespace UIEngine {
|
namespace EditorEngine {
|
||||||
// Set up the colums to fit the pixelSize elements
|
// Set up the colums to fit the pixelSize elements
|
||||||
void setupAutomaticColumns(int pixelSize);
|
void setupAutomaticColumns(int pixelSize);
|
||||||
// Iterates to the next column
|
// Iterates to the next column
|
@ -0,0 +1,30 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
enum ResourceType : uint32_t {
|
||||||
|
NOTHING = 0,
|
||||||
|
MESH = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
// Returns the count of meshes in the dir relative to the mesh root dir
|
||||||
|
int getResourceCount(ResourceType, std::string& dir);
|
||||||
|
// Returns the path to the mesh with id i
|
||||||
|
std::string getResourceNameById(ResourceType, std::string& dir, int i);
|
||||||
|
// Returns the name of the mesh with id i
|
||||||
|
std::string getResourcePathById(ResourceType, std::string& dir, int i);
|
||||||
|
|
||||||
|
// Returns the count of sub dirs in the dir relative to the mesh root dir
|
||||||
|
int getDirCount(ResourceType, std::string&);
|
||||||
|
// Returns the path to the subDir in the dir relative to the mesh root dir
|
||||||
|
std::string getDirPathById(ResourceType, std::string& dir, int i);
|
||||||
|
// Returns the name of the subDir in the dir relative to the mesh root dir
|
||||||
|
std::string getDirNameById(ResourceType, std::string& dir, int i);
|
||||||
|
|
||||||
|
const char* getResourcePath(ResourceType);
|
||||||
|
const char* getResourceExtension(ResourceType);
|
||||||
|
const char* getResourceName(ResourceType);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
struct EntityStruct {
|
||||||
|
uint16_t entityId;
|
||||||
|
};
|
||||||
|
|
||||||
|
EntityStruct getRoot();
|
||||||
|
|
||||||
|
int getChildCount(EntityStruct&);
|
||||||
|
EntityStruct getChild(EntityStruct&, int);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class asSMessageInfo;
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
void errorCallback(const asSMessageInfo *msg, void *param);
|
||||||
|
// Prints in console a mesage
|
||||||
|
void print(std::string& msg);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
void drawIcon(std::string& iconId, int size);
|
||||||
|
void drawIconCentered(std::string& iconId, int size);
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
namespace Deer {
|
namespace Deer {
|
||||||
namespace UIEngine {
|
namespace EditorEngine {
|
||||||
// Returns if the specified mouse button is clicked on the last element
|
// Returns if the specified mouse button is clicked on the last element
|
||||||
bool isMouseClicked(int mouse);
|
bool isMouseClicked(int mouse);
|
||||||
|
|
@ -0,0 +1,8 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
bool menuItem(std::string&);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -2,7 +2,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace Deer {
|
namespace Deer {
|
||||||
namespace UIEngine {
|
namespace EditorEngine {
|
||||||
|
|
||||||
// Renders a text with the defined rgb values from range [0.0, 1.0]
|
// Renders a text with the defined rgb values from range [0.0, 1.0]
|
||||||
void textColor(float r, float g, float b, std::string& msg);
|
void textColor(float r, float g, float b, std::string& msg);
|
||||||
@ -10,5 +10,8 @@ namespace Deer {
|
|||||||
// Renders a text
|
// Renders a text
|
||||||
void text(std::string& msg);
|
void text(std::string& msg);
|
||||||
|
|
||||||
|
// Renders a text
|
||||||
|
void textCentered(std::string& msg);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class asIScriptFunction;
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
void treeNode(std::string&);
|
||||||
|
void treeNode(std::string&, asIScriptFunction);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Button.h"
|
||||||
|
#include "imgui.h"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
bool button(std::string& txt) {
|
||||||
|
return ImGui::Button(txt.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Column.h"
|
||||||
|
#include "imgui.h"
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
void setupAutomaticColumns(int pixelSize) {
|
||||||
|
float width = ImGui::GetWindowContentRegionWidth();
|
||||||
|
|
||||||
|
if (width < pixelSize) {
|
||||||
|
ImGui::Columns();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cols = (int)(width / (pixelSize));
|
||||||
|
float componentWidth = width / (float)cols;
|
||||||
|
|
||||||
|
ImGui::Columns(cols, 0, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void endColumns() {
|
||||||
|
ImGui::Columns();
|
||||||
|
}
|
||||||
|
|
||||||
|
void nextColumn() {
|
||||||
|
ImGui::NextColumn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,195 @@
|
|||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Directory.h"
|
||||||
|
#include "DeerStudio/EditorEngine.h"
|
||||||
|
#include "Deer/DataStore.h"
|
||||||
|
#include "DeerStudio/EditorEngine/DockPanelObject.h"
|
||||||
|
#include "Deer/Log.h"
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
|
||||||
|
const char* getResourcePath(ResourceType resource) {
|
||||||
|
switch (resource)
|
||||||
|
{
|
||||||
|
case ResourceType::NOTHING:
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
case ResourceType::MESH :
|
||||||
|
return DEER_MESH_PATH;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* getResourceExtension(ResourceType resource) {
|
||||||
|
switch (resource)
|
||||||
|
{
|
||||||
|
case ResourceType::NOTHING:
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
case ResourceType::MESH :
|
||||||
|
return ".dmesh";
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* getResourceName(ResourceType resource) {
|
||||||
|
switch (resource)
|
||||||
|
{
|
||||||
|
case ResourceType::NOTHING:
|
||||||
|
return "???";
|
||||||
|
|
||||||
|
case ResourceType::MESH :
|
||||||
|
return "Mesh";
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getResourceCount(ResourceType type, std::string& dir) {
|
||||||
|
const char* resourcePath = getResourcePath(type);
|
||||||
|
const char* resourceExtension = getResourceExtension(type);
|
||||||
|
|
||||||
|
if (!resourcePath || !resourceExtension) {
|
||||||
|
DEER_UI_ENGINE_ERROR("Invalid resource type calling getResourceCount(..)");
|
||||||
|
if (currentDockPanelExecution) {
|
||||||
|
currentDockPanelExecution->invalidate();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return DataStore::getDirData(resourcePath, dir, resourceExtension).elements.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string getResourceNameById(ResourceType type, std::string& dir, int i) {
|
||||||
|
const char* resourcePath = getResourcePath(type);
|
||||||
|
const char* resourceExtension = getResourceExtension(type);
|
||||||
|
|
||||||
|
if (!resourcePath || !resourceExtension) {
|
||||||
|
DEER_UI_ENGINE_ERROR("Invalid resource type calling getResourceNameById(..)");
|
||||||
|
if (currentDockPanelExecution) {
|
||||||
|
currentDockPanelExecution->invalidate();
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
const DirectoryData& dirData = DataStore::getDirData(resourcePath, dir, resourceExtension);
|
||||||
|
if (i < 0 || i >= dirData.elements.size()) {
|
||||||
|
DEER_UI_ENGINE_ERROR("Invalid element id {3} calling getResourceNameById(..) for type {0} and path {1}, element count on that dir is {2}",
|
||||||
|
getResourceName(type),
|
||||||
|
dir.c_str(),
|
||||||
|
dirData.elements.size(),
|
||||||
|
i
|
||||||
|
);
|
||||||
|
|
||||||
|
if (currentDockPanelExecution)
|
||||||
|
currentDockPanelExecution->invalidate();
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
return dirData.elements[i].stem().string();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string getResourcePathById(ResourceType type, std::string& dir, int i) {
|
||||||
|
const char* resourcePath = getResourcePath(type);
|
||||||
|
const char* resourceExtension = getResourceExtension(type);
|
||||||
|
|
||||||
|
if (!resourcePath || !resourceExtension) {
|
||||||
|
DEER_UI_ENGINE_ERROR("Invalid resource type calling getResourcePathById(..)");
|
||||||
|
if (currentDockPanelExecution) {
|
||||||
|
currentDockPanelExecution->invalidate();
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
const DirectoryData& dirData = DataStore::getDirData(resourcePath, dir, resourceExtension);
|
||||||
|
if (i < 0 || i >= dirData.elements.size()) {
|
||||||
|
DEER_UI_ENGINE_ERROR("Invalid element id {3} calling getResourcePathById(..) for type {0} and path {1}, element count on that dir is {2}",
|
||||||
|
getResourceName(type),
|
||||||
|
dir.c_str(),
|
||||||
|
dirData.elements.size(),
|
||||||
|
i
|
||||||
|
);
|
||||||
|
|
||||||
|
if (currentDockPanelExecution)
|
||||||
|
currentDockPanelExecution->invalidate();
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
return dirData.elements[i].string();
|
||||||
|
}
|
||||||
|
|
||||||
|
int getDirCount(ResourceType type, std::string& dir) {
|
||||||
|
const char* resourcePath = getResourcePath(type);
|
||||||
|
const char* resourceExtension = getResourceExtension(type);
|
||||||
|
|
||||||
|
if (!resourcePath || !resourceExtension) {
|
||||||
|
DEER_UI_ENGINE_ERROR("Invalid resource type calling getDirCount(..)");
|
||||||
|
if (currentDockPanelExecution) {
|
||||||
|
currentDockPanelExecution->invalidate();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return DataStore::getDirData(resourcePath, dir, resourceExtension).dirs.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string getDirPathById(ResourceType type, std::string& dir, int i) {
|
||||||
|
const char* resourcePath = getResourcePath(type);
|
||||||
|
const char* resourceExtension = getResourceExtension(type);
|
||||||
|
|
||||||
|
if (!resourcePath || !resourceExtension) {
|
||||||
|
DEER_UI_ENGINE_ERROR("Invalid resource type calling getDirPathById(..)");
|
||||||
|
if (currentDockPanelExecution) {
|
||||||
|
currentDockPanelExecution->invalidate();
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
const DirectoryData& dirData = DataStore::getDirData(resourcePath, dir, resourceExtension);
|
||||||
|
if (i < 0 || i >= dirData.dirs.size()) {
|
||||||
|
DEER_UI_ENGINE_ERROR("Invalid element id {3} calling getDirPathById(..) for type {0} and path {1}, sub_dir count on that dir is {2}",
|
||||||
|
getResourceName(type),
|
||||||
|
dir.c_str(),
|
||||||
|
dirData.dirs.size(),
|
||||||
|
i)
|
||||||
|
;
|
||||||
|
|
||||||
|
if (currentDockPanelExecution)
|
||||||
|
currentDockPanelExecution->invalidate();
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
return dirData.dirs[i].string();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string getDirNameById(ResourceType type, std::string& dir, int i) {
|
||||||
|
const char* resourcePath = getResourcePath(type);
|
||||||
|
const char* resourceExtension = getResourceExtension(type);
|
||||||
|
|
||||||
|
if (!resourcePath || !resourceExtension) {
|
||||||
|
DEER_UI_ENGINE_ERROR("Invalid resource type calling getDirNameById(..)");
|
||||||
|
if (currentDockPanelExecution) {
|
||||||
|
currentDockPanelExecution->invalidate();
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
const DirectoryData& dirData = DataStore::getDirData(resourcePath, dir, resourceExtension);
|
||||||
|
if (i < 0 || i >= dirData.dirs.size()) {
|
||||||
|
DEER_UI_ENGINE_ERROR("Invalid element id {3} calling getDirPathById(..) for type {0} and path {1}, sub_dir count on that dir is {2}",
|
||||||
|
getResourceName(type),
|
||||||
|
dir.c_str(),
|
||||||
|
dirData.dirs.size(),
|
||||||
|
i
|
||||||
|
);
|
||||||
|
|
||||||
|
if (currentDockPanelExecution)
|
||||||
|
currentDockPanelExecution->invalidate();
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
return dirData.dirs[i].stem().string();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Environment.h"
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Functions.h"
|
||||||
|
#include "Deer/Log.h"
|
||||||
|
|
||||||
|
#include "angelscript.h"
|
||||||
|
#include "imgui.h"
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
|
||||||
|
void errorCallback(const asSMessageInfo *msg, void *param) {
|
||||||
|
if (msg->type == asMSGTYPE_WARNING) {
|
||||||
|
DEER_UI_ENGINE_WARN("{0}:{1}:{2}) : {3}", msg->section, msg->row, msg->col, msg->message);
|
||||||
|
} else if( msg->type == asMSGTYPE_INFORMATION ) {
|
||||||
|
DEER_UI_ENGINE_ERROR("{0}:{1}:{2}) : {3}", msg->section, msg->row, msg->col, msg->message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void print(std::string& msg) {
|
||||||
|
DEER_UI_ENGINE_INFO("{0}", msg.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Icon.h"
|
||||||
|
#include "DeerStudio/EditorEngine.h"
|
||||||
|
#include "DeerStudio/EditorEngine/DockPanelObject.h"
|
||||||
|
#include "Deer/Log.h"
|
||||||
|
#include "Deer/DataStore.h"
|
||||||
|
#include "imgui.h"
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
void drawIcon(std::string& name, int size) {
|
||||||
|
int iconId = DataStore::getIconId(name);
|
||||||
|
|
||||||
|
if (iconId < 0) {
|
||||||
|
DEER_UI_ENGINE_ERROR("Invalid icon name {0}", name.c_str());
|
||||||
|
if (currentDockPanelExecution) {
|
||||||
|
currentDockPanelExecution->invalidate();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::Image((void*)(uint64_t)iconId,
|
||||||
|
ImVec2(size, size), ImVec2(0, 1),
|
||||||
|
ImVec2(1, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawIconCentered(std::string& name, int size) {
|
||||||
|
int iconId = DataStore::getIconId(name);
|
||||||
|
if (iconId < 0) {
|
||||||
|
DEER_UI_ENGINE_ERROR("Invalid icon name {0}", name.c_str());
|
||||||
|
if (currentDockPanelExecution) {
|
||||||
|
currentDockPanelExecution->invalidate();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float sizeX;
|
||||||
|
if (ImGui::GetColumnsCount() > 1)
|
||||||
|
sizeX = ImGui::GetColumnWidth(-1);
|
||||||
|
else
|
||||||
|
sizeX = ImGui::GetContentRegionAvail().x;
|
||||||
|
|
||||||
|
float iconWidth = size;
|
||||||
|
float padding = (sizeX - iconWidth) * 0.5f;
|
||||||
|
|
||||||
|
if (padding > 0.0f)
|
||||||
|
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + padding);
|
||||||
|
|
||||||
|
drawIcon(name, size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Input.h"
|
||||||
|
#include "imgui.h"
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
bool isMouseClicked(int mouse) {
|
||||||
|
return ImGui::IsItemClicked(mouse);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isMouseDoubleClicked(int mouse) {
|
||||||
|
return ImGui::IsMouseDoubleClicked(mouse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_MenuBar.h"
|
||||||
|
#include "imgui.h"
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
bool menuItem(std::string& txt) {
|
||||||
|
return ImGui::MenuItem(txt.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Mesh.h"
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Text.h"
|
||||||
|
#include "imgui.h"
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
void textColor(float r, float g, float b, std::string& msg) {
|
||||||
|
ImGui::TextColored(ImVec4(r, g, b, 1.0f), "%s", msg.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void text(std::string& msg) {
|
||||||
|
ImGui::Text("%s", msg.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void textCentered(std::string& msg) {
|
||||||
|
float sizeX;
|
||||||
|
if (ImGui::GetColumnsCount() > 1)
|
||||||
|
sizeX = ImGui::GetColumnWidth(-1);
|
||||||
|
else
|
||||||
|
sizeX = ImGui::GetContentRegionAvail().x;
|
||||||
|
|
||||||
|
float textWidth = ImGui::CalcTextSize(msg.c_str(), nullptr, false).x;
|
||||||
|
float padding = (sizeX - textWidth) * 0.5f;
|
||||||
|
|
||||||
|
if (padding > 0.0f)
|
||||||
|
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + padding);
|
||||||
|
|
||||||
|
ImGui::Text("%s", msg.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_TreeNode.h"
|
||||||
|
#include "DeerStudio/EditorEngine.h"
|
||||||
|
#include "angelscript.h"
|
||||||
|
#include "imgui.h"
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
void treeNode(std::string& txt) {
|
||||||
|
ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Leaf |
|
||||||
|
ImGuiTreeNodeFlags_NoTreePushOnOpen |
|
||||||
|
ImGuiTreeNodeFlags_SpanFullWidth;
|
||||||
|
|
||||||
|
ImGui::TreeNodeEx((void*)0, flags, "%s", txt.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void treeNode(std::string& txt, asIScriptFunction& func) {
|
||||||
|
ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_OpenOnDoubleClick |
|
||||||
|
ImGuiTreeNodeFlags_OpenOnArrow |
|
||||||
|
ImGuiTreeNodeFlags_SpanFullWidth;
|
||||||
|
|
||||||
|
if (ImGui::TreeNodeEx((void*)0, flags, "%s", txt.c_str())) {
|
||||||
|
|
||||||
|
if (scriptContext && scriptContext->PushState() == asSUCCESS) {
|
||||||
|
|
||||||
|
|
||||||
|
scriptContext->PopState();
|
||||||
|
} else {
|
||||||
|
ImGui::Text("Something failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::TreePop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,8 @@
|
|||||||
#include "DeerRender/UIEngine/DockPanelObject.h"
|
#include "DeerStudio/EditorEngine/DockPanelObject.h"
|
||||||
#include "DeerRender/UIEngine/UIEngine.h"
|
#include "DeerStudio/EditorEngine/EditorEngine_ErrorHandle.h"
|
||||||
#include "DeerRender/UIEngine/UIEngine_ErrorHandle.h"
|
#include "DeerStudio/EditorEngine.h"
|
||||||
|
|
||||||
|
#include "Deer/Log.h"
|
||||||
|
|
||||||
#include "angelscript.h"
|
#include "angelscript.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -8,7 +10,7 @@
|
|||||||
#include "imgui.h"
|
#include "imgui.h"
|
||||||
|
|
||||||
namespace Deer {
|
namespace Deer {
|
||||||
UIEngine::DockPanelObject::DockPanelObject(asITypeInfo* _type)
|
EditorEngine::DockPanelObject::DockPanelObject(asITypeInfo* _type)
|
||||||
: type (_type), isValid(false) {
|
: type (_type), isValid(false) {
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
@ -44,19 +46,52 @@ namespace Deer {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
menuBarFunction = type->GetMethodByDecl("void onMenuBar()");
|
||||||
|
|
||||||
isValid = true;
|
isValid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
UIEngine::DockPanelObject::~DockPanelObject() {
|
EditorEngine::DockPanelObject::~DockPanelObject() {
|
||||||
if (object)
|
if (object)
|
||||||
object->Release();
|
object->Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIEngine::DockPanelObject::executeRender() {
|
void EditorEngine::DockPanelObject::invalidate() {
|
||||||
|
DEER_UI_ENGINE_ERROR("Last error was caused executing {0}", type->GetName());
|
||||||
|
isValid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorEngine::DockPanelObject::executeRender() {
|
||||||
|
if (menuBarFunction) {
|
||||||
|
ImGui::Begin(type->GetName(), (bool*)0, ImGuiWindowFlags_MenuBar);
|
||||||
|
|
||||||
|
if (ImGui::BeginMenuBar()) {
|
||||||
|
AS_CHECK_ADDITIONAL_INFO(
|
||||||
|
scriptContext->Prepare(menuBarFunction),
|
||||||
|
type->GetName()
|
||||||
|
);
|
||||||
|
|
||||||
|
AS_CHECK_ADDITIONAL_INFO(
|
||||||
|
scriptContext->SetObject(object),
|
||||||
|
type->GetName()
|
||||||
|
);
|
||||||
|
|
||||||
|
AS_CHECK_ADDITIONAL_INFO(
|
||||||
|
scriptContext->Execute(),
|
||||||
|
type->GetName()
|
||||||
|
);
|
||||||
|
|
||||||
|
ImGui::EndMenuBar();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
ImGui::Begin(type->GetName());
|
ImGui::Begin(type->GetName());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!isValid) {
|
if (!isValid) {
|
||||||
ImGui::TextColored(ImVec4(1, 0.3f, 0.3f, 1), "There was an error, please check the logs or reload the interface");
|
ImGui::TextColored(ImVec4(1, 0.3f, 0.3f, 1), "There was a runtime error");
|
||||||
|
ImGui::TextColored(ImVec4(1, 0.4f, 0.4f, 1), "Please check the log");
|
||||||
|
ImGui::TextColored(ImVec4(0.5f, 0.5f, 0.5f, 1), "Plese restart the interface");
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -79,28 +114,32 @@ namespace Deer {
|
|||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
|
||||||
UIEngine::DockPanelObject::DockPanelObject(DockPanelObject&& other) noexcept
|
EditorEngine::DockPanelObject::DockPanelObject(DockPanelObject&& other) noexcept
|
||||||
: isValid(other.isValid), renderFunction(other.renderFunction), type(other.type), object(other.object) {
|
: isValid(other.isValid), renderFunction(other.renderFunction), type(other.type), object(other.object), menuBarFunction(other.menuBarFunction) {
|
||||||
|
|
||||||
other.isValid = false;
|
other.isValid = false;
|
||||||
other.renderFunction = nullptr;
|
other.renderFunction = nullptr;
|
||||||
other.type = nullptr;
|
other.type = nullptr;
|
||||||
other.object = nullptr;
|
other.object = nullptr;
|
||||||
|
other.menuBarFunction = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
UIEngine::DockPanelObject& UIEngine::DockPanelObject::operator=(UIEngine::DockPanelObject&& other) noexcept {
|
EditorEngine::DockPanelObject& EditorEngine::DockPanelObject::operator=(EditorEngine::DockPanelObject&& other) noexcept {
|
||||||
if (this != &other) {
|
if (this != &other) {
|
||||||
isValid = other.isValid;
|
isValid = other.isValid;
|
||||||
renderFunction = other.renderFunction;
|
renderFunction = other.renderFunction;
|
||||||
type = other.type;
|
type = other.type;
|
||||||
object = other.object;
|
object = other.object;
|
||||||
|
menuBarFunction = other.menuBarFunction;
|
||||||
|
|
||||||
other.isValid = false;
|
other.isValid = false;
|
||||||
other.renderFunction = nullptr;
|
other.renderFunction = nullptr;
|
||||||
other.type = nullptr;
|
other.type = nullptr;
|
||||||
other.object = nullptr;
|
other.object = nullptr;
|
||||||
|
other.menuBarFunction = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -4,15 +4,15 @@ class asIScriptObject;
|
|||||||
class asIScriptFunction;
|
class asIScriptFunction;
|
||||||
|
|
||||||
namespace Deer {
|
namespace Deer {
|
||||||
namespace UIEngine {
|
namespace EditorEngine {
|
||||||
struct DockPanelObject {
|
struct DockPanelObject {
|
||||||
private:
|
private:
|
||||||
asITypeInfo* type = nullptr;
|
asITypeInfo* type = nullptr;
|
||||||
asIScriptObject* object = nullptr;
|
asIScriptObject* object = nullptr;
|
||||||
asIScriptFunction* renderFunction = nullptr;
|
asIScriptFunction* renderFunction = nullptr;
|
||||||
|
asIScriptFunction* menuBarFunction = nullptr;
|
||||||
bool isValid = false;
|
bool isValid = false;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DockPanelObject(asITypeInfo*);
|
DockPanelObject(asITypeInfo*);
|
||||||
~DockPanelObject();
|
~DockPanelObject();
|
||||||
@ -24,7 +24,7 @@ namespace Deer {
|
|||||||
DockPanelObject& operator=(DockPanelObject&& other) noexcept;
|
DockPanelObject& operator=(DockPanelObject&& other) noexcept;
|
||||||
|
|
||||||
void executeRender();
|
void executeRender();
|
||||||
inline void invalidate() { isValid = false; }
|
void invalidate();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,8 +1,8 @@
|
|||||||
#include "DeerRender/UIEngine.h"
|
#include "DeerStudio/EditorEngine.h"
|
||||||
#include "DeerRender/UIEngine/UIEngine_ErrorHandle.h"
|
#include "DeerStudio/EditorEngine/EditorEngine_ErrorHandle.h"
|
||||||
#include "DeerRender/UIEngine/UIEngine_Functions.h"
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Functions.h"
|
||||||
#include "DeerRender/UIEngine/UIEngine.h"
|
#include "DeerStudio/EditorEngine/DockPanelObject.h"
|
||||||
#include "DeerRender/UIEngine/DockPanelObject.h"
|
#include "DeerStudio/EditorEngine.h"
|
||||||
|
|
||||||
#include "Deer/Log.h"
|
#include "Deer/Log.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -12,7 +12,7 @@
|
|||||||
#include "scriptstdstring.h"
|
#include "scriptstdstring.h"
|
||||||
|
|
||||||
namespace Deer {
|
namespace Deer {
|
||||||
namespace UIEngine {
|
namespace EditorEngine {
|
||||||
asIScriptEngine* scriptEngine = nullptr;
|
asIScriptEngine* scriptEngine = nullptr;
|
||||||
asIScriptModule* scriptModule = nullptr;
|
asIScriptModule* scriptModule = nullptr;
|
||||||
asIScriptContext* scriptContext = nullptr;
|
asIScriptContext* scriptContext = nullptr;
|
||||||
@ -23,7 +23,7 @@ namespace Deer {
|
|||||||
bool active = false;
|
bool active = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIEngine::initialize() {
|
void EditorEngine::initialize() {
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
// If it exist we will reload it
|
// If it exist we will reload it
|
||||||
@ -32,9 +32,10 @@ namespace Deer {
|
|||||||
scriptEngine = asCreateScriptEngine();
|
scriptEngine = asCreateScriptEngine();
|
||||||
RegisterStdString(scriptEngine);
|
RegisterStdString(scriptEngine);
|
||||||
|
|
||||||
AS_RET_CHECK(scriptEngine->SetMessageCallback(asFUNCTION(Deer::UIEngine::errorCallback), 0, asCALL_CDECL));
|
AS_RET_CHECK(scriptEngine->SetMessageCallback(asFUNCTION(Deer::EditorEngine::errorCallback), 0, asCALL_CDECL));
|
||||||
|
|
||||||
registerUIEngineFunctions();
|
registerEditorEngineStructs();
|
||||||
|
registerEditorEngineFunctions();
|
||||||
registerDockPanel();
|
registerDockPanel();
|
||||||
loadScripts();
|
loadScripts();
|
||||||
|
|
||||||
@ -46,7 +47,7 @@ namespace Deer {
|
|||||||
active = true;
|
active = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIEngine::deinitialize() {
|
void EditorEngine::deinitialize() {
|
||||||
dockPanels.clear();
|
dockPanels.clear();
|
||||||
|
|
||||||
if (scriptContext)
|
if (scriptContext)
|
||||||
@ -61,7 +62,7 @@ namespace Deer {
|
|||||||
active = false;
|
active = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIEngine::execute() {
|
void EditorEngine::execute() {
|
||||||
if (!active)
|
if (!active)
|
||||||
return;
|
return;
|
||||||
|
|
@ -1,9 +1,9 @@
|
|||||||
#include "DeerRender/UIEngine/UIEngine_ErrorHandle.h"
|
#include "DeerStudio/EditorEngine/EditorEngine_ErrorHandle.h"
|
||||||
|
|
||||||
#include "angelscript.h"
|
#include "angelscript.h"
|
||||||
|
|
||||||
namespace Deer {
|
namespace Deer {
|
||||||
namespace UIEngine {
|
namespace EditorEngine {
|
||||||
const char* getAngelScriptReturnCodeString(int code)
|
const char* getAngelScriptReturnCodeString(int code)
|
||||||
{
|
{
|
||||||
switch (code)
|
switch (code)
|
@ -1,9 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "Deer/Log.h"
|
#include "Deer/Log.h"
|
||||||
#include <angelscript.h>
|
#include "angelscript.h"
|
||||||
|
|
||||||
namespace Deer {
|
namespace Deer {
|
||||||
namespace UIEngine {
|
namespace EditorEngine {
|
||||||
const char* getAngelScriptReturnCodeString(int code);
|
const char* getAngelScriptReturnCodeString(int code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -11,19 +11,19 @@ namespace Deer {
|
|||||||
#define AS_CHECK(f) { \
|
#define AS_CHECK(f) { \
|
||||||
int __r = f; \
|
int __r = f; \
|
||||||
if (__r < 0) { \
|
if (__r < 0) { \
|
||||||
DEER_UI_ENGINE_ERROR("Error at line: {0}:{1} -> {2}", __FILE__, __LINE__, Deer::UIEngine::getAngelScriptReturnCodeString(__r)); \
|
DEER_UI_ENGINE_ERROR("Error at line: {0}:{1} -> {2}", __FILE__, __LINE__, Deer::EditorEngine::getAngelScriptReturnCodeString(__r)); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
#define AS_CHECK_ADDITIONAL_INFO(f, i) { \
|
#define AS_CHECK_ADDITIONAL_INFO(f, i) { \
|
||||||
int __r = f; \
|
int __r = f; \
|
||||||
if (__r < 0) { \
|
if (__r < 0) { \
|
||||||
DEER_UI_ENGINE_ERROR("Error at line: {0}:{1} -> {2} \n {3}", __FILE__, __LINE__, Deer::UIEngine::getAngelScriptReturnCodeString(__r), i); \
|
DEER_UI_ENGINE_ERROR("Error at line: {0}:{1} -> {2} \n {3}", __FILE__, __LINE__, Deer::EditorEngine::getAngelScriptReturnCodeString(__r), i); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
#define AS_RET_CHECK(f) { \
|
#define AS_RET_CHECK(f) { \
|
||||||
int __r = f; \
|
int __r = f; \
|
||||||
if (__r < 0) { \
|
if (__r < 0) { \
|
||||||
DEER_UI_ENGINE_ERROR("Error at line: {0}:{1} -> {2}", __FILE__, __LINE__, Deer::UIEngine::getAngelScriptReturnCodeString(__r)); \
|
DEER_UI_ENGINE_ERROR("Error at line: {0}:{1} -> {2}", __FILE__, __LINE__, Deer::EditorEngine::getAngelScriptReturnCodeString(__r)); \
|
||||||
return; \
|
return; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
#include "DeerRender/UIEngine.h"
|
#include "DeerStudio/EditorEngine.h"
|
||||||
#include "DeerRender/Render/Texture.h"
|
#include "DeerRender/Render/Texture.h"
|
||||||
#include "Deer/DataStore.h"
|
#include "Deer/DataStore.h"
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ namespace Deer {
|
|||||||
uint8_t* data;
|
uint8_t* data;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
|
|
||||||
if (!DataStore::loadGlobalFileData(DEER_UI_ICON_PATH, name, &data, &size))
|
if (!DataStore::loadGlobalFileData(DEER_EDITOR_PATH, name, &data, &size))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
icons[name] = Texture2D::create(data, size);
|
icons[name] = Texture2D::create(data, size);
|
@ -1,16 +1,16 @@
|
|||||||
#include "angelscript.h"
|
#include "angelscript.h"
|
||||||
#include "DeerRender/UIEngine/UIEngine.h"
|
#include "DeerStudio/EditorEngine.h"
|
||||||
#include "DeerRender/UIEngine/DockPanelObject.h"
|
#include "DeerStudio/EditorEngine/DockPanelObject.h"
|
||||||
#include "DeerRender/UIEngine/UIEngine_ErrorHandle.h"
|
#include "DeerStudio/EditorEngine/EditorEngine_ErrorHandle.h"
|
||||||
|
|
||||||
namespace Deer {
|
namespace Deer {
|
||||||
void UIEngine::registerDockPanel() {
|
void EditorEngine::registerDockPanel() {
|
||||||
AS_RET_CHECK(scriptEngine->RegisterInterface("DockPanel"));
|
AS_RET_CHECK(scriptEngine->RegisterInterface("DockPanel"));
|
||||||
|
|
||||||
AS_RET_CHECK(scriptEngine->RegisterInterfaceMethod("DockPanel", "void onRender()"));
|
AS_RET_CHECK(scriptEngine->RegisterInterfaceMethod("DockPanel", "void onRender()"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIEngine::extractDockPanels() {
|
void EditorEngine::extractDockPanels() {
|
||||||
size_t nScripts = scriptModule->GetObjectTypeCount();
|
size_t nScripts = scriptModule->GetObjectTypeCount();
|
||||||
|
|
||||||
asITypeInfo* dockPanelType = scriptEngine->GetTypeInfoByName("DockPanel");
|
asITypeInfo* dockPanelType = scriptEngine->GetTypeInfoByName("DockPanel");
|
@ -1,5 +1,5 @@
|
|||||||
#include "DeerRender/UIEngine/UIEngine.h"
|
#include "DeerStudio/EditorEngine.h"
|
||||||
#include "DeerRender/UIEngine/UIEngine_ErrorHandle.h"
|
#include "DeerStudio/EditorEngine/EditorEngine_ErrorHandle.h"
|
||||||
|
|
||||||
#include "Deer/Path.h"
|
#include "Deer/Path.h"
|
||||||
#include "Deer/DataStore.h"
|
#include "Deer/DataStore.h"
|
||||||
@ -15,16 +15,16 @@
|
|||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
|
|
||||||
namespace Deer {
|
namespace Deer {
|
||||||
void UIEngine::loadScripts() {
|
void EditorEngine::loadScripts() {
|
||||||
Path path = DataStore::rootPath / DEER_UI_SCRIPT_PATH;
|
Path path = DataStore::rootPath / DEER_EDITOR_PATH;
|
||||||
CScriptBuilder builder;
|
CScriptBuilder builder;
|
||||||
|
|
||||||
AS_RET_CHECK(builder.StartNewModule(scriptEngine, "DeerModule"));
|
AS_RET_CHECK(builder.StartNewModule(scriptEngine, "DeerModule"));
|
||||||
|
|
||||||
DEER_UI_ENGINE_INFO("=== Extracting UI Engine Scripts ===");
|
DEER_CORE_TRACE("Extracting UI Engine Scripts ");
|
||||||
for (const auto& entry : fs::recursive_directory_iterator(path)) {
|
for (const auto& entry : fs::recursive_directory_iterator(path)) {
|
||||||
if (entry.is_regular_file() && entry.path().extension() == ".as") {
|
if (entry.is_regular_file() && entry.path().extension() == ".as") {
|
||||||
DEER_UI_ENGINE_TRACE("\t{0}", entry.path().stem().string().c_str());
|
//DEER_UI_ENGINE_TRACE("\t{0}", entry.path().stem().string().c_str());
|
||||||
// We add aditional info to check who caused the error
|
// We add aditional info to check who caused the error
|
||||||
AS_CHECK_ADDITIONAL_INFO(
|
AS_CHECK_ADDITIONAL_INFO(
|
||||||
builder.AddSectionFromFile(entry.path().string().c_str());,
|
builder.AddSectionFromFile(entry.path().string().c_str());,
|
@ -0,0 +1,135 @@
|
|||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Functions.h"
|
||||||
|
#include "DeerStudio/EditorEngine.h"
|
||||||
|
#include "DeerStudio/EditorEngine/EditorEngine_ErrorHandle.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Button.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Column.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Directory.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Environment.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Environment.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Functions.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Functions.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Icon.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Input.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Mesh.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Text.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_MenuBar.h"
|
||||||
|
|
||||||
|
#include "angelscript.h"
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
void EditorEngine::registerEditorEngineFunctions() {
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"bool menuItem(const string& in)",
|
||||||
|
asFUNCTION(Deer::EditorEngine::menuItem),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"void textColor(float, float, float, const string& in)",
|
||||||
|
asFUNCTION(Deer::EditorEngine::textColor),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"void text(const string& in)",
|
||||||
|
asFUNCTION(text),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"void drawIcon(const string& in, int)",
|
||||||
|
asFUNCTION(Deer::EditorEngine::drawIcon),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"bool isMouseClicked(int)",
|
||||||
|
asFUNCTION(
|
||||||
|
isMouseClicked
|
||||||
|
),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"bool isMouseDoubleClicked(int)",
|
||||||
|
asFUNCTION(
|
||||||
|
isMouseDoubleClicked
|
||||||
|
),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"void setupAutomaticColumns(int)",
|
||||||
|
asFUNCTION(
|
||||||
|
setupAutomaticColumns
|
||||||
|
),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"void endColumns()",
|
||||||
|
asFUNCTION(endColumns),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"void nextColumn()",
|
||||||
|
asFUNCTION(nextColumn),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"void print(const string& in)",
|
||||||
|
asFUNCTION (Deer::EditorEngine::print),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"void textCentered(const string& in)",
|
||||||
|
asFUNCTION(Deer::EditorEngine::textCentered),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"void drawIconCentered(const string& in, int)",
|
||||||
|
asFUNCTION(Deer::EditorEngine::drawIconCentered),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"int getResourceCount(ResourceType, const string& in)",
|
||||||
|
asFUNCTION(Deer::EditorEngine::getResourceCount),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"string getResourceNameById(ResourceType, const string& in, int)",
|
||||||
|
asFUNCTION(Deer::EditorEngine::getResourceNameById),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"string getResourcePathById(ResourceType, const string& in, int)",
|
||||||
|
asFUNCTION(Deer::EditorEngine::getResourcePathById),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"int getDirCount(ResourceType, const string& in)",
|
||||||
|
asFUNCTION(Deer::EditorEngine::getDirCount),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"string getDirPathById(ResourceType, const string& in, int)",
|
||||||
|
asFUNCTION(Deer::EditorEngine::getDirPathById),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
|
||||||
|
AS_CHECK(scriptEngine->RegisterGlobalFunction(
|
||||||
|
"string getDirNameById(ResourceType, const string& in, int)",
|
||||||
|
asFUNCTION(Deer::EditorEngine::getDirNameById),
|
||||||
|
asCALL_CDECL
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
#include "DeerStudio/EditorEngine.h"
|
||||||
|
#include "DeerStudio/EditorEngine/EditorEngine_ErrorHandle.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Mesh.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Environment.h"
|
||||||
|
#include "DeerStudio/EditorEngine/API/EditorEngine_Directory.h"
|
||||||
|
#include "angelscript.h"
|
||||||
|
|
||||||
|
namespace Deer {
|
||||||
|
namespace EditorEngine {
|
||||||
|
void registerResourceTypeEnum() {
|
||||||
|
AS_RET_CHECK(scriptEngine->RegisterEnum("ResourceType"));
|
||||||
|
AS_CHECK(scriptEngine->RegisterEnumValue("ResourceType", "Mesh", (int)ResourceType::MESH));
|
||||||
|
}
|
||||||
|
|
||||||
|
void registerEntityStruct() {
|
||||||
|
AS_CHECK(scriptEngine->RegisterObjectType("Entity", sizeof(EntityStruct),
|
||||||
|
asOBJ_VALUE | asOBJ_POD | asGetTypeTraits<EntityStruct>()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void registerEditorEngineStructs() {
|
||||||
|
registerResourceTypeEnum();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
42
roe/editor/mesh_explorer/mesh_explorer.as
Normal file
42
roe/editor/mesh_explorer/mesh_explorer.as
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
|
||||||
|
class MeshExplorer : DockPanel {
|
||||||
|
string currentPath = "";
|
||||||
|
|
||||||
|
void onRender() {
|
||||||
|
setupAutomaticColumns(128);
|
||||||
|
|
||||||
|
// To avoid problems we will cache the current path
|
||||||
|
const string cache_currentPath = currentPath;
|
||||||
|
if (cache_currentPath != "") {
|
||||||
|
drawIconCentered("folder", 64);
|
||||||
|
if (isMouseClicked(0) and isMouseDoubleClicked(0)) {
|
||||||
|
currentPath = "";
|
||||||
|
}
|
||||||
|
textCentered(cache_currentPath + "/..");
|
||||||
|
nextColumn();
|
||||||
|
}
|
||||||
|
|
||||||
|
ResourceType resourceType = ResourceType::Mesh;
|
||||||
|
int dirCount = getDirCount(resourceType, cache_currentPath);
|
||||||
|
for (int i = 0; i < dirCount; i++) {
|
||||||
|
drawIconCentered("folder", 64);
|
||||||
|
|
||||||
|
if (isMouseClicked(0) and isMouseDoubleClicked(0)) {
|
||||||
|
print(getDirPathById(ResourceType::Mesh, cache_currentPath, i));
|
||||||
|
currentPath = getDirPathById(ResourceType::Mesh, cache_currentPath, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
textCentered(getDirNameById(ResourceType::Mesh, cache_currentPath, i));
|
||||||
|
nextColumn();
|
||||||
|
}
|
||||||
|
|
||||||
|
int meshCount = getResourceCount(ResourceType::Mesh, cache_currentPath);
|
||||||
|
for (int i = 0; i < meshCount; i++) {
|
||||||
|
drawIconCentered("file", 64);
|
||||||
|
|
||||||
|
textCentered(getResourceNameById(ResourceType::Mesh, cache_currentPath, i));
|
||||||
|
nextColumn();
|
||||||
|
}
|
||||||
|
endColumns();
|
||||||
|
}
|
||||||
|
}
|
@ -1,28 +0,0 @@
|
|||||||
|
|
||||||
class MeshExplorer : DockPanel {
|
|
||||||
string currentPath = "";
|
|
||||||
|
|
||||||
void onRender() {
|
|
||||||
textColor(0.5, 0.5, 0.5, currentPath);
|
|
||||||
|
|
||||||
setupAutomaticColumns(180);
|
|
||||||
|
|
||||||
int dirCount = getMeshDirCount(currentPath);
|
|
||||||
for (int i = 0; i < dirCount; i++) {
|
|
||||||
|
|
||||||
drawIcon("folder", 64);
|
|
||||||
text(getMeshDirName(currentPath, i));
|
|
||||||
|
|
||||||
nextColumn();
|
|
||||||
}
|
|
||||||
|
|
||||||
int meshCount = getMeshCount(currentPath);
|
|
||||||
for (int i = 0; i < meshCount; i++) {
|
|
||||||
drawIcon("file", 64);
|
|
||||||
text(getMeshName(currentPath, i));
|
|
||||||
|
|
||||||
nextColumn();
|
|
||||||
}
|
|
||||||
endColumns();
|
|
||||||
}
|
|
||||||
}
|
|
16
roe/editor/tree_pannel/tree_pannel.as
Normal file
16
roe/editor/tree_pannel/tree_pannel.as
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
class TreePannel : DockPanel {
|
||||||
|
void onMenuBar() {
|
||||||
|
if (menuItem("Hey!")) {
|
||||||
|
print("clicked");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void onRender() {
|
||||||
|
root = getRoot();
|
||||||
|
renderEntity(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderEntity(Entity entity) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -10,31 +10,31 @@ Collapsed=0
|
|||||||
|
|
||||||
[Window][Properties]
|
[Window][Properties]
|
||||||
Pos=968,24
|
Pos=968,24
|
||||||
Size=312,214
|
Size=312,110
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000009,0
|
DockId=0x00000009,0
|
||||||
|
|
||||||
[Window][Game Window]
|
[Window][Game Window]
|
||||||
Pos=304,24
|
Pos=304,24
|
||||||
Size=662,368
|
Size=662,392
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000006,1
|
DockId=0x00000006,1
|
||||||
|
|
||||||
[Window][Tree Panel]
|
[Window][Tree Panel]
|
||||||
Pos=0,24
|
Pos=0,24
|
||||||
Size=302,368
|
Size=302,392
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000005,0
|
DockId=0x00000005,0
|
||||||
|
|
||||||
[Window][Terrain Editor]
|
[Window][Terrain Editor]
|
||||||
Pos=968,240
|
Pos=968,136
|
||||||
Size=312,152
|
Size=312,280
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x0000000A,0
|
DockId=0x0000000A,0
|
||||||
|
|
||||||
[Window][Viewport]
|
[Window][Viewport]
|
||||||
Pos=304,24
|
Pos=304,24
|
||||||
Size=662,368
|
Size=662,392
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000006,0
|
DockId=0x00000006,0
|
||||||
|
|
||||||
@ -45,8 +45,8 @@ Collapsed=0
|
|||||||
DockId=0x00000002,0
|
DockId=0x00000002,0
|
||||||
|
|
||||||
[Window][Mesh Explorer]
|
[Window][Mesh Explorer]
|
||||||
Pos=0,394
|
Pos=0,418
|
||||||
Size=1280,326
|
Size=1280,302
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000008,0
|
DockId=0x00000008,0
|
||||||
|
|
||||||
@ -57,21 +57,27 @@ Collapsed=0
|
|||||||
DockId=0x00000008,1
|
DockId=0x00000008,1
|
||||||
|
|
||||||
[Window][MeshExplorer]
|
[Window][MeshExplorer]
|
||||||
Pos=0,394
|
Pos=0,418
|
||||||
Size=1280,326
|
Size=1280,302
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000008,1
|
DockId=0x00000008,0
|
||||||
|
|
||||||
|
[Window][TreePannel]
|
||||||
|
Pos=0,24
|
||||||
|
Size=302,392
|
||||||
|
Collapsed=0
|
||||||
|
DockId=0x00000005,1
|
||||||
|
|
||||||
[Docking][Data]
|
[Docking][Data]
|
||||||
DockSpace ID=0xA1672E74 Window=0x4647B76E Pos=0,24 Size=1280,696 Split=Y
|
DockSpace ID=0xA1672E74 Window=0x4647B76E Pos=0,24 Size=1280,696 Split=Y
|
||||||
DockNode ID=0x00000007 Parent=0xA1672E74 SizeRef=1280,368 Split=Y
|
DockNode ID=0x00000007 Parent=0xA1672E74 SizeRef=1280,392 Split=Y
|
||||||
DockNode ID=0x00000001 Parent=0x00000007 SizeRef=2560,363 Split=X Selected=0x13926F0B
|
DockNode ID=0x00000001 Parent=0x00000007 SizeRef=2560,363 Split=X Selected=0x13926F0B
|
||||||
DockNode ID=0x00000003 Parent=0x00000001 SizeRef=966,779 Split=X Selected=0x13926F0B
|
DockNode ID=0x00000003 Parent=0x00000001 SizeRef=966,779 Split=X Selected=0x13926F0B
|
||||||
DockNode ID=0x00000005 Parent=0x00000003 SizeRef=302,779 Selected=0xF278DC36
|
DockNode ID=0x00000005 Parent=0x00000003 SizeRef=302,779 Selected=0xE45B9F93
|
||||||
DockNode ID=0x00000006 Parent=0x00000003 SizeRef=662,779 CentralNode=1 Selected=0x13926F0B
|
DockNode ID=0x00000006 Parent=0x00000003 SizeRef=662,779 CentralNode=1 Selected=0x13926F0B
|
||||||
DockNode ID=0x00000004 Parent=0x00000001 SizeRef=312,779 Split=Y Selected=0x199AB496
|
DockNode ID=0x00000004 Parent=0x00000001 SizeRef=312,779 Split=Y Selected=0x199AB496
|
||||||
DockNode ID=0x00000009 Parent=0x00000004 SizeRef=392,214 Selected=0x199AB496
|
DockNode ID=0x00000009 Parent=0x00000004 SizeRef=392,110 Selected=0x199AB496
|
||||||
DockNode ID=0x0000000A Parent=0x00000004 SizeRef=392,152 Selected=0x2A2C795E
|
DockNode ID=0x0000000A Parent=0x00000004 SizeRef=392,280 Selected=0x2A2C795E
|
||||||
DockNode ID=0x00000002 Parent=0x00000007 SizeRef=2560,331 Selected=0xCF339702
|
DockNode ID=0x00000002 Parent=0x00000007 SizeRef=2560,331 Selected=0xCF339702
|
||||||
DockNode ID=0x00000008 Parent=0xA1672E74 SizeRef=1280,326 Selected=0xD962995A
|
DockNode ID=0x00000008 Parent=0xA1672E74 SizeRef=1280,302 Selected=0xD962995A
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user