public GameObject SpawnCar(GameObject car, TeamController.Team team, bool wasDemolished = false) { var spawnLocation = GetSpawnPosition(car, team, wasDemolished); car.transform.position = spawnLocation.position; car.transform.rotation = spawnLocation.rotation; return(car); }
private Transform GetSpawnPosition(GameObject car, TeamController.Team team, bool wasDemolished) { Transform spawnPositions; if (team == TeamController.Team.ORANGE) { spawnPositions = wasDemolished ? _orangeRespawnPositions : _orangeSpawnPositions; } else { spawnPositions = wasDemolished ? _blueRespawnPositions : _blueSpawnPositions; } var childNum = spawnPositions.childCount; var idx = Random.Range(0, childNum - 1); for (var i = 0; i < childNum; i++) { idx = (idx + 1) % childNum; var spawnPosition = spawnPositions.GetChild(idx); if (_spawnPositionUsage.ContainsKey(spawnPosition)) { if (_spawnPositionUsage[spawnPosition] == car || (_spawnPositionUsage[spawnPosition].transform.position - spawnPosition.transform.position).magnitude > 0.1) { _spawnPositionUsage[spawnPosition] = car; return(spawnPosition); } } else { _spawnPositionUsage.Add(spawnPosition, car); return(spawnPosition); } } // this code should never be reached but it is here as a safety net return(team == 0 ? _orangeFallBackSpawnPosition : _blueFallBackSpawnPosition); }