private void Pull(IntSatData satellite, MovementBehaviour parent, float gravityForce) { var force = _forcePhysics.PullForceFabricMethod( parent, satellite.MovementBehaviour.transform.position, gravityForce); satellite.MovementBehaviour.SmoothlySetVelocity(force); }
private void OnTriggerEnter2D(Collider2D collision) { if (!LayerHelper.IsSatellite(collision.gameObject.layer) && LayerHelper.IsLower(collision.gameObject.layer, _parent.gameObject.layer)) { IntSatData intSatData = collision.gameObject; intSatData.TheSameLayer = collision.gameObject.layer == _parent.gameObject.layer; _registeredBodies.Add(intSatData); } }
/// <summary> /// /// </summary> /// <param name="possibleSatellite">Объект который вошел в зону влияния(притяжения)</param> /// <param name="parentalObject">Объект который тянет</param> /// <returns></returns> private bool CheckEntryIntoOrbit( IntSatData possibleSatellite, MovementBehaviour parentalObject) { possibleSatellite.TimeLeftTillNextCheck -= Time.fixedDeltaTime; if (possibleSatellite.TimeLeftTillNextCheck > 0) { return(false); } possibleSatellite.TimeLeftTillNextCheck = DeltaTimeTillOrbit; float distanceBeetwenPoints = Vector3.Distance( parentalObject.transform.position, possibleSatellite.MovementBehaviour.transform.position); //Debug.Log($"{_minR} < {distanceBeetwenPoints} < {_maxR}"); if (!(_minR < distanceBeetwenPoints && _maxR > distanceBeetwenPoints)) { possibleSatellite.TimeLeftTillNextCheck = 0; possibleSatellite.HitsBeforeOrbit = 0; possibleSatellite.TempI = 0; return(false); } possibleSatellite.TempI++; //Debug.Log("Hit: " + possibleSatellite.TempI); //Ждем пока объект попадет под влияние положеннное количество раз if (possibleSatellite.TempI < _iterateCheckEntryOfOrbit) { return(false); } //если опрделенное количество проверок пройдено, то делаем его спутником _satelliteManagerBehavior.AttachSatellite(possibleSatellite, parentalObject); CalculateInfluenceRadius(); return(true); }