Browse Source

working at making the editors easier to use in the engine

meemknight 2 years ago
parent
commit
a210279a36

+ 10 - 3
Pika/core/pikaEditor/assetManagerWindow/assetManagerWindow.cpp

@@ -116,7 +116,12 @@ namespace pika
 				{
 				{
 					if (ImGui::Button(ICON_FK_FILE_O, {size ,size}))
 					if (ImGui::Button(ICON_FK_FILE_O, {size ,size}))
 					{
 					{
-						//
+						auto it = currentDll.containerExtensionsSupport.find(p.path().filename().extension().string());
+						if (it != currentDll.containerExtensionsSupport.end())
+						{
+							//todo name						
+							containerManager.createContainer(it->second, currentDll, logManager, imguiIDsManager, consoleWindow, p.path().string());
+						}
 					}
 					}
 				}
 				}
 
 
@@ -168,17 +173,19 @@ namespace pika
 						}
 						}
 					}
 					}
 					
 					
+				
 					{
 					{
 						auto it = currentDll.containerExtensionsSupport.find(p.path().filename().extension().string());
 						auto it = currentDll.containerExtensionsSupport.find(p.path().filename().extension().string());
-						if (it!= currentDll.containerExtensionsSupport.end())
+						if (it != currentDll.containerExtensionsSupport.end())
 						{
 						{
 							//todo name						
 							//todo name						
 							if (ImGui::Button("Open In engine"))
 							if (ImGui::Button("Open In engine"))
 							{
 							{
-								containerManager.createContainer(it->second, currentDll, logManager, imguiIDsManager, consoleWindow);
+								containerManager.createContainer(it->second, currentDll, logManager, imguiIDsManager, consoleWindow, p.path().string());
 							}
 							}
 						}
 						}
 					}
 					}
+					
 
 
 					ImGui::EndPopup();
 					ImGui::EndPopup();
 				}
 				}

+ 3 - 3
Pika/core/pikaEditor/containersWindow/containersWindow.cpp

@@ -152,12 +152,12 @@ void pika::ContainersWindow::update(pika::LogManager &logManager, bool &open, pi
 								if (createAtSpecificMemoryRegion)
 								if (createAtSpecificMemoryRegion)
 								{
 								{
 									containerManager.createContainer(selectedContainerToLaunch, loadedDll,
 									containerManager.createContainer(selectedContainerToLaunch, loadedDll,
-										logManager, imguiIdsManager, consoleWindow, pika::TB(1));
+										logManager, imguiIdsManager, consoleWindow, std::string(), pika::TB(1));
 								}
 								}
 								else
 								else
 								{
 								{
 									containerManager.createContainer(selectedContainerToLaunch, loadedDll, logManager,
 									containerManager.createContainer(selectedContainerToLaunch, loadedDll, logManager,
-										imguiIdsManager, consoleWindow);
+										imguiIdsManager, consoleWindow, std::string());
 								}
 								}
 							}
 							}
 
 
