// 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;
                }
            }
        }
    }
예제 #2
0
 internal void ReturnBall(GameObject ball)
 {
     pool.ReturnBall(ball, ball.GetComponent <BallController>().Type == BallType.Good);
 }