Don't dispose of old screen when changing maps (Thanks WolfgangNS)

This commit is contained in:
UnknownShadow200 2015-12-25 12:01:49 +11:00
parent 1116c22a66
commit a69074bb88
4 changed files with 20 additions and 6 deletions

View File

@ -300,7 +300,10 @@ namespace ClassicalSharp {
}
internal Screen activeScreen;
public void SetNewScreen( Screen screen ) {
public void SetNewScreen( Screen screen ) { SetNewScreen( screen, true ); }
public void SetNewScreen( Screen screen, bool disposeOld ) {
// don't switch to the new screen immediately if the user
// is currently looking at a warning dialog.
if( activeScreen is WarningScreen ) {
@ -314,7 +317,7 @@ namespace ClassicalSharp {
return;
}
InputHandler.ScreenChanged( activeScreen, screen );
if( activeScreen != null )
if( activeScreen != null && disposeOld )
activeScreen.Dispose();
if( screen == null ) {

View File

@ -85,7 +85,12 @@ namespace ClassicalSharp {
if( gzipStream != null )
return;
game.Map.Reset();
game.SetNewScreen( new LoadingMapScreen( game, ServerName, ServerMotd ) );
prevScreen = game.activeScreen;
if( prevScreen is LoadingMapScreen )
prevScreen = null;
prevCursorVisible = game.CursorVisible;
game.SetNewScreen( new LoadingMapScreen( game, ServerName, ServerMotd ), false );
if( ServerMotd.Contains( "cfg=" ) ) {
ReadWomConfigurationAsync();
}
@ -139,6 +144,11 @@ namespace ClassicalSharp {
void HandleLevelFinalise() {
game.SetNewScreen( null );
game.activeScreen = prevScreen;
if( prevScreen != null )
game.CursorVisible = prevCursorVisible;
prevScreen = null;
int mapWidth = reader.ReadInt16();
int mapHeight = reader.ReadInt16();
int mapLength = reader.ReadInt16();
@ -248,7 +258,7 @@ namespace ClassicalSharp {
void HandleSetPermission() {
game.LocalPlayer.SetUserType( reader.ReadUInt8() );
}
}
void AddEntity( byte entityId, string displayName, string skinName, bool readPosition ) {
skinName = Utils.StripColours( skinName );
@ -282,7 +292,7 @@ namespace ClassicalSharp {
game.Events.RaiseEntityRemoved( entityId );
player.Despawn();
game.Players[entityId] = null;
}
}
// See comment about LegendCraft in HandleAddEntity
if( needRemoveNames != null && needRemoveNames[entityId] ) {
game.Events.RaiseCpeListInfoRemoved( entityId );

View File

@ -23,6 +23,8 @@ namespace ClassicalSharp {
Game game;
bool receivedFirstPosition;
DateTime lastPacket;
Screen prevScreen;
bool prevCursorVisible;
public override void Connect( IPAddress address, int port ) {
socket = new Socket( address.AddressFamily, SocketType.Stream, ProtocolType.Tcp );

View File

@ -102,7 +102,6 @@ namespace ClassicalSharp.Singleplayer {
game.Map.Reset();
GC.Collect();
this.generator = generator;
game.SetNewScreen( new LoadingMapScreen( game, "Single player", "Generating.." ) );
generator.GenerateAsync( game, width, height, length, seed );
}