summaryrefslogtreecommitdiffstats
path: root/source/Entities/Minecart.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Entities/Minecart.cpp')
-rw-r--r--source/Entities/Minecart.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/source/Entities/Minecart.cpp b/source/Entities/Minecart.cpp
index f633206a2..a2f1e5593 100644
--- a/source/Entities/Minecart.cpp
+++ b/source/Entities/Minecart.cpp
@@ -54,20 +54,24 @@ void cMinecart::HandlePhysics(float a_Dt, cChunk & a_Chunk)
if ((GetPosY() > 0) && (GetPosY() < cChunkDef::Height))
{
BLOCKTYPE BelowType = GetWorld()->GetBlock(floor(GetPosX()), floor(GetPosY() -1 ), floor(GetPosZ()));
+ BLOCKTYPE InsideType = GetWorld()->GetBlock(floor(GetPosX()), floor(GetPosY()), floor(GetPosZ()));
- if (
- (BelowType == E_BLOCK_RAIL) ||
- (BelowType == E_BLOCK_POWERED_RAIL) ||
- (BelowType == E_BLOCK_DETECTOR_RAIL) ||
- (BelowType == E_BLOCK_ACTIVATOR_RAIL)
- )
+ if (IsBlockRail(BelowType))
{
HandleRailPhysics(a_Dt, a_Chunk);
}
else
{
- super::HandlePhysics(a_Dt, a_Chunk);
- BroadcastMovementUpdate();
+ if (IsBlockRail(InsideType))
+ {
+ SetPosY(ceil(GetPosY()));
+ HandleRailPhysics(a_Dt, a_Chunk);
+ }
+ else
+ {
+ super::HandlePhysics(a_Dt, a_Chunk);
+ BroadcastMovementUpdate();
+ }
}
}
else