示例#1
0
    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);
    }
示例#2
0
// 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
    }
示例#3
0
    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;
    }
示例#4
0
 public void OpponentFinished(OpponentRaceAi opponent)
 {
     _finishOrder.Add(opponent);
 }