summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarvin Kopf <marvinkopf@posteo.de>2016-02-21 02:46:36 +0100
committerMarvin Kopf <marvinkopf@posteo.de>2016-04-15 01:59:18 +0200
commit01a100dc97aa27d8cd9a755212e144e326dce0db (patch)
treeb9577f0838501dc98b643f2818e514a189f37b8c
parentMerge pull request #3140 from cuberite/revert-3137-issue3136 (diff)
downloadcuberite-01a100dc97aa27d8cd9a755212e144e326dce0db.tar
cuberite-01a100dc97aa27d8cd9a755212e144e326dce0db.tar.gz
cuberite-01a100dc97aa27d8cd9a755212e144e326dce0db.tar.bz2
cuberite-01a100dc97aa27d8cd9a755212e144e326dce0db.tar.lz
cuberite-01a100dc97aa27d8cd9a755212e144e326dce0db.tar.xz
cuberite-01a100dc97aa27d8cd9a755212e144e326dce0db.tar.zst
cuberite-01a100dc97aa27d8cd9a755212e144e326dce0db.zip
-rw-r--r--src/Entities/Minecart.cpp92
-rw-r--r--src/Entities/Minecart.h3
2 files changed, 54 insertions, 41 deletions
diff --git a/src/Entities/Minecart.cpp b/src/Entities/Minecart.cpp
index ea51c49c8..1b037e830 100644
--- a/src/Entities/Minecart.cpp
+++ b/src/Entities/Minecart.cpp
@@ -277,11 +277,8 @@ void cMinecart::HandleRailPhysics(NIBBLETYPE a_RailMeta, std::chrono::millisecon
if (GetSpeedZ() >= 0)
{
// SpeedZ POSITIVE, going SOUTH
- if (GetSpeedZ() <= MAX_SPEED) // Speed limit
- {
- AddSpeedZ(0.5); // Speed up
- SetSpeedY(-GetSpeedZ()); // Downward movement is negative (0 minus positive numbers is negative)
- }
+ AddSpeedZ(0.5); // Speed up
+ SetSpeedY(-GetSpeedZ()); // Downward movement is negative (0 minus positive numbers is negative)
}
else
{
@@ -304,12 +301,9 @@ void cMinecart::HandleRailPhysics(NIBBLETYPE a_RailMeta, std::chrono::millisecon
}
else
{
- if (GetSpeedZ() >= MAX_SPEED_NEGATIVE) // Speed limit
- {
- // SpeedZ NEGATIVE, going NORTH
- AddSpeedZ(-0.5); // Speed up
- SetSpeedY(GetSpeedZ()); // Downward movement negative
- }
+ // SpeedZ NEGATIVE, going NORTH
+ AddSpeedZ(-0.5); // Speed up
+ SetSpeedY(GetSpeedZ()); // Downward movement negative
}
break;
}
@@ -320,11 +314,8 @@ void cMinecart::HandleRailPhysics(NIBBLETYPE a_RailMeta, std::chrono::millisecon
if (GetSpeedX() >= NO_SPEED)
{
- if (GetSpeedX() <= MAX_SPEED)
- {
- AddSpeedX(0.5);
- SetSpeedY(-GetSpeedX());
- }
+ AddSpeedX(0.5);
+ SetSpeedY(-GetSpeedX());
}
else
{
@@ -345,11 +336,8 @@ void cMinecart::HandleRailPhysics(NIBBLETYPE a_RailMeta, std::chrono::millisecon
}
else
{
- if (GetSpeedX() >= MAX_SPEED_NEGATIVE)
- {
- AddSpeedX(-0.5);
- SetSpeedY(GetSpeedX());
- }
+ AddSpeedX(-0.5);
+ SetSpeedY(GetSpeedX());
}
break;
}
@@ -484,11 +472,8 @@ void cMinecart::HandlePoweredRailPhysics(NIBBLETYPE a_RailMeta)
if (GetSpeedX() >= NO_SPEED)
{
- if (GetSpeedX() <= MAX_SPEED)
- {
- AddSpeedX(AccelDecelSpeed);
- SetSpeedY(-GetSpeedX());
- }
+ AddSpeedX(AccelDecelSpeed);
+ SetSpeedY(-GetSpeedX());
}
else
{
@@ -509,11 +494,8 @@ void cMinecart::HandlePoweredRailPhysics(NIBBLETYPE a_RailMeta)
}
else
{
- if (GetSpeedX() >= MAX_SPEED_NEGATIVE)
- {
- AddSpeedX(AccelDecelNegSpeed);
- SetSpeedY(GetSpeedX());
- }
+ AddSpeedX(AccelDecelNegSpeed);
+ SetSpeedY(GetSpeedX());
}
break;
}
@@ -524,11 +506,8 @@ void cMinecart::HandlePoweredRailPhysics(NIBBLETYPE a_RailMeta)
if (GetSpeedZ() >= NO_SPEED)
{
- if (GetSpeedZ() <= MAX_SPEED)
- {
- AddSpeedZ(AccelDecelSpeed);
- SetSpeedY(-GetSpeedZ());
- }
+ AddSpeedZ(AccelDecelSpeed);
+ SetSpeedY(-GetSpeedZ());
}
else
{
@@ -549,11 +528,8 @@ void cMinecart::HandlePoweredRailPhysics(NIBBLETYPE a_RailMeta)
}
else
{
- if (GetSpeedZ() >= MAX_SPEED_NEGATIVE)
- {
- AddSpeedZ(AccelDecelNegSpeed);
- SetSpeedY(GetSpeedZ());
- }
+ AddSpeedZ(AccelDecelNegSpeed);
+ SetSpeedY(GetSpeedZ());
}
break;
}
@@ -1043,6 +1019,40 @@ bool cMinecart::DoTakeDamage(TakeDamageInfo & TDI)
+void cMinecart::DoSetSpeed(double a_SpeedX, double a_SpeedY, double a_SpeedZ)
+{
+ if (a_SpeedX > MAX_SPEED)
+ {
+ a_SpeedX = MAX_SPEED;
+ }
+ else if (a_SpeedX < MAX_SPEED_NEGATIVE)
+ {
+ a_SpeedX = MAX_SPEED_NEGATIVE;
+ }
+ if (a_SpeedY > MAX_SPEED)
+ {
+ a_SpeedY = MAX_SPEED;
+ }
+ else if (a_SpeedY < MAX_SPEED_NEGATIVE)
+ {
+ a_SpeedY = MAX_SPEED_NEGATIVE;
+ }
+ if (a_SpeedZ > MAX_SPEED)
+ {
+ a_SpeedZ = MAX_SPEED;
+ }
+ else if (a_SpeedZ < MAX_SPEED_NEGATIVE)
+ {
+ a_SpeedZ = MAX_SPEED_NEGATIVE;
+ }
+
+ super::DoSetSpeed(a_SpeedX, a_SpeedY, a_SpeedZ);
+}
+
+
+
+
+
void cMinecart::Destroyed()
{
if (m_bIsOnDetectorRail)
diff --git a/src/Entities/Minecart.h b/src/Entities/Minecart.h
index c4b1d7f6d..0e5c99f80 100644
--- a/src/Entities/Minecart.h
+++ b/src/Entities/Minecart.h
@@ -51,6 +51,9 @@ protected:
Vector3i m_DetectorRailPosition;
bool m_bIsOnDetectorRail;
+ // Overwrite to enforce speed limit
+ virtual void DoSetSpeed(double a_SpeedX, double a_SpeedY, double a_SpeedZ);
+
cMinecart(ePayload a_Payload, double a_X, double a_Y, double a_Z);
/** Handles physics on normal rails