Esempio n. 1
0
    public void SetType(BALL_TYPE type)
    {
        foreach (var go in colorsGO)
        {
            go.SetActive(false);
        }

        this.type = type;

        if (type == BALL_TYPE.NONE)
        {
            return;
        }

        colorsGO [(int)type].SetActive(true);
    }
Esempio n. 2
0
    private static int nth_in_game(int n, Frame frame, BALL_TYPE full_half)
    {
        int i;

        for (i = 0; i < 16 && n >= 0; i++)
        {
            if (full_half == BALL_TYPE.BALL_FULL && frame.Balls[i].nr < 8 && frame.Balls[i].nr > 0)
            {
                n--;
            }
            if (full_half == BALL_TYPE.BALL_HALF && frame.Balls[i].nr > 8)
            {
                n--;
            }
            if (full_half == BALL_TYPE.BALL_ANY && (frame.Balls[i].nr > 8 || (frame.Balls[i].nr < 8 && frame.Balls[i].nr > 0)))
            {
                n--;
            }
        }
        return(i);
    }
Esempio n. 3
0
    public static Vector3 ai_get_stroke_dir_8ball(Frame frame)
    {
        BALL_TYPE full_half = Player.ball_type;
        Vector3   r_hit;
        float     angle;
        float     minangle = Mathf.PI;
        float     minangle_beta = Mathf.PI;
        Ball      bhit, bcue;
        Hole      hole;
        int       minball = 0, minball_beta = 0;
        int       minhole = -1, minhole_beta = -1;
        int       i, j;
        Vector3   ai_err = Vector3.zero;

        if (ai_level == AI_LEVEL.LOW_LEVEL)
        {
            ai_err = Maths.vec_unit(new Vector3(Random.Range(-1.0f, 1.0f), 0, Random.Range(-1.0f, 1.0f))) * Constant.HOLE1_R * 1.5f;
            //ai_err=Maths.vec_unit (new Vector3(1.0f,0,-1.0f))*Constant.HOLE1_R*1.5f;
        }
        else if (ai_level == AI_LEVEL.MEDIUM_LEVEL)
        {
            ai_err = Maths.vec_unit(new Vector3(Random.Range(-1.0f, 1.0f), 0, Random.Range(-1.0f, 1.0f))) * Constant.HOLE1_R * 1.0f;
        }
        bcue = new Ball(frame.Balls[0]);
        for (i = 1; i < 16; i++)
        {
            if (frame.Balls[i].in_game)
            {
                if ((full_half == BALL_TYPE.BALL_HALF && frame.Balls[i].nr > 8) ||
                    (full_half == BALL_TYPE.BALL_FULL && frame.Balls[i].nr < 8) ||
                    (full_half == BALL_TYPE.BALL_ANY && frame.Balls[i].nr != 8) ||
                    (frame.Balls[i].nr == 8 && frame.Balls_in_game(full_half) == 0))
                {
                    bhit = new Ball(frame.Balls[i]);
                    for (j = 0; j < Holes.GetHoleNum(Holes.BORDERS_8GAME); j++)
                    {
                        hole  = Holes.GetHole(Holes.BORDERS_8GAME, j);
                        r_hit = Maths.vec_unit(bhit.r - hole.aim) * (bcue.d + bhit.d) / 2.0f;
                        r_hit = bhit.r + r_hit;
                        if (!ball_in_way(0, r_hit, frame) && !ball_in_way(i, hole.aim, frame))
                        {
                            angle = Mathf.Abs(Maths.vec_angle(r_hit - bcue.r, hole.aim - r_hit));
                            if (angle < minangle)
                            {
                                minball  = i;
                                minhole  = j;
                                minangle = angle;
                            }
                        }
                        else if (!ball_in_way(0, r_hit, frame))
                        {
                            angle = Mathf.Abs(Maths.vec_angle(r_hit - bcue.r, hole.aim - r_hit));
                            if (angle < minangle_beta)
                            {
                                minball_beta  = i;
                                minhole_beta  = j;
                                minangle_beta = angle;
                            }
                        }
                    }
                }
            }
        }

        if (minball == 0)          /* no proper ball found */
        {
            minball  = minball_beta;
            minhole  = minhole_beta;
            minangle = minangle_beta;

            /*	switch(full_half) {
             *      case BALL_TYPE.BALL_FULL:
             *              if( BallEvents.BM_get_balls_out_full()!=7 ){
             *                      minball=1+my_rand(7-BallEvents.BM_get_balls_out_full());
             *              }
             *              break;
             *      case BALL_TYPE.BALL_HALF:
             *              if( BallEvents.BM_get_balls_out_half()!=7 ){
             *                      minball=1+my_rand(7-BallEvents.BM_get_balls_out_half());
             *              }
             *              break;
             *      case BALL_TYPE.BALL_ANY:
             *              if( BallEvents.BM_get_balls_out_total()!=15 ){
             *                      minball=1+my_rand(15-BallEvents.BM_get_balls_out_total());
             *              }
             *              break;
             *      }
             *      if( minball==0 ){
             *              minball = ind_ball_nr(8,frame);
             *      } else {
             *              minball = nth_in_game(minball,frame,full_half);
             *      }*/
        }

        bhit = frame.Balls[minball];
        if (minhole != -1)
        {
            hole  = Holes.GetHole(Holes.BORDERS_8GAME, minhole);
            r_hit = Maths.vec_unit(bhit.r - hole.aim + ai_err * Maths.vec_abs(hole.aim - bhit.r) / 10.0f) * (bcue.d + bhit.d) / 2.0f;
            r_hit = bhit.r + r_hit - bcue.r;
        }
        else              /* no proper ball found */
        {
            r_hit   = bhit.r - bcue.r;
            minhole = Random.Range(0, 6);
        }
        GamePlayUI.instance.SetAIPocket(minhole);
        return(Maths.vec_unit(r_hit));
    }