diff options
Diffstat (limited to '')
-rw-r--r-- | src/Blocks/BlockCactus.h | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/Blocks/BlockCactus.h b/src/Blocks/BlockCactus.h index cb6cecc7b..29e86d085 100644 --- a/src/Blocks/BlockCactus.h +++ b/src/Blocks/BlockCactus.h @@ -1,18 +1,19 @@ #pragma once -#include "BlockHandler.h" +#include "BlockPlant.h" class cBlockCactusHandler : - public cBlockHandler + public cBlockPlant { + typedef cBlockPlant Super; public: cBlockCactusHandler(BLOCKTYPE a_BlockType) - : cBlockHandler(a_BlockType) + : Super(a_BlockType, false) { } @@ -64,7 +65,10 @@ public: virtual void OnUpdate(cChunkInterface & cChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_PluginInterface, cChunk & a_Chunk, int a_RelX, int a_RelY, int a_RelZ) override { - a_Chunk.GetWorld()->GrowCactus(a_RelX + a_Chunk.GetPosX() * cChunkDef::Width, a_RelY, a_RelZ + a_Chunk.GetPosZ() * cChunkDef::Width, 1); + if (CanGrow(a_Chunk, a_RelX, a_RelY, a_RelZ) == paGrowth) + { + a_Chunk.GetWorld()->GrowCactus(a_RelX + a_Chunk.GetPosX() * cChunkDef::Width, a_RelY, a_RelZ + a_Chunk.GetPosZ() * cChunkDef::Width, 1); + } } virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) override @@ -72,6 +76,19 @@ public: UNUSED(a_Meta); return 7; } + +protected: + + virtual PlantAction CanGrow(cChunk & a_Chunk, int a_RelX, int a_RelY, int a_RelZ) override + { + auto Action = paStay; + if (((a_RelY + 1) < cChunkDef::Height) && (a_Chunk.GetBlock(a_RelX, a_RelY + 1, a_RelZ) == E_BLOCK_AIR)) + { + Action = Super::CanGrow(a_Chunk, a_RelX, a_RelY, a_RelZ); + } + + return Action; + } } ; |