From: <lpa...@us...> - 2012-12-17 14:27:47
|
Revision: 8508 http://planeshift.svn.sourceforge.net/planeshift/?rev=8508&view=rev Author: lpancallo Date: 2012-12-17 14:27:38 +0000 (Mon, 17 Dec 2012) Log Message: ----------- Added printout on startup of how many locations have been loaded. Autoformatting. Modified Paths: -------------- trunk/src/common/util/location.cpp trunk/src/common/util/location.h Modified: trunk/src/common/util/location.cpp =================================================================== --- trunk/src/common/util/location.cpp 2012-12-17 14:24:47 UTC (rev 8507) +++ trunk/src/common/util/location.cpp 2012-12-17 14:27:38 UTC (rev 8508) @@ -1,7 +1,7 @@ /* * location.cpp - author: Keith Fulton <ke...@pa...> * -* Copyright (C) 2004 Atomic Blue (in...@pl..., http://www.atomicblue.org) +* Copyright (C) 2004 Atomic Blue (in...@pl..., http://www.atomicblue.org) * * * This program is free software; you can redistribute it and/or @@ -40,10 +40,10 @@ Location::Location() :type(NULL),effectID(0),region(NULL) { - + } -Location::Location(LocationType* locationType, const char* locationName, csVector3& pos, iSector* sector, float radius, float rot_angle, const csString& flags) +Location::Location(LocationType* locationType, const char* locationName, csVector3 &pos, iSector* sector, float radius, float rot_angle, const csString &flags) :id(-1),name(locationName),pos(pos),rot_angle(rot_angle),radius(radius), id_prev_loc_in_region(-1),sector(sector), type(locationType),effectID(0),region(NULL) @@ -55,17 +55,17 @@ Location::~Location() { - if (type) + if(type) { type->RemoveLocation(this); } - - while (locs.GetSize()) + + while(locs.GetSize()) { - Location * loc = locs.Pop(); + Location* loc = locs.Pop(); // First location in a region is the location that holds the locs array. // The first location is in the locs as well so don't delete self yet. - if (loc != this) + if(loc != this) { delete loc; } @@ -75,7 +75,7 @@ bool Location::SetRadius(iDataConnection* db, float radius) { SetRadius(radius); - + return CreateUpdate(db); } @@ -91,40 +91,40 @@ return type->GetName(); } -iSector* Location::GetSector(iEngine * engine) +iSector* Location::GetSector(iEngine* engine) { // Return cached value - if (sector) return sector; - + if(sector) return sector; + // Store cache value sector = engine->FindSector(sectorName.GetDataSafe()); return sector; } -iSector* Location::GetSector(iEngine * engine) const +iSector* Location::GetSector(iEngine* engine) const { // Return cached value - if (sector) return sector; + if(sector) return sector; // Just return the looked up value return engine->FindSector(sectorName.GetDataSafe()); } -const csBox2& Location::GetBoundingBox() const +const csBox2 &Location::GetBoundingBox() const { return boundingBox; } void Location::CalculateBoundingBox() { - if (IsCircle()) + if(IsCircle()) { boundingBox.AddBoundingVertex(pos.x-radius,pos.z-radius); boundingBox.AddBoundingVertex(pos.x+radius,pos.z+radius); } else { - for (size_t i=0; i< locs.GetSize(); i++) + for(size_t i=0; i< locs.GetSize(); i++) { boundingBox.AddBoundingVertex(locs[i]->pos.x,locs[i]->pos.z); } @@ -133,14 +133,14 @@ -int Location::GetSectorID(iDataConnection *db,const char* name) +int Location::GetSectorID(iDataConnection* db,const char* name) { // Load all with same master location type - Result rs(db->Select("select id from sectors where name='%s'",name)); + Result rs(db->Select("select id from sectors where name='%s'",name)); - if (!rs.IsValid()) + if(!rs.IsValid()) { - Error2("Could not find sector id from db: %s",db->GetLastError() ); + Error2("Could not find sector id from db: %s",db->GetLastError()); return -1; } return rs[0].GetInt("id"); @@ -148,19 +148,19 @@ uint32_t Location::GetEffectID(iEffectIDAllocator* allocator) { - if (effectID <= 0) + if(effectID <= 0) { effectID = allocator->GetEffectID(); } - + return effectID; } bool Location::Adjust(iDataConnection* db, csVector3 &pos, iSector* sector) { - if (!Adjust(pos,sector)) + if(!Adjust(pos,sector)) { - return false; + return false; } db->CommandPump("UPDATE sc_locations SET x=%.2f,y=%.2f,z=%.2f WHERE id=%d", @@ -183,12 +183,12 @@ location->id_prev_loc_in_region = GetID(); // Check if this location is in a region, if not convert this locaiton into a region. - if (!region) + if(!region) { - locs.Push( this ); // First location is in the locs as well. + locs.Push(this); // First location is in the locs as well. region = this; } - + // Create DB entry location->CreateUpdate(db); @@ -199,7 +199,7 @@ next->id_prev_loc_in_region = location->GetID(); next->CreateUpdate(db); - if (index+1 >= region->locs.GetSize()) + if(index+1 >= region->locs.GetSize()) { region->locs.Push(location); } @@ -207,7 +207,7 @@ { region->locs.Insert((index+1)%region->locs.GetSize(),location); } - + return location; } @@ -216,11 +216,11 @@ Location* location = new Location(type, name, pos, sector, radius, rot_angle, GetFlags()); location->SetID(id); location->id_prev_loc_in_region = GetID(); - + // Check if this location is in a region, if not convert this locaiton into a region. - if (!region) + if(!region) { - locs.Push( this ); // First location is in the locs as well. + locs.Push(this); // First location is in the locs as well. region = this; } @@ -230,7 +230,7 @@ Location* next = region->locs[(index+1)%region->locs.GetSize()]; next->id_prev_loc_in_region = location->GetID(); - if (index+1 >= region->locs.GetSize()) + if(index+1 >= region->locs.GetSize()) { region->locs.Push(location); } @@ -243,7 +243,7 @@ } -bool Location::Load(iResultRow& row, iEngine* engine, iDataConnection* /*db*/) +bool Location::Load(iResultRow &row, iEngine* engine, iDataConnection* /*db*/) { id = row.GetInt("id"); name = row["name"]; @@ -254,7 +254,7 @@ radius = row.GetFloat("radius"); sectorName = row["sector"]; // Cache sector if engine is available. - if (engine) + if(engine) { sector = engine->FindSector(sectorName); } @@ -262,7 +262,7 @@ { sector = NULL; } - + id_prev_loc_in_region = row.GetInt("id_prev_loc_in_region"); return true; @@ -270,18 +270,19 @@ bool Location::CreateUpdate(iDataConnection* db) { - const char * fields[] = - { - "type_id", - "id_prev_loc_in_region", - "name", - "x", - "y", - "z", - "angle", - "radius", - "flags", - "loc_sector_id"}; + const char* fields[] = + { + "type_id", + "id_prev_loc_in_region", + "name", + "x", + "y", + "z", + "angle", + "radius", + "flags", + "loc_sector_id" + }; psStringArray values; values.FormatPush("%d",type->GetID()); @@ -296,10 +297,10 @@ values.Push(flagStr.GetDataSafe()); values.FormatPush("%d",GetSectorID(db,sectorName)); - if (id == -1) + if(id == -1) { id = db->GenericInsertWithID("sc_locations",fields,values); - if (id == 0) + if(id == 0) { id = -1; return false; @@ -309,13 +310,13 @@ { csString idStr; idStr.Format("%d",id); - return db->GenericUpdateWithID("sc_locations","id",idStr,fields,values); + return db->GenericUpdateWithID("sc_locations","id",idStr,fields,values); } return false; } -bool Location::Import(iDocumentNode *node, iDataConnection *db,int typeID) +bool Location::Import(iDocumentNode* node, iDataConnection* db,int typeID) { name = node->GetAttributeValue("name"); pos.x = node->GetAttributeValueAsFloat("x"); @@ -327,8 +328,8 @@ id_prev_loc_in_region = 0; // Not suppored for import. - const char * fields[] = - {"type_id","id_prev_loc_in_region","name","x","y","z","angle","radius","flags","loc_sector_id"}; + const char* fields[] = + {"type_id","id_prev_loc_in_region","name","x","y","z","angle","radius","flags","loc_sector_id"}; psStringArray values; values.FormatPush("%d",typeID); values.FormatPush("%d",id_prev_loc_in_region); @@ -342,10 +343,10 @@ values.Push(flagStr); values.FormatPush("%d",GetSectorID(db,sectorName)); - if (id == -1) + if(id == -1) { id = db->GenericInsertWithID("sc_locations",fields,values); - if (id == 0) + if(id == 0) { return false; } @@ -354,20 +355,20 @@ { csString idStr; idStr.Format("%d",id); - return db->GenericUpdateWithID("sc_locations","id",idStr,fields,values); + return db->GenericUpdateWithID("sc_locations","id",idStr,fields,values); } return true; } -bool Location::CheckWithinBounds(iEngine * engine,const csVector3& p,const iSector* sector) +bool Location::CheckWithinBounds(iEngine* engine,const csVector3 &p,const iSector* sector) { - if (!IsRegion()) + if(!IsRegion()) return false; - if (GetSector(engine) != sector) + if(GetSector(engine) != sector) return false; - + // Thanks to http://astronomy.swin.edu.au/~pbourke/geometry/insidepoly/ // for this example code. int counter = 0; @@ -376,19 +377,19 @@ csVector3 p1,p2; p1 = locs[0]->pos; - for (i=1; i<=N; i++) + for(i=1; i<=N; i++) { p2 = locs[i % N]->pos; - if (p.z > csMin(p1.z,p2.z)) + if(p.z > csMin(p1.z,p2.z)) { - if (p.z <= csMax(p1.z,p2.z)) + if(p.z <= csMax(p1.z,p2.z)) { - if (p.x <= csMax(p1.x,p2.x)) + if(p.x <= csMax(p1.x,p2.x)) { - if (p1.z != p2.z) + if(p1.z != p2.z) { xinters = (p.z-p1.z)*(p2.x-p1.x)/(p2.z-p1.z)+p1.x; - if (p1.x == p2.x || p.x <= xinters) + if(p1.x == p2.x || p.x <= xinters) counter++; } } @@ -400,22 +401,23 @@ return (counter % 2 != 0); } -bool Location::GetRandomPosition(iEngine * engine,csVector3& pos,iSector* §or) +bool Location::GetRandomPosition(iEngine* engine,csVector3 &pos,iSector* §or) { csVector3 randomPos; iSector* randomSector; - + // TODO: Hack, for now just get the y value and sector from the first point. randomPos.y = locs[0]->pos.y; randomSector = locs[0]->GetSector(engine); - do + do { randomPos.x = boundingBox.MinX() + psGetRandom()*(boundingBox.MaxX() - boundingBox.MinX()); randomPos.z = boundingBox.MinY() + psGetRandom()*(boundingBox.MaxY() - boundingBox.MinY()); - - } while (!CheckWithinBounds(engine,randomPos,randomSector)); + } + while(!CheckWithinBounds(engine,randomPos,randomSector)); + pos = randomPos; sector = randomSector; @@ -428,7 +430,7 @@ { } -LocationType::LocationType(int id, const csString& name) +LocationType::LocationType(int id, const csString &name) :id(id),name(name) { } @@ -436,13 +438,13 @@ LocationType::~LocationType() { - while (locs.GetSize()) + while(locs.GetSize()) { - Location * loc = locs.Pop(); //removes reference + Location* loc = locs.Pop(); //removes reference //now delete the location (a polygon). Since this will delete all points - //on the polygon, and the first is a reference to loc, make sure to + //on the polygon, and the first is a reference to loc, make sure to //delete that reference first: - loc->locs.DeleteIndex(0); + loc->locs.DeleteIndex(0); // now delete the polygon delete loc; } @@ -450,17 +452,18 @@ bool LocationType::CreateUpdate(iDataConnection* db) { - const char * fields[] = - { - "name"}; + const char* fields[] = + { + "name" + }; psStringArray values; values.Push(name); - if (id == -1) + if(id == -1) { id = db->GenericInsertWithID("sc_location_type",fields,values); - if (id == 0) + if(id == 0) { id = -1; return false; @@ -470,7 +473,7 @@ { csString idStr; idStr.Format("%d",id); - return db->GenericUpdateWithID("sc_location_type","id",idStr,fields,values); + return db->GenericUpdateWithID("sc_location_type","id",idStr,fields,values); } return false; @@ -478,10 +481,10 @@ -bool LocationType::Load(iDocumentNode *node) +bool LocationType::Load(iDocumentNode* node) { name = node->GetAttributeValue("name"); - if ( !name.Length() ) + if(!name.Length()) { CPrintf(CON_ERROR, "Location Types must all have name attributes.\n"); return false; @@ -489,16 +492,16 @@ csRef<iDocumentNodeIterator> iter = node->GetNodes(); - while ( iter->HasNext() ) + while(iter->HasNext()) { csRef<iDocumentNode> node = iter->Next(); - if ( node->GetType() != CS_NODE_ELEMENT ) + if(node->GetType() != CS_NODE_ELEMENT) continue; // This is a widget so read it's factory to create it. - if ( strcmp( node->GetValue(), "loc" ) == 0 ) + if(strcmp(node->GetValue(), "loc") == 0) { - Location *newloc = new Location; + Location* newloc = new Location; newloc->pos.x = node->GetAttributeValueAsFloat("x"); newloc->pos.y = node->GetAttributeValueAsFloat("y"); newloc->pos.z = node->GetAttributeValueAsFloat("z"); @@ -524,24 +527,24 @@ -bool LocationType::Import(iDocumentNode *node, iDataConnection *db) +bool LocationType::Import(iDocumentNode* node, iDataConnection* db) { name = node->GetAttributeValue("name"); - if ( !name.Length() ) + if(!name.Length()) { CPrintf(CON_ERROR, "Location Types must all have name attributes.\n"); return false; } - const char * fields[] = - {"name"}; + const char* fields[] = + {"name"}; psStringArray values; values.Push(name); - if (id == -1) + if(id == -1) { id = db->GenericInsertWithID("sc_location_type",fields,values); - if (id == 0) + if(id == 0) { return false; } @@ -552,17 +555,17 @@ idStr.Format("%d",id); return db->GenericUpdateWithID("sc_location_type","id",idStr,fields,values); } - + return true; } -bool LocationType::Load(iResultRow& row, iEngine * engine, iDataConnection *db) +bool LocationType::Load(iResultRow &row, iEngine* engine, iDataConnection* db) { id = row.GetInt("id"); name = row["name"]; - if ( !name.Length() ) + if(!name.Length()) { CPrintf(CON_ERROR, "Location Types must all have name attributes.\n"); return false; @@ -571,14 +574,14 @@ // Load all with same master location type Result rs(db->Select("select loc.*,s.name as sector from sc_locations loc, sectors s where loc.loc_sector_id = s.id and type_id = %d and id_prev_loc_in_region <= 0",id)); // Only load locations, regions to be loaded later - if (!rs.IsValid()) + if(!rs.IsValid()) { - Error2("Could not load locations from db: %s",db->GetLastError() ); + Error2("Could not load locations from db: %s",db->GetLastError()); return false; } - for (int i=0; i<(int)rs.Count(); i++) - { - Location *newloc = new Location; + for(int i=0; i<(int)rs.Count(); i++) + { + Location* newloc = new Location; newloc->Load(rs[i],engine,db); newloc->type = this; locs.Push(newloc); @@ -589,22 +592,22 @@ csArray<Location*> tmpLocs; - if (!rs2.IsValid()) + if(!rs2.IsValid()) { - Error2("Could not load locations from db: %s",db->GetLastError() ); + Error2("Could not load locations from db: %s",db->GetLastError()); return false; } - for (int i=0; i<(int)rs2.Count(); i++) - { - Location *newloc = new Location; + for(int i=0; i<(int)rs2.Count(); i++) + { + Location* newloc = new Location; newloc->Load(rs2[i],engine,db); newloc->type = this; tmpLocs.Push(newloc); } - while (tmpLocs.GetSize()) + while(tmpLocs.GetSize()) { - Location *curr, *first; + Location* curr, *first; curr = first = tmpLocs.Pop(); bool found; first->type = this; @@ -613,9 +616,9 @@ do { found = false; - for (size_t i= 0; i<tmpLocs.GetSize();i++) + for(size_t i= 0; i<tmpLocs.GetSize(); i++) { - if (curr->id == tmpLocs[i]->id_prev_loc_in_region) + if(curr->id == tmpLocs[i]->id_prev_loc_in_region) { curr = tmpLocs[i]; tmpLocs.DeleteIndex(i); @@ -626,12 +629,13 @@ break; } } - - } while (found); - + + } + while(found); + //when not a closed loop of at least 3 points, delete this //polygon, but continue with rest. - if (first->locs.GetSize() <= 2) + if(first->locs.GetSize() <= 2) { Error1("Only two locs for region defined!"); //delete all locations in 'polygon'. When deleting first, @@ -640,14 +644,14 @@ first->locs.DeleteIndex(0); delete first; } - else if (curr->id != first->id_prev_loc_in_region) + else if(curr->id != first->id_prev_loc_in_region) { Error1("First and last loc not connected!"); //delete all locations in 'polygon'. When deleting first, //it will recursively delete its polygon locations, in this //case including itself. So remove that reference first first->locs.DeleteIndex(0); - delete first; + delete first; } else { @@ -655,28 +659,28 @@ locs.Push(first); first->CalculateBoundingBox(); } - } - + } + return true; } -bool LocationType::CheckWithinBounds(iEngine * engine, const csVector3& p,const iSector* sector) +bool LocationType::CheckWithinBounds(iEngine* engine, const csVector3 &p,const iSector* sector) { - for (size_t i = 0; i < locs.GetSize(); i++) + for(size_t i = 0; i < locs.GetSize(); i++) { - if (locs[i]->CheckWithinBounds(engine,p,sector)) return true; + if(locs[i]->CheckWithinBounds(engine,p,sector)) return true; } - + return false; } -bool LocationType::GetRandomPosition(iEngine * engine,csVector3& pos,iSector* §or) +bool LocationType::GetRandomPosition(iEngine* engine,csVector3 &pos,iSector* §or) { - for (size_t i = 0; i < locs.GetSize(); i++) + for(size_t i = 0; i < locs.GetSize(); i++) { - if (locs[i]->GetRandomPosition(engine,pos,sector)) return true; + if(locs[i]->GetRandomPosition(engine,pos,sector)) return true; } - + return false; } @@ -684,7 +688,7 @@ LocationManager::LocationManager() { - + } LocationManager::~LocationManager() @@ -697,40 +701,41 @@ bool LocationManager::Load(iEngine* engine, iDataConnection* db) { - + Result rs(db->Select("select * from sc_location_type")); - if (!rs.IsValid()) + if(!rs.IsValid()) { - Error2("Could not load locations from db: %s",db->GetLastError() ); + Error2("Could not load locations from db: %s",db->GetLastError()); return false; } - for (int i=0; i<(int)rs.Count(); i++) + for(int i=0; i<(int)rs.Count(); i++) { - LocationType *loctype = new LocationType(); + LocationType* loctype = new LocationType(); - if (loctype->Load(rs[i],engine,db)) + if(loctype->Load(rs[i],engine,db)) { - loctypes.Put(loctype->name, loctype); - CPrintf(CON_DEBUG, "Added location type '%s'(%d)\n",loctype->name.GetDataSafe(),loctype->id); + loctypes.Put(loctype->name, loctype); + CPrintf(CON_DEBUG, "Added location type '%s'(%d)\n",loctype->name.GetDataSafe(),loctype->id); } else { - Error2("Could not load location: %s",db->GetLastError() ); + Error2("Could not load location: %s",db->GetLastError()); delete loctype; return false; } - + } + CPrintf(CON_WARNING, "Loaded %d locations \n",rs.Count()); // Create a cache of all the locations. csHash<LocationType*, csString>::GlobalIterator iter(loctypes.GetIterator()); - LocationType *loc; + LocationType* loc; while(iter.HasNext()) { - loc = iter.Next(); - for (size_t i = 0; i < loc->locs.GetSize(); i++) + loc = iter.Next(); + for(size_t i = 0; i < loc->locs.GetSize(); i++) { all_locations.Push(loc->locs[i]); } @@ -751,11 +756,11 @@ LocationType* LocationManager::FindRegion(const char* regname) { - if (!regname) + if(!regname) return NULL; - LocationType *found = loctypes.Get(regname, NULL); - if (found && found->locs[0] && found->locs[0]->IsRegion()) + LocationType* found = loctypes.Get(regname, NULL); + if(found && found->locs[0] && found->locs[0]->IsRegion()) { return found; } @@ -764,21 +769,21 @@ LocationType* LocationManager::FindLocation(const char* locname) { - if (!locname) + if(!locname) return NULL; - LocationType *found = loctypes.Get(locname, NULL); + LocationType* found = loctypes.Get(locname, NULL); return found; } Location* LocationManager::FindLocation(const char* loctype, const char* name) { - LocationType *found = loctypes.Get(loctype, NULL); - if (found) + LocationType* found = loctypes.Get(loctype, NULL); + if(found) { - for (size_t i=0; i<found->locs.GetSize(); i++) + for(size_t i=0; i<found->locs.GetSize(); i++) { - if (strcasecmp(found->locs[i]->name,name) == 0) + if(strcasecmp(found->locs[i]->name,name) == 0) { return found->locs[i]; } @@ -789,29 +794,29 @@ Location* LocationManager::FindLocation(int id) { - for (size_t i=0; i<all_locations.GetSize(); i++) + for(size_t i=0; i<all_locations.GetSize(); i++) { Location* location = all_locations[i]; - if (location->GetID() == id) + if(location->GetID() == id) { return location; } - - if (location->IsRegion()) + + if(location->IsRegion()) { - for (size_t j=0; j<location->locs.GetSize(); j++) + for(size_t j=0; j<location->locs.GetSize(); j++) { Location* location2 = location->locs[j]; - - if (location2->GetID() == id) + + if(location2->GetID() == id) { return location2; } } } - + } return NULL; } @@ -820,35 +825,35 @@ Location* LocationManager::FindNearestLocation(psWorld* world, csVector3 &pos, iSector* sector, float range, float* found_range) { - float min_range = range; + float min_range = range; Location* min_location = NULL; - for (size_t i=0; i<all_locations.GetSize(); i++) + for(size_t i=0; i<all_locations.GetSize(); i++) { Location* location = all_locations[i]; float dist2 = world->Distance(pos,sector,location->pos,location->GetSector(world->GetEngine())); - if (min_range < 0 || dist2 < min_range) + if(min_range < 0 || dist2 < min_range) { min_range = dist2; min_location = location; } } - if (min_location && found_range) *found_range = min_range; - + if(min_location && found_range) *found_range = min_range; + return min_location; } -size_t LocationManager::FindLocationsInSector(iEngine* engine, iSector *sector, csList<Location*>& list) +size_t LocationManager::FindLocationsInSector(iEngine* engine, iSector* sector, csList<Location*> &list) { size_t count = 0; - for (size_t i=0; i<all_locations.GetSize(); i++) + for(size_t i=0; i<all_locations.GetSize(); i++) { Location* location = all_locations[i]; - if (location->GetSector(engine) == sector) + if(location->GetSector(engine) == sector) { list.PushBack(location); count++; @@ -860,25 +865,25 @@ Location* LocationManager::FindNearestLocation(psWorld* world, const char* loctype, csVector3 &pos, iSector* sector, float range, float* found_range) { LocationType* found = loctypes.Get(loctype, NULL); - if (found) + if(found) { - float min_range = range; + float min_range = range; int min_i = -1; - for (size_t i=0; i<found->locs.GetSize(); i++) + for(size_t i=0; i<found->locs.GetSize(); i++) { float dist2 = world->Distance(pos,sector,found->locs[i]->pos,found->locs[i]->GetSector(world->GetEngine())); - if (min_range < 0 || dist2 < min_range) + if(min_range < 0 || dist2 < min_range) { min_range = dist2; min_i = (int)i; } } - if (min_i > -1) // found closest one + if(min_i > -1) // found closest one { - if (found_range) *found_range = min_range; + if(found_range) *found_range = min_range; return found->locs[(size_t)min_i]; } @@ -892,25 +897,25 @@ csArray<float> dist; LocationType* found = loctypes.Get(loctype, NULL); - if (found) + if(found) { - for (size_t i=0; i<found->locs.GetSize(); i++) + for(size_t i=0; i<found->locs.GetSize(); i++) { float dist2 = world->Distance(pos,sector,found->locs[i]->pos,found->locs[i]->GetSector(world->GetEngine())); - if (range < 0 || dist2 < range) + if(range < 0 || dist2 < range) { nearby.Push(found->locs[i]); dist.Push(dist2); } } - if (nearby.GetSize()>0) // found one or more closer than range + if(nearby.GetSize()>0) // found one or more closer than range { size_t pick = psGetRandom((uint32)nearby.GetSize()); - - if (found_range) *found_range = sqrt(dist[pick]); + if(found_range) *found_range = sqrt(dist[pick]); + return nearby[pick]; } } @@ -922,11 +927,11 @@ return loctypes.GetIterator(); } -Location* LocationManager::CreateLocation(iDataConnection* db, LocationType* locationType, const char* locationName, csVector3& pos, iSector* sector, float radius, float rot_angle, const csString& flags) +Location* LocationManager::CreateLocation(iDataConnection* db, LocationType* locationType, const char* locationName, csVector3 &pos, iSector* sector, float radius, float rot_angle, const csString &flags) { Location* location = CreateLocation(locationType, locationName, pos, sector, radius, rot_angle, flags); - if (!location->CreateUpdate(db)) + if(!location->CreateUpdate(db)) { delete location; return NULL; @@ -935,10 +940,10 @@ return location; } -Location* LocationManager::CreateLocation(const char* locationTypeName, const char* locationName, csVector3& pos, iSector* sector, float radius, float rot_angle, const csString& flags) +Location* LocationManager::CreateLocation(const char* locationTypeName, const char* locationName, csVector3 &pos, iSector* sector, float radius, float rot_angle, const csString &flags) { LocationType* locationType = FindLocation(locationTypeName); - if (!locationType) + if(!locationType) { return NULL; } @@ -946,20 +951,20 @@ return CreateLocation(locationType, locationName, pos, sector, radius, rot_angle, flags); } -Location* LocationManager::CreateLocation(LocationType* locationType, const char* locationName, csVector3& pos, iSector* sector, float radius, float rot_angle, const csString& flags) +Location* LocationManager::CreateLocation(LocationType* locationType, const char* locationName, csVector3 &pos, iSector* sector, float radius, float rot_angle, const csString &flags) { Location* location = new Location(locationType, locationName, pos, sector, radius, rot_angle, flags); all_locations.Push(location); - + return location; } -LocationType* LocationManager::CreateLocationType(iDataConnection* db, const csString& locationName) +LocationType* LocationManager::CreateLocationType(iDataConnection* db, const csString &locationName) { LocationType* locationType = new LocationType(-1,locationName); - - if (locationType->CreateUpdate(db)) + + if(locationType->CreateUpdate(db)) { loctypes.Put(locationName, locationType); return locationType; @@ -970,7 +975,7 @@ } -LocationType* LocationManager::CreateLocationType(int id, const csString& locationName) +LocationType* LocationManager::CreateLocationType(int id, const csString &locationName) { LocationType* locationType = new LocationType(id,locationName); loctypes.Put(locationName, locationType); @@ -978,25 +983,25 @@ } -bool LocationManager::RemoveLocationType(iDataConnection* db, const csString& locationName) +bool LocationManager::RemoveLocationType(iDataConnection* db, const csString &locationName) { int res =db->Command("delete from sc_location_type where name='%s'", locationName.GetDataSafe()); - if (res != 1) + if(res != 1) { return false; } - + RemoveLocationType(locationName); return true; } -bool LocationManager::RemoveLocationType(const csString& locationName) +bool LocationManager::RemoveLocationType(const csString &locationName) { LocationType* locationType = FindLocation(locationName); - if (locationType) + if(locationType) { loctypes.Delete(locationType->GetName(),locationType); @@ -1004,7 +1009,7 @@ delete locationType; return true; } - + return false; } Modified: trunk/src/common/util/location.h =================================================================== --- trunk/src/common/util/location.h 2012-12-17 14:24:47 UTC (rev 8507) +++ trunk/src/common/util/location.h 2012-12-17 14:27:38 UTC (rev 8508) @@ -1,7 +1,7 @@ /* * location.h * - * Copyright (C) 2004 Atomic Blue (in...@pl..., http://www.atomicblue.org) + * Copyright (C) 2004 Atomic Blue (in...@pl..., http://www.atomicblue.org) * * * This program is free software; you can redistribute it and/or @@ -65,42 +65,63 @@ /** Constructor */ - Location(LocationType* locationType, const char* locationName, csVector3& pos, iSector* sector, float radius, float rot_angle, const csString& flags); - + Location(LocationType* locationType, const char* locationName, csVector3 &pos, iSector* sector, float radius, float rot_angle, const csString &flags); + /** Destructor */ ~Location(); /** Get the DB ID. */ - int GetID() const { return id; } + int GetID() const + { + return id; + } /** Set DB ID. */ - void SetID(int id) { this->id = id; } - + void SetID(int id) + { + this->id = id; + } + /** Return the position of this location. */ - const csVector3& GetPosition() const { return pos; } + const csVector3 &GetPosition() const + { + return pos; + } /** Get flags. * @note No flags implemented yet. */ - csString GetFlags() const { return csString(); } + csString GetFlags() const + { + return csString(); + } /** Set flags. * @note No flags implemented yet. */ - bool SetFlags(const csString& flags) { return false; } + bool SetFlags(const csString &flags) + { + return false; + } /** Set flag. * @note No flags implemented yet. */ - bool SetFlag(const csString& flag, bool enable) { return false; } - + bool SetFlag(const csString &flag, bool enable) + { + return false; + } + /** Get the Radius. */ - float GetRadius() const { return radius; } + float GetRadius() const + { + return radius; + } /** Set Radius and recalculate the boudning box. */ @@ -112,49 +133,58 @@ /** Get the rotation angle */ - float GetRotationAngle() const { return rot_angle; } - + float GetRotationAngle() const + { + return rot_angle; + } + /** Get the type name of this location. */ const char* GetTypeName() const; /** Load a location from the DB */ - bool Load(iResultRow& row, iEngine *engine, iDataConnection *db); + bool Load(iResultRow &row, iEngine* engine, iDataConnection* db); /** Create or update an entry for this location in the DB. * @note Will update if there is a id different from -1. */ bool CreateUpdate(iDataConnection* db); - + /** Import a location from an XML document. */ - bool Import(iDocumentNode *node, iDataConnection *db, int typeID); + bool Import(iDocumentNode* node, iDataConnection* db, int typeID); /** Query if this location is a region. * @return return true when this location is a region. * * @note Region is a location with multiple points. */ - bool IsRegion() { return locs.GetSize() != 0; } + bool IsRegion() + { + return locs.GetSize() != 0; + } /** Query if this location is a circle */ - bool IsCircle() { return locs.GetSize() == 0; } - + bool IsCircle() + { + return locs.GetSize() == 0; + } + /** Return cached sector or find the sector and cache it from engine. */ - iSector* GetSector(iEngine * engine); + iSector* GetSector(iEngine* engine); /** Return cached sector or find the sector and cache it from engine. */ - iSector* GetSector(iEngine * engine) const; + iSector* GetSector(iEngine* engine) const; /** Return the bounding box for this location * * @return Bounding box of the location */ - const csBox2& GetBoundingBox() const; + const csBox2 &GetBoundingBox() const; /** Function to calculate the bounding box for a location. * @@ -162,10 +192,10 @@ * loaded or modified. */ void CalculateBoundingBox(); - + /** Check if a point is within bounds of this location. */ - bool CheckWithinBounds(iEngine * engine,const csVector3& pos,const iSector* sector); + bool CheckWithinBounds(iEngine* engine,const csVector3 &pos,const iSector* sector); /** Get a random position in the location * @@ -178,22 +208,28 @@ * * @return True if position is found. */ - bool GetRandomPosition(iEngine * engine,csVector3& pos,iSector* §or); - + bool GetRandomPosition(iEngine* engine,csVector3 &pos,iSector* §or); + /** retrive a sector ID. */ - static int GetSectorID(iDataConnection *db, const char* name); + static int GetSectorID(iDataConnection* db, const char* name); /** retrive the name of this location. */ - const char* GetName() const { return name.GetDataSafe(); } + const char* GetName() const + { + return name.GetDataSafe(); + } /** Set the name. */ - void SetName(const csString& name){ this->name = name; } + void SetName(const csString &name) + { + this->name = name; + } /** Return the effect ID for this location or assign a new ID - @param allocator + @param allocator */ uint32_t GetEffectID(iEffectIDAllocator* allocator); @@ -212,11 +248,11 @@ /** Insert a new point in a region after this location. */ Location* Insert(int id, csVector3 &pos, iSector* sector); - + }; /** - * This stores a vector of positions listing a set of + * This stores a vector of positions listing a set of * points defining a common type of location, such as * a list of burning fires or guard stations--whatever * the NPCs need. @@ -234,8 +270,8 @@ /** Constructor */ - LocationType(int id, const csString& name); - + LocationType(int id, const csString &name); + /** Destructor */ ~LocationType(); @@ -244,16 +280,16 @@ * @note Will update if there is a id different from -1. */ bool CreateUpdate(iDataConnection* db); - + /** Load a location type from an XML file. */ - bool Load(iDocumentNode *node); - bool Import(iDocumentNode *node, iDataConnection *db); - bool ImportLocations(iDocumentNode *node, iDataConnection *db); + bool Load(iDocumentNode* node); + bool Import(iDocumentNode* node, iDataConnection* db); + bool ImportLocations(iDocumentNode* node, iDataConnection* db); /** Load a location type from DB. */ - bool Load(iResultRow& row, iEngine *engine, iDataConnection *db); + bool Load(iResultRow &row, iEngine* engine, iDataConnection* db); /** Add a new location to this location type. */ @@ -262,11 +298,11 @@ /** Remove a location from this location type. */ void RemoveLocation(Location* location); - + /** Check if a point is within any of the locaitons of this location type. */ - bool CheckWithinBounds(iEngine * engine,const csVector3& pos,const iSector* sector); - + bool CheckWithinBounds(iEngine* engine,const csVector3 &pos,const iSector* sector); + /** Get a random position in the location * * Will return the position found. Do not relay on the @@ -278,21 +314,27 @@ * * @return True if position is found. */ - bool GetRandomPosition(iEngine * engine,csVector3& pos,iSector* §or); + bool GetRandomPosition(iEngine* engine,csVector3 &pos,iSector* §or); /** retrive the ID of this location type. */ - int GetID() const { return id; } - + int GetID() const + { + return id; + } + /** retrive the name of this location type. */ - const char* GetName() const { return name.GetDataSafe(); } + const char* GetName() const + { + return name.GetDataSafe(); + } }; /** * Manager that manage all locations and location types. */ -class LocationManager +class LocationManager { public: /** Constructor @@ -330,22 +372,22 @@ /** Find a location of a specfic location type by nam. */ Location* FindLocation(int id); - + /** Find all location in given sector. */ - size_t FindLocationsInSector(iEngine* engine, iSector *sector, csList<Location*>& list); + size_t FindLocationsInSector(iEngine* engine, iSector* sector, csList<Location*> &list); /** Find the neares location to a point. */ - Location* FindNearestLocation(psWorld* world, csVector3& pos, iSector* sector, float range, float* found_range); + Location* FindNearestLocation(psWorld* world, csVector3 &pos, iSector* sector, float range, float* found_range); /** Find the neares location to a point of a given location type. */ - Location* FindNearestLocation(psWorld* world, const char* loctype, csVector3& pos, iSector* sector, float range, float* found_range); + Location* FindNearestLocation(psWorld* world, const char* loctype, csVector3 &pos, iSector* sector, float range, float* found_range); /** Find a random location within a given max range. */ - Location* FindRandomLocation(psWorld* world, const char* loctype, csVector3& pos, iSector* sector, float range, float* found_range); + Location* FindRandomLocation(psWorld* world, const char* loctype, csVector3 &pos, iSector* sector, float range, float* found_range); /** Get a iterator to all Location Types stored in the Location Manager. */ @@ -353,32 +395,32 @@ /** Create a new location. And add it to the DB. */ - Location* CreateLocation(iDataConnection* db, LocationType* locationType, const char* locationName, csVector3& pos, iSector* sector, float radius, float rot_angle, const csString& flags); + Location* CreateLocation(iDataConnection* db, LocationType* locationType, const char* locationName, csVector3 &pos, iSector* sector, float radius, float rot_angle, const csString &flags); /** Create a new location */ - Location* CreateLocation(const char* locationTypeName, const char* locationName, csVector3& pos, iSector* sector, float radius, float rot_angle, const csString& flags); + Location* CreateLocation(const char* locationTypeName, const char* locationName, csVector3 &pos, iSector* sector, float radius, float rot_angle, const csString &flags); /** Create a new location */ - Location* CreateLocation(LocationType* locationType, const char* locationName, csVector3& pos, iSector* sector, float radius, float rot_angle, const csString& flags); - + Location* CreateLocation(LocationType* locationType, const char* locationName, csVector3 &pos, iSector* sector, float radius, float rot_angle, const csString &flags); + /** Create a new location type */ - LocationType* CreateLocationType(iDataConnection* db, const csString& locationName); + LocationType* CreateLocationType(iDataConnection* db, const csString &locationName); /** Create a new location type */ - LocationType* CreateLocationType(int id, const csString& locationName); + LocationType* CreateLocationType(int id, const csString &locationName); /** Remove a location type */ - bool RemoveLocationType(iDataConnection* db, const csString& locationName); + bool RemoveLocationType(iDataConnection* db, const csString &locationName); /** Remove a location type */ - bool RemoveLocationType(const csString& locationName); - + bool RemoveLocationType(const csString &locationName); + private: csHash<LocationType*, csString> loctypes; ///< Hash on all location types, hashed on the type. csArray<Location*> all_locations; ///< Quick access array to all locations. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2013-02-23 18:21:03
|
Revision: 8601 http://planeshift.svn.sourceforge.net/planeshift/?rev=8601&view=rev Author: magodra Date: 2013-02-23 18:20:51 +0000 (Sat, 23 Feb 2013) Log Message: ----------- - Patch to not set variable to self in skillcahce by Ralph. (PS#5641) Modified Paths: -------------- trunk/src/common/util/skillcache.cpp trunk/src/common/util/skillcache.h Modified: trunk/src/common/util/skillcache.cpp =================================================================== --- trunk/src/common/util/skillcache.cpp 2013-02-23 13:23:14 UTC (rev 8600) +++ trunk/src/common/util/skillcache.cpp 2013-02-23 18:20:51 UTC (rev 8601) @@ -82,9 +82,13 @@ unsigned short psSkillCacheItem::size() const { if (removed) + { return sizeof(uint8_t); + } else + { return sizeof(uint8_t) + 7*sizeof(uint16_t) + sizeof(bool); + } } void psSkillCacheItem::update(unsigned short R, @@ -179,6 +183,7 @@ removed = true; break; case psSkillCacheItem::UPDATE_OR_ADD: + removed = false; rank = msg->GetUInt16(); actualStat = msg->GetUInt16(); knowledge = msg->GetUInt16(); @@ -297,20 +302,26 @@ void psSkillCache::setModified(bool modified) { - modified = modified; + this->modified = modified; + psSkillCacheIter p(skillCache); while (p.HasNext()) { psSkillCacheItem *item = p.Next(); if (item) + { item->setModified(modified); + } } } bool psSkillCache::isModified() { if (modified) + { return true; + } + psSkillCacheIter p(skillCache); while (!modified && p.HasNext()) { @@ -323,7 +334,7 @@ void psSkillCache::setRemoved(bool removed) { - removed = removed; + this->removed = removed; } bool psSkillCache::hasRemoved() @@ -426,6 +437,38 @@ modified = false; } +csString psSkillCache::ToString() const +{ + csString result; + + psSkillCacheIter p(skillCache); + + while (p.HasNext()) + { + psSkillCacheItem* item = p.Next(); + + if (item->isRemoved()) + { + result.AppendFmt("NID: %d Removed;", item->getNameId()); + } + else + { + result.AppendFmt("NID: %d Cat: %d R: %d AS: %d K: %d KC: %d P: %d PC: %d;", + item->getNameId(), item->getCategory(), item->getRank(), + item->getActualStat(), item->getKnowledge(), + item->getKnowledgeCost(), item->getPractice(), + item->getPracticeCost()); + } + + if (p.HasNext()) + { + result.Append(" "); + } + } + return result; +} + + bool psSkillCache::deleteItem(psSkillCacheItem *item) { psSkillCacheIter p(skillCache); Modified: trunk/src/common/util/skillcache.h =================================================================== --- trunk/src/common/util/skillcache.h 2013-02-23 13:23:14 UTC (rev 8600) +++ trunk/src/common/util/skillcache.h 2013-02-23 18:20:51 UTC (rev 8601) @@ -21,6 +21,7 @@ #define PS_SKILL_CACHE_H #include <csutil/list.h> +#include <csutil/csstring.h> class MsgEntry; @@ -129,6 +130,7 @@ private: bool removed; bool modified; + unsigned int nameId; int skillId; @@ -242,6 +244,11 @@ */ void read(MsgEntry *); + /** + * Convert cache to string. + */ + csString ToString() const; + private: csList<psSkillCacheItem *> skillCache; bool modified; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2013-04-06 12:11:15
|
Revision: 8673 http://planeshift.svn.sourceforge.net/planeshift/?rev=8673&view=rev Author: magodra Date: 2013-04-06 12:11:07 +0000 (Sat, 06 Apr 2013) Log Message: ----------- - Added return on the Pural function to self. Modified Paths: -------------- trunk/src/common/util/psstring.cpp trunk/src/common/util/psstring.h Modified: trunk/src/common/util/psstring.cpp =================================================================== --- trunk/src/common/util/psstring.cpp 2013-04-06 12:09:24 UTC (rev 8672) +++ trunk/src/common/util/psstring.cpp 2013-04-06 12:11:07 UTC (rev 8673) @@ -274,11 +274,13 @@ } } -void psString::Plural() +psString& psString::Plural() { // Check exceptions first if ( Slice(Size-4).Downcase() == "fish" ) - return; + { + return *this; + } const char *suffix = "s"; @@ -316,6 +318,8 @@ } Append(suffix); + + return *this; } void psString::Split(csStringArray& arr, char delim) Modified: trunk/src/common/util/psstring.h =================================================================== --- trunk/src/common/util/psstring.h 2013-04-06 12:09:24 UTC (rev 8672) +++ trunk/src/common/util/psstring.h 2013-04-06 12:11:07 UTC (rev 8673) @@ -75,7 +75,7 @@ size_t FindCommonLength(const psString& other) const; bool IsVowel(size_t pos); /// Check if a character is a vowel - void Plural(); /// Turn the last word of the string into an English plural + psString& Plural(); /// Turn the last word of the string into an English plural void Split(csStringArray& result, char delim='|'); }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ral...@us...> - 2013-10-01 02:40:07
|
Revision: 8834 http://sourceforge.net/p/planeshift/code/8834 Author: ralphcampbell Date: 2013-10-01 02:40:04 +0000 (Tue, 01 Oct 2013) Log Message: ----------- Fix bug 6089 - memory leak in waypoint.h Modified Paths: -------------- trunk/src/common/util/waypoint.cpp trunk/src/common/util/waypoint.h Modified: trunk/src/common/util/waypoint.cpp =================================================================== --- trunk/src/common/util/waypoint.cpp 2013-10-01 02:36:50 UTC (rev 8833) +++ trunk/src/common/util/waypoint.cpp 2013-10-01 02:40:04 UTC (rev 8834) @@ -274,9 +274,7 @@ { if (aliasName.CompareNoCase(aliases[i]->alias)) { - WaypointAlias* alias = aliases[i]; aliases.DeleteIndexFast(i); - delete alias; return; } } Modified: trunk/src/common/util/waypoint.h =================================================================== --- trunk/src/common/util/waypoint.h 2013-10-01 02:36:50 UTC (rev 8833) +++ trunk/src/common/util/waypoint.h 2013-10-01 02:40:04 UTC (rev 8834) @@ -83,7 +83,7 @@ public: Location loc; ///< Id and position csString group; ///< Hold group name for this waypoint if any. - csArray<WaypointAlias*> aliases; ///< Hold aliases for this waypoint + csPDelArray<WaypointAlias> aliases; ///< Hold aliases for this waypoint csArray<Waypoint*> links; ///< Links to other waypoinst connected with paths from this node. csArray<float> dists; ///< Distances of each link. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ma...@us...> - 2013-12-29 22:06:45
|
Revision: 9128 http://sourceforge.net/p/planeshift/code/9128 Author: magodra Date: 2013-12-29 22:06:41 +0000 (Sun, 29 Dec 2013) Log Message: ----------- Added LOG_HIRE for debug outputs. Modified Paths: -------------- trunk/src/common/util/log.cpp trunk/src/common/util/log.h Modified: trunk/src/common/util/log.cpp =================================================================== --- trunk/src/common/util/log.cpp 2013-12-29 19:19:50 UTC (rev 9127) +++ trunk/src/common/util/log.cpp 2013-12-29 22:06:41 UTC (rev 9128) @@ -71,7 +71,8 @@ "LOG_DUELS", "LOG_DRDATA", "LOG_ACTIONLOCATION", - "LOG_ITEM" + "LOG_ITEM", + "LOG_HIRE" }; // End of flagnames const char *flagsetting[] = { @@ -110,7 +111,8 @@ "PlaneShift.Log.Duels", "PlaneShift.Log.DRData", "PlaneShift.Log.ActionLocation", - "PlaneShift.Log.Item" + "PlaneShift.Log.Item", + "PlaneShift.Log.Hire" }; // End of flagsettings bool DoLog(int severity, LOG_TYPES type, uint32 filter_id) Modified: trunk/src/common/util/log.h =================================================================== --- trunk/src/common/util/log.h 2013-12-29 19:19:50 UTC (rev 9127) +++ trunk/src/common/util/log.h 2013-12-29 22:06:41 UTC (rev 9128) @@ -140,6 +140,9 @@ // Log item related transactions LOG_ITEM, + // Log Hire related transaction + LOG_HIRE, + // NOTE: Remember to update the flagnames and flagsettings tables in log.cpp when adding new entries MAX_FLAGS }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |