From 360d8eade0332f2c1aa5c205ca772cd506c35b26 Mon Sep 17 00:00:00 2001 From: peterbell10 Date: Tue, 13 Jun 2017 20:35:30 +0100 Subject: FastRandom rewrite (#3754) --- src/Entities/Entity.cpp | 10 ++++------ src/Entities/ExpBottleEntity.cpp | 2 +- src/Entities/Floater.cpp | 10 ++++++---- src/Entities/Player.cpp | 13 ++++++------- src/Entities/ThrownEggEntity.cpp | 5 +++-- 5 files changed, 20 insertions(+), 20 deletions(-) (limited to 'src/Entities') diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp index db70044b4..5d26f501b 100644 --- a/src/Entities/Entity.cpp +++ b/src/Entities/Entity.cpp @@ -495,12 +495,11 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI) { int Chance = static_cast(ThornsLevel * 15); - cFastRandom Random; - int RandomValue = Random.GenerateRandomInteger(0, 100); + auto & Random = GetRandomProvider(); - if (RandomValue <= Chance) + if (Random.RandBool(Chance / 100.0)) { - a_TDI.Attacker->TakeDamage(dtAttack, this, 0, Random.GenerateRandomInteger(1, 4), 0); + a_TDI.Attacker->TakeDamage(dtAttack, this, 0, Random.RandInt(1, 4), 0); } } @@ -574,8 +573,7 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI) TotalEPF = 25; } - cFastRandom Random; - float RandomValue = Random.GenerateRandomInteger(50, 100) * 0.01f; + float RandomValue = GetRandomProvider().RandReal(0.5f, 1.0f); TotalEPF = ceil(TotalEPF * RandomValue); diff --git a/src/Entities/ExpBottleEntity.cpp b/src/Entities/ExpBottleEntity.cpp index b76df923a..4072b939b 100644 --- a/src/Entities/ExpBottleEntity.cpp +++ b/src/Entities/ExpBottleEntity.cpp @@ -40,6 +40,6 @@ void cExpBottleEntity::Break(const Vector3d &a_HitPos) { // Spawn an experience orb with a reward between 3 and 11. m_World->BroadcastSoundParticleEffect(EffectID::PARTICLE_SPLASH_POTION, POSX_TOINT, POSY_TOINT, POSZ_TOINT, 0); - m_World->SpawnExperienceOrb(GetPosX(), GetPosY(), GetPosZ(), 3 + m_World->GetTickRandomNumber(8)); + m_World->SpawnExperienceOrb(GetPosX(), GetPosY(), GetPosZ(), GetRandomProvider().RandInt(3, 11)); Destroy(); } diff --git a/src/Entities/Floater.cpp b/src/Entities/Floater.cpp index 8f98cb36c..eeaa6cf3d 100644 --- a/src/Entities/Floater.cpp +++ b/src/Entities/Floater.cpp @@ -128,6 +128,8 @@ void cFloater::SpawnOn(cClientHandle & a_Client) void cFloater::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) { + auto & Random = GetRandomProvider(); + HandlePhysics(a_Dt, a_Chunk); if (IsBlockWater(m_World->GetBlock(POSX_TOINT, POSY_TOINT, POSZ_TOINT)) && (m_World->GetBlockMeta(POSX_TOINT, POSY_TOINT, POSX_TOINT) == 0)) @@ -141,13 +143,13 @@ void cFloater::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) SetPosY(GetPosY() - 1); m_CanPickupItem = true; m_PickupCountDown = 20; - m_CountDownTime = 100 + m_World->GetTickRandomNumber(800); + m_CountDownTime = Random.RandInt(100, 900); LOGD("Floater %i can be picked up", GetUniqueID()); } else if (m_CountDownTime == 20) // Calculate the position where the particles should spawn and start producing them. { LOGD("Started producing particles for floater %i", GetUniqueID()); - m_ParticlePos.Set(GetPosX() + (-4 + m_World->GetTickRandomNumber(8)), GetPosY(), GetPosZ() + (-4 + m_World->GetTickRandomNumber(8))); + m_ParticlePos.Set(GetPosX() + Random.RandInt(-4, 4), GetPosY(), GetPosZ() + Random.RandInt(-4, 4)); m_World->GetBroadcaster().BroadcastParticleEffect("splash", static_cast(m_ParticlePos), Vector3f{}, 0, 15); } else if (m_CountDownTime < 20) @@ -159,14 +161,14 @@ void cFloater::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) m_CountDownTime--; if (m_World->GetHeight(POSX_TOINT, POSZ_TOINT) == POSY_TOINT) { - if (m_World->IsWeatherWet() && m_World->GetTickRandomNumber(3) == 0) // 25% chance of an extra countdown when being rained on. + if (m_World->IsWeatherWet() && Random.RandBool(0.25)) // 25% chance of an extra countdown when being rained on. { m_CountDownTime--; } } else // if the floater is underground it has a 50% chance of not decreasing the countdown. { - if (m_World->GetTickRandomNumber(1) == 0) + if (Random.RandBool()) { m_CountDownTime++; } diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp index b11c07a0b..7232ed614 100644 --- a/src/Entities/Player.cpp +++ b/src/Entities/Player.cpp @@ -1069,9 +1069,9 @@ void cPlayer::KilledBy(TakeDamageInfo & a_TDI) { case dtRangedAttack: DamageText = "was shot"; break; case dtLightning: DamageText = "was plasmified by lightining"; break; - case dtFalling: DamageText = (GetWorld()->GetTickRandomNumber(10) % 2 == 0) ? "fell to death" : "hit the ground too hard"; break; + case dtFalling: DamageText = GetRandomProvider().RandBool() ? "fell to death" : "hit the ground too hard"; break; case dtDrowning: DamageText = "drowned"; break; - case dtSuffocating: DamageText = (GetWorld()->GetTickRandomNumber(10) % 2 == 0) ? "git merge'd into a block" : "fused with a block"; break; + case dtSuffocating: DamageText = GetRandomProvider().RandBool() ? "git merge'd into a block" : "fused with a block"; break; case dtStarving: DamageText = "forgot the importance of food"; break; case dtCactusContact: DamageText = "was impaled on a cactus"; break; case dtLavaContact: DamageText = "was melted by lava"; break; @@ -2295,18 +2295,17 @@ void cPlayer::UseEquippedItem(int a_Amount) int UnbreakingLevel = static_cast(Item.m_Enchantments.GetLevel(cEnchantments::enchUnbreaking)); if (UnbreakingLevel > 0) { - int chance; + double chance = 0.0; if (ItemCategory::IsArmor(Item.m_ItemType)) { - chance = 60 + (40 / (UnbreakingLevel + 1)); + chance = 0.6 + (0.4 / (UnbreakingLevel + 1)); } else { - chance = 100 / (UnbreakingLevel + 1); + chance = 1.0 / (UnbreakingLevel + 1); } - cFastRandom Random; - if (Random.NextInt(101) <= chance) + if (GetRandomProvider().RandBool(chance)) { return; } diff --git a/src/Entities/ThrownEggEntity.cpp b/src/Entities/ThrownEggEntity.cpp index b20050529..3131f4841 100644 --- a/src/Entities/ThrownEggEntity.cpp +++ b/src/Entities/ThrownEggEntity.cpp @@ -74,11 +74,12 @@ void cThrownEggEntity::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) void cThrownEggEntity::TrySpawnChicken(const Vector3d & a_HitPos) { - if (m_World->GetTickRandomNumber(7) == 1) + auto & Random = GetRandomProvider(); + if (Random.RandBool(0.125)) { m_World->SpawnMob(a_HitPos.x, a_HitPos.y, a_HitPos.z, mtChicken, true); } - else if (m_World->GetTickRandomNumber(32) == 1) + else if (Random.RandBool(1.0 / 33.0)) { m_World->SpawnMob(a_HitPos.x, a_HitPos.y, a_HitPos.z, mtChicken, true); m_World->SpawnMob(a_HitPos.x, a_HitPos.y, a_HitPos.z, mtChicken, true); -- cgit v1.2.3