diff options
author | Samuel Barney <samjbarney@gmail.com> | 2015-08-19 19:05:30 +0200 |
---|---|---|
committer | Samuel Barney <samjbarney@gmail.com> | 2015-08-19 19:05:30 +0200 |
commit | b5ed23d2a6696586b70b11a1bed51f4565079e5d (patch) | |
tree | d4c4ebe5a88eaeba8ce9d53122c9eb92e297870c /src/Blocks/BlockCactus.h | |
parent | Merge pull request #2439 from cuberite/AppveyorYml (diff) | |
parent | * Logic for handling plant growth has been centralized into cBlockPlant, and all growable plants now inherit from it. (diff) | |
download | cuberite-b5ed23d2a6696586b70b11a1bed51f4565079e5d.tar cuberite-b5ed23d2a6696586b70b11a1bed51f4565079e5d.tar.gz cuberite-b5ed23d2a6696586b70b11a1bed51f4565079e5d.tar.bz2 cuberite-b5ed23d2a6696586b70b11a1bed51f4565079e5d.tar.lz cuberite-b5ed23d2a6696586b70b11a1bed51f4565079e5d.tar.xz cuberite-b5ed23d2a6696586b70b11a1bed51f4565079e5d.tar.zst cuberite-b5ed23d2a6696586b70b11a1bed51f4565079e5d.zip |
Diffstat (limited to 'src/Blocks/BlockCactus.h')
-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; + } } ; |