Added one more direction into collision checks
* Added direction XM_XP * Improved performance, thanks STR and xoft
This commit is contained in:
parent
9a580146e4
commit
3700ad8546
@ -720,56 +720,81 @@ bool cMinecart::TestBlockCollision(NIBBLETYPE a_RailMeta)
|
|||||||
|
|
||||||
bool cMinecart::TestEntityCollision(NIBBLETYPE a_RailMeta)
|
bool cMinecart::TestEntityCollision(NIBBLETYPE a_RailMeta)
|
||||||
{
|
{
|
||||||
|
cMinecartCollisionCallback MinecartCollisionCallback(GetPosition(), GetHeight(), GetWidth(), GetUniqueID(), ((m_Attachee == NULL) ? -1 : m_Attachee->GetUniqueID()));
|
||||||
|
int ChunkX, ChunkZ;
|
||||||
|
cChunkDef::BlockToChunk((int)floor(GetPosX()), (int)floor(GetPosZ()), ChunkX, ChunkZ);
|
||||||
|
m_World->ForEachEntityInChunk(ChunkX, ChunkZ, MinecartCollisionCallback);
|
||||||
|
|
||||||
|
if (!MinecartCollisionCallback.FoundIntersection())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
switch (a_RailMeta)
|
switch (a_RailMeta)
|
||||||
{
|
{
|
||||||
case E_META_RAIL_ZM_ZP:
|
case E_META_RAIL_ZM_ZP:
|
||||||
{
|
{
|
||||||
cMinecartCollisionCallback MinecartCollisionCallback(GetPosition(), GetHeight(), GetWidth(), GetUniqueID(), ((m_Attachee == NULL) ? -1 : m_Attachee->GetUniqueID()));
|
if (MinecartCollisionCallback.GetCollidedEntityPosition().z >= GetPosZ())
|
||||||
m_World->ForEachEntity(MinecartCollisionCallback);
|
|
||||||
|
|
||||||
if (MinecartCollisionCallback.FoundIntersection())
|
|
||||||
{
|
{
|
||||||
if (MinecartCollisionCallback.GetCollidedEntityPosition().z >= GetPosZ())
|
if ((-GetSpeedZ() * 0.4) < 0.01)
|
||||||
{
|
{
|
||||||
if (((-GetSpeedZ()) * 0.4) < 0.01)
|
AddSpeedZ(-4);
|
||||||
{
|
|
||||||
AddSpeedZ(-4);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SetSpeedZ((-GetSpeedZ()) * 0.4);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((GetSpeedZ() * 0.4) < 0.01)
|
SetSpeedZ(-GetSpeedZ() * 0.4);
|
||||||
{
|
|
||||||
AddSpeedZ(4);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SetSpeedZ(GetSpeedZ() * 0.4);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
break;
|
else
|
||||||
|
{
|
||||||
|
if ((GetSpeedZ() * 0.4) < 0.01)
|
||||||
|
{
|
||||||
|
AddSpeedZ(4);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetSpeedZ(GetSpeedZ() * 0.4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
case E_META_RAIL_XM_XP:
|
case E_META_RAIL_XM_XP:
|
||||||
{
|
{
|
||||||
|
if (MinecartCollisionCallback.GetCollidedEntityPosition().x >= GetPosX())
|
||||||
break;
|
{
|
||||||
|
if ((-GetSpeedX() * 0.4) < 0.01)
|
||||||
|
{
|
||||||
|
AddSpeedX(-4);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetSpeedX(-GetSpeedX() * 0.4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((GetSpeedX() * 0.4) < 0.01)
|
||||||
|
{
|
||||||
|
AddSpeedX(4);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetSpeedX(GetSpeedX() * 0.4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
case E_META_RAIL_CURVED_ZM_XM:
|
case E_META_RAIL_CURVED_ZM_XM:
|
||||||
case E_META_RAIL_CURVED_ZM_XP:
|
case E_META_RAIL_CURVED_ZM_XP:
|
||||||
case E_META_RAIL_CURVED_ZP_XM:
|
case E_META_RAIL_CURVED_ZP_XM:
|
||||||
case E_META_RAIL_CURVED_ZP_XP:
|
case E_META_RAIL_CURVED_ZP_XP:
|
||||||
{
|
{
|
||||||
|
// TODO - simply can't be bothered right now
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user