Example #1
0
 private void CascadeToNeighbour(GameObject measureDistanceTo, DartChainV3 targettocascade)
 {
     if (!_crossSectionAngleCorrection.IsEdge)
     {
         var distancetochain = Vector3.Distance(measureDistanceTo.transform.position, transform.position);
         if (distancetochain >= _settings.HoseLength + _settings.HoseApplyForceThresholdCorrection)
         {
             var   direction = measureDistanceTo.transform.position - transform.position;
             float distanceToMultiply;
             distancetochain += _settings.HosePowBaseCorrection;
             if (distancetochain < 1)
             {
                 distancetochain   += 1;
                 distanceToMultiply = Mathf.Pow(distancetochain, 1 / _settings.HoseDistancePow);
             }
             else
             {
                 distanceToMultiply = Mathf.Pow(distancetochain, _settings.HoseDistancePow);
             }
             var applying = direction.normalized * _settings.HoseFlatForceMultiplier * distanceToMultiply;
             //Debug.Log(applying);
             _mainRigidBody.AddForce(applying);
             targettocascade.CascadeForce(this, _settings.HoseFlatForceMultiplier * _settings.HoseMitigator * distancetochain, direction);
         }
     }
 }
Example #2
0
 private void CascadeForce(DartChainV3 source, float forcetoAdd, Vector3 previousDirection)
 {
     if (!_crossSectionAngleCorrection.IsEdge)
     {
         var direction = source.transform.position - transform.position;
         direction = (direction + _settings.HoseOriginalDirectionWeight * previousDirection).normalized;
         _mainRigidBody.AddForce(direction.normalized * forcetoAdd);
         if (source == _previousChain)
         {
             _nextChain.CascadeForce(this, forcetoAdd * _settings.HoseMitigator, direction);
         }
         else if (source == _nextChain)
         {
             _previousChain.CascadeForce(this, forcetoAdd * _settings.HoseMitigator, direction);
         }
     }
 }
Example #3
0
 private void CascadeToNeighbour(GameObject measureDistanceTo, DartChainV3 targettocascade)
 {
     if (!_crossSectionAngleCorrection.IsEdge)
     {
         var distancetochain = Vector3.Distance(measureDistanceTo.transform.position, transform.position);
         if (distancetochain >= _settings.HoseLength + _settings.HoseApplyForceThresholdCorrection)
         {
             var direction = measureDistanceTo.transform.position - transform.position;
             float distanceToMultiply;
             distancetochain += _settings.HosePowBaseCorrection;
             if (distancetochain < 1)
             {
                 distancetochain += 1;
                 distanceToMultiply = Mathf.Pow(distancetochain, 1 / _settings.HoseDistancePow);
             }
             else distanceToMultiply = Mathf.Pow(distancetochain, _settings.HoseDistancePow);
             var applying = direction.normalized * _settings.HoseFlatForceMultiplier * distanceToMultiply;
             //Debug.Log(applying);
             _mainRigidBody.AddForce(applying);
             targettocascade.CascadeForce(this, _settings.HoseFlatForceMultiplier * _settings.HoseMitigator * distancetochain, direction);
         }
     }
 }