From 6fbc98def25d1b9b23a3a416197dc53a39ca7620 Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Sat, 25 Oct 2014 00:22:31 +0100 Subject: Fixed some block checks * Fixes #1330 --- src/Blocks/BlockPressurePlate.h | 3 +-- src/Blocks/BlockRail.h | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) (limited to 'src/Blocks') diff --git a/src/Blocks/BlockPressurePlate.h b/src/Blocks/BlockPressurePlate.h index a5c34a776..bd2f283a2 100644 --- a/src/Blocks/BlockPressurePlate.h +++ b/src/Blocks/BlockPressurePlate.h @@ -28,8 +28,7 @@ public: return false; } - BLOCKTYPE BlockBelow = a_Chunk.GetBlock(a_RelX, a_RelY - 1, a_RelZ); - return (cBlockInfo::IsSolid(BlockBelow)); + return (cBlockInfo::FullyOccupiesVoxel(a_Chunk.GetBlock(a_RelX, a_RelY - 1, a_RelZ))); } } ; diff --git a/src/Blocks/BlockRail.h b/src/Blocks/BlockRail.h index 87ce069ab..533a6e900 100644 --- a/src/Blocks/BlockRail.h +++ b/src/Blocks/BlockRail.h @@ -98,7 +98,7 @@ public: { return false; } - if (!cBlockInfo::IsSolid(a_Chunk.GetBlock(a_RelX, a_RelY - 1, a_RelZ))) + if (!cBlockInfo::FullyOccupiesVoxel(a_Chunk.GetBlock(a_RelX, a_RelY - 1, a_RelZ))) { return false; } @@ -130,7 +130,7 @@ public: // Too close to the edge, cannot simulate return true; } - return cBlockInfo::IsSolid(BlockType); + return cBlockInfo::FullyOccupiesVoxel(BlockType); } } return true; -- cgit v1.2.3 From 85c298d73e871daadf91671cdae9db83e30f9029 Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Sat, 25 Oct 2014 21:54:00 +0100 Subject: Cleaned up simulators --- src/Blocks/BlockTorch.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/Blocks') diff --git a/src/Blocks/BlockTorch.h b/src/Blocks/BlockTorch.h index e77bbd1b8..d63df94cf 100644 --- a/src/Blocks/BlockTorch.h +++ b/src/Blocks/BlockTorch.h @@ -2,6 +2,7 @@ #include "BlockHandler.h" #include "../Chunk.h" +#include "ChunkInterface.h" #include "MetaRotator.h" -- cgit v1.2.3 From 8e753fa590c60b357b10e013a4224381f8e2f6ea Mon Sep 17 00:00:00 2001 From: Howaner Date: Mon, 1 Dec 2014 18:10:37 +0100 Subject: Added cocoa pod. --- src/Blocks/BlockCocoaPod.h | 96 +++++++++++++++++++++++++++++++++++++++++++++ src/Blocks/BlockHandler.cpp | 2 + src/Blocks/CMakeLists.txt | 1 + 3 files changed, 99 insertions(+) create mode 100644 src/Blocks/BlockCocoaPod.h (limited to 'src/Blocks') diff --git a/src/Blocks/BlockCocoaPod.h b/src/Blocks/BlockCocoaPod.h new file mode 100644 index 000000000..9e1d64cc6 --- /dev/null +++ b/src/Blocks/BlockCocoaPod.h @@ -0,0 +1,96 @@ +#pragma once + +#include "BlockHandler.h" +#include "../FastRandom.h" + + + + + +class cBlockCocoaPodHandler : + public cBlockHandler +{ +public: + cBlockCocoaPodHandler(BLOCKTYPE a_BlockType) + : cBlockHandler(a_BlockType) + { + } + + + virtual bool CanBeAt(cChunkInterface & a_ChunkInterface, int a_RelX, int a_RelY, int a_RelZ, const cChunk & a_Chunk) override + { + eBlockFace BlockFace = MetaToBlockFace(a_Chunk.GetMeta(a_RelX, a_RelY, a_RelZ)); + AddFaceDirection(a_RelX, a_RelY, a_RelZ, BlockFace, true); + + BLOCKTYPE BlockType; + NIBBLETYPE BlockMeta; + a_Chunk.UnboundedRelGetBlock(a_RelX, a_RelY, a_RelZ, BlockType, BlockMeta); + + return ((BlockType == E_BLOCK_LOG) && ((BlockMeta & 0x3) == E_META_LOG_JUNGLE)); + } + + + virtual void OnUpdate(cChunkInterface & cChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_PluginInterface, cChunk & a_Chunk, int a_RelX, int a_RelY, int a_RelZ) override + { + cFastRandom Random; + + if (Random.NextInt(5) == 0) + { + NIBBLETYPE Meta = a_Chunk.GetMeta(a_RelX, a_RelY, a_RelZ); + NIBBLETYPE TypeMeta = Meta & 0x03; + int GrowState = (Meta & 0x12) >> 2; + + if (GrowState < 2) + { + ++GrowState; + a_Chunk.SetMeta(a_RelX, a_RelY, a_RelZ, (NIBBLETYPE) (GrowState << 2 | TypeMeta)); + } + } + } + + + virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) override + { + int GrowState = (a_BlockMeta & 0x12) >> 2; + a_Pickups.Add(E_ITEM_DYE, ((GrowState >= 2) ? 3 : 1), E_META_DYE_BROWN); + } + + + static eBlockFace MetaToBlockFace(NIBBLETYPE a_Meta) + { + switch (a_Meta & 0x3) + { + case 0: return BLOCK_FACE_ZM; + case 1: return BLOCK_FACE_XP; + case 2: return BLOCK_FACE_ZP; + case 3: return BLOCK_FACE_XM; + default: + { + ASSERT(!"Bad meta"); + return BLOCK_FACE_NONE; + } + } + } + + + static NIBBLETYPE BlockFaceToMeta(eBlockFace a_BlockFace) + { + switch (a_BlockFace) + { + case BLOCK_FACE_ZM: return 0; + case BLOCK_FACE_XM: return 3; + case BLOCK_FACE_XP: return 1; + case BLOCK_FACE_ZP: return 2; + default: + { + ASSERT(!"Unknown face"); + return 0; + } + } + } + +} ; + + + + diff --git a/src/Blocks/BlockHandler.cpp b/src/Blocks/BlockHandler.cpp index 60f13a747..d532aa1dc 100644 --- a/src/Blocks/BlockHandler.cpp +++ b/src/Blocks/BlockHandler.cpp @@ -17,6 +17,7 @@ #include "BlockChest.h" #include "BlockCloth.h" #include "BlockCobWeb.h" +#include "BlockCocoaPod.h" #include "BlockCommandBlock.h" #include "BlockComparator.h" #include "BlockCrops.h" @@ -198,6 +199,7 @@ cBlockHandler * cBlockHandler::CreateBlockHandler(BLOCKTYPE a_BlockType) case E_BLOCK_CAULDRON: return new cBlockCauldronHandler (a_BlockType); case E_BLOCK_CHEST: return new cBlockChestHandler (a_BlockType); case E_BLOCK_COAL_ORE: return new cBlockOreHandler (a_BlockType); + case E_BLOCK_COCOA_POD: return new cBlockCocoaPodHandler (a_BlockType); case E_BLOCK_COMMAND_BLOCK: return new cBlockCommandBlockHandler (a_BlockType); case E_BLOCK_ACTIVE_COMPARATOR: return new cBlockComparatorHandler (a_BlockType); case E_BLOCK_COBBLESTONE: return new cBlockStoneHandler (a_BlockType); diff --git a/src/Blocks/CMakeLists.txt b/src/Blocks/CMakeLists.txt index eed949aab..ed3e321d4 100644 --- a/src/Blocks/CMakeLists.txt +++ b/src/Blocks/CMakeLists.txt @@ -24,6 +24,7 @@ SET (HDRS BlockChest.h BlockCloth.h BlockCobWeb.h + BlockCocoaPod.h BlockCommandBlock.h BlockComparator.h BlockCrops.h -- cgit v1.2.3 From 2a8c234f464ebf9986132c8ba435f1a1cec3461c Mon Sep 17 00:00:00 2001 From: Howaner Date: Sat, 13 Dec 2014 20:31:37 +0100 Subject: Fixes --- src/Blocks/BlockCocoaPod.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/Blocks') diff --git a/src/Blocks/BlockCocoaPod.h b/src/Blocks/BlockCocoaPod.h index 9e1d64cc6..cfd3b4479 100644 --- a/src/Blocks/BlockCocoaPod.h +++ b/src/Blocks/BlockCocoaPod.h @@ -38,7 +38,7 @@ public: { NIBBLETYPE Meta = a_Chunk.GetMeta(a_RelX, a_RelY, a_RelZ); NIBBLETYPE TypeMeta = Meta & 0x03; - int GrowState = (Meta & 0x12) >> 2; + int GrowState = (Meta & 0x0f) >> 2; if (GrowState < 2) { @@ -51,7 +51,7 @@ public: virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) override { - int GrowState = (a_BlockMeta & 0x12) >> 2; + int GrowState = (a_BlockMeta & 0x0f) >> 2; a_Pickups.Add(E_ITEM_DYE, ((GrowState >= 2) ? 3 : 1), E_META_DYE_BROWN); } -- cgit v1.2.3 From bed456033f9856ad110368a4eb9c8317c4378acb Mon Sep 17 00:00:00 2001 From: Howaner Date: Sun, 14 Dec 2014 13:14:48 +0100 Subject: "& 0x0f" isn't needed --- src/Blocks/BlockCocoaPod.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/Blocks') diff --git a/src/Blocks/BlockCocoaPod.h b/src/Blocks/BlockCocoaPod.h index cfd3b4479..1b659d48f 100644 --- a/src/Blocks/BlockCocoaPod.h +++ b/src/Blocks/BlockCocoaPod.h @@ -38,7 +38,7 @@ public: { NIBBLETYPE Meta = a_Chunk.GetMeta(a_RelX, a_RelY, a_RelZ); NIBBLETYPE TypeMeta = Meta & 0x03; - int GrowState = (Meta & 0x0f) >> 2; + int GrowState = Meta >> 2; if (GrowState < 2) { @@ -51,7 +51,7 @@ public: virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) override { - int GrowState = (a_BlockMeta & 0x0f) >> 2; + int GrowState = a_BlockMeta >> 2; a_Pickups.Add(E_ITEM_DYE, ((GrowState >= 2) ? 3 : 1), E_META_DYE_BROWN); } -- cgit v1.2.3 From 8d9049603bba72f55f1fa9e47f281bb7d8bfca37 Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Tue, 16 Dec 2014 23:18:59 +0000 Subject: NULL -> nullptr --- src/Blocks/BlockTallGrass.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Blocks') diff --git a/src/Blocks/BlockTallGrass.h b/src/Blocks/BlockTallGrass.h index 8e821b899..4134a01f8 100644 --- a/src/Blocks/BlockTallGrass.h +++ b/src/Blocks/BlockTallGrass.h @@ -38,7 +38,7 @@ public: virtual void DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_BlockPluginInterface, cEntity * a_Digger, int a_BlockX, int a_BlockY, int a_BlockZ, bool a_CanDrop) override { - if (a_CanDrop && (a_Digger != NULL) && (a_Digger->GetEquippedWeapon().m_ItemType == E_ITEM_SHEARS)) + if (a_CanDrop && (a_Digger != nullptr) && (a_Digger->GetEquippedWeapon().m_ItemType == E_ITEM_SHEARS)) { NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ); cItems Drops; -- cgit v1.2.3