summaryrefslogblamecommitdiffstats
path: root/src/Items/ItemPainting.h
blob: 3432583caaca38b9bf5aaea802aa7a5619d4fb2a (plain) (tree)




















                                            





                                                                                                                      
         
                                                                                                                         
                 
                                                           


                                     
                                                                                                                              
                                                                                  


                                         
                                                                                       































                                                    
                                                                                                                                                                                                      





                                                            















                                                                                 

#pragma once

#include "ItemHandler.h"
#include "../World.h"
#include "../Entities/Player.h"
#include "../Entities/Painting.h"





class cItemPaintingHandler :
	public cItemHandler
{
public:
	cItemPaintingHandler(int a_ItemType)
		: cItemHandler(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
	) override
	{
		if ((a_BlockFace == BLOCK_FACE_NONE) || (a_BlockFace == BLOCK_FACE_YM) || (a_BlockFace == 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);

		if (Block == E_BLOCK_AIR)
		{
			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" }
			};

			cPainting * Painting = new cPainting(gPaintingTitlesList[a_World->GetTickRandomNumber(ARRAYCOUNT(gPaintingTitlesList) - 1)].Title, a_BlockFace, a_BlockX, a_BlockY, a_BlockZ);
			if (!Painting->Initialize(*a_World))
			{
				delete Painting;
				Painting = nullptr;
				return false;
			}

			if (!a_Player->IsGameModeCreative())
			{
				a_Player->GetInventory().RemoveOneEquippedItem();
			}

			return true;

		}
		return false;
	}
};