summaryrefslogtreecommitdiffstats
path: root/src/Mobs/NewHorse.cpp
diff options
context:
space:
mode:
authorSamuel Barney <samjbarney@gmail.com>2014-08-21 02:56:31 +0200
committerSamuel Barney <samjbarney@gmail.com>2014-08-21 02:56:31 +0200
commit34e0bc759326803ead6e752533b402ff32db9dd2 (patch)
treef535df9df31aaac33f5f8461733503a842adea66 /src/Mobs/NewHorse.cpp
parentTemporarily instantiating components here. (diff)
downloadcuberite-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.cpp109
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));
+ }
+}
+
+
+
+