// Update is called once per frame void FixedUpdate() { Gravity[] binding; while (bindings.Count != 0) { binding = bindings.Dequeue(); bool firstExist = Gravity.gravities.Contains(binding[0]); bool secondExist = Gravity.gravities.Contains(binding[1]); if (firstExist && secondExist) { //jeżeli dwie kule wciąż są na scenie aktywne, pobierane są od nich takie dane jak masa, pozycja //na ich podstawie są określane parametry nowej kuli lub rozprysku float firstMass = binding[0].GetComponent <Rigidbody>().mass; float secondMass = binding[1].GetComponent <Rigidbody>().mass; float newMass = firstMass + secondMass; //przy określaniu nowej pozycji wykorzystywana jest "średnia ważona" - nowa kula będzie bliżej pozycji starej kuli o większej masie Vector3 newPosition = (binding[0].transform.position * firstMass / newMass + binding[1].transform.position * secondMass / newMass); pool.ReturnBall(binding[0].gameObject); pool.ReturnBall(binding[1].gameObject); if (newMass < 50) { Merging(binding[0].gameObject, binding[1].gameObject, newPosition, newMass); } else { Burst(binding[0].gameObject, binding[1].gameObject, newPosition, newMass); } } else { if (firstExist) { binding[0].collided = false; } if (secondExist) { binding[1].collided = false; } } } }
internal void ReturnBall(GameObject ball) { pool.ReturnBall(ball, ball.GetComponent <BallController>().Type == BallType.Good); }