Merge branch 'salmon' of github.com:mephi1984/ZeptoLabTest1 into Albert

This commit is contained in:
Альберт Гадиев 2025-03-03 01:41:52 +06:00
commit 82307f56e4
9 changed files with 2743 additions and 26 deletions

View File

@ -41,16 +41,7 @@ class ActiveObjectManager {
// Найти все объекты с нужным значением highlighted // Найти все объекты с нужным значением highlighted
// (возвращает список указателей на найденные объекты) // (возвращает список указателей на найденные объекты)
// ActiveObject.h // ActiveObject.h
std::vector<const ActiveObject*> findByHighlighted(bool highlighted) const {
std::vector<const ActiveObject*> result;
result.reserve(activeObjectsEntities.size());
for (const auto& [key, object] : activeObjectsEntities) { // const auto&
if (object.highlighted == highlighted) {
result.push_back(&object);
}
}
return result;
}

View File

@ -53,11 +53,17 @@ void GameObjectManager::initialize() {
loadingThread = std::thread([this]() { loadingThread = std::thread([this]() {
preloadedRoomMeshArr.resize(1); preloadedRoomMeshArr.resize(2);
preloadedRoomMeshArr[0] = ZL::LoadFromTextFile("./oneroom001.txt"); preloadedRoomMeshArr[0] = ZL::LoadFromTextFile("./oneroom001.txt");
preloadedRoomMeshArr[0].Scale(10); preloadedRoomMeshArr[0].Scale(10);
preloadedRoomMeshArr[0].Move(Vector3f{ 0, 93, 0 }); preloadedRoomMeshArr[0].Move(Vector3f{ 0, 93, 0 });
preloadedRoomMeshArr[1] = ZL::LoadFromTextFile("./secondroom001.txt");
preloadedRoomMeshArr[1].Scale(10);
preloadedRoomMeshArr[1].Move(Vector3f{ 0, 93, 0 });
//violaIdleModel.LoadFromFile("./idleviola001.txt"); //violaIdleModel.LoadFromFile("./idleviola001.txt");
violaIdleModel.LoadFromFile("./idleviola008.txt"); violaIdleModel.LoadFromFile("./idleviola008.txt");
@ -146,13 +152,13 @@ void GameObjectManager::initialize() {
room_1.collisionMgr.addCollider(std::make_shared<RectangleCollider>(Vector3f{ 156, 0, -400 }, Vector3f{ 380, 0, -360 })); room_1.collisionMgr.addCollider(std::make_shared<RectangleCollider>(Vector3f{ 156, 0, -400 }, Vector3f{ 380, 0, -360 }));
rooms.push_back(room_1); rooms.push_back(room_1);
aoMgr.addActiveObject(ao1); //aoMgr.addActiveObject(ao1);
Room room_2; Room room_2;
room_2.roomTexture = std::make_shared<Texture>(CreateTextureDataFromBmp24("./background.bmp")); room_2.roomTexture = std::make_shared<Texture>(CreateTextureDataFromBmp24("./seconroom.bmp"));
room_2.sound_name = "Symphony No.6 (1st movement).ogg"; room_2.sound_name = "Symphony No.6 (1st movement).ogg";
room_2.roomLogic = createRoom2Logic(); room_2.roomLogic = createRoom2Logic();
room_2.textMesh = preloadedRoomMeshArr[0]; room_2.textMesh = preloadedRoomMeshArr[1];
room_2.textMeshMutable.AssignFrom(room_2.textMesh); room_2.textMeshMutable.AssignFrom(room_2.textMesh);
room_2.collisionMgr.setRoomBoundary(800, 800); room_2.collisionMgr.setRoomBoundary(800, 800);
room_2.collisionMgr.addCollider(std::make_shared<RectangleCollider>(Vector3f{ 80, 0, 200 }, Vector3f{ 400, 0, 400 })); room_2.collisionMgr.addCollider(std::make_shared<RectangleCollider>(Vector3f{ 80, 0, 200 }, Vector3f{ 400, 0, 400 }));
@ -185,7 +191,7 @@ void GameObjectManager::initialize() {
objects_in_inventory++; objects_in_inventory++;
AddItemToInventory("cube_O", std::make_shared<Texture>(CreateTextureDataFromBmp32("./textures/inventory_objects/cubic_O_icon.bmp32")), objects_in_inventory + 1); AddItemToInventory("cube_O", std::make_shared<Texture>(CreateTextureDataFromBmp32("./textures/inventory_objects/cubic_O_icon.bmp32")), objects_in_inventory + 1);
objects_in_inventory++; objects_in_inventory++;
AddItemToInventory("cube_M", std::make_shared<Texture>(CreateTextureDataFromBmp32("./textures/inventory_objects/cubic_O_icon.bmp32")), objects_in_inventory + 1); AddItemToInventory("cube_M", std::make_shared<Texture>(CreateTextureDataFromBmp32("./textures/inventory_objects/cubic_M_icon.bmp32")), objects_in_inventory + 1);
objects_in_inventory++; objects_in_inventory++;
@ -230,7 +236,8 @@ void GameObjectManager::handleEvent(const SDL_Event& event) {
switch_room(1); switch_room(1);
} }
else if (event.type == SDL_MOUSEBUTTONDOWN) { else if (event.type == SDL_MOUSEBUTTONDOWN) {
const auto highlightedObjects = aoMgr.findByHighlighted(true); const auto highlightedObjects = rooms[current_room_index].findByHighlighted(true);
if (InventoryItem* item = GetItemSelected(true)) { if (InventoryItem* item = GetItemSelected(true)) {
std::cout << item->name << std::endl; std::cout << item->name << std::endl;
@ -266,7 +273,7 @@ void GameObjectManager::handleEvent(const SDL_Event& event) {
} }
} }
else { else {
const auto highlightedObjects = aoMgr.findByHighlighted(true); const auto highlightedObjects = rooms[current_room_index].findByHighlighted(true);
for (auto* ao : highlightedObjects) { for (auto* ao : highlightedObjects) {
if (!ao) { if (!ao) {
@ -276,7 +283,9 @@ void GameObjectManager::handleEvent(const SDL_Event& event) {
AddItemToInventory(ao->name, ao->activeObjectTexturePtr, objects_in_inventory+1); AddItemToInventory(ao->name, ao->activeObjectTexturePtr, objects_in_inventory+1);
objects_in_inventory++; objects_in_inventory++;
aoMgr.removeByName(ao->name); rooms[current_room_index].removeByPtr(ao);
//aoMgr.removeByName(ao->name);
} }
// bx.Interpolate(animationCounter); // bx.Interpolate(animationCounter);
// animationCounter += 2; // animationCounter += 2;
@ -518,7 +527,8 @@ void GameObjectManager::updateScene(size_t ms) {
std::cout.flush(); // Чтобы обновлялось в той же строке*/ std::cout.flush(); // Чтобы обновлялось в той же строке*/
} }
for (auto& [key, obj] : aoMgr.activeObjectsEntities) { for (auto& obj : rooms[current_room_index].objects)
{
float dist = sqrtf( float dist = sqrtf(
pow(Environment::characterPos.v[0] - obj.objectPos.v[0], 2) + pow(Environment::characterPos.v[0] - obj.objectPos.v[0], 2) +
pow(Environment::characterPos.v[1] - obj.objectPos.v[1], 2) + pow(Environment::characterPos.v[1] - obj.objectPos.v[1], 2) +
@ -527,6 +537,16 @@ void GameObjectManager::updateScene(size_t ms) {
obj.highlighted = (dist < 50.f); obj.highlighted = (dist < 50.f);
} }
/*
for (auto& [key, obj] : aoMgr.activeObjectsEntities) {
float dist = sqrtf(
pow(Environment::characterPos.v[0] - obj.objectPos.v[0], 2) +
pow(Environment::characterPos.v[1] - obj.objectPos.v[1], 2) +
pow(Environment::characterPos.v[2] - obj.objectPos.v[2], 2)
);
obj.highlighted = (dist < 50.f);
}*/
if (rooms[current_room_index].roomLogic) { if (rooms[current_room_index].roomLogic) {
rooms[current_room_index].roomLogic(*this, ms); rooms[current_room_index].roomLogic(*this, ms);
} }

View File

@ -67,7 +67,7 @@ public:
static const float INVENTORY_MARGIN; static const float INVENTORY_MARGIN;
static const float SELECTED_CUBE_ICON_SIZE; static const float SELECTED_CUBE_ICON_SIZE;
static const float SELECTED_CUBE_MARGIN; static const float SELECTED_CUBE_MARGIN;
ActiveObjectManager aoMgr; //ActiveObjectManager aoMgr;
int objects_in_inventory; int objects_in_inventory;

View File

@ -11,13 +11,14 @@ namespace ZL
std::function<void(GameObjectManager&, size_t)> createRoom1Logic() std::function<void(GameObjectManager&, size_t)> createRoom1Logic()
{ {
return [](GameObjectManager& gom, size_t ms) return [elapsedTime = 0u](GameObjectManager& gom, size_t ms) mutable
{ {
if (gom.bearName.compare("TOM") == 0) { if (gom.bearName.compare("TOM") == 0) {
gInventoryMap.clear(); elapsedTime += ms;
gom.objects_in_inventory = 0; if (elapsedTime >= 2000) {
// std::this_thread::sleep_for(std::chrono::seconds(1)); gInventoryMap.clear();
gom.switch_room(1); gom.switch_room(1);
}
} }
}; };
} }

View File

@ -207,7 +207,8 @@ void RenderSystem::drawUI(const GameObjectManager& gameObjects) {
renderer.PushMatrix(); renderer.PushMatrix();
renderer.LoadIdentity(); renderer.LoadIdentity();
for (const auto* ao : gameObjects.aoMgr.findByHighlighted(true)) { //for (const auto* ao : gameObjects.aoMgr.findByHighlighted(true)) {
for (auto& ao : gameObjects.rooms[gameObjects.current_room_index].findByHighlighted(true)) {
std::cout << ao->name << std::endl; std::cout << ao->name << std::endl;
std::cout << "Draw" << std::endl; std::cout << "Draw" << std::endl;
if (ao->activeObjectScreenTexturePtr) { if (ao->activeObjectScreenTexturePtr) {

25
Room.h
View File

@ -23,6 +23,31 @@ struct Room{
Room() Room()
{ {
objects.reserve(30);
}
std::vector<const ActiveObject*> findByHighlighted(bool highlighted) const {
std::vector<const ActiveObject*> result;
for (auto& o : objects)
{
if (o.highlighted == highlighted) {
result.push_back(&o);
}
}
return result;
}
void removeByPtr(const ActiveObject* ptr) {
for (int i = 0; i < objects.size(); i++)
{
if (ptr == &objects[i])
{
objects.erase(objects.begin() + i);
return;
}
}
} }
}; };

2679
secondroom001.txt Normal file

File diff suppressed because it is too large Load Diff

BIN
seconroom.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 KiB