From 3ce33887a293bf22c3cd960033a3fb706fe168f5 Mon Sep 17 00:00:00 2001 From: darkrose Date: Mon, 17 Jul 2017 14:37:06 +1000 Subject: [PATCH] cooking redo pt2 --- src/content_nodemeta.h | 1 + src/inventory.cpp | 12 +--- src/nodemeta/content_nodemeta_cooking.cpp | 67 ++++++++++++++--------- 3 files changed, 46 insertions(+), 34 deletions(-) diff --git a/src/content_nodemeta.h b/src/content_nodemeta.h index 66b38d0..210e9ad 100644 --- a/src/content_nodemeta.h +++ b/src/content_nodemeta.h @@ -401,6 +401,7 @@ private: Inventory *m_inventory; float m_active_timer; float m_burn_counter; + float m_burn_timer; float m_cook_timer; float m_step_interval; std::string m_owner; diff --git a/src/inventory.cpp b/src/inventory.cpp index bae80ee..5ba52a9 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -254,9 +254,7 @@ std::wstring MaterialItem::getGuiText() char buff[20]; txt += "\n"; txt += gettext("Fuel Burn Time: "); - txt += itos((int)f->fuel_time/60); - txt += ":"; - sprintf(buff,"%02d",(int)f->fuel_time%60); + sprintf(buff,"%01.2f",f->fuel_time); txt += buff; } @@ -401,9 +399,7 @@ std::wstring CraftItem::getGuiText() char buff[20]; txt += "\n"; txt += gettext("Fuel Burn Time: "); - txt += itos((int)f->fuel_time/60); - txt += ":"; - sprintf(buff,"%02d",(int)f->fuel_time%60); + sprintf(buff,"%01.2f",f->fuel_time); txt += buff; } if (m_data > 0) { @@ -595,9 +591,7 @@ std::wstring ToolItem::getGuiText() char buff[20]; txt += "\n"; txt += gettext("Fuel Burn Time: "); - txt += itos((int)f->fuel_time/60); - txt += ":"; - sprintf(buff,"%02d",(int)f->fuel_time%60); + sprintf(buff,"%01.2f",f->fuel_time); txt += buff; } if (m_data > 0) { diff --git a/src/nodemeta/content_nodemeta_cooking.cpp b/src/nodemeta/content_nodemeta_cooking.cpp index a865921..108c2b2 100644 --- a/src/nodemeta/content_nodemeta_cooking.cpp +++ b/src/nodemeta/content_nodemeta_cooking.cpp @@ -840,7 +840,8 @@ CrusherNodeMetadata::CrusherNodeMetadata() m_inventory->addList("upgrades", 2); m_active_timer = 0.0; - m_burn_counter = 0; + m_burn_counter = 0.0; + m_burn_timer = 0.0; m_cook_timer = 0.0; m_step_interval = 1.0; m_is_locked = false; @@ -867,6 +868,7 @@ NodeMetadata* CrusherNodeMetadata::clone() d->m_active_timer = m_active_timer; d->m_burn_counter = m_burn_counter; + d->m_burn_timer = m_burn_timer; d->m_cook_timer = m_cook_timer; d->m_step_interval = m_step_interval; d->m_is_locked = m_is_locked; @@ -891,6 +893,9 @@ NodeMetadata* CrusherNodeMetadata::create(std::istream &is) s = deSerializeString(is); d->m_burn_counter = mystoi(s); + s = deSerializeString(is); + d->m_burn_timer = mystoi(s); + s = deSerializeString(is); d->m_cook_timer = mystof(s); @@ -933,6 +938,7 @@ void CrusherNodeMetadata::serializeBody(std::ostream &os) os<inventory.getList("exo"); }else{ - dst_list = m_inventory->getList("dst"); + dst_list = m_inventory->getList("main"); } if (!dst_list) return false; @@ -1142,8 +1148,8 @@ bool CrusherNodeMetadata::step(float dtime, v3s16 pos, ServerEnvironment *env) if (m_burn_upgrade < 1.0) m_burn_upgrade = 1.0; - /* cook_upgrade/cook_time determines time to cook one item */ - /* burn_upgrade/burn_time determines number of items that fuel can cook */ + /* cook_upgrade/m_cook_time determines time to cook one item */ + /* burn_upgrade/m_burn_time determines number of items that fuel can cook */ cook_time = 4.0/m_cook_upgrade; if (cook_time < 0.1) @@ -1172,36 +1178,47 @@ bool CrusherNodeMetadata::step(float dtime, v3s16 pos, ServerEnvironment *env) if (m_cook_timer > cook_time) m_cook_timer = cook_time; - if (m_burn_counter <= 0.0 && cook_ongoing) { - fuel_list = m_inventory->getList("fuel"); - if (!fuel_list) - break; - fuel_item = fuel_list->getItem(0); - if (fuel_item && fuel_item->isFuel()) { - content_t c = fuel_item->getContent(); - if ((c&CONTENT_CRAFTITEM_MASK) == CONTENT_CRAFTITEM_MASK) { - m_burn_counter = ((CraftItem*)fuel_item)->getFuelTime(); - }else if ((c&CONTENT_TOOLITEM_MASK) == CONTENT_TOOLITEM_MASK) { - m_burn_counter = ((ToolItem*)fuel_item)->getFuelTime(); - }else{ - m_burn_counter = ((MaterialItem*)fuel_item)->getFuelTime(); + if (m_burn_counter < 1.0 && is_cooking) { + if (m_cook_timer+m_step_interval < cook_time || cook_ongoing) { + fuel_list = m_inventory->getList("fuel"); + if (!fuel_list) + break; + fuel_item = fuel_list->getItem(0); + if (fuel_item && fuel_item->isFuel()) { + content_t c = fuel_item->getContent(); + float v = 0.0; + if ((c&CONTENT_CRAFTITEM_MASK) == CONTENT_CRAFTITEM_MASK) { + v = ((CraftItem*)fuel_item)->getFuelTime(); + }else if ((c&CONTENT_TOOLITEM_MASK) == CONTENT_TOOLITEM_MASK) { + v = ((ToolItem*)fuel_item)->getFuelTime(); + }else{ + v = ((MaterialItem*)fuel_item)->getFuelTime(); + } + fuel_list->decrementMaterials(1); + if (c == CONTENT_TOOLITEM_STEELBUCKET_LAVA) { + fuel_list->addItem(0,new ToolItem(CONTENT_TOOLITEM_STEELBUCKET,0,0)); + } + m_burn_counter += v*m_burn_upgrade; + changed = true; } - fuel_list->decrementMaterials(1); - if (c == CONTENT_TOOLITEM_STEELBUCKET_LAVA) { - fuel_list->addItem(0,new ToolItem(CONTENT_TOOLITEM_STEELBUCKET,0,0)); - } - m_burn_counter *= m_burn_upgrade; - changed = true; } } if (m_burn_counter <= 0.0) { m_active_timer = 0.0; m_burn_counter = 0.0; + m_burn_timer = 0.0; break; } - m_burn_counter -= m_step_interval; + if (m_burn_counter < 1.0) + continue; + + m_burn_timer += m_step_interval; + if (m_burn_timer >= cook_time) { + m_burn_counter -= 1.0; + m_burn_timer -= cook_time; + } if (!is_cooking) { m_cook_timer = 0.0; @@ -1242,7 +1259,7 @@ std::string CrusherNodeMetadata::getDrawSpecString(Player *player) spec += itos((int)v); spec += "]"; spec += "list[current_name;src;2,1;1,1;]"; - spec += "list[current_name;dst;5,1;2,2;]"; + spec += "list[current_name;main;5,1;2,2;]"; spec += "list[current_player;main;0,5;8,4;]"; return spec; }