From cac62b14db104ef4e93baa3ccb1d3801f7fe56c3 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Mon, 4 Jan 2016 20:10:14 +1100 Subject: [PATCH] Include username in window title and add rand() to direct connect screen (Thanks Fudgie), also avoid rendering empty translucent batches twice. Improves FPS by 4-5 on 1024^3 maps. --- ClassicalSharp/Game/Game.cs | 2 +- ClassicalSharp/Program.cs | 2 +- ClassicalSharp/Rendering/MapRenderer.Rendering.cs | 1 + ClassicalSharp/Rendering/MapRenderer.cs | 6 ++++++ Launcher2/Gui/Screens/DirectConnectScreen.cs | 14 +++++++++++--- Launcher2/Utils/Client.cs | 4 ++-- Launcher2/Utils/ClientStartData.cs | 3 +++ 7 files changed, 25 insertions(+), 7 deletions(-) diff --git a/ClassicalSharp/Game/Game.cs b/ClassicalSharp/Game/Game.cs index d7d3ea955..f4c93c759 100644 --- a/ClassicalSharp/Game/Game.cs +++ b/ClassicalSharp/Game/Game.cs @@ -463,7 +463,7 @@ namespace ClassicalSharp { public Game( string username, string mppass, string skinServer, bool nullContext, int width, int height ) - : base( width, height, GraphicsMode.Default, Program.AppName, nullContext, 0, DisplayDevice.Default ) { + : base( width, height, GraphicsMode.Default, Program.AppName + " (" + username + ")", nullContext, 0, DisplayDevice.Default ) { Username = username; Mppass = mppass; this.skinServer = skinServer; diff --git a/ClassicalSharp/Program.cs b/ClassicalSharp/Program.cs index 354f4a4f9..af9a01c4c 100644 --- a/ClassicalSharp/Program.cs +++ b/ClassicalSharp/Program.cs @@ -36,7 +36,7 @@ namespace ClassicalSharp { if( args.Length == 0 || args.Length == 1 ) { const string skinServer = "http://s3.amazonaws.com/MinecraftSkins/"; - using( Game game = new Game( "LocalPlayer", null, skinServer, nullContext, width, height ) ) + using( Game game = new Game( "Singleplayer", null, skinServer, nullContext, width, height ) ) game.Run(); } else if( args.Length < 4 ) { Utils.LogDebug( "ClassicalSharp.exe is only the raw client. You must either use the launcher or" diff --git a/ClassicalSharp/Rendering/MapRenderer.Rendering.cs b/ClassicalSharp/Rendering/MapRenderer.Rendering.cs index b09995781..314c85d23 100644 --- a/ClassicalSharp/Rendering/MapRenderer.Rendering.cs +++ b/ClassicalSharp/Rendering/MapRenderer.Rendering.cs @@ -49,6 +49,7 @@ namespace ClassicalSharp { ChunkPartInfo part = info.TranslucentParts[batch]; if( part.IndicesCount == 0 ) continue; + usedTranslucent[batch] = true; DrawTranslucentPart( info, ref part ); } } diff --git a/ClassicalSharp/Rendering/MapRenderer.cs b/ClassicalSharp/Rendering/MapRenderer.cs index 21ba584e9..481d4d805 100644 --- a/ClassicalSharp/Rendering/MapRenderer.cs +++ b/ClassicalSharp/Rendering/MapRenderer.cs @@ -36,11 +36,13 @@ namespace ClassicalSharp { ChunkInfo[] chunks, unsortedChunks; Vector3I chunkPos = new Vector3I( int.MaxValue, int.MaxValue, int.MaxValue ); int elementsPerBitmap = 0; + bool[] usedTranslucent; public MapRenderer( Game game ) { this.game = game; _1Dcount = game.TerrainAtlas1D.TexIds.Length; _1DUsed = game.TerrainAtlas1D.CalcMaxUsedRow( game.TerrainAtlas, game.BlockInfo ); + usedTranslucent = new bool[_1DUsed]; builder = new ChunkMeshBuilder( game ); api = game.Graphics; @@ -91,10 +93,12 @@ namespace ClassicalSharp { } elementsPerBitmap = game.TerrainAtlas1D.elementsPerBitmap; _1DUsed = game.TerrainAtlas1D.CalcMaxUsedRow( game.TerrainAtlas, game.BlockInfo ); + usedTranslucent = new bool[_1DUsed]; } void BlockDefinitionChanged( object sender, EventArgs e ) { _1DUsed = game.TerrainAtlas1D.CalcMaxUsedRow( game.TerrainAtlas, game.BlockInfo ); + usedTranslucent = new bool[_1DUsed]; } void OnNewMap( object sender, EventArgs e ) { @@ -316,6 +320,7 @@ namespace ClassicalSharp { api.AlphaBlending = false; api.ColourWrite = false; for( int batch = 0; batch < _1DUsed; batch++ ) { + usedTranslucent[batch] = false; RenderTranslucentBatchDepthPass( batch ); } @@ -326,6 +331,7 @@ namespace ClassicalSharp { api.DepthWrite = false; // we already calculated depth values in depth pass for( int batch = 0; batch < _1DUsed; batch++ ) { + if( !usedTranslucent[batch] ) continue; api.BindTexture( texIds[batch] ); RenderTranslucentBatch( batch ); } diff --git a/Launcher2/Gui/Screens/DirectConnectScreen.cs b/Launcher2/Gui/Screens/DirectConnectScreen.cs index 409543278..95a45fe11 100644 --- a/Launcher2/Gui/Screens/DirectConnectScreen.cs +++ b/Launcher2/Gui/Screens/DirectConnectScreen.cs @@ -134,10 +134,10 @@ namespace Launcher2 { if( !Options.Load() ) return; - Options.Set( "launcher-dc-username", data.Username ); + Options.Set( "launcher-dc-username", data.RealUsername ); Options.Set( "launcher-dc-ip", data.Ip ); Options.Set( "launcher-dc-port", data.Port ); - Options.Set( "launcher-dc-mppass", Secure.Encode( data.Mppass, data.Username ) ); + Options.Set( "launcher-dc-mppass", Secure.Encode( data.Mppass, data.RealUsername ) ); Options.Set( "launcher-dc-ccskins", ccSkins ); Options.Save(); } @@ -159,6 +159,8 @@ namespace Launcher2 { Client.Start( data, ccSkins, ref game.ShouldExit ); } + static Random rnd = new Random(); + static byte[] rndBytes = new byte[8]; ClientStartData GetStartData( string user, string mppass, string ip, string port ) { SetStatus( "" ); @@ -179,7 +181,13 @@ namespace Launcher2 { if( String.IsNullOrEmpty( mppass ) ) mppass = "(none)"; - return new ClientStartData( user, mppass, ip, port ); + + ClientStartData data = new ClientStartData( user, mppass, ip, port ); + if( user.ToLowerInvariant() == "rand()" || user.ToLowerInvariant() == "random()") { + rnd.NextBytes( rndBytes ); + data.Username = Convert.ToBase64String( rndBytes ).TrimEnd( '=' ); + } + return data; } } } diff --git a/Launcher2/Utils/Client.cs b/Launcher2/Utils/Client.cs index 2049d76e9..bcb458b91 100644 --- a/Launcher2/Utils/Client.cs +++ b/Launcher2/Utils/Client.cs @@ -48,10 +48,10 @@ namespace Launcher2 { shouldExit = Options.GetBool( OptionsKey.AutoCloseLauncher, false ); if( data == null ) return; - Options.Set( "launcher-username", data.Username ); + Options.Set( "launcher-username", data.RealUsername ); Options.Set( "launcher-ip", data.Ip ); Options.Set( "launcher-port", data.Port ); - Options.Set( "launcher-mppass", Secure.Encode( data.Mppass, data.Username ) ); + Options.Set( "launcher-mppass", Secure.Encode( data.Mppass, data.RealUsername ) ); Options.Set( "launcher-ccskins", classiCubeSkins ); Options.Save(); } diff --git a/Launcher2/Utils/ClientStartData.cs b/Launcher2/Utils/ClientStartData.cs index e820b4dae..0abd80d43 100644 --- a/Launcher2/Utils/ClientStartData.cs +++ b/Launcher2/Utils/ClientStartData.cs @@ -6,6 +6,8 @@ namespace Launcher2 { public string Username; + public string RealUsername; + public string Mppass; public string Ip; @@ -17,6 +19,7 @@ namespace Launcher2 { public ClientStartData( string user, string mppass, string ip, string port ) { Username = user; + RealUsername = user; Mppass = mppass; Ip = ip; Port = port;