@@ -4548,7 +4548,6 @@ double vehicle::coeff_air_drag() const
45484548 d_check_max ( drag[ col ].panel , pa, pa.info ().has_flag ( " SOLAR_PANEL" ) );
45494549 d_check_max ( drag[ col ].windmill , pa, pa.info ().has_flag ( " WIND_TURBINE" ) );
45504550 d_check_max ( drag[ col ].rotor , pa, pa.info ().has_flag ( " ROTOR" ) );
4551- d_check_max ( drag[ col ].ballon , pa, pa.info ().has_flag ( " BALLOON" ) );
45524551 d_check_max ( drag[ col ].sail , pa, pa.info ().has_flag ( " WIND_POWERED" ) );
45534552 d_check_max ( drag[ col ].exposed , pa, d_exposed ( pa ) );
45544553 d_check_min ( drag[ col ].last , pa, pa.info ().has_flag ( " LOW_FINAL_AIR_DRAG" ) ||
@@ -4583,8 +4582,6 @@ double vehicle::coeff_air_drag() const
45834582 c_air_drag_c += ( dc.windmill > minrow ) ? 5 * c_air_mod : 0 ;
45844583 // rotors are not great for drag!
45854584 c_air_drag_c += ( dc.rotor > minrow ) ? 6 * c_air_mod : 0 ;
4586- // Neither are balloons
4587- c_air_drag_c += ( dc.ballon > minrow ) ? 6 * c_air_mod : 0 ;
45884585 // having a sail is terrible for your drag
45894586 c_air_drag_c += ( dc.sail > minrow ) ? 7 * c_air_mod : 0 ;
45904587 c_air_drag += c_air_drag_c;
@@ -4614,13 +4611,26 @@ double vehicle::coeff_air_drag() const
46144611 double cross_area = height * tile_to_width ( width );
46154612 add_msg ( m_debug, " %s: height %3.2fm, width %3.2fm (%d tiles), c_air %3.2f\n " , name, height,
46164613 tile_to_width ( width ), width, c_air_drag );
4614+ if ( !balloons.empty () ) {
4615+ c_air_drag += coeff_balloon_drag ();
4616+ }
46174617 // F_air_drag = c_air_drag * cross_area * 1/2 * air_density * v^2
46184618 // coeff_air_resistance = c_air_drag * cross_area * 1/2 * air_density
46194619 coefficient_air_resistance = std::max ( 0.1 , c_air_drag * cross_area * 0.5 * air_density );
46204620 coeff_air_dirty = false ;
46214621 return coefficient_air_resistance;
46224622}
46234623
4624+ double vehicle::coeff_balloon_drag () const
4625+ {
4626+ double volume = std::accumulate ( balloons.begin (), balloons.end (), double {0.0 },
4627+ [&]( double acc, int balloon ) {
4628+ const double height{ parts[ balloon ].info ().balloon_height () };
4629+ return acc + height;
4630+ } );
4631+ return std::pow ( volume, 2 / 3 );
4632+ }
4633+
46244634double vehicle::coeff_rolling_drag () const
46254635{
46264636 if ( !coeff_rolling_dirty ) {
0 commit comments