meemknight 2 years ago
parent
commit
ad8c95677f

+ 2 - 2
Pika/gameplay/containers.h

@@ -26,7 +26,7 @@ Container *getContainer(const char* name, pika::memory::MemoryArena *memoryArena
 //#include "containers/mario/marioNeuralVizualizer.h"
 //#include "containers/mario/marioNeuralVizualizer.h"
 //#include "containers/mario/marioNeuralTrainer.h"
 //#include "containers/mario/marioNeuralTrainer.h"
 #include "containers/minecraftDungeons/mcDungeonsEditor.h"
 #include "containers/minecraftDungeons/mcDungeonsEditor.h"
-//#include "containers/minecraftDungeons/mcDungeonsgameplay.h"
+#include "containers/minecraftDungeons/mcDungeonsgameplay.h"
 //#include "containers/minecraftDungeons/mcDungeonsMenu.h"
 //#include "containers/minecraftDungeons/mcDungeonsMenu.h"
 //#include "containers/hollowknight/hollowknight.h"
 //#include "containers/hollowknight/hollowknight.h"
 
 
@@ -50,13 +50,13 @@ Container *getContainer(const char* name, pika::memory::MemoryArena *memoryArena
 	PIKA_DECLARE_CONTAINER(ThreeDEditor) \
 	PIKA_DECLARE_CONTAINER(ThreeDEditor) \
 	PIKA_DECLARE_CONTAINER(PikaTextEditor) \
 	PIKA_DECLARE_CONTAINER(PikaTextEditor) \
 	PIKA_DECLARE_CONTAINER(ThreeDGameExample) \
 	PIKA_DECLARE_CONTAINER(ThreeDGameExample) \
+	PIKA_DECLARE_CONTAINER(McDungeonsGameplay) \
 	PIKA_DECLARE_CONTAINER(McDungeonsEditor)
 	PIKA_DECLARE_CONTAINER(McDungeonsEditor)
 	//PIKA_DECLARE_CONTAINER(Holloknight)\
 	//PIKA_DECLARE_CONTAINER(Holloknight)\
 	//PIKA_DECLARE_CONTAINER(Mario) \
 	//PIKA_DECLARE_CONTAINER(Mario) \
 	//PIKA_DECLARE_CONTAINER(MarioEditor) \
 	//PIKA_DECLARE_CONTAINER(MarioEditor) \
 	//PIKA_DECLARE_CONTAINER(MarioNeuralTrainer) \
 	//PIKA_DECLARE_CONTAINER(MarioNeuralTrainer) \
 	//PIKA_DECLARE_CONTAINER(MarioNeuralVizualizer) \
 	//PIKA_DECLARE_CONTAINER(MarioNeuralVizualizer) \
-	//PIKA_DECLARE_CONTAINER(McDungeonsGameplay) \
 	//PIKA_DECLARE_CONTAINER(McDungeonsMenu) 
 	//PIKA_DECLARE_CONTAINER(McDungeonsMenu) 
 
 
 #endif
 #endif

+ 140 - 78
Pika/gameplay/containers/threeDGameExample/threeDGameExample.h

@@ -10,6 +10,8 @@
 #include <imfilebrowser.h>
 #include <imfilebrowser.h>
 #include <engineLibraresSupport/engineGL3DSupport.h>
 #include <engineLibraresSupport/engineGL3DSupport.h>
 #include <containers/minecraftDungeons/mcDungeonsgameplay.h>
 #include <containers/minecraftDungeons/mcDungeonsgameplay.h>
+#include <sushi/sushi.h>
+#include <engineLibraresSupport/sushi/engineSushiSupport.h>
 
 
 //animations
 //animations
 //3 attack
 //3 attack
@@ -42,15 +44,23 @@ struct ThreeDGameExample: public Container
 	gl3d::Model cabinModel;
 	gl3d::Model cabinModel;
 	gl3d::Model knightModel;
 	gl3d::Model knightModel;
 	gl3d::Entity groundEntity;
 	gl3d::Entity groundEntity;
-	gl3d::Entity treeEntity;
+	//gl3d::Entity treeEntity;
 	gl3d::Entity cabinEntity;
 	gl3d::Entity cabinEntity;
 	gl3d::Entity playerEntity;
 	gl3d::Entity playerEntity;
 	bool first = 1;
 	bool first = 1;
 
 
+	sushi::SushyContext sushyContext;
+
 	pika::gl3d::General3DEditor editor;
 	pika::gl3d::General3DEditor editor;
 
 
+	gl2d::Renderer2D renderer2d;
+	gl2d::Font font;
+
 	bool create(RequestedContainerInfo &requestedInfo, pika::StaticString<256> commandLineArgument)
 	bool create(RequestedContainerInfo &requestedInfo, pika::StaticString<256> commandLineArgument)
 	{
 	{
+		renderer2d.create(requestedInfo.requestedFBO.fbo);
+		font = pika::gl2d::loadFont(PIKA_RESOURCES_PATH "arial.ttf", requestedInfo);
+
 
 
 		renderer.setErrorCallback(&errorCallbackCustom, &requestedInfo);
 		renderer.setErrorCallback(&errorCallbackCustom, &requestedInfo);
 		renderer.fileOpener.userData = &requestedInfo;
 		renderer.fileOpener.userData = &requestedInfo;
@@ -74,8 +84,8 @@ struct ThreeDGameExample: public Container
 		groundModel = renderer.loadModel(PIKA_RESOURCES_PATH "threedgame/ground/GROUND_ON_BASE.obj", 
 		groundModel = renderer.loadModel(PIKA_RESOURCES_PATH "threedgame/ground/GROUND_ON_BASE.obj", 
 			gl3d::TextureLoadQuality::maxQuality, 1);
 			gl3d::TextureLoadQuality::maxQuality, 1);
 
 
-		treesModel = renderer.loadModel(PIKA_RESOURCES_PATH "threedgame/tree/Honey Tree.obj",
-			gl3d::TextureLoadQuality::maxQuality, 0.02);
+		treesModel = renderer.loadModel(PIKA_RESOURCES_PATH "threedgame/Tree_Red-spruce.glb",
+			gl3d::TextureLoadQuality::maxQuality, 1);
 
 
 		cabinModel = renderer.loadModel(PIKA_RESOURCES_PATH "threedgame/cabin/models/big_watchtower.obj",
 		cabinModel = renderer.loadModel(PIKA_RESOURCES_PATH "threedgame/cabin/models/big_watchtower.obj",
 			gl3d::TextureLoadQuality::maxQuality,0.2);
 			gl3d::TextureLoadQuality::maxQuality,0.2);
@@ -89,7 +99,11 @@ struct ThreeDGameExample: public Container
 
 
 		groundEntity = renderer.createEntity(groundModel, t);
 		groundEntity = renderer.createEntity(groundModel, t);
 
 
-		treeEntity = renderer.createEntity(treesModel);
+		renderer.createEntity(treesModel, gl3d::Transform{{0,0,10}});
+		renderer.createEntity(treesModel, gl3d::Transform{{-5,0,7}});
+		renderer.createEntity(treesModel, gl3d::Transform{{-17,0,2}});
+		renderer.createEntity(treesModel, gl3d::Transform{{-13,0,-5}});
+		renderer.createEntity(treesModel, gl3d::Transform{{12,0,10}});
 
 
 		cabinEntity = renderer.createEntity(cabinModel, gl3d::Transform{{0,0,-25}});
 		cabinEntity = renderer.createEntity(cabinModel, gl3d::Transform{{0,0,-25}});
 
 
@@ -101,6 +115,13 @@ struct ThreeDGameExample: public Container
 		renderer.setEntityAnimationIndex(playerEntity, 15);
 		renderer.setEntityAnimationIndex(playerEntity, 15);
 
 
 
 
+		{
+			sushi::SushyBinaryFormat loader;
+			requestedInfo.readEntireFileBinary(PIKA_RESOURCES_PATH "threedgame/ui.sushi", loader.data);
+			sushyContext.load(loader);
+			sushyContext.root.background.color = {0,0,0,0};
+		}
+
 		return true;
 		return true;
 	}
 	}
 
 
@@ -123,12 +144,16 @@ struct ThreeDGameExample: public Container
 
 
 		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 		glEnable(GL_DEPTH_TEST);
 		glEnable(GL_DEPTH_TEST);
+		glDisable(GL_LINE_SMOOTH);
+		glDisable(GL_MULTISAMPLE);
 
 
 		renderer.updateWindowMetrics(windowState.windowW, windowState.windowH);
 		renderer.updateWindowMetrics(windowState.windowW, windowState.windowH);
 		renderer.camera.aspectRatio = (float)windowState.windowW / windowState.windowH; //todo do this in update
 		renderer.camera.aspectRatio = (float)windowState.windowW / windowState.windowH; //todo do this in update
+
+		renderer2d.updateWindowMetrics(windowState.windowW, windowState.windowH);
 	#pragma endregion
 	#pragma endregion
 
 
-		if (input.buttons[pika::Button::Escape].released())
+		if (input.buttons[pika::Button::Escape].released())	
 		{
 		{
 			::pika::pikaImgui::removeFocusToCurrentWindow();
 			::pika::pikaImgui::removeFocusToCurrentWindow();
 			requestedInfo.setNormalCursor();
 			requestedInfo.setNormalCursor();
@@ -185,12 +210,18 @@ struct ThreeDGameExample: public Container
 					playerPhysics.desiredRotation = std::atan2(dir.x, dir.y);
 					playerPhysics.desiredRotation = std::atan2(dir.x, dir.y);
 
 
 					if (animationCulldown <= 0)
 					if (animationCulldown <= 0)
+					{
 						renderer.setEntityAnimationIndex(playerEntity, 5); //run 
 						renderer.setEntityAnimationIndex(playerEntity, 5); //run 
+						renderer.setEntityAnimationSpeed(playerEntity, 1.5);
+					}
 				}
 				}
 				else
 				else
 				{
 				{
 					if (animationCulldown <= 0)
 					if (animationCulldown <= 0)
+					{
 						renderer.setEntityAnimationIndex(playerEntity, 15); //idle
 						renderer.setEntityAnimationIndex(playerEntity, 15); //idle
+						renderer.setEntityAnimationSpeed(playerEntity, 1);
+					}
 				}
 				}
 
 
 				float speed = 3;
 				float speed = 3;
@@ -200,8 +231,9 @@ struct ThreeDGameExample: public Container
 				if (input.buttons[pika::Button::Space].pressed() && attackCulldown <= 0)
 				if (input.buttons[pika::Button::Space].pressed() && attackCulldown <= 0)
 				{
 				{
 					renderer.setEntityAnimationIndex(playerEntity, 3); //attack
 					renderer.setEntityAnimationIndex(playerEntity, 3); //attack
-					animationCulldown = 0.45;
-					attackCulldown = 0.8;
+					renderer.setEntityAnimationSpeed(playerEntity, 1.3);
+					animationCulldown = 1.2;
+					attackCulldown = 1.2;
 
 
 					//for (int i = 0; i < enemies.size(); i++)
 					//for (int i = 0; i < enemies.size(); i++)
 					//{
 					//{
@@ -349,84 +381,84 @@ struct ThreeDGameExample: public Container
 			//	}
 			//	}
 			//	else
 			//	else
 			//	{
 			//	{
-			//		renderer.setEntityAnimationIndex(e.entity, Animations::zombieIdle);
+//		renderer.setEntityAnimationIndex(e.entity, Animations::zombieIdle);
+//	}
+//
+//	if (e.attackCulldown > 0)
+//	{
+//		e.attackCulldown -= input.deltaTime;
+//	}
+//
+//	solveRotation(e.physics);
+//
+//	resolveConstrains(e.physics);
+//	e.physics.updateMove();
+//
+//	setTransform(e.physics, e.entity);
+//}
+
+
+#pragma region sword
+	//{
+	//	gl3d::Transform t;
+	//	renderer.getEntityJointTransform(player, "arm.r", t);
+	//	t.scale = glm::vec3(0.5);
+	//
+	//	gl3d::Transform offset;
+	//	offset.rotation.x = glm::radians(90.f);
+	//	//offset.position.y = -1.f;
+	//
+	//	t.setFromMatrix(t.getTransformMatrix() * offset.getTransformMatrix());
+	//
+	//	renderer.setEntityTransform(sword, t);
+	//}
+#pragma endregion
+
+
+#pragma region camera hover
+			{
+			//cameraPos.y += cameraYoffset;
+
+			//auto checkHit = [&](glm::vec3 pos) -> bool
+			//{
+			//	for (int x = -2; x <= 2; x++)
+			//		for (int y = -2; y <= 2; y++)
+			//			for (int z = -2; z <= 2; z++)
+			//			{
+			//				glm::vec3 p = pos + glm::vec3(x, y, z);
+			//				if (getBlockSafe(p.x, p.y, p.z) != 0)
+			//				{
+			//					return true;
+			//				}
+			//			}
+			//	return false;
+			//};
+
+			//float hoverSpeed = 2;
+			//if (!diamonds.empty())
+			//{
+			//	if (checkHit(cameraPos))
+			//	{
+			//		cameraYoffset += input.deltaTime * hoverSpeed;
 			//	}
 			//	}
-			//
-			//	if (e.attackCulldown > 0)
+			//	else
 			//	{
 			//	{
-			//		e.attackCulldown -= input.deltaTime;
+			//		if (cameraYoffset > 0)
+			//			if (!checkHit(cameraPos -= glm::vec3(0, 0.1f, 0)))
+			//			{
+			//				cameraYoffset -= input.deltaTime * hoverSpeed;
+			//			}
 			//	}
 			//	}
-			//
-			//	solveRotation(e.physics);
-			//
-			//	resolveConstrains(e.physics);
-			//	e.physics.updateMove();
-			//
-			//	setTransform(e.physics, e.entity);
 			//}
 			//}
-
-
-		#pragma region sword
+			//else
 			//{
 			//{
-			//	gl3d::Transform t;
-			//	renderer.getEntityJointTransform(player, "arm.r", t);
-			//	t.scale = glm::vec3(0.5);
+			//	cameraYoffset += input.deltaTime;
+			//}
 			//
 			//
-			//	gl3d::Transform offset;
-			//	offset.rotation.x = glm::radians(90.f);
-			//	//offset.position.y = -1.f;
 			//
 			//
-			//	t.setFromMatrix(t.getTransformMatrix() * offset.getTransformMatrix());
+			//cameraYoffset = std::max(cameraYoffset, 0.f);
 			//
 			//
-			//	renderer.setEntityTransform(sword, t);
-			//}
-		#pragma endregion
-
-
-		#pragma region camera hover
-			{
-				//cameraPos.y += cameraYoffset;
-
-				//auto checkHit = [&](glm::vec3 pos) -> bool
-				//{
-				//	for (int x = -2; x <= 2; x++)
-				//		for (int y = -2; y <= 2; y++)
-				//			for (int z = -2; z <= 2; z++)
-				//			{
-				//				glm::vec3 p = pos + glm::vec3(x, y, z);
-				//				if (getBlockSafe(p.x, p.y, p.z) != 0)
-				//				{
-				//					return true;
-				//				}
-				//			}
-				//	return false;
-				//};
-
-				//float hoverSpeed = 2;
-				//if (!diamonds.empty())
-				//{
-				//	if (checkHit(cameraPos))
-				//	{
-				//		cameraYoffset += input.deltaTime * hoverSpeed;
-				//	}
-				//	else
-				//	{
-				//		if (cameraYoffset > 0)
-				//			if (!checkHit(cameraPos -= glm::vec3(0, 0.1f, 0)))
-				//			{
-				//				cameraYoffset -= input.deltaTime * hoverSpeed;
-				//			}
-				//	}
-				//}
-				//else
-				//{
-				//	cameraYoffset += input.deltaTime;
-				//}
-				//
-				//
-				//cameraYoffset = std::max(cameraYoffset, 0.f);
-				//
-				//cameraPos.x = std::max(cameraPos.x, 2.f);
+			//cameraPos.x = std::max(cameraPos.x, 2.f);
 
 
 			}
 			}
 
 
@@ -439,7 +471,7 @@ struct ThreeDGameExample: public Container
 			}
 			}
 			else
 			else
 			{
 			{
-				editor.update(requestedInfo.requestedImguiIds, renderer, input, 
+				editor.update(requestedInfo.requestedImguiIds, renderer, input,
 					4, requestedInfo, {windowState.windowW,windowState.windowH});
 					4, requestedInfo, {windowState.windowW,windowState.windowH});
 			}
 			}
 
 
@@ -448,9 +480,39 @@ struct ThreeDGameExample: public Container
 	#pragma endregion
 	#pragma endregion
 
 
 
 
+	#pragma region render3d
 
 
 		renderer.render(input.deltaTime);
 		renderer.render(input.deltaTime);
 		glDisable(GL_DEPTH_TEST);
 		glDisable(GL_DEPTH_TEST);
+	#pragma endregion
+
+
+	#pragma region ui
+		{
+			sushyContext.update(renderer2d, pika::toSushi(input), font);
+			
+			auto life = sushyContext.genUniqueParent("life");
+			if (life)
+			{
+				renderer2d.renderRectangle(life->outData.absTransform, {1,0,0,0.5});
+			}
+			
+			auto xp = sushyContext.genUniqueParent("xp");
+			if (xp)
+			{
+				renderer2d.renderRectangle(xp->outData.absTransform, {0,1,0,0.5});
+			}
+			
+			auto score = sushyContext.genUniqueParent("score");
+			if (score)
+			{
+				renderer2d.renderRectangle(score->outData.absTransform, {0.5,0.5,0.5,0.3});
+			}
+			
+			renderer2d.flush();
+		}
+	#pragma endregion
+
 
 
 
 
 		return true;
 		return true;

+ 2 - 2
Pika/resources/logs.txt

@@ -1,2 +1,2 @@
-#2023-10-18 12:24:53: Created container: ThreeDGameExample
-#2023-10-18 12:25:26: Destroyed continer: ThreeDGameExample #1
+#2023-10-18 16:26:43: Created container: ThreeDGameExample
+#2023-10-18 16:27:53: Destroyed continer: ThreeDGameExample #1

BIN
Pika/resources/sushi/menuItem.sushi


BIN
Pika/resources/threedgame/Tree_Red-spruce.glb


BIN
Pika/resources/threedgame/ui.sushi


+ 28 - 20
Pika/thirdparty/sushi/src/sushi.cpp

@@ -570,33 +570,41 @@ namespace sushi
 		auto getNextTextElementPiece = [&](sushi::Text *text) -> bool
 		auto getNextTextElementPiece = [&](sushi::Text *text) -> bool
 		{
 		{
 
 
-			int m = getNextMarker();
 
 
-			switch (m)
+			while (true)
 			{
 			{
-				case markerText:
-				{
-					size_t textSize = 0;
-					if (!readBinaryData(&textSize, sizeof(textSize))) { return 0; }
-					text->text.resize(textSize);
-					if (!readBinaryData(text->text.data(), textSize)) { return 0; }
-					break;
-				}
+				int m = peekNextMarker();
 
 
-				case markerTransform:
+				switch (m)
 				{
 				{
-					if (!getNextTransformPiece(&text->transform)) { return 0; }
-					break;
-				}
+					case markerText:
+					{
+						int _ = getNextMarker();
+						size_t textSize = 0;
+						if (!readBinaryData(&textSize, sizeof(textSize))) { return 0; }
+						text->text.resize(textSize);
+						if (!readBinaryData(text->text.data(), textSize)) { return 0; }
+						break;
+					}
 
 
-				case markerColor:
-				{
-					if (!readBinaryData(&text->color,sizeof(text->color))) { return 0; }
+					case markerTransform:
+					{
+						int _ = getNextMarker();
+						if (!getNextTransformPiece(&text->transform)) { return 0; }
+						break;
+					}
+
+					case markerColor:
+					{
+						int _ = getNextMarker();
+						if (!readBinaryData(&text->color, sizeof(text->color))) { return 0; }
+						break;
+					}
+
+					default:
+					return true;
 					break;
 					break;
 				}
 				}
-
-				default:
-				return 0;
 			}
 			}
 
 
 			return true;
 			return true;