00001 /* 00002 Copyright (C) 2004-2005 The Pentagram team 00003 00004 This program is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU General Public License 00006 as published by the Free Software Foundation; either version 2 00007 of the License, or (at your option) any later version. 00008 00009 This program is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 GNU General Public License for more details. 00013 00014 You should have received a copy of the GNU General Public License 00015 along with this program; if not, write to the Free Software 00016 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00017 */ 00018 00019 #include "pent_include.h" 00020 00021 #include "DestroyItemProcess.h" 00022 #include "Item.h" 00023 #include "getObject.h" 00024 00025 #include "IDataSource.h" 00026 #include "ODataSource.h" 00027 00028 // p_dynamic_cast stuff 00029 DEFINE_RUNTIME_CLASSTYPE_CODE(DestroyItemProcess,Process); 00030 00031 DestroyItemProcess::DestroyItemProcess() : Process() 00032 { 00033 00034 } 00035 00036 DestroyItemProcess::DestroyItemProcess(Item* item_) 00037 { 00038 if (item_) 00039 item_num = item_->getObjId(); 00040 else 00041 item_num = 0; 00042 00043 type = 0x232; 00044 } 00045 00046 bool DestroyItemProcess::run(const uint32 /*framenum*/) 00047 { 00048 if (item_num == 0) { 00049 // need to get ObjId to use from process result. (We were apparently 00050 // waiting for a process which returned the ObjId to delete.) 00051 item_num = static_cast<ObjId>(result); 00052 } 00053 00054 Item *it = getItem(item_num); 00055 00056 if (!it) { 00057 // somebody did our work for us... 00058 terminate(); 00059 return false; 00060 } 00061 00062 // FIXME: should probably prevent player from opening gump in the 00063 // first place... 00064 if (it->getFlags() & Item::FLG_GUMP_OPEN) { 00065 // first close gump in case player is still rummaging through us 00066 it->closeGump(); 00067 } 00068 00069 // bye bye 00070 // (note that Container::destroy() calls removeContents()) 00071 it->destroy(true); 00072 00073 // NOTE: we're terminated here because this process belongs to the item 00074 00075 return true; 00076 } 00077 00078 void DestroyItemProcess::saveData(ODataSource* ods) 00079 { 00080 Process::saveData(ods); 00081 } 00082 00083 bool DestroyItemProcess::loadData(IDataSource* ids, uint32 version) 00084 { 00085 if (!Process::loadData(ids, version)) return false; 00086 00087 return true; 00088 }