Implement ability to push minecarts on curved rails
This commit is contained in:
parent
6f1fa8f26f
commit
a544c0238b
@ -871,11 +871,79 @@ bool cMinecart::TestEntityCollision(NIBBLETYPE a_RailMeta)
|
|||||||
return true;
|
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_ZP_XM:
|
|
||||||
case E_META_RAIL_CURVED_ZP_XP:
|
case E_META_RAIL_CURVED_ZP_XP:
|
||||||
{
|
{
|
||||||
// TODO - simply can't be bothered right now
|
Vector3d Distance(
|
||||||
|
MinecartCollisionCallback.GetCollidedEntityPosition().x - GetPosX(),
|
||||||
|
0,
|
||||||
|
MinecartCollisionCallback.GetCollidedEntityPosition().z - GetPosZ()
|
||||||
|
);
|
||||||
|
|
||||||
|
if ( Distance.z == 0. ) Distance.z = 0.0001;
|
||||||
|
if ( ((Distance.z>=0)&&((Distance.x/Distance.z)>=1)) || ((Distance.z<0)&&((Distance.x/Distance.z)<=1)) )
|
||||||
|
{
|
||||||
|
if ( (-GetSpeedX() * 0.4) < 0.01 )
|
||||||
|
{
|
||||||
|
AddSpeedX( -4/sqrt(2) );
|
||||||
|
AddSpeedZ( 4/sqrt(2) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetSpeedX( -GetSpeedX() * 0.4 );
|
||||||
|
SetSpeedZ( GetSpeedZ() * 0.4 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((GetSpeedX() * 0.4) < 0.01)
|
||||||
|
{
|
||||||
|
AddSpeedX( 4/sqrt(2) );
|
||||||
|
AddSpeedZ( -4/sqrt(2) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetSpeedX( GetSpeedX() * 0.4 );
|
||||||
|
SetSpeedZ( -GetSpeedZ() * 0.4 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case E_META_RAIL_CURVED_ZM_XP:
|
||||||
|
case E_META_RAIL_CURVED_ZP_XM:
|
||||||
|
{
|
||||||
|
Vector3d Distance(
|
||||||
|
MinecartCollisionCallback.GetCollidedEntityPosition().x - GetPosX(),
|
||||||
|
0,
|
||||||
|
MinecartCollisionCallback.GetCollidedEntityPosition().z - GetPosZ()
|
||||||
|
);
|
||||||
|
|
||||||
|
if ( Distance.z == 0. ) Distance.z = 0.0001;
|
||||||
|
if ( ((Distance.z>=0)&&((Distance.x/Distance.z)<=-1)) || ((Distance.z<0)&&((Distance.x/Distance.z)>=-1)) )
|
||||||
|
{
|
||||||
|
if ( (GetSpeedX() * 0.4) < 0.01 )
|
||||||
|
{
|
||||||
|
AddSpeedX( 4/sqrt(2) );
|
||||||
|
AddSpeedZ( 4/sqrt(2) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetSpeedX( GetSpeedX() * 0.4 );
|
||||||
|
SetSpeedZ( GetSpeedZ() * 0.4 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((-GetSpeedX() * 0.4) < 0.01)
|
||||||
|
{
|
||||||
|
AddSpeedX( -4/sqrt(2) );
|
||||||
|
AddSpeedZ( -4/sqrt(2) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetSpeedX( -GetSpeedX() * 0.4 );
|
||||||
|
SetSpeedZ( -GetSpeedZ() * 0.4 );
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: break;
|
default: break;
|
||||||
|
Loading…
Reference in New Issue
Block a user