2014-02-17 19:16:03 -05:00
# 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 , const cItem & a_Item , int a_BlockX , int a_BlockY , int a_BlockZ , eBlockFace a_Dir ) override
{
if ( a_Dir = = BLOCK_FACE_NONE )
{
2014-02-17 19:28:31 -05:00
// Client sends this if clicked on top or bottom face
2014-02-17 19:16:03 -05:00
return false ;
}
2014-02-17 19:28:31 -05:00
AddFaceDirection ( a_BlockX , a_BlockY , a_BlockZ , a_Dir ) ; // Make sure block that will be occupied is free
2014-02-17 19:16:03 -05:00
BLOCKTYPE Block = a_World - > GetBlock ( a_BlockX , a_BlockY , a_BlockZ ) ;
2014-02-17 19:28:31 -05:00
AddFaceDirection ( a_BlockX , a_BlockY , a_BlockZ , a_Dir , true ) ; // We want the clicked block, so go back again
2014-02-17 19:16:03 -05:00
if ( Block = = E_BLOCK_AIR )
{
int Dir = 0 ;
2014-02-17 19:28:31 -05:00
// The client uses different values for painting directions and block faces. Our constants are for the block faces, so we convert them here to painting faces
2014-02-17 19:16:03 -05:00
switch ( a_Dir )
{
2014-02-17 19:28:31 -05:00
case BLOCK_FACE_ZP : break ; // Initialised to zero
case BLOCK_FACE_ZM : Dir = 2 ; break ;
case BLOCK_FACE_XM : Dir = 1 ; break ;
case BLOCK_FACE_XP : Dir = 3 ; break ;
default : ASSERT ( ! " Unhandled block face when trying spawn painting! " ) ; return false ;
2014-02-17 19:16:03 -05:00
}
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 , Dir , a_BlockX , a_BlockY , a_BlockZ ) ;
2014-06-08 15:58:08 -04:00
Painting - > Initialize ( * a_World ) ;
2014-02-17 19:16:03 -05:00
if ( ! a_Player - > IsGameModeCreative ( ) )
{
a_Player - > GetInventory ( ) . RemoveOneEquippedItem ( ) ;
}
return true ;
}
return false ;
}
} ;