Overhaul player disconnect notifications.

This commit is contained in:
Paul Chote
2021-09-04 15:09:30 +01:00
committed by abcdefg30
parent b8e343bee9
commit 54c08748e0
12 changed files with 99 additions and 60 deletions

View File

@@ -136,6 +136,7 @@ namespace OpenRA
public readonly WorldType Type;
public readonly IValidateOrder[] OrderValidators;
readonly INotifyPlayerDisconnected[] notifyDisconnected;
readonly GameInformation gameInfo;
@@ -201,6 +202,7 @@ namespace OpenRA
ScreenMap = WorldActor.Trait<ScreenMap>();
Selection = WorldActor.Trait<ISelection>();
OrderValidators = WorldActor.TraitsImplementing<IValidateOrder>().ToArray();
notifyDisconnected = WorldActor.TraitsImplementing<INotifyPlayerDisconnected>().ToArray();
LongBitSet<PlayerBitMask>.Reset();
@@ -519,13 +521,20 @@ namespace OpenRA
}
}
public void OnPlayerDisconnected(Player player)
internal void OnClientDisconnected(int clientId)
{
var pi = gameInfo.GetPlayer(player);
if (pi == null)
return;
foreach (var player in Players.Where(p => p.ClientIndex == clientId && p.PlayerReference.Playable))
{
foreach (var np in notifyDisconnected)
np.PlayerDisconnected(WorldActor, player);
pi.DisconnectFrame = OrderManager.NetFrameNumber;
foreach (var p in Players)
p.PlayerDisconnected(player);
var pi = gameInfo.GetPlayer(player);
if (pi != null)
pi.DisconnectFrame = OrderManager.NetFrameNumber;
}
}
public void RequestGameSave(string filename)