Fixing rooms
This commit is contained in:
parent
243dd61209
commit
74a2dc78a6
@ -3,6 +3,7 @@
|
|||||||
#include "Math.h"
|
#include "Math.h"
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
namespace ZL {
|
||||||
struct ActiveObject {
|
struct ActiveObject {
|
||||||
std::shared_ptr<ZL::Texture> activeObjectTexturePtr;
|
std::shared_ptr<ZL::Texture> activeObjectTexturePtr;
|
||||||
ZL::VertexDataStruct activeObjectMesh;
|
ZL::VertexDataStruct activeObjectMesh;
|
||||||
@ -15,3 +16,5 @@ struct ActiveObject {
|
|||||||
ZL::Vector3f objectPos;
|
ZL::Vector3f objectPos;
|
||||||
bool highlighted = false;
|
bool highlighted = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
}
|
||||||
13
Game.cpp
13
Game.cpp
@ -47,13 +47,21 @@ void Game::setup() {
|
|||||||
ZL::BindOpenGlFunctions();
|
ZL::BindOpenGlFunctions();
|
||||||
ZL::CheckGlError();
|
ZL::CheckGlError();
|
||||||
|
|
||||||
|
std::cout << "Hello 1" << std::endl;
|
||||||
|
|
||||||
// Initialize renderer
|
// Initialize renderer
|
||||||
renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default.fragment");
|
renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default.fragment");
|
||||||
renderer.shaderManager.AddShaderFromFiles("defaultColor", "./defaultColor.vertex", "./defaultColor.fragment");
|
renderer.shaderManager.AddShaderFromFiles("defaultColor", "./defaultColor.vertex", "./defaultColor.fragment");
|
||||||
renderer.InitOpenGL();
|
|
||||||
|
|
||||||
// Initialize game objects
|
// Initialize game objects
|
||||||
|
std::cout << "Hello 2" << std::endl;
|
||||||
|
|
||||||
gameObjects.initialize();
|
gameObjects.initialize();
|
||||||
|
|
||||||
|
std::cout << "Hello 3" << std::endl;
|
||||||
|
|
||||||
|
renderer.InitOpenGL();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::drawScene() {
|
void Game::drawScene() {
|
||||||
@ -72,7 +80,7 @@ void Game::processTickCount() {
|
|||||||
size_t delta = (newTickCount - lastTickCount > CONST_MAX_TIME_INTERVAL) ?
|
size_t delta = (newTickCount - lastTickCount > CONST_MAX_TIME_INTERVAL) ?
|
||||||
CONST_MAX_TIME_INTERVAL : newTickCount - lastTickCount;
|
CONST_MAX_TIME_INTERVAL : newTickCount - lastTickCount;
|
||||||
|
|
||||||
gameObjects.update();
|
gameObjects.updateScene(delta);
|
||||||
|
|
||||||
lastTickCount = newTickCount;
|
lastTickCount = newTickCount;
|
||||||
}
|
}
|
||||||
@ -98,6 +106,7 @@ void Game::update() {
|
|||||||
exitGameLoop = true;
|
exitGameLoop = true;
|
||||||
}
|
}
|
||||||
gameObjects.handleEvent(event);
|
gameObjects.handleEvent(event);
|
||||||
|
|
||||||
}
|
}
|
||||||
render();
|
render();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
#include "Environment.h"
|
#include "Environment.h"
|
||||||
#include "ObjLoader.h"
|
#include "ObjLoader.h"
|
||||||
#include "Inventory.h"
|
#include "Inventory.h"
|
||||||
|
#include "Room.h"
|
||||||
#include "TextModel.h" // Add this include for LoadFromTextFile
|
#include "TextModel.h" // Add this include for LoadFromTextFile
|
||||||
|
|
||||||
namespace ZL {
|
namespace ZL {
|
||||||
@ -10,10 +11,13 @@ const float GameObjectManager::INVENTORY_ICON_SIZE = 32.0f;
|
|||||||
const float GameObjectManager::INVENTORY_MARGIN = 10.0f;
|
const float GameObjectManager::INVENTORY_MARGIN = 10.0f;
|
||||||
|
|
||||||
void GameObjectManager::initialize() {
|
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"));
|
coneTexturePtr = std::make_shared<Texture>(CreateTextureDataFromBmp24("./conus.bmp"));
|
||||||
|
|
||||||
|
std::cout << "Hello x2" << std::endl;
|
||||||
|
|
||||||
// Load models
|
// Load models
|
||||||
colorCubeMesh = CreateCube3D(5.0);
|
colorCubeMesh = CreateCube3D(5.0);
|
||||||
colorCubeMeshMutable.data = CreateCube3D(5.0);
|
colorCubeMeshMutable.data = CreateCube3D(5.0);
|
||||||
@ -25,15 +29,23 @@ void GameObjectManager::initialize() {
|
|||||||
testObjMeshMutable.data = testObjMesh;
|
testObjMeshMutable.data = testObjMesh;
|
||||||
testObjMeshMutable.RefreshVBO();
|
testObjMeshMutable.RefreshVBO();
|
||||||
|
|
||||||
|
std::cout << "Hello x2" << std::endl;
|
||||||
|
|
||||||
textMesh = ZL::LoadFromTextFile("./mesh001.txt"); // Add ZL:: namespace
|
textMesh = ZL::LoadFromTextFile("./mesh001.txt"); // Add ZL:: namespace
|
||||||
coneMesh = ZL::LoadFromTextFile("./cone001.txt"); // Add ZL:: namespace
|
coneMesh = ZL::LoadFromTextFile("./cone001.txt"); // Add ZL:: namespace
|
||||||
coneMesh.Scale(200);
|
coneMesh.Scale(200);
|
||||||
|
|
||||||
|
std::cout << "Hello x3" << std::endl;
|
||||||
|
|
||||||
|
|
||||||
textMeshMutable.AssignFrom(textMesh);
|
textMeshMutable.AssignFrom(textMesh);
|
||||||
textMeshMutable.RefreshVBO();
|
textMeshMutable.RefreshVBO();
|
||||||
coneMeshMutable.AssignFrom(coneMesh);
|
coneMeshMutable.AssignFrom(coneMesh);
|
||||||
coneMeshMutable.RefreshVBO();
|
coneMeshMutable.RefreshVBO();
|
||||||
|
|
||||||
|
std::cout << "Hello x4" << std::endl;
|
||||||
|
|
||||||
|
|
||||||
// Load bone animations
|
// Load bone animations
|
||||||
bx.LoadFromFile("mesh_armature_and_animation_data.txt");
|
bx.LoadFromFile("mesh_armature_and_animation_data.txt");
|
||||||
|
|
||||||
@ -51,12 +63,17 @@ void GameObjectManager::initialize() {
|
|||||||
ao1.activeObjectScreenMeshMutable.RefreshVBO();
|
ao1.activeObjectScreenMeshMutable.RefreshVBO();
|
||||||
activeObjects.push_back(ao1);
|
activeObjects.push_back(ao1);
|
||||||
|
|
||||||
|
std::cout << "Hello x5" << std::endl;
|
||||||
|
|
||||||
|
|
||||||
// Initialize audio
|
// Initialize audio
|
||||||
audioPlayer = std::make_unique<AudioPlayer>();
|
audioPlayer = std::make_unique<AudioPlayer>();
|
||||||
if (audioPlayer) {
|
if (audioPlayer) {
|
||||||
audioPlayer->playMusic("Symphony No.6 (1st movement).ogg");
|
audioPlayer->playMusic("Symphony No.6 (1st movement).ogg");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::cout << "Hello x6" << std::endl;
|
||||||
|
|
||||||
// Initialize inventory
|
// Initialize inventory
|
||||||
inventoryIconMesh = CreateRect2D(
|
inventoryIconMesh = CreateRect2D(
|
||||||
{0.0f, 0.0f},
|
{0.0f, 0.0f},
|
||||||
@ -66,21 +83,33 @@ void GameObjectManager::initialize() {
|
|||||||
inventoryIconMeshMutable.AssignFrom(inventoryIconMesh);
|
inventoryIconMeshMutable.AssignFrom(inventoryIconMesh);
|
||||||
inventoryIconMeshMutable.RefreshVBO();
|
inventoryIconMeshMutable.RefreshVBO();
|
||||||
|
|
||||||
|
std::cout << "Hello x7" << std::endl;
|
||||||
|
|
||||||
|
|
||||||
// Add test items to inventory
|
// Add test items to inventory
|
||||||
auto testRoomTexture = std::make_shared<Texture>(CreateTextureDataFromBmp24("./Kitchen_ceramics.bmp"));
|
auto testRoomTexture = std::make_shared<Texture>(CreateTextureDataFromBmp24("./Kitchen_ceramics.bmp"));
|
||||||
auto testConeTexture = std::make_shared<Texture>(CreateTextureDataFromBmp24("./conus.bmp"));
|
auto testConeTexture = std::make_shared<Texture>(CreateTextureDataFromBmp24("./conus.bmp"));
|
||||||
AddItemToInventory("RoomCeramics", testRoomTexture);
|
AddItemToInventory("RoomCeramics", testRoomTexture);
|
||||||
AddItemToInventory("Cone", testConeTexture);
|
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) {
|
void GameObjectManager::handleEvent(const SDL_Event& event) {
|
||||||
if (event.type == SDL_MOUSEBUTTONDOWN) {
|
if (event.type == SDL_MOUSEBUTTONDOWN) {
|
||||||
bx.Interpolate(animationCounter);
|
bx.Interpolate(animationCounter);
|
||||||
animationCounter += 2;
|
animationCounter += 2;
|
||||||
|
}
|
||||||
|
else if (event.type == SDL_MOUSEBUTTONDOWN && event.button.button == SDL_BUTTON_RIGHT) {
|
||||||
|
|
||||||
|
//switchRoom();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (event.type == SDL_MOUSEWHEEL) {
|
else if (event.type == SDL_MOUSEWHEEL) {
|
||||||
static const float zoomstep = 1.0f;
|
static const float zoomstep = 1.0f;
|
||||||
@ -154,6 +183,7 @@ void GameObjectManager::handleEvent(const SDL_Event& event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GameObjectManager::updateScene(size_t ms) {
|
void GameObjectManager::updateScene(size_t ms) {
|
||||||
const float SPEED = 0.1f;
|
const float SPEED = 0.1f;
|
||||||
if (Environment::leftPressed) {
|
if (Environment::leftPressed) {
|
||||||
@ -180,6 +210,7 @@ void GameObjectManager::updateScene(size_t ms) {
|
|||||||
pow(Environment::characterPos.v[2] - ao.objectPos.v[2], 2)
|
pow(Environment::characterPos.v[2] - ao.objectPos.v[2], 2)
|
||||||
);
|
);
|
||||||
ao.highlighted = (dist < 50.f);
|
ao.highlighted = (dist < 50.f);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -12,7 +12,7 @@ namespace ZL {
|
|||||||
class GameObjectManager {
|
class GameObjectManager {
|
||||||
public:
|
public:
|
||||||
void initialize();
|
void initialize();
|
||||||
void update();
|
|
||||||
void handleEvent(const SDL_Event& event);
|
void handleEvent(const SDL_Event& event);
|
||||||
void updateScene(size_t ms);
|
void updateScene(size_t ms);
|
||||||
void checkMouseIntersection(int mouseX, int mouseY, const Matrix4f& projectionModelView); // Добавляем новый метод
|
void checkMouseIntersection(int mouseX, int mouseY, const Matrix4f& projectionModelView); // Добавляем новый метод
|
||||||
@ -36,7 +36,7 @@ public:
|
|||||||
ZL::VertexDataStruct coneMesh;
|
ZL::VertexDataStruct coneMesh;
|
||||||
ZL::VertexRenderStruct coneMeshMutable;
|
ZL::VertexRenderStruct coneMeshMutable;
|
||||||
|
|
||||||
std::vector<ActiveObject> activeObjects;
|
std::vector<ZL::ActiveObject> activeObjects;
|
||||||
std::unique_ptr<AudioPlayer> audioPlayer;
|
std::unique_ptr<AudioPlayer> audioPlayer;
|
||||||
|
|
||||||
ZL::VertexDataStruct inventoryIconMesh;
|
ZL::VertexDataStruct inventoryIconMesh;
|
||||||
|
|||||||
@ -18,7 +18,7 @@ void RenderSystem::drawScene(const GameObjectManager& gameObjects) {
|
|||||||
static const std::string vTexCoordName = "vTexCoord";
|
static const std::string vTexCoordName = "vTexCoord";
|
||||||
static const std::string textureUniformName = "Texture";
|
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);
|
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
glViewport(0, 0, Environment::width, Environment::height);
|
glViewport(0, 0, Environment::width, Environment::height);
|
||||||
@ -51,6 +51,7 @@ void RenderSystem::drawWorld(const GameObjectManager& gameObjects) {
|
|||||||
float t = 0.3;
|
float t = 0.3;
|
||||||
renderer.RotateMatrix(QuatFromRotateAroundX(t * M_PI / 2.0));
|
renderer.RotateMatrix(QuatFromRotateAroundX(t * M_PI / 2.0));
|
||||||
|
|
||||||
|
|
||||||
// Draw cone
|
// Draw cone
|
||||||
glBindTexture(GL_TEXTURE_2D, gameObjects.coneTexturePtr->getTexID());
|
glBindTexture(GL_TEXTURE_2D, gameObjects.coneTexturePtr->getTexID());
|
||||||
renderer.DrawVertexRenderStruct(gameObjects.coneMeshMutable);
|
renderer.DrawVertexRenderStruct(gameObjects.coneMeshMutable);
|
||||||
@ -70,6 +71,7 @@ void RenderSystem::drawWorld(const GameObjectManager& gameObjects) {
|
|||||||
glBindTexture(GL_TEXTURE_2D, gameObjects.roomTexturePtr->getTexID());
|
glBindTexture(GL_TEXTURE_2D, gameObjects.roomTexturePtr->getTexID());
|
||||||
renderer.DrawVertexRenderStruct(gameObjects.textMeshMutable);
|
renderer.DrawVertexRenderStruct(gameObjects.textMeshMutable);
|
||||||
|
|
||||||
|
|
||||||
Matrix4f latestProjectionModelView = renderer.GetProjectionModelViewMatrix();
|
Matrix4f latestProjectionModelView = renderer.GetProjectionModelViewMatrix();
|
||||||
|
|
||||||
// Проверяем пересечение с мышью после расчета всех матриц
|
// Проверяем пересечение с мышью после расчета всех матриц
|
||||||
|
|||||||
83
Room.h
83
Room.h
@ -7,89 +7,8 @@
|
|||||||
#include "Renderer.h"
|
#include "Renderer.h"
|
||||||
#include "ObjLoader.h"
|
#include "ObjLoader.h"
|
||||||
#include "Physics.h"
|
#include "Physics.h"
|
||||||
|
#include "ActiveObject.h"
|
||||||
namespace ZL
|
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; }
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user