示例#1
0
    private void OnEnable()
    {
        objGravitate         = GetComponent <Gravitate>();
        objRigidbody         = GetComponent <Rigidbody2D>();
        objPhysicsProperties = GetComponent <PhysicsProperties>();
        objOrbitTracker      = GetComponent <OrbitTracker>();

        Managers.ObjectTracker.Instance.RegisterObject(this);
    }
示例#2
0
    public void ApplyGravity(Gravitate objToGravitate)
    {
        Rigidbody2D rbToGravitate = objToGravitate.objSpaceObj.objRigidbody;

        Vector2 direction       = objSpaceObj.objRigidbody.position - rbToGravitate.position;
        float   distanceSquared = direction.sqrMagnitude;

        float distanceFromCenter = (objPhysicsProperties.Radius + objToGravitate.objPhysicsProperties.Radius);

        //Debug.Log("Dist from center: " + distanceFromCenter + " | Distance: " + direction.magnitude);

        if (direction.magnitude > distanceFromCenter)
        {
            float   gravitationMag = G * (objSpaceObj.objRigidbody.mass * rbToGravitate.mass) / distanceSquared;
            Vector2 force          = direction.normalized * gravitationMag;

            rbToGravitate.AddRelativeForce(force, ForceMode2D.Force);

            if (force.SqrMagnitude() > MIN_THRESHOLD)
            {
                if (!gravitatingObjects.Contains(objToGravitate))
                {
                    gravitatingObjects.Add(objToGravitate);

                    if (objSpaceObj.objRigidbody.mass >= objToGravitate.objSpaceObj.objRigidbody.mass)
                    {
                        if (OnObjectEnteredGravitationalPull != null)
                        {
                            OnObjectEnteredGravitationalPull(objSpaceObj, objToGravitate.objSpaceObj);
                        }
                    }
                }
            }
            else if (gravitatingObjects.Contains(objToGravitate))
            {
                gravitatingObjects.Remove(objToGravitate);

                if (OnObjectExitedGravitationalPull != null)
                {
                    if (objSpaceObj.objRigidbody.mass >= objToGravitate.objSpaceObj.objRigidbody.mass)
                    {
                        Debug.Log("OUT OF GRAVITATIONAL RANGE");
                        OnObjectExitedGravitationalPull(objSpaceObj, objToGravitate.objSpaceObj);
                    }
                }
            }
        }
        else
        {
            //Absorb!
            PhysicsProperties.AbsorbObject(objSpaceObj, objToGravitate.objSpaceObj);
        }
    }
示例#3
0
        private void FixedUpdate()
        {
            if (Managers.GameState.Instance.IsState(GameState.EnumGameState.RUNNING))
            {
                for (int i = 0; i < activeObjectsInUniverse.Count; ++i)
                {
                    Gravitate gravitator = activeObjectsInUniverse[i].objGravitate;

                    for (int j = 0; j < activeObjectsInUniverse.Count; ++j)
                    {
                        Gravitate objToGravitate = activeObjectsInUniverse[j].objGravitate;

                        if (gravitator != objToGravitate)
                        {
                            gravitator.ApplyGravity(objToGravitate);
                        }
                    }

                    gravitator.objPhysicsProperties.UpdatePhysicsProperties();
                }
            }
        }
示例#4
0
    bool impulseGiven;         // prevents altered acceleration to be considered more than one FixedUpdate

    // Use this for initialization
    void Start()
    {
        grav            = GetComponent <Gravitate>();
        currentVelocity = 0;
    }