From 74a2dc78a651eb443dc69b144680e84a4d12b780 Mon Sep 17 00:00:00 2001 From: maka70vv <25.makarovv@gmail.com> Date: Sat, 1 Mar 2025 23:52:55 +0600 Subject: [PATCH] Fixing rooms --- ActiveObject.h | 3 ++ Game.cpp | 13 +++++-- GameObjectManager.cpp | 43 ++++++++++++++++++---- GameObjectManager.h | 4 +-- RenderSystem.cpp | 4 ++- Room.h | 83 +------------------------------------------ start.sh | 2 +- 7 files changed, 58 insertions(+), 94 deletions(-) diff --git a/ActiveObject.h b/ActiveObject.h index bc3dc94..3d9f915 100644 --- a/ActiveObject.h +++ b/ActiveObject.h @@ -3,6 +3,7 @@ #include "Math.h" #include +namespace ZL { struct ActiveObject { std::shared_ptr activeObjectTexturePtr; ZL::VertexDataStruct activeObjectMesh; @@ -15,3 +16,5 @@ struct ActiveObject { ZL::Vector3f objectPos; bool highlighted = false; }; + +} \ No newline at end of file diff --git a/Game.cpp b/Game.cpp index 58d69ef..17b1308 100755 --- a/Game.cpp +++ b/Game.cpp @@ -47,13 +47,21 @@ void Game::setup() { ZL::BindOpenGlFunctions(); ZL::CheckGlError(); + std::cout << "Hello 1" << std::endl; + // Initialize renderer renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default.fragment"); renderer.shaderManager.AddShaderFromFiles("defaultColor", "./defaultColor.vertex", "./defaultColor.fragment"); - renderer.InitOpenGL(); // Initialize game objects + std::cout << "Hello 2" << std::endl; + gameObjects.initialize(); + + std::cout << "Hello 3" << std::endl; + + renderer.InitOpenGL(); + } void Game::drawScene() { @@ -72,7 +80,7 @@ void Game::processTickCount() { size_t delta = (newTickCount - lastTickCount > CONST_MAX_TIME_INTERVAL) ? CONST_MAX_TIME_INTERVAL : newTickCount - lastTickCount; - gameObjects.update(); + gameObjects.updateScene(delta); lastTickCount = newTickCount; } @@ -98,6 +106,7 @@ void Game::update() { exitGameLoop = true; } gameObjects.handleEvent(event); + } render(); } diff --git a/GameObjectManager.cpp b/GameObjectManager.cpp index d669ab5..52abad1 100644 --- a/GameObjectManager.cpp +++ b/GameObjectManager.cpp @@ -2,6 +2,7 @@ #include "Environment.h" #include "ObjLoader.h" #include "Inventory.h" +#include "Room.h" #include "TextModel.h" // Add this include for LoadFromTextFile namespace ZL { @@ -10,10 +11,13 @@ const float GameObjectManager::INVENTORY_ICON_SIZE = 32.0f; const float GameObjectManager::INVENTORY_MARGIN = 10.0f; void GameObjectManager::initialize() { - // Load textures - roomTexturePtr = std::make_shared(CreateTextureDataFromBmp24("./Kitchen_ceramics.bmp")); + + std::cout << "Hello x1" << std::endl; + coneTexturePtr = std::make_shared(CreateTextureDataFromBmp24("./conus.bmp")); - + + std::cout << "Hello x2" << std::endl; + // Load models colorCubeMesh = CreateCube3D(5.0); colorCubeMeshMutable.data = CreateCube3D(5.0); @@ -25,15 +29,23 @@ void GameObjectManager::initialize() { testObjMeshMutable.data = testObjMesh; testObjMeshMutable.RefreshVBO(); + std::cout << "Hello x2" << std::endl; + textMesh = ZL::LoadFromTextFile("./mesh001.txt"); // Add ZL:: namespace coneMesh = ZL::LoadFromTextFile("./cone001.txt"); // Add ZL:: namespace coneMesh.Scale(200); + std::cout << "Hello x3" << std::endl; + + textMeshMutable.AssignFrom(textMesh); textMeshMutable.RefreshVBO(); coneMeshMutable.AssignFrom(coneMesh); coneMeshMutable.RefreshVBO(); + std::cout << "Hello x4" << std::endl; + + // Load bone animations bx.LoadFromFile("mesh_armature_and_animation_data.txt"); @@ -51,12 +63,17 @@ void GameObjectManager::initialize() { ao1.activeObjectScreenMeshMutable.RefreshVBO(); activeObjects.push_back(ao1); + std::cout << "Hello x5" << std::endl; + + // Initialize audio audioPlayer = std::make_unique(); if (audioPlayer) { audioPlayer->playMusic("Symphony No.6 (1st movement).ogg"); } + std::cout << "Hello x6" << std::endl; + // Initialize inventory inventoryIconMesh = CreateRect2D( {0.0f, 0.0f}, @@ -66,21 +83,33 @@ void GameObjectManager::initialize() { inventoryIconMeshMutable.AssignFrom(inventoryIconMesh); inventoryIconMeshMutable.RefreshVBO(); + std::cout << "Hello x7" << std::endl; + + // Add test items to inventory auto testRoomTexture = std::make_shared(CreateTextureDataFromBmp24("./Kitchen_ceramics.bmp")); auto testConeTexture = std::make_shared(CreateTextureDataFromBmp24("./conus.bmp")); AddItemToInventory("RoomCeramics", testRoomTexture); AddItemToInventory("Cone", testConeTexture); + + std::cout << "Hello x8" << std::endl; + + + roomTexturePtr = std::make_shared(CreateTextureDataFromBmp24("./Kitchen_ceramics.bmp")); + } -void GameObjectManager::update() { - updateScene(16); // Добавим фиксированный timestep для обновления сцены -} void GameObjectManager::handleEvent(const SDL_Event& event) { if (event.type == SDL_MOUSEBUTTONDOWN) { bx.Interpolate(animationCounter); animationCounter += 2; + } + else if (event.type == SDL_MOUSEBUTTONDOWN && event.button.button == SDL_BUTTON_RIGHT) { + + //switchRoom(); + + } else if (event.type == SDL_MOUSEWHEEL) { static const float zoomstep = 1.0f; @@ -154,6 +183,7 @@ void GameObjectManager::handleEvent(const SDL_Event& event) { } } + void GameObjectManager::updateScene(size_t ms) { const float SPEED = 0.1f; if (Environment::leftPressed) { @@ -180,6 +210,7 @@ void GameObjectManager::updateScene(size_t ms) { pow(Environment::characterPos.v[2] - ao.objectPos.v[2], 2) ); ao.highlighted = (dist < 50.f); + } } diff --git a/GameObjectManager.h b/GameObjectManager.h index 8f32892..a46028e 100644 --- a/GameObjectManager.h +++ b/GameObjectManager.h @@ -12,7 +12,7 @@ namespace ZL { class GameObjectManager { public: void initialize(); - void update(); + void handleEvent(const SDL_Event& event); void updateScene(size_t ms); void checkMouseIntersection(int mouseX, int mouseY, const Matrix4f& projectionModelView); // Добавляем новый метод @@ -36,7 +36,7 @@ public: ZL::VertexDataStruct coneMesh; ZL::VertexRenderStruct coneMeshMutable; - std::vector activeObjects; + std::vector activeObjects; std::unique_ptr audioPlayer; ZL::VertexDataStruct inventoryIconMesh; diff --git a/RenderSystem.cpp b/RenderSystem.cpp index aa5c38e..4ce5996 100644 --- a/RenderSystem.cpp +++ b/RenderSystem.cpp @@ -18,7 +18,7 @@ void RenderSystem::drawScene(const GameObjectManager& gameObjects) { static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; - glClearColor(0.3f, 0.3f, 0.3f, 1.0f); + glClearColor(0.0f, 0.5f, 1.0f, 1.0f); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glViewport(0, 0, Environment::width, Environment::height); @@ -51,6 +51,7 @@ void RenderSystem::drawWorld(const GameObjectManager& gameObjects) { float t = 0.3; renderer.RotateMatrix(QuatFromRotateAroundX(t * M_PI / 2.0)); + // Draw cone glBindTexture(GL_TEXTURE_2D, gameObjects.coneTexturePtr->getTexID()); renderer.DrawVertexRenderStruct(gameObjects.coneMeshMutable); @@ -70,6 +71,7 @@ void RenderSystem::drawWorld(const GameObjectManager& gameObjects) { glBindTexture(GL_TEXTURE_2D, gameObjects.roomTexturePtr->getTexID()); renderer.DrawVertexRenderStruct(gameObjects.textMeshMutable); + Matrix4f latestProjectionModelView = renderer.GetProjectionModelViewMatrix(); // Проверяем пересечение с мышью после расчета всех матриц diff --git a/Room.h b/Room.h index 7af8eff..6759539 100644 --- a/Room.h +++ b/Room.h @@ -7,89 +7,8 @@ #include "Renderer.h" #include "ObjLoader.h" #include "Physics.h" - +#include "ActiveObject.h" namespace ZL { - struct ActiveObject - { - std::shared_ptr activeObjectTexturePtr; - VertexDataStruct activeObjectMesh; - VertexRenderStruct activeObjectMeshMutable; - std::shared_ptr activeObjectScreenTexturePtr; - VertexDataStruct activeObjectScreenMesh; - VertexRenderStruct activeObjectScreenMeshMutable; - - Vector3f objectPos; - bool highlighted = false; - }; - - class Room - { - private: - std::string name; - std::vector> textures; - VertexDataStruct roomMesh; - VertexRenderStruct roomMeshMutable; - std::vector objects; - - public: - Room(const std::string& roomName) : name(roomName) {} - - // Создаем меш комнаты (куб) - void createRoomMesh(const std::string& texturePath) - { - // Загружаем текстуру - auto texture = std::make_shared(CreateTextureDataFromBmp24(texturePath)); - addTexture(texture); // Добавляем текстуру в комнату - - // Создаём меш комнаты на основе текстуры (например, прямоугольник) - roomMesh = CreateRect2D({0.0f, 0.0f}, {1024.0f, 1024.0f}, 1.0f); - roomMeshMutable.AssignFrom(roomMesh); - roomMeshMutable.RefreshVBO(); - } - - - void addTexture(std::shared_ptr texture) - { - textures.push_back(texture); - } - - void addObject(const ActiveObject& obj) - { - objects.push_back(obj); - } - - std::vector& getObjects() { - return objects; // Теперь можно изменять элементы вектора - } - - - void render(Renderer& renderer) - { - renderer.PushMatrix(); - renderer.LoadIdentity(); - - // Рисуем комнату - if (!textures.empty()) - { - glBindTexture(GL_TEXTURE_2D, textures[0]->getTexID()); - } - renderer.DrawVertexRenderStruct(roomMeshMutable); - - // Рисуем объекты в комнате - for (const auto& obj : objects) - { - renderer.PushMatrix(); - renderer.TranslateMatrix(obj.objectPos); - glBindTexture(GL_TEXTURE_2D, obj.activeObjectTexturePtr->getTexID()); - renderer.DrawVertexRenderStruct(obj.activeObjectMeshMutable); - renderer.PopMatrix(); - } - - renderer.PopMatrix(); - } - - std::string getName() const { return name; } - }; } diff --git a/start.sh b/start.sh index b3235c2..9147ca9 100755 --- a/start.sh +++ b/start.sh @@ -8,4 +8,4 @@ g++ Game.cpp main.cpp Math.cpp OpenGlExtensions.cpp Physics.cpp Renderer.cpp \ $(pkg-config --cflags --libs vorbis vorbisfile ogg) \ -lopenal -./sdl_app \ No newline at end of file +#./sdl_app \ No newline at end of file