From ab6207d4f34534ebe697501a377d5b51edaea616 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Thu, 14 Apr 2016 12:43:00 +1000 Subject: [PATCH] Barriers are working corretly, but are way too slow --- client/scenes/world.cpp | 3 +++ server/combat/barrier_manager.cpp | 11 +++++++++-- server/rooms/room_data.cpp | 17 +++++++++++++++-- server/rooms/room_data.hpp | 2 +- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/client/scenes/world.cpp b/client/scenes/world.cpp index 8aad428..d9a3527 100644 --- a/client/scenes/world.cpp +++ b/client/scenes/world.cpp @@ -740,16 +740,19 @@ void World::hCharacterCreate(CharacterPacket* const argPacket) { memset(&characterPacket, 0, MAX_PACKET_SIZE); characterPacket.type = SerialPacketType::QUERY_CHARACTER_EXISTS; characterPacket.roomIndex = roomIndex; + characterPacket.origin = localCharacter->GetOrigin(); network.SendTo(Channels::SERVER, &characterPacket); CreaturePacket creaturePacket; creaturePacket.type = SerialPacketType::QUERY_CREATURE_EXISTS; creaturePacket.roomIndex = roomIndex; + creaturePacket.origin = localCharacter->GetOrigin(); network.SendTo(Channels::SERVER, &creaturePacket); BarrierPacket barrierPacket; barrierPacket.type = SerialPacketType::QUERY_BARRIER_EXISTS; barrierPacket.roomIndex = roomIndex; + barrierPacket.origin = localCharacter->GetOrigin(); network.SendTo(Channels::SERVER, &barrierPacket); } diff --git a/server/combat/barrier_manager.cpp b/server/combat/barrier_manager.cpp index 040ec7f..c7d454b 100644 --- a/server/combat/barrier_manager.cpp +++ b/server/combat/barrier_manager.cpp @@ -23,6 +23,8 @@ #include "lua_utilities.hpp" +#include "barrier_defines.hpp" + BarrierManager::BarrierManager() { //EMPTY } @@ -41,7 +43,12 @@ void BarrierManager::Update( //for each given creature, if a collision was detected, make a new barrier for (auto& it : *creatureList) { if (std::get<2>(it) & 2) { - Create(-1); //instance from creature index? + int index = Create(-1); //instance from creature index? + BarrierData* barrierData = Find(index); + barrierData->SetOrigin({ + (CREATURE_BOUNDS_WIDTH - BARRIER_BOUNDS_WIDTH) / 2 + std::get<1>(it)->GetOrigin().x, + (CREATURE_BOUNDS_HEIGHT - BARRIER_BOUNDS_HEIGHT) / 2 + std::get<1>(it)->GetOrigin().y + }); } } @@ -76,7 +83,7 @@ void BarrierManager::Update( void BarrierManager::Cleanup(std::list>* barrierList) { //unload the given barrier objects for (auto& it : *barrierList) { - if (std::get<2>(it) & 2) { + if (std::get<2>(it) & 4) { Unload(std::get<0>(it)); } } diff --git a/server/rooms/room_data.cpp b/server/rooms/room_data.cpp index 679f351..305fa17 100644 --- a/server/rooms/room_data.cpp +++ b/server/rooms/room_data.cpp @@ -64,7 +64,15 @@ void RoomData::RunFrame() { for (auto& it : creatureList) { CreaturePacket packet; copyCreatureToPacket(&packet, std::get<1>(it), std::get<0>(it)); - packet.type = std::get<2>(it) != 0 ? SerialPacketType::CREATURE_UPDATE : SerialPacketType::CREATURE_UNLOAD; + + //interpret the event + if (std::get<2>(it) & 1) { + packet.type = SerialPacketType::CREATURE_UPDATE; + } + if (std::get<2>(it) & 2) { + packet.type = SerialPacketType::CREATURE_UNLOAD; + } + packet.roomIndex = roomIndex; pumpPacketProximity(reinterpret_cast(&packet), roomIndex, std::get<1>(it)->GetOrigin(), INFLUENCE_RADIUS); } @@ -73,7 +81,12 @@ void RoomData::RunFrame() { for (auto& it : barrierList) { BarrierPacket packet; copyBarrierToPacket(&packet, std::get<1>(it), std::get<0>(it)); - packet.type = std::get<2>(it) != 0 ? SerialPacketType::BARRIER_UPDATE : SerialPacketType::BARRIER_UNLOAD; + + //interpret the event + if (std::get<2>(it) & 1 || std::get<2>(it) & 2) { + packet.type = SerialPacketType::BARRIER_UPDATE; + } + packet.roomIndex = roomIndex; pumpPacketProximity(reinterpret_cast(&packet), roomIndex, std::get<1>(it)->GetOrigin(), INFLUENCE_RADIUS); } diff --git a/server/rooms/room_data.hpp b/server/rooms/room_data.hpp index cd7cb23..c6a98e4 100644 --- a/server/rooms/room_data.hpp +++ b/server/rooms/room_data.hpp @@ -79,7 +79,7 @@ private: int roomIndex = 0; BarrierManager barrierMgr; std::list characterList; - CombatInstanceManager CombatInstanceMgr; + CombatInstanceManager combatInstanceMgr; CreatureManager creatureMgr; RegionPagerLua pager; TriggerManager triggerMgr;