/* $Id: objectitem.cpp,v 1.5 2005/06/28 13:55:21 chfreund Exp $ */ #include "object.hpp" #include "objectitem.hpp" /**********************************************************/ // setting attributes #define SATTR (Setting::COMMA_SEPARATED | \ Setting::EXPLICIT_ASSIGNMENT | \ Setting::CONFIG_FILE_ONLY) #define SATTRM (SATTR | Setting::MANDATORY) /**********************************************************/ const SettingDef ObjectItem:: m_SettingDef[] = { SettingDef("objects", NULL, Setting::STRING, 6, -1, SATTRM), SettingDef() }; /**********************************************************/ ObjectItem::ObjectItem() : m_ObjectID(INVALID_OBJECT), m_x(0), m_y(0), m_dx(0), m_dy(0), m_vx(0), m_vy(0) { } /**********************************************************/ ObjectItem::~ObjectItem() { } /**********************************************************/ bool ObjectItem::readFromSettings( SettingDataBase &settings, Sint32 &pos ) { const char fn[] = "ObjectItem::readFromSettings:"; Setting *setting = settings.getSetting( "objects" ); // check presence of parameters // Should be redundant, since the settings were checked // by method checkSettings before. DBG(1) { if( !CHECK( pos+7 <= setting->getNumParameters(), "%s\n there are not further 6 parameters " "available\n starting from parameter nr. " "%d: \"%s\"\n", fn, pos+1, setting->getString() ) ) { return false; } } // read and convert ID m_ObjectID = Object::getID( setting->getString(pos) ); if( !CHECK( m_ObjectID != INVALID_OBJECT, "%s parameter nr.%d: \"%s\" is not a valid " "object string\n", fn, pos+1, setting->getString(pos) ) ) { return false; } // read coordinates m_x = atoi( setting->getString(++pos) ); m_y = atoi( setting->getString(++pos) ); m_dx = atoi( setting->getString(++pos) ); m_dy = atoi( setting->getString(++pos) ); m_vx = atoi( setting->getString(++pos) ); m_vy = atoi( setting->getString(++pos) ); DBG(2) ASSERT( m_dx >= 0 && m_dy >= 0, "%s read object item:\n " "%s, x:%d, y:%d, dx:%d, dy:%d, vx:%d, vy:%d\n" " -> tolerances dx, dy must be >= 0\n", fn, Object::getIDString(m_ObjectID), m_x, m_y, m_dx, m_dy, m_vx, m_vy ); // check, if this was the last item defined in the settings if( ++pos >= setting->getNumParameters() ) pos = -1; LOG(4) INFO( "%s read object item:\n " "%s, x:%d, y:%d, dx:%d, dy:%d, vx:%d, vy:%d\n", fn, Object::getIDString(m_ObjectID), m_x, m_y, m_dx, m_dy, m_vx, m_vy ); return true; } /**********************************************************/ bool ObjectItem:: checkSettings( SettingDataBase &settings ) { const char fn[] = "ObjectItem::checksettings:"; Setting *setting = settings.getSetting( "objects" ); if( !CHECK( setting != 0x0, "%s setting \"objects\" not present\n", fn ) || !CHECK( setting->getNumParameters() % 7 == 0, "%s setting \"objects\" must have 7 parameters " "per object (#parameters = %d)\n", fn, setting->getNumParameters() ) ) { return false; } return true; } /**********************************************************/