From ec6c510bd404524dc63d130b41329fb365423b4b Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Sun, 12 Jan 2014 13:28:37 +0000 Subject: Multiple enhancements and fixes to minecarts + They are destroyed instantly by creative mode * Physics is much improved + Basic implementation of powered rails --- src/Entities/Minecart.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/Entities/Minecart.h') diff --git a/src/Entities/Minecart.h b/src/Entities/Minecart.h index b1b48be4e..e353e18d9 100644 --- a/src/Entities/Minecart.h +++ b/src/Entities/Minecart.h @@ -53,15 +53,16 @@ public: virtual void DoTakeDamage(TakeDamageInfo & TDI) override; int LastDamage(void) const { return m_LastDamage; } - void HandleRailPhysics(float a_Dt, cChunk & a_Chunk); ePayload GetPayload(void) const { return m_Payload; } protected: ePayload m_Payload; + int m_LastDamage; cMinecart(ePayload a_Payload, double a_X, double a_Y, double a_Z); - - int m_LastDamage; + void HandleRailPhysics(NIBBLETYPE a_RailMeta); + void HandlePoweredRailPhysics(NIBBLETYPE a_RailMeta); + void SnapToRail(NIBBLETYPE a_RailMeta); } ; -- cgit v1.2.3 From a66e154b90a96d41fd2cc0c9ac30f2e55e692546 Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Mon, 13 Jan 2014 22:37:09 +0000 Subject: Final improvements to Minecarts * Fixed curved rails being a little broken + Implemented detector rails + Implemented block collisions on rails * Fixed snapping to rail - Removed minecart physics conditions in Entity.cpp as minecarts use their own simulator when on rails Fixes #148 and #217; partially implemented #215. This is Cave Johnson, and we're done here. --- src/Entities/Minecart.h | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/Entities/Minecart.h') diff --git a/src/Entities/Minecart.h b/src/Entities/Minecart.h index e353e18d9..feb700b71 100644 --- a/src/Entities/Minecart.h +++ b/src/Entities/Minecart.h @@ -51,6 +51,7 @@ public: virtual void SpawnOn(cClientHandle & a_ClientHandle) override; virtual void HandlePhysics(float a_Dt, cChunk & a_Chunk) override; virtual void DoTakeDamage(TakeDamageInfo & TDI) override; + virtual void Destroyed() override; int LastDamage(void) const { return m_LastDamage; } ePayload GetPayload(void) const { return m_Payload; } @@ -58,11 +59,30 @@ public: protected: ePayload m_Payload; int m_LastDamage; + Vector3i m_DetectorRailPosition; + bool m_bIsOnDetectorRail; cMinecart(ePayload a_Payload, double a_X, double a_Y, double a_Z); - void HandleRailPhysics(NIBBLETYPE a_RailMeta); + + /** Handles physics on normal rails + For each tick, slow down on flat rails, speed up or slow down on ascending/descending rails (depending on direction), and turn on curved rails + */ + void HandleRailPhysics(NIBBLETYPE a_RailMeta, float a_Dt); + + /** Handles powered rail physics + Each tick, speed up or slow down cart, depending on metadata of rail (powered or not) + */ void HandlePoweredRailPhysics(NIBBLETYPE a_RailMeta); + + /** Handles detector rail activation + Activates detector rails when a minecart is on them. Calls HandleRailPhysics() for physics simulations + */ + void HandleDetectorRailPhysics(NIBBLETYPE a_RailMeta, float a_Dt); + + /** Snaps a minecart to a rail's axis, resetting its speed */ void SnapToRail(NIBBLETYPE a_RailMeta); + /** Tests is a solid block is in front of a cart, and stops the cart (and returns true) if so; returns false if no obstruction*/ + bool TestBlockCollision(NIBBLETYPE a_RailMeta); } ; -- cgit v1.2.3