@@ -71,6 +71,7 @@ public override void OnNetworkSpawn()
71
71
m_NetPortal = GameObject . FindGameObjectWithTag ( "GameNetPortal" ) . GetComponent < GameNetPortal > ( ) ;
72
72
m_ServerNetPortal = m_NetPortal . GetComponent < ServerGameNetPortal > ( ) ;
73
73
74
+ NetworkManager . OnClientDisconnectCallback += OnClientDisconnect ;
74
75
NetworkManager . SceneManager . OnSceneEvent += OnClientSceneChanged ;
75
76
76
77
DoInitialSpawnIfPossible ( ) ;
@@ -99,6 +100,15 @@ private bool DoInitialSpawnIfPossible()
99
100
return false ;
100
101
}
101
102
103
+ void OnClientDisconnect ( ulong clientId )
104
+ {
105
+ if ( clientId != NetworkManager . LocalClientId )
106
+ {
107
+ // If a client disconnects, check for game over in case all other players are already down
108
+ CheckForGameOver ( ) ;
109
+ }
110
+ }
111
+
102
112
public void OnClientSceneChanged ( SceneEvent sceneEvent )
103
113
{
104
114
if ( sceneEvent . SceneEventType != SceneEventType . LoadComplete ) return ;
@@ -226,8 +236,12 @@ void OnLifeStateChangedEventMessage(LifeStateChangedEventMessage message)
226
236
case CharacterTypeEnum . Archer :
227
237
case CharacterTypeEnum . Mage :
228
238
case CharacterTypeEnum . Rogue :
229
- // Every time a player's life state changes we check to see if game is over
230
- OnHeroLifeStateChanged ( message . NewLifeState ) ;
239
+ // Every time a player's life state changes to fainted we check to see if game is over
240
+ if ( message . NewLifeState == LifeState . Fainted )
241
+ {
242
+ CheckForGameOver ( ) ;
243
+ }
244
+
231
245
break ;
232
246
case CharacterTypeEnum . ImpBoss :
233
247
if ( message . NewLifeState == LifeState . Dead )
@@ -240,24 +254,20 @@ void OnLifeStateChangedEventMessage(LifeStateChangedEventMessage message)
240
254
}
241
255
}
242
256
243
- private void OnHeroLifeStateChanged ( LifeState lifeState )
257
+ void CheckForGameOver ( )
244
258
{
245
- // If this Hero is down, check the rest of the party also
246
- if ( lifeState == LifeState . Fainted )
259
+ // Check the life state of all players in the scene
260
+ foreach ( var serverCharacter in PlayerServerCharacter . GetPlayerServerCharacters ( ) )
247
261
{
248
- // Check the life state of all players in the scene
249
- foreach ( var serverCharacter in PlayerServerCharacter . GetPlayerServerCharacters ( ) )
262
+ // if any player is alive just retun
263
+ if ( serverCharacter . NetState && serverCharacter . NetState . LifeState == LifeState . Alive )
250
264
{
251
- // if any player is alive just retun
252
- if ( serverCharacter . NetState && serverCharacter . NetState . LifeState == LifeState . Alive )
253
- {
254
- return ;
255
- }
265
+ return ;
256
266
}
257
-
258
- // If we made it this far, all players are down! switch to post game
259
- StartCoroutine ( CoroGameOver ( k_LoseDelay , false ) ) ;
260
267
}
268
+
269
+ // If we made it this far, all players are down! switch to post game
270
+ StartCoroutine ( CoroGameOver ( k_LoseDelay , false ) ) ;
261
271
}
262
272
263
273
void BossDefeated ( )
0 commit comments