private void influenceSingleObjectByWind(IInfluenceableByWind _influencableObject) 
    {
        if(m_listExistingLinearWinds.Count > 0)
        {
            Vector3 v3ObjectPosition = _influencableObject.Position;

            Vector3 v3ResultngWindDirection = new Vector3();

            float fResultingWindForce = 0f;

            foreach(LinearWind wind in m_listExistingLinearWinds) 
            {
                Ray ray = new Ray(wind.Position, wind.Direction);

                Vector3 v3NearestPointOnRay = MathHelper.v3GetNearestPointOnRay(ray, v3ObjectPosition);

                float fSmallestDistanceObjectWind = MathHelper.fGetSmallestDistanceToStraight(ray, v3NearestPointOnRay, v3ObjectPosition);

                if(fSmallestDistanceObjectWind < wind.Radius) {
                    fResultingWindForce += (wind.Radius / fSmallestDistanceObjectWind * wind.Force);
                    v3ResultngWindDirection += wind.Direction.normalized;
                }
            }

            if (fResultingWindForce > 0) {
                _influencableObject.influence(v3ResultngWindDirection.normalized, fResultingWindForce);
            }
        }
    }
 private void addBalloonToInfluenceableByWindList() 
 {
 
     IInfluenceableByWind goInfluenceableByWind = m_goBalloon.GetComponent<IInfluenceableByWind>();
     
     if (!m_listInfluenceablesByWind.Contains(goInfluenceableByWind))
     {
         m_listInfluenceablesByWind.Add(goInfluenceableByWind);
     }
 }
 public void addObjectInfluenceableByWind(IInfluenceableByWind _influenceableObject) 
 {
     m_listInfluenceablesByWind.Add(_influenceableObject);
 }