Event Handlers para Escenas y pruebas con Dear ImGui.

Se a añadido un nuevo método a las escenas que permite pasar eventos para procesarlos.
He realizado pruebas varias con Dear ImGui.
This commit is contained in:
2022-02-14 22:10:11 +01:00
parent 77d78db774
commit d19f4593d5
6 changed files with 166 additions and 5 deletions
+1
View File
@@ -92,6 +92,7 @@ void Loop()
while (SDL_PollEvent(&eventHandler) != 0)
{
ImGui_ImplSDL2_ProcessEvent(&eventHandler);
Game::GetSceneManager()->GetActiveScenePtr()->SceneHandleEvents(&eventHandler);
if (eventHandler.type == SDL_QUIT)
{
_quit = true;
+137 -2
View File
@@ -14,6 +14,8 @@
#include <vector>
#include <SDL.h>
#include <ImGui\imgui.h>
class MainScene : public UE::Scene
{
public:
@@ -63,21 +65,154 @@ public:
UE::Renderer* renderer;
renderer = Game::GetRenderer();
for (UE::Sprite sp : sprites)
for (UE::Sprite& sp : sprites)
{
renderer->Render(sp);
//Si el obj. no está activo, lo saltamos.
if (sp.IsActive())
{
renderer->Render(sp);
}
}
ImguiRender();
}
void SceneHandleEvents(SDL_Event* event)
{
if (event->type == SDL_KEYDOWN)
{
switch (event->key.keysym.sym)
{
case SDLK_p:
sprites.at(_selectedSprite).SetActive(false);
break;
case SDLK_o:
sprites.at(_selectedSprite).SetActive(true);
break;
case SDLK_i:
{
sprites.at(_selectedSprite).SetSize(125, 185);
break;
}
case SDLK_F2:
debugGUI = !debugGUI;
default:
break;
}
}
}
void SceneUnload() override
{
UE_LOG_INFO("Escena {0} se ha descargado.", _sceneName);
sprites.clear();
}
private:
void ImguiRender()
{
ImGui::Begin("DEBUG Stuff", &debugGUI);
ImGui::Checkbox("AssetManager Inspector: ", &assetMngGUI);
ImGui::Checkbox("Renderer Inspector: ", &rendererGUI);
ImGui::Checkbox("SceneManager Inspector: ", &sceneMngGUI);
ImGui::End();
if (debugGUI) { TestGUI(); }
if(assetMngGUI) {}
}
void TestGUI()
{
ImGui::Begin("MainScene Test Stuff", &_windowOpen);
ImGui::Text("En esta escena, hacemos pruebas del funcionamiento de UberEngine.");
//ImVec4 buttonColor;
//if(ImGui::ColorEdit4("TestColor", &buttonColor.x)) {}
ImGui::Text("Elementos del vector Sprites: ");
if (ImGui::TreeNode("Sprites"))
{
//Generamos un Selectable para cada Sprite en el vector.
for (int i = 0; i < sprites.size(); i++)
{
//Creamos el texto.
char buf[32];
sprintf(buf, "Sprite %d", i);
if (ImGui::Selectable(buf, _selectedSprite == i))
{
_selectedSprite = i;
}
}
ImGui::TreePop();
}
if (ImGui::TreeNode("Selected Sprite Settings"))
{
if (_selectedSprite != -1)
{
UE::Sprite& sp = sprites.at(_selectedSprite);
ImGui::Text("Status: ");
const char* st = (sp.IsActive() ? "Sprite Activado" : "Sprite Desactivado");
ImGui::Text("El Sprite esta: %s", st);
if (ImGui::Button("Activar Sprite")) { sp.SetActive(true); }
ImGui::SameLine();
if (ImGui::Button("desactivar Sprite")) { sp.SetActive(false); }
ImGui::Text("Transform: ");
glm::vec2 pos = sp.GetPosition();
glm::vec2 size = sp.GetSize();
if (ImGui::SliderFloat2("Sprite Position", &pos.x, -5000, 5000))
{
sp.SetPosition(pos);
}
if (ImGui::SliderFloat2("Sprite Size", &size.x, -2000, 2000))
{
sp.SetSize(size);
}
ImGui::Text("Rendering: ");
ImGui::Text("El sprite esta en la layer: %d", sp.GetLayer());
//Añadir un input para modificar la layer.
}
ImGui::TreePop();
}
ImGui::End();
}
void AssetMngGUI()
{
UE::AssetManager* asmng = Game::GetAssetManager();
ImGui::Begin("Asset Manager Inspector", &assetMngGUI);
ImGui::End();
}
private:
std::vector<UE::Sprite> sprites;
//ImGui:
bool _windowOpen = true;
int _selectedSprite = 0;
bool debugGUI = false;
bool assetMngGUI = false;
bool rendererGUI = false;
bool sceneMngGUI = false;
};