@@ -186,7 +186,7 @@ void pika::ContainersWindow::update(pika::LogManager &logManager, bool &open, pi
 
 
 										auto c = containerManager.createContainer(
 										auto c = containerManager.createContainer(
 											selectedContainerToLaunch, loadedDll, logManager,
 											selectedContainerToLaunch, loadedDll, logManager,
-											imguiIdsManager, consoleWindow, (size_t)memPos);
+											imguiIdsManager, consoleWindow, std::string(), (size_t)memPos);
 
 
 										//no need to log error since create container does that
 										//no need to log error since create container does that
 										if (c != 0)
 										if (c != 0)

+ 50 - 14
Pika/core/pikaRuntime/containerManager/containerManager.cpp

@@ -16,7 +16,7 @@
 
 
 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, 
-	pika::pikaImgui::ImGuiIdsManager &imguiIDsManager, ConsoleWindow *consoleWindow, size_t memoryPos)
+	pika::pikaImgui::ImGuiIdsManager &imguiIDsManager, ConsoleWindow *consoleWindow, std::string &cmd, size_t memoryPos)
 {
 {
 	
 	
 	for(auto &i : loadedDll.containerInfo)
 	for(auto &i : loadedDll.containerInfo)
@@ -24,7 +24,7 @@ pika::containerId_t pika::ContainerManager::createContainer(std::string containe
 		
 		
 		if (i.containerName == containerName)
 		if (i.containerName == containerName)
 		{
 		{
-			return createContainer(i, loadedDll, logManager, imguiIDsManager, consoleWindow, memoryPos);
+			return createContainer(i, loadedDll, logManager, imguiIDsManager, consoleWindow, cmd, memoryPos);
 		}
 		}
 
 
 	}
 	}
@@ -166,7 +166,7 @@ void pika::ContainerManager::freeContainerStuff(pika::RuntimeContainer &containe
 pika::containerId_t pika::ContainerManager::createContainer
 pika::containerId_t pika::ContainerManager::createContainer
 (pika::ContainerInformation containerInformation,
 (pika::ContainerInformation containerInformation,
 	pika::LoadedDll &loadedDll, pika::LogManager &logManager, pika::pikaImgui::ImGuiIdsManager &imguiIDsManager,
 	pika::LoadedDll &loadedDll, pika::LogManager &logManager, pika::pikaImgui::ImGuiIdsManager &imguiIDsManager,
-	ConsoleWindow *consoleWindow,
+	ConsoleWindow *consoleWindow, std::string &cmd,
 	size_t memoryPos)
 	size_t memoryPos)
 {	
 {	
 	containerId_t id = ++idCounter;
 	containerId_t id = ++idCounter;
@@ -197,7 +197,6 @@ pika::containerId_t pika::ContainerManager::createContainer
 		container.imguiWindowId = imguiIDsManager.getImguiIds();
 		container.imguiWindowId = imguiIDsManager.getImguiIds();
 	}
 	}
 
 
-
 	loadedDll.bindAllocatorDllRealm(&container.allocator);
 	loadedDll.bindAllocatorDllRealm(&container.allocator);
 	
 	
 	//this calls the constructors (from the dll realm)
 	//this calls the constructors (from the dll realm)
@@ -229,14 +228,36 @@ pika::containerId_t pika::ContainerManager::createContainer
 	container.requestedContainerInfo.consoleWindow = consoleWindow;
 	container.requestedContainerInfo.consoleWindow = consoleWindow;
 #pragma endregion
 #pragma endregion
 
 
+	pika::StaticString<256> cmdArgs;
 	
 	
+	if (cmd.size() > cmdArgs.MAX_SIZE)
+	{
+		logManager.log(std::string(std::string("Couldn't pass cmd argument because it is too big ")
+			+ container.baseContainerName + " #" + std::to_string(id)).c_str(), pika::logError);
+	}
+	else
+	{
+		cmdArgs = cmd.c_str();
+	}
+
 	loadedDll.bindAllocatorDllRealm(&container.allocator);
 	loadedDll.bindAllocatorDllRealm(&container.allocator);
-	container.pointer->create(container.requestedContainerInfo); //this calls create() (from the dll realm)
+	bool rezult = container.pointer->create(container.requestedContainerInfo, cmdArgs); //this calls create() (from the dll realm)
 	loadedDll.resetAllocatorDllRealm();//sets the global allocator back to standard (used for runtime realm)
 	loadedDll.resetAllocatorDllRealm();//sets the global allocator back to standard (used for runtime realm)
 
 
 	runningContainers[id] = container;
 	runningContainers[id] = container;
 
 
-	logManager.log(("Created container: " + std::string(container.baseContainerName) ).c_str());
+	if (!rezult)
+	{
+		logManager.log((std::string("Couldn't create container because it returned 0")
+			+ container.baseContainerName + " #" + std::to_string(id)).c_str(), pika::logWarning);
+		destroyContainer(id, loadedDll, logManager);
+		return 0;
+	}
+	else
+	{
+		logManager.log(("Created container: " + std::string(container.baseContainerName)).c_str());
+	}
+
 
 
 	return id;
 	return id;
 }
 }
