Redstone simulator now directly accesses cChunk
* Redstone simulator performance improvements * Added return values to some functions * Minor fixes
This commit is contained in:
parent
da931da603
commit
bbc5faa723
@ -749,7 +749,7 @@ void cChunk::ProcessQueuedSetBlocks(void)
|
|||||||
{
|
{
|
||||||
if (itr->m_Tick <= CurrTick)
|
if (itr->m_Tick <= CurrTick)
|
||||||
{
|
{
|
||||||
if (itr->m_PreviousType != E_BLOCK_AIR) // PreviousType defaults to -1 if not specified
|
if (itr->m_PreviousType != E_BLOCK_AIR) // PreviousType defaults to 0 if not specified
|
||||||
{
|
{
|
||||||
if (GetBlock(itr->m_RelX, itr->m_RelY, itr->m_RelZ) == itr->m_PreviousType)
|
if (GetBlock(itr->m_RelX, itr->m_RelY, itr->m_RelZ) == itr->m_PreviousType)
|
||||||
{
|
{
|
||||||
@ -1638,6 +1638,24 @@ void cChunk::FastSetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockT
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cChunk::SetMeta(int a_BlockIdx, NIBBLETYPE a_Meta)
|
||||||
|
{
|
||||||
|
if (GetNibble(m_BlockMeta, a_BlockIdx) == a_Meta)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
MarkDirty();
|
||||||
|
SetNibble(m_BlockMeta, a_BlockIdx, a_Meta);
|
||||||
|
Vector3i Coords(IndexToCoordinate(a_BlockIdx));
|
||||||
|
|
||||||
|
m_PendingSendBlocks.push_back(sSetBlock(m_PosX, m_PosZ, Coords.x, Coords.y, Coords.z, GetBlock(a_BlockIdx), a_Meta));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cChunk::SendBlockTo(int a_RelX, int a_RelY, int a_RelZ, cClientHandle * a_Client)
|
void cChunk::SendBlockTo(int a_RelX, int a_RelY, int a_RelZ, cClientHandle * a_Client)
|
||||||
{
|
{
|
||||||
// The coords must be valid, because the upper level already does chunk lookup. No need to check them again.
|
// The coords must be valid, because the upper level already does chunk lookup. No need to check them again.
|
||||||
|
@ -322,8 +322,8 @@ public:
|
|||||||
|
|
||||||
inline NIBBLETYPE GetMeta(int a_RelX, int a_RelY, int a_RelZ) const { return cChunkDef::GetNibble(m_BlockMeta, a_RelX, a_RelY, a_RelZ); }
|
inline NIBBLETYPE GetMeta(int a_RelX, int a_RelY, int a_RelZ) const { return cChunkDef::GetNibble(m_BlockMeta, a_RelX, a_RelY, a_RelZ); }
|
||||||
inline NIBBLETYPE GetMeta(int a_BlockIdx) const { return cChunkDef::GetNibble(m_BlockMeta, a_BlockIdx); }
|
inline NIBBLETYPE GetMeta(int a_BlockIdx) const { return cChunkDef::GetNibble(m_BlockMeta, a_BlockIdx); }
|
||||||
inline void SetMeta(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE a_Meta) { cChunkDef::SetNibble(m_BlockMeta, a_RelX, a_RelY, a_RelZ, a_Meta); }
|
inline void SetMeta(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE a_Meta) { SetMeta(MakeIndex(a_RelX, a_RelY, a_RelZ), a_Meta); }
|
||||||
inline void SetMeta(int a_BlockIdx, NIBBLETYPE a_Meta) { cChunkDef::SetNibble(m_BlockMeta, a_BlockIdx, a_Meta); }
|
void SetMeta(int a_BlockIdx, NIBBLETYPE a_Meta);
|
||||||
|
|
||||||
inline NIBBLETYPE GetBlockLight(int a_RelX, int a_RelY, int a_RelZ) const {return cChunkDef::GetNibble(m_BlockLight, a_RelX, a_RelY, a_RelZ); }
|
inline NIBBLETYPE GetBlockLight(int a_RelX, int a_RelY, int a_RelZ) const {return cChunkDef::GetNibble(m_BlockLight, a_RelX, a_RelY, a_RelZ); }
|
||||||
inline NIBBLETYPE GetSkyLight (int a_RelX, int a_RelY, int a_RelZ) const {return cChunkDef::GetNibble(m_BlockSkyLight, a_RelX, a_RelY, a_RelZ, true); }
|
inline NIBBLETYPE GetSkyLight (int a_RelX, int a_RelY, int a_RelZ) const {return cChunkDef::GetNibble(m_BlockSkyLight, a_RelX, a_RelY, a_RelZ, true); }
|
||||||
@ -420,7 +420,6 @@ private:
|
|||||||
cWorld * m_World;
|
cWorld * m_World;
|
||||||
cChunkMap * m_ChunkMap;
|
cChunkMap * m_ChunkMap;
|
||||||
|
|
||||||
// TODO: Make these pointers and don't allocate what isn't needed
|
|
||||||
COMPRESSED_BLOCKTYPE m_BlockTypes;
|
COMPRESSED_BLOCKTYPE m_BlockTypes;
|
||||||
COMPRESSED_NIBBLETYPE m_BlockMeta;
|
COMPRESSED_NIBBLETYPE m_BlockMeta;
|
||||||
COMPRESSED_NIBBLETYPE m_BlockLight;
|
COMPRESSED_NIBBLETYPE m_BlockLight;
|
||||||
|
@ -1248,8 +1248,6 @@ void cChunkMap::SetBlockMeta(int a_BlockX, int a_BlockY, int a_BlockZ, NIBBLETYP
|
|||||||
if ((Chunk != NULL) && Chunk->IsValid())
|
if ((Chunk != NULL) && Chunk->IsValid())
|
||||||
{
|
{
|
||||||
Chunk->SetMeta(a_BlockX, a_BlockY, a_BlockZ, a_BlockMeta);
|
Chunk->SetMeta(a_BlockX, a_BlockY, a_BlockZ, a_BlockMeta);
|
||||||
Chunk->MarkDirty();
|
|
||||||
Chunk->SendBlockTo(a_BlockX, a_BlockY, a_BlockZ, NULL);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ AString cClientHandle::FormatMessageType(bool ShouldAppendChatPrefixes, eMessage
|
|||||||
{
|
{
|
||||||
switch (a_ChatPrefix)
|
switch (a_ChatPrefix)
|
||||||
{
|
{
|
||||||
case mtCustom: return AString();
|
case mtCustom: return "";
|
||||||
case mtFailure: return FormatChatPrefix(ShouldAppendChatPrefixes, "INFO", cChatColor::Rose, cChatColor::White);
|
case mtFailure: return FormatChatPrefix(ShouldAppendChatPrefixes, "INFO", cChatColor::Rose, cChatColor::White);
|
||||||
case mtInformation: return FormatChatPrefix(ShouldAppendChatPrefixes, "INFO", cChatColor::Yellow, cChatColor::White);
|
case mtInformation: return FormatChatPrefix(ShouldAppendChatPrefixes, "INFO", cChatColor::Yellow, cChatColor::White);
|
||||||
case mtSuccess: return FormatChatPrefix(ShouldAppendChatPrefixes, "INFO", cChatColor::Green, cChatColor::White);
|
case mtSuccess: return FormatChatPrefix(ShouldAppendChatPrefixes, "INFO", cChatColor::Green, cChatColor::White);
|
||||||
@ -220,6 +220,7 @@ AString cClientHandle::FormatMessageType(bool ShouldAppendChatPrefixes, eMessage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ASSERT(!"Unhandled chat prefix type!");
|
ASSERT(!"Unhandled chat prefix type!");
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -441,6 +441,7 @@ bool cEntity::ArmorCoversAgainst(eDamageType a_DamageType)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ASSERT(!"Invalid damage type!");
|
ASSERT(!"Invalid damage type!");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -88,8 +88,7 @@ void cFallingBlock::Tick(float a_Dt, cChunk & a_Chunk)
|
|||||||
AddPosition(GetSpeed() * MilliDt);
|
AddPosition(GetSpeed() * MilliDt);
|
||||||
|
|
||||||
// If not static (One billionth precision) broadcast movement.
|
// If not static (One billionth precision) broadcast movement.
|
||||||
static const float epsilon = 0.000000001;
|
if ((fabs(GetSpeedX()) > std::numeric_limits<double>::epsilon()) || (fabs(GetSpeedZ()) > std::numeric_limits<double>::epsilon()))
|
||||||
if ((fabs(GetSpeedX()) > epsilon) || (fabs(GetSpeedZ()) > epsilon))
|
|
||||||
{
|
{
|
||||||
BroadcastMovementUpdate();
|
BroadcastMovementUpdate();
|
||||||
}
|
}
|
||||||
|
@ -108,14 +108,13 @@ void cAggressiveMonster::Attack(float a_Dt)
|
|||||||
|
|
||||||
bool cAggressiveMonster::IsMovingToTargetPosition()
|
bool cAggressiveMonster::IsMovingToTargetPosition()
|
||||||
{
|
{
|
||||||
float epsilon = 0.000000000001;
|
|
||||||
// Difference between destination x and target x is negligible (to 10^-12 precision)
|
// Difference between destination x and target x is negligible (to 10^-12 precision)
|
||||||
if (fabsf((float)m_FinalDestination.x - (float)m_Target->GetPosX()) < epsilon)
|
if (fabsf((float)m_FinalDestination.x - (float)m_Target->GetPosX()) < std::numeric_limits<float>::epsilon())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Difference between destination z and target z is negligible (to 10^-12 precision)
|
// Difference between destination z and target z is negligible (to 10^-12 precision)
|
||||||
else if (fabsf(m_FinalDestination.z - (float)m_Target->GetPosZ()) > epsilon)
|
else if (fabsf((float)m_FinalDestination.z - (float)m_Target->GetPosZ()) > std::numeric_limits<float>::epsilon())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -55,13 +55,13 @@ private:
|
|||||||
|
|
||||||
struct sSimulatedPlayerToggleableList // Define structure of the list containing simulate-on-update blocks (such as trapdoors that respond once to a block update, and can be toggled by a player)
|
struct sSimulatedPlayerToggleableList // Define structure of the list containing simulate-on-update blocks (such as trapdoors that respond once to a block update, and can be toggled by a player)
|
||||||
{
|
{
|
||||||
Vector3i a_BlockPos;
|
Vector3i a_RelBlockPos;
|
||||||
bool WasLastStatePowered; // Was the last state powered or not? Determines whether a source update has happened and if I should resimulate
|
bool WasLastStatePowered; // Was the last state powered or not? Determines whether a source update has happened and if I should resimulate
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sRepeatersDelayList // Define structure of list containing repeaters' delay states
|
struct sRepeatersDelayList // Define structure of list containing repeaters' delay states
|
||||||
{
|
{
|
||||||
Vector3i a_BlockPos;
|
Vector3i a_RelBlockPos;
|
||||||
unsigned char a_DelayTicks; // For how many ticks should the repeater delay
|
unsigned char a_DelayTicks; // For how many ticks should the repeater delay
|
||||||
unsigned char a_ElapsedTicks; // How much of the previous has been elapsed?
|
unsigned char a_ElapsedTicks; // How much of the previous has been elapsed?
|
||||||
bool ShouldPowerOn; // What happens when the delay time is fulfilled?
|
bool ShouldPowerOn; // What happens when the delay time is fulfilled?
|
||||||
@ -91,80 +91,80 @@ private:
|
|||||||
|
|
||||||
/* ====== SOURCES ====== */
|
/* ====== SOURCES ====== */
|
||||||
/** Handles the redstone torch */
|
/** Handles the redstone torch */
|
||||||
void HandleRedstoneTorch(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_MyState);
|
void HandleRedstoneTorch(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, BLOCKTYPE a_MyState);
|
||||||
/** Handles the redstone block */
|
/** Handles the redstone block */
|
||||||
void HandleRedstoneBlock(int a_BlockX, int a_BlockY, int a_BlockZ);
|
void HandleRedstoneBlock(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/** Handles levers */
|
/** Handles levers */
|
||||||
void HandleRedstoneLever(int a_BlockX, int a_BlockY, int a_BlockZ);
|
void HandleRedstoneLever(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/** Handles buttons */
|
/** Handles buttons */
|
||||||
void HandleRedstoneButton(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType);
|
void HandleRedstoneButton(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/** Handles daylight sensors */
|
/** Handles daylight sensors */
|
||||||
void HandleDaylightSensor(int a_BlockX, int a_BlockY, int a_BlockZ);
|
void HandleDaylightSensor(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/** Handles pressure plates */
|
/** Handles pressure plates */
|
||||||
void HandlePressurePlate(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_MyType);
|
void HandlePressurePlate(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, BLOCKTYPE a_MyType);
|
||||||
/* ==================== */
|
/* ==================== */
|
||||||
|
|
||||||
/* ====== CARRIERS ====== */
|
/* ====== CARRIERS ====== */
|
||||||
/** Handles redstone wire */
|
/** Handles redstone wire */
|
||||||
void HandleRedstoneWire(int a_BlockX, int a_BlockY, int a_BlockZ);
|
void HandleRedstoneWire(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/** Handles repeaters */
|
/** Handles repeaters */
|
||||||
void HandleRedstoneRepeater(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_MyState);
|
void HandleRedstoneRepeater(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, BLOCKTYPE a_MyState);
|
||||||
/* ====================== */
|
/* ====================== */
|
||||||
|
|
||||||
/* ====== DEVICES ====== */
|
/* ====== DEVICES ====== */
|
||||||
/** Handles pistons */
|
/** Handles pistons */
|
||||||
void HandlePiston(int a_BlockX, int a_BlockY, int a_BlockZ);
|
void HandlePiston(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/** Handles dispensers and droppers */
|
/** Handles dispensers and droppers */
|
||||||
void HandleDropSpenser(int a_BlockX, int a_BlockY, int a_BlockZ);
|
void HandleDropSpenser(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/** Handles TNT (exploding) */
|
/** Handles TNT (exploding) */
|
||||||
void HandleTNT(int a_BlockX, int a_BlockY, int a_BlockZ);
|
void HandleTNT(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/** Handles redstone lamps */
|
/** Handles redstone lamps */
|
||||||
void HandleRedstoneLamp(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_MyState);
|
void HandleRedstoneLamp(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, BLOCKTYPE a_MyState);
|
||||||
/** Handles doords */
|
/** Handles doords */
|
||||||
void HandleDoor(int a_BlockX, int a_BlockY, int a_BlockZ);
|
void HandleDoor(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/** Handles command blocks */
|
/** Handles command blocks */
|
||||||
void HandleCommandBlock(int a_BlockX, int a_BlockY, int a_BlockZ);
|
void HandleCommandBlock(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/** Handles activator, detector, and powered rails */
|
/** Handles activator, detector, and powered rails */
|
||||||
void HandleRail(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_MyType);
|
void HandleRail(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, BLOCKTYPE a_MyType);
|
||||||
/** Handles trapdoors */
|
/** Handles trapdoors */
|
||||||
void HandleTrapdoor(int a_BlockX, int a_BlockY, int a_BlockZ);
|
void HandleTrapdoor(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/** Handles fence gates */
|
/** Handles fence gates */
|
||||||
void HandleFenceGate(int a_BlockX, int a_BlockY, int a_BlockZ);
|
void HandleFenceGate(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/** Handles noteblocks */
|
/** Handles noteblocks */
|
||||||
void HandleNoteBlock(int a_BlockX, int a_BlockY, int a_BlockZ);
|
void HandleNoteBlock(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/* ===================== */
|
/* ===================== */
|
||||||
|
|
||||||
/* ====== Helper functions ====== */
|
/* ====== Helper functions ====== */
|
||||||
/** Marks a block as powered */
|
/** Marks a block as powered */
|
||||||
void SetBlockPowered(int a_BlockX, int a_BlockY, int a_BlockZ, int a_SourceX, int a_SourceY, int a_SourceZ, BLOCKTYPE a_SourceBlock, unsigned char a_PowerLevel = MAX_POWER_LEVEL);
|
void SetBlockPowered(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, int a_RelSourceX, int a_RelSourceY, int a_RelSourceZ, unsigned char a_PowerLevel = MAX_POWER_LEVEL);
|
||||||
/** Marks a block as being powered through another block */
|
/** Marks a block as being powered through another block */
|
||||||
void SetBlockLinkedPowered(int a_BlockX, int a_BlockY, int a_BlockZ, int a_MiddleX, int a_MiddleY, int a_MiddleZ, int a_SourceX, int a_SourceY, int a_SourceZ, BLOCKTYPE a_SourceBlock, BLOCKTYPE a_MiddeBlock, unsigned char a_PowerLevel = MAX_POWER_LEVEL);
|
void SetBlockLinkedPowered(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, int a_RelMiddleX, int a_RelMiddleY, int a_RelMiddleZ, int a_RelSourceX, int a_RelSourceY, int a_RelSourceZ, BLOCKTYPE a_MiddeBlock, unsigned char a_PowerLevel = MAX_POWER_LEVEL);
|
||||||
/** Marks a block as simulated, who should not be simulated further unless their power state changes, to accomodate a player manually toggling the block without triggering the simulator toggling it back */
|
/** Marks a block as simulated, who should not be simulated further unless their power state changes, to accomodate a player manually toggling the block without triggering the simulator toggling it back */
|
||||||
void SetPlayerToggleableBlockAsSimulated(int a_BlockX, int a_BlockY, int a_BlockZ, bool WasLastStatePowered);
|
void SetPlayerToggleableBlockAsSimulated(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, bool WasLastStatePowered);
|
||||||
/** Marks the second block in a direction as linked powered */
|
/** Marks the second block in a direction as linked powered */
|
||||||
void SetDirectionLinkedPowered(int a_BlockX, int a_BlockY, int a_BlockZ, char a_Direction, BLOCKTYPE a_SourceBlock, unsigned char a_PowerLevel = MAX_POWER_LEVEL);
|
void SetDirectionLinkedPowered(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, char a_Direction, unsigned char a_PowerLevel = MAX_POWER_LEVEL);
|
||||||
/** Marks all blocks immediately surrounding a coordinate as powered */
|
/** Marks all blocks immediately surrounding a coordinate as powered */
|
||||||
void SetAllDirsAsPowered(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_SourceBlock, unsigned char a_PowerLevel = MAX_POWER_LEVEL);
|
void SetAllDirsAsPowered(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, unsigned char a_PowerLevel = MAX_POWER_LEVEL);
|
||||||
/** Queues a repeater to be powered or unpowered */
|
/** Queues a repeater to be powered or unpowered */
|
||||||
void QueueRepeaterPowerChange(int a_BlockX, int a_BlockY, int a_BlockZ, NIBBLETYPE a_Meta, bool ShouldPowerOn);
|
void QueueRepeaterPowerChange(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, NIBBLETYPE a_Meta, bool ShouldPowerOn);
|
||||||
|
|
||||||
/** Returns if a coordinate is powered or linked powered */
|
/** Returns if a coordinate is powered or linked powered */
|
||||||
bool AreCoordsPowered(int a_BlockX, int a_BlockY, int a_BlockZ) { return AreCoordsDirectlyPowered(a_BlockX, a_BlockY, a_BlockZ) || AreCoordsLinkedPowered(a_BlockX, a_BlockY, a_BlockZ); }
|
bool AreCoordsPowered(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ) { return AreCoordsDirectlyPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ) || AreCoordsLinkedPowered(a_RelBlockX, a_RelBlockY, a_RelBlockZ); }
|
||||||
/** Returns if a coordinate is in the directly powered blocks list */
|
/** Returns if a coordinate is in the directly powered blocks list */
|
||||||
bool AreCoordsDirectlyPowered(int a_BlockX, int a_BlockY, int a_BlockZ);
|
bool AreCoordsDirectlyPowered(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/** Returns if a coordinate is in the indirectly powered blocks list */
|
/** Returns if a coordinate is in the indirectly powered blocks list */
|
||||||
bool AreCoordsLinkedPowered(int a_BlockX, int a_BlockY, int a_BlockZ);
|
bool AreCoordsLinkedPowered(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ);
|
||||||
/** Returns if a coordinate was marked as simulated (for blocks toggleable by players) */
|
/** Returns if a coordinate was marked as simulated (for blocks toggleable by players) */
|
||||||
bool AreCoordsSimulated(int a_BlockX, int a_BlockY, int a_BlockZ, bool IsCurrentStatePowered);
|
bool AreCoordsSimulated(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, bool IsCurrentStatePowered);
|
||||||
/** Returns if a repeater is powered */
|
/** Returns if a repeater is powered */
|
||||||
bool IsRepeaterPowered(int a_BlockX, int a_BlockY, int a_BlockZ, NIBBLETYPE a_Meta);
|
bool IsRepeaterPowered(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, NIBBLETYPE a_Meta);
|
||||||
/** Returns if a repeater is locked */
|
/** Returns if a repeater is locked */
|
||||||
bool IsRepeaterLocked(int a_BlockX, int a_BlockY, int a_BlockZ, NIBBLETYPE a_Meta);
|
bool IsRepeaterLocked(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, NIBBLETYPE a_Meta);
|
||||||
/** Returns if a piston is powered */
|
/** Returns if a piston is powered */
|
||||||
bool IsPistonPowered(int a_BlockX, int a_BlockY, int a_BlockZ, NIBBLETYPE a_Meta);
|
bool IsPistonPowered(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, NIBBLETYPE a_Meta);
|
||||||
/** Returns if a wire is powered
|
/** Returns if a wire is powered
|
||||||
The only diffence between this and a normal AreCoordsPowered is that this function checks for a wire powering another wire */
|
The only diffence between this and a normal AreCoordsPowered is that this function checks for a wire powering another wire */
|
||||||
bool IsWirePowered(int a_BlockX, int a_BlockY, int a_BlockZ, unsigned char & a_PowerLevel);
|
bool IsWirePowered(int a_RelBlockX, int a_RelBlockY, int a_RelBlockZ, unsigned char & a_PowerLevel);
|
||||||
|
|
||||||
|
|
||||||
/** Returns if lever metadata marks it as emitting power */
|
/** Returns if lever metadata marks it as emitting power */
|
||||||
|
@ -351,7 +351,7 @@ public:
|
|||||||
/** Is the trapdoor open? Returns false if there is no trapdoor at the specified coords. */
|
/** Is the trapdoor open? Returns false if there is no trapdoor at the specified coords. */
|
||||||
bool IsTrapdoorOpen(int a_BlockX, int a_BlockY, int a_BlockZ); // tolua_export
|
bool IsTrapdoorOpen(int a_BlockX, int a_BlockY, int a_BlockZ); // tolua_export
|
||||||
|
|
||||||
/** Set the state of a trapdoor. Returns true if the trapdoor was update, false if there was no trapdoor at those coords. */
|
/** Set the state of a trapdoor. Returns true if the trapdoor was updated, false if there was no trapdoor at those coords. */
|
||||||
bool SetTrapdoorOpen(int a_BlockX, int a_BlockY, int a_BlockZ, bool a_Open); // tolua_export
|
bool SetTrapdoorOpen(int a_BlockX, int a_BlockY, int a_BlockZ, bool a_Open); // tolua_export
|
||||||
|
|
||||||
/** Regenerate the given chunk: */
|
/** Regenerate the given chunk: */
|
||||||
|
Loading…
Reference in New Issue
Block a user