summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSTRWarrior <niels.breuker@hotmail.nl>2014-01-26 13:07:21 +0100
committerSTRWarrior <niels.breuker@hotmail.nl>2014-01-26 13:07:21 +0100
commita533386144f234dcfb61ad6bc5341712ea244afd (patch)
tree136911017bc1cb509ef1028c234e6944fb3639ad
parentMerge pull request #588 from mc-server/Sheep_Eating (diff)
downloadcuberite-a533386144f234dcfb61ad6bc5341712ea244afd.tar
cuberite-a533386144f234dcfb61ad6bc5341712ea244afd.tar.gz
cuberite-a533386144f234dcfb61ad6bc5341712ea244afd.tar.bz2
cuberite-a533386144f234dcfb61ad6bc5341712ea244afd.tar.lz
cuberite-a533386144f234dcfb61ad6bc5341712ea244afd.tar.xz
cuberite-a533386144f234dcfb61ad6bc5341712ea244afd.tar.zst
cuberite-a533386144f234dcfb61ad6bc5341712ea244afd.zip
-rw-r--r--src/Mobs/Wolf.cpp33
1 files changed, 27 insertions, 6 deletions
diff --git a/src/Mobs/Wolf.cpp b/src/Mobs/Wolf.cpp
index 11e3f690a..217834eb1 100644
--- a/src/Mobs/Wolf.cpp
+++ b/src/Mobs/Wolf.cpp
@@ -75,10 +75,12 @@ void cWolf::OnRightClicked(cPlayer & a_Player)
SetIsTame(true);
SetOwner(a_Player.GetName());
m_World->BroadcastEntityStatus(*this, ENTITY_STATUS_WOLF_TAMED);
+ m_World->BroadcastParticleEffect("heart", (float) GetPosX(), (float) GetPosY(), (float) GetPosZ(), 0, 0, 0, 0, 5);
}
else
{
m_World->BroadcastEntityStatus(*this, ENTITY_STATUS_WOLF_TAMING);
+ m_World->BroadcastParticleEffect("smoke", (float) GetPosX(), (float) GetPosY(), (float) GetPosZ(), 0, 0, 0, 0, 5);
}
}
}
@@ -122,7 +124,8 @@ void cWolf::Tick(float a_Dt, cChunk & a_Chunk)
{
super::Tick(a_Dt, a_Chunk);
}
-
+
+ // The wolf is sitting so don't move him at all.
if (IsSitting())
{
m_bMovingToDestination = false;
@@ -145,8 +148,18 @@ void cWolf::Tick(float a_Dt, cChunk & a_Chunk)
SetIsBegging(true);
m_World->BroadcastEntityMetadata(*this);
}
- m_FinalDestination = a_Closest_Player->GetPosition();;
- m_bMovingToDestination = false;
+ // Don't move to the player if the wolf is sitting.
+ if (IsSitting())
+ {
+ m_bMovingToDestination = false;
+ }
+ else
+ {
+ m_bMovingToDestination = true;
+ }
+ Vector3d PlayerPos = a_Closest_Player->GetPosition();
+ PlayerPos.y++;
+ m_FinalDestination = PlayerPos;
break;
}
default:
@@ -185,15 +198,23 @@ void cWolf::TickFollowPlayer()
} Callback;
if (m_World->DoWithPlayer(m_OwnerName, Callback))
{
- // The player is present in the world, follow them:
+ // The player is present in the world, follow him:
double Distance = (Callback.OwnerPos - GetPosition()).Length();
- if ((Distance > 30) && (!IsSitting()))
+ if (Distance > 30)
{
TeleportToCoords(Callback.OwnerPos.x, Callback.OwnerPos.y, Callback.OwnerPos.z);
}
else
{
- MoveToPosition(Callback.OwnerPos);
+ m_FinalDestination = Callback.OwnerPos;
+ if (IsSitting())
+ {
+ m_bMovingToDestination = false;
+ }
+ else
+ {
+ m_bMovingToDestination = true;
+ }
}
}
}