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