// CalculateConvergence: Calculates the rule's convergence fitness internal void CollectDisplacement(Vector3[] sendList) { int tries = 0; while (tries < 3) { int count = 0; UDPSend.SendData(UDPSend.EncodeMessage(sendList)); UDPReceive.MessageReceived = false; while (UDPReceive.MessageReceived == false && count < 3) { Thread.Sleep(70); count++; } if (UDPReceive.MessageReceived == true) { displacement = UDPReceive.maxDisplacement; break; } tries++; if (tries == 3) { Debug.Log("Action Lost"); } } }
void foo() { Vector3 winnerVector = new Vector3(); List <float> disps = new List <float>(); for (int i = 0; i < 30; i++) { int tries = 0; var randomAgent = listAgents[UnityEngine.Random.Range(0, listAgents.Length - 1)]; var v = randomAgent.Cell.GetFaceNeighbours().Where(x => x.Alive == false).ToArray()[0].Center; Vector3[] N = new Vector3[] { v }; while (tries < 3) { int count = 0; UDPSend.SendData(UDPSend.EncodeMessage(listAgents.Select(a => a.Cell.Center).Union(N).ToArray())); UDPReceive.MessageReceived = false; while (UDPReceive.MessageReceived == false && count < 3) { Thread.Sleep(40); count++; } if (UDPReceive.MessageReceived == true) { print("Count: " + count + ", Tries: " + tries); print("_" + UDPReceive.maxDisplacement.ToString("F10")); disps.Add(UDPReceive.maxDisplacement); if (disps.Min() >= UDPReceive.maxDisplacement) { winnerVector = v; } break; } tries++; } } print("Winner: " + winnerVector + "," + disps.Min().ToString("F10")); Instantiate(agentPrefab, winnerVector, Quaternion.identity); }