in UnityProject/Assets/Scripts/Client/Client.cs [118:183]
void ProcessMessages()
{
List<int> justLeftClients = new List<int>();
List<int> clientsMoved = new List<int>();
// Go through any messages to process
foreach (SimpleMessage msg in messagesToProcess)
{
// Own position
if(msg.messageType == MessageType.PositionOwn)
{
this.localPlayer.ReceivePosition(msg, this.characterPrefab);
}
// players spawn and position messages
else if (msg.messageType == MessageType.Spawn || msg.messageType == MessageType.Position || msg.messageType == MessageType.PlayerLeft)
{
if (msg.messageType == MessageType.Spawn && this.EnemyPlayerExists(msg.clientId) == false)
{
Debug.Log("Enemy spawned: " + msg.float1 + "," + msg.float2 + "," + msg.float3 + " ID: " + msg.clientId);
NetworkPlayer enemyPlayer = new NetworkPlayer(msg.clientId);
this.enemyPlayers.Add(enemyPlayer);
enemyPlayer.Spawn(msg, this.enemyPrefab);
}
else if (msg.messageType == MessageType.Position && justLeftClients.Contains(msg.clientId) == false)
{
Debug.Log("Enemy pos received: " + msg.float1 + "," + msg.float2 + "," + msg.float3);
//Setup enemycharacter if not done yet
if (this.EnemyPlayerExists(msg.clientId) == false)
{
Debug.Log("Creating new with ID: " + msg.clientId);
NetworkPlayer newPlayer = new NetworkPlayer(msg.clientId);
this.enemyPlayers.Add(newPlayer);
newPlayer.Spawn(msg, this.enemyPrefab);
}
// We pass the prefab with the position message as it might be the enemy is not spawned yet
NetworkPlayer enemyPlayer = this.GetEnemyPlayer(msg.clientId);
enemyPlayer.ReceivePosition(msg, this.enemyPrefab);
clientsMoved.Add(msg.clientId);
}
else if(msg.messageType == MessageType.PlayerLeft)
{
Debug.Log("Player left " + msg.clientId);
// A player left, remove from list and delete gameobject
NetworkPlayer enemyPlayer = this.GetEnemyPlayer(msg.clientId);
if(enemyPlayer != null)
{
Debug.Log("Found enemy player");
enemyPlayer.DeleteGameObject();
this.enemyPlayers.Remove(enemyPlayer);
justLeftClients.Add(msg.clientId);
}
}
}
}
messagesToProcess.Clear();
// Interpolate all enemy players towards their current target
foreach (var enemyPlayer in this.enemyPlayers)
{
enemyPlayer.InterpolateToTarget();
}
// Interpolate player towards his/her current target
this.localPlayer.InterpolateToTarget();
}