private void OnEnable() { objGravitate = GetComponent <Gravitate>(); objRigidbody = GetComponent <Rigidbody2D>(); objPhysicsProperties = GetComponent <PhysicsProperties>(); objOrbitTracker = GetComponent <OrbitTracker>(); Managers.ObjectTracker.Instance.RegisterObject(this); }
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); } }
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(); } } }
bool impulseGiven; // prevents altered acceleration to be considered more than one FixedUpdate // Use this for initialization void Start() { grav = GetComponent <Gravitate>(); currentVelocity = 0; }