cache self player_ptr (#288)

This commit is contained in:
Quentin E. / iDeath 2022-06-27 15:24:34 +02:00 committed by GitHub
parent bb3c4ec0bf
commit 66cea797fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 7 deletions

View File

@ -138,9 +138,14 @@ namespace big
return m_selected_player; return m_selected_player;
} }
player_ptr player_service::get_self() const player_ptr player_service::get_self()
{ {
return std::make_shared<player>(*m_self); if (!m_self_ptr || !m_self_ptr->equals(*m_self))
{
m_self_ptr = std::make_shared<player>(*m_self);
}
return m_self_ptr;
} }
void player_service::player_join(CNetGamePlayer* net_game_player) void player_service::player_join(CNetGamePlayer* net_game_player)
@ -168,4 +173,4 @@ namespace big
{ {
m_selected_player = plyr; m_selected_player = plyr;
} }
} }

View File

@ -14,7 +14,7 @@ namespace big
public: public:
explicit player(CNetGamePlayer* net_game_player); explicit player(CNetGamePlayer* net_game_player);
~player() = default; ~player() = default;
player(const player&) = default; player(const player&) = default;
player(player&&) noexcept = default; player(player&&) noexcept = default;
player& operator=(const player&) = default; player& operator=(const player&) = default;
@ -50,6 +50,8 @@ namespace big
{ {
CNetGamePlayer** m_self; CNetGamePlayer** m_self;
player_ptr m_self_ptr;
players m_players; players m_players;
player_ptr m_dummy = std::make_shared<player>(nullptr); player_ptr m_dummy = std::make_shared<player>(nullptr);
@ -58,7 +60,7 @@ namespace big
player_service(); player_service();
~player_service(); ~player_service();
player_service(const player_service&) = delete; player_service(const player_service&) = delete;
player_service(player_service&&) noexcept = delete; player_service(player_service&&) noexcept = delete;
player_service& operator=(const player_service&) = delete; player_service& operator=(const player_service&) = delete;
@ -66,7 +68,7 @@ namespace big
void do_cleanup(); void do_cleanup();
[[nodiscard]] player_ptr get_self() const; [[nodiscard]] player_ptr get_self();
[[nodiscard]] player_ptr get_by_name(std::string name); [[nodiscard]] player_ptr get_by_name(std::string name);
[[nodiscard]] player_ptr get_by_msg_id(uint32_t msg_id) const; [[nodiscard]] player_ptr get_by_msg_id(uint32_t msg_id) const;
@ -84,4 +86,4 @@ namespace big
}; };
inline player_service* g_player_service{}; inline player_service* g_player_service{};
} }