From d1d57cf5c34c9a4626fd8e3b40db3ea321b40335 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Tue, 5 Apr 2011 02:56:29 +0300 Subject: initial workings of the furnace --- src/nodemetadata.cpp | 155 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 150 insertions(+), 5 deletions(-) (limited to 'src/nodemetadata.cpp') diff --git a/src/nodemetadata.cpp b/src/nodemetadata.cpp index 2405e7601..21f55a0ca 100644 --- a/src/nodemetadata.cpp +++ b/src/nodemetadata.cpp @@ -178,6 +178,12 @@ FurnaceNodeMetadata::FurnaceNodeMetadata() m_inventory->addList("fuel", 1); m_inventory->addList("src", 1); m_inventory->addList("dst", 1); + + m_step_accumulator = 0; + m_fuel_totaltime = 0; + m_fuel_time = 0; + m_src_totaltime = 0; + m_src_time = 0; } FurnaceNodeMetadata::~FurnaceNodeMetadata() { @@ -197,24 +203,134 @@ NodeMetadata* FurnaceNodeMetadata::create(std::istream &is) { FurnaceNodeMetadata *d = new FurnaceNodeMetadata(); d->m_inventory->deSerialize(is); - /*std::string params; - std::getline(is, params, '\n');*/ + int temp; + is>>temp; + d->m_fuel_totaltime = (float)temp/10; + is>>temp; + d->m_fuel_time = (float)temp/10; return d; } void FurnaceNodeMetadata::serializeBody(std::ostream &os) { m_inventory->serialize(os); - // This line will contain the other parameters - //os<<"\n"; + os<= 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"<getList("src"); + assert(src_list); + InventoryItem *src_item = src_list->getItem(0); + + if(ItemSpec(ITEM_MATERIAL, CONTENT_TREE).checkItem(src_item) + && dst_list->itemFits(0, new CraftItem("lump_of_coal", 1))) + { + m_src_totaltime = 3; + } + else + { + m_src_time = 0; + m_src_totaltime = 0; + } + + if(m_fuel_time < m_fuel_totaltime) + { + //dstream<<"Furnace is active"<= m_src_totaltime && m_src_totaltime > 0.001) + { + if(ItemSpec(ITEM_MATERIAL, CONTENT_TREE).checkItem(src_item)) + { + src_list->decrementMaterials(1); + dst_list->addItem(0, new CraftItem("lump_of_coal", 1)); + m_src_time = 0; + m_src_totaltime = 0; + } + } + return true; + } + + if(src_item == NULL || m_src_totaltime < 0.001) + { + return false; + } + + bool changed = false; + + //dstream<<"Furnace is out of fuel"<getList("fuel"); + assert(fuel_list); + InventoryItem *fuel_item = fuel_list->getItem(0); + + if(ItemSpec(ITEM_MATERIAL, CONTENT_TREE).checkItem(fuel_item)) + { + m_fuel_totaltime = 10; + m_fuel_time = 0; + fuel_list->decrementMaterials(1); + changed = true; + } + else if(ItemSpec(ITEM_MATERIAL, CONTENT_WOOD).checkItem(fuel_item)) + { + m_fuel_totaltime = 5; + m_fuel_time = 0; + fuel_list->decrementMaterials(1); + changed = true; + } + else if(ItemSpec(ITEM_CRAFT, "lump_of_coal").checkItem(fuel_item)) + { + m_fuel_totaltime = 10; + m_fuel_time = 0; + fuel_list->decrementMaterials(1); + changed = true; + } + else + { + //dstream<<"No fuel found"<::Iterator + i = m_data.getIterator(); + i.atEnd()==false; i++) + { + v3s16 p = i.getNode()->getKey(); + NodeMetadata *meta = i.getNode()->getValue(); + bool changed = meta->step(dtime); + if(changed) + something_changed = true; + /*if(res.inventory_changed) + { + std::string inv_id; + inv_id += "nodemeta:"; + inv_id += itos(p.X); + inv_id += ","; + inv_id += itos(p.Y); + inv_id += ","; + inv_id += itos(p.Z); + InventoryContext c; + c.current_player = NULL; + inv_mgr->inventoryModified(&c, inv_id); + }*/ + } + return something_changed; +} + -- cgit v1.2.3