void Update() { if (nextUpdate > Time.time) { return; } nextUpdate = Time.time + 1; willRemove = new List <Callipso.GameSession>(); int c = sessions.Count; for (int i = 0; i < c; i++) { if (sessions[i].isStarted && !sessions[i].killed) { List <Map.CreatureSpawn> cSpawns = MapLoader.maps[sessions[i].map].creatureSpawns; ushort lSpawns = (ushort)cSpawns.Count; for (ushort a = 0; a < lSpawns; a++) { // Spawn creatures if (sessions[i].creatureSpawns[a] < Time.time) { sessions[i].creatureSpawns[a] = Time.time + cSpawns[a].spawnTime; if (sessions[i].creatures.FindAll(x => x.spawner == a).Count < cSpawns [a].spawnCount) { MobileAgent creature = AISpawner.SpawnCreature(cSpawns[a].GetSpawnObject(), sessions[i]); creature.spawner = a; sessions[i].creatures.Add(creature); /* * FIND A NON BLOCKED POSITION * */ bool found = false; for (int s = 0; s < 10; s++) { Vector3 tPos = cSpawns [a].spawnPoint + new Vector3(Random.Range(-cSpawns[a].spawnRange / 2, cSpawns[a].spawnRange / 2), 0, Random.Range(-cSpawns[a].spawnRange / 2, cSpawns[a].spawnRange / 2)); if (tPos.x <= 0 || tPos.x >= MapLoader.maps[sessions[i].map].mapSize || tPos.z <= 0 || tPos.z >= MapLoader.maps[sessions[i].map].mapSize) { continue; } if (MapLoader.isPositionBlocked(sessions[i].map, tPos)) { continue; } creature.transform.position = tPos; found = true; } if (!found) { creature.transform.position = cSpawns[a].spawnPoint; } } } } } if (sessions[i].time < Time.time) { if (sessions[i].killed) { willRemove.Add(sessions[i]); } if (sessions[i].isStarted) { sessions[i].round++; if (sessions[i].round > MapLoader.maps[sessions[i].map].roundCount) { // Game is over sessions[i].Kill(!sessions [i].killed); } else { sessions[i].Start(); } } else { if (sessions[i].agents.Count < MapLoader.maps [sessions[i].map].minPlayers) { sessions[i].time = Time.time + MapLoader.maps[sessions[i].map].lobbyTime; sessions[i].canAddBots = true; } else { sessions[i].Start(); } } } } c = willRemove.Count; for (int i = 0; i < c; i++) { sessions.Remove(willRemove[i]); // Remove the session from list; } c = sessions.Count; for (int i = 0; i < c; i++) { sessions[i].Update(); } }