@@ -268,7 +289,6 @@ void pika::ContainerManager::update(pika::LoadedDll &loadedDll, pika::PikaWindow
 
 
 	
 	
 
 
-
 #pragma region running containers
 #pragma region running containers
 	for (auto &c : runningContainers)
 	for (auto &c : runningContainers)
 	{
 	{
@@ -374,13 +394,13 @@ void pika::ContainerManager::update(pika::LoadedDll &loadedDll, pika::PikaWindow
 			constexpr bool isProduction = 0;
 			constexpr bool isProduction = 0;
 		#endif
 		#endif
 
 
-			auto callUpdate = [&](pika::WindowState &windowState)
+			auto callUpdate = [&](pika::WindowState &windowState) -> bool
 			{
 			{
 
 
 				auto t1 = std::chrono::high_resolution_clock::now();
 				auto t1 = std::chrono::high_resolution_clock::now();
 
 
 				loadedDll.bindAllocatorDllRealm(&c.second.allocator);
 				loadedDll.bindAllocatorDllRealm(&c.second.allocator);
-				c.second.pointer->update(windowInput, windowState, c.second.requestedContainerInfo);
+				bool rez = c.second.pointer->update(windowInput, windowState, c.second.requestedContainerInfo);
 				loadedDll.resetAllocatorDllRealm();
 				loadedDll.resetAllocatorDllRealm();
 
 
 				auto t2 = std::chrono::high_resolution_clock::now();
 				auto t2 = std::chrono::high_resolution_clock::now();
@@ -397,20 +417,23 @@ void pika::ContainerManager::update(pika::LoadedDll &loadedDll, pika::PikaWindow
 					c.second.frameCounter = 0;
 					c.second.frameCounter = 0;
 				}
 				}
 				
 				
-
+				return rez;
 
 
 			};
 			};
 
 
+			bool rez = 0;
+
 			if (c.second.imguiWindowId && !isProduction)
 			if (c.second.imguiWindowId && !isProduction)
 			{
 			{
 
 
 			#pragma region imguiwindow
 			#pragma region imguiwindow
 				ImGui::PushID(c.second.imguiWindowId);
 				ImGui::PushID(c.second.imguiWindowId);
-				
+				bool isOpen = 1;
+
 				ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0.f, 0.f, 0.f, 1.0f));
 				ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0.f, 0.f, 0.f, 1.0f));
 				ImGui::SetNextWindowSize({200,200}, ImGuiCond_Once);
 				ImGui::SetNextWindowSize({200,200}, ImGuiCond_Once);
 				ImGui::Begin( (std::string("gameplay window id: ") + std::to_string(c.first)).c_str(),
 				ImGui::Begin( (std::string("gameplay window id: ") + std::to_string(c.first)).c_str(),
-					0, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse);
+					&isOpen, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse);
 				
 				
 				//mouse pos and focus
 				//mouse pos and focus
 				if(c.second.flags.status != pika::RuntimeContainer::FLAGS::STATUS_BEING_PLAYBACK)
 				if(c.second.flags.status != pika::RuntimeContainer::FLAGS::STATUS_BEING_PLAYBACK)
@@ -462,16 +485,28 @@ 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);
 
 
-				callUpdate(windowState);
+				rez = callUpdate(windowState);
 
 
 				glBindFramebuffer(GL_FRAMEBUFFER, 0);
 				glBindFramebuffer(GL_FRAMEBUFFER, 0);
 
 
+				if (!isOpen)
+				{
+					rez = 1;
+					destroyContainer(c.first, loadedDll, logs);
+				}
+
 			}
 			}
 			else
 			else
 			{
 			{
-				callUpdate(window.windowState);
+				rez = callUpdate(window.windowState);
 			}
 			}
 
 
+			if (!rez) 
+			{
+				logs.log(("Terminated container because it returned 0: " + std::string(c.second.baseContainerName)
+					+ " #" + std::to_string(c.first)).c_str());
+				destroyContainer(c.first, loadedDll, logs);
+			}
 
 
 		}
 		}
 		else //on pause
 		else //on pause
@@ -588,6 +623,7 @@ void pika::ContainerManager::reloadDll(pika::LoadedDll &loadedDll, pika::PikaWin
 
 
 }
 }
 
 
