コード例 #1
0
        private void Pull(IntSatData satellite, MovementBehaviour parent, float gravityForce)
        {
            var force = _forcePhysics.PullForceFabricMethod(
                parent,
                satellite.MovementBehaviour.transform.position,
                gravityForce);

            satellite.MovementBehaviour.SmoothlySetVelocity(force);
        }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
        /// <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);
        }