From dc292a35540b4c03cff5e8a80a8c58f10a719d6e Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Sat, 5 Aug 2023 23:42:21 -0500 Subject: [PATCH] Active windowing systems and menu navigation combined. --- FiestaOnlineEditor/FiestaOnlineEditor.cpp | 51 ++++++++++++++++------- FiestaOnlineEditor/FiestaOnlineEditor.h | 1 + 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/FiestaOnlineEditor/FiestaOnlineEditor.cpp b/FiestaOnlineEditor/FiestaOnlineEditor.cpp index 4bb050b..b4b39e7 100644 --- a/FiestaOnlineEditor/FiestaOnlineEditor.cpp +++ b/FiestaOnlineEditor/FiestaOnlineEditor.cpp @@ -116,14 +116,22 @@ bool FiestaOnlineEditor::OnUserUpdate(float fElapsedTime){ ItemEditor*itemEditor=new ItemEditor(this,"Item Editor: "+config["DefaultPath"].GetString(),{32,32},GetScreenSize()-vi2d{64,64}); CreateWindow(itemEditor); itemEditor->Load(config["DefaultPath"].GetString()); - itemEditor=new ItemEditor(this,"Item Editor: "+config["DefaultPath"].GetString(),{0,0},GetScreenSize()-vi2d{64,64}); - CreateWindow(itemEditor); - itemEditor->Load(config["DefaultPath"].GetString()); + manager.Close(); + menuOpened=false; }break; } } } + if(GetKey(ESCAPE).bPressed&&!menuOpened){ + menuOpened=true; + manager.Open(&menu); + }else + if(GetKey(ESCAPE).bPressed&&menuOpened){ + menuOpened=false; + manager.Close(); + } + SetDrawTarget(1); Clear(olc::VERY_DARK_CYAN); @@ -133,28 +141,39 @@ bool FiestaOnlineEditor::OnUserUpdate(float fElapsedTime){ //BACKGROUND DRAWING bool internalMouseFocus=false; - for(Window*w:windows){ if(!w->IsFocusedWindow()){ - SetDrawTarget(1); - } else { - SetDrawTarget(nullptr); - if(w->IsInBounds(GetMousePos())){ - w->InternalMouseFocus(this); - w->MouseFocus(this); - internalMouseFocus=true; + if(!menuOpened){ + w->InternalUpdate(this,fElapsedTime); } + w->Draw(this); } - w->InternalUpdate(this,fElapsedTime); - w->Draw(this); } - if(!internalMouseFocus){ - for(Window*w:windows){ //A second iteration through the windows because windows without focus should only have priority after a window with focus. - if(!w->IsFocusedWindow()){ + for(Window*w:windows){ + if(w->IsFocusedWindow()){ + if(!menuOpened){ if(w->IsInBounds(GetMousePos())){ w->InternalMouseFocus(this); w->MouseFocus(this); + internalMouseFocus=true; + } + } + if(!menuOpened){ + w->InternalUpdate(this,fElapsedTime); + } + w->Draw(this); + } + } + + if(!menuOpened){ + if(!internalMouseFocus){ + for(Window*w:windows){ //A second iteration through the windows because windows without focus should only have priority after a window with focus. + if(!w->IsFocusedWindow()){ + if(w->IsInBounds(GetMousePos())){ + w->InternalMouseFocus(this); + w->MouseFocus(this); + } } } } diff --git a/FiestaOnlineEditor/FiestaOnlineEditor.h b/FiestaOnlineEditor/FiestaOnlineEditor.h index cbf4423..2b0e25c 100644 --- a/FiestaOnlineEditor/FiestaOnlineEditor.h +++ b/FiestaOnlineEditor/FiestaOnlineEditor.h @@ -18,6 +18,7 @@ class FiestaOnlineEditor : public olc::PixelGameEngine State appState=LOADFOLDER; utils::datafile config; std::vectorwindows; + bool menuOpened=false; public: FiestaOnlineEditor();