- return d;
-}
-void FurnaceNodeMetadata::serializeBody(std::ostream &os)
-{
- m_inventory->serialize(os);
- os<<itos(m_fuel_totaltime*10)<<" ";
- os<<itos(m_fuel_time*10)<<" ";
-}
-std::string FurnaceNodeMetadata::infoText()
-{
- //return "Furnace";
- if(m_fuel_time >= m_fuel_totaltime)
- {
- InventoryList *src_list = m_inventory->getList("src");
- assert(src_list);
- InventoryItem *src_item = src_list->getItem(0);
-
- if(src_item)
- return "Furnace is out of fuel";
- else
- return "Furnace is inactive";
- }
- else
- {
- std::string s = "Furnace is active (";
- s += itos(m_fuel_time/m_fuel_totaltime*100);
- s += "%)";
- return s;
- }
-}
-void FurnaceNodeMetadata::inventoryModified()
-{
- dstream<<"Furnace inventory modification callback"<<std::endl;
-}
-bool FurnaceNodeMetadata::step(float dtime)
-{
- // Update at a fixed frequency
- const float interval = 0.5;
- m_step_accumulator += dtime;
- if(m_step_accumulator < interval)
- return false;
- m_step_accumulator -= interval;
- dtime = interval;
-
- //dstream<<"Furnace step dtime="<<dtime<<std::endl;
-
- InventoryList *dst_list = m_inventory->getList("dst");
- assert(dst_list);
-
- InventoryList *src_list = m_inventory->getList("src");
- assert(src_list);
- InventoryItem *src_item = src_list->getItem(0);
-
- // Start only if there are free slots in dst, so that it can
- // accomodate any result item
- if(dst_list->getFreeSlots() > 0 && src_item && src_item->isCookable())
- {
- m_src_totaltime = 3;
- }
- else
- {
- m_src_time = 0;
- m_src_totaltime = 0;
- }