diff --git a/server/server_application.hpp b/server/server_application.hpp index 2756be3..8ed4f24 100644 --- a/server/server_application.hpp +++ b/server/server_application.hpp @@ -107,6 +107,7 @@ private: //utility methods void PumpPacket(SerialPacket* const); + void PumpPacketProximity(SerialPacket* const argPacket, int roomIndex, Vector2 position, int distance); void CopyCharacterToPacket(CharacterPacket* const packet, int characterIndex); //APIs and utilities diff --git a/server/server_character_methods.cpp b/server/server_character_methods.cpp index 3f898f9..910a6cc 100644 --- a/server/server_character_methods.cpp +++ b/server/server_character_methods.cpp @@ -300,5 +300,5 @@ void ServerApplication::HandleCharacterSetMotion(CharacterPacket* const argPacke CharacterPacket newPacket; CopyCharacterToPacket(&newPacket, argPacket->characterIndex); newPacket.type = SerialPacketType::CHARACTER_SET_MOTION; - PumpPacket(&newPacket); + PumpPacketProximity(&newPacket, characterData->GetRoomIndex(), characterData->GetOrigin(), -1); } diff --git a/server/server_methods.cpp b/server/server_methods.cpp index 1e968b1..1d50643 100644 --- a/server/server_methods.cpp +++ b/server/server_methods.cpp @@ -175,6 +175,22 @@ void ServerApplication::PumpPacket(SerialPacket* const argPacket) { } } +void ServerApplication::PumpPacketProximity(SerialPacket* const argPacket, int roomIndex, Vector2 position, int distance) { + RoomData* room = roomMgr.Get(roomIndex); + + if (!room) { + throw(std::runtime_error("Failed to pump to a non-existant room")); + } + + for (auto& character : *room->GetCharacterList()) { + if (distance == -1 || (character->GetOrigin() - position).Length() <= distance) { + AccountData* account = accountMgr.Get(character->GetOwner()); + ClientData* client = clientMgr.Get(account->GetClientIndex()); + network.SendTo(client->GetAddress(), argPacket); + } + } +} + void ServerApplication::CopyCharacterToPacket(CharacterPacket* const packet, int characterIndex) { CharacterData* character = characterMgr.Get(characterIndex); if (!character) {