Redstone is now self aware. It's not quite as dumb as it used to be at any rate. Redstone wires have no range and understand they are supposed to stay on whenever there's an active torch touching it. (Need to add other power devices)
git-svn-id: http://mc-server.googlecode.com/svn/trunk@68 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
36f7084e3f
commit
cc4e4345de
@ -647,6 +647,8 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
|
|||||||
//printf("Place Dir:%i %i %i %i : %i\n", PacketData->m_Direction, PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ, PacketData->m_ItemType);
|
//printf("Place Dir:%i %i %i %i : %i\n", PacketData->m_Direction, PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ, PacketData->m_ItemType);
|
||||||
// 'use' useable items instead of placing blocks
|
// 'use' useable items instead of placing blocks
|
||||||
bool bPlaceBlock = true;
|
bool bPlaceBlock = true;
|
||||||
|
bool UpdateRedstone = false;
|
||||||
|
bool AddedCurrent = false;
|
||||||
if( PacketData->m_Direction >= 0 )
|
if( PacketData->m_Direction >= 0 )
|
||||||
{
|
{
|
||||||
ENUM_BLOCK_ID BlockID = (ENUM_BLOCK_ID)m_Player->GetWorld()->GetBlock( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ );
|
ENUM_BLOCK_ID BlockID = (ENUM_BLOCK_ID)m_Player->GetWorld()->GetBlock( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ );
|
||||||
@ -655,6 +657,7 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
|
|||||||
case E_BLOCK_REDSTONE_REPEATER_ON:
|
case E_BLOCK_REDSTONE_REPEATER_ON:
|
||||||
case E_BLOCK_REDSTONE_REPEATER_OFF:
|
case E_BLOCK_REDSTONE_REPEATER_OFF:
|
||||||
{
|
{
|
||||||
|
//no need to update redstone current with a repeater
|
||||||
//todo: Find meta value of repeater and change it to one step more.
|
//todo: Find meta value of repeater and change it to one step more.
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -763,33 +766,46 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
|
|||||||
{
|
{
|
||||||
MetaData = cTorch::DirectionToMetaData( PacketData->m_Direction );
|
MetaData = cTorch::DirectionToMetaData( PacketData->m_Direction );
|
||||||
//check redstone circuit:
|
//check redstone circuit:
|
||||||
|
|
||||||
//if( GetBlock( X, Y+1, Z ) == E_BLOCK_AIR )
|
//if( GetBlock( X, Y+1, Z ) == E_BLOCK_AIR )
|
||||||
if( g_BlockTransparent[ (int)m_Player->GetWorld()->GetBlock( PacketData->m_PosX, PacketData->m_PosY+2, PacketData->m_PosZ ) ] == true ) {//if block above is transparent
|
if( g_BlockTransparent[ (int)m_Player->GetWorld()->GetBlock( PacketData->m_PosX, PacketData->m_PosY+2, PacketData->m_PosZ ) ] == true ) {//if block above is transparent
|
||||||
//printf("transparent above me\n");
|
//printf("transparent above me\n");
|
||||||
} else {
|
} else {
|
||||||
//printf("transparent not above me\n");
|
//printf("transparent not above me\n");
|
||||||
}
|
}
|
||||||
|
//PacketData->m_ItemType = E_BLOCK_REDSTONE_TORCH_ON;
|
||||||
cRedstone Redstone(m_Player->GetWorld());
|
UpdateRedstone = true;
|
||||||
Redstone.cRedstone::ChangeRedstoneTorch( PacketData->m_PosX, PacketData->m_PosY+1, PacketData->m_PosZ, true );
|
AddedCurrent = true;
|
||||||
|
//cRedstone Redstone(m_Player->GetWorld());
|
||||||
|
//Redstone.cRedstone::ChangeRedstoneTorch( PacketData->m_PosX, PacketData->m_PosY+1, PacketData->m_PosZ, true );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case E_BLOCK_REDSTONE_TORCH_ON:
|
case E_BLOCK_REDSTONE_TORCH_ON:
|
||||||
|
{
|
||||||
MetaData = cTorch::DirectionToMetaData( PacketData->m_Direction );
|
MetaData = cTorch::DirectionToMetaData( PacketData->m_Direction );
|
||||||
|
//PacketData->m_ItemType = E_BLOCK_REDSTONE_TORCH_ON;
|
||||||
|
UpdateRedstone = true;
|
||||||
|
AddedCurrent = false;
|
||||||
|
//cRedstone Redstone(m_Player->GetWorld());
|
||||||
|
//Redstone.cRedstone::ChangeRedstoneTorch( PacketData->m_PosX, PacketData->m_PosY+1, PacketData->m_PosZ, true );
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case E_ITEM_REDSTONE_DUST:
|
case E_ITEM_REDSTONE_DUST:
|
||||||
MetaData = 0;
|
MetaData = 0;
|
||||||
PacketData->m_ItemType = E_BLOCK_REDSTONE_WIRE;
|
PacketData->m_ItemType = E_BLOCK_REDSTONE_WIRE;
|
||||||
|
UpdateRedstone = true;
|
||||||
|
AddedCurrent = false;
|
||||||
break;
|
break;
|
||||||
case E_ITEM_REDSTONE_REPEATER:
|
case E_ITEM_REDSTONE_REPEATER:
|
||||||
MetaData = cRedstone::RepeaterRotationToMetaData( m_Player->GetRotation() );
|
MetaData = cRedstone::RepeaterRotationToMetaData( m_Player->GetRotation() );
|
||||||
PacketData->m_ItemType = E_BLOCK_REDSTONE_REPEATER_OFF;
|
PacketData->m_ItemType = E_BLOCK_REDSTONE_REPEATER_OFF;
|
||||||
|
UpdateRedstone = true;
|
||||||
|
AddedCurrent = false;
|
||||||
break;
|
break;
|
||||||
case E_BLOCK_PISTON:
|
case E_BLOCK_PISTON:
|
||||||
case E_BLOCK_STICKY_PISTON:
|
case E_BLOCK_STICKY_PISTON:
|
||||||
MetaData = cPiston::RotationPitchToMetaData( m_Player->GetRotation(), m_Player->GetPitch() );
|
MetaData = cPiston::RotationPitchToMetaData( m_Player->GetRotation(), m_Player->GetPitch() );
|
||||||
|
UpdateRedstone = true;
|
||||||
|
AddedCurrent = false;
|
||||||
break;
|
break;
|
||||||
case E_BLOCK_COBBLESTONE_STAIRS:
|
case E_BLOCK_COBBLESTONE_STAIRS:
|
||||||
case E_BLOCK_BRICK_STAIRS:
|
case E_BLOCK_BRICK_STAIRS:
|
||||||
@ -829,6 +845,10 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
|
|||||||
AddDirection( X, Y, Z, PacketData->m_Direction );
|
AddDirection( X, Y, Z, PacketData->m_Direction );
|
||||||
|
|
||||||
m_Player->GetWorld()->SetBlock( X, Y, Z, (char)PacketData->m_ItemType, MetaData );
|
m_Player->GetWorld()->SetBlock( X, Y, Z, (char)PacketData->m_ItemType, MetaData );
|
||||||
|
if (UpdateRedstone) {
|
||||||
|
cRedstone Redstone(m_Player->GetWorld());
|
||||||
|
Redstone.ChangeRedstoneTorch( PacketData->m_PosX, PacketData->m_PosY+1, PacketData->m_PosZ, AddedCurrent );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
cRedstone::cRedstone( cWorld* a_World )
|
cRedstone::cRedstone( cWorld* a_World )
|
||||||
:m_World ( a_World )
|
:m_World ( a_World )
|
||||||
|
,m_Metadata ( 0 )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -15,77 +16,244 @@ void cRedstone::ChangeRedstoneTorch( int fillx, int filly, int fillz, bool added
|
|||||||
char metadata = 0;
|
char metadata = 0;
|
||||||
if (added) {
|
if (added) {
|
||||||
metadata = 15;
|
metadata = 15;
|
||||||
|
m_Metadata = 15;
|
||||||
} else {
|
} else {
|
||||||
metadata = 0;
|
metadata = 0;
|
||||||
|
m_Metadata = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LightRedstone( fillx, filly, fillz, metadata );
|
||||||
|
|
||||||
|
if ( (int)m_World->GetBlock( fillx, filly, fillz ) == 0 ) { //we removed an item
|
||||||
|
|
||||||
|
//se we check each possible current connection around it.
|
||||||
|
//if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
|
LightRedstone( fillx+1, filly, fillz, m_Metadata );
|
||||||
|
//}
|
||||||
|
//if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
|
LightRedstone( fillx-1, filly, fillz, m_Metadata );
|
||||||
|
//}
|
||||||
|
//if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
|
LightRedstone( fillx, filly, fillz+1, m_Metadata );
|
||||||
|
//}
|
||||||
|
//if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
|
LightRedstone( fillx, filly, fillz-1, m_Metadata );
|
||||||
|
//}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//cWorld* World = cRoot::Get()->GetWorld();
|
//cWorld* World = cRoot::Get()->GetWorld();
|
||||||
|
/*
|
||||||
|
while ((int)metadata == 0) {
|
||||||
if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
LightRedstone( fillx+1, filly, fillz, metadata );
|
metadata = LightRedstone( fillx+1, filly, fillz, metadata );
|
||||||
}
|
}
|
||||||
if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
LightRedstone( fillx-1, filly, fillz, metadata );
|
metadata = LightRedstone( fillx-1, filly, fillz, metadata );
|
||||||
}
|
}
|
||||||
if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
LightRedstone( fillx, filly, fillz+1, metadata );
|
metadata = LightRedstone( fillx, filly, fillz+1, metadata );
|
||||||
}
|
}
|
||||||
if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
LightRedstone( fillx, filly, fillz-1, metadata );
|
metadata = LightRedstone( fillx, filly, fillz-1, metadata );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
LightRedstone( fillx+1, filly-1, fillz, metadata );
|
metadata = LightRedstone( fillx+1, filly-1, fillz, metadata );
|
||||||
}
|
}
|
||||||
if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
LightRedstone( fillx-1, filly-1, fillz, metadata );
|
metadata = LightRedstone( fillx-1, filly-1, fillz, metadata );
|
||||||
}
|
}
|
||||||
if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
LightRedstone( fillx, filly-1, fillz+1, metadata );
|
metadata = LightRedstone( fillx, filly-1, fillz+1, metadata );
|
||||||
}
|
}
|
||||||
if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
LightRedstone( fillx, filly-1, fillz-1, metadata );
|
metadata = LightRedstone( fillx, filly-1, fillz-1, metadata );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
LightRedstone( fillx+1, filly+1, fillz, metadata );
|
metadata = LightRedstone( fillx+1, filly+1, fillz, metadata );
|
||||||
}
|
}
|
||||||
if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
LightRedstone( fillx-1, filly+1, fillz, metadata );
|
metadata = LightRedstone( fillx-1, filly+1, fillz, metadata );
|
||||||
}
|
}
|
||||||
if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
LightRedstone( fillx, filly+1, fillz+1, metadata );
|
metadata = LightRedstone( fillx, filly+1, fillz+1, metadata );
|
||||||
}
|
}
|
||||||
if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
LightRedstone( fillx, filly+1, fillz-1, metadata );
|
metadata = LightRedstone( fillx, filly+1, fillz-1, metadata );
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void cRedstone::LightRedstone( int fillx, int filly, int fillz, char metadata)
|
char cRedstone::LightRedstone( int fillx, int filly, int fillz, char metadata)
|
||||||
{
|
{
|
||||||
|
//while (m_Metadata == metadata) {
|
||||||
|
|
||||||
|
//printf("LightRedstone( %i, %i, %i, %i )\n)", fillx, filly, fillz, (int)metadata);
|
||||||
if ( ( (int)m_World->GetBlock( fillx, filly, fillz ) == E_BLOCK_STICKY_PISTON ) || ( (int)m_World->GetBlock( fillx, filly, fillz ) == E_BLOCK_PISTON ) ) {
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz ) == E_BLOCK_STICKY_PISTON ) || ( (int)m_World->GetBlock( fillx, filly, fillz ) == E_BLOCK_PISTON ) ) {
|
||||||
cPiston Piston(m_World);
|
cPiston Piston(m_World);
|
||||||
if (metadata > 0) {
|
if (m_Metadata > 0) {
|
||||||
Piston.ExtendPiston(fillx, filly, fillz);
|
Piston.ExtendPiston(fillx, filly, fillz);
|
||||||
} else {
|
} else {
|
||||||
Piston.RetractPiston(fillx, filly, fillz);
|
Piston.RetractPiston(fillx, filly, fillz);
|
||||||
}
|
}
|
||||||
} else if ( ( (int)m_World->GetBlock( fillx, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz) != metadata ) ) {
|
}
|
||||||
|
|
||||||
|
if ( (int)m_World->GetBlock( fillx, filly, fillz ) == E_BLOCK_REDSTONE_TORCH_OFF ) { //I don't think notch knows on from off. >.>
|
||||||
|
//printf("1\n");
|
||||||
|
metadata = 15;
|
||||||
|
m_Metadata = 15;
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx-1, filly, fillz) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx-1,filly,fillz,m_Metadata);
|
||||||
|
}
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx+1, filly, fillz) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx+1,filly,fillz,m_Metadata);
|
||||||
|
}
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz-1) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx,filly,fillz-1,m_Metadata);
|
||||||
|
}
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz+1) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx,filly,fillz+1,m_Metadata);
|
||||||
|
}
|
||||||
|
} else if ( (int)m_World->GetBlock( fillx, filly, fillz ) == E_BLOCK_REDSTONE_TORCH_ON ) { //if the torch is off
|
||||||
|
//printf("2\n");
|
||||||
|
metadata = 0;
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx-1, filly, fillz) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx-1,filly,fillz,m_Metadata);
|
||||||
|
}
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx+1, filly, fillz) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx+1,filly,fillz,m_Metadata);
|
||||||
|
}
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz-1) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx,filly,fillz-1,m_Metadata);
|
||||||
|
}
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz+1) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx,filly,fillz+1,m_Metadata);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz) == 15 ) ) { //if current block is redstone and is on
|
||||||
|
if ((int)m_Metadata == 15) { //and we want it to be on then we do nothing
|
||||||
|
} else { //we want it to be off
|
||||||
|
|
||||||
|
//if (m_Metadata == metadata) { // only do this if another fill in the same class hasn't found a lit torch yet
|
||||||
|
|
||||||
|
m_World->FastSetBlock( fillx, filly, fillz, (char)E_BLOCK_REDSTONE_WIRE, metadata ); //turn it off then check each one around it
|
||||||
|
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx-1, filly, fillz) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx-1,filly,fillz,m_Metadata);
|
||||||
|
}
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx+1, filly, fillz) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx+1,filly,fillz,m_Metadata);
|
||||||
|
}
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz-1) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx,filly,fillz-1,m_Metadata);
|
||||||
|
}
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz+1) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx,filly,fillz+1,m_Metadata);
|
||||||
|
}
|
||||||
|
|
||||||
|
//}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz) == 0 ) ) { //if current block is redstone and is off
|
||||||
|
if ((int)m_Metadata == 15) { //and we want it to be on then we check each object around it
|
||||||
|
|
||||||
|
m_World->FastSetBlock( fillx, filly, fillz, (char)E_BLOCK_REDSTONE_WIRE, m_Metadata ); //turn it off then check each one around it
|
||||||
|
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx-1, filly, fillz) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx-1,filly,fillz,m_Metadata);
|
||||||
|
}
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx+1, filly, fillz) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx+1,filly,fillz,m_Metadata);
|
||||||
|
}
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz-1) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx,filly,fillz-1,m_Metadata);
|
||||||
|
}
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz+1) != m_Metadata ) ) {
|
||||||
|
LightRedstone(fillx,filly,fillz+1,m_Metadata);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else { //we want it to be off
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz) != m_Metadata ) ) {
|
||||||
|
//if ( ( (int)m_World->GetBlock( fillx, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) ) {
|
||||||
|
//printf("3\n");
|
||||||
|
m_World->FastSetBlock( fillx, filly, fillz, (char)E_BLOCK_REDSTONE_WIRE, m_Metadata );
|
||||||
|
LightRedstone(fillx-1,filly,fillz,m_Metadata);
|
||||||
|
LightRedstone(fillx+1,filly,fillz,m_Metadata);
|
||||||
|
LightRedstone(fillx,filly,fillz-1,m_Metadata);
|
||||||
|
LightRedstone(fillx,filly,fillz+1,m_Metadata);
|
||||||
|
|
||||||
|
LightRedstone(fillx-1,filly-1,fillz,m_Metadata);
|
||||||
|
LightRedstone(fillx+1,filly-1,fillz,m_Metadata);
|
||||||
|
LightRedstone(fillx,filly-1,fillz-1,m_Metadata);
|
||||||
|
LightRedstone(fillx,filly-1,fillz+1,m_Metadata);
|
||||||
|
|
||||||
|
LightRedstone(fillx-1,filly+1,fillz,m_Metadata);
|
||||||
|
LightRedstone(fillx+1,filly+1,fillz,m_Metadata);
|
||||||
|
LightRedstone(fillx,filly+1,fillz-1,m_Metadata);
|
||||||
|
LightRedstone(fillx,filly+1,fillz+1,m_Metadata);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz) != metadata ) ) {
|
||||||
m_World->FastSetBlock( fillx, filly, fillz, (char)E_BLOCK_REDSTONE_WIRE, metadata );
|
m_World->FastSetBlock( fillx, filly, fillz, (char)E_BLOCK_REDSTONE_WIRE, metadata );
|
||||||
|
|
||||||
|
//if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx-1, filly, fillz) != metadata ) ) {
|
||||||
LightRedstone(fillx-1,filly,fillz,metadata);
|
LightRedstone(fillx-1,filly,fillz,metadata);
|
||||||
|
//}
|
||||||
|
//if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx+1, filly, fillz) != metadata ) ) {
|
||||||
LightRedstone(fillx+1,filly,fillz,metadata);
|
LightRedstone(fillx+1,filly,fillz,metadata);
|
||||||
|
//}
|
||||||
|
//if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz-1) != metadata ) ) {
|
||||||
LightRedstone(fillx,filly,fillz-1,metadata);
|
LightRedstone(fillx,filly,fillz-1,metadata);
|
||||||
|
//}
|
||||||
|
//if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz+1) != metadata ) ) {
|
||||||
LightRedstone(fillx,filly,fillz+1,metadata);
|
LightRedstone(fillx,filly,fillz+1,metadata);
|
||||||
|
//}
|
||||||
LightRedstone(fillx-1,filly-1,fillz,metadata);
|
|
||||||
LightRedstone(fillx+1,filly-1,fillz,metadata);
|
}
|
||||||
LightRedstone(fillx,filly-1,fillz-1,metadata);
|
|
||||||
LightRedstone(fillx,filly-1,fillz+1,metadata);
|
if ( ( (int)m_World->GetBlock( fillx, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz) != metadata ) ) {
|
||||||
|
m_World->FastSetBlock( fillx, filly, fillz, (char)E_BLOCK_REDSTONE_WIRE, metadata );
|
||||||
LightRedstone(fillx-1,filly+1,fillz,metadata);
|
|
||||||
LightRedstone(fillx+1,filly+1,fillz,metadata);
|
//if ( ( (int)m_World->GetBlock( fillx-1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx-1, filly, fillz) != metadata ) ) {
|
||||||
LightRedstone(fillx,filly+1,fillz-1,metadata);
|
LightRedstone(fillx-1,filly,fillz,metadata);
|
||||||
LightRedstone(fillx,filly+1,fillz+1,metadata);
|
//}
|
||||||
}
|
//if ( ( (int)m_World->GetBlock( fillx+1, filly, fillz ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx+1, filly, fillz) != metadata ) ) {
|
||||||
|
LightRedstone(fillx+1,filly,fillz,metadata);
|
||||||
|
//}
|
||||||
|
//if ( ( (int)m_World->GetBlock( fillx, filly, fillz-1 ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz-1) != metadata ) ) {
|
||||||
|
LightRedstone(fillx,filly,fillz-1,metadata);
|
||||||
|
//}
|
||||||
|
//if ( ( (int)m_World->GetBlock( fillx, filly, fillz+1 ) == E_BLOCK_REDSTONE_WIRE) && ( (int)m_World->GetBlockMeta( fillx, filly, fillz+1) != metadata ) ) {
|
||||||
|
LightRedstone(fillx,filly,fillz+1,metadata);
|
||||||
|
//}
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
return metadata;
|
||||||
|
|
||||||
}
|
}
|
@ -22,10 +22,12 @@ static char RepeaterRotationToMetaData( float a_Rotation )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LightRedstone( int, int, int, char );
|
char LightRedstone( int, int, int, char );
|
||||||
void ChangeRedstoneTorch( int, int, int, bool );
|
void ChangeRedstoneTorch( int, int, int, bool );
|
||||||
|
|
||||||
|
|
||||||
cWorld* m_World;
|
cWorld* m_World;
|
||||||
|
|
||||||
|
char m_Metadata;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user