diff --git a/src/multiplayer/game_multiplayer.cpp b/src/multiplayer/game_multiplayer.cpp index ccd8688e9..47d0ed97f 100644 --- a/src/multiplayer/game_multiplayer.cpp +++ b/src/multiplayer/game_multiplayer.cpp @@ -112,9 +112,10 @@ static bool MovePlayerToPos(Game_PlayerOther& player, int x, int y) { } void Game_Multiplayer::ResetRepeatingFlash() { + repeating_flash_active = false; frame_index = 0; last_flash_frame_index = -1; - last_frame_flash.reset(); + last_flash_frame_flash.fill(0); repeating_flashes.clear(); } @@ -593,16 +594,16 @@ void Game_Multiplayer::MainPlayerFlashed(int r, int g, int b, int p, int f) { std::array flash_array = std::array{ r, g, b, p, f }; if (last_flash_frame_index > -1 && frame_index - last_flash_frame_index <= 1 - && (last_frame_flash.get() == nullptr || *last_frame_flash == flash_array)) { - if (last_frame_flash.get() == nullptr) { - last_frame_flash = std::make_unique>(flash_array); + && last_flash_frame_flash == flash_array) { + if (!repeating_flash_active) { + repeating_flash_active = true; connection.SendPacketAsync(r, g, b, p, f); } } else { connection.SendPacketAsync(r, g, b, p, f); - last_frame_flash.reset(); } last_flash_frame_index = frame_index; + last_flash_frame_flash = flash_array; } void Game_Multiplayer::MainPlayerChangedTransparency(int transparency) { @@ -804,12 +805,11 @@ void Game_Multiplayer::UpdateServerVariables() { void Game_Multiplayer::Update() { if (session_active) { - if (last_flash_frame_index > -1 - && last_frame_flash.get() != nullptr - && frame_index > last_flash_frame_index) { + if (repeating_flash_active && frame_index > last_flash_frame_index) { connection.SendPacketAsync(); + repeating_flash_active = false; last_flash_frame_index = -1; - last_frame_flash.reset(); + last_flash_frame_flash.fill(0); } ++frame_index; diff --git a/src/multiplayer/game_multiplayer.h b/src/multiplayer/game_multiplayer.h index c3435c3a3..955fbe48b 100644 --- a/src/multiplayer/game_multiplayer.h +++ b/src/multiplayer/game_multiplayer.h @@ -108,8 +108,9 @@ class Game_Multiplayer { std::vector global_sync_picture_prefixes; std::map sync_picture_cache; std::vector sync_battle_anim_ids; + bool repeating_flash_active; int last_flash_frame_index{-1}; - std::unique_ptr> last_frame_flash; + std::array last_flash_frame_flash; std::map> repeating_flashes; std::unordered_set hrs_set{