1
0

Fix horse taming (#3820)

* Horses rear when untamed and right-clicked with an item
This commit is contained in:
Bond-009 2017-07-02 07:40:59 +02:00 committed by Lukas Pioch
parent cf22bc4e60
commit b1628846d9

View File

@ -4,6 +4,7 @@
#include "../World.h" #include "../World.h"
#include "../EffectID.h" #include "../EffectID.h"
#include "../Entities/Player.h" #include "../Entities/Player.h"
#include "Broadcaster.h"
@ -24,7 +25,7 @@ cHorse::cHorse(int Type, int Color, int Style, int TameTimes) :
m_TimesToTame(TameTimes), m_TimesToTame(TameTimes),
m_TameAttemptTimes(0), m_TameAttemptTimes(0),
m_RearTickCount(0), m_RearTickCount(0),
m_MaxSpeed(20.0) m_MaxSpeed(14.0)
{ {
} }
@ -75,7 +76,7 @@ void cHorse::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk)
} }
else else
{ {
// TODO: emit hearts here m_World->GetBroadcaster().BroadcastParticleEffect("heart", static_cast<Vector3f>(GetPosition()), Vector3f{}, 0, 5);
m_bIsTame = true; m_bIsTame = true;
} }
} }
@ -104,26 +105,31 @@ void cHorse::OnRightClicked(cPlayer & a_Player)
{ {
super::OnRightClicked(a_Player); super::OnRightClicked(a_Player);
if (!m_bIsSaddled && m_bIsTame) if (m_bIsTame)
{ {
if (a_Player.GetEquippedItem().m_ItemType == E_ITEM_SADDLE) if (!m_bIsSaddled)
{ {
// Saddle the horse: if (a_Player.GetEquippedItem().m_ItemType == E_ITEM_SADDLE)
if (!a_Player.IsGameModeCreative())
{ {
a_Player.GetInventory().RemoveOneEquippedItem(); // Saddle the horse:
if (!a_Player.IsGameModeCreative())
{
a_Player.GetInventory().RemoveOneEquippedItem();
}
m_bIsSaddled = true;
m_World->BroadcastEntityMetadata(*this);
}
else
{
a_Player.AttachTo(this);
} }
m_bIsSaddled = true;
m_World->BroadcastEntityMetadata(*this);
} }
else if (!a_Player.GetEquippedItem().IsEmpty()) else
{ {
// The horse doesn't like being hit, make it rear: a_Player.AttachTo(this);
m_bIsRearing = true;
m_RearTickCount = 0;
} }
} }
else else if (a_Player.GetEquippedItem().IsEmpty())
{ {
if (m_Attachee != nullptr) if (m_Attachee != nullptr)
{ {
@ -144,6 +150,12 @@ void cHorse::OnRightClicked(cPlayer & a_Player)
m_TameAttemptTimes++; m_TameAttemptTimes++;
a_Player.AttachTo(this); a_Player.AttachTo(this);
} }
else
{
m_bIsRearing = true;
m_RearTickCount = 0;
m_World->BroadcastSoundEffect("entity.horse.angry", GetPosX(), GetPosY(), GetPosZ(), 1.0f, 0.8f);
}
} }