Browse Source

will probably forget about cout

vlod 3 years ago
parent
commit
55f5f5533e

+ 2 - 2
Pika/core/pikaEditor/editor/editor.cpp

@@ -19,7 +19,7 @@
 #define TRANSPARENT_EDITOR_WINDOW ICON_FK_EYE "Transparent Editor window"
 #define TRANSPARENT_EDITOR_WINDOW ICON_FK_EYE "Transparent Editor window"
 #define CONSOLE_WINDOW ICON_FK_TERMINAL "Console window"
 #define CONSOLE_WINDOW ICON_FK_TERMINAL "Console window"
 
 
-void pika::Editor::init(pika::ShortcutManager &shortcutManager, pika::pikaImgui::ImGuiIdsManager &imguiIDManager, std::streambuf *buffer)
+void pika::Editor::init(pika::ShortcutManager &shortcutManager, pika::pikaImgui::ImGuiIdsManager &imguiIDManager)
 {
 {
 
 
 	shortcutManager.registerShortcut(DOCK_MAIN_WINDOW_SHORTCUT, "Ctrl+Alt+D", &optionsFlags.hideMainWindow);
 	shortcutManager.registerShortcut(DOCK_MAIN_WINDOW_SHORTCUT, "Ctrl+Alt+D", &optionsFlags.hideMainWindow);
@@ -35,7 +35,7 @@ void pika::Editor::init(pika::ShortcutManager &shortcutManager, pika::pikaImgui:
 	logWindow.init(imguiIDManager);
 	logWindow.init(imguiIDManager);
 	editShortcutsWindow.init(imguiIDManager);
 	editShortcutsWindow.init(imguiIDManager);
 	containersWindow.init(imguiIDManager);
 	containersWindow.init(imguiIDManager);
-	consoleWindow.init(imguiIDManager, buffer);
+	consoleWindow.init(imguiIDManager);
 	
 	
 	if (sfs::safeLoad(&optionsFlags, sizeof(optionsFlags), PIKA_ENGINE_SAVES_PATH "options", false) != sfs::noError)
 	if (sfs::safeLoad(&optionsFlags, sizeof(optionsFlags), PIKA_ENGINE_SAVES_PATH "options", false) != sfs::noError)
 	{
 	{

+ 1 - 2
Pika/core/pikaEditor/editor/editor.h

@@ -20,8 +20,7 @@ namespace pika
 	struct Editor
 	struct Editor
 	{
 	{
 
 
-		void init(pika::ShortcutManager &shortcutManager, pika::pikaImgui::ImGuiIdsManager &imguiIDManager,
-			std::streambuf *buffer);
+		void init(pika::ShortcutManager &shortcutManager, pika::pikaImgui::ImGuiIdsManager &imguiIDManager);
 
 
 		void update(const pika::Input &input, pika::ShortcutManager &shortcutManager
 		void update(const pika::Input &input, pika::ShortcutManager &shortcutManager
 			,pika::LogManager &logs, pika::PushNotificationManager &pushNotificationManager,
 			,pika::LogManager &logs, pika::PushNotificationManager &pushNotificationManager,

+ 4 - 5
Pika/core/pikaEditor/pikaConsoleManager/pikaConsoleWindow.cpp

@@ -6,21 +6,20 @@ namespace pika
 {
 {
 
 
 
 
-	void ConsoleWindow::init(pika::pikaImgui::ImGuiIdsManager &idManager, std::streambuf *buffer)
+	void ConsoleWindow::init(pika::pikaImgui::ImGuiIdsManager &idManager)
 	{
 	{
-		this->buffer = buffer;
 		imguiId = idManager.getImguiIds();
 		imguiId = idManager.getImguiIds();
+		s.reserve(4000);
 	}
 	}
 
 
 	void ConsoleWindow::update(pika::LogManager &logManager, bool &open)
 	void ConsoleWindow::update(pika::LogManager &logManager, bool &open)
 	{
 	{
-		PIKA_DEVELOPMENT_ONLY_ASSERT(buffer, "invalid buffer");
 
 
 		//s += buffer->get;
 		//s += buffer->get;
 		//*buffer = std::streambuf();
 		//*buffer = std::streambuf();
 
 
-		s += std::string{(std::istreambuf_iterator<char>(buffer)),
-			std::istreambuf_iterator<char>()};
+		//s += std::string{(std::istreambuf_iterator<char>(buffer)),
+		//	std::istreambuf_iterator<char>()};
 
 
 		constexpr int SIZE = 3000; //todo
 		constexpr int SIZE = 3000; //todo
 		
 		

+ 1 - 2
Pika/core/pikaEditor/pikaConsoleManager/pikaConsoleWindow.h

@@ -8,7 +8,7 @@ namespace pika
 	struct ConsoleWindow
 	struct ConsoleWindow
 	{
 	{
 
 
-		void init(pika::pikaImgui::ImGuiIdsManager &idManager, std::streambuf *buffer);
+		void init(pika::pikaImgui::ImGuiIdsManager &idManager);
 
 
 		void update(pika::LogManager &logManager, bool &open);
 		void update(pika::LogManager &logManager, bool &open);
 
 
@@ -18,7 +18,6 @@ namespace pika
 
 
 		int imguiId = 0;
 		int imguiId = 0;
 
 
-		std::streambuf *buffer = 0;
 		std::string s;
 		std::string s;
 	};
 	};
 
 

+ 21 - 11
Pika/core/pikaRuntime/containerManager/containerManager.cpp

@@ -10,6 +10,7 @@
 #include <stringManipulation/stringManipulation.h>
 #include <stringManipulation/stringManipulation.h>
 #include <filesystem>
 #include <filesystem>
 #include <imgui.h>
 #include <imgui.h>
+#include <containersWindow/containersWindow.h>
 
 
 pika::containerId_t pika::ContainerManager::createContainer(std::string containerName, 
 pika::containerId_t pika::ContainerManager::createContainer(std::string containerName, 
 	pika::LoadedDll &loadedDll, pika::LogManager &logManager, 
 	pika::LoadedDll &loadedDll, pika::LogManager &logManager, 
@@ -241,7 +242,7 @@ void pika::ContainerManager::init()
 }
 }
 
 
 void pika::ContainerManager::update(pika::LoadedDll &loadedDll, pika::PikaWindow &window,
 void pika::ContainerManager::update(pika::LoadedDll &loadedDll, pika::PikaWindow &window,
-	pika::LogManager &logs, pika::pikaImgui::ImGuiIdsManager &imguiIdManager, std::streambuf *consoleBuffer)
+	pika::LogManager &logs, pika::pikaImgui::ImGuiIdsManager &imguiIdManager, pika::ConsoleWindow *console)
 {
 {
 	PIKA_DEVELOPMENT_ONLY_ASSERT(loadedDll.dllHand != 0, "dll not loaded when trying to update containers");
 	PIKA_DEVELOPMENT_ONLY_ASSERT(loadedDll.dllHand != 0, "dll not loaded when trying to update containers");
 
 
@@ -252,8 +253,7 @@ void pika::ContainerManager::update(pika::LoadedDll &loadedDll, pika::PikaWindow
 
 
 	if (loadedDll.shouldReloadDll())
 	if (loadedDll.shouldReloadDll())
 	{
 	{
-		reloadDll(loadedDll, window, logs, consoleBuffer); //todo return 0 on fail
-		consoleBuffer = loadedDll.getConsoleBuffer_();
+		reloadDll(loadedDll, window, logs); //todo return 0 on fail
 
 
 		//todo mark shouldCallReaload or just call reload
 		//todo mark shouldCallReaload or just call reload
 		
 		
@@ -367,6 +367,21 @@ void pika::ContainerManager::update(pika::LoadedDll &loadedDll, pika::PikaWindow
 			constexpr bool isProduction = 0;
 			constexpr bool isProduction = 0;
 		#endif
 		#endif
 
 
+			auto callUpdate = [&](pika::WindowState &windowState)
+			{
+
+				std::stringstream buf;
+
+				loadedDll.bindAllocatorDllRealm(&c.second.allocator);
+				{
+					loadedDll.setConsoleBuffer_(buf.rdbuf());
+					c.second.pointer->update(windowInput, windowState, c.second.requestedContainerInfo);
+					loadedDll.setConsoleBuffer_(nullptr); //reset console buffer
+					
+				}
+				loadedDll.resetAllocatorDllRealm();
+			};
+
 			if (c.second.imguiWindowId && !isProduction)
 			if (c.second.imguiWindowId && !isProduction)
 			{
 			{
 
 
@@ -396,18 +411,14 @@ void pika::ContainerManager::update(pika::LoadedDll &loadedDll, pika::PikaWindow
 
 
 				glBindFramebuffer(GL_FRAMEBUFFER, c.second.requestedContainerInfo.requestedFBO.fbo);
 				glBindFramebuffer(GL_FRAMEBUFFER, c.second.requestedContainerInfo.requestedFBO.fbo);
 
 
-				loadedDll.bindAllocatorDllRealm(&c.second.allocator);
-				c.second.pointer->update(windowInput, windowState, c.second.requestedContainerInfo);
-				loadedDll.resetAllocatorDllRealm();
+				callUpdate(windowState);
 
 
 				glBindFramebuffer(GL_FRAMEBUFFER, 0);
 				glBindFramebuffer(GL_FRAMEBUFFER, 0);
 
 
 			}
 			}
 			else
 			else
 			{
 			{
-				loadedDll.bindAllocatorDllRealm(&c.second.allocator);
-				c.second.pointer->update(windowInput, window.windowState, c.second.requestedContainerInfo);
-				loadedDll.resetAllocatorDllRealm();
+				callUpdate(window.windowState);
 			}
 			}
 
 
 
 
@@ -422,8 +433,7 @@ void pika::ContainerManager::update(pika::LoadedDll &loadedDll, pika::PikaWindow
 
 
 }
 }
 
 
-void pika::ContainerManager::reloadDll(pika::LoadedDll &loadedDll, pika::PikaWindow &window, pika::LogManager &logs,
-	std::streambuf *consoleBuffer)
+void pika::ContainerManager::reloadDll(pika::LoadedDll &loadedDll, pika::PikaWindow &window, pika::LogManager &logs)
 {
 {
 
 
 	std::this_thread::sleep_for(std::chrono::milliseconds(200)); // make sure that the compiler had enough time 
 	std::this_thread::sleep_for(std::chrono::milliseconds(200)); // make sure that the compiler had enough time 

+ 3 - 3
Pika/core/pikaRuntime/containerManager/containerManager.h

@@ -11,6 +11,7 @@
 #include <windowSystemm/window.h>
 #include <windowSystemm/window.h>
 
 
 #include <pikaImgui/pikaImgui.h>
 #include <pikaImgui/pikaImgui.h>
+#include <pikaConsoleManager/pikaConsoleWindow.h>
 
 
 namespace pika
 namespace pika
 {
 {
@@ -55,12 +56,11 @@ namespace pika
 			pika::PikaWindow &window,
 			pika::PikaWindow &window,
 			pika::LogManager &logs,
 			pika::LogManager &logs,
 			pika::pikaImgui::ImGuiIdsManager &imguiIdManager,
 			pika::pikaImgui::ImGuiIdsManager &imguiIdManager,
-			std::streambuf *consoleBuffer);
+			pika::ConsoleWindow *console);
 
 
 		void reloadDll(pika::LoadedDll &loadedDll,
 		void reloadDll(pika::LoadedDll &loadedDll,
 			pika::PikaWindow &window,
 			pika::PikaWindow &window,
-			pika::LogManager &logs,
-			std::streambuf *consoleBuffer);
+			pika::LogManager &logs);
 
 
 		bool destroyContainer(containerId_t id, pika::LoadedDll &loadedDll,
 		bool destroyContainer(containerId_t id, pika::LoadedDll &loadedDll,
 			pika::LogManager &logManager);
 			pika::LogManager &logManager);

+ 3 - 3
Pika/core/pikaRuntime/dllLoader/dllLoader.cpp

@@ -141,7 +141,7 @@ bool pika::LoadedDll::loadDll(int id, pika::LogManager &logs)
 	bindAllocator_ = (bindAllocator_t *)GetProcAddress(dllHand, "bindAllocator");
 	bindAllocator_ = (bindAllocator_t *)GetProcAddress(dllHand, "bindAllocator");
 	resetAllocator_ = (resetAllocator_t *)GetProcAddress(dllHand, "resetAllocator");
 	resetAllocator_ = (resetAllocator_t *)GetProcAddress(dllHand, "resetAllocator");
 	dissableAllocators_ = (dissableAllocators_t *)GetProcAddress(dllHand, "dissableAllocators");
 	dissableAllocators_ = (dissableAllocators_t *)GetProcAddress(dllHand, "dissableAllocators");
-	getConsoleBuffer_ = (getConsoleBuffer_t *)GetProcAddress(dllHand, "getConsoleBuffer");
+	setConsoleBuffer_ = (setConsoleBuffer_t *)GetProcAddress(dllHand, "setConsoleBuffer");
 
 
 	if (!gameplayStart_) { return false; }
 	if (!gameplayStart_) { return false; }
 	if (!gameplayReload_) { return false; }
 	if (!gameplayReload_) { return false; }
@@ -151,7 +151,7 @@ bool pika::LoadedDll::loadDll(int id, pika::LogManager &logs)
 	if (!bindAllocator_) { return false; }
 	if (!bindAllocator_) { return false; }
 	if (!resetAllocator_) { return false; }
 	if (!resetAllocator_) { return false; }
 	if (!dissableAllocators_) { return false; }
 	if (!dissableAllocators_) { return false; }
-	if (!getConsoleBuffer_) { return false; }
+	if (!setConsoleBuffer_) { return false; }
 
 
 	//get container info
 	//get container info
 	getContainerInfoAndCheck(logs);
 	getContainerInfoAndCheck(logs);
@@ -262,7 +262,7 @@ bool pika::LoadedDll::loadDll(int id, pika::LogManager &logs)
 	bindAllocator_ = bindAllocator;
 	bindAllocator_ = bindAllocator;
 	resetAllocator_ = resetAllocator;
 	resetAllocator_ = resetAllocator;
 	dissableAllocators_ = dissableAllocators;
 	dissableAllocators_ = dissableAllocators;
-	getConsoleBuffer_ = getConsoleBuffer;
+	setConsoleBuffer_ = setConsoleBuffer;
 	getContainerInfoAndCheck(logs);
 	getContainerInfoAndCheck(logs);
 	this->id = id;
 	this->id = id;
 
 

+ 4 - 4
Pika/core/pikaRuntime/dllLoader/dllLoader.h

@@ -43,9 +43,9 @@ typedef RESETALLOCATOR(resetAllocator_t)
 typedef DISSABLEALLOCATORS(dissableAllocators_t)
 typedef DISSABLEALLOCATORS(dissableAllocators_t)
 #undef DISSABLEALLOCATORS
 #undef DISSABLEALLOCATORS
 
 
-#define GETCONSOLEBUFFER(x) std::streambuf * x();
-typedef GETCONSOLEBUFFER(getConsoleBuffer_t)
-#undef GETCONSOLEBUFFER
+#define SETCONSOLEBUFFER(x) void x(std::streambuf *buf);
+typedef SETCONSOLEBUFFER(setConsoleBuffer_t)
+#undef SETCONSOLEBUFFER
 
 
 
 
 
 
@@ -69,7 +69,7 @@ struct LoadedDll
 	bindAllocator_t *bindAllocator_ = {};
 	bindAllocator_t *bindAllocator_ = {};
 	resetAllocator_t *resetAllocator_ = {};
 	resetAllocator_t *resetAllocator_ = {};
 	dissableAllocators_t *dissableAllocators_ = {};
 	dissableAllocators_t *dissableAllocators_ = {};
-	getConsoleBuffer_t *getConsoleBuffer_ = {};
+	setConsoleBuffer_t *setConsoleBuffer_ = {};
 
 
 #ifdef PIKA_WINDOWS
 #ifdef PIKA_WINDOWS
 	FILETIME filetime = {};
 	FILETIME filetime = {};

+ 7 - 8
Pika/core/pikaRuntime/pikaMain.cpp

@@ -52,7 +52,7 @@ int main()
 #pragma region Console
 #pragma region Console
 
 
 	
 	
-#ifdef PIKA_DEVELOPMENT
+#if !(PIKA_SHOULD_REMOVE_EDITOR)
 	//internal console
 	//internal console
 
 
 	{
 	{
@@ -70,6 +70,7 @@ int main()
 #else
 #else
 	//normal console if enabeled
 	//normal console if enabeled
 #if defined(PIKA_WINDOWS)
 #if defined(PIKA_WINDOWS)
+#ifdef PIKA_PRODUCTION
 #if PIKA_ENABLE_CONSOLE_IN_PRODUCTION
 #if PIKA_ENABLE_CONSOLE_IN_PRODUCTION
 	{
 	{
 		AllocConsole();
 		AllocConsole();
@@ -88,6 +89,7 @@ int main()
 #endif
 #endif
 #endif
 #endif
 #endif
 #endif
+#endif
 
 
 
 
 #pragma endregion
 #pragma endregion
@@ -163,9 +165,8 @@ int main()
 #if !PIKA_SHOULD_REMOVE_EDITOR
 #if !PIKA_SHOULD_REMOVE_EDITOR
 	pika::Editor editor; 
 	pika::Editor editor; 
 	
 	
-	std::streambuf *consoleBuffer = loadedDll.getConsoleBuffer_();
 
 
-	editor.init(shortcutManager, imguiIdsManager, consoleBuffer);
+	editor.init(shortcutManager, imguiIdsManager);
 #endif
 #endif
 #pragma endregion
 #pragma endregion
 
 
@@ -222,14 +223,12 @@ int main()
 		if (editor.shouldReloadDll)
 		if (editor.shouldReloadDll)
 		{
 		{
 			editor.shouldReloadDll = false;
 			editor.shouldReloadDll = false;
-			consoleBuffer = loadedDll.getConsoleBuffer_();
-			containerManager.reloadDll(loadedDll, window, logs, consoleBuffer);
+			containerManager.reloadDll(loadedDll, window, logs);
 		}
 		}
 	#endif
 	#endif
 
 
-	#ifdef PIKA_DEVELOPMENT
-		containerManager.update(loadedDll, window, logs, imguiIdsManager, consoleBuffer);
-		consoleBuffer = loadedDll.getConsoleBuffer_();
+	#if !PIKA_SHOULD_REMOVE_EDITOR
+		containerManager.update(loadedDll, window, logs, imguiIdsManager, &editor.consoleWindow);
 	#else
 	#else
 		containerManager.update(loadedDll, window, logs, imguiIdsManager, nullptr);
 		containerManager.update(loadedDll, window, logs, imguiIdsManager, nullptr);
 	#endif
 	#endif

+ 1 - 1
Pika/gameplay/containers/pikaGameplay.h

@@ -66,7 +66,7 @@ struct Gameplay : public Container
 
 
 		if (pika::shortcut(input, "Ctrl + S"))
 		if (pika::shortcut(input, "Ctrl + S"))
 		{
 		{
-			std::cout << "save\n";
+			std::cout << "save \n";
 		}
 		}
 
 
 		//std::cout << "save\n";
 		//std::cout << "save\n";

+ 20 - 13
Pika/gameplay/dll/dllMain.cpp

@@ -73,25 +73,32 @@ PIKA_API void gameplayStart(pika::PikaContext &pikaContext)
 }
 }
 
 
 
 
-static std::stringstream buff;
 static std::streambuf *old = 0;
 static std::streambuf *old = 0;
 
 
-PIKA_API std::streambuf *getConsoleBuffer()
+PIKA_API void setConsoleBuffer(std::streambuf *buf)
 {
 {
-	if (old == nullptr)
+	if (buf) 
 	{
 	{
-		old = std::cout.rdbuf(buff.rdbuf());
+		if (old == nullptr)
+		{
+			old = std::cout.rdbuf(buf);
+		}
+		else
+		{
+			std::cout.rdbuf(buf);
+		}
 	}
 	}
-	else 
+	else
 	{
 	{
-		std::cout.rdbuf(buff.rdbuf());
+		if (old) 
+		{
+			std::cout.rdbuf(old);
+		}
 	}
 	}
-
-	return buff.rdbuf();
+	
 }
 }
 
 
 
 
-
 //this won't be ever called in production so we can remove the code
 //this won't be ever called in production so we can remove the code
 PIKA_API void gameplayReload(pika::PikaContext &pikaContext)
 PIKA_API void gameplayReload(pika::PikaContext &pikaContext)
 {
 {
@@ -143,10 +150,10 @@ BOOL WINAPI DllMain(
 		break; // do not do cleanup if process termination scenario
 		break; // do not do cleanup if process termination scenario
 	}
 	}
 
 
-	if (old)
-	{
-		std::cout.rdbuf(old);
-	}
+	//if (old)
+	//{
+	//	std::cout.rdbuf(old);
+	//}
 
 
 	// Perform any necessary cleanup.
 	// Perform any necessary cleanup.
 	break;
 	break;

+ 1 - 1
Pika/gameplay/dll/dllMain.h

@@ -16,7 +16,7 @@
 #include <sstream>
 #include <sstream>
 
 
 PIKA_API void gameplayStart(pika::PikaContext &pikaContext);
 PIKA_API void gameplayStart(pika::PikaContext &pikaContext);
-PIKA_API std::streambuf *getConsoleBuffer();
+PIKA_API void setConsoleBuffer(std::streambuf *buf);
 PIKA_API void gameplayReload(pika::PikaContext &pikaContext);
 PIKA_API void gameplayReload(pika::PikaContext &pikaContext);
 PIKA_API void getContainersInfo(std::vector<pika::ContainerInformation> &info);
 PIKA_API void getContainersInfo(std::vector<pika::ContainerInformation> &info);
 PIKA_API bool constructContainer(Container **c, pika::memory::MemoryArena *arena, const char *name);
 PIKA_API bool constructContainer(Container **c, pika::memory::MemoryArena *arena, const char *name);

+ 1 - 1
Pika/resources/logs.txt

@@ -1 +1 @@
-#2022-10-22 23:02:42: Created container: Gameplay
+#2022-10-23 12:55:15: Created container: Gameplay