DestroyItemProcess.cpp

Go to the documentation of this file.
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 }

Generated on Fri Jul 27 22:27:13 2007 for pentagram by  doxygen 1.4.7