summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game.cpp51
-rw-r--r--src/game.hpp4
-rw-r--r--src/main.cpp1
-rw-r--r--src/window.cpp1
-rw-r--r--src/window.hpp9
5 files changed, 62 insertions, 4 deletions
diff --git a/src/game.cpp b/src/game.cpp
index cfb6d7c..a48cbfe 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -1,8 +1,15 @@
#include "game.hpp"
+#include "imgui.h"
GameSettings pkeSettings{};
+const uint64_t consoleBufferCount = 30;
+const uint64_t consoleLineLength = 128;
+
+char consoleBuffer[consoleBufferCount][consoleLineLength];
+long consoleBufferIndex = 0;
+
void GameTick(double delta) {
/*
* ECS_Tick() gets called first because it updates the public
@@ -10,3 +17,47 @@ void GameTick(double delta) {
*/
ECS_Tick(delta);
}
+
+void RecordImGuiConsole(bool *pOpen) {
+ static bool scrollToBottom = true;
+ if (!ImGui::Begin("Console", pOpen)) {
+ ImGui::End();
+ return;
+ }
+ ImVec2 region = ImGui::GetContentRegionAvail();
+ region.y -= 27;
+ if (ImGui::BeginListBox("##ConsoleHistory", region)) {
+ for (long i = consoleBufferIndex + 1; i < consoleBufferCount; ++i) {
+ ImGui::Text("%s", consoleBuffer[i]);
+ }
+ for (long i = 0; i < consoleBufferIndex; ++i) {
+ ImGui::Text("%s", consoleBuffer[i]);
+ }
+ if (scrollToBottom) ImGui::SetScrollHereY(1);
+ scrollToBottom = false;
+ ImGui::EndListBox();
+ }
+ ImGui::Separator();
+ if (ImGui::InputText("##ConsoleInput", consoleBuffer[consoleBufferIndex], consoleLineLength, ImGuiInputTextFlags_EnterReturnsTrue)) {
+ // TODO parse and execute.
+ scrollToBottom = true;
+ consoleBufferIndex = (consoleBufferIndex + 1) % consoleBufferCount;
+ memset(consoleBuffer[consoleBufferIndex], '\0', consoleLineLength);
+ }
+ auto flags = (ImGuiFocusedFlags_ChildWindows);
+ if (ImGui::IsWindowFocused(flags) && !ImGui::IsAnyItemFocused() && !ImGui::IsMouseClicked(ImGuiMouseButton_Left) && !ImGui::IsMouseClicked(ImGuiMouseButton_Left, true)) {
+ ImGui::SetKeyboardFocusHere(-1);
+ }
+ ImGui::End();
+}
+
+void RecordImGuiEditor() {
+ RecordImGuiConsole(&pkeSettings.isShowingEditor);
+}
+
+void GameInit() {
+ for (long i = 0; i < consoleBufferCount; ++i) {
+ memset(consoleBuffer[i], '\0', consoleLineLength);
+ }
+ RegisterCallback("RenderImGui", RecordImGuiEditor);
+}
diff --git a/src/game.hpp b/src/game.hpp
index fad551b..7159e0c 100644
--- a/src/game.hpp
+++ b/src/game.hpp
@@ -4,6 +4,8 @@
#include <chrono>
#include <cstdint>
+#include "event.hpp"
+#include "imgui.h"
#include "ecs.hpp"
using GameTimeDuration = std::chrono::duration<int64_t, std::nano>;
@@ -15,6 +17,7 @@ struct GameSettings {
bool isGameRunning = true;
bool isGamePaused = false;
bool isFramerateUnlocked = true;
+ bool isShowingEditor = true;
int64_t targetFPS = 144;
int64_t minFPS = 20;
double deltaPerFrame = 1 / double(targetFPS);
@@ -23,6 +26,7 @@ struct GameSettings {
extern GameSettings pkeSettings;
+void GameInit();
void GameTick(double delta);
#endif /* PKE_GAME_HPP */
diff --git a/src/main.cpp b/src/main.cpp
index b5a0697..b99aca2 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -28,6 +28,7 @@ int main() {
printf("PKE ENTERING\n");
try {
AssetManagerInit();
+ GameInit();
ECS_Init();
CreateWindow(&windowProps);
diff --git a/src/window.cpp b/src/window.cpp
index c1bca38..63b18be 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -1009,6 +1009,7 @@ void RecordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex) {
ImGui::DockSpaceOverViewport(nullptr, ImGuiDockNodeFlags_PassthruCentralNode);
ImGui::ShowDemoWindow();
+ DispatchCabllack("RenderImGui");
ImGui::Render();
auto drawData = ImGui::GetDrawData();
diff --git a/src/window.hpp b/src/window.hpp
index a3cebf4..d9fc23f 100644
--- a/src/window.hpp
+++ b/src/window.hpp
@@ -1,8 +1,12 @@
#ifndef PKE_WINDOW_HPP
#define PKE_WINDOW_HPP
-#include "memory.hpp"
#include "asset-manager.hpp"
+#include "backends/imgui_impl_glfw.h"
+#include "backends/imgui_impl_vulkan.h"
+#include "event.hpp"
+#include "imgui.h"
+#include "memory.hpp"
#include <cstring>
#include <cstdio>
@@ -10,9 +14,6 @@
#include <cassert>
#include <GLFW/glfw3.h>
#include <vulkan/vulkan.h>
-#include "backends/imgui_impl_glfw.h"
-#include "backends/imgui_impl_vulkan.h"
-#include "imgui.h"
const unsigned int MAX_FRAMES_IN_FLIGHT = 2;