Added monster

This commit is contained in:
Vladislav Khorev 2025-03-02 22:44:12 +03:00
parent 32b2acf739
commit 769854ac84
8 changed files with 104 additions and 0 deletions

View File

@ -42,4 +42,7 @@ bool Environment::exitGameLoop = false;
bool Environment::gameIsLoading = true;
float Environment::monsterTimer = 0.0;
int Environment::monsterState = 1;
} // namespace ZL

View File

@ -46,6 +46,9 @@ public:
static bool gameIsLoading;
static float monsterTimer;
static int monsterState;
};

View File

@ -174,6 +174,15 @@ void GameObjectManager::initialize() {
objects_in_inventory++;
monsterTexturePtr1 = std::make_shared<Texture>(CreateTextureDataFromBmp32("./monster001.bmp32"));
monsterTexturePtr2 = std::make_shared<Texture>(CreateTextureDataFromBmp32("./monster002.bmp32"));
monsterScreenMesh = CreateRect2D({ 0.f, 0.f }, { 300.f, 300.f }, 0.5);
monsterScreenMeshMutable.AssignFrom(monsterScreenMesh);
monsterScreenMeshMutable.RefreshVBO();
//SDL_ShowCursor(SDL_DISABLE);
SDL_SetRelativeMouseMode(SDL_TRUE);
@ -555,6 +564,30 @@ void GameObjectManager::updateScene(size_t ms) {
Environment::violaLastWalkFrame = int(Environment::violaCurrentWalkFrame);
}
}
if (Environment::monsterState == 0)
{
Environment::monsterTimer += ms;
if (Environment::monsterTimer > 500)
{
Environment::monsterTimer = 0;
Environment::monsterState = 1;
}
}
else
{
Environment::monsterTimer += ms;
if (Environment::monsterTimer > 500)
{
Environment::monsterTimer = 0;
Environment::monsterState = 0;
}
}
//float Environment::monsterTimer = 0.0;
//int Environment::monsterState = 1;
}
bool GameObjectManager::isPointInObject(int screenX, int screenY, int objectScreenX, int objectScreenY) const {

View File

@ -81,6 +81,12 @@ public:
bool sideThreadLoadingCompleted = false;
int current_room_index;
std::shared_ptr<ZL::Texture> monsterTexturePtr1;
std::shared_ptr<ZL::Texture> monsterTexturePtr2;
ZL::VertexDataStruct monsterScreenMesh;
ZL::VertexRenderStruct monsterScreenMeshMutable;
private:
//int animationCounter = 0;
int lastMouseX = 0; // Добавляем переменные для хранения позиции мыши

View File

@ -121,6 +121,8 @@ void RenderSystem::drawWorld(GameObjectManager& gameObjects) {
//glBindTexture(GL_TEXTURE_2D, gameObjects.coneTexturePtr->getTexID());
//renderer.DrawVertexRenderStruct(gameObjects.coneMeshMutable);
//drawMonster(gameObjects);
//glClear(GL_DEPTH_BUFFER_BIT);
drawViola(gameObjects);
@ -175,6 +177,13 @@ void RenderSystem::drawWorld(GameObjectManager& gameObjects) {
glBindTexture(GL_TEXTURE_2D, gameObjects.rooms[gameObjects.current_room_index].roomTexture->getTexID());
renderer.DrawVertexRenderStruct(gameObjects.rooms[gameObjects.current_room_index].textMeshMutable);
if (gameObjects.current_room_index == 1)
{
drawMonster(gameObjects);
}
drawViola(gameObjects);
Matrix4f latestProjectionModelView = renderer.GetProjectionModelViewMatrix();
// Проверяем пересечение с мышью после расчета всех матриц
@ -326,6 +335,55 @@ void RenderSystem::drawLoadingScreen(const GameObjectManager& gameObjects)
}
void RenderSystem::drawMonster(const GameObjectManager& gameObjects)
{
renderer.shaderManager.PushShader("default");
static const std::string vPositionName = "vPosition";
static const std::string vTexCoordName = "vTexCoord";
renderer.EnableVertexAttribArray(vPositionName);
renderer.EnableVertexAttribArray(vTexCoordName);
renderer.PushProjectionMatrix(static_cast<float>(Environment::width),
static_cast<float>(Environment::height), -10, 10);
renderer.PushMatrix();
renderer.LoadIdentity();
std::cout << "Found activeObjectScreenTexturePtr" << std::endl;
int screenX, screenY;
Vector3f objectPosPlusShift = Vector3f{ -300, 50, -70 };
worldToScreenCoordinates(objectPosPlusShift, currentProjectionModelView,
Environment::width, Environment::height, screenX, screenY);
renderer.PushMatrix();
// Здесь можно использовать вычисленные screenX, screenY,
// но для теста оставляем фиксированное значение
renderer.TranslateMatrix(Vector3f{ screenX + 0.f, screenY + 0.f, 0.0f });
if (Environment::monsterState == 0)
{
glBindTexture(GL_TEXTURE_2D, gameObjects.monsterTexturePtr1->getTexID());
}
else
{
glBindTexture(GL_TEXTURE_2D, gameObjects.monsterTexturePtr2->getTexID());
}
renderer.DrawVertexRenderStruct(gameObjects.monsterScreenMeshMutable);
renderer.PopMatrix();
renderer.PopMatrix();
renderer.PopProjectionMatrix();
// Выключаем атрибуты, чтобы сохранить баланс
renderer.DisableVertexAttribArray(vPositionName);
renderer.DisableVertexAttribArray(vTexCoordName);
// Снимаем шейдер, тем самым балансируя стек
renderer.shaderManager.PopShader();
}
void RenderSystem::worldToScreenCoordinates(Vector3f objectPos,
Matrix4f projectionModelView,
int screenWidth, int screenHeight,

View File

@ -26,6 +26,7 @@ private:
void drawViola(GameObjectManager& gameObjects);
void drawLoadingScreen(const GameObjectManager& gameObjects);
void drawMonster(const GameObjectManager& gameObjects);
ShaderManager shaderManager;
Matrix4f currentProjectionModelView; // Добавлено для хранения матрицы между drawWorld и drawUI

BIN
monster001.bmp32 Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
monster002.bmp32 Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB