示例#1
0
    void GetPrefFromBackBall()                                        //налаштування, які необхідно зробити з новою кулею, якщо вона вбудовуються в ряд
    {
        RespIndex = collBallSb.RespIndex;

        if (BackBall != null)
        {
            BallBehaviour BackBallSb = BackBall.GetComponent <BallBehaviour>();
            Speed          = BackBallSb.Speed;
            destPointIndex = SetFirstDestPointIndex(BackBallSb);
            //Debug.Log("i_2=" + destPointIndex);
        }
        else                                                        //якщо куля стає останньою в послідовності
        {
            destPointIndex = SetFirstDestPointIndex(collBallSb);
            Speed          = collBallSb.Speed;
            // IsLastBallInResp = true;

            /* if (collBallSb.IsLocalLastBall)                         //якщо куля перед нею була позначена як остання в послідовності і нерухома
             * {
             *   collBallSb.IsLocalLastBall = false;
             *   IsLocalLastBall = true;
             * }*/
        }
        BaseSpeed = collBallSb.BaseSpeed;
    }
示例#2
0
    override internal void PlayerCheckToDestroy()
    {
        List <GameObject> destroyList = new List <GameObject>();

        destroyList = BallController.GetBalls(RespIndex);
        destroyList.Add(gameObject);
        //Debug.Log("0_destroyList.count=" + destroyList.Count);
        BallController.lastForwardBallIndex = 0;

        if (FrontBall != null)
        {
            FrontBall.GetComponent <BallBehaviour>().CheckToDestroy(true, this);
        }
        else
        {
            BallController.readyToDestroy = true;       //якщо передніх куль немає (і їх не потрібно зсувати) - то розблокувати процес знищення куль
        }
        if (BackBall != null)
        {
            BackBall.GetComponent <BallBehaviour>().CheckToDestroy(false, this);
        }
        else
        {
            BallController.readyToDestroy = true;       //якщо задніх куль не має і зсуву передніх робити також не потрібно - то розблокувати процес знищення куль
        }
    }
    void FixedUpdate()
    {
        //ДЕБАГ
        if (BackBall != null)
        {
            backType = BackBall.GetComponent <SphereBehaviour>().TypeSphere;
        }
        else
        {
            backType = TypesSphere.EMPTY;
        }

        if (FrontBall != null)
        {
            forwardType = FrontBall.GetComponent <SphereBehaviour>().TypeSphere;
        }
        else
        {
            forwardType = TypesSphere.EMPTY;
        }
        if (FrontBall != null && BackBall != null)
        {
            if (FrontBall == BackBall)
            {
                Debug.LogError("FrontBall == BackBall: " + FrontBall.GetComponent <SphereBehaviour>().TypeSphere);
                Destroy(gameObject);
            }
        }
        //ДЕБАГ

        Muving();
    }
示例#4
0
    /* void OnDestroy()
     * {
     *   Debug.Log("OnDestroy()");
     *   if (FrontBall != null)
     *   {
     *       FrontBall.GetComponent<BallBehaviour>().IsLocalLastBall = true;
     *       Debug.Log("OnDestroy() FRONT="+FrontBall.GetComponent<BallBehaviour>().TypeSphere);
     *   }
     * }*/

    virtual internal void PlayerCheckToDestroy()
    {
        List <GameObject> destroyList = new List <GameObject>();

        destroyList = BallController.GetBalls(RespIndex);
        destroyList.Clear();
        destroyList.Add(gameObject);

        if (FrontBall != null)
        {
            FrontBall.GetComponent <BallBehaviour>().CheckToDestroy(true, this);
        }

        if (BackBall != null)
        {
            if (BackBall.tag != "newBall" && BackBall.GetComponent <BallBehaviour>().CheckToDestroy(false, this))
            {
                BallController.readyToDestroy = true;
            }
            else
            {
                destroyList.Clear();
            }
        }
        else
        {
            destroyList.Clear();
        }

        //BallController.blockPlayer = false;
    }
示例#5
0
    internal bool CheckToDestroy(bool isForward, SphereBehaviour sb)                                                                    //виклик по ланцюгу перевірки на один колір
    {
        if ((sb.TypeSphere != TypeSphere && sb.TypeSphere != TypesSphere.MULCOLOR && TypeSphere != TypesSphere.MULCOLOR) || Health > 0) //перервати виконання, в разі якщо кулі не однакові
        {
            // Debug.Log("3 sb.TypeSphere != TypesSphere.MULCOLOR = " + sb.TypeSphere);
            return(false);
        }

        //Debug.Log("Add. forward="+ isForward +" Type="+TypeSphere);
        BallController.GetBalls(RespIndex).Add(gameObject);
        //Debug.Log("1_destroyList.count=" + BallController.GetBalls(RespIndex).Count);

        if (isForward)
        {
            if (FrontBall != null)
            {
                BallController.lastForwardBallIndex++;
                FrontBall.GetComponent <BallBehaviour>().CheckToDestroy(true, this);
            }
        }
        else if (BackBall != null)
        {
            BackBall.GetComponent <BallBehaviour>().CheckToDestroy(false, this);
        }

        return(true);
    }
示例#6
0
    public void MoveReversBackwardBall()                    //Рухатись назад, кулям які позаду. Не використовую
    {
        //Debug.Log("MoveReversBackwardBall: " + TypeSphere);

        Move(5.0f, -1);

        if (BackBall != null)
        {
            BackBall.GetComponent <BallBehaviour>().MoveReversBackwardBall();
        }
    }
示例#7
0
    public int powerMulticolorSkill;                //встановити при виклику з геймконтрола

    override internal void PlayerCheckToDestroy()
    {
        Debug.Log("BallMulticolor Type=" + TypeSphere);

        List <GameObject> destroyList = new List <GameObject>();

        destroyList = BallController.GetBalls(RespIndex);

        //Debug.Log("powerMulticolorSkill="+powerMulticolorSkill);

        if (powerMulticolorSkill < 1)
        {
            destroyList.Add(gameObject);
        }
        else
        {
            destroyList.Add(null);
        }

        powerMulticolorSkill--;
        BallController.lastForwardBallIndex = 0;

        if (FrontBall != null)
        {
            FrontBall.GetComponent <BallBehaviour>().CheckToDestroy(true, this);
        }
        else
        {
            BallController.readyToDestroy = true;       //якщо передніх куль немає (і їх не потрібно зсувати) - то розблокувати процес знищення куль
        }
        if (BackBall != null)
        {
            BackBall.GetComponent <BallBehaviour>().CheckToDestroy(false, this);
        }
        else
        {
            BallController.readyToDestroy = true;       //якщо задніх куль не має і зсуву передніх робити також не потрібно - то розблокувати процес знищення куль
        }
    }
示例#8
0
    public override void CollisionOfBalls(GameObject collBall)
    {
        if (collBall.tag != "ball")                      //Тільки при ударі в кулю
        {
            return;
        }

        if (isCollidet)
        {
            base.CollisionOfBalls(collBall);           //Якщо зіткнення вже відбувалось, то опрацьовувати як звичайну кулю
            return;
        }

        isCollidet = true;                             //Помітити що зіткнення відбулось, та викликати базову реалізацію

        angle = Mathf.Atan2((transform.position.y - collBall.transform.position.y), (transform.position.x - collBall.transform.position.x));
        if (angle < 0)
        {
            angle += TPi;
        }

        GameObject collidetBall = collBall;

        collBallSb = collidetBall.GetComponent <BallBehaviour>();


        // isTryClockwise = PathAngle(collBall) < 90? true: false;
        // Debug.Log(PathAngle(collBall));

        //Три основні варіанти зіткнення - з заходом в перед кулі, в зад кулі та в перед кулі але з перенаправленням на задню кулю (для обрахунку більшості ударів одноманітним чином - з закотом проти часової стрілки)
        if (PathAngle(collBall) >= 90)                          //1. Удар в передню частину кулі
        {
            BackBall   = collBall;
            collBallSb = BackBall.GetComponent <BallBehaviour>();

            if (collBallSb.FrontBall != null)
            {
                FrontBall = collBallSb.FrontBall;               //призначити передню кулю, якщо вона є
                FrontBall.GetComponent <BallBehaviour>().BackBall = gameObject;
            }
            collBallSb.FrontBall = gameObject;                  //призначити поточну кулю як нову передню для задньої
        }
        else if (collBallSb.BackBall != null)                   //2. Псевдо удар в задню частину кулі, який рахується як удар в передню частину задньої кулі
        {
            //Debug.Log("point 0");
            FrontBall = collBallSb.gameObject;
            BackBall  = collBallSb.BackBall;

            float beta = Mathf.Atan2((BackBall.transform.position.y - collBall.transform.position.y), (BackBall.transform.position.x - collBall.transform.position.x));
            if (beta < 0)
            {
                beta += TPi;
            }

            if (beta < Mathf.PI)
            {
                angle = beta - (Mathf.PI * 4.0f / 3.0f);
            }
            else
            {
                angle = beta + Mathf.PI - (Mathf.PI / 3.0f);
            }

            collBallSb.BackBall = gameObject;
            collBallSb          = BackBall.GetComponent <BallBehaviour>();

            collBallSb.FrontBall = gameObject;

            isTryClockwise = PathAngle(collBallSb.BackBall) < 90 ? true : false;
        }
        else                                                    //3. Дійсний удар в задню частину кулі, якщо інших варіантів не лишилось(удар в хвіст потоку, або по одиночній кулі)
        {
            // isTryClockwise = true;
            isClockwise = true;
            //Debug.Log("REAL BACK");
            FrontBall  = collBall;
            collBallSb = FrontBall.GetComponent <BallBehaviour>();
            if (collBallSb.BackBall != null)
            {
                BackBall = collBallSb.BackBall;
                BackBall.GetComponent <BallBehaviour>().FrontBall = gameObject;
            }
            collBallSb.BackBall = gameObject;
        }

        if (FrontBall != null && BackBall != null)      //Якщо потрібно від'їхати вперед, та звільнити місце
        {
            FrontBall.GetComponent <BallBehaviour>().MoveOneStepForward(this);
        }

        pathPoints = new List <Transform>(collBallSb.pathPoints);

        RespIndex = collBall.GetComponent <BallBehaviour>().RespIndex;                     //отримує індекс списку куль
    }