mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-15 10:35:11 -04:00
Don't dispose of old screen when changing maps (Thanks WolfgangNS)
This commit is contained in:
parent
1116c22a66
commit
a69074bb88
@ -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 ) {
|
||||
|
@ -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 );
|
||||
|
@ -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 );
|
||||
|
@ -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 );
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user