diff options
Diffstat (limited to '')
-rw-r--r-- | src/Items/ItemPainting.h | 125 |
1 files changed, 68 insertions, 57 deletions
diff --git a/src/Items/ItemPainting.h b/src/Items/ItemPainting.h index f9fa0a601..cc1d02ac4 100644 --- a/src/Items/ItemPainting.h +++ b/src/Items/ItemPainting.h @@ -10,82 +10,93 @@ -class cItemPaintingHandler : +class cItemPaintingHandler: public cItemHandler { + using Super = cItemHandler; + public: - cItemPaintingHandler(int a_ItemType) - : cItemHandler(a_ItemType) + + cItemPaintingHandler(int a_ItemType): + Super(a_ItemType) { } + + virtual bool OnItemUse( - cWorld * a_World, cPlayer * a_Player, cBlockPluginInterface & a_PluginInterface, const cItem & a_Item, - int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace + cWorld * a_World, + cPlayer * a_Player, + cBlockPluginInterface & a_PluginInterface, + const cItem & a_HeldItem, + const Vector3i a_ClickedBlockPos, + eBlockFace a_ClickedBlockFace ) override { - if ((a_BlockFace == BLOCK_FACE_NONE) || (a_BlockFace == BLOCK_FACE_YM) || (a_BlockFace == BLOCK_FACE_YP)) + // Paintings can't be flatly placed: + if ( + (a_ClickedBlockFace == BLOCK_FACE_NONE) || + (a_ClickedBlockFace == BLOCK_FACE_YM) || + (a_ClickedBlockFace == BLOCK_FACE_YP) + ) { - // Paintings can't be flatly placed return false; } - AddFaceDirection(a_BlockX, a_BlockY, a_BlockZ, a_BlockFace); // Make sure block that will be occupied is free - BLOCKTYPE Block = a_World->GetBlock(a_BlockX, a_BlockY, a_BlockZ); + // Make sure block that will be occupied is free: + auto PlacePos = AddFaceDirection(a_ClickedBlockPos, a_ClickedBlockFace); + BLOCKTYPE PlaceBlockType = a_World->GetBlock(PlacePos); + if (PlaceBlockType != E_BLOCK_AIR) + { + return false; + } - if (Block == E_BLOCK_AIR) + // Define all the possible painting titles + static const AString gPaintingTitlesList[] = + { + { "Kebab" }, + { "Aztec" }, + { "Alban" }, + { "Aztec2" }, + { "Bomb" }, + { "Plant" }, + { "Wasteland" }, + { "Wanderer" }, + { "Graham" }, + { "Pool" }, + { "Courbet" }, + { "Sunset" }, + { "Sea" }, + { "Creebet" }, + { "Match" }, + { "Bust" }, + { "Stage" }, + { "Void" }, + { "SkullAndRoses" }, + { "Wither" }, + { "Fighters" }, + { "Skeleton" }, + { "DonkeyKong" }, + { "Pointer" }, + { "Pigscene" }, + { "BurningSkull" } + }; + + auto PaintingTitle = gPaintingTitlesList[a_World->GetTickRandomNumber(ARRAYCOUNT(gPaintingTitlesList) - 1)]; + auto Painting = cpp14::make_unique<cPainting>(PaintingTitle, a_ClickedBlockFace, PlacePos); + auto PaintingPtr = Painting.get(); + if (!PaintingPtr->Initialize(std::move(Painting), *a_World)) { - static const struct // Define all the possible painting titles - { - AString Title; - } gPaintingTitlesList[] = - { - { "Kebab" }, - { "Aztec" }, - { "Alban" }, - { "Aztec2" }, - { "Bomb" }, - { "Plant" }, - { "Wasteland" }, - { "Wanderer" }, - { "Graham" }, - { "Pool" }, - { "Courbet" }, - { "Sunset" }, - { "Sea" }, - { "Creebet" }, - { "Match" }, - { "Bust" }, - { "Stage" }, - { "Void" }, - { "SkullAndRoses" }, - { "Wither" }, - { "Fighters" }, - { "Skeleton" }, - { "DonkeyKong" }, - { "Pointer" }, - { "Pigscene" }, - { "BurningSkull" } - }; - - auto Painting = cpp14::make_unique<cPainting>(gPaintingTitlesList[a_World->GetTickRandomNumber(ARRAYCOUNT(gPaintingTitlesList) - 1)].Title, a_BlockFace, Vector3i{a_BlockX, a_BlockY, a_BlockZ}); - auto PaintingPtr = Painting.get(); - if (!PaintingPtr->Initialize(std::move(Painting), *a_World)) - { - return false; - } - - if (!a_Player->IsGameModeCreative()) - { - a_Player->GetInventory().RemoveOneEquippedItem(); - } - - return true; + return false; + } + if (!a_Player->IsGameModeCreative()) + { + a_Player->GetInventory().RemoveOneEquippedItem(); } - return false; + return true; } }; |