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; }
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(); }
/* 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; }
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); }
public void MoveReversBackwardBall() //Рухатись назад, кулям які позаду. Не використовую { //Debug.Log("MoveReversBackwardBall: " + TypeSphere); Move(5.0f, -1); if (BackBall != null) { BackBall.GetComponent <BallBehaviour>().MoveReversBackwardBall(); } }
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; //якщо задніх куль не має і зсуву передніх робити також не потрібно - то розблокувати процес знищення куль } }
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; //отримує індекс списку куль }