From ecfe6ab65bd1fc2c7f5733fe6ef4e6ddaac44a26 Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Sun, 23 Sep 2012 22:09:57 +0000 Subject: Source files cleanup: The rest of the files renamed. git-svn-id: http://mc-server.googlecode.com/svn/trunk@887 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/Redstone.h | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 source/Redstone.h (limited to 'source/Redstone.h') diff --git a/source/Redstone.h b/source/Redstone.h new file mode 100644 index 000000000..a5377e8a7 --- /dev/null +++ b/source/Redstone.h @@ -0,0 +1,122 @@ +#pragma once + +#include "Vector3i.h" + +class cWorld; +class cRedstone +{ +public: + + cRedstone( cWorld* a_World ); + + static char RepeaterRotationToMetaData( float a_Rotation ) + { + a_Rotation += 90 + 45; // So its not aligned with axis + if( a_Rotation > 360.f ) a_Rotation -= 360.f; + if( a_Rotation >= 0.f && a_Rotation < 90.f ) + return 0x1; + else if( a_Rotation >= 180 && a_Rotation < 270 ) + return 0x3; + else if( a_Rotation >= 90 && a_Rotation < 180 ) + return 0x2; + else + return 0x0; + } + + static bool IsRepeaterPointingTo( const Vector3i & a_RepeaterPos, char a_MetaData, const Vector3i & a_BlockPos ) + { + switch( a_MetaData & 0x3 ) + { + case 0x0: + if( (a_RepeaterPos - a_BlockPos).Equals( Vector3i( 0, 0, 1 ) ) ) + { + return true; + } + break; + case 0x1: + if( (a_RepeaterPos - a_BlockPos).Equals( Vector3i(-1, 0, 0 ) ) ) + { + return true; + } + break; + case 0x2: + if( (a_RepeaterPos - a_BlockPos).Equals( Vector3i( 0, 0,-1 ) ) ) + { + return true; + } + break; + case 0x3: + if( (a_RepeaterPos - a_BlockPos).Equals( Vector3i( 1, 0, 0 ) ) ) + { + return true; + } + break; + default: + break; + } + return false; + } + + static bool IsRepeaterPointingAway( const Vector3i & a_RepeaterPos, char a_MetaData, const Vector3i & a_BlockPos ) + { + switch( a_MetaData & 0x3 ) + { + case 0x0: + if( (a_RepeaterPos - a_BlockPos).Equals( Vector3i( 0, 0,-1 ) ) ) + { + return true; + } + break; + case 0x1: + if( (a_RepeaterPos - a_BlockPos).Equals( Vector3i( 1, 0, 0 ) ) ) + { + return true; + } + break; + case 0x2: + if( (a_RepeaterPos - a_BlockPos).Equals( Vector3i( 0, 0, 1 ) ) ) + { + return true; + } + break; + case 0x3: + if( (a_RepeaterPos - a_BlockPos).Equals( Vector3i(-1, 0, 0 ) ) ) + { + return true; + } + break; + default: + break; + } + return false; + } + + static Vector3i GetRepeaterDirection( char a_MetaData ) + { + switch( a_MetaData & 0x3 ) + { + case 0x0: + return Vector3i( 0, 0,-1 ); + case 0x1: + return Vector3i( 1, 0, 0 ); + case 0x2: + return Vector3i( 0, 0, 1 ); + case 0x3: + return Vector3i(-1, 0, 0 ); + default: + break; + } + return Vector3i(); + } + + void CalculateRedstone( int, int, int ); + void ChangeRedstone( int, int, int, bool ); + bool IsBlockPowered( int, int, int ); + + cWorld* m_World; + + char m_Metadata; + char m_Direction; + + static bool s_UseRedstone; +}; -- cgit v1.2.3