예제 #1
0
 static public void Win()
 {
     instance.FreePools();
     Highscore.instance.AddScore(Mathf.FloorToInt(Time.timeSinceLevelLoad));
     instance.WinScreen.gameObject.SetActive(true);
     instance.Invoke("LoadMenu", 5f);
 }
예제 #2
0
 private void OnWin()
 {
     if (WinEvent != null)
     {
         WinEvent.Invoke();
     }
 }
예제 #3
0
    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Respawn"))
        {
            if (restartInProgress || playerWon)
            {
                return;
            }

            PlayerLostEvent?.Invoke();
            restartInProgress = true;
            Invoke(nameof(RestartTimer), 3.0f);
        }
        else if (other.gameObject.CompareTag("Finish"))
        {
            if (restartInProgress)
            {
                return;
            }

            WinEvent?.Invoke();
            playerWon = true;
            movementScript.enabled = false;
        }
    }
예제 #4
0
 public void Win()
 {
     WinEvent?.Invoke();
     this.enabled          = false;
     GetHead().enabled     = false;
     GetMovement().enabled = false;
     handler.Disable(true, false);
 }
예제 #5
0
    //EnemyCheck is used to detect other players when flipping,
    //called from the PlayerMovement script
    public void EnemyCheck(Vector2 pos)
    {
        Vector2 size = transform.lossyScale * triggerBox.size;

        Collider2D intersecting = Physics2D.OverlapBox(pos, size, 0.0f, LayerMask.GetMask("Players"), -1.0f, 1.0f);

        if (intersecting != null)
        {
            Debug.Log("ObjName = " + intersecting.gameObject.name);
            Destroy(intersecting.gameObject);
            endTheGame.Invoke(playerConfig);
        }
    }
예제 #6
0
    private bool WinChecker()
    {
        var roasts = Controller.Cooker.FryingBorger.Roast;

        foreach (var roast in roasts)
        {
            if (roast > CurrentRecipe.MaxFry || roast < CurrentRecipe.MinFry)
            {
                return(false);
            }
        }

        WinEvent?.Invoke();
        return(true);
    }
예제 #7
0
 // Update is called once per frame
 void Update()
 {
     if (!GameIsFinished)
     {
         if (WinTimer > WinTimeElapsed)
         {
             WinTimeElapsed += Time.deltaTime;
         }
         else
         {
             // Win!
             WinTimeElapsed = 0.0f;
             GameIsFinished = true;
             OnWin?.Invoke();
         }
     }
 }
예제 #8
0
파일: Dice.cs 프로젝트: jadenguy/MonSystem
 private void OnWin(Dice dice, string ret)
 {
     WinEvent?.Invoke(this, ret);
 }
예제 #9
0
파일: Shield.cs 프로젝트: Lookichev/Tech
        /// <summary>
        /// Ход пиратов
        /// </summary>
        /// <returns>Новое положение пиратов</returns>
        public Position PirateGo()
        {
            //Если : пираты уже на границе поля - поражение
            if (_PirateLocation[0] == 0 || _PirateLocation[0] == 21 || _PirateLocation[1] == 0 || _PirateLocation[1] == 15)
            {
                LoseEvent.Invoke(this, new EventArgs());
                return(null);
            }

            //Рейтинг выбора движения для пиратов
            //[0] - северо-запад
            //[1] - северо-восток
            //[2] - юго-восток
            //[3] - юго-запад
            var rating = new int[] { 10000, 10000, 10000, 10000 };

            //Определение разрешенных направлений
            for (var i = 0; i < 4; i++)
            {
                var address = GetNewPosition(_PirateLocation, (Direction)i);
                //Если : путь кораблю в соответствующем направлении закрыт - туда не ходим
                if (_Plane[address[0]][address[1]].Status == StatusPoint.Mine)
                {
                    rating[i] = -10000;
                }
            }

            //Проверка зажат-ли кораблик минами
            if (rating[0] == -10000 && rating[1] == -10000 && rating[2] == -10000 && rating[3] == -10000)
            {
                WinEvent.Invoke(this, new EventArgs());
                return(null);
            }


            #region Определение рейтинга ближайшего пути:

            //Каждая сторона света убавляет рейтинга по дальности до границы напрямую
            rating[0] -= _BalanceCurse * (_PirateLocation[1]); rating[1] -= _BalanceCurse * (_PirateLocation[1]);
            rating[1] -= _BalanceCurse * (21 - _PirateLocation[0]); rating[2] -= _BalanceCurse * (21 - _PirateLocation[0]);
            rating[2] -= _BalanceCurse * (15 - _PirateLocation[1]); rating[3] -= _BalanceCurse * (15 - _PirateLocation[1]);
            rating[3] -= _BalanceCurse * (_PirateLocation[0]); rating[0] -= _BalanceCurse * (_PirateLocation[0]);

            #endregion

            #region  Определение рейтинга опасности:

            //Каждая мина на прямой и по сторонам от главного курса уменьшает рейтинг пути
            for (var i = 0; i < 4; i++)
            {
                var   tick    = 0;
                int[] address = _PirateLocation;
                int[] temp    = null;

                //Ведем подсчет, пока не достигнем конца курса
                while (true)
                {
                    //Получаем первое смещение по курсу
                    address = GetNewPosition(address, (Direction)i);

                    //Если : уперлись в границу карты - выход
                    if (address == null)
                    {
                        break;
                    }

                    //Каждая мина изменяет рейтинг пути
                    if (_Plane[address[0]][address[1]].Status == StatusPoint.Mine)
                    {
                        tick++;
                    }

                    //Учитываем мину при повороте курса против часовой стрелки
                    temp = GetNewPosition(address, RollCourse(i - 1));
                    if (temp != null && _Plane[temp[0]][temp[1]].Status == StatusPoint.Mine)
                    {
                        tick++;
                    }
                    //Учитываем мину при повороте курса по часовой стрелке
                    temp = GetNewPosition(address, RollCourse(i + 1));
                    if (temp != null && _Plane[temp[0]][temp[1]].Status == StatusPoint.Mine)
                    {
                        tick++;
                    }
                }

                rating[i] -= _BalanceMines * tick;
            }

            #endregion

            #region Определение рейтинга вариативности:

            //Кол-во вариантов выбора пути после совершения хода
            for (var i = 0; i < 4; i++)
            {
                var   tick    = 0;
                var   address = GetNewPosition(_PirateLocation, (Direction)i);
                int[] temp    = null;

                for (var j = 0; j < 4; j++)
                {
                    temp = GetNewPosition(address, (Direction)j);
                    if (temp != null && _Plane[temp[0]][temp[1]].Status == StatusPoint.Mine)
                    {
                        tick++;
                    }
                }

                rating[i] -= _BalanceVariables * tick;
            }

            #endregion

            var dic = new Dictionary <int, int>(4);
            for (var i = 0; i < 4; i++)
            {
                dic.Add(i, rating[i]);
            }

            //Смена локации корабля
            _Plane[_PirateLocation[0]][_PirateLocation[1]].Status = StatusPoint.Empty;

            _PirateLocation = GetNewPosition(_PirateLocation, (Direction)GetTopCurse(dic, GetTopCurse(dic, 0, 1), GetTopCurse(dic, 2, 3)));

            _Plane[_PirateLocation[0]][_PirateLocation[1]].Status = StatusPoint.Ship;
            return(_Plane[_PirateLocation[0]][_PirateLocation[1]]);
        }