New game works almost as intended, quest system
This commit is contained in:
@@ -26,6 +26,7 @@
|
||||
#include "CharacterManagerModule.h"
|
||||
#include "items.h"
|
||||
#include "physics.h"
|
||||
#include "QuestModule.h"
|
||||
#include "GUIModule.h"
|
||||
#include "GUIModuleCommon.h"
|
||||
namespace ECS
|
||||
@@ -60,13 +61,6 @@ struct GUIListener : public Ogre::RenderTargetListener {
|
||||
bigFont = ECS::get<GUIData>().mGuiOverlay->addFont("bigFont",
|
||||
"General");
|
||||
OgreAssert(bigFont, "Could not load font");
|
||||
#if 0
|
||||
Ogre::FontPtr _midFont = createFont("midFont", "General",
|
||||
"Kenney Bold.ttf", 28.0f);
|
||||
#endif
|
||||
#if 0
|
||||
ImGui::GetIO().Fonts->Build();
|
||||
#endif
|
||||
}
|
||||
Ogre::FontPtr createFont(const Ogre::String &name,
|
||||
const Ogre::String &group,
|
||||
@@ -100,8 +94,6 @@ struct GUIListener : public Ogre::RenderTargetListener {
|
||||
ImGui::SetNextWindowSize(ImVec2(window_width, window_height),
|
||||
ImGuiCond_Always);
|
||||
ImGui::Begin("Control");
|
||||
// if (ECS::get().get<GUI>().enabled)
|
||||
// ECS::get().get<App>().app->setWindowGrab(true);
|
||||
if (ImGui::Button("Quit"))
|
||||
Ogre::Root::getSingleton().queueEndRendering();
|
||||
if (ImGui::Button("Return"))
|
||||
@@ -251,11 +243,15 @@ struct GUIListener : public Ogre::RenderTargetListener {
|
||||
{
|
||||
int i;
|
||||
Ogre::ImGuiOverlay::NewFrame();
|
||||
if (ECS::get().get<EngineData>().startupDelay > 0.0f) {
|
||||
|
||||
if (ECS::get().get<EngineData>().startupDelay > 0.0f &&
|
||||
ECS::get().has<GameState>()) {
|
||||
ImVec2 size = ImGui::GetMainViewport()->Size;
|
||||
ImGui::SetNextWindowPos(ImVec2(0, 0), ImGuiCond_Always);
|
||||
ImGui::SetNextWindowSize(ImVec2(size.x, size.y),
|
||||
ImGuiCond_Always);
|
||||
ImVec4 solidColor = ImVec4(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
ImGui::PushStyleColor(ImGuiCol_WindowBg, solidColor);
|
||||
ImGui::Begin(
|
||||
"StartupScreen", nullptr,
|
||||
ImGuiWindowFlags_NoTitleBar |
|
||||
@@ -274,6 +270,7 @@ struct GUIListener : public Ogre::RenderTargetListener {
|
||||
"This game does not autosave. Please use save function to keep your state");
|
||||
ImGui::PopFont();
|
||||
ImGui::End();
|
||||
ImGui::PopStyleColor();
|
||||
} else if (ECS::get<GUI>().narrationHandlers.size() > 0) {
|
||||
ECS::get_mut<GUI>().grab = false;
|
||||
ECS::get_mut<GUI>().grabChanged = true;
|
||||
@@ -376,9 +373,14 @@ struct GUIListener : public Ogre::RenderTargetListener {
|
||||
ImVec2 size = ImGui::GetMainViewport()->Size;
|
||||
ImGui::SetNextWindowPos(ImVec2(0, 0),
|
||||
ImGuiCond_Always);
|
||||
ImGui::SetNextWindowSize(ImVec2(size.x, size.y),
|
||||
ImGui::SetNextWindowSize(ImVec2(size.x + 4,
|
||||
size.y + 1),
|
||||
ImGuiCond_Always);
|
||||
ImGui::Begin(
|
||||
ImVec4 solidColor =
|
||||
ImVec4(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
ImGui::PushStyleColor(ImGuiCol_WindowBg,
|
||||
solidColor);
|
||||
ImGui::Begin(
|
||||
"MainMenu", nullptr,
|
||||
ImGuiWindowFlags_NoTitleBar |
|
||||
ImGuiWindowFlags_NoDecoration |
|
||||
@@ -388,8 +390,6 @@ struct GUIListener : public Ogre::RenderTargetListener {
|
||||
ImGuiWindowFlags_NoCollapse |
|
||||
ImGuiWindowFlags_NoFocusOnAppearing |
|
||||
0);
|
||||
// if (ECS::get().get<GUI>().enabled)
|
||||
// ECS::get().get<App>().app->setWindowGrab(true);
|
||||
ImGui::PushFont(bigFont);
|
||||
ImGui::TextWrapped("%s", "Booo!!!!");
|
||||
bool pressed = false;
|
||||
@@ -412,16 +412,22 @@ struct GUIListener : public Ogre::RenderTargetListener {
|
||||
ImGui::PopFont();
|
||||
ImGui::Spacing();
|
||||
ImGui::End();
|
||||
if (quit)
|
||||
ImGui::PopStyleColor();
|
||||
if (quit)
|
||||
Ogre::Root::getSingleton()
|
||||
.queueEndRendering();
|
||||
if (pressed)
|
||||
ECS::get().get<GUI>().finish();
|
||||
if (new_game) {
|
||||
ECS::get<LuaBase>().mLua->call_handler(
|
||||
"new_game");
|
||||
}
|
||||
} else {
|
||||
ECS::get().set<GameState>({ true });
|
||||
ECS::get<LuaBase>().mLua->call_handler(
|
||||
"new_game_selected");
|
||||
} else if (load_game) {
|
||||
ECS::get().set<GameState>({ true });
|
||||
ECS::get<LuaBase>().mLua->call_handler(
|
||||
"load_game_selected");
|
||||
}
|
||||
} else {
|
||||
buttons_panel();
|
||||
if (enableEditor)
|
||||
buildings_editor();
|
||||
@@ -439,7 +445,6 @@ struct GUIListener : public Ogre::RenderTargetListener {
|
||||
ImGui::SetNextWindowSize(ImVec2(window_width,
|
||||
window_height),
|
||||
ImGuiCond_Always);
|
||||
// ImGui::Begin("Dumb and Stupid", &mKbd.gui_active);
|
||||
ImGui::Begin("Panel...");
|
||||
std::deque<Ogre::SceneNode *> tree_input_queue,
|
||||
tree_output_queue;
|
||||
@@ -645,41 +650,6 @@ struct GUIListener : public Ogre::RenderTargetListener {
|
||||
.action_text
|
||||
.c_str());
|
||||
}
|
||||
#if 0
|
||||
ImGui::SetNextWindowPos(
|
||||
ImVec2(screenPos.x,
|
||||
screenPos.y),
|
||||
ImGuiCond_Always,
|
||||
ImVec2(0.5f, 0.5f));
|
||||
ImGui::Begin(
|
||||
("SensorLabel##" +
|
||||
Ogre::StringConverter::toString(
|
||||
p))
|
||||
.c_str(),
|
||||
nullptr,
|
||||
ImGuiWindowFlags_NoBackground |
|
||||
ImGuiWindowFlags_NoTitleBar |
|
||||
ImGuiWindowFlags_AlwaysAutoResize |
|
||||
ImGuiWindowFlags_NoInputs);
|
||||
ImDrawList *drawList =
|
||||
ImGui::GetWindowDrawList();
|
||||
ImVec2 cursor =
|
||||
ImGui::GetCursorScreenPos();
|
||||
drawList->AddCircleFilled(
|
||||
ImVec2(cursor.x, cursor.y),
|
||||
16.0f,
|
||||
IM_COL32(0, 0, 255, 255));
|
||||
drawList->AddCircle(
|
||||
ImVec2(cursor.x, cursor.y),
|
||||
16.0f,
|
||||
IM_COL32(32, 32, 255, 255));
|
||||
|
||||
ImGui::TextColored(
|
||||
ImVec4(1, 0, 0, 1), "%s",
|
||||
list.nodes[p]
|
||||
.action_text.c_str());
|
||||
ImGui::End();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -690,13 +660,14 @@ GUIModule::GUIModule(flecs::world &ecs)
|
||||
{
|
||||
ecs.module<GUIModule>();
|
||||
ecs.import <AppModule>();
|
||||
ecs.import <QuestModule>();
|
||||
ecs.component<GUI>()
|
||||
.on_add([](GUI &gui) {
|
||||
gui.enabled = false;
|
||||
gui.grab = false;
|
||||
gui.grabChanged = false;
|
||||
gui.enableActions = true;
|
||||
})
|
||||
})
|
||||
.add(flecs::Singleton);
|
||||
ecs.component<GUIData>()
|
||||
.on_add([](GUIData &priv) {
|
||||
@@ -705,51 +676,39 @@ GUIModule::GUIModule(flecs::world &ecs)
|
||||
priv.mGuiOverlay = nullptr;
|
||||
})
|
||||
.add(flecs::Singleton);
|
||||
ecs.set<GUI>({ false, true, false, false, false, true, "", {}, -1 });
|
||||
ecs.set<GUIData>({ nullptr, {}, nullptr });
|
||||
ui_wait =
|
||||
ecs.system<const RenderWindow, App, GUIData>("SetupGUI")
|
||||
.kind(flecs::OnUpdate)
|
||||
.each([this](const RenderWindow &window, App &app,
|
||||
GUIData &gui) {
|
||||
if (!gui.mGuiOverlay) {
|
||||
float vpScale =
|
||||
window.dpi / 96 *
|
||||
window.window->getWidth() /
|
||||
1600.0f;
|
||||
Ogre::OverlayManager::getSingleton()
|
||||
.setPixelRatio(vpScale);
|
||||
std::cout << "GUI configure\n";
|
||||
OgreAssert(app.mGuiOverlay,
|
||||
"No ImGUI overlay");
|
||||
gui.mGuiOverlay = app.mGuiOverlay;
|
||||
gui.mGUIListener = new GUIListener();
|
||||
gui.mGuiOverlay->setZOrder(300);
|
||||
gui.mGuiOverlay->show();
|
||||
gui.mGUIListener->panel_width = 300.0f;
|
||||
gui.mGUIListener->enableEditor = false;
|
||||
window.window->addListener(
|
||||
gui.mGUIListener);
|
||||
int i;
|
||||
}
|
||||
|
||||
const std::vector<Ogre::String> &groups =
|
||||
Ogre::ResourceGroupManager::
|
||||
getSingleton()
|
||||
.getResourceGroups();
|
||||
for (i = 0; i < groups.size(); i++) {
|
||||
std::vector<Ogre::String> names =
|
||||
*Ogre::ResourceGroupManager::getSingleton()
|
||||
.findResourceNames(
|
||||
groups[i],
|
||||
"*.glb");
|
||||
gui.glb_names.insert(
|
||||
gui.glb_names.end(),
|
||||
names.begin(),
|
||||
names.end());
|
||||
}
|
||||
ECS::modified<ECS::GUI>();
|
||||
std::cout << "GUI configure finished\n";
|
||||
}
|
||||
});
|
||||
void GUIModule::configure()
|
||||
{
|
||||
ECS::get().set<GUIData>({ nullptr, {}, nullptr });
|
||||
const RenderWindow &window = ECS::get<RenderWindow>();
|
||||
GUIData &gui = ECS::get_mut<GUIData>();
|
||||
const App &app = ECS::get<App>();
|
||||
if (gui.mGuiOverlay)
|
||||
return;
|
||||
float vpScale = window.dpi / 96 * window.window->getWidth() / 1600.0f;
|
||||
Ogre::OverlayManager::getSingleton().setPixelRatio(vpScale);
|
||||
std::cout << "GUI configure\n";
|
||||
OgreAssert(app.mGuiOverlay, "No ImGUI overlay");
|
||||
gui.mGuiOverlay = app.mGuiOverlay;
|
||||
gui.mGUIListener = new GUIListener();
|
||||
gui.mGuiOverlay->setZOrder(300);
|
||||
gui.mGuiOverlay->show();
|
||||
gui.mGUIListener->panel_width = 300.0f;
|
||||
gui.mGUIListener->enableEditor = false;
|
||||
window.window->addListener(gui.mGUIListener);
|
||||
int i;
|
||||
|
||||
const std::vector<Ogre::String> &groups =
|
||||
Ogre::ResourceGroupManager::getSingleton().getResourceGroups();
|
||||
for (i = 0; i < groups.size(); i++) {
|
||||
std::vector<Ogre::String> names =
|
||||
*Ogre::ResourceGroupManager::getSingleton()
|
||||
.findResourceNames(groups[i], "*.glb");
|
||||
gui.glb_names.insert(gui.glb_names.end(), names.begin(),
|
||||
names.end());
|
||||
}
|
||||
ECS::modified<GUIData>();
|
||||
std::cout << "GUI configure finished\n";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user