diff options
author | Samuel Barney <samjbarney@gmail.com> | 2014-08-21 02:56:31 +0200 |
---|---|---|
committer | Samuel Barney <samjbarney@gmail.com> | 2014-08-21 02:56:31 +0200 |
commit | 34e0bc759326803ead6e752533b402ff32db9dd2 (patch) | |
tree | f535df9df31aaac33f5f8461733503a842adea66 /src/Mobs/NewHorse.cpp | |
parent | Temporarily instantiating components here. (diff) | |
download | cuberite-34e0bc759326803ead6e752533b402ff32db9dd2.tar cuberite-34e0bc759326803ead6e752533b402ff32db9dd2.tar.gz cuberite-34e0bc759326803ead6e752533b402ff32db9dd2.tar.bz2 cuberite-34e0bc759326803ead6e752533b402ff32db9dd2.tar.lz cuberite-34e0bc759326803ead6e752533b402ff32db9dd2.tar.xz cuberite-34e0bc759326803ead6e752533b402ff32db9dd2.tar.zst cuberite-34e0bc759326803ead6e752533b402ff32db9dd2.zip |
Diffstat (limited to '')
-rw-r--r-- | src/Mobs/NewHorse.cpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/src/Mobs/NewHorse.cpp b/src/Mobs/NewHorse.cpp new file mode 100644 index 000000000..2d02aeed2 --- /dev/null +++ b/src/Mobs/NewHorse.cpp @@ -0,0 +1,109 @@ +#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules + +#include "NewHorse.h" +#include "../World.h" +#include "../Entities/Player.h" + + + + + +cNewHorse::cNewHorse(int Type, int Color, int Style, int TameTimes) : + super("Horse", mtHorse, "mob.horse.hit", "mob.horse.death", 1.4, 1.6), + m_bHasChest(false), + m_bIsEating(false), + m_bIsRearing(false), + m_bIsMouthOpen(false), + m_bIsTame(false), + m_bIsSaddled(false), + m_Type(Type), + m_Color(Color), + m_Style(Style), + m_Armour(0), + m_TimesToTame(TameTimes), + m_TameAttemptTimes(0), + m_RearTickCount(0) +{ +} + + + + + +void cNewHorse::Tick(float a_Dt, cChunk & a_Chunk) +{ + super::Tick(a_Dt, a_Chunk); + + if (!m_bIsMouthOpen) + { + if (m_World->GetTickRandomNumber(50) == 25) + { + m_bIsMouthOpen = true; + } + } + else + { + if (m_World->GetTickRandomNumber(10) == 5) + { + m_bIsMouthOpen = false; + } + } + + if ((m_Attachee != NULL) && (!m_bIsTame)) + { + if (m_TameAttemptTimes < m_TimesToTame) + { + if (m_World->GetTickRandomNumber(50) == 25) + { + m_World->BroadcastSoundParticleEffect(2000, (int)GetPosX(), (int)GetPosY(), (int)GetPosZ(), 0); + m_World->BroadcastSoundParticleEffect(2000, (int)GetPosX(), (int)GetPosY(), (int)GetPosZ(), 2); + m_World->BroadcastSoundParticleEffect(2000, (int)GetPosX(), (int)GetPosY(), (int)GetPosZ(), 6); + m_World->BroadcastSoundParticleEffect(2000, (int)GetPosX(), (int)GetPosY(), (int)GetPosZ(), 8); + + m_Attachee->Detach(); + m_bIsRearing = true; + } + } + else + { + m_bIsTame = true; + } + } + + if (m_bIsRearing) + { + if (m_RearTickCount == 20) + { + m_bIsRearing = false; + m_RearTickCount = 0; + } + else + { + m_RearTickCount++; + } + } + + m_World->BroadcastEntityMetadata(*this); +} + + + + + +void cNewHorse::GetDrops(cItems & a_Drops, cEntity * a_Killer) +{ + int LootingLevel = 0; + if (a_Killer != NULL) + { + LootingLevel = a_Killer->GetEquippedWeapon().m_Enchantments.GetLevel(cEnchantments::enchLooting); + } + AddRandomDropItem(a_Drops, 0, 2 + LootingLevel, E_ITEM_LEATHER); + if (m_bIsSaddled) + { + a_Drops.push_back(cItem(E_ITEM_SADDLE, 1)); + } +} + + + + |