+//not verbose flag
 bool pika::ContainerManager::destroyContainer(containerId_t id, pika::LoadedDll &loadedDll,
 bool pika::ContainerManager::destroyContainer(containerId_t id, pika::LoadedDll &loadedDll,
 	pika::LogManager &logManager)
 	pika::LogManager &logManager)
 {
 {

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

@@ -25,12 +25,12 @@ namespace pika
 		containerId_t createContainer(
 		containerId_t createContainer(
 			pika::ContainerInformation containerInformation,
 			pika::ContainerInformation containerInformation,
 			pika::LoadedDll &loadedDll, pika::LogManager &logManager, 
 			pika::LoadedDll &loadedDll, pika::LogManager &logManager, 
-			pika::pikaImgui::ImGuiIdsManager &imguiIDsManager, ConsoleWindow *consoleWindow, size_t memoryPos = 0);
+			pika::pikaImgui::ImGuiIdsManager &imguiIDsManager, ConsoleWindow *consoleWindow, std::string &cmd, size_t memoryPos = 0);
 
 
 		containerId_t createContainer(
 		containerId_t createContainer(
 			std::string containerName,
 			std::string containerName,
 			pika::LoadedDll &loadedDll, pika::LogManager &logManager,
 			pika::LoadedDll &loadedDll, pika::LogManager &logManager,
-			pika::pikaImgui::ImGuiIdsManager &imguiIDsManager, ConsoleWindow *consoleWindow, size_t memoryPos = 0);
+			pika::pikaImgui::ImGuiIdsManager &imguiIDsManager, ConsoleWindow *consoleWindow, std::string &cmd, size_t memoryPos = 0);
 
 
 		bool setSnapshotToContainer(pika::containerId_t containerId, const char* snapshotName,
 		bool setSnapshotToContainer(pika::containerId_t containerId, const char* snapshotName,
 			pika::LogManager &logManager, pika::pikaImgui::ImGuiIdsManager &imguiIdManager);
 			pika::LogManager &logManager, pika::pikaImgui::ImGuiIdsManager &imguiIdManager);

+ 2 - 2
Pika/core/pikaRuntime/pikaMain.cpp

@@ -178,10 +178,10 @@ int main()
 
 
 #if !PIKA_SHOULD_REMOVE_EDITOR
 #if !PIKA_SHOULD_REMOVE_EDITOR
 	auto container = containerManager.createContainer
 	auto container = containerManager.createContainer
-	(loadedDll.containerInfo[0], loadedDll, logs, imguiIdsManager, &editor.consoleWindow);
+	(loadedDll.containerInfo[0], loadedDll, logs, imguiIdsManager, &editor.consoleWindow, std::string());
 #else
 #else
 	auto container = containerManager.createContainer
 	auto container = containerManager.createContainer
-	(loadedDll.containerInfo[0], loadedDll, logs, imguiIdsManager, nullptr);
+	(loadedDll.containerInfo[0], loadedDll, logs, imguiIdsManager, nullptr, std::string());
 #endif
 #endif
 
 
 	
 	

+ 1 - 0
Pika/core/pikaSTD/staticVector.h

@@ -24,6 +24,7 @@ namespace pika
 		constIterator end() const { return &((T *)beg_)[size_]; }
 		constIterator end() const { return &((T *)beg_)[size_]; }
 
 
 		static constexpr unsigned int MAX_SIZE = N;
 		static constexpr unsigned int MAX_SIZE = N;
+		static constexpr unsigned int capacity = N;
 
 
 		StaticVector() {};
 		StaticVector() {};
 
 

+ 2 - 2
Pika/core/sharedRuntime/baseContainer.h

@@ -210,9 +210,9 @@ struct Container
 	static ContainerStaticInfo containerInfo() { ContainerStaticInfo c; c._internalNotImplemented = true; return c; };
 	static ContainerStaticInfo containerInfo() { ContainerStaticInfo c; c._internalNotImplemented = true; return c; };
 	
 	
 
 
-	virtual void create(RequestedContainerInfo &requestedInfo) = 0;
+	virtual bool create(RequestedContainerInfo &requestedInfo, pika::StaticString<256> commandLineArgument) = 0;
 
 
-	virtual void update(
+	virtual bool update(
 		pika::Input input, 
 		pika::Input input, 
 		pika::WindowState windowState,
 		pika::WindowState windowState,
 		RequestedContainerInfo &requestedInfo) = 0;
 		RequestedContainerInfo &requestedInfo) = 0;

+ 3 - 2
Pika/core/sharedRuntime/pikaImgui/pikaImgui.h

@@ -54,8 +54,9 @@ namespace pika
 			int getImguiIds(unsigned int count = 1)
 			int getImguiIds(unsigned int count = 1)
 			{
 			{
 				if (count == 0) { return 0; }
 				if (count == 0) { return 0; }
-
-				return counter + count;
+				auto c = counter;
+				counter += count;
+				return c;
 			}
 			}
 		};
 		};
 
 

