public int CurrentPlayerPlace() { _opponentCurrentBuoys = new List <Vector3>(); for (int i = 0; i < _opponenents.Count; i++) { OpponentRaceAi ora = _opponenents[i]; Vector3 temp = Vector3.zero; temp.x = ora.targetCounter; temp.y = ora.getDistanceTillNextBuoy(); temp.z = i; _opponentCurrentBuoys.Add(temp); } _opponentCurrentBuoys.Add(new Vector3(_buoyIndicator, _playerBoat.getDistanceTillNextBuoy(), -1)); _opponentCurrentBuoys = _opponentCurrentBuoys.OrderByDescending(x => x.x).ThenBy(x => x.y).ToList(); int place = _opponentCurrentBuoys.IndexOf(_opponentCurrentBuoys.Where(x => x.z == -1).First()) + 1; return(place); }
// Use this for initialization void Start() { GetWeather(); instance = this; _buoys = new List <GameObject>(); MainGameController.instance.canGoBack = false; _currentTrack = MainGameController.instance.databaseController.connection.Table <Track>().Where(x => x.id == _currentRace.TrackId).First(); DrawTrack(_currentTrack); //_waypointsPanel.transform.localPosition = -(Vector3.Lerp(_currentTrack.GetWaypoints()[0], _currentTrack.GetWaypoints()[1], 0.5f) - new Vector3(0, 500, 0)); _buoyIndicator = 0; List <Person> _avaliablePersons = MainGameController.instance.databaseController.connection.Table <Person>().Where(x => x.LocationId == _currentRace.LocationId && x.BoatId == _currentRace.BoatsUsedId && x.OpponentSetupId != -1 ).ToList(); int playerPosition = Random.Range(0, _avaliablePersons.Count); for (int i = 0; i < _avaliablePersons.Count + 1; i++) { if (i != playerPosition) { int newi = i; if (i > playerPosition) { newi -= 1; } Person p = _avaliablePersons[newi]; GameObject opponent = GameObject.Instantiate(_opponentPrefab); opponent.name = "Opponent " + p.Name; opponent.transform.SetParent(_opponentsParent.transform); opponent.transform.localScale = Vector3.one; opponent.transform.localPosition = Vector3.zero; OpponentRaceAi ora = opponent.GetComponentInChildren <OpponentRaceAi>(); Boat b = MainGameController.instance.databaseController.connection.Table <Boat>().Where(x => x.id == p.BoatId).First(); ora.gameObject.transform.position = _buoys[0].transform.position + new Vector3((i + 2) * opponent.GetComponent <RectTransform>().sizeDelta.x * 1.5f, -500); OpponentSetup os = MainGameController.instance.databaseController.connection.Table <OpponentSetup>().Where(x => x.id == p.OpponentSetupId).First(); ora.SetOpponentValues(p, os.TackingAccuracy, os.TackingExtra, os.TackingSpeed, b.GetNGZLimit(), os.BestUpwindAngle); _opponenents.Add(ora); _minmapController.AddOpponent(opponent); } else { Vector3 pos = -(_currentTrack.GetWaypoints()[0] + new Vector2((i + 2) * _playerBoat.GetComponent <RectTransform>().sizeDelta.x * 1.5f, -500)); _waypointsPanel.transform.localPosition = pos; } } WaypointBuoy newBuoy = _buoys[_currentTrack.GetWaypointOrder()[_buoyIndicator]].GetComponent <WaypointBuoy>(); if (newBuoy.transform.position.y > _playerBoat.transform.position.y) { _playerBoat.target = newBuoy.upwindTarget; } else { _playerBoat.target = newBuoy.downwindTarget; } _playerTargetBuoy = _playerBoat.target; if (_windSpeed > _playerBoat.GetMaxWindSpeedSails()) { StartCoroutine(_playerBoat.ReceiveDamage()); } foreach (OpponentRaceAi ora in _opponenents) { ora.SetFinishTarget(_finishedRaceTarget); ora.buoys = _buoys; ora.trackOrder = _currentTrack.GetWaypointOrder(); if (newBuoy.transform.position.y > ora.transform.position.y) { ora.target = newBuoy.upwindTarget; } else { ora.target = newBuoy.downwindTarget; } } //Vector3 euler = Vector3.zero; //euler.z = _windAngle; //_waypointsPanel.transform.localEulerAngles = euler; _minmapController.DrawTrack(_currentTrack); StartCoroutine(CountDown(5)); #if UNITY_EDITOR //GetWayPointsTemp(); #endif }
public void AwardPoints() { if (_finishOrder.Count != _opponentCurrentBuoys.Count) { for (int i = _finishOrder.Count; i < _opponentCurrentBuoys.Count; i++) { _finishOrder.Add(_opponenents[(int)_opponentCurrentBuoys[i].z]); } } for (int i = 0; i < _finishOrder.Count; i++) { float points = i + 1; if (i == 0) { points = 0.9f; } if (_finishOrder[i].GetType() == typeof(OpponentRaceAi)) { OpponentRaceAi ora = (OpponentRaceAi)_finishOrder[i]; BoatRanking br = MainGameController.instance.databaseController.connection.Table <BoatRanking>().Where(x => x.PersonId == ora.person.id && x.BoatId == ora.person.BoatId).FirstOrDefault(); if (br == null) { br = new BoatRanking(); br.id = MainGameController.instance.databaseController.connection.Table <BoatRanking>().Count() + 1; br.BoatId = ora.person.BoatId; br.PersonId = ora.person.id; br.New(); } br.RacesSailed++; ora.person.RacesSailed++; if (points == 0.9f) { br.RacesWon++; ora.person.RacesWon++; } br.Points += points; ora.person.LifetimePoints += points; br.Save(); ora.person.Save(); } else { MainGameController.instance.achievementManager.AddAchievementProperty(AchievementProperties.Races, 1); Player player = MainGameController.instance.player; Person person = MainGameController.instance.databaseController.connection.Table <Person>().Where(x => x.Name.Equals(player.Name)).First(); Boat b = player.GetActiveBoat(); BoatRanking br = MainGameController.instance.databaseController.connection.Table <BoatRanking>().Where(x => x.PersonId == player.id && x.BoatId == b.id).FirstOrDefault(); if (br == null) { br = new BoatRanking(); br.id = MainGameController.instance.databaseController.connection.Table <BoatRanking>().Count() + 1; Debug.Log(br.id); br.PersonId = player.id; br.BoatId = player.GetActiveBoat().id; br.New(); } br.RacesSailed++; person.RacesSailed++; if (points == 0.9f) { MainGameController.instance.achievementManager.AddAchievementProperty(AchievementProperties.RacesWon, 1); RequestManager.UpdateRequest(MainGameController.instance.player.GetActiveBoat(), _currentRace); person.RacesWon++; br.RacesWon++; } player.AddExperience(ExperienceController.ExperiencePerRacePlace * ((_opponenents.Count - i + 2))); br.Points += points; person.LifetimePoints += points; br.Save(); person.Save(); } } _pointsAwarded = true; }
public void OpponentFinished(OpponentRaceAi opponent) { _finishOrder.Add(opponent); }