diff --git a/RTEA.vcxproj b/RTEA.vcxproj index 157a05d851..dc396eef8d 100644 --- a/RTEA.vcxproj +++ b/RTEA.vcxproj @@ -763,8 +763,6 @@ - - @@ -803,7 +801,6 @@ - @@ -924,8 +921,6 @@ - - @@ -1016,8 +1011,6 @@ - - @@ -1448,8 +1441,6 @@ - - diff --git a/RTEA.vcxproj.filters b/RTEA.vcxproj.filters index d4c783fa15..901a09d0ca 100644 --- a/RTEA.vcxproj.filters +++ b/RTEA.vcxproj.filters @@ -417,18 +417,6 @@ Entities - - Managers - - - Managers - - - Activities - - - Activities - System @@ -998,18 +986,6 @@ Entities - - Managers - - - Managers - - - Activities - - - Activities - System diff --git a/Source/Activities/GameActivity.cpp b/Source/Activities/GameActivity.cpp index 5fb430b18f..be23d6e57a 100644 --- a/Source/Activities/GameActivity.cpp +++ b/Source/Activities/GameActivity.cpp @@ -786,37 +786,32 @@ int GameActivity::Start() { //////////////////////////////////// // GUI split screen setup // If there are split screens, set up the GUIs to draw and their mouses to point correctly - if (g_FrameMan.IsInMultiplayerMode()) { - m_pEditorGUI[player]->SetPosOnScreen(0, 0); - m_pBuyGUI[player]->SetPosOnScreen(0, 0); - } else { - if (g_FrameMan.GetScreenCount() > 1) { - // Screen 1 Always upper left corner - if (ScreenOfPlayer(player) == 0) { - m_pEditorGUI[player]->SetPosOnScreen(0, 0); - m_pBuyGUI[player]->SetPosOnScreen(0, 0); - } else if (ScreenOfPlayer(player) == 1) { - // If both splits, or just Vsplit, then in upper right quadrant - if ((g_FrameMan.GetVSplit() && !g_FrameMan.GetHSplit()) || (g_FrameMan.GetVSplit() && g_FrameMan.GetVSplit())) { - m_pEditorGUI[player]->SetPosOnScreen(g_WindowMan.GetResX() / 2, 0); - m_pBuyGUI[player]->SetPosOnScreen(g_WindowMan.GetResX() / 2, 0); - } - // If only hsplit, then lower left quadrant - else { - m_pEditorGUI[player]->SetPosOnScreen(0, g_WindowMan.GetResY() / 2); - m_pBuyGUI[player]->SetPosOnScreen(0, g_WindowMan.GetResY() / 2); - } + if (g_FrameMan.GetScreenCount() > 1) { + // Screen 1 Always upper left corner + if (ScreenOfPlayer(player) == 0) { + m_pEditorGUI[player]->SetPosOnScreen(0, 0); + m_pBuyGUI[player]->SetPosOnScreen(0, 0); + } else if (ScreenOfPlayer(player) == 1) { + // If both splits, or just Vsplit, then in upper right quadrant + if ((g_FrameMan.GetVSplit() && !g_FrameMan.GetHSplit()) || (g_FrameMan.GetVSplit() && g_FrameMan.GetVSplit())) { + m_pEditorGUI[player]->SetPosOnScreen(g_WindowMan.GetResX() / 2, 0); + m_pBuyGUI[player]->SetPosOnScreen(g_WindowMan.GetResX() / 2, 0); } - // Screen 3 is lower left quadrant - else if (ScreenOfPlayer(player) == 2) { + // If only hsplit, then lower left quadrant + else { m_pEditorGUI[player]->SetPosOnScreen(0, g_WindowMan.GetResY() / 2); m_pBuyGUI[player]->SetPosOnScreen(0, g_WindowMan.GetResY() / 2); } - // Screen 4 is lower right quadrant - else if (ScreenOfPlayer(player) == 3) { - m_pEditorGUI[player]->SetPosOnScreen(g_WindowMan.GetResX() / 2, g_WindowMan.GetResY() / 2); - m_pBuyGUI[player]->SetPosOnScreen(g_WindowMan.GetResX() / 2, g_WindowMan.GetResY() / 2); - } + } + // Screen 3 is lower left quadrant + else if (ScreenOfPlayer(player) == 2) { + m_pEditorGUI[player]->SetPosOnScreen(0, g_WindowMan.GetResY() / 2); + m_pBuyGUI[player]->SetPosOnScreen(0, g_WindowMan.GetResY() / 2); + } + // Screen 4 is lower right quadrant + else if (ScreenOfPlayer(player) == 3) { + m_pEditorGUI[player]->SetPosOnScreen(g_WindowMan.GetResX() / 2, g_WindowMan.GetResY() / 2); + m_pBuyGUI[player]->SetPosOnScreen(g_WindowMan.GetResX() / 2, g_WindowMan.GetResY() / 2); } } @@ -1730,10 +1725,7 @@ void GameActivity::Update() { if (m_ActivityState == ActivityState::Over && m_GameOverTimer.IsPastRealMS(m_GameOverPeriod)) { g_FrameMan.ClearScreenText(ScreenOfPlayer(player)); // g_FrameMan.SetScreenText("Press [Esc] to leave the battlefield", ScreenOfPlayer(player), 750); - if (g_FrameMan.IsInMultiplayerMode()) - g_FrameMan.SetScreenText("All players must press and hold [BACKSPACE] to continue!", ScreenOfPlayer(player), 750); - else - g_FrameMan.SetScreenText("Press [SPACE] or [START] to continue!", ScreenOfPlayer(player), 750); + g_FrameMan.SetScreenText("Press [SPACE] or [START] to continue!", ScreenOfPlayer(player), 750); // Actually end on space if (m_GameOverTimer.IsPastSimMS(55000) || g_UInputMan.AnyStartPress()) { diff --git a/Source/Activities/meson.build b/Source/Activities/meson.build index a59cb7b9d9..3249d1bbc3 100644 --- a/Source/Activities/meson.build +++ b/Source/Activities/meson.build @@ -8,7 +8,7 @@ sources += files( 'GAScripted.cpp', 'GATutorial.cpp', 'GibEditor.cpp', -'MultiplayerGame.cpp', -'MultiplayerServerLobby.cpp', +#'MultiplayerGame.cpp', +#'MultiplayerServerLobby.cpp', 'SceneEditor.cpp', ) diff --git a/Source/Entities/Activity.cpp b/Source/Entities/Activity.cpp index bf71ee402b..81f98e87ef 100644 --- a/Source/Entities/Activity.cpp +++ b/Source/Entities/Activity.cpp @@ -8,7 +8,6 @@ #include "FrameMan.h" #include "MetaMan.h" #include "SceneMan.h" -#include "NetworkClient.h" #include "ACraft.h" @@ -296,11 +295,9 @@ int Activity::Start() { m_Paused = false; // Reset the mouse moving so that it won't trap the mouse if the window isn't in focus (common after loading) - if (!g_FrameMan.IsInMultiplayerMode()) { - g_UInputMan.DisableMouseMoving(true); - g_UInputMan.DisableMouseMoving(false); - g_UInputMan.DisableKeys(false); - } + g_UInputMan.DisableMouseMoving(true); + g_UInputMan.DisableMouseMoving(false); + g_UInputMan.DisableKeys(false); int error = g_SceneMan.LoadScene(); if (error < 0) { @@ -881,9 +878,5 @@ bool Activity::CanBeUserSaved() const { return false; } - if (g_NetworkClient.IsConnectedAndRegistered()) { - return false; - } - return m_AllowsUserSaving; } diff --git a/Source/Entities/Activity.h b/Source/Entities/Activity.h index 17a0383e12..88385920a1 100644 --- a/Source/Entities/Activity.h +++ b/Source/Entities/Activity.h @@ -3,6 +3,7 @@ #include "Icon.h" #include "Controller.h" #include "GenericSavedData.h" +#include "Entity.h" namespace RTE { diff --git a/Source/Entities/Actor.cpp b/Source/Entities/Actor.cpp index 6aa0c106c1..a433710a81 100644 --- a/Source/Entities/Actor.cpp +++ b/Source/Entities/Actor.cpp @@ -1389,23 +1389,6 @@ void Actor::DrawHUD(BITMAP* pTargetBitmap, const Vector& targetPos, int whichScr if (!m_Controller.IsState(PIE_MENU_ACTIVE) || actorScreen != whichScreen) { // If we're still alive, show the team colors if (m_Health > 0) { - if (IsPlayerControlled() && g_FrameMan.IsInMultiplayerMode()) { - m_pControllerIcon = nullptr; - if (m_Team == 0) { - m_pControllerIcon = g_UInputMan.GetDeviceIcon(DEVICE_GAMEPAD_1); - } else if (m_Team == 1) { - m_pControllerIcon = g_UInputMan.GetDeviceIcon(DEVICE_GAMEPAD_2); - } else if (m_Team == 2) { - m_pControllerIcon = g_UInputMan.GetDeviceIcon(DEVICE_GAMEPAD_3); - } else if (m_Team == 3) { - m_pControllerIcon = g_UInputMan.GetDeviceIcon(DEVICE_GAMEPAD_4); - } - - if (m_pControllerIcon) { - std::vector apControllerBitmaps = m_pControllerIcon->GetBitmaps8(); - masked_blit(apControllerBitmaps[0], pTargetBitmap, 0, 0, drawPos.m_X - apControllerBitmaps[0]->w - 2 + 10, drawPos.m_Y + m_HUDStack - (apControllerBitmaps[0]->h / 2) + 8, apControllerBitmaps[0]->w, apControllerBitmaps[0]->h); - } - } // Get the Icon bitmaps of this Actor's team, if any std::vector apIconBitmaps; @@ -1447,13 +1430,6 @@ void Actor::DrawHUD(BITMAP* pTargetBitmap, const Vector& targetPos, int whichScr m_HUDStack -= 11; } - // Player name - if (g_FrameMan.IsInMultiplayerMode()) { - if (GameActivity* gameActivity = dynamic_cast(g_ActivityMan.GetActivity())) { - pSmallFont->DrawAligned(&bitmapInt, drawPos.GetFloorIntX(), drawPos.GetFloorIntY() + m_HUDStack + 2, gameActivity->GetNetworkPlayerName(m_Controller.GetPlayer()).c_str(), GUIFont::Centre); - m_HUDStack -= 11; - } - } } } } diff --git a/Source/Entities/MovableObject.cpp b/Source/Entities/MovableObject.cpp index 690edafb0b..d5acc7826d 100644 --- a/Source/Entities/MovableObject.cpp +++ b/Source/Entities/MovableObject.cpp @@ -1112,14 +1112,12 @@ bool MovableObject::DrawToTerrain(SLTerrain* terrain) { wrappedMaskedBlit(terrain->GetMaterialBitmap(), tempBitmap, tempBitmapPos, true); terrain->AddUpdatedMaterialArea(Box(tempBitmapPos, static_cast(tempBitmap->w), static_cast(tempBitmap->h))); - g_SceneMan.RegisterTerrainChange(tempBitmapPos.GetFloorIntX(), tempBitmapPos.GetFloorIntY(), tempBitmap->w, tempBitmap->h, ColorKeys::g_MaskColor, false); } else { Draw(terrain->GetFGColorBitmap(), Vector(), DrawMode::g_DrawColor, true); Material const* terrMat = g_SceneMan.GetMaterialFromID(g_SceneMan.GetTerrain()->GetMaterialPixel(m_Pos.GetFloorIntX(), m_Pos.GetFloorIntY())); if (GetMaterial()->GetPriority() > terrMat->GetPriority()) { Draw(terrain->GetMaterialBitmap(), Vector(), DrawMode::g_DrawMaterial, true); } - g_SceneMan.RegisterTerrainChange(m_Pos.GetFloorIntX(), m_Pos.GetFloorIntY(), 1, 1, DrawMode::g_DrawColor, false); } return true; } diff --git a/Source/Entities/PieMenu.cpp b/Source/Entities/PieMenu.cpp index 571ee60f79..edfe830771 100644 --- a/Source/Entities/PieMenu.cpp +++ b/Source/Entities/PieMenu.cpp @@ -637,7 +637,7 @@ void PieMenu::Draw(BITMAP* targetBitmap, const Vector& targetPos) const { CalculateDrawPosition(targetBitmap, targetPos, drawPos); if (m_EnabledState != EnabledState::Disabled) { - if (m_DrawBackgroundTransparent && !g_FrameMan.IsInMultiplayerMode()) { + if (m_DrawBackgroundTransparent) { g_FrameMan.SetTransTableFromPreset(TransparencyPreset::MoreTrans); g_GLResourceMan.UpdateDynamicBitmap(m_BGBitmap, true); DrawTexture(g_GLResourceMan.GetStaticTextureFromBitmap(m_BGBitmap), drawPos.GetFloorIntX() - m_BGBitmap->w / 2, drawPos.GetFloorIntY() - m_BGBitmap->h / 2, {255, 255, 255, g_FrameMan.GetCurrentAlpha()}); diff --git a/Source/Entities/SLTerrain.cpp b/Source/Entities/SLTerrain.cpp index 217ee206da..c86b98fd1b 100644 --- a/Source/Entities/SLTerrain.cpp +++ b/Source/Entities/SLTerrain.cpp @@ -465,7 +465,6 @@ std::deque SLTerrain::EraseSilhouette(BITMAP* sprite, const Vector& po } if (colorPixel != ColorKeys::g_MaskColor) { putpixel(m_FGColorLayer->GetBitmap(), terrX, terrY, ColorKeys::g_MaskColor); - g_SceneMan.RegisterTerrainChange(terrX, terrY, 1, 1, ColorKeys::g_MaskColor, false); } } } diff --git a/Source/Entities/TerrainObject.cpp b/Source/Entities/TerrainObject.cpp index 6aabb1a20c..a2ac8b8173 100644 --- a/Source/Entities/TerrainObject.cpp +++ b/Source/Entities/TerrainObject.cpp @@ -293,10 +293,8 @@ void TerrainObject::DrawToTerrain(SLTerrain* terrain) { } if (HasBGColorBitmap()) { draw_sprite(terrainBGBitmap, m_BGColorBitmap, posOnScene.GetFloorIntX(), posOnScene.GetFloorIntY()); - g_SceneMan.RegisterTerrainChange(posOnScene.GetFloorIntX(), posOnScene.GetFloorIntY(), m_BGColorBitmap->w, m_BGColorBitmap->h, ColorKeys::g_MaskColor, true); } if (HasFGColorBitmap()) { draw_sprite(terrainFGBitmap, m_FGColorBitmap, posOnScene.GetFloorIntX(), posOnScene.GetFloorIntY()); - g_SceneMan.RegisterTerrainChange(posOnScene.GetFloorIntX(), posOnScene.GetFloorIntY(), m_FGColorBitmap->w, m_FGColorBitmap->h, ColorKeys::g_MaskColor, false); } } diff --git a/Source/Main.cpp b/Source/Main.cpp index 66540013ff..d57009392d 100644 --- a/Source/Main.cpp +++ b/Source/Main.cpp @@ -40,11 +40,11 @@ #include "UInputMan.h" #include "PerformanceMan.h" #include "FrameMan.h" +#include "PostProcessMan.h" +#include "SceneMan.h" #include "MetaMan.h" #include "WindowMan.h" #include "GLResourceMan.h" -#include "NetworkServer.h" -#include "NetworkClient.h" #include "CameraMan.h" #include "ActivityMan.h" #include "PrimitiveMan.h" @@ -56,6 +56,10 @@ #include "RenderTarget.h" #include "tracy/Tracy.hpp" +#ifdef _WIN32 +#include "windows.h" +#endif + extern "C" { FILE __iob_func[3] = {*stdin, *stdout, *stderr}; } @@ -73,8 +77,6 @@ void InitializeManagers() { WindowMan::Construct(); GLResourceMan::Construct(); LuaMan::Construct(); - NetworkServer::Construct(); - NetworkClient::Construct(); FrameMan::Construct(); PerformanceMan::Construct(); PostProcessMan::Construct(); @@ -98,8 +100,6 @@ void InitializeManagers() { g_GLResourceMan.Initialize(); g_LuaMan.Initialize(); - g_NetworkServer.Initialize(); - g_NetworkClient.Initialize(); g_TimerMan.Initialize(); g_FrameMan.Initialize(); g_PostProcessMan.Initialize(); @@ -128,8 +128,6 @@ void InitializeManagers() { /// Destroys all the managers and frees all loaded data before termination. /// void DestroyManagers() { - g_NetworkClient.Destroy(); - g_NetworkServer.Destroy(); g_MetaMan.Destroy(); g_PerformanceMan.Destroy(); g_MovableMan.Destroy(); @@ -189,11 +187,7 @@ void HandleMainArgs(int argCount, char** argValue) { } } if (!launchModeSet) { - if (currentArg == "-server") { - g_NetworkServer.EnableServerMode(); - g_NetworkServer.SetServerPort(!lastArg ? argValue[++i] : "8000"); - launchModeSet = true; - } else if (!lastArg && currentArg == "-editor") { + if (!lastArg && currentArg == "-editor") { g_ActivityMan.SetEditorToLaunch(argValue[++i]); launchModeSet = true; } @@ -337,12 +331,6 @@ void RunGameLoop() { g_UInputMan.Update(); - // It is vital that server is updated after input manager but before activity because input manager will clear received pressed and released events on next update. - if (g_NetworkServer.IsServerModeEnabled()) { - g_NetworkServer.Update(true); - serverUpdated = true; - } - g_FrameMan.Update(); g_MovableMan.CompleteQueuedMOIDDrawings(); @@ -391,23 +379,6 @@ void RunGameLoop() { } } - if (g_NetworkServer.IsServerModeEnabled()) { - // Pause sim while we're waiting for scene transmission or scene will start changing before clients receive them and those changes will be lost. - g_TimerMan.PauseSim(!(g_NetworkServer.ReadyForSimulation() && g_ActivityMan.IsInActivity())); - - if (!serverUpdated) { - g_NetworkServer.Update(); - } - - if (g_NetworkServer.GetServerSimSleepWhenIdle()) { - long long ticksToSleep = g_TimerMan.GetTimeToSleep(); - if (ticksToSleep > 0) { - double secsToSleep = static_cast(ticksToSleep) / static_cast(g_TimerMan.GetTicksPerSecond()); - long long milisToSleep = static_cast(secsToSleep) * 1000; - std::this_thread::sleep_for(std::chrono::milliseconds(milisToSleep)); - } - } - } updateEndAndDrawStartTime = g_TimerMan.GetAbsoluteTime(); updateTotalTime = updateEndAndDrawStartTime - updateStartTime; drawStartTime = updateEndAndDrawStartTime; @@ -467,10 +438,6 @@ int main(int argc, char** argv) { HandleMainArgs(argc, argv); - if (g_NetworkServer.IsServerModeEnabled()) { - SDL_ShowCursor(SDL_ENABLE); - } - g_PresetMan.LoadAllDataModules(); if (!System::IsInExternalModuleValidationMode()) { diff --git a/Source/Managers/ActivityMan.cpp b/Source/Managers/ActivityMan.cpp index 945012e8c3..9bfcc83d81 100644 --- a/Source/Managers/ActivityMan.cpp +++ b/Source/Managers/ActivityMan.cpp @@ -23,9 +23,6 @@ #include "ActorEditor.h" #include "AssemblyEditor.h" -#include "NetworkServer.h" -#include "MultiplayerServerLobby.h" -#include "MultiplayerGame.h" #include "MusicMan.h" using namespace RTE; @@ -54,9 +51,7 @@ void ActivityMan::Clear() { } bool ActivityMan::Initialize() { - if (g_NetworkServer.IsServerModeEnabled()) { - return SetStartMultiplayerServerOverview(); - } else if (IsSetToLaunchIntoEditor()) { + if (IsSetToLaunchIntoEditor()) { // Evaluate LaunchIntoEditor before LaunchIntoActivity so it takes priority when both are set, otherwise it is ignored and editor is never launched. return SetStartEditorActivitySetToLaunchInto(); } else if (IsSetToLaunchIntoActivity()) { @@ -246,42 +241,6 @@ bool ActivityMan::SetStartEditorActivitySetToLaunchInto() { } } -bool ActivityMan::SetStartMultiplayerActivity() { - if (std::unique_ptr multiplayerGame = std::make_unique()) { - if (g_MetaMan.GameInProgress()) { - g_MetaMan.EndGame(); - } - g_SceneMan.SetSceneToLoad("Multiplayer Scene"); - multiplayerGame->Create(); - SetStartActivity(multiplayerGame.release()); - m_ActivityNeedsRestart = true; - return true; - } - return false; -} - -bool ActivityMan::SetStartMultiplayerServerOverview() { - g_NetworkServer.Start(); - - if (std::unique_ptr multiplayerServerLobby = std::make_unique()) { - g_UInputMan.SetMultiplayerMode(true); - g_FrameMan.SetMultiplayerMode(true); - g_AudioMan.SetMultiplayerMode(true); - g_AudioMan.SetMasterMuted(); - g_SceneMan.SetSceneToLoad("Multiplayer Scene"); - - multiplayerServerLobby->Create(); - multiplayerServerLobby->ClearPlayers(true); - for (int playerAndTeamNum = Players::PlayerOne; playerAndTeamNum < Players::MaxPlayerCount; ++playerAndTeamNum) { - multiplayerServerLobby->AddPlayer(playerAndTeamNum, true, playerAndTeamNum, 0); - } - SetStartActivity(multiplayerServerLobby.release()); - m_ActivityNeedsRestart = true; - return true; - } - return false; -} - int ActivityMan::StartActivity(Activity* activity) { RTEAssert(activity, "Trying to start a null activity!"); diff --git a/Source/Managers/ActivityMan.h b/Source/Managers/ActivityMan.h index 156ea8cfbc..61369d7a4f 100644 --- a/Source/Managers/ActivityMan.h +++ b/Source/Managers/ActivityMan.h @@ -152,14 +152,6 @@ namespace RTE { /// Launch editor Activity specified in command-line argument. /// @return Whether a valid editor name was passed in and set to be launched next time ResetActivity is called. bool SetStartEditorActivitySetToLaunchInto(); - - /// Loads "Multiplayer Scene" and starts the MultiplayerGame Activity. - /// @return Whether the MultiplayerGame Activity was successfully created and set to be launched next time ResetActivity is called. - bool SetStartMultiplayerActivity(); - - /// Launch multiplayer server overview Activity. - /// @return Whether the server overview Activity was successfully created and set to be launched next time ResetActivity is called. - bool SetStartMultiplayerServerOverview(); #pragma endregion #pragma region Concrete Methods diff --git a/Source/Managers/CameraMan.cpp b/Source/Managers/CameraMan.cpp index 86463ff1a5..e76691b283 100644 --- a/Source/Managers/CameraMan.cpp +++ b/Source/Managers/CameraMan.cpp @@ -6,7 +6,6 @@ #include "Scene.h" #include "SceneMan.h" #include "SLTerrain.h" -#include "NetworkClient.h" using namespace RTE; @@ -55,11 +54,7 @@ Vector CameraMan::GetUnwrappedOffset(int screenId) const { void CameraMan::SetScroll(const Vector& center, int screenId) { Screen& screen = m_Screens[screenId]; - if (g_FrameMan.IsInMultiplayerMode()) { - screen.Offset.SetXY(static_cast(center.GetFloorIntX() - (g_FrameMan.GetPlayerFrameBufferWidth(screenId) / 2)), static_cast(center.GetFloorIntY() - (g_FrameMan.GetPlayerFrameBufferHeight(screenId) / 2))); - } else { - screen.Offset.SetXY(static_cast(center.GetFloorIntX() - (g_WindowMan.GetResX() / 2)), static_cast(center.GetFloorIntY() - (g_WindowMan.GetResY() / 2))); - } + screen.Offset.SetXY(static_cast(center.GetFloorIntX() - (g_WindowMan.GetResX() / 2)), static_cast(center.GetFloorIntY() - (g_WindowMan.GetResY() / 2))); CheckOffset(screenId); } @@ -68,7 +63,7 @@ Vector CameraMan::GetScrollTarget(int screenId) const { // Would it be preferable to just set screenId to 0? return Vector(); } - return g_NetworkClient.IsConnectedAndRegistered() ? g_NetworkClient.GetFrameTarget() : m_Screens[screenId].ScrollTarget; + return m_Screens[screenId].ScrollTarget; } void CameraMan::SetScrollTarget(const Vector& targetCenter, float speed, int screenId) { @@ -156,14 +151,8 @@ void CameraMan::CheckOffset(int screenId) { Vector CameraMan::GetFrameSize(int screenId) { int frameWidth = g_WindowMan.GetResX(); int frameHeight = g_WindowMan.GetResY(); - - if (g_FrameMan.IsInMultiplayerMode()) { - frameWidth = g_FrameMan.GetPlayerFrameBufferWidth(screenId); - frameHeight = g_FrameMan.GetPlayerFrameBufferHeight(screenId); - } else { - frameWidth = frameWidth / (g_FrameMan.GetVSplit() ? 2 : 1); - frameHeight = frameHeight / (g_FrameMan.GetHSplit() ? 2 : 1); - } + frameWidth = g_FrameMan.GetPlayerFrameBufferWidth(screenId); + frameHeight = g_FrameMan.GetPlayerFrameBufferHeight(screenId); return Vector(static_cast(frameWidth), static_cast(frameHeight)); } @@ -231,13 +220,8 @@ void CameraMan::Update(int screenId) { Vector oldOffset(screen.Offset); Vector offsetTarget; - if (g_FrameMan.IsInMultiplayerMode()) { - offsetTarget.SetX(screen.ScrollTarget.GetX() - static_cast(g_FrameMan.GetPlayerFrameBufferWidth(screenId) / 2)); - offsetTarget.SetY(screen.ScrollTarget.GetY() - static_cast(g_FrameMan.GetPlayerFrameBufferHeight(screenId) / 2)); - } else { - offsetTarget.SetX(screen.ScrollTarget.GetX() - static_cast(g_WindowMan.GetResX() / (g_FrameMan.GetVSplit() ? 4 : 2))); - offsetTarget.SetY(screen.ScrollTarget.GetY() - static_cast(g_WindowMan.GetResY() / (g_FrameMan.GetHSplit() ? 4 : 2))); - } + offsetTarget.SetX(screen.ScrollTarget.GetX() - static_cast(g_WindowMan.GetResX() / (g_FrameMan.GetVSplit() ? 4 : 2))); + offsetTarget.SetY(screen.ScrollTarget.GetY() - static_cast(g_WindowMan.GetResY() / (g_FrameMan.GetHSplit() ? 4 : 2))); // Take the occlusion of the screens into account so that the scroll target is still centered on the terrain-visible portion of the screen. offsetTarget -= (screen.ScreenOcclusion / 2); diff --git a/Source/Managers/FrameMan.cpp b/Source/Managers/FrameMan.cpp index 105b871968..7490573561 100644 --- a/Source/Managers/FrameMan.cpp +++ b/Source/Managers/FrameMan.cpp @@ -71,10 +71,6 @@ void FrameMan::Clear() { m_BackBuffer8.reset(); m_BackBuffer32.reset(); m_OverlayBitmap32.reset(); - m_DrawNetworkBackBuffer = false; - m_StoreNetworkBackBuffer = false; - m_NetworkFrameCurrent = 0; - m_NetworkFrameReady = 1; m_PaletteFile = ContentFile("Base.rte/palette.bmp"); m_BlackColor = 245; m_AlmostBlackColor = 245; @@ -94,13 +90,6 @@ void FrameMan::Clear() { m_FlashScreenColor[screenCount] = -1; m_FlashedLastFrame[screenCount] = false; m_FlashTimer[screenCount].Reset(); - - for (int bufferFrame = 0; bufferFrame < 2; bufferFrame++) { - m_NetworkBackBufferIntermediate8[bufferFrame][screenCount].reset(); - m_NetworkBackBufferFinal8[bufferFrame][screenCount].reset(); - m_NetworkBackBufferIntermediateGUI8[bufferFrame][screenCount].reset(); - m_NetworkBackBufferFinalGUI8[bufferFrame][screenCount].reset(); - } } } @@ -147,23 +136,6 @@ int FrameMan::CreateBackBuffers() { m_OverlayBitmap32 = std::unique_ptr(create_bitmap_ex(c_BPP, resX, resY)); clear_to_color(m_OverlayBitmap32.get(), 0); - // Create all the network 8bpp back buffers - for (int i = 0; i < c_MaxScreenCount; i++) { - for (int f = 0; f < 2; f++) { - m_NetworkBackBufferIntermediate8[f][i] = std::unique_ptr(create_bitmap_ex(8, resX, resY)); - clear_to_color(m_NetworkBackBufferIntermediate8[f][i].get(), m_BlackColor); - - m_NetworkBackBufferIntermediateGUI8[f][i] = std::unique_ptr(create_bitmap_ex(8, resX, resY)); - clear_to_color(m_NetworkBackBufferIntermediateGUI8[f][i].get(), g_MaskColor); - - m_NetworkBackBufferFinal8[f][i] = std::unique_ptr(create_bitmap_ex(8, resX, resY)); - clear_to_color(m_NetworkBackBufferFinal8[f][i].get(), m_BlackColor); - - m_NetworkBackBufferFinalGUI8[f][i] = std::unique_ptr(create_bitmap_ex(8, resX, resY)); - clear_to_color(m_NetworkBackBufferFinalGUI8[f][i].get(), g_MaskColor); - } - } - m_PlayerScreenWidth = m_BackBuffer8->w; m_PlayerScreenHeight = m_BackBuffer8->h; @@ -294,7 +266,7 @@ float FrameMan::GetResolutionMultiplier() const { Vector FrameMan::GetMiddleOfPlayerScreen(int whichPlayer) { Vector middleOfPlayerScreen; - if (whichPlayer == -1 || IsInMultiplayerMode()) { + if (whichPlayer == -1) { middleOfPlayerScreen.SetXY(static_cast(g_WindowMan.GetResX() / 2), static_cast(g_WindowMan.GetResY() / 2)); } else { int playerScreen = g_ActivityMan.GetActivity()->ScreenOfPlayer(whichPlayer); @@ -311,40 +283,10 @@ Vector FrameMan::GetMiddleOfPlayerScreen(int whichPlayer) { } int FrameMan::GetPlayerFrameBufferWidth(int whichPlayer) const { - if (IsInMultiplayerMode()) { - if (whichPlayer < 0 || whichPlayer >= c_MaxScreenCount) { - int width = g_WindowMan.GetResX(); - for (int i = 0; i < c_MaxScreenCount; i++) { - if (m_NetworkBackBufferFinal8[m_NetworkFrameReady][i] && (m_NetworkBackBufferFinal8[m_NetworkFrameReady][i]->w < width)) { - width = m_NetworkBackBufferFinal8[m_NetworkFrameReady][i]->w; - } - } - return width; - } else { - if (m_NetworkBackBufferFinal8[m_NetworkFrameReady][whichPlayer]) { - return m_NetworkBackBufferFinal8[m_NetworkFrameReady][whichPlayer]->w; - } - } - } return m_PlayerScreenWidth; } int FrameMan::GetPlayerFrameBufferHeight(int whichPlayer) const { - if (IsInMultiplayerMode()) { - if (whichPlayer < 0 || whichPlayer >= c_MaxScreenCount) { - int height = g_WindowMan.GetResY(); - for (int i = 0; i < c_MaxScreenCount; i++) { - if (m_NetworkBackBufferFinal8[m_NetworkFrameReady][i] && (m_NetworkBackBufferFinal8[m_NetworkFrameReady][i]->h < height)) { - height = m_NetworkBackBufferFinal8[m_NetworkFrameReady][i]->h; - } - } - return height; - } else { - if (m_NetworkBackBufferFinal8[m_NetworkFrameReady][whichPlayer]) { - return m_NetworkBackBufferFinal8[m_NetworkFrameReady][whichPlayer]->h; - } - } - } return m_PlayerScreenHeight; } @@ -476,17 +418,6 @@ void FrameMan::SetTransTableFromPreset(TransparencyPreset transPreset) { m_CurrentAlpha = 255 - (static_cast(255.0F * ((1.0F / static_cast(transparencyPresetCount)) * static_cast(transPreset / c_BlendAmountStep)))); } -void FrameMan::CreateNewNetworkPlayerBackBuffer(int player, int width, int height) { - for (int f = 0; f < 2; f++) { - m_NetworkBackBufferIntermediate8[f][player] = std::unique_ptr(create_bitmap_ex(8, width, height)); - m_NetworkBackBufferIntermediateGUI8[f][player] = std::unique_ptr(create_bitmap_ex(8, width, height)); - m_NetworkBackBufferFinal8[f][player] = std::unique_ptr(create_bitmap_ex(8, width, height)); - m_NetworkBackBufferFinalGUI8[f][player] = std::unique_ptr(create_bitmap_ex(8, width, height)); - } - m_PlayerScreenWidth = width; - m_PlayerScreenHeight = height; -} - bool FrameMan::LoadPalette(const std::string& palettePath) { const std::string fullPalettePath = g_PresetMan.GetFullModulePath(palettePath); SDL_Surface* paletteImage = IMG_Load(palettePath.c_str()); @@ -805,7 +736,7 @@ void FrameMan::UpdateScreenOffsetForSplitScreen(int playerScreen, Vector& screen void FrameMan::Draw() { ZoneScopedN("Draw"); TracyGpuZone("FrameMan::Draw"); - + //rlSetShader(rlGetShaderIdDefault(), rlGetShaderLocsDefault()); Shader backgroundShader; g_PresetMan.GetEntityPreset("Shader", "Background")->Clone(&backgroundShader); @@ -841,10 +772,6 @@ void FrameMan::Draw() { //rlSetUniformSampler(backgroundShader.GetUniformLocation("rtePalette"), g_PostProcessMan.GetPaletteTexture()); BITMAP* drawScreen = (screenCount == 1) ? m_BackBuffer8.get() : m_PlayerScreen8.get(); BITMAP* drawScreenGUI = (screenCount == 1) ? m_BackBuffer8.get() : m_PlayerScreen8.get(); - if (IsInMultiplayerMode()) { - drawScreen = m_NetworkBackBufferIntermediate8[m_NetworkFrameCurrent][playerScreen].get(); - drawScreenGUI = m_NetworkBackBufferIntermediateGUI8[m_NetworkFrameCurrent][playerScreen].get(); - } // Need to clear the backbuffers because Scene background layers can be too small to fill the whole backbuffer or drawn masked resulting in artifacts from the previous frame. clear_to_color(drawScreenGUI, ColorKeys::g_MaskColor); // If in online multiplayer mode clear to mask color otherwise the scene background layers will get drawn over. @@ -855,20 +782,6 @@ void FrameMan::Draw() { // Update the scene view to line up with a specific screen and then draw it onto the intermediate screen g_SceneMan.Update(playerScreen); - // Save scene layer's offsets for each screen, server will pick them to build the frame state and send to client - if (IsInMultiplayerMode()) { - int layerCount = 0; - - for (const SLBackground* sceneLayer: g_SceneMan.GetScene()->GetBackLayers()) { - SLOffset[playerScreen][layerCount] = sceneLayer->GetOffset(); - layerCount++; - - if (layerCount >= c_MaxLayersStoredForNetwork) { - break; - } - } - } - Vector targetPos = g_CameraMan.GetOffset(playerScreen); // Adjust the drawing position on the target screen for if the target screen is larger than the scene in non-wrapping dimension. @@ -880,24 +793,13 @@ void FrameMan::Draw() { targetPos.m_Y += (drawScreen->h - g_SceneMan.GetSceneHeight()) / 2; } - // Try to move at the frame buffer copy time to maybe prevent wonkyness - m_TargetPos[m_NetworkFrameCurrent][playerScreen] = targetPos; - // Draw the scene - if (!IsInMultiplayerMode()) { - g_SceneMan.Draw(drawScreen, drawScreenGUI, targetPos); - } else { - g_SceneMan.Draw(drawScreen, drawScreenGUI, targetPos, true, true); - } + g_SceneMan.Draw(drawScreen, drawScreenGUI, targetPos); // Get only the scene-relative post effects that affect this player's screen if (pActivity) { g_PostProcessMan.GetPostScreenEffectsWrapped(targetPos, drawScreen->w, drawScreen->h, screenRelativeEffects, pActivity->GetTeamOfPlayer(pActivity->PlayerOfScreen(playerScreen))); g_PostProcessMan.GetGlowAreasWrapped(targetPos, drawScreen->w, drawScreen->h, screenRelativeGlowBoxes); - - if (IsInMultiplayerMode()) { - g_PostProcessMan.SetNetworkPostEffectsList(playerScreen, screenRelativeEffects); - } } // TODO: Find out what keeps disabling the clipping on the draw bitmap @@ -916,52 +818,31 @@ void FrameMan::Draw() { DrawScreenFlash(playerScreen, drawScreenGUI); - if (!IsInMultiplayerMode()) { - // Draw the intermediate draw splitscreen to the appropriate spot on the back buffer - blit(drawScreen, m_BackBuffer8.get(), 0, 0, screenOffset.GetFloorIntX(), screenOffset.GetFloorIntY(), drawScreen->w, drawScreen->h); - m_PlayerScreen->End(); - backgroundShader.End(); - if (screenCount > 1) { - m_BackBuffer->Begin(false); - DrawTextureRec(m_PlayerScreen->GetColorTexture(), {0, 0, static_cast(m_PlayerScreen8->w), -static_cast(m_PlayerScreen8->h)}, {screenOffset.m_X, screenOffset.m_Y}, {255, 255, 255, 255}); - m_BackBuffer->End(); - } - g_PostProcessMan.AdjustEffectsPosToPlayerScreen(playerScreen, drawScreen, screenOffset, screenRelativeEffects, screenRelativeGlowBoxes); + // Draw the intermediate draw splitscreen to the appropriate spot on the back buffer + blit(drawScreen, m_BackBuffer8.get(), 0, 0, screenOffset.GetFloorIntX(), screenOffset.GetFloorIntY(), drawScreen->w, drawScreen->h); + m_PlayerScreen->End(); + backgroundShader.End(); + if (screenCount > 1) { + m_BackBuffer->Begin(false); + DrawTextureRec(m_PlayerScreen->GetColorTexture(), {0, 0, static_cast(m_PlayerScreen8->w), -static_cast(m_PlayerScreen8->h)}, {screenOffset.m_X, screenOffset.m_Y}, {255, 255, 255, 255}); + m_BackBuffer->End(); } + g_PostProcessMan.AdjustEffectsPosToPlayerScreen(playerScreen, drawScreen, screenOffset, screenRelativeEffects, screenRelativeGlowBoxes); } // Clears the pixels that have been revealed from the unseen layers g_SceneMan.ClearSeenPixels(); - if (!IsInMultiplayerMode()) { - // Draw separating lines for split-screens - if (m_HSplit) { - hline(m_BackBuffer8.get(), 0, (m_BackBuffer8->h / 2) - 1, m_BackBuffer8->w - 1, m_AlmostBlackColor); - hline(m_BackBuffer8.get(), 0, (m_BackBuffer8->h / 2), m_BackBuffer8->w - 1, m_AlmostBlackColor); - } - if (m_VSplit) { - vline(m_BackBuffer8.get(), (m_BackBuffer8->w / 2) - 1, 0, m_BackBuffer8->h - 1, m_AlmostBlackColor); - vline(m_BackBuffer8.get(), (m_BackBuffer8->w / 2), 0, m_BackBuffer8->h - 1, m_AlmostBlackColor); - } - - // Replace 8 bit backbuffer contents with network received image before post-processing as it is where this buffer is copied to 32 bit buffer - if (GetDrawNetworkBackBuffer()) { - m_NetworkBitmapLock[0].lock(); - - blit(m_NetworkBackBufferFinal8[m_NetworkFrameReady][0].get(), m_BackBuffer8.get(), 0, 0, 0, 0, m_BackBuffer8->w, m_BackBuffer8->h); - masked_blit(m_NetworkBackBufferFinalGUI8[m_NetworkFrameReady][0].get(), m_BackBuffer8.get(), 0, 0, 0, 0, m_BackBuffer8->w, m_BackBuffer8->h); - - if (g_UInputMan.FlagAltState() || g_UInputMan.FlagRCtrlState()) { - g_PerformanceMan.DrawCurrentPing(); - } - - m_NetworkBitmapLock[0].unlock(); - } + // Draw separating lines for split-screens + if (m_HSplit) { + hline(m_BackBuffer8.get(), 0, (m_BackBuffer8->h / 2) - 1, m_BackBuffer8->w - 1, m_AlmostBlackColor); + hline(m_BackBuffer8.get(), 0, (m_BackBuffer8->h / 2), m_BackBuffer8->w - 1, m_AlmostBlackColor); } - - if (IsInMultiplayerMode()) { - PrepareFrameForNetwork(); + if (m_VSplit) { + vline(m_BackBuffer8.get(), (m_BackBuffer8->w / 2) - 1, 0, m_BackBuffer8->h - 1, m_AlmostBlackColor); + vline(m_BackBuffer8.get(), (m_BackBuffer8->w / 2), 0, m_BackBuffer8->h - 1, m_AlmostBlackColor); } + rlEnableDepthTest(); rlZDepth(c_GuiDepth-1.0f); g_GLResourceMan.UpdateDynamicBitmap(m_BackBuffer8.get(), true); @@ -995,8 +876,8 @@ void FrameMan::DrawScreenText(int playerScreen, AllegroBitmap playerGUIBitmap) { textPosY += 12; if (!m_ScreenText[playerScreen].empty()) { - int bufferOrScreenWidth = IsInMultiplayerMode() ? GetPlayerFrameBufferWidth(playerScreen) : GetPlayerScreenWidth(); - int bufferOrScreenHeight = IsInMultiplayerMode() ? GetPlayerFrameBufferHeight(playerScreen) : GetPlayerScreenHeight(); + int bufferOrScreenWidth = GetPlayerScreenWidth(); + int bufferOrScreenHeight = GetPlayerScreenHeight(); if (m_TextCentered[playerScreen]) { textPosY = (bufferOrScreenHeight / 2) - 52; @@ -1104,46 +985,3 @@ void FrameMan::DrawWorldDump(bool drawForScenePreview) const { } } } - -void FrameMan::PrepareFrameForNetwork() { - int dx = 0; - int dy = 0; - int dw = m_BackBuffer8->w / 2; - int dh = m_BackBuffer8->h / 2; - - // Blit all four internal player screens onto the backbuffer - for (int i = 0; i < c_MaxScreenCount; i++) { - dx = (i == 1 || i == 3) ? dw : dx; - dy = (i == 2 || i == 3) ? dh : dy; - - m_NetworkBitmapLock[i].lock(); - blit(m_NetworkBackBufferIntermediate8[m_NetworkFrameCurrent][i].get(), m_NetworkBackBufferFinal8[m_NetworkFrameCurrent][i].get(), 0, 0, 0, 0, m_NetworkBackBufferFinal8[m_NetworkFrameCurrent][i]->w, m_NetworkBackBufferFinal8[m_NetworkFrameCurrent][i]->h); - blit(m_NetworkBackBufferIntermediateGUI8[m_NetworkFrameCurrent][i].get(), m_NetworkBackBufferFinalGUI8[m_NetworkFrameCurrent][i].get(), 0, 0, 0, 0, m_NetworkBackBufferFinalGUI8[m_NetworkFrameCurrent][i]->w, m_NetworkBackBufferFinalGUI8[m_NetworkFrameCurrent][i]->h); - m_NetworkBitmapLock[i].unlock(); - -#ifndef RELEASE_BUILD - // Draw all player's screen into one - if (g_UInputMan.KeyHeld(SDLK_5)) { - stretch_blit(m_NetworkBackBufferFinal8[m_NetworkFrameCurrent][i].get(), m_BackBuffer8.get(), 0, 0, m_NetworkBackBufferFinal8[m_NetworkFrameReady][i]->w, m_NetworkBackBufferFinal8[m_NetworkFrameReady][i]->h, dx, dy, dw, dh); - } -#endif - } - -#ifndef RELEASE_BUILD - if (g_UInputMan.KeyHeld(SDLK_1)) { - stretch_blit(m_NetworkBackBufferFinal8[0][0].get(), m_BackBuffer8.get(), 0, 0, m_NetworkBackBufferFinal8[m_NetworkFrameReady][0]->w, m_NetworkBackBufferFinal8[m_NetworkFrameReady][0]->h, 0, 0, m_BackBuffer8->w, m_BackBuffer8->h); - } - if (g_UInputMan.KeyHeld(SDLK_2)) { - stretch_blit(m_NetworkBackBufferFinal8[1][0].get(), m_BackBuffer8.get(), 0, 0, m_NetworkBackBufferFinal8[m_NetworkFrameReady][1]->w, m_NetworkBackBufferFinal8[m_NetworkFrameReady][1]->h, 0, 0, m_BackBuffer8->w, m_BackBuffer8->h); - } - if (g_UInputMan.KeyHeld(SDLK_3)) { - stretch_blit(m_NetworkBackBufferFinal8[m_NetworkFrameReady][2].get(), m_BackBuffer8.get(), 0, 0, m_NetworkBackBufferFinal8[m_NetworkFrameReady][2]->w, m_NetworkBackBufferFinal8[m_NetworkFrameReady][2]->h, 0, 0, m_BackBuffer8->w, m_BackBuffer8->h); - } - if (g_UInputMan.KeyHeld(SDLK_4)) { - stretch_blit(m_NetworkBackBufferFinal8[m_NetworkFrameReady][3].get(), m_BackBuffer8.get(), 0, 0, m_NetworkBackBufferFinal8[m_NetworkFrameReady][3]->w, m_NetworkBackBufferFinal8[m_NetworkFrameReady][3]->h, 0, 0, m_BackBuffer8->w, m_BackBuffer8->h); - } -#endif - // Rendering complete, we can finally mark current frame as ready. This is needed to make rendering look totally atomic for the server pulling data in separate threads. - m_NetworkFrameReady = m_NetworkFrameCurrent; - m_NetworkFrameCurrent = (m_NetworkFrameCurrent == 0) ? 1 : 0; -} diff --git a/Source/Managers/FrameMan.h b/Source/Managers/FrameMan.h index 0e041efb97..be6e0daee7 100644 --- a/Source/Managers/FrameMan.h +++ b/Source/Managers/FrameMan.h @@ -30,8 +30,6 @@ namespace RTE { public: static constexpr int c_BPP = 32; //!< Color depth (bits per pixel). - Vector SLOffset[c_MaxScreenCount][c_MaxLayersStoredForNetwork]; //!< SceneLayer offsets for each screen in online multiplayer. - #pragma region Creation /// Constructor method used to instantiate a FrameMan object in system memory. Initialize() should be called before using the object. FrameMan(); @@ -251,80 +249,6 @@ namespace RTE { /// @param screenId The screen to set for. void SetHudDisabled(bool value, int screenId = 0) { m_HUDDisabled[screenId] = value; } -#pragma region Network Handling - /// Returns true if this manager is in multiplayer mode, storing the 8bpp backbuffer for network transmission. - /// @return True if in multiplayer mode. - bool IsInMultiplayerMode() const { return m_StoreNetworkBackBuffer; } - - /// Sets the multiplayer mode flag, telling the manager to store the 8bpp backbuffer for network transmission. - /// @param value Whether this manager should operate in multiplayer mode. - void SetMultiplayerMode(bool value) { m_StoreNetworkBackBuffer = value; } - - /// Gets the ready 8bpp backbuffer bitmap used to draw network transmitted image on top of everything. - /// @param player Which player screen to get backbuffer bitmap for. - /// @return A pointer to the 8bpp backbuffer BITMAP. OWNERSHIP IS NOT TRANSFERRED! - BITMAP* GetNetworkBackBuffer8Ready(int player) const { return m_NetworkBackBufferFinal8[m_NetworkFrameReady][player].get(); } - - /// Gets the ready 8bpp backbuffer GUI bitmap used to draw network transmitted image on top of everything. - /// @param player Which player screen to get GUI backbuffer bitmap for. - /// @return A pointer to the 8bpp GUI backbuffer BITMAP. OWNERSHIP IS NOT TRANSFERRED! - BITMAP* GetNetworkBackBufferGUI8Ready(int player) const { return m_NetworkBackBufferFinalGUI8[m_NetworkFrameReady][player].get(); } - - /// Gets the current 8bpp backbuffer bitmap used to draw network transmitted image on top of everything. - /// @param player Which player screen to get backbuffer bitmap for. - /// @return A pointer to the 8bpp backbuffer BITMAP. OWNERSHIP IS NOT TRANSFERRED! - BITMAP* GetNetworkBackBuffer8Current(int player) const { return m_NetworkBackBufferFinal8[m_NetworkFrameCurrent][player].get(); } - - /// Gets the current 8bpp backbuffer GUI bitmap used to draw network transmitted image on top of everything. - /// @param player Which player screen to get backbuffer bitmap for. - /// @return A pointer to the 8bpp GUI backbuffer BITMAP. OWNERSHIP IS NOT TRANSFERRED! - BITMAP* GetNetworkBackBufferGUI8Current(int player) const { return m_NetworkBackBufferFinalGUI8[m_NetworkFrameCurrent][player].get(); } - - /// Gets the ready 8bpp intermediate backbuffer bitmap used to copy network transmitted image to before sending. - /// @param player Which player screen to get intermediate bitmap for. - /// @return A pointer to the 8bpp intermediate BITMAP. OWNERSHIP IS NOT TRANSFERRED! - BITMAP* GetNetworkBackBufferIntermediate8Ready(int player) const { return m_NetworkBackBufferIntermediate8[m_NetworkFrameReady][player].get(); } - - /// Gets the ready 8bpp intermediate backbuffer GUI bitmap used to copy network transmitted image to before sending. - /// @param player Which player screen to get intermediate GUI bitmap for. - /// @return A pointer to the 8bpp intermediate GUI BITMAP. OWNERSHIP IS NOT TRANSFERRED! - BITMAP* GetNetworkBackBufferIntermediate8Current(int player) const { return m_NetworkBackBufferIntermediate8[m_NetworkFrameCurrent][player].get(); } - - /// Gets the current 8bpp intermediate backbuffer bitmap used to copy network transmitted image to before sending. - /// @param player Which player screen to get intermediate bitmap for. - /// @return A pointer to the 8bpp intermediate BITMAP. OWNERSHIP IS NOT TRANSFERRED! - BITMAP* GetNetworkBackBufferIntermediateGUI8Ready(int player) const { return m_NetworkBackBufferIntermediateGUI8[m_NetworkFrameReady][player].get(); } - - /// Gets the current 8bpp intermediate backbuffer GUI bitmap used to copy network transmitted image to before sending. - /// @param player Which player screen to get intermediate GUI bitmap for. - /// @return A pointer to the 8bpp intermediate GUI BITMAP. OWNERSHIP IS NOT TRANSFERRED! - BITMAP* GetNetworkBackBufferIntermediateGUI8Current(int player) const { return m_NetworkBackBufferIntermediateGUI8[m_NetworkFrameCurrent][player].get(); } - - // TODO: Figure out. - /// - /// @param screen - /// @return - Vector GetTargetPos(int screen) const { return m_TargetPos[m_NetworkFrameReady][screen]; } - - /// Gets whether we are drawing the contents of the network backbuffers on top of m_BackBuffer8 every frame. - /// @return Whether we are drawing the contents of the network backbuffers on top of m_BackBuffer8 every frame or not. - bool GetDrawNetworkBackBuffer() const { return m_DrawNetworkBackBuffer; } - - /// Sets whether to draw the contents of the network backbuffers on top of m_BackBuffer8 every frame. - /// @param value Whether to draw the contents of the network backbuffers on top of m_BackBuffer8 every frame or not. - void SetDrawNetworkBackBuffer(bool value) { m_DrawNetworkBackBuffer = value; } - - /// Gets whether we are dumping the contents of the m_BackBuffer8 to the network backbuffers every frame. - /// @return Whether the contents of the m_BackBuffer8 are being dumped to the network backbuffers every frame. - bool GetStoreNetworkBackBuffer() const { return m_StoreNetworkBackBuffer; } - - /// Creates a new set of network backbuffers for the specified player. - /// @param player Player to create new backbuffer for. - /// @param width Width of new backbuffer. - /// @param height Height of new backbuffer - void CreateNewNetworkPlayerBackBuffer(int player, int width, int height); -#pragma endregion - #pragma region Palette Routines /// Loads a palette from a bitmap file and sets it as the currently used screen palette. /// @param palettePath String with the path to the palette bitmap file. @@ -435,23 +359,8 @@ namespace RTE { std::unique_ptr m_ScenePreviewDumpGradient; //!< BITMAP for the scene preview sky gradient (easier to load from a pre-made file because it's dithered). std::unique_ptr m_ScreenDumpNamePlaceholder; //!< Dummy BITMAP for keeping naming continuity when saving ScreenDumps with multi-threading. - std::unique_ptr m_NetworkBackBufferIntermediate8[2][c_MaxScreenCount]; //!< Per-player allocated frame buffer to draw upon during FrameMan draw. - std::unique_ptr m_NetworkBackBufferIntermediateGUI8[2][c_MaxScreenCount]; //!< Per-player allocated frame buffer to draw upon during FrameMan draw. Used to draw UI only. - std::unique_ptr m_NetworkBackBufferFinal8[2][c_MaxScreenCount]; //!< Per-player allocated frame buffer to copy Intermediate before sending. - std::unique_ptr m_NetworkBackBufferFinalGUI8[2][c_MaxScreenCount]; //!< Per-player allocated frame buffer to copy Intermediate before sending. Used to draw UI only. - std::shared_ptr m_BackBuffer; //!< Main render backbuffer. - Vector m_TargetPos[2][c_MaxScreenCount]; //!< Frame target position for network players. - - bool m_StoreNetworkBackBuffer; //!< If true, dumps the contents of the m_BackBuffer8 to the network backbuffers every frame. - bool m_DrawNetworkBackBuffer; //!< If true, draws the contents of the network backbuffers on top of m_BackBuffer8 every frame in FrameMan.Draw. - - int m_NetworkFrameCurrent; //!< Which frame index is being rendered, 0 or 1. - int m_NetworkFrameReady; //!< Which frame is rendered and ready for transmission, 0 or 1. - - std::mutex m_NetworkBitmapLock[c_MaxScreenCount]; //!< Mutex lock for thread safe updating of the network backbuffer bitmaps. - #pragma region Initialize Breakdown /// Creates all the frame buffer bitmaps to be used by FrameMan. This is called during Initialize(). /// @return An error return value signaling success or any particular failure. Anything below 0 is an error signal. @@ -476,9 +385,6 @@ namespace RTE { /// @param playerScreen The player screen the flash effect will be shown to. /// @param playerGUIBitmap The bitmap the flash effect will be drawn on. void DrawScreenFlash(int playerScreen, BITMAP* playerGUIBitmap); - - /// Renders current frame and marks it ready for network transmission. This is called during Draw(). - void PrepareFrameForNetwork(); #pragma endregion #pragma region Screen Capture diff --git a/Source/Managers/MusicMan.cpp b/Source/Managers/MusicMan.cpp index 2c0cc57b02..6d69ac2f10 100644 --- a/Source/Managers/MusicMan.cpp +++ b/Source/Managers/MusicMan.cpp @@ -1,6 +1,5 @@ #include "MusicMan.h" -#include "NetworkClient.h" #include "AudioMan.h" #include "ConsoleMan.h" #include "PresetMan.h" @@ -128,7 +127,7 @@ bool MusicMan::SetNextDynamicSongSection(const std::string& newSongSectionType, if (m_NextSongSection) { currentDynamicSongSection = m_NextSongSection->GetPresetName(); } - + if (!m_IsPlayingDynamicMusic) { return false; } @@ -140,7 +139,7 @@ bool MusicMan::SetNextDynamicSongSection(const std::string& newSongSectionType, m_PreviousSoundContainerSetToFade = false; if (m_PreviousSoundContainer) { m_PreviousSoundContainer->Stop(); - m_PreviousSoundContainer = nullptr; + m_PreviousSoundContainer = nullptr; } } CyclePlayingSoundContainers(smoothFade); @@ -158,7 +157,7 @@ bool MusicMan::CyclePlayingSoundContainers(bool smoothFade) { if (m_PreviousSoundContainer) { previousSoundContainer = m_PreviousSoundContainer->GetPresetName(); } - + if (m_CurrentSoundContainer && m_CurrentSoundContainer->IsBeingPlayed()) { if (smoothFade) { m_CurrentSoundContainer->FadeOut(static_cast(m_NextSoundContainer->GetMusicPreEntryTime())); diff --git a/Source/Managers/PostProcessMan.cpp b/Source/Managers/PostProcessMan.cpp index 49065a2d25..bfd459c619 100644 --- a/Source/Managers/PostProcessMan.cpp +++ b/Source/Managers/PostProcessMan.cpp @@ -144,11 +144,6 @@ void PostProcessMan::AdjustEffectsPosToPlayerScreen(int playerScreen, BITMAP* ta int occludedOffsetX = targetBitmap->w + screenOcclusionOffsetX; int occludedOffsetY = targetBitmap->h + screenOcclusionOffsetY; - // Copy post effects received by client if in network mode - if (g_FrameMan.GetDrawNetworkBackBuffer()) { - GetNetworkPostEffectsList(0, screenRelativeEffectsList); - } - // Adjust for the player screen's position on the final buffer for (const PostEffect& postEffect: screenRelativeEffectsList) { // Make sure we won't be adding any effects to a part of the screen that is occluded by menus and such @@ -253,24 +248,6 @@ bool PostProcessMan::GetGlowAreasWrapped(const Vector& boxPos, int boxWidth, int return foundAny; } -void PostProcessMan::GetNetworkPostEffectsList(int whichScreen, std::list& outputList) { - ScreenRelativeEffectsMutex.at(whichScreen).lock(); - outputList.clear(); - for (const PostEffect& postEffect: m_ScreenRelativeEffects.at(whichScreen)) { - outputList.push_back(PostEffect(postEffect.m_Pos, postEffect.m_Bitmap, postEffect.m_BitmapHash, postEffect.m_Strength, postEffect.m_Angle)); - } - ScreenRelativeEffectsMutex.at(whichScreen).unlock(); -} - -void PostProcessMan::SetNetworkPostEffectsList(int whichScreen, std::list& inputList) { - ScreenRelativeEffectsMutex.at(whichScreen).lock(); - m_ScreenRelativeEffects.at(whichScreen).clear(); - for (const PostEffect& postEffect: inputList) { - m_ScreenRelativeEffects.at(whichScreen).push_back(PostEffect(postEffect.m_Pos, postEffect.m_Bitmap, postEffect.m_BitmapHash, postEffect.m_Strength, postEffect.m_Angle)); - } - ScreenRelativeEffectsMutex.at(whichScreen).unlock(); -} - bool PostProcessMan::GetPostScreenEffects(Vector boxPos, int boxWidth, int boxHeight, std::list& effectsList, int team) { bool found = false; bool unseen = false; diff --git a/Source/Managers/PostProcessMan.h b/Source/Managers/PostProcessMan.h index 2595f46859..b282c3bd29 100644 --- a/Source/Managers/PostProcessMan.h +++ b/Source/Managers/PostProcessMan.h @@ -139,18 +139,6 @@ namespace RTE { bool GetGlowAreasWrapped(const Vector& boxPos, int boxWidth, int boxHeight, std::list& areaList) const; #pragma endregion -#pragma region Network Post Effect Handling - /// Copies the specified player's screen relative post effects list of this PostProcessMan to the referenced list. Used for sending post effect data over the network. - /// @param whichScreen Which player screen to get list for. - /// @param outputList Reference to the list of post effects to copy into. - void GetNetworkPostEffectsList(int whichScreen, std::list& outputList); - - /// Copies the player's screen relative post effects from the referenced list to the list of this PostProcessMan. Used for receiving post effect data over the network. - /// @param whichScreen Which player screen to set list for. - /// @param inputList Reference to the list of post effects to copy from. - void SetNetworkPostEffectsList(int whichScreen, std::list& inputList); -#pragma endregion - /// Gets the backbuffer texture for indexed drawings. /// @return The opengl backbuffer texture for indexed drawings. std::shared_ptr GetPostProcessColorBuffer() { return m_PostProcessFramebuffer; } diff --git a/Source/Managers/SceneMan.cpp b/Source/Managers/SceneMan.cpp index 4ec3ff231b..89a49efb1e 100644 --- a/Source/Managers/SceneMan.cpp +++ b/Source/Managers/SceneMan.cpp @@ -1,7 +1,5 @@ -#include "NetworkServer.h" -#include "NetworkClient.h" - #include "SceneMan.h" +#include "PostProcessMan.h" #include "PresetMan.h" #include "FrameMan.h" #include "ActivityMan.h" @@ -125,12 +123,9 @@ int SceneMan::LoadScene(Scene* pNewScene, bool placeObjects, bool placeUnits) { m_pCurrentScene = nullptr; } - g_NetworkServer.LockScene(true); - m_pCurrentScene = pNewScene; if (m_pCurrentScene->LoadData(placeObjects, true, placeUnits) < 0) { g_ConsoleMan.PrintString("ERROR: Loading scene \'" + m_pCurrentScene->GetPresetName() + "\' failed! Has it been properly defined?"); - g_NetworkServer.LockScene(false); return -1; } @@ -179,9 +174,6 @@ int SceneMan::LoadScene(Scene* pNewScene, bool placeObjects, bool placeUnits) { // Finally draw the ID:s of the MO:s to the MOID layers for the first time g_MovableMan.UpdateDrawMOIDs(); - g_NetworkServer.LockScene(false); - g_NetworkServer.ResetScene(); - return 0; } @@ -319,10 +311,6 @@ Vector SceneMan::GetSceneDim() const { } int SceneMan::GetSceneWidth() const { - if (g_NetworkClient.IsConnectedAndRegistered()) { - return g_NetworkClient.GetSceneWidth(); - } - if (m_pCurrentScene) return m_pCurrentScene->GetWidth(); return 0; @@ -336,10 +324,6 @@ int SceneMan::GetSceneHeight() const { } bool SceneMan::SceneWrapsX() const { - if (g_NetworkClient.IsConnectedAndRegistered()) { - return g_NetworkClient.SceneWrapsX(); - } - if (m_pCurrentScene) return m_pCurrentScene->WrapsX(); return false; @@ -548,7 +532,6 @@ int SceneMan::RemoveOrphans(int posX, int posY, pixelMO = 0; } m_pCurrentScene->GetTerrain()->SetFGColorPixel(posX, posY, g_MaskColor); - RegisterTerrainChange(posX, posY, 1, 1, g_MaskColor, false); m_pCurrentScene->GetTerrain()->SetMaterialPixel(posX, posY, g_MaterialAir); } @@ -564,102 +547,6 @@ int SceneMan::RemoveOrphans(int posX, int posY, return area; } -void SceneMan::RegisterTerrainChange(int x, int y, int w, int h, unsigned char color, bool back) { - if (!g_NetworkServer.IsServerModeEnabled()) - return; - - // Crop if it's out of scene as both the client and server will not tolerate out of bitmap coords while packing/unpacking - if (y < 0) - y = 0; - - if (y + h >= GetSceneHeight()) - h = GetSceneHeight() - y - 1; - - if (y >= GetSceneHeight() || h <= 0) - return; - - if (w == 1) { - if (x >= GetSceneWidth()) { - if (!SceneWrapsX()) - return; - x = x - GetSceneWidth(); - } - if (x < 0) { - if (!SceneWrapsX()) - return; - x = GetSceneWidth() + x; - } - } else { - // Divide region if crossing the seam - if (x + w >= GetSceneWidth() || x < 0) { - // Crossing right part of the scene - if (x + w >= GetSceneWidth()) { - // Left part, on the scene - NetworkServer::NetworkTerrainChange tc1; - tc1.x = x; - tc1.y = y; - tc1.w = GetSceneWidth() - x; - tc1.h = h; - tc1.back = back; - tc1.color = color; - g_NetworkServer.RegisterTerrainChange(tc1); - - // Discard out of scene part if scene is not wrapped - if (!SceneWrapsX()) - return; - - // Right part, out of scene - NetworkServer::NetworkTerrainChange tc2; - tc2.x = 0; - tc2.y = y; - tc2.w = w - (GetSceneWidth() - x); - tc2.h = h; - tc2.back = back; - tc2.color = color; - - g_NetworkServer.RegisterTerrainChange(tc2); - return; - } - - if (x < 0) { - // Right part, on the scene - NetworkServer::NetworkTerrainChange tc2; - tc2.x = 0; - tc2.y = y; - tc2.w = w + x; - tc2.h = h; - tc2.back = back; - tc2.color = color; - g_NetworkServer.RegisterTerrainChange(tc2); - - // Discard out of scene part if scene is not wrapped - if (!SceneWrapsX()) - return; - - // Left part, out of the scene - NetworkServer::NetworkTerrainChange tc1; - tc1.x = GetSceneWidth() + x; - tc1.y = y; - tc1.w = -x; - tc1.h = h; - tc1.back = back; - tc1.color = color; - g_NetworkServer.RegisterTerrainChange(tc1); - return; - } - } - } - - NetworkServer::NetworkTerrainChange tc; - tc.x = x; - tc.y = y; - tc.w = w; - tc.h = h; - tc.back = back; - tc.color = color; - g_NetworkServer.RegisterTerrainChange(tc); -} - bool SceneMan::TryPenetrate(int posX, int posY, const Vector& impulse, @@ -731,15 +618,11 @@ bool SceneMan::TryPenetrate(int posX, pixelMO = 0; } m_pCurrentScene->GetTerrain()->SetFGColorPixel(posX, posY, g_MaskColor); - RegisterTerrainChange(posX, posY, 1, 1, g_MaskColor, false); - m_pCurrentScene->GetTerrain()->SetMaterialPixel(posX, posY, g_MaterialAir); } // TODO: Improve / tweak randomized pushing away of terrain") else if (RandomNum() <= airRatio) { m_pCurrentScene->GetTerrain()->SetFGColorPixel(posX, posY, g_MaskColor); - RegisterTerrainChange(posX, posY, 1, 1, g_MaskColor, false); - m_pCurrentScene->GetTerrain()->SetMaterialPixel(posX, posY, g_MaterialAir); } @@ -786,8 +669,6 @@ bool SceneMan::TryPenetrate(int posX, } RemoveOrphans(posX + testY % 2 ? -1 : 1, testY, removeOrphansRadius + 5, removeOrphansMaxArea + 10, true); } - - RegisterTerrainChange(posX, testY, 1, 1, g_MaskColor, false); _putpixel(pFGColor, posX, testY, g_MaskColor); _putpixel(pMaterial, posX, testY, g_MaterialAir); } else { @@ -835,7 +716,6 @@ MOPixel* SceneMan::DislodgePixel(int posX, int posY) { g_MovableMan.AddParticle(pixelMO); m_pCurrentScene->GetTerrain()->SetFGColorPixel(posX, posY, ColorKeys::g_MaskColor); - RegisterTerrainChange(posX, posY, 1, 1, ColorKeys::g_MaskColor, false); m_pCurrentScene->GetTerrain()->SetMaterialPixel(posX, posY, MaterialColorKeys::g_MaterialAir); return pixelMO; @@ -2741,11 +2621,9 @@ void SceneMan::Draw(BITMAP* targetBitmap, BITMAP* targetGUIBitmap, const Vector& terrain->SetLayerToDraw(SLTerrain::LayerType::ForegroundLayer); terrain->Draw(targetDimensions, targetBox); } - if (!g_FrameMan.IsInMultiplayerMode()) { - int teamId = g_CameraMan.GetScreenTeam(m_LastUpdatedScreen); - if (SceneLayer* unseenLayer = (teamId != Activity::NoTeam) ? m_pCurrentScene->GetUnseenLayer(teamId) : nullptr) { - unseenLayer->Draw(targetDimensions, targetBox); - } + int teamId = g_CameraMan.GetScreenTeam(m_LastUpdatedScreen); + if (SceneLayer* unseenLayer = (teamId != Activity::NoTeam) ? m_pCurrentScene->GetUnseenLayer(teamId) : nullptr) { + unseenLayer->Draw(targetDimensions, targetBox); } bool shouldDrawHUD = !g_FrameMan.IsHudDisabled(m_LastUpdatedScreen); diff --git a/Source/Managers/SceneMan.h b/Source/Managers/SceneMan.h index 1806a51854..0239fe19f2 100644 --- a/Source/Managers/SceneMan.h +++ b/Source/Managers/SceneMan.h @@ -946,12 +946,6 @@ namespace RTE { /// @return Pointer to stored material. Material* AddMaterialCopy(Material* mat); - /// Registers terrain change event for the network server to be then sent to clients. - /// @param x,y - scene coordinates of change, w,h - size of the changed region, - /// color - changed color for one-pixel events, - /// back - if true, then background bitmap was changed if false then foreground. - void RegisterTerrainChange(int x, int y, int w, int h, unsigned char color, bool back); - /// Gets an intermediate bitmap that is used for drawing a settled MovableObject into the terrain. /// @param moDiameter The diameter of the MovableObject to calculate the required bitmap size. /// @return Pointer to the temp BITMAP of the appropriate size. Ownership is NOT transferred! diff --git a/Source/Managers/SettingsMan.cpp b/Source/Managers/SettingsMan.cpp index 3e54291459..61336ac2a9 100644 --- a/Source/Managers/SettingsMan.cpp +++ b/Source/Managers/SettingsMan.cpp @@ -8,8 +8,6 @@ #include "AudioMan.h" #include "PerformanceMan.h" #include "UInputMan.h" -#include "NetworkClient.h" -#include "NetworkServer.h" #include "System.h" using namespace RTE; @@ -188,26 +186,6 @@ int SettingsMan::ReadProperty(const std::string_view& propName, Reader& reader) MatchProperty("DrawPixelCheckVisualizations", { reader >> g_SceneMan.m_DrawPixelCheckVisualizations; }); MatchProperty("PrintDebugInfo", { reader >> m_PrintDebugInfo; }); MatchProperty("MeasureModuleLoadTime", { reader >> m_MeasureModuleLoadTime; }); - MatchProperty("PlayerNetworkName", { reader >> m_PlayerNetworkName; }); - MatchProperty("NetworkServerName", { reader >> m_NetworkServerAddress; }); - MatchProperty("UseNATService", { reader >> g_NetworkServer.m_UseNATService; }); - MatchProperty("NATServiceAddress", { reader >> m_NATServiceAddress; }); - MatchProperty("NATServerName", { reader >> m_NATServerName; }); - MatchProperty("NATServerPassword", { reader >> m_NATServerPassword; }); - MatchProperty("UseExperimentalMultiplayerSpeedBoosts", { reader >> m_UseExperimentalMultiplayerSpeedBoosts; }); - MatchProperty("ClientInputFps", { reader >> g_NetworkClient.m_ClientInputFps; }); - MatchProperty("ServerTransmitAsBoxes", { reader >> g_NetworkServer.m_TransmitAsBoxes; }); - MatchProperty("ServerBoxWidth", { reader >> g_NetworkServer.m_BoxWidth; }); - MatchProperty("ServerBoxHeight", { reader >> g_NetworkServer.m_BoxHeight; }); - MatchProperty("ServerUseHighCompression", { reader >> g_NetworkServer.m_UseHighCompression; }); - MatchProperty("ServerUseFastCompression", { reader >> g_NetworkServer.m_UseFastCompression; }); - MatchProperty("ServerUseDeltaCompression", { reader >> g_NetworkServer.m_UseDeltaCompression; }); - MatchProperty("ServerHighCompressionLevel", { reader >> g_NetworkServer.m_HighCompressionLevel; }); - MatchProperty("ServerFastAccelerationFactor", { reader >> g_NetworkServer.m_FastAccelerationFactor; }); - MatchProperty("ServerUseInterlacing", { reader >> g_NetworkServer.m_UseInterlacing; }); - MatchProperty("ServerEncodingFps", { reader >> g_NetworkServer.m_EncodingFps; }); - MatchProperty("ServerSleepWhenIdle", { reader >> g_NetworkServer.m_SleepWhenIdle; }); - MatchProperty("ServerSimSleepWhenIdle", { reader >> g_NetworkServer.m_SimSleepWhenIdle; }); MatchProperty("VisibleAssemblyGroup", { m_VisibleAssemblyGroupsList.push_back(reader.ReadPropValue()); }); MatchProperty("DisableMod", { m_DisabledMods.try_emplace(reader.ReadPropValue(), true); }); MatchProperty("EnableGlobalScript", { m_EnabledGlobalScripts.try_emplace(reader.ReadPropValue(), true); }); @@ -355,36 +333,6 @@ int SettingsMan::Save(Writer& writer) const { writer.NewPropertyWithValue("PrintDebugInfo", m_PrintDebugInfo); writer.NewPropertyWithValue("MeasureModuleLoadTime", m_MeasureModuleLoadTime); - writer.NewLine(false, 2); - writer.NewDivider(false); - writer.NewLineString("// Network Settings", false); - writer.NewLine(false); - writer.NewPropertyWithValue("PlayerNetworkName", m_PlayerNetworkName); - writer.NewPropertyWithValue("NetworkServerName", m_NetworkServerAddress); - writer.NewPropertyWithValue("UseNATService", g_NetworkServer.m_UseNATService); - writer.NewPropertyWithValue("NATServiceAddress", m_NATServiceAddress); - writer.NewPropertyWithValue("NATServerName", m_NATServerName); - writer.NewPropertyWithValue("NATServerPassword", m_NATServerPassword); - writer.NewPropertyWithValue("UseExperimentalMultiplayerSpeedBoosts", m_UseExperimentalMultiplayerSpeedBoosts); - - writer.NewLine(false, 2); - writer.NewDivider(false); - writer.NewLineString("// Advanced Network Settings", false); - writer.NewLine(false); - writer.NewPropertyWithValue("ClientInputFps", g_NetworkClient.m_ClientInputFps); - writer.NewPropertyWithValue("ServerTransmitAsBoxes", g_NetworkServer.m_TransmitAsBoxes); - writer.NewPropertyWithValue("ServerBoxWidth", g_NetworkServer.m_BoxWidth); - writer.NewPropertyWithValue("ServerBoxHeight", g_NetworkServer.m_BoxHeight); - writer.NewPropertyWithValue("ServerUseHighCompression", g_NetworkServer.m_UseHighCompression); - writer.NewPropertyWithValue("ServerUseFastCompression", g_NetworkServer.m_UseFastCompression); - writer.NewPropertyWithValue("ServerUseDeltaCompression", g_NetworkServer.m_UseDeltaCompression); - writer.NewPropertyWithValue("ServerHighCompressionLevel", g_NetworkServer.m_HighCompressionLevel); - writer.NewPropertyWithValue("ServerFastAccelerationFactor", g_NetworkServer.m_FastAccelerationFactor); - writer.NewPropertyWithValue("ServerUseInterlacing", g_NetworkServer.m_UseInterlacing); - writer.NewPropertyWithValue("ServerEncodingFps", g_NetworkServer.m_EncodingFps); - writer.NewPropertyWithValue("ServerSleepWhenIdle", g_NetworkServer.m_SleepWhenIdle); - writer.NewPropertyWithValue("ServerSimSleepWhenIdle", g_NetworkServer.m_SimSleepWhenIdle); - if (!m_VisibleAssemblyGroupsList.empty()) { writer.NewLine(false, 2); writer.NewDivider(false); diff --git a/Source/Managers/UInputMan.cpp b/Source/Managers/UInputMan.cpp index c7f69bf76d..b78036ac7a 100644 --- a/Source/Managers/UInputMan.cpp +++ b/Source/Managers/UInputMan.cpp @@ -9,7 +9,6 @@ #include "PerformanceMan.h" #include "Icon.h" #include "GameActivity.h" -#include "NetworkServer.h" #include "System.h" #include "SDL.h" @@ -72,26 +71,6 @@ void UInputMan::Clear() { for (int player = Players::PlayerOne; player < Players::MaxPlayerCount; ++player) { m_ControlScheme[player].Reset(); m_ControlScheme[player].ResetToPlayerDefaults(static_cast(player)); - - for (int inputState = InputState::Held; inputState < InputState::InputStateCount; inputState++) { - for (int element = InputElements::INPUT_L_UP; element < InputElements::INPUT_COUNT; element++) { - m_NetworkServerChangedInputElementState[player][element] = false; - m_NetworkServerPreviousInputElementState[player][element] = false; - } - for (int mouseButton = MouseButtons::MOUSE_LEFT; mouseButton < MouseButtons::MAX_MOUSE_BUTTONS; mouseButton++) { - m_NetworkServerChangedMouseButtonState[player][mouseButton] = false; - } - } - m_NetworkAccumulatedRawMouseMovement[player].Reset(); - m_NetworkAnalogMoveData[player].Reset(); - m_NetworkMouseWheelState[player] = 0; - m_TrapMousePosPerPlayer[player] = false; - } - - for (int inputState = InputState::Pressed; inputState < InputState::InputStateCount; inputState++) { - for (int element = InputElements::INPUT_L_UP; element < InputElements::INPUT_COUNT; element++) { - m_NetworkAccumulatedElementState[element][inputState] = false; - } } } @@ -168,13 +147,9 @@ Vector UInputMan::AnalogMoveValues(int whichPlayer) { Vector UInputMan::AnalogAimValues(int whichPlayer) { InputDevice device = m_ControlScheme.at(whichPlayer).GetDevice(); - if (IsInMultiplayerMode()) { - device = InputDevice::DEVICE_MOUSE_KEYB; - } - Vector aimValues(0, 0); if (device == InputDevice::DEVICE_MOUSE_KEYB) { - aimValues = (IsInMultiplayerMode() && whichPlayer >= Players::PlayerOne && whichPlayer < Players::MaxPlayerCount) ? (m_NetworkAnalogMoveData[whichPlayer] / m_MouseTrapRadius) : (m_AnalogMouseData / m_MouseTrapRadius); + aimValues = (m_AnalogMouseData / m_MouseTrapRadius); } if (device >= InputDevice::DEVICE_GAMEPAD_1) { int whichJoy = GetJoystickIndex(device); @@ -312,9 +287,6 @@ void UInputMan::DisableMouseMoving(bool disable) { } Vector UInputMan::GetMouseMovement(int whichPlayer) const { - if (IsInMultiplayerMode() && whichPlayer >= Players::PlayerOne && whichPlayer < Players::MaxPlayerCount) { - return m_NetworkAccumulatedRawMouseMovement[whichPlayer]; - } if (whichPlayer == Players::NoPlayer || m_ControlScheme.at(whichPlayer).GetDevice() == InputDevice::DEVICE_MOUSE_KEYB) { return m_RawMouseMovement; } @@ -322,17 +294,13 @@ Vector UInputMan::GetMouseMovement(int whichPlayer) const { } void UInputMan::SetMouseValueMagnitude(float magCap, int whichPlayer) { - if (IsInMultiplayerMode() && whichPlayer >= Players::PlayerOne && whichPlayer < Players::MaxPlayerCount) { - m_NetworkAnalogMoveData[whichPlayer].CapMagnitude(m_MouseTrapRadius * magCap); - } else if (whichPlayer != Players::NoPlayer && m_ControlScheme.at(whichPlayer).GetDevice() == InputDevice::DEVICE_MOUSE_KEYB) { + if (whichPlayer != Players::NoPlayer && m_ControlScheme.at(whichPlayer).GetDevice() == InputDevice::DEVICE_MOUSE_KEYB) { m_AnalogMouseData.SetMagnitude(m_MouseTrapRadius * magCap); } } void UInputMan::SetMouseValueAngle(float angle, int whichPlayer) { - if (IsInMultiplayerMode() && whichPlayer >= Players::PlayerOne && whichPlayer < Players::MaxPlayerCount) { - m_NetworkAnalogMoveData[whichPlayer].SetAbsRadAngle(angle); - } else if (whichPlayer != Players::NoPlayer && m_ControlScheme.at(whichPlayer).GetDevice() == InputDevice::DEVICE_MOUSE_KEYB) { + if (whichPlayer != Players::NoPlayer && m_ControlScheme.at(whichPlayer).GetDevice() == InputDevice::DEVICE_MOUSE_KEYB) { m_AnalogMouseData.SetAbsRadAngle(angle); } } @@ -354,11 +322,10 @@ bool UInputMan::AnyMouseButtonPress() const { } void UInputMan::TrapMousePos(bool trap, int whichPlayer) { - if (!IsInMultiplayerMode() && (whichPlayer == Players::NoPlayer || m_ControlScheme.at(whichPlayer).GetDevice() == InputDevice::DEVICE_MOUSE_KEYB)) { + if ((whichPlayer == Players::NoPlayer || m_ControlScheme.at(whichPlayer).GetDevice() == InputDevice::DEVICE_MOUSE_KEYB)) { m_TrapMousePos = trap; SDL_SetRelativeMouseMode(static_cast(trap)); } - m_TrapMousePosPerPlayer[whichPlayer] = trap; } void UInputMan::ForceMouseWithinBox(int x, int y, int width, int height, int whichPlayer) const { @@ -515,24 +482,7 @@ bool UInputMan::AnyJoyButtonPress(int whichJoy) const { return false; } -Vector UInputMan::GetNetworkAccumulatedRawMouseMovement(int player) { - Vector accumulatedMovement = m_NetworkAccumulatedRawMouseMovement[player]; - m_NetworkAccumulatedRawMouseMovement[player].Reset(); - return accumulatedMovement; -} - -void UInputMan::ClearNetworkAccumulatedStates() { - for (int inputState = InputState::Pressed; inputState < InputState::InputStateCount; inputState++) { - for (int element = InputElements::INPUT_L_UP; element < InputElements::INPUT_COUNT; element++) { - m_NetworkAccumulatedElementState[element][inputState] = false; - } - } -} - bool UInputMan::GetInputElementState(int whichPlayer, int whichElement, InputState whichState) { - if (IsInMultiplayerMode() && whichPlayer >= Players::PlayerOne && whichPlayer < Players::MaxPlayerCount) { - return GetNetworkInputElementState(whichPlayer, whichElement, whichState); - } bool elementState = false; InputDevice device = m_ControlScheme.at(whichPlayer).GetDevice(); const InputMapping* element = &(m_ControlScheme.at(whichPlayer).GetInputMappings()->at(whichElement)); @@ -554,22 +504,6 @@ bool UInputMan::GetInputElementState(int whichPlayer, int whichElement, InputSta return elementState; } -bool UInputMan::GetNetworkInputElementState(int whichPlayer, int whichElement, InputState whichState) { - if (!m_TrapMousePosPerPlayer[whichPlayer] || whichPlayer < Players::PlayerOne || whichPlayer >= Players::MaxPlayerCount || whichState < 0 || whichState > InputState::InputStateCount) { - return false; - } - switch (whichState) { - case InputState::Held: - return m_NetworkServerPreviousInputElementState[whichPlayer][whichElement]; - case InputState::Pressed: - return m_NetworkServerPreviousInputElementState[whichPlayer][whichElement] && m_NetworkServerChangedInputElementState[whichPlayer][whichElement]; - case InputState::Released: - return (!m_NetworkServerPreviousInputElementState[whichPlayer][whichElement]) && m_NetworkServerChangedInputElementState[whichPlayer][whichElement]; - default: - return false; - } -} - bool UInputMan::GetMenuButtonState(int whichButton, InputState whichState) { for (int player = Players::PlayerOne; player < Players::MaxPlayerCount; ++player) { bool buttonState = false; @@ -609,9 +543,6 @@ bool UInputMan::GetMouseButtonState(int whichPlayer, int whichButton, InputState if (whichButton < MouseButtons::MOUSE_LEFT || whichButton >= MouseButtons::MAX_MOUSE_BUTTONS) { return false; } - if (IsInMultiplayerMode()) { - return GetNetworkMouseButtonState(whichPlayer, whichButton, whichState); - } switch (whichState) { case InputState::Held: @@ -626,30 +557,6 @@ bool UInputMan::GetMouseButtonState(int whichPlayer, int whichButton, InputState } } -bool UInputMan::GetNetworkMouseButtonState(int whichPlayer, int whichButton, InputState whichState) const { - - if (whichPlayer == Players::NoPlayer || whichPlayer >= Players::MaxPlayerCount) { - for (int player = Players::PlayerOne; player < Players::MaxPlayerCount; ++player) { - if (GetNetworkMouseButtonState(player, whichButton, whichState)) { - return true; - } - } - return false; - } - - switch (whichState) { - case InputState::Held: - return m_NetworkServerPreviousMouseButtonState[whichPlayer][whichButton]; - case InputState::Pressed: - return m_NetworkServerPreviousMouseButtonState[whichPlayer][whichButton] && m_NetworkServerChangedMouseButtonState[whichPlayer][whichButton]; - case InputState::Released: - return !m_NetworkServerPreviousMouseButtonState[whichPlayer][whichButton] && m_NetworkServerChangedMouseButtonState[whichPlayer][whichButton]; - default: - RTEAbort("Undefined InputState value passed in. See InputState enumeration."); - return false; - } -} - bool UInputMan::GetJoystickButtonState(int whichJoy, int whichButton, InputState whichState) const { if (whichJoy < 0 || whichJoy >= s_PrevJoystickStates.size() || whichButton < 0 || whichButton >= s_PrevJoystickStates[whichJoy].m_Buttons.size()) { return false; @@ -722,10 +629,6 @@ int UInputMan::Update() { std::fill(gamepad.m_DigitalAxis.begin(), gamepad.m_DigitalAxis.end(), 0); } - if (IsInMultiplayerMode()) { - ClearNetworkChangedState(); - } - m_TextInput.clear(); m_MouseWheelChange = 0; m_RawMouseMovement.Reset(); @@ -836,16 +739,9 @@ int UInputMan::Update() { m_EventQueue.clear(); m_RawMouseMovement *= m_MouseSensitivity; - // NETWORK SERVER: Apply mouse input received from client or collect mouse input - if (IsInMultiplayerMode()) { - UpdateNetworkMouseMovement(); - } else { - m_NetworkAccumulatedRawMouseMovement[Players::PlayerOne] += m_RawMouseMovement; - } UpdateMouseInput(); UpdateJoystickDigitalAxis(); HandleSpecialInput(); - StoreInputEventsForNextUpdate(); return 0; } @@ -860,7 +756,7 @@ void UInputMan::HandleSpecialInput() { if (g_ActivityMan.IsInActivity()) { const GameActivity* gameActivity = dynamic_cast(g_ActivityMan.GetActivity()); // Don't allow pausing and returning to main menu when running in server mode to not disrupt the simulation for the clients - if (!g_NetworkServer.IsServerModeEnabled() && AnyStartPress(false) && (!gameActivity || !gameActivity->IsBuyGUIVisible(-1))) { + if (AnyStartPress(false) && (!gameActivity || !gameActivity->IsBuyGUIVisible(-1))) { g_ActivityMan.PauseActivity(true, FlagShiftState()); return; } @@ -969,7 +865,7 @@ void UInputMan::UpdateMouseInput() { m_AnalogMouseData.CapMagnitude(m_MouseTrapRadius); // Only mess with the mouse pos if the original mouse position is not above the screen and may be grabbing the title bar of the game window - if (g_WindowMan.AnyWindowHasFocus() && !IsInMultiplayerMode() && !m_DisableMouseMoving && !m_TrapMousePos) { + if (g_WindowMan.AnyWindowHasFocus() && !m_DisableMouseMoving && !m_TrapMousePos) { // The mouse cursor is visible and can move about the screen/window, but it should still be contained within the mouse player's part of the window ForceMouseWithinPlayerScreen(g_ActivityMan.IsInActivity(), mousePlayer); } @@ -1120,52 +1016,3 @@ void UInputMan::HandleGamepadHotPlug(int deviceIndex) { m_NumJoysticks++; } } - -void UInputMan::UpdateNetworkMouseMovement() { - for (int player = Players::PlayerOne; player < Players::MaxPlayerCount; player++) { - if (!m_NetworkAccumulatedRawMouseMovement[player].IsZero()) { - // TODO: Figure out why we're multiplying by 3 here. Possibly related to mouse sensitivity. - m_NetworkAnalogMoveData[player].m_X += m_NetworkAccumulatedRawMouseMovement[player].m_X * 3; - m_NetworkAnalogMoveData[player].m_Y += m_NetworkAccumulatedRawMouseMovement[player].m_Y * 3; - m_NetworkAnalogMoveData[player].CapMagnitude(m_MouseTrapRadius); - } - m_NetworkAccumulatedRawMouseMovement[player].Reset(); - - // Reset mouse wheel state to stop over-wheeling - m_NetworkMouseWheelState[player] = 0; - } -} - -void UInputMan::ClearNetworkChangedState() { - for (int player = Players::PlayerOne; player < Players::MaxPlayerCount; ++player) { - for (int element = InputElements::INPUT_L_UP; element < InputElements::INPUT_COUNT; element++) { - m_NetworkServerChangedInputElementState[player][element] = false; - } - for (int mouseButton = MouseButtons::MOUSE_LEFT; mouseButton < MouseButtons::MAX_MOUSE_BUTTONS; mouseButton++) { - m_NetworkServerChangedMouseButtonState[player][mouseButton] = false; - } - m_NetworkMouseWheelState[player] = 0; - } -} -void UInputMan::SetNetworkInputElementState(int player, int element, bool newState) { - if (element >= InputElements::INPUT_L_UP && element < InputElements::INPUT_COUNT && player >= Players::PlayerOne && player < Players::MaxPlayerCount) { - m_NetworkServerChangedInputElementState[player][element] = (newState != m_NetworkServerPreviousInputElementState[player][element]); - m_NetworkServerPreviousInputElementState[player][element] = newState; - } -} - -void UInputMan::SetNetworkMouseButtonState(int player, int whichButton, InputState whichState, bool newState) { - if (whichButton >= MouseButtons::MOUSE_LEFT && whichButton < MouseButtons::MAX_MOUSE_BUTTONS && player >= Players::PlayerOne && player < Players::MaxPlayerCount) { - m_NetworkServerChangedMouseButtonState[player][whichButton] = (newState != m_NetworkServerPreviousMouseButtonState[player][whichButton]); - m_NetworkServerPreviousMouseButtonState[player][whichButton] = newState; - } -} - -void UInputMan::StoreInputEventsForNextUpdate() { - // Store pressed and released events to be picked by NetworkClient during its update. These will be cleared after update so we don't care about false but we store the result regardless. - for (int inputState = InputState::Pressed; inputState < InputState::InputStateCount; inputState++) { - for (int element = InputElements::INPUT_L_UP; element < InputElements::INPUT_COUNT; element++) { - m_NetworkAccumulatedElementState[element][inputState] = GetInputElementState(Players::PlayerOne, element, static_cast(inputState)); - } - } -} diff --git a/Source/Managers/UInputMan.h b/Source/Managers/UInputMan.h index 718475a8a9..a88e77ed26 100644 --- a/Source/Managers/UInputMan.h +++ b/Source/Managers/UInputMan.h @@ -77,7 +77,7 @@ namespace RTE { /// Access a specific player's control scheme. /// @param whichPlayer Which player to get the scheme for. /// @return A pointer to the requested player's control scheme. Ownership is NOT transferred! - InputScheme* GetControlScheme(int whichPlayer) { return IsInMultiplayerMode() ? &m_ControlScheme[Players::PlayerOne] : &m_ControlScheme.at(whichPlayer); } + InputScheme* GetControlScheme(int whichPlayer) { return &m_ControlScheme.at(whichPlayer); } /// Get the current device Icon of a specific player's scheme. /// @param whichPlayer Which player to get the scheme device icon of. @@ -323,7 +323,7 @@ namespace RTE { /// @param player The player to get mouse wheel position for. /// @return The relative mouse wheel position for the specified player. int MouseWheelMovedByPlayer(int player) const { - return (IsInMultiplayerMode() && player >= Players::PlayerOne && player < Players::MaxPlayerCount) ? m_NetworkMouseWheelState[player] : m_MouseWheelChange; + return m_MouseWheelChange; } /// Return true if there are any mouse button presses at all. @@ -437,72 +437,6 @@ namespace RTE { bool AnyJoyButtonPress(int whichJoy) const; #pragma endregion -#pragma region Network Handling - /// Returns true if manager is in multiplayer mode. - /// @return True if in multiplayer mode. - bool IsInMultiplayerMode() const { return m_OverrideInput; } - - /// Sets the multiplayer mode flag. - /// @param value Whether this manager should operate in multiplayer mode. - void SetMultiplayerMode(bool value) { m_OverrideInput = value; } - - /// Gets the position of the mouse for a player during network multiplayer. - /// @param player The player to get for. - /// @return The position of the mouse for the specified player - Vector GetNetworkAccumulatedRawMouseMovement(int player); - - /// Sets the position of the mouse for a player during network multiplayer. - /// @param player The player to set for. - /// @param input The new position of the mouse. - void SetNetworkMouseMovement(int player, const Vector& input) { m_NetworkAccumulatedRawMouseMovement[player] += input; } - - /// Sets whether an input element is held by a player during network multiplayer. - /// @param player Which player to set for. - /// @param element Which input element to set for. - /// @param state The new state of the input element. True or false. - void SetNetworkInputElementState(int player, int element, bool state); - - /// Sets whether a mouse button is held by a player during network multiplayer. - /// @param player Which player to set for. - /// @param whichButton Which mouse button to set for. - /// @param state The new state of the mouse button. True or false. - void SetNetworkMouseButtonHeldState(int player, int whichButton, bool state) { SetNetworkMouseButtonState(player, whichButton, InputState::Held, state); } - - /// Sets whether a mouse button is pressed by a player during network multiplayer. - /// @param player Which player to set for. - /// @param whichButton Which mouse button to set for. - /// @param state The new state of the mouse button. True or false. - void SetNetworkMouseButtonPressedState(int player, int whichButton, bool state) { SetNetworkMouseButtonState(player, whichButton, InputState::Pressed, state); } - - /// Sets whether a mouse button is released by a player during network multiplayer. - /// @param player Which player to set for. - /// @param whichButton Which mouse button to set for. - /// @param state The new state of the mouse button. True or false. - void SetNetworkMouseButtonReleasedState(int player, int whichButton, bool state) { SetNetworkMouseButtonState(player, whichButton, InputState::Released, state); } - - /// Sets the state of the mouse wheel for a player during network multiplayer. - /// @param player The player to set for. - /// @param state The new state of the mouse wheel. - void SetNetworkMouseWheelState(int player, int state) { - if (player >= Players::PlayerOne && player < Players::MaxPlayerCount) { - m_NetworkMouseWheelState[player] += state; - } - } - - /// Gets whether the specified input element is pressed during network multiplayer. - /// @param element The input element to check for. - /// @return Whether the specified input element is pressed or not. - bool NetworkAccumulatedElementPressed(int element) const { return NetworkAccumulatedElementState(element, InputState::Pressed); } - - /// Gets whether the specified input element is released during network multiplayer. - /// @param element The input element to check for. - /// @return Whether the specified input element is released or not. - bool NetworkAccumulatedElementReleased(int element) const { return NetworkAccumulatedElementState(element, InputState::Released); } - - /// Clears all the accumulated input element states. - void ClearNetworkAccumulatedStates(); -#pragma endregion - private: /// Enumeration for the different states an input element or button can be in. enum InputState { @@ -554,19 +488,6 @@ namespace RTE { /// This is to avoid having the window fly away because the user clicked the title bar. bool m_PrepareToEnableMouseMoving; - bool m_NetworkAccumulatedElementState[InputElements::INPUT_COUNT][InputState::InputStateCount]; //!< The state of a client input element during network multiplayer. - bool m_NetworkServerChangedInputElementState[Players::MaxPlayerCount][InputElements::INPUT_COUNT]; //!< The server side state of a player's input element during network multiplayer. - - std::array, Players::MaxPlayerCount> m_NetworkServerPreviousInputElementState; - bool m_NetworkServerChangedMouseButtonState[Players::MaxPlayerCount][MouseButtons::MAX_MOUSE_BUTTONS]; //!< The state of a player's mouse button during network multiplayer. - std::array, Players::MaxPlayerCount> m_NetworkServerPreviousMouseButtonState; - - Vector m_NetworkAccumulatedRawMouseMovement[Players::MaxPlayerCount]; //!< The position of the mouse for each player during network multiplayer. - Vector m_NetworkAnalogMoveData[Players::MaxPlayerCount]; //!< Mouse analog movement data for each player during network multiplayer. - int m_NetworkMouseWheelState[Players::MaxPlayerCount]; //!< The position of a player's mouse wheel during network multiplayer. - - bool m_TrapMousePosPerPlayer[Players::MaxPlayerCount]; //!< Whether to trap the mouse position to the middle of the screen for each player during network multiplayer. - static constexpr double c_GamepadAxisLimit = 32767.0; //!< Maximum axis value as defined by SDL (int16 max). static constexpr int c_AxisDigitalPressedThreshold = 8192; //!< Digital Axis threshold value as defined by allegro. static constexpr int c_AxisDigitalReleasedThreshold = c_AxisDigitalPressedThreshold - 100; //!< Digital Axis release threshold, to debounce values. @@ -587,8 +508,6 @@ namespace RTE { /// @return Whether the element is in the specified state or not. bool GetInputElementState(int whichPlayer, int whichElement, InputState whichState); - bool GetNetworkInputElementState(int whichPlayer, int whichElement, InputState whichState); - /// Gets whether any generic button with the menu cursor is in the specified state. /// @param whichButton Which menu button to check for. See MenuButtons enumeration. /// @param whichState Which state to check for. See InputState enumeration. @@ -608,13 +527,6 @@ namespace RTE { /// @return Whether the mouse button is in the specified state or not. bool GetMouseButtonState(int whichPlayer, int whichButton, InputState whichState) const; - /// Gets whether a multiplayer mouse button is in the specified state. - /// @param whichPlayer Which player to check for. See Players enumeration. - /// @param whichButton Which mouse button to check for. See MouseButtons enumeration. - /// @param whichState Which state to check for. See InputState enumeration. - /// @return Whether the mouse button is in the specified state or not. - bool GetNetworkMouseButtonState(int whichPlayer, int whichButton, InputState whichState) const; - /// Gets whether a joystick button is in the specified state. /// @param whichJoy Which joystick to check for. /// @param whichButton Which joystick button to check for. See JoyButtons enumeration. @@ -629,21 +541,6 @@ namespace RTE { /// @param whichState Which state to check for. See InputState enumeration. /// @return Whether the joystick stick axis is in the specified state or not. bool GetJoystickDirectionState(int whichJoy, int whichAxis, int whichDir, InputState whichState) const; - - /// Sets a mouse button for a player to the specified state during network multiplayer. - /// @param player Which player to set for. See Players enumeration. - /// @param whichButton Which mouse button to set for. See MouseButtons enumeration. - /// @param whichState Which input state to set. See InputState enumeration. - /// @param newState The new state of the specified InputState. True or false. - void SetNetworkMouseButtonState(int player, int whichButton, InputState whichState, bool newState); - - /// Gets whether an input element is in the specified state during network multiplayer. - /// @param element Which element to check for. See InputElements enumeration. - /// @param whichState Which state to check for. See InputState enumeration. - /// @return Whether the element is in the specified state or not. - bool NetworkAccumulatedElementState(int element, InputState whichState) const { - return (element < InputElements::INPUT_L_UP || element >= InputElements::INPUT_COUNT) ? false : m_NetworkAccumulatedElementState[element][whichState]; - } #pragma endregion #pragma region Update Breakdown @@ -668,9 +565,6 @@ namespace RTE { /// Connect a joystick or gamepad device and add it to the joystick list if a slot is available (up to max player count). /// @param deviceIndex The device index (generated by the connected event or a value up to SDL_NumJoysticks()). void HandleGamepadHotPlug(int deviceIndex); - - /// Stores all the input events that happened during this update to be compared to in the next update. This is called from Update(). - void StoreInputEventsForNextUpdate(); #pragma endregion /// Clears all the member variables of this UInputMan, effectively resetting the members of this abstraction level only. diff --git a/Source/Managers/WindowMan.cpp b/Source/Managers/WindowMan.cpp index 4e8bb256c9..3bc02df3fe 100644 --- a/Source/Managers/WindowMan.cpp +++ b/Source/Managers/WindowMan.cpp @@ -620,9 +620,6 @@ void WindowMan::DisplaySwitchOut() const { } void WindowMan::QueueWindowEvent(const SDL_Event& windowEvent) { - if (g_UInputMan.IsInMultiplayerMode()) { - return; - } m_EventQueue.emplace_back(windowEvent); } diff --git a/Source/Managers/meson.build b/Source/Managers/meson.build index 29c738575a..7d6b7ff6e2 100644 --- a/Source/Managers/meson.build +++ b/Source/Managers/meson.build @@ -11,8 +11,8 @@ sources += files( 'MetaMan.cpp', 'MovableMan.cpp', 'MusicMan.cpp', -'NetworkClient.cpp', -'NetworkServer.cpp', +#'NetworkClient.cpp', +#'NetworkServer.cpp', 'PerformanceMan.cpp', 'PostProcessMan.cpp', 'PresetMan.cpp', diff --git a/Source/Menus/BuyMenuGUI.cpp b/Source/Menus/BuyMenuGUI.cpp index eb9c58a211..627c99bffd 100644 --- a/Source/Menus/BuyMenuGUI.cpp +++ b/Source/Menus/BuyMenuGUI.cpp @@ -145,11 +145,7 @@ int BuyMenuGUI::Create(Controller* pController) { } // Stretch the invisible root box to fill the screen - if (g_FrameMan.IsInMultiplayerMode()) { - dynamic_cast(m_pGUIController->GetControl("base"))->SetSize(g_FrameMan.GetPlayerFrameBufferWidth(pController->GetPlayer()), g_FrameMan.GetPlayerFrameBufferHeight(pController->GetPlayer())); - } else { - dynamic_cast(m_pGUIController->GetControl("base"))->SetSize(g_WindowMan.GetResX(), g_WindowMan.GetResY()); - } + dynamic_cast(m_pGUIController->GetControl("base"))->SetSize(g_WindowMan.GetResX(), g_WindowMan.GetResY()); // Make sure we have convenient points to teh containing GUI colleciton boxes that we will manipulate the positions of if (!m_pParentBox) { @@ -211,10 +207,10 @@ int BuyMenuGUI::Create(Controller* pController) { m_pSaveButton->SetVisible(false); m_pClearButton->SetVisible(false); - // Stretch buy menu if in multiplayer mode - if (g_FrameMan.IsInMultiplayerMode()) { - int stretchAmount = g_FrameMan.GetPlayerFrameBufferHeight(pController->GetPlayer()) / 2; + // If we're not split screen horizontally, then stretch out the layout for all the relevant controls + int stretchAmount = g_WindowMan.GetResY() / 2; + if (!g_FrameMan.GetHSplit()) { m_pParentBox->SetSize(m_pParentBox->GetWidth(), m_pParentBox->GetHeight() + stretchAmount); m_pShopList->SetSize(m_pShopList->GetWidth(), m_pShopList->GetHeight() + stretchAmount); m_pCartList->SetSize(m_pCartList->GetWidth(), m_pCartList->GetHeight() + stretchAmount); @@ -225,22 +221,6 @@ int BuyMenuGUI::Create(Controller* pController) { m_pCostLabel->SetPositionAbs(m_pCostLabel->GetXPos(), m_pCostLabel->GetYPos() + stretchAmount); m_pBuyButton->SetPositionAbs(m_pBuyButton->GetXPos(), m_pBuyButton->GetYPos() + stretchAmount); - } else { - // If we're not split screen horizontally, then stretch out the layout for all the relevant controls - int stretchAmount = g_WindowMan.GetResY() / 2; - - if (!g_FrameMan.GetHSplit()) { - m_pParentBox->SetSize(m_pParentBox->GetWidth(), m_pParentBox->GetHeight() + stretchAmount); - m_pShopList->SetSize(m_pShopList->GetWidth(), m_pShopList->GetHeight() + stretchAmount); - m_pCartList->SetSize(m_pCartList->GetWidth(), m_pCartList->GetHeight() + stretchAmount); - m_pCraftLabel->SetPositionAbs(m_pCraftLabel->GetXPos(), m_pCraftLabel->GetYPos() + stretchAmount); - m_pCraftBox->SetPositionAbs(m_pCraftBox->GetXPos(), m_pCraftBox->GetYPos() + stretchAmount); - - m_pCraftCollectionBox->SetPositionAbs(m_pCraftCollectionBox->GetXPos(), m_pCraftCollectionBox->GetYPos() + stretchAmount); - - m_pCostLabel->SetPositionAbs(m_pCostLabel->GetXPos(), m_pCostLabel->GetYPos() + stretchAmount); - m_pBuyButton->SetPositionAbs(m_pBuyButton->GetXPos(), m_pBuyButton->GetYPos() + stretchAmount); - } } m_pShopList->SetAlternateDrawMode(true); @@ -477,36 +457,19 @@ bool BuyMenuGUI::SaveAllLoadoutsToFile() { void BuyMenuGUI::SetEnabled(bool enable) { if (enable && m_MenuEnabled != ENABLED && m_MenuEnabled != ENABLING) { - if (g_FrameMan.IsInMultiplayerMode()) { - // If we're not split screen horizontally, then stretch out the layout for all the relevant controls - int stretchAmount = g_FrameMan.GetPlayerFrameBufferHeight(m_pController->GetPlayer()) - m_pParentBox->GetHeight(); - if (stretchAmount != 0) { - m_pParentBox->SetSize(m_pParentBox->GetWidth(), m_pParentBox->GetHeight() + stretchAmount); - m_pShopList->SetSize(m_pShopList->GetWidth(), m_pShopList->GetHeight() + stretchAmount); - m_pCartList->SetSize(m_pCartList->GetWidth(), m_pCartList->GetHeight() + stretchAmount); - m_pCraftLabel->SetPositionAbs(m_pCraftLabel->GetXPos(), m_pCraftLabel->GetYPos() + stretchAmount); - m_pCraftBox->SetPositionAbs(m_pCraftBox->GetXPos(), m_pCraftBox->GetYPos() + stretchAmount); - - m_pCraftCollectionBox->SetPositionAbs(m_pCraftCollectionBox->GetXPos(), m_pCraftCollectionBox->GetYPos() + stretchAmount); - - m_pCostLabel->SetPositionAbs(m_pCostLabel->GetXPos(), m_pCostLabel->GetYPos() + stretchAmount); - m_pBuyButton->SetPositionAbs(m_pBuyButton->GetXPos(), m_pBuyButton->GetYPos() + stretchAmount); - } - } else { - // If we're not split screen horizontally, then stretch out the layout for all the relevant controls - int stretchAmount = g_FrameMan.GetPlayerScreenHeight() - m_pParentBox->GetHeight(); - if (stretchAmount != 0) { - m_pParentBox->SetSize(m_pParentBox->GetWidth(), m_pParentBox->GetHeight() + stretchAmount); - m_pShopList->SetSize(m_pShopList->GetWidth(), m_pShopList->GetHeight() + stretchAmount); - m_pCartList->SetSize(m_pCartList->GetWidth(), m_pCartList->GetHeight() + stretchAmount); - m_pCraftLabel->SetPositionAbs(m_pCraftLabel->GetXPos(), m_pCraftLabel->GetYPos() + stretchAmount); - m_pCraftBox->SetPositionAbs(m_pCraftBox->GetXPos(), m_pCraftBox->GetYPos() + stretchAmount); - - m_pCraftCollectionBox->SetPositionAbs(m_pCraftCollectionBox->GetXPos(), m_pCraftCollectionBox->GetYPos() + stretchAmount); - - m_pCostLabel->SetPositionAbs(m_pCostLabel->GetXPos(), m_pCostLabel->GetYPos() + stretchAmount); - m_pBuyButton->SetPositionAbs(m_pBuyButton->GetXPos(), m_pBuyButton->GetYPos() + stretchAmount); - } + // If we're not split screen horizontally, then stretch out the layout for all the relevant controls + int stretchAmount = g_FrameMan.GetPlayerScreenHeight() - m_pParentBox->GetHeight(); + if (stretchAmount != 0) { + m_pParentBox->SetSize(m_pParentBox->GetWidth(), m_pParentBox->GetHeight() + stretchAmount); + m_pShopList->SetSize(m_pShopList->GetWidth(), m_pShopList->GetHeight() + stretchAmount); + m_pCartList->SetSize(m_pCartList->GetWidth(), m_pCartList->GetHeight() + stretchAmount); + m_pCraftLabel->SetPositionAbs(m_pCraftLabel->GetXPos(), m_pCraftLabel->GetYPos() + stretchAmount); + m_pCraftBox->SetPositionAbs(m_pCraftBox->GetXPos(), m_pCraftBox->GetYPos() + stretchAmount); + + m_pCraftCollectionBox->SetPositionAbs(m_pCraftCollectionBox->GetXPos(), m_pCraftCollectionBox->GetYPos() + stretchAmount); + + m_pCostLabel->SetPositionAbs(m_pCostLabel->GetXPos(), m_pCostLabel->GetYPos() + stretchAmount); + m_pBuyButton->SetPositionAbs(m_pBuyButton->GetXPos(), m_pBuyButton->GetYPos() + stretchAmount); } m_MenuEnabled = ENABLING; diff --git a/Source/Menus/InventoryMenuGUI.cpp b/Source/Menus/InventoryMenuGUI.cpp index 3e403bd666..56ea785c8f 100644 --- a/Source/Menus/InventoryMenuGUI.cpp +++ b/Source/Menus/InventoryMenuGUI.cpp @@ -215,11 +215,7 @@ int InventoryMenuGUI::SetupFullOrTransferMode() { s_CursorBitmap = cursorFile.GetAsBitmap(); } - if (g_FrameMan.IsInMultiplayerMode()) { - dynamic_cast(m_GUIControlManager->GetControl("base"))->SetSize(g_FrameMan.GetPlayerFrameBufferWidth(m_MenuController->GetPlayer()), g_FrameMan.GetPlayerFrameBufferHeight(m_MenuController->GetPlayer())); - } else { - dynamic_cast(m_GUIControlManager->GetControl("base"))->SetSize(g_WindowMan.GetResX(), g_WindowMan.GetResY()); - } + dynamic_cast(m_GUIControlManager->GetControl("base"))->SetSize(g_WindowMan.GetResX(), g_WindowMan.GetResY()); m_GUITopLevelBox = dynamic_cast(m_GUIControlManager->GetControl("CollectionBox_InventoryMenuGUI")); m_GUITopLevelBox->SetPositionAbs(g_FrameMan.GetPlayerFrameBufferWidth(m_MenuController->GetPlayer()), 0); @@ -1356,7 +1352,7 @@ void InventoryMenuGUI::DrawCarouselMode(BITMAP* targetBitmap, const Vector& draw for (const IntRect& wrappedRectangle: wrappedRectangles) { g_GLResourceMan.UpdateDynamicBitmap(m_CarouselBGBitmap.get(), true); g_GLResourceMan.UpdateDynamicBitmap(m_CarouselBitmap.get(), true); - if (m_CarouselBackgroundTransparent && !g_FrameMan.IsInMultiplayerMode()) { + if (m_CarouselBackgroundTransparent) { g_FrameMan.SetTransTableFromPreset(TransparencyPreset::MoreTrans); DrawTexture(g_GLResourceMan.GetStaticTextureFromBitmap(m_CarouselBGBitmap.get()), wrappedRectangle.m_Left - m_CarouselBGBitmap->w / 2, wrappedRectangle.m_Top - m_CarouselBGBitmap->h / 2, {255, 255, 255, 75}); DrawTexture(g_GLResourceMan.GetStaticTextureFromBitmap(m_CarouselBitmap.get()), wrappedRectangle.m_Left - m_CarouselBitmap->w / 2, wrappedRectangle.m_Top - m_CarouselBitmap->h / 2, {255, 255, 255, 255}); diff --git a/Source/Menus/MainMenuGUI.cpp b/Source/Menus/MainMenuGUI.cpp index 2754f12c11..682b399683 100644 --- a/Source/Menus/MainMenuGUI.cpp +++ b/Source/Menus/MainMenuGUI.cpp @@ -426,7 +426,6 @@ void MainMenuGUI::HandleMainScreenInputEvents(const GUIControl* guiEventControl) } else if (guiEventControl == m_MainMenuButtons[MenuButton::MultiplayerButton]) { m_UpdateResult = MainMenuUpdateResult::ActivityStarted; g_GUISound.BackButtonPressSound()->Play(); - g_ActivityMan.SetStartMultiplayerActivity(); } else if (guiEventControl == m_MainMenuButtons[MenuButton::SaveOrLoadGameButton]) { SetActiveMenuScreen(MenuScreen::SaveOrLoadGameScreen); } else if (guiEventControl == m_MainMenuButtons[MenuButton::SettingsButton]) { diff --git a/Source/Menus/ObjectPickerGUI.cpp b/Source/Menus/ObjectPickerGUI.cpp index 199d7efa98..cfafcbc7b4 100644 --- a/Source/Menus/ObjectPickerGUI.cpp +++ b/Source/Menus/ObjectPickerGUI.cpp @@ -79,11 +79,7 @@ int ObjectPickerGUI::Create(Controller* controller, int whichModuleSpace, const s_Cursor = cursorFile.GetAsBitmap(); } - if (g_FrameMan.IsInMultiplayerMode()) { - dynamic_cast(m_GUIControlManager->GetControl("base"))->SetSize(g_FrameMan.GetPlayerFrameBufferWidth(controller->GetPlayer()), g_FrameMan.GetPlayerFrameBufferHeight(controller->GetPlayer())); - } else { - dynamic_cast(m_GUIControlManager->GetControl("base"))->SetSize(g_WindowMan.GetResX(), g_WindowMan.GetResY()); - } + dynamic_cast(m_GUIControlManager->GetControl("base"))->SetSize(g_WindowMan.GetResX(), g_WindowMan.GetResY()); if (!m_ParentBox) { m_ParentBox = dynamic_cast(m_GUIControlManager->GetControl("PickerGUIBox")); @@ -102,7 +98,7 @@ int ObjectPickerGUI::Create(Controller* controller, int whichModuleSpace, const m_ObjectsList->SetAlternateDrawMode(true); m_ObjectsList->SetMultiSelect(false); - int stretchAmount = g_FrameMan.IsInMultiplayerMode() ? (g_FrameMan.GetPlayerFrameBufferHeight(m_Controller->GetPlayer()) - m_ParentBox->GetHeight()) : (g_FrameMan.GetPlayerScreenHeight() - m_ParentBox->GetHeight()); + int stretchAmount = g_FrameMan.GetPlayerScreenHeight() - m_ParentBox->GetHeight(); if (stretchAmount != 0) { m_ParentBox->SetSize(m_ParentBox->GetWidth(), m_ParentBox->GetHeight() + stretchAmount); m_GroupsList->SetSize(m_GroupsList->GetWidth(), m_GroupsList->GetHeight() + stretchAmount); diff --git a/Source/Menus/SceneEditorGUI.cpp b/Source/Menus/SceneEditorGUI.cpp index 7e2b61bc0e..03004a56d6 100644 --- a/Source/Menus/SceneEditorGUI.cpp +++ b/Source/Menus/SceneEditorGUI.cpp @@ -891,12 +891,6 @@ void SceneEditorGUI::Update() { g_SceneMan.GetTerrain()->CleanAir(); Vector terrainObjectPos = pTO->GetPos() + pTO->GetBitmapOffset(); - if (pTO->HasBGColorBitmap()) { - g_SceneMan.RegisterTerrainChange(terrainObjectPos.GetFloorIntX(), terrainObjectPos.GetFloorIntY(), pTO->GetBitmapWidth(), pTO->GetBitmapHeight(), ColorKeys::g_MaskColor, true); - } - if (pTO->HasFGColorBitmap()) { - g_SceneMan.RegisterTerrainChange(terrainObjectPos.GetFloorIntX(), terrainObjectPos.GetFloorIntY(), pTO->GetBitmapWidth(), pTO->GetBitmapHeight(), ColorKeys::g_MaskColor, false); - } // TODO: Make IsBrain function to see if one was placed if (pTO->GetPresetName() == "Brain Vault") { diff --git a/meson.build b/meson.build index b6e79b242c..00d658c8c3 100644 --- a/meson.build +++ b/meson.build @@ -57,7 +57,7 @@ if compiler.get_argument_syntax()== 'gcc' # used for gcc compatible compilers buildtype_debug = get_option('debug') if buildtype_debug - extra_args += ['-Wno-unknown-pragmas', '-Wno-deprecated-declarations', '-Wno-misleading-indentation'] # Disable #pragma region complaints and luabind auto_ptr warning + extra_args += ['-Wno-write-strings', '-Wno-unknown-pragmas', '-Wno-deprecated-declarations', '-Wno-misleading-indentation'] # Disable #pragma region complaints and luabind auto_ptr warning if get_option('sane_warnings') extra_args += ['-Wno-sign-compare', '-Wno-non-virtual-dtor', '-Wno-parentheses', '-Wno-overloaded-virtual', '-Wno-unused-variable', '-Wno-unused-function']