+ 1 - 0
Pika/core/sharedRuntime/shortcutApi/shortcutApi.cpp

@@ -51,6 +51,7 @@ void pika::initShortcutApi()
 		{ "space", {pika::Button::Space , ImGuiKey_Space}},
 		{ "space", {pika::Button::Space , ImGuiKey_Space}},
 		{ "enter", {pika::Button::Enter, ImGuiKey_Enter} },
 		{ "enter", {pika::Button::Enter, ImGuiKey_Enter} },
 		{ "escape", {pika::Button::Escape, ImGuiKey_Escape} },
 		{ "escape", {pika::Button::Escape, ImGuiKey_Escape} },
+		{ "esc", {pika::Button::Escape, ImGuiKey_Escape} },
 		{ "up", {pika::Button::Up, ImGuiKey_UpArrow} },
 		{ "up", {pika::Button::Up, ImGuiKey_UpArrow} },
 		{ "down", {pika::Button::Down , ImGuiKey_DownArrow}},
 		{ "down", {pika::Button::Down , ImGuiKey_DownArrow}},
 		{ "left", {pika::Button::Left , ImGuiKey_LeftArrow}},
 		{ "left", {pika::Button::Left , ImGuiKey_LeftArrow}},

BIN
Pika/engineResources/engineSaves/windowPos1.bin


BIN
Pika/engineResources/engineSaves/windowPos2.bin


+ 2 - 0
Pika/gameplay/containers.cpp

@@ -14,6 +14,8 @@ else
 Container *getContainer(const char *name, pika::memory::MemoryArena *memoryArena)
 Container *getContainer(const char *name, pika::memory::MemoryArena *memoryArena)
 {
 {
 
 
+	///vvVVVVVVVVVVVVVVVVVVVVvv
+	///errors here? make sure that you inherited corectly from the base class (all overloads are done properly)
 	PIKA_ALL_CONTAINERS()
 	PIKA_ALL_CONTAINERS()
 	{
 	{
 		//"invalid container name: "
 		//"invalid container name: "

+ 10 - 2
Pika/gameplay/containers/pikaGameplay.h

@@ -47,16 +47,17 @@ struct Gameplay : public Container
 	}
 	}
 
 
 
 
-	void create(RequestedContainerInfo &requestedInfo)
+	bool create(RequestedContainerInfo &requestedInfo, pika::StaticString<256> commandLineArgument)
 	{
 	{
 		renderer.create();
 		renderer.create();
 		//pika::initShortcutApi();
 		//pika::initShortcutApi();
 		r = new float;
 		r = new float;
 
 
 		//void *test = new char[pika::MB(10)]; //todo let the allocator tell the engine somehow that it is out of memory
 		//void *test = new char[pika::MB(10)]; //todo let the allocator tell the engine somehow that it is out of memory
+		return true;
 	}
 	}
 
 
-	void update(pika::Input input, pika::WindowState windowState,
+	bool update(pika::Input input, pika::WindowState windowState,
 		RequestedContainerInfo &requestedInfo)
 		RequestedContainerInfo &requestedInfo)
 	{
 	{
 		//todo keep window on top stuff
 		//todo keep window on top stuff
@@ -69,6 +70,12 @@ struct Gameplay : public Container
 			requestedInfo.consoleWrite("save\n");
 			requestedInfo.consoleWrite("save\n");
 		}
 		}
 
 
+		//if (input.buttons[pika::Button::G].released())
+		//{
+		//	return 0;
+		//}
+
+
 		requestedInfo.consoleWrite(input.typedInput);
 		requestedInfo.consoleWrite(input.typedInput);
 
 
 
 
@@ -136,6 +143,7 @@ struct Gameplay : public Container
 		
 		
 		//ImGui::ShowDemoWindow();
 		//ImGui::ShowDemoWindow();
 
 
+		return true;
 	}
 	}
 
 
 };
 };

