Removed loading screen image crap

This commit is contained in:
Bob Da Ross
2021-06-18 23:27:34 -05:00
parent 5d489f88b8
commit c7cecca148
4 changed files with 111 additions and 45 deletions

View File

@@ -144,8 +144,6 @@ namespace SeamlessClientPlugin
{ {
TryShow("Initilizing Communications!"); TryShow("Initilizing Communications!");
RunInitilizations(); RunInitilizations();
} }
//OnNewPlayerRequest //OnNewPlayerRequest
//throw new NotImplementedException(); //throw new NotImplementedException();
@@ -172,12 +170,6 @@ namespace SeamlessClientPlugin
public static void RunInitilizations() public static void RunInitilizations()
{ {
MyAPIGateway.Multiplayer.RegisterSecureMessageHandler(SeamlessClientNetID, MessageHandler); MyAPIGateway.Multiplayer.RegisterSecureMessageHandler(SeamlessClientNetID, MessageHandler);
@@ -214,31 +206,6 @@ namespace SeamlessClientPlugin
} }
public static void RestartClientAfterUpdate()
{
try
{
TryShow("Restarting Client!");
string exe = Assembly.GetEntryAssembly().Location;
Process currentProcess = Process.GetCurrentProcess();
string[] CommandArgs = Environment.GetCommandLineArgs();
string NewCommandLine = "";
for (int i = 1; i < CommandArgs.Length; i++)
{
NewCommandLine += " " + CommandArgs[i];
}
TryShow(NewCommandLine);
Process.Start(exe, NewCommandLine);
currentProcess.Kill();
}
catch (Exception ex)
{
TryShow("Restarting Client error!");
}
}
public static void TryShow(string message) public static void TryShow(string message)
{ {
if (MySession.Static?.LocalHumanPlayer != null && Debug) if (MySession.Static?.LocalHumanPlayer != null && Debug)

View File

@@ -305,6 +305,9 @@ namespace SeamlessClientPlugin.SeamlessTransfer
MyPlayerCollection.RequestLocalRespawn(); MyPlayerCollection.RequestLocalRespawn();
} }
//Request client state batch
(MyMultiplayer.Static as MyMultiplayerClientBase).RequestBatchConfirmation();
MyMultiplayer.Static.PendingReplicablesDone += MyMultiplayer_PendingReplicablesDone;
//typeof(MyGuiScreenTerminal).GetMethod("CreateTabs") //typeof(MyGuiScreenTerminal).GetMethod("CreateTabs")
MySession.Static.LoadDataComponents(); MySession.Static.LoadDataComponents();
@@ -321,9 +324,14 @@ namespace SeamlessClientPlugin.SeamlessTransfer
MyGuiScreenHudSpace.Static.RecreateControls(true); MyGuiScreenHudSpace.Static.RecreateControls(true);
} }
private void MyMultiplayer_PendingReplicablesDone()
{
if (MySession.Static.VoxelMaps.Instances.Count > 0)
{
MySandboxGame.AreClipmapsReady = false;
}
MyMultiplayer.Static.PendingReplicablesDone -= MyMultiplayer_PendingReplicablesDone;
}
private void UpdateWorldGenerator() private void UpdateWorldGenerator()
{ {

View File

@@ -1,9 +1,13 @@
using HarmonyLib; using HarmonyLib;
using Sandbox.Engine.Analytics;
using Sandbox.Engine.Multiplayer; using Sandbox.Engine.Multiplayer;
using Sandbox.Engine.Networking; using Sandbox.Engine.Networking;
using Sandbox.Game;
using Sandbox.Game.Gui;
using Sandbox.Game.Multiplayer; using Sandbox.Game.Multiplayer;
using Sandbox.Game.World; using Sandbox.Game.World;
using Sandbox.Game.World.Generator; using Sandbox.Game.World.Generator;
using Sandbox.Graphics;
using Sandbox.Graphics.GUI; using Sandbox.Graphics.GUI;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -18,6 +22,7 @@ using VRage.Game;
using VRage.GameServices; using VRage.GameServices;
using VRage.Network; using VRage.Network;
using VRage.Utils; using VRage.Utils;
using VRageMath;
namespace SeamlessClientPlugin.SeamlessTransfer namespace SeamlessClientPlugin.SeamlessTransfer
{ {
@@ -108,13 +113,15 @@ namespace SeamlessClientPlugin.SeamlessTransfer
UnloadProceduralWorldGenerator = GetMethod(typeof(MyProceduralWorldGenerator), "UnloadData", BindingFlags.Instance | BindingFlags.NonPublic); UnloadProceduralWorldGenerator = GetMethod(typeof(MyProceduralWorldGenerator), "UnloadData", BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo ConnectToServer = GetMethod(typeof(MyGameService), "ConnectToServer", BindingFlags.Static | BindingFlags.Public); MethodInfo ConnectToServer = GetMethod(typeof(MyGameService), "ConnectToServer", BindingFlags.Static | BindingFlags.Public);
MethodInfo LoadingScreenDraw = GetMethod(typeof(MyGuiScreenLoading), "DrawInternal", BindingFlags.Instance | BindingFlags.NonPublic);
Patcher.Patch(LoadingScreenDraw, prefix: new HarmonyMethod(GetPatchMethod(nameof(DrawInternal))));
Patcher.Patch(OnJoin, postfix: new HarmonyMethod(GetPatchMethod(nameof(OnUserJoined)))); Patcher.Patch(OnJoin, postfix: new HarmonyMethod(GetPatchMethod(nameof(OnUserJoined))));
Patcher.Patch(LoadingAction, prefix: new HarmonyMethod(GetPatchMethod(nameof(LoadMultiplayerSession)))); Patcher.Patch(LoadingAction, prefix: new HarmonyMethod(GetPatchMethod(nameof(LoadMultiplayerSession))));
//Patcher.Patch(ConnectToServer, prefix: new HarmonyMethod(GetPatchMethod(nameof(OnConnectToServer)))); //Patcher.Patch(ConnectToServer, prefix: new HarmonyMethod(GetPatchMethod(nameof(OnConnectToServer))));
@@ -126,9 +133,16 @@ namespace SeamlessClientPlugin.SeamlessTransfer
} }
#region LoadingScreen #region LoadingScreen
/* Loading Screen Stuff */ /* Loading Screen Stuff */
private static string LoadingScreenTexture = null;
private static string ServerName;
private static bool LoadMultiplayerSession(MyObjectBuilder_World world, MyMultiplayerBase multiplayerSession) private static bool LoadMultiplayerSession(MyObjectBuilder_World world, MyMultiplayerBase multiplayerSession)
{ {
MyLog.Default.WriteLine("LoadSession() - Start"); MyLog.Default.WriteLine("LoadSession() - Start");
if (!MyWorkshop.CheckLocalModsAllowed(world.Checkpoint.Mods, allowLocalMods: false)) if (!MyWorkshop.CheckLocalModsAllowed(world.Checkpoint.Mods, allowLocalMods: false))
{ {
@@ -148,15 +162,16 @@ namespace SeamlessClientPlugin.SeamlessTransfer
MySession.Static = null; MySession.Static = null;
} }
string CustomBackgroundImage = null; ServerName = multiplayerSession.HostName;
GetCustomLoadingScreenPath(world.Checkpoint.Mods, out CustomBackgroundImage); GetCustomLoadingScreenPath(world.Checkpoint.Mods, out LoadingScreenTexture);
MySessionLoader.StartLoading(delegate MySessionLoader.StartLoading(delegate
{ {
LoadMultiplayer.Invoke(null, new object[] { world, multiplayerSession }); LoadMultiplayer.Invoke(null, new object[] { world, multiplayerSession });
//MySession.LoadMultiplayer(world, multiplayerSession); //MySession.LoadMultiplayer(world, multiplayerSession);
}, null, CustomBackgroundImage, null); }, null, null, null);
} }
else else
{ {
@@ -181,6 +196,56 @@ namespace SeamlessClientPlugin.SeamlessTransfer
return false; return false;
} }
private static bool DrawInternal(MyGuiScreenLoading __instance)
{
//If we dont have a custom loading screen texture, do not do the special crap below
if (string.IsNullOrEmpty(LoadingScreenTexture))
return true;
float m_transitionAlpha = (float)typeof(MyGuiScreenBase).GetField("m_transitionAlpha", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(__instance);
string m_font = "LoadingScreen";
//MyGuiControlMultilineText m_multiTextControl = (MyGuiControlMultilineText)typeof(MyGuiScreenLoading).GetField("m_multiTextControl", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(__instance);
Color color = new Color(255, 255, 255, 250);
color.A = (byte)((float)(int)color.A * m_transitionAlpha);
Rectangle fullscreenRectangle = MyGuiManager.GetFullscreenRectangle();
MyGuiManager.DrawSpriteBatch("Textures\\GUI\\Blank.dds", fullscreenRectangle, Color.Black, false, true);
Rectangle outRect;
MyGuiManager.GetSafeHeightFullScreenPictureSize(MyGuiConstants.LOADING_BACKGROUND_TEXTURE_REAL_SIZE, out outRect);
MyGuiManager.DrawSpriteBatch(LoadingScreenTexture, outRect, new Color(new Vector4(1f, 1f, 1f, m_transitionAlpha)), true, true);
MyGuiManager.DrawSpriteBatch("Textures\\Gui\\Screens\\screen_background_fade.dds", outRect, new Color(new Vector4(1f, 1f, 1f, m_transitionAlpha)), true, true);
//MyGuiSandbox.DrawGameLogoHandler(m_transitionAlpha, MyGuiManager.ComputeFullscreenGuiCoordinate(MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_TOP, 44, 68));
string LoadScreen = $"Loading into {ServerName}! Please wait!";
MyGuiManager.DrawString(m_font, LoadScreen, new Vector2(0.5f, 0.95f), MyGuiSandbox.GetDefaultTextScaleWithLanguage() * 1.1f, new Color(MyGuiConstants.LOADING_PLEASE_WAIT_COLOR * m_transitionAlpha), MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_BOTTOM);
MyGuiManager.DrawString(m_font, "Nexus & SeamlessClient Made by: Casimir", new Vector2(0.95f, 0.95f), MyGuiSandbox.GetDefaultTextScaleWithLanguage() * 1.1f, new Color(MyGuiConstants.LOADING_PLEASE_WAIT_COLOR * m_transitionAlpha), MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_BOTTOM);
/*
if (string.IsNullOrEmpty(m_customTextFromConstructor))
{
string font = m_font;
Vector2 positionAbsoluteBottomLeft = m_multiTextControl.GetPositionAbsoluteBottomLeft();
Vector2 textSize = m_multiTextControl.TextSize;
Vector2 normalizedCoord = positionAbsoluteBottomLeft + new Vector2((m_multiTextControl.Size.X - textSize.X) * 0.5f + 0.025f, 0.025f);
MyGuiManager.DrawString(font, m_authorWithDash.ToString(), normalizedCoord, MyGuiSandbox.GetDefaultTextScaleWithLanguage());
}
*/
//m_multiTextControl.Draw(1f, 1f);
return false;
}
private static bool GetCustomLoadingScreenPath(List<MyObjectBuilder_Checkpoint.ModItem> Mods, out string File) private static bool GetCustomLoadingScreenPath(List<MyObjectBuilder_Checkpoint.ModItem> Mods, out string File)
{ {
File = null; File = null;

View File

@@ -2,6 +2,7 @@
using Sandbox.Graphics.GUI; using Sandbox.Graphics.GUI;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.IO; using System.IO;
using System.IO.Compression; using System.IO.Compression;
using System.Linq; using System.Linq;
@@ -21,7 +22,7 @@ namespace SeamlessClientPlugin.Utilities
public string PluginFolder; public string PluginFolder;
public string CurrentVersion; public string CurrentVersion;
public bool DownloadUpdate; public bool DownloadUpdate;
private string GitHubAPILink = "https://api.github.com/repos/Casimir255/SeamlessClientPlugin/releases/latest"; private const string GitHubAPILink = "https://api.github.com/repos/Casimir255/SeamlessClientPlugin/releases/latest";
private WebClient Client; private WebClient Client;
@@ -35,6 +36,31 @@ namespace SeamlessClientPlugin.Utilities
DeleteOLDFiles(); DeleteOLDFiles();
} }
private static void RestartClientAfterUpdate()
{
try
{
SeamlessClient.TryShow("Restarting Client!");
string exe = Assembly.GetEntryAssembly().Location;
Process currentProcess = Process.GetCurrentProcess();
string[] CommandArgs = Environment.GetCommandLineArgs();
string NewCommandLine = "";
for (int i = 1; i < CommandArgs.Length; i++)
{
NewCommandLine += " " + CommandArgs[i];
}
SeamlessClient.TryShow(NewCommandLine);
Process.Start(exe, NewCommandLine);
currentProcess.Kill();
}
catch
{
SeamlessClient.TryShow("Restarting Client error!");
}
}
@@ -201,7 +227,7 @@ namespace SeamlessClientPlugin.Utilities
//Restart client //Restart client
SeamlessClient.TryShow("UpdateComplete!"); SeamlessClient.TryShow("UpdateComplete!");
SeamlessClient.RestartClientAfterUpdate(); RestartClientAfterUpdate();
return true; return true;
} }