00001 /* 00002 Copyright (C) 2001 The Exult 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 #ifdef HAVE_CONFIG_H 00020 # include <config.h> 00021 #endif 00022 00023 #include "jawbone.h" 00024 #include "objiter.h" 00025 00026 // Add an object. 00027 bool Jawbone_object::add(Game_object *obj, bool dont_check, bool combine) 00028 { 00029 if (obj->get_shapenum() != 559) 00030 return false; // not a serpent tooth 00031 00032 find_teeth(); 00033 if (teeth[obj->get_framenum()]) 00034 return false; // already have this one 00035 00036 if (Container_game_object::add(obj, dont_check)) { 00037 00038 00039 teeth[obj->get_framenum()] = obj; 00040 toothcount++; 00041 00042 update_frame(); 00043 00044 return true; 00045 } 00046 00047 return false; 00048 } 00049 00050 // Remove an object. 00051 void Jawbone_object::remove(Game_object *obj) 00052 { 00053 Container_game_object::remove(obj); 00054 00055 find_teeth(); 00056 update_frame(); 00057 } 00058 00059 void Jawbone_object::find_teeth() 00060 { 00061 for (int i=0; i<19; i++) 00062 teeth[i] = 0; 00063 toothcount = 0; 00064 00065 Object_list& objects = get_objects(); 00066 if (objects.is_empty()) 00067 return; // Empty. 00068 00069 Game_object *obj; 00070 Object_iterator next(objects); 00071 00072 while ((obj = next.get_next()) != 0) 00073 { 00074 if (obj->get_shapenum() != 559) { 00075 // obj = obj->get_next(); 00076 continue; // not a serpent tooth... (shouldn't happen) 00077 } 00078 00079 toothcount++; 00080 teeth[obj->get_framenum()] = obj; 00081 00082 // obj = obj->get_next(); 00083 } 00084 } 00085 00086 void Jawbone_object::update_frame() 00087 { 00088 set_frame(toothcount); 00089 }