From f7616648beb55e8b151c797323c70a98c994a5da Mon Sep 17 00:00:00 2001 From: Anselme Date: Mon, 28 Aug 2017 16:51:26 +0200 Subject: [PATCH 1/3] added the standard LUA libraries to the LUA context --- src/sparrowshell/scriptnode.cpp | 5 +++++ src/sparrowshell/scriptnode.h | 2 ++ src/tools/utils.cpp | 37 +++++++++++++++++++++++++++++++++ src/tools/utils.h | 3 +++ 4 files changed, 47 insertions(+) diff --git a/src/sparrowshell/scriptnode.cpp b/src/sparrowshell/scriptnode.cpp index e575ff1..1940eea 100644 --- a/src/sparrowshell/scriptnode.cpp +++ b/src/sparrowshell/scriptnode.cpp @@ -7,12 +7,17 @@ #include "SparrowInput/Version.h" #include "SparrowRenderer/Version.h" #include "SparrowSerializer/Version.h" +#include "tools/utils.h" #define LUA_DEFINE(var) S[#var]=var #define LUA_SET_FUN(var) m_script.set_function(#var,&ScriptNode::var,this);this->functions_name.push_back(#var); ScriptNode::ScriptNode() { + m_script.open_libraries(sol::lib::base); + m_script.open_libraries(sol::lib::math); + utils::initScriptingUtilsFunctions(this); + LUA_SET_FUN(getDeltaTime); LUA_SET_FUN(print); LUA_SET_FUN(version); diff --git a/src/sparrowshell/scriptnode.h b/src/sparrowshell/scriptnode.h index b8723a5..4290d6b 100644 --- a/src/sparrowshell/scriptnode.h +++ b/src/sparrowshell/scriptnode.h @@ -21,6 +21,8 @@ public: void version(); void clear(); float getDeltaTime(); + sol::state& getScriptEngine() { return m_script; } + void addAutoCompletionSymbol(const std::string& symbolName) { functions_name.push_back(symbolName); } }; diff --git a/src/tools/utils.cpp b/src/tools/utils.cpp index bb55e71..44f7159 100644 --- a/src/tools/utils.cpp +++ b/src/tools/utils.cpp @@ -3,6 +3,7 @@ //#include "scene/scenetree.h" #include "scene/meshnode.h" #include "iostream" +#include "sparrowshell/scriptnode.h" std::vector utils::split(const std::string &line, char sep){ std::vector tokens; @@ -14,6 +15,41 @@ std::vector utils::split(const std::string &line, char sep){ tokens.push_back(line.substr(start)); return tokens; } + +void utils::initScriptingUtilsFunctions(ScriptNode* scriptNode) +{ + +} + +void utils::initStandardScene() +{ + /* + * GUI + * + * ENTITIES + * PLAYER + * MOBS + * + * OBJECTS + * ITEMS // the player can interact with it, it is permanent and is saved in the map + * GIBS // only for decorative purposes and ephemere + * PROJECTILES // ballistic object + * + * MAP + * ENVIRONMENT + * FOG + * SUN + * SKY + * GEOMETRY + * CHUNK_NODES // procedural geometry + * MODEL_NODES // modelized geometry + * + * + * + * + */ +} + /* void utils::setPosition2D(MeshNode *mnode, glm::vec2 pos){ const glm::mat4 &tr = mnode->getTransform(); @@ -42,3 +78,4 @@ void setDepth2D(MeshNode* mnode, float depth){ //mesh.setDepth(depth); } */ + diff --git a/src/tools/utils.h b/src/tools/utils.h index d17cfcd..00c18a4 100644 --- a/src/tools/utils.h +++ b/src/tools/utils.h @@ -6,10 +6,13 @@ #include class MeshNode; +class ScriptNode; namespace utils { std::vector split(const std::string &line, char sep); +void initScriptingUtilsFunctions(ScriptNode* scriptNode); +void initStandardScene(); //void setPosition2D(MeshNode*, glm::vec2); //void resize2D(MeshNode*, glm::vec2, glm::vec2); //void scale2D(MeshNode*, glm::vec2); From c9928bf0a449672dc6264e8fced70633f9f442a9 Mon Sep 17 00:00:00 2001 From: Anselme Date: Tue, 29 Aug 2017 15:34:22 +0200 Subject: [PATCH 2/3] added material resource type --- src/resourcemanager.cpp | 12 +++++++- src/resourcemanager.h | 20 +++++++------ src/tools/resourcepack.cpp | 59 ++++++++++++++++++++++++++++++++++++++ src/tools/resourcepack.h | 42 +++++++++++++++++++++++++++ 4 files changed, 123 insertions(+), 10 deletions(-) diff --git a/src/resourcemanager.cpp b/src/resourcemanager.cpp index f1ed023..c56f26f 100644 --- a/src/resourcemanager.cpp +++ b/src/resourcemanager.cpp @@ -1,12 +1,22 @@ #include "resourcemanager.h" -std::unordered_map> ResourceManager::data; +std::unordered_map> data; + +std::unordered_map> ResourceManager::getResourceMap() +{ + return data; +} void ResourceManager::add(void* resource, const std::string &type, const std::string name) { data[type][name] = resource; } +void ResourceManager::remove(const std::string &type, const std::string name) +{ + data[type].erase(name); +} + void* ResourceManager::get(const std::string &type, const std::string name) { return check(type,name) ? data[type][name] : NULL; diff --git a/src/resourcemanager.h b/src/resourcemanager.h index 6092a68..2b310ea 100644 --- a/src/resourcemanager.h +++ b/src/resourcemanager.h @@ -8,16 +8,18 @@ #define RESOURCE_GET(type, name) ((type*)(ResourceManager::get(#type, name))) -#define RESOURCE_CHECK(type,name) ResourceManager::check(#type, name) +#define RESOURCE_CHECK(type, name) ResourceManager::check(#type, name) -class ResourceManager +#define RESOURCE_REMOVE(type, name) ResourceManager::remove(#type, name) + +namespace ResourceManager { -private: - static std::unordered_map> data; -public: - static void add(void* resource, const std::string &type, const std::string name); - static void* get(const std::string &type, const std::string name); - static bool check(const std::string &type, const std::string name); -}; + std::unordered_map> getResourceMap(); + + void add(void* resource, const std::string &type, const std::string name); + void remove(const std::string &type, const std::string name); + void* get(const std::string &type, const std::string name); + bool check(const std::string &type, const std::string name); +} #endif // RESOURCEMANAGER_H diff --git a/src/tools/resourcepack.cpp b/src/tools/resourcepack.cpp index 8aec89f..e9434c4 100644 --- a/src/tools/resourcepack.cpp +++ b/src/tools/resourcepack.cpp @@ -7,6 +7,7 @@ #include #include +#include #include @@ -53,6 +54,12 @@ void ResourcePack::gui() m_resources.push_back(resource); } + if(ImGui::Button("Add a material")) + { + MaterialResource* resource = new MaterialResource(); + m_resources.push_back(resource); + } + for(ResourceInterface* res : m_resources) { if(ImGui::Button(res->m_name.c_str())) @@ -125,6 +132,7 @@ void TextureResource::destroy() { delete m_texture; m_texture = nullptr; + RESOURCE_REMOVE(Texture, m_name); } } @@ -147,3 +155,54 @@ void TextureResource::gui() destroy(); } } + +INIT_SERIALIZABLE(MaterialResource) + +MaterialResource::MaterialResource() : + m_material(nullptr) +{ + m_name = "new material"; + m_albedo = glm::vec3(0.9f); + m_metallic = 0.2f; + m_roughness = 0.8f; + m_emission = glm::vec3(0); + m_opacity = 1.f; +} + +MaterialResource::~MaterialResource() +{ + destroy(); +} + +void MaterialResource::load(float & progress) +{ + m_material = new PBRMaterial(); + m_material->albedo = m_albedo; + m_material->metallic = m_metallic; + m_material->roughness = m_roughness; + m_material->emission = m_emission; + m_material->opacity = m_opacity; + m_material->setTexture(PBRMaterial::ALBEDO_SLOT, RESOURCE_GET(Texture, m_albedoTexture)); + m_material->setTexture(PBRMaterial::METALLIC_SLOT, RESOURCE_GET(Texture, m_metallicTexture)); + m_material->setTexture(PBRMaterial::ROUGHNESS_SLOT, RESOURCE_GET(Texture, m_roughnessTexture)); + m_material->setTexture(PBRMaterial::EMISSION_SLOT, RESOURCE_GET(Texture, m_emissionTexture)); + m_material->setTexture(PBRMaterial::NORMALS_SLOT, RESOURCE_GET(Texture, m_normalTexture)); + m_material->setTexture(PBRMaterial::ALPHA_SLOT, RESOURCE_GET(Texture, m_alphaMaskTexture)); + RESOURCE_ADD(m_material, PBRMaterial, m_name); + progress = 1; +} + +void MaterialResource::destroy() +{ + if(m_material != nullptr) + { + delete m_material; + m_material = nullptr; + RESOURCE_REMOVE(PBRMaterial, m_name); + } +} + +void MaterialResource::gui() +{ + ImGui::Text("TODO"); +} diff --git a/src/tools/resourcepack.h b/src/tools/resourcepack.h index 7c75e3a..8e4c83b 100644 --- a/src/tools/resourcepack.h +++ b/src/tools/resourcepack.h @@ -4,6 +4,7 @@ #include class Texture; +class PBRMaterial; /** * @brief The ResourceInterface struct holds a resource, it handles its loading and its destruction @@ -60,4 +61,45 @@ public: void gui(); }; +class MaterialResource : public ResourceInterface +{ + P_VEC3(m_albedo) + P_FLOAT(m_metallic) + P_FLOAT(m_roughness) + P_VEC3(m_emission) + P_FLOAT(m_opacity) + P_STRING(m_albedoTexture) + P_STRING(m_metallicTexture) + P_STRING(m_roughnessTexture) + P_STRING(m_emissionTexture) + P_STRING(m_normalTexture) + P_STRING(m_alphaMaskTexture) + + PBRMaterial* m_material; + +public: + MaterialResource(); + virtual ~MaterialResource(); + + SERIALIZABLE(MaterialResource, + CAST(m_name), + CAST(m_albedo), + CAST(m_metallic), + CAST(m_roughness), + CAST(m_emission), + CAST(m_opacity), + CAST(m_albedoTexture), + CAST(m_metallicTexture), + CAST(m_roughnessTexture), + CAST(m_emissionTexture), + CAST(m_normalTexture), + CAST(m_alphaMaskTexture)) + + void load(float & progress); + + void destroy(); + + void gui(); +}; + #endif // RESOURCEPACK_H From 35431b1d63b2e762796733d533596026e71af6b4 Mon Sep 17 00:00:00 2001 From: Anselme Date: Tue, 29 Aug 2017 16:11:45 +0200 Subject: [PATCH 3/3] renamed guitools --- src/{guitools.cpp => editor.cpp} | 18 +++++++++--------- src/{guitools.h => editor.h} | 12 ++++++------ src/engine.cpp | 8 ++++---- src/engine.h | 6 +++--- src/sparrowshell/scriptnode.cpp | 2 +- src/tools/scenepicker.cpp | 2 +- 6 files changed, 24 insertions(+), 24 deletions(-) rename src/{guitools.cpp => editor.cpp} (90%) rename src/{guitools.h => editor.h} (77%) diff --git a/src/guitools.cpp b/src/editor.cpp similarity index 90% rename from src/guitools.cpp rename to src/editor.cpp index 14cc4ca..c83d3c2 100644 --- a/src/guitools.cpp +++ b/src/editor.cpp @@ -1,4 +1,4 @@ -#include "guitools.h" +#include "editor.h" #include "engine.h" #include "tools/scenepicker.h" @@ -13,7 +13,7 @@ #include -GuiTools::GuiTools() : +Editor::Editor() : m_pickerNode(new ScenePicker()), m_selectedMesh(nullptr), m_editedResourcePack(nullptr), @@ -24,12 +24,12 @@ GuiTools::GuiTools() : m_pickerNode->setVisible(false); } -GuiTools::~GuiTools() +Editor::~Editor() { delete m_pickerNode; } -void GuiTools::update() +void Editor::update() { // no automatic update of children, we want to update them manually // ContainerNode::update(); @@ -44,7 +44,7 @@ void GuiTools::update() m_editedResourcePack->gui(); } -void GuiTools::materialGui() +void Editor::materialGui() { static int selectedOption = 0; @@ -87,24 +87,24 @@ void GuiTools::materialGui() ImGui::End(); } -void GuiTools::togglePicker() +void Editor::togglePicker() { m_pickerEnabled = !m_pickerEnabled; m_pickerNode->setVisible(m_pickerEnabled); } -void GuiTools::toggleMaterialEditor() +void Editor::toggleMaterialEditor() { m_materialEditorEnabled = !m_materialEditorEnabled; } -void GuiTools::toggleRenderingPipelineGui() +void Editor::toggleRenderingPipelineGui() { DeferredPipeline* pipeline = dynamic_cast(m_scene->getPipeline()); pipeline->toggleDebugGui(); } -void GuiTools::toggleResourcePackGui() +void Editor::toggleResourcePackGui() { if(m_editedResourcePack == nullptr) m_editedResourcePack = new ResourcePack(); diff --git a/src/guitools.h b/src/editor.h similarity index 77% rename from src/guitools.h rename to src/editor.h index b9cff1a..9e440b2 100644 --- a/src/guitools.h +++ b/src/editor.h @@ -1,5 +1,5 @@ -#ifndef GUITOOLS_H -#define GUITOOLS_H +#ifndef EDITOR_H +#define EDITOR_H #include "scene/containernode.h" @@ -8,7 +8,7 @@ class ScenePicker; class ResourcePack; class Mesh; -class GuiTools : public ContainerNode +class Editor : public ContainerNode { ScenePicker* m_pickerNode; Mesh* m_selectedMesh; @@ -16,8 +16,8 @@ class GuiTools : public ContainerNode bool m_pickerEnabled; bool m_materialEditorEnabled; public: - GuiTools(); - ~GuiTools(); + Editor(); + ~Editor(); void update(); void materialGui(); void togglePicker(); @@ -26,4 +26,4 @@ public: void toggleResourcePackGui(); }; -#endif // GUITOOLS_H +#endif // EDITOR_H diff --git a/src/engine.cpp b/src/engine.cpp index 1b84644..829a1e7 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -13,7 +13,7 @@ #include "scene/physicsdebugnode.h" #include "imgui/imgui.h" #include "tools/loader.h" -#include "guitools.h" +#include "editor.h" #include "tools/loadingthread.h" Engine::Engine() : @@ -66,7 +66,7 @@ void Engine::createWindow(std::string title, m_input = new Input(m_window); m_renderer->initGL(w, h); m_sparrowshell = new SparrowShell(m_window); - m_guiTools = new GuiTools(); + m_editor = new Editor(); m_loadingThread = LoadingThread::init(); } @@ -179,13 +179,13 @@ void Engine::setScene(std::string scene) } previous_scene->getRootObject()->removeChild(m_sparrowshell); - previous_scene->getRootObject()->removeChild(m_guiTools); + previous_scene->getRootObject()->removeChild(m_editor); m_renderer->setScene(new_scene); m_renderer->resizeGL(m_window->getSize().x, m_window->getSize().y); new_scene->getRootObject()->addChild(m_sparrowshell); - new_scene->getRootObject()->addChild(m_guiTools); + new_scene->getRootObject()->addChild(m_editor); } void Engine::enablePhysicsDebug() diff --git a/src/engine.h b/src/engine.h index 810fe24..8c0d9f7 100644 --- a/src/engine.h +++ b/src/engine.h @@ -8,7 +8,7 @@ class SparrowRenderer; class SceneTree; class SparrowShell; class PhysicsDebugNode; -class GuiTools; +class Editor; class LoadingThread; namespace sf @@ -52,7 +52,7 @@ public: SparrowRenderer* getRenderer() const {return m_renderer;} btDiscreteDynamicsWorld* getPhysics() const {return m_world;} SparrowShell* getShell() const {return m_sparrowshell;} - GuiTools* getGuiTools() const {return m_guiTools;} + Editor* getGuiTools() const {return m_editor;} LoadingThread* getLoadingThread() const {return m_loadingThread;} SceneTree* getScene() const; @@ -79,7 +79,7 @@ private: btDiscreteDynamicsWorld* m_world; PhysicsDebugNode *m_physicsDebugNode; SparrowRenderer* m_renderer; - GuiTools* m_guiTools; + Editor* m_editor; LoadingThread* m_loadingThread; void update(); diff --git a/src/sparrowshell/scriptnode.cpp b/src/sparrowshell/scriptnode.cpp index e422bc5..017624e 100644 --- a/src/sparrowshell/scriptnode.cpp +++ b/src/sparrowshell/scriptnode.cpp @@ -9,7 +9,7 @@ #include "SparrowRenderer/Version.h" #include "SparrowSerializer/Version.h" #include "tools/utils.h" -#include "guitools.h" +#include "editor.h" #define LUA_DEFINE(var) S[#var]=var #define LUA_SET_FUN(var) m_script.set_function(#var,&ScriptNode::var,this);this->functions_name.push_back(#var); diff --git a/src/tools/scenepicker.cpp b/src/tools/scenepicker.cpp index d16b920..bbcc916 100644 --- a/src/tools/scenepicker.cpp +++ b/src/tools/scenepicker.cpp @@ -1,7 +1,7 @@ #include "scenepicker.h" #include "engine.h" -#include "guitools.h" +#include "editor.h" #include "scene/scenetree.h" #include "scene/playercharacternode.h"