Ejemplo n.º 1
0
    // █ создаёт, визуальную модель используя предведущие функции, инициализируют её... Часть логики устрала, так как одиночной игры уже нет
    public int createVisualBall(bool additional = false)
    {
        Ball newBall;

        if (main.gameMode == GameMode.SERVER)
        {
            JsonHandler.BallJSON ball = !additional?main.handlerServerData.getBall() : main.handlerServerData.getLastAdditionalBall();

            if (!takeAwayLottotronBallByNum(ball.N))
            {
                Errors.showTest("Error! [createNewBall] ball #" + ball.N + " already taken from lottotron!");
                return(-1);
            }
            newBall = getNewBall(ball.N);
            countBalls++;
            main.raffle.onBornNewBall(newBall, ball);
            //print(countBalls == main.maxCountTrayedFreeBalls);

            /*if (countBalls == main.maxCountTrayedFreeBalls)
             *  if (!main.handlerServerData.isAvailableNextBall)
             *      main.raffle.onFinishRaffle();*/
        }
        else
        {
            newBall = getNewBall();
            main.raffle.onBornNewBall(newBall);
        }
        newBall.gameObject.name = "Ball";
        main.timeLastFilingBall = Time.time;
        if (spawnPoint != null)
        {
            newBall.transform.position = spawnPoint.position;
        }
        Rigidbody2D rb         = newBall.GetComponent <Rigidbody2D> ();
        float       startSpeed = -1.1f / main.timeDelayFilingBalls;

        if (additional)
        {
            bool isFake = Random.Range(0, 10) <= 3; // этот коэфициент влияет на скорость вылета шара, этот параметр влияет только на стартовую скорость шара, по дизайну есть 30% вероятность того что это будет фиктивное замедление стартовой скорости.
            if (isFake || this.isWinBall(newBall.jsonBallInfo))
            {
                startSpeed     *= 0.1f;
                rb.gravityScale = 0.2f;
            }
        }
        int v = startSpeed < 0 ? -1 : 1;

        if (startSpeed * v < main.minSpeedBallsBeforBornStarts)
        {
            startSpeed = main.minSpeedBallsBeforBornStarts * v;
        }
        //print("startSpeed:" + startSpeed);
        rb.velocity = new Vector2(0.0f, startSpeed);
        newBall.tag = "ReceivingTrayBall";
        return(newBall.number);
    }
Ejemplo n.º 2
0
    // (не используется) проверяет на наличие застряхших шаров.
    //public bool isHasStuckedBalls(){ return movedBalls.childCount > 0; }
    // (не используется) останавливает все застрявшие шары.

    /*public bool stopAllStuckedBalls() {
     *  //Errors.show("[stopAllStuckedBalls]");
     *  bool res = false;
     *  for (int i = 0; i < movedBalls.childCount; i++) {
     *      main.raffle.onNewBallStop(movedBalls.GetChild(i).gameObject.GetComponent<Ball>());
     *      res = true;
     *  }
     *  //setBallToStopingBalls(movedBalls.GetChild(i).gameObject );
     *  return res;
     * }*/
    bool isWinBall(JsonHandler.BallJSON ball) // несёт ли в себе шар выиграш
    {
        if (ball.T != null)
        {
            for (int i = 0; i < ball.T.Length; i++)
            {
                if (ball.T[i].W != null && ball.T[i].W.Length > 0)
                {
                    return(true);
                }
            }
        }
        return(false);
    }
Ejemplo n.º 3
0
    // █ изъять шар из барабана(полагаясь на заранее установленный список шаров, в предведущей функции). Не допускает возможным изымать дважды шар с одним и тем же номером, но в случае попытки выдаёт ошибку в тестовом режиме, приведёт к сбою работы розыгрыша.
    public int takeAwayLottotronBall()
    {
        int numBall;

        if (main.gameMode == GameMode.SERVER)
        {
            if (main.isWaitingReplyAboutBallsFromServer)
            {
                //Errors.show("Error![takeAwayLottotronBall] request for new Ball Already sended")
                return(-1);
            }

            JsonHandler.BallJSON newBall = null;
            if (countBalls < main.maxCountTrayedFreeBalls)
            {
                newBall = main.handlerServerData.getBall(countBalls);
            }

            if (newBall != null)
            {
                takeAwayLottotronBallByNum(newBall.N);
            }
            else
            {
                Errors.showTest("Error! [takeAwayLottotronBall] newBall == null");
            }
        }
        else if (main.gameMode == GameMode.JSON_FILE)
        {
            if (countBalls < main.maxCountTrayedFreeBalls)
            {
                numBall = main.jsonHandler.getNumberBall(countBalls);
                takeAwayLottotronBallByNum(numBall);
            }
            else
            {
                numBall = takeAwayLottotronBall(Random.Range(0, currentCountLottotronBalls - 1));
            }
            countBalls++;
            return(numBall);
        }
        countBalls++;
        return(takeAwayLottotronBall(Random.Range(0, currentCountLottotronBalls - 1)));
    }
Ejemplo n.º 4
0
 // Ниже две функции: при появлении нового шара в лотке
 public void onBornNewBall(Ball newBall, JsonHandler.BallJSON jsonBall)
 {
     newBall.jsonBallInfo = jsonBall;
     onBornNewBall(newBall);
 }
Ejemplo n.º 5
0
 // При получении от сервера дополнительного шара
 public void onReceiveAdditionalBall(JsonHandler.BallJSON additionalBall)
 {
     setState(RaffleState.ADDITIONAL_BALL);
     main.receivingTray.buyBall();
 }