2012-02-13 16:47:03 -05:00
2011-10-03 14:41:19 -04:00
# pragma once
# include "cBlockEntity.h"
# include "cWindowOwner.h"
# include "FileDefine.h"
2012-05-28 12:47:57 -04:00
# include "cItem.h"
2011-10-03 14:41:19 -04:00
2012-02-13 16:47:03 -05:00
2011-10-03 14:41:19 -04:00
namespace Json
{
class Value ;
}
class cClientHandle ;
class cServer ;
2012-02-13 16:47:03 -05:00
class cFurnaceEntity :
public cBlockEntity ,
public cWindowOwner
2011-10-03 14:41:19 -04:00
{
public :
2012-02-13 16:47:03 -05:00
cFurnaceEntity ( int a_X , int a_Y , int a_Z , cWorld * a_World ) ;
2011-10-03 14:41:19 -04:00
virtual ~ cFurnaceEntity ( ) ;
virtual void Destroy ( ) ;
2012-01-30 11:01:45 -05:00
bool LoadFromFile ( cFile & a_File ) ; // deprecated format
2011-10-03 14:41:19 -04:00
2012-01-30 11:01:45 -05:00
bool LoadFromJson ( const Json : : Value & a_Value ) ;
2012-02-16 08:42:35 -05:00
virtual void SaveToJson ( Json : : Value & a_Value ) override ;
2011-10-03 14:41:19 -04:00
2012-05-28 12:47:57 -04:00
// Returns true if there's any change, forcing the chunk to go dirty.
2011-10-03 14:41:19 -04:00
bool Tick ( float a_Dt ) ;
2012-02-15 09:22:44 -05:00
virtual void UsedBy ( cPlayer * a_Player ) override ;
2011-10-03 14:41:19 -04:00
bool StartCooking ( ) ;
2012-05-28 12:47:57 -04:00
/// 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 ) ;
2011-10-03 14:41:19 -04:00
void ResetCookTimer ( ) ;
2012-02-13 16:47:03 -05:00
2012-05-28 12:47:57 -04:00
const cItem & GetSlot ( int i ) const { return m_Items [ i ] ; }
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 ; }
2011-10-03 14:41:19 -04:00
private :
2012-02-13 16:47:03 -05:00
cItem * m_Items ;
cItem * m_CookingItem ;
2012-05-28 12:47:57 -04:00
// 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-02-13 16:47:03 -05:00
} ;