+ 4 - 2
Pika/gameplay/containers/threedtest.h

@@ -31,7 +31,7 @@ struct ThreeDTest: public Container
 	gl3d::Model helmetModel;
 	gl3d::Model helmetModel;
 	gl3d::Entity helmetEntity;
 	gl3d::Entity helmetEntity;
 
 
-	void create(RequestedContainerInfo &requestedInfo)
+	bool create(RequestedContainerInfo &requestedInfo, pika::StaticString<256> commandLineArgument)
 	{
 	{
 	
 	
 		//glEnable(GL_DEBUG_OUTPUT);
 		//glEnable(GL_DEBUG_OUTPUT);
@@ -72,9 +72,10 @@ struct ThreeDTest: public Container
 
 
 		helmetEntity = renderer.createEntity(helmetModel, t);
 		helmetEntity = renderer.createEntity(helmetModel, t);
 
 
+		return true;
 	}
 	}
 
 
-	void update(pika::Input input, pika::WindowState windowState,
+	bool update(pika::Input input, pika::WindowState windowState,
 		RequestedContainerInfo &requestedInfo)
 		RequestedContainerInfo &requestedInfo)
 	{
 	{
 		
 		
@@ -132,6 +133,7 @@ struct ThreeDTest: public Container
 		//
 		//
 		//ImGui::End();
 		//ImGui::End();
 
 
+		return true;
 	}
 	}
 
 
 };
 };

+ 46 - 15
Pika/pluggins/pluggins/immageViewer.h

@@ -15,24 +15,27 @@ struct ImmageViewer: public Container
 
 
 	gl2d::Texture texture;
 	gl2d::Texture texture;
 	float zoom = 1.f;
 	float zoom = 1.f;
+	glm::ivec2 immageSize;
 
 
 	static ContainerStaticInfo containerInfo()
 	static ContainerStaticInfo containerInfo()
 	{
 	{
 		ContainerStaticInfo info = {};
 		ContainerStaticInfo info = {};
-		info.defaultHeapMemorySize = pika::MB(20);
+		info.defaultHeapMemorySize = pika::MB(30);
 
 
 		//todo to lower
 		//todo to lower
 		info.extensionsSuported = {".png", ".bmp", ".psd", ".tga", ".gif", ".hdr", ".pic", ".ppm", ".pgm", ".jpg", ".jpeg"};
 		info.extensionsSuported = {".png", ".bmp", ".psd", ".tga", ".gif", ".hdr", ".pic", ".ppm", ".pgm", ".jpg", ".jpeg"};
 
 
-
-		//todo imgui ids
+		info.requestImguiIds = 1;
 
 
 		return info;
 		return info;
 	}
 	}
 
 
