Fixing rooms

This commit is contained in:
maka70vv 2025-03-01 23:52:55 +06:00
parent 243dd61209
commit 74a2dc78a6
7 changed files with 58 additions and 94 deletions

View File

@ -3,6 +3,7 @@
#include "Math.h"
#include <memory>
namespace ZL {
struct ActiveObject {
std::shared_ptr<ZL::Texture> activeObjectTexturePtr;
ZL::VertexDataStruct activeObjectMesh;
@ -15,3 +16,5 @@ struct ActiveObject {
ZL::Vector3f objectPos;
bool highlighted = false;
};
}

View File

@ -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();
}

View File

@ -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<Texture>(CreateTextureDataFromBmp24("./Kitchen_ceramics.bmp"));
std::cout << "Hello x1" << std::endl;
coneTexturePtr = std::make_shared<Texture>(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<AudioPlayer>();
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<Texture>(CreateTextureDataFromBmp24("./Kitchen_ceramics.bmp"));
auto testConeTexture = std::make_shared<Texture>(CreateTextureDataFromBmp24("./conus.bmp"));
AddItemToInventory("RoomCeramics", testRoomTexture);
AddItemToInventory("Cone", testConeTexture);
std::cout << "Hello x8" << std::endl;
roomTexturePtr = std::make_shared<Texture>(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);
}
}

View File

@ -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<ActiveObject> activeObjects;
std::vector<ZL::ActiveObject> activeObjects;
std::unique_ptr<AudioPlayer> audioPlayer;
ZL::VertexDataStruct inventoryIconMesh;

View File

@ -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();
// Проверяем пересечение с мышью после расчета всех матриц

83
Room.h
View File

@ -7,89 +7,8 @@
#include "Renderer.h"
#include "ObjLoader.h"
#include "Physics.h"
#include "ActiveObject.h"
namespace ZL
{
struct ActiveObject
{
std::shared_ptr<Texture> activeObjectTexturePtr;
VertexDataStruct activeObjectMesh;
VertexRenderStruct activeObjectMeshMutable;
std::shared_ptr<Texture> activeObjectScreenTexturePtr;
VertexDataStruct activeObjectScreenMesh;
VertexRenderStruct activeObjectScreenMeshMutable;
Vector3f objectPos;
bool highlighted = false;
};
class Room
{
private:
std::string name;
std::vector<std::shared_ptr<Texture>> textures;
VertexDataStruct roomMesh;
VertexRenderStruct roomMeshMutable;
std::vector<ActiveObject> objects;
public:
Room(const std::string& roomName) : name(roomName) {}
// Создаем меш комнаты (куб)
void createRoomMesh(const std::string& texturePath)
{
// Загружаем текстуру
auto texture = std::make_shared<Texture>(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> texture)
{
textures.push_back(texture);
}
void addObject(const ActiveObject& obj)
{
objects.push_back(obj);
}
std::vector<ActiveObject>& 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; }
};
}

View File

@ -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
#./sdl_app