Fix cPawn pushing
cPawn instances can no longer push an entity they are attached to. cEntity now has a IsAttachedTo method.
This commit is contained in:
parent
57e6fd654b
commit
a1c48f4853
@ -1864,6 +1864,19 @@ bool cEntity::IsA(const char * a_ClassName) const
|
||||
|
||||
|
||||
|
||||
bool cEntity::IsAttachedTo(const cEntity * a_Entity) const
|
||||
{
|
||||
if ((m_AttachedTo != nullptr) && (a_Entity->GetUniqueID() == m_AttachedTo->GetUniqueID()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cEntity::SetHeadYaw(double a_HeadYaw)
|
||||
{
|
||||
m_HeadYaw = a_HeadYaw;
|
||||
|
@ -423,6 +423,9 @@ public:
|
||||
/** Detaches from the currently attached entity, if any */
|
||||
virtual void Detach(void);
|
||||
|
||||
/** Returns true if this entity is attached to the specified entity */
|
||||
bool IsAttachedTo(const cEntity * a_Entity) const;
|
||||
|
||||
/** Makes sure head yaw is not over the specified range. */
|
||||
void WrapHeadYaw();
|
||||
|
||||
|
@ -73,6 +73,12 @@ void cPawn::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk)
|
||||
return false;
|
||||
}
|
||||
|
||||
// do not push a boat / minecart you're sitting in
|
||||
if (m_Pusher->IsAttachedTo(a_Entity))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Vector3d v3Delta = a_Entity->GetPosition() - m_Pusher->GetPosition();
|
||||
v3Delta.y = 0.0; // we only push sideways
|
||||
v3Delta *= 1.0 / (v3Delta.Length() + 0.01); // we push harder if we're close
|
||||
|
Loading…
Reference in New Issue
Block a user