-	void create(RequestedContainerInfo &requestedInfo)
+	bool create(RequestedContainerInfo &requestedInfo, pika::StaticString<256> commandLineArgument) override
 	{
 	{
-		
+		//todo logs from containers
+		//requestedInfo.
+
+		std::string file = commandLineArgument.to_string();
 
 
 		//pika::memory::setGlobalAllocatorToStandard();
 		//pika::memory::setGlobalAllocatorToStandard();
 		//{
 		//{
@@ -42,36 +45,61 @@ struct ImmageViewer: public Container
 
 
 
 
 		size_t size = 0;
 		size_t size = 0;
-		if (!requestedInfo.getFileSizeBinary(PIKA_RESOURCES_PATH "map.png", size))
+		if (!requestedInfo.getFileSizeBinary(file.c_str(), size))
 		{
 		{
-			//return 0; //todo
+			return 0; //todo
 		}
 		}
 		
 		
 		unsigned char *buffer = new unsigned char[size];
 		unsigned char *buffer = new unsigned char[size];
 		
 		
-		if (!requestedInfo.readEntireFileBinary(PIKA_RESOURCES_PATH "map.png", buffer, size))
+		if (!requestedInfo.readEntireFileBinary(file.c_str(), buffer, size))
 		{
 		{
-			//no need to clear memory since the engine clears it for us
-			//return 0; //todo
+			delete[] buffer;
+			return 0; //todo
 		}
 		}
 		
 		
 		texture.createFromFileData(buffer, size, true, true);
 		texture.createFromFileData(buffer, size, true, true);
 		
 		
+		immageSize = texture.GetSize();
+
+
 		delete[] buffer;
 		delete[] buffer;
 
 
+		return true;
 	}
 	}
 
 
-	void update(pika::Input input, pika::WindowState windowState,
-		RequestedContainerInfo &requestedInfo)
+	bool update(pika::Input input, pika::WindowState windowState,
+		RequestedContainerInfo &requestedInfo) override
 	{
 	{
+
+		//todo deffer
+		ImGui::PushID(requestedInfo.requestedImguiIds);
+
+		ImGui::SetNextWindowSize(ImVec2{(float)immageSize.x, (float)immageSize.y}, ImGuiCond_Appearing);
 		
 		
-		
-		if(!ImGui::Begin("Immage title"))
+		bool open = 1;
+		if(!ImGui::Begin( std::string( "Immage viewer##" + std::to_string(requestedInfo.requestedImguiIds)).c_str() , &open))
 		{
 		{
+			if (!open)
+			{
+				ImGui::End();
+				ImGui::PopID();
+				return false;
+			}
+
 			ImGui::End();
 			ImGui::End();
-			return;
+			ImGui::PopID();
+			return true;
 		}
 		}
 
 
+		if (!open)
+		{
+			ImGui::End();
+			ImGui::PopID();
+			return false;
+		}
+
+
 		ImGui::Text("Immage title; %d, %d", 100, 100);
 		ImGui::Text("Immage title; %d, %d", 100, 100);
 
 
 		auto s = ImGui::GetContentRegionMax();
 		auto s = ImGui::GetContentRegionMax();
@@ -104,6 +132,9 @@ struct ImmageViewer: public Container
 
 
 
 
 		ImGui::End();
 		ImGui::End();
+		ImGui::PopID();
+
+		return true;
 	}
 	}
 
 
 };
 };

+ 4 - 3
Pika/pluggins/pluggins/threeDEditor.h

@@ -31,7 +31,7 @@ struct ThreeDEditor: public Container
 	gl3d::Model helmetModel;
 	gl3d::Model helmetModel;
 	gl3d::Entity helmetEntity;
 	gl3d::Entity helmetEntity;
 
 
-	void create(RequestedContainerInfo &requestedInfo)
+	bool create(RequestedContainerInfo &requestedInfo, pika::StaticString<256> commandLineArgument)
 	{
 	{
 
 
 
 
@@ -67,10 +67,10 @@ struct ThreeDEditor: public Container
 		
 		
 		helmetEntity = renderer.createEntity(helmetModel, t);
 		helmetEntity = renderer.createEntity(helmetModel, t);
 
 
+		return true;
 	}
 	}
 
 
-	//todo return value
-	void update(pika::Input input, pika::WindowState windowState,
+	bool update(pika::Input input, pika::WindowState windowState,
 		RequestedContainerInfo &requestedInfo)
 		RequestedContainerInfo &requestedInfo)
 	{
 	{
 
 
@@ -114,6 +114,7 @@ struct ThreeDEditor: public Container
 		glDisable(GL_DEPTH_TEST);
 		glDisable(GL_DEPTH_TEST);
 
 
 
 
+		return true;
 	}
 	}
 
 
 };
 };

+ 51 - 2
Pika/resources/logs.txt

@@ -1,2 +1,51 @@
-#2023-01-25 17:45:26: Created container: Gameplay
-#2023-01-25 17:45:37: Destroyed continer: Gameplay #1
+#2023-01-26 12:45:59: Created container: Gameplay
+#2023-01-26 12:46:07: Created container: ImmageViewer
+#2023-01-26 12:46:08: Created container: ImmageViewer
+#2023-01-26 12:46:33: Reloaded dll
+#2023-01-26 12:46:33: Terminated container because it returned 0: ImmageViewer #2
+#2023-01-26 12:46:33: Destroyed continer: ImmageViewer #2
+#2023-01-26 12:46:33: Terminated container because it returned 0: ImmageViewer #3
+#2023-01-26 12:46:33: Destroyed continer: ImmageViewer #3
+#2023-01-26 12:47:21: Reloaded dll
+#2023-01-26 12:47:23: Created container: ImmageViewer
+#2023-01-26 12:47:25: Terminated container because it returned 0: ImmageViewer #4
+#2023-01-26 12:47:25: Destroyed continer: ImmageViewer #4
+#2023-01-26 12:47:27: Created container: ImmageViewer
+#2023-01-26 12:47:28: Created container: ImmageViewer
+#2023-01-26 12:47:37: Created container: ImmageViewer
+#2023-01-26 12:47:43: Created container: ImmageViewer
+#2023-01-26 12:47:53: Terminated container because it returned 0: ImmageViewer #6
+#2023-01-26 12:47:53: Destroyed continer: ImmageViewer #6
+#2023-01-26 12:47:56: Terminated container because it returned 0: ImmageViewer #8
+#2023-01-26 12:47:56: Destroyed continer: ImmageViewer #8
+#2023-01-26 12:48:01: Terminated container because it returned 0: ImmageViewer #5
+#2023-01-26 12:48:01: Destroyed continer: ImmageViewer #5
+#2023-01-26 12:48:03: Terminated container because it returned 0: ImmageViewer #7
+#2023-01-26 12:48:03: Destroyed continer: ImmageViewer #7
+#2023-01-26 12:48:32: Reloaded dll
+#2023-01-26 12:48:36: Created container: ImmageViewer
+#2023-01-26 12:48:36: Created container: ImmageViewer
+#2023-01-26 12:48:41: Terminated container because it returned 0: ImmageViewer #10
+#2023-01-26 12:48:41: Destroyed continer: ImmageViewer #10
+#2023-01-26 12:48:42: Terminated container because it returned 0: ImmageViewer #9
+#2023-01-26 12:48:42: Destroyed continer: ImmageViewer #9
+#2023-01-26 12:48:44: Created container: ImmageViewer
+#2023-01-26 12:48:45: Created container: ImmageViewer
+#2023-01-26 12:48:45: Created container: ImmageViewer
+#2023-01-26 12:48:45: Created container: ImmageViewer
+#2023-01-26 12:48:45: Created container: ImmageViewer
+#2023-01-26 12:48:49: Terminated container because it returned 0: ImmageViewer #14
+#2023-01-26 12:48:49: Destroyed continer: ImmageViewer #14
+#2023-01-26 12:48:50: Terminated container because it returned 0: ImmageViewer #12
+#2023-01-26 12:48:50: Destroyed continer: ImmageViewer #12
+#2023-01-26 12:48:52: Terminated container because it returned 0: ImmageViewer #15
+#2023-01-26 12:48:52: Destroyed continer: ImmageViewer #15
+#2023-01-26 12:48:55: Terminated container because it returned 0: ImmageViewer #13
+#2023-01-26 12:48:55: Destroyed continer: ImmageViewer #13
+#2023-01-26 12:48:59: Terminated container because it returned 0: ImmageViewer #11
+#2023-01-26 12:48:59: Destroyed continer: ImmageViewer #11
+#2023-01-26 12:49:07: Created container: ImmageViewer
+#2023-01-26 12:49:07: Created container: ImmageViewer
+#2023-01-26 12:49:11: Destroyed continer: ImmageViewer #17
+#2023-01-26 12:49:11: Destroyed continer: Gameplay #1
+#2023-01-26 12:49:11: Destroyed continer: ImmageViewer #16