2012-06-14 06:06:06 -07:00
# pragma once
2012-09-23 15:09:57 -07:00
# include "BlockEntity.h"
2012-09-23 10:19:34 -07:00
# include "UI/WindowOwner.h"
2012-09-23 15:09:57 -07:00
# include "Item.h"
2012-06-14 06:06:06 -07:00
namespace Json
{
class Value ;
}
class cClientHandle ;
class cServer ;
2012-08-11 04:51:32 -07:00
2012-06-14 06:06:06 -07:00
class cFurnaceEntity :
public cBlockEntity ,
2012-08-07 05:05:35 -07:00
public cBlockEntityWindowOwner
2012-06-14 06:06:06 -07:00
{
public :
cFurnaceEntity ( int a_X , int a_Y , int a_Z , cWorld * a_World ) ;
virtual ~ cFurnaceEntity ( ) ;
virtual void Destroy ( ) ;
2013-02-02 15:55:29 -08:00
static const char * GetClassStatic ( ) { return " cFurnaceEntity " ; }
2012-06-14 06:06:06 -07:00
bool LoadFromFile ( cFile & a_File ) ; // deprecated format
bool LoadFromJson ( const Json : : Value & a_Value ) ;
virtual void SaveToJson ( Json : : Value & a_Value ) override ;
2012-08-24 00:58:26 -07:00
virtual void SendTo ( cClientHandle & a_Client ) override ;
2012-06-14 06:06:06 -07:00
// Returns true if there's any change, forcing the chunk to go dirty.
bool Tick ( float a_Dt ) ;
virtual void UsedBy ( cPlayer * a_Player ) override ;
bool StartCooking ( ) ;
/// Restarts cooking. Used after the furnace is loaded from storage to set up the internal variables so that cooking continues, if it was active. Returns true if cooking.
bool ContinueCooking ( void ) ;
void ResetCookTimer ( ) ;
2012-09-20 06:25:54 -07:00
const cItem * GetSlot ( int i ) const { return & ( m_Items [ i ] ) ; }
2012-06-14 06:06:06 -07:00
void SetSlot ( int a_Slot , const cItem & a_Item ) ;
float GetTimeCooked ( void ) const { return m_TimeCooked ; }
float GetTimeToBurn ( void ) const { return m_BurnTime - m_TimeBurned ; }
void SetBurnTimes ( float a_BurnTime , float a_TimeBurned ) { m_BurnTime = a_BurnTime ; m_TimeBurned = 0 ; }
void SetCookTimes ( float a_CookTime , float a_TimeCooked ) { m_CookTime = a_CookTime ; m_TimeCooked = a_TimeCooked ; }
private :
cItem * m_Items ;
cItem * m_CookingItem ;
// All timers are in 1 ms
float m_CookTime ; // Amount of time needed to fully cook current item
float m_TimeCooked ; // Amount of time that the current item has been cooking
float m_BurnTime ; // Amount of time that the current fuel can burn (in total); zero if no fuel burning
float m_TimeBurned ; // Amount of time that the current fuel has been burning
2012-09-20 06:25:54 -07:00
void BroadcastProgress ( int a_ProgressbarID , short a_Value ) ;
2012-06-14 06:06:06 -07:00
} ;