1
0
Fork 0

Added more minecart powered rail directions

This commit is contained in:
Tiger Wang 2014-01-24 19:39:39 +00:00
parent 83cbe8c139
commit f39daabf7e
3 changed files with 63 additions and 80 deletions

View File

@ -474,7 +474,7 @@ void cMinecart::HandlePoweredRailPhysics(NIBBLETYPE a_RailMeta)
}
break;
}
case E_META_RAIL_ASCEND_XM:
case E_META_RAIL_ASCEND_XM: // ASCEND EAST
{
SetYaw(180);
SetSpeedZ(0);
@ -483,16 +483,76 @@ void cMinecart::HandlePoweredRailPhysics(NIBBLETYPE a_RailMeta)
{
if (GetSpeedX() <= MAX_SPEED)
{
AddSpeedX(1);
AddSpeedX(AccelDecelSpeed);
SetSpeedY(-GetSpeedX());
}
}
else
{
AddSpeedX(-1);
AddSpeedX(AccelDecelNegSpeed);
SetSpeedY(-GetSpeedX());
}
break;
}
case E_META_RAIL_ASCEND_XP: // ASCEND WEST
{
SetYaw(180);
SetSpeedZ(0);
if (GetSpeedX() > 0)
{
AddSpeedX(AccelDecelSpeed);
SetSpeedY(GetSpeedX());
}
else
{
if (GetSpeedX() >= MAX_SPEED_NEGATIVE)
{
AddSpeedX(AccelDecelNegSpeed);
SetSpeedY(GetSpeedX());
}
}
break;
}
case E_META_RAIL_ASCEND_ZM: // ASCEND NORTH
{
SetYaw(270);
SetSpeedX(0);
if (GetSpeedZ() >= 0)
{
if (GetSpeedZ() <= MAX_SPEED)
{
AddSpeedZ(AccelDecelSpeed);
SetSpeedY(-GetSpeedZ());
}
}
else
{
AddSpeedZ(AccelDecelNegSpeed);
SetSpeedY(-GetSpeedZ());
}
break;
}
case E_META_RAIL_ASCEND_ZP: // ASCEND SOUTH
{
SetYaw(270);
SetSpeedX(0);
if (GetSpeedZ() > 0)
{
AddSpeedZ(AccelDecelSpeed);
SetSpeedY(GetSpeedZ());
}
else
{
if (GetSpeedZ() >= MAX_SPEED_NEGATIVE)
{
AddSpeedZ(AccelDecelNegSpeed);
SetSpeedY(GetSpeedZ());
}
}
break;
}
default: ASSERT(!"Unhandled powered rail metadata!"); break;
}

View File

@ -1,43 +0,0 @@
#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
#include "ReferenceManager.h"
#include "Entities/Entity.h"
cReferenceManager::cReferenceManager( ENUM_REFERENCE_MANAGER_TYPE a_Type )
: m_Type( a_Type )
{
}
cReferenceManager::~cReferenceManager()
{
if( m_Type == RFMNGR_REFERENCERS )
{
for( std::list< cEntity** >::iterator itr = m_References.begin(); itr != m_References.end(); ++itr )
{
*(*itr) = 0; // Set referenced pointer to 0
}
}
else
{
for( std::list< cEntity** >::iterator itr = m_References.begin(); itr != m_References.end(); ++itr )
{
cEntity* Ptr = (*(*itr));
if( Ptr ) Ptr->Dereference( *(*itr) );
}
}
}
void cReferenceManager::AddReference( cEntity*& a_EntityPtr )
{
m_References.push_back( &a_EntityPtr );
}
void cReferenceManager::Dereference( cEntity*& a_EntityPtr )
{
m_References.remove( &a_EntityPtr );
}

View File

@ -1,34 +0,0 @@
#pragma once
class cEntity;
class cReferenceManager
{
public:
enum ENUM_REFERENCE_MANAGER_TYPE
{
RFMNGR_REFERENCERS,
RFMNGR_REFERENCES,
};
cReferenceManager( ENUM_REFERENCE_MANAGER_TYPE a_Type );
~cReferenceManager();
void AddReference( cEntity*& a_EntityPtr );
void Dereference( cEntity*& a_EntityPtr );
private:
ENUM_REFERENCE_MANAGER_TYPE m_Type;
std::list< cEntity** > m_References;
};