From 579aa9d31deb84eaef493f8457a92b127a9e6da4 Mon Sep 17 00:00:00 2001 From: dongresource Date: Sat, 12 Sep 2020 01:22:58 +0200 Subject: [PATCH] Save pointer to Player struct in CNSocket. This is an insignificant optimization now, but will be necessary when we start switching around the the algorithms and datastructures used in proximity detection. --- src/CNProtocol.hpp | 3 +++ src/PlayerManager.cpp | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/CNProtocol.hpp b/src/CNProtocol.hpp index c83c26e..a23de27 100644 --- a/src/CNProtocol.hpp +++ b/src/CNProtocol.hpp @@ -132,6 +132,8 @@ enum ACTIVEKEY { SOCKETKEY_FE }; +struct Player; + class CNSocket; typedef void (*PacketHandler)(CNSocket* sock, CNPacketData* data); @@ -153,6 +155,7 @@ private: public: SOCKET sock; PacketHandler pHandler; + Player *plr = nullptr; CNSocket(SOCKET s, PacketHandler ph); diff --git a/src/PlayerManager.cpp b/src/PlayerManager.cpp index d34ef8b..755c179 100644 --- a/src/PlayerManager.cpp +++ b/src/PlayerManager.cpp @@ -6,6 +6,8 @@ #include "settings.hpp" +#include + #include #include #include @@ -45,6 +47,8 @@ void PlayerManager::addPlayer(CNSocket* key, Player plr) { players[key].plr = p; players[key].lastHeartbeat = 0; + key->plr = p; + std::cout << U16toU8(plr.PCStyle.szFirstName) << " " << U16toU8(plr.PCStyle.szLastName) << " has joined!" << std::endl; std::cout << players.size() << " players" << std::endl; } @@ -66,6 +70,7 @@ void PlayerManager::removePlayer(CNSocket* key) { std::cout << U16toU8(cachedView.plr->PCStyle.szFirstName) << " " << U16toU8(cachedView.plr->PCStyle.szLastName) << " has left!" << std::endl; std::cout << players.size() << " players" << std::endl; + key->plr = nullptr; delete cachedView.plr; players.erase(key); } @@ -692,7 +697,8 @@ void PlayerManager::changePlayerGuide(CNSocket *sock, CNPacketData *data) { #pragma region Helper methods Player *PlayerManager::getPlayer(CNSocket* key) { - return players[key].plr; + assert(key->plr != nullptr); + return key->plr; } WarpLocation PlayerManager::getRespawnPoint(Player *plr) {