From da692355e84f8d1e5210c3c89daf775cf23ec38b Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sat, 18 Jun 2011 00:46:50 +0300 Subject: Created and moved stuff to content_nodemeta.{h,cpp} --- src/nodemetadata.cpp | 296 +-------------------------------------------------- 1 file changed, 1 insertion(+), 295 deletions(-) (limited to 'src/nodemetadata.cpp') diff --git a/src/nodemetadata.cpp b/src/nodemetadata.cpp index 1fc4c93a1..3edf6d3c2 100644 --- a/src/nodemetadata.cpp +++ b/src/nodemetadata.cpp @@ -97,288 +97,7 @@ void NodeMetadata::registerType(u16 id, Factory f) } /* - SignNodeMetadata -*/ - -// Prototype -SignNodeMetadata proto_SignNodeMetadata(""); - -SignNodeMetadata::SignNodeMetadata(std::string text): - m_text(text) -{ - NodeMetadata::registerType(typeId(), create); -} -u16 SignNodeMetadata::typeId() const -{ - return CONTENT_SIGN_WALL; -} -NodeMetadata* SignNodeMetadata::create(std::istream &is) -{ - std::string text = deSerializeString(is); - return new SignNodeMetadata(text); -} -NodeMetadata* SignNodeMetadata::clone() -{ - return new SignNodeMetadata(m_text); -} -void SignNodeMetadata::serializeBody(std::ostream &os) -{ - os<addList("0", 8*4); -} -ChestNodeMetadata::~ChestNodeMetadata() -{ - delete m_inventory; -} -u16 ChestNodeMetadata::typeId() const -{ - return CONTENT_CHEST; -} -NodeMetadata* ChestNodeMetadata::create(std::istream &is) -{ - ChestNodeMetadata *d = new ChestNodeMetadata(); - d->m_inventory->deSerialize(is); - return d; -} -NodeMetadata* ChestNodeMetadata::clone() -{ - ChestNodeMetadata *d = new ChestNodeMetadata(); - *d->m_inventory = *m_inventory; - return d; -} -void ChestNodeMetadata::serializeBody(std::ostream &os) -{ - m_inventory->serialize(os); -} -std::string ChestNodeMetadata::infoText() -{ - return "Chest"; -} -bool ChestNodeMetadata::nodeRemovalDisabled() -{ - /* - Disable removal if chest contains something - */ - InventoryList *list = m_inventory->getList("0"); - if(list == NULL) - return false; - if(list->getUsedSlots() == 0) - return false; - return true; -} - -/* - FurnaceNodeMetadata -*/ - -// Prototype -FurnaceNodeMetadata proto_FurnaceNodeMetadata; - -FurnaceNodeMetadata::FurnaceNodeMetadata() -{ - NodeMetadata::registerType(typeId(), create); - - m_inventory = new Inventory(); - m_inventory->addList("fuel", 1); - m_inventory->addList("src", 1); - m_inventory->addList("dst", 4); - - m_step_accumulator = 0; - m_fuel_totaltime = 0; - m_fuel_time = 0; - m_src_totaltime = 0; - m_src_time = 0; -} -FurnaceNodeMetadata::~FurnaceNodeMetadata() -{ - delete m_inventory; -} -u16 FurnaceNodeMetadata::typeId() const -{ - return CONTENT_FURNACE; -} -NodeMetadata* FurnaceNodeMetadata::clone() -{ - FurnaceNodeMetadata *d = new FurnaceNodeMetadata(); - *d->m_inventory = *m_inventory; - return d; -} -NodeMetadata* FurnaceNodeMetadata::create(std::istream &is) -{ - FurnaceNodeMetadata *d = new FurnaceNodeMetadata(); - - d->m_inventory->deSerialize(is); - - 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); - 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"< 60.0) - dstream<<"Furnace stepping a long time ("< interval) - { - m_step_accumulator -= interval; - dtime = interval; - - //dstream<<"Furnace step dtime="<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; - } - - /* - If fuel is burning, increment the burn counters. - If item finishes cooking, move it to result. - */ - if(m_fuel_time < m_fuel_totaltime) - { - //dstream<<"Furnace is active"<= m_src_totaltime && m_src_totaltime > 0.001 - && src_item) - { - InventoryItem *cookresult = src_item->createCookResult(); - dst_list->addItem(cookresult); - src_list->decrementMaterials(1); - m_src_time = 0; - m_src_totaltime = 0; - } - changed = true; - continue; - } - - /* - If there is no source item or source item is not cookable, stop loop. - */ - if(src_item == NULL || m_src_totaltime < 0.001) - { - m_step_accumulator = 0; - break; - } - - //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 = 30; - m_fuel_time = 0; - fuel_list->decrementMaterials(1); - changed = true; - } - else if(ItemSpec(ITEM_MATERIAL, CONTENT_WOOD).checkItem(fuel_item)) - { - m_fuel_totaltime = 30/4; - m_fuel_time = 0; - fuel_list->decrementMaterials(1); - changed = true; - } - else if(ItemSpec(ITEM_CRAFT, "Stick").checkItem(fuel_item)) - { - m_fuel_totaltime = 30/4/4; - m_fuel_time = 0; - fuel_list->decrementMaterials(1); - changed = true; - } - else if(ItemSpec(ITEM_CRAFT, "lump_of_coal").checkItem(fuel_item)) - { - m_fuel_totaltime = 40; - m_fuel_time = 0; - fuel_list->decrementMaterials(1); - changed = true; - } - else - { - //dstream<<"No fuel found"<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