Skip to content

Commit e0d5eb9

Browse files
authored
feat(balance): improve airship air drag (#8219)
* feat: airship air drag * fixy fix * I actually implemented drag! I just implmeneted it wrong :P * remove old drag
1 parent e2dc3f5 commit e0d5eb9

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

src/vehicle.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
46244634
double vehicle::coeff_rolling_drag() const
46254635
{
46264636
if( !coeff_rolling_dirty ) {

src/vehicle.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,6 +1049,11 @@ class vehicle
10491049
*/
10501050
double coeff_air_drag() const;
10511051

1052+
/**
1053+
* coefficient of airship balloon drag
1054+
*/
1055+
double coeff_balloon_drag() const;
1056+
10521057
/**
10531058
* coefficient of rolling resistance
10541059
* multiplied by velocity to get the variable part of rolling resistance drag in N

0 commit comments

Comments
 (0)