1
0

Change to Cuboid calculation for splash distance (#5176)

* Change to Cuboid calculation for splash distance

* Use ForEachEntityInBox when splash entities

* Remove TODO comment, calculation verified

* Added self to contributors
This commit is contained in:
Nate 2021-04-06 12:16:31 -04:00 committed by GitHub
parent 071b7be3d4
commit 8efe55c62c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 9 deletions

View File

@ -71,6 +71,7 @@ theophriene
tigerw (Tiger Wang)
tonibm19
TooAngel
tympaniplayer(Nate Palmer)
UltraCoderRU
Warmist
WebFreak001

View File

@ -57,7 +57,11 @@ void cSplashPotionEntity::OnHitEntity(cEntity & a_EntityHit, Vector3d a_HitPos)
void cSplashPotionEntity::Splash(Vector3d a_HitPos)
{
m_World->ForEachEntity([=](cEntity & a_Entity)
double XZCalculation = 8.25/2;
double YCalculation = 4.25/2;
cBoundingBox SplashDistanceBox = cBoundingBox(a_HitPos.x - XZCalculation, a_HitPos.x + XZCalculation, a_HitPos.y - YCalculation, a_HitPos.y + YCalculation, a_HitPos.z - XZCalculation, a_HitPos.z + XZCalculation);
m_World->ForEachEntityInBox(SplashDistanceBox, [=](cEntity & a_Entity)
{
if (!a_Entity.IsPawn())
{
@ -65,15 +69,8 @@ void cSplashPotionEntity::Splash(Vector3d a_HitPos)
return false;
}
double SplashDistance = (a_Entity.GetPosition() - a_HitPos).Length();
if (SplashDistance >= 20)
{
// Too far away
return false;
}
// y = -0.25x + 1, where x is the distance from the player. Approximation for potion splash.
// TODO: better equation
double SplashDistance = (a_Entity.GetPosition() - a_HitPos).Length();
double Reduction = -0.25 * SplashDistance + 1.0;
Reduction = std::max(Reduction, 0.0);