Пример #1
0
        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);
        }
Пример #2
0
        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);
        }