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); } } }
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); } } }
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); } } }