Files
BallisticsDocs/Source/EasyBallistics/Private/Environment.cpp
T
2025-07-02 22:40:58 -07:00

58 lines
2.0 KiB
C++

// Copyright 2016 Mookie. All Rights Reserved.
#include "EBBullet.h"
FVector AEBBullet::GetWind_Implementation(UWorld* World, FVector Location) const{
return Wind;
}
float AEBBullet::GetAirDensity_Implementation(UWorld* World, FVector Location) const{
switch (AtmosphereType) {
case (EEBAtmosphereType::AT_Curve): {
float airmp = SeaLevelAirDensity / GetCurveValue(AirDensityCurve, 0, SeaLevelAirDensity);
return GetCurveValue(AirDensityCurve, GetAltitude(World, Location) / WorldScale, SeaLevelAirDensity)* airmp;
}
case (EEBAtmosphereType::AT_Earth): {
return GetAltitudeDensity(GetAltitude(World, Location) / WorldScale / 100.0f);
}
default:{
return SeaLevelAirDensity;
}
}
}
float AEBBullet::GetSpeedOfSound_Implementation(UWorld* World, FVector Location) const{
if (!SpeedOfSoundVariesWithAltitude) {
return SeaLevelSpeedOfSound * WorldScale;
}
float Altitude = GetAltitude(World, Location);
float soundvmp = SeaLevelSpeedOfSound / GetCurveValue(SpeedOfSoundCurve, 0, SeaLevelSpeedOfSound);
return GetCurveValue(SpeedOfSoundCurve, Altitude, SeaLevelSpeedOfSound)*WorldScale*soundvmp;
}
float AEBBullet::GetAltitudePressure(float AltitudeMeter) const {
return FMath::Max(SeaLevelAirPressure * FMath::Pow((1 - (0.0000225577 * AltitudeMeter)), 5.25588), 0.0f);
}
float AEBBullet::GetAltitudeTemperature(float AltitudeMeter) const {
return SeaLevelAirTemperature - (TemperatureLapseRate * FMath::Min(AltitudeMeter, TropopauseAltitude));
}
float AEBBullet::GetAltitudeDensity(float AltitudeMeter) const {
float Temperature = GetAltitudeTemperature(AltitudeMeter);
float Pressure = GetAltitudePressure(AltitudeMeter);
return Pressure * 100.0f / ((Temperature + 273.15) * SpecificGasConstant);
}
float AEBBullet::GetAltitude(UWorld* World, FVector Location) const{
FVector DistanceFromOrigin = (Location - WorldCenterLocation + FVector(World->OriginLocation));
if (SphericalAltitude)
{
return (DistanceFromOrigin.Size() - SeaLevelRadius);
}
else {
return DistanceFromOrigin.Z;
}
}