Location* LocationManager::FindLocation(int id) { for(size_t i=0; i<all_locations.GetSize(); i++) { Location* location = all_locations[i]; if(location->GetID() == id) { return location; } if(location->IsRegion()) { for(size_t j=0; j<location->locs.GetSize(); j++) { Location* location2 = location->locs[j]; if(location2->GetID() == id) { return location2; } } } } return NULL; }
Location* Location::Insert(int id, csVector3 &pos, iSector* sector) { 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) { locs.Push(this); // First location is in the locs as well. region = this; } // Update all the pointers and stuff. location->region = region; size_t index = region->locs.Find(this); Location* next = region->locs[(index+1)%region->locs.GetSize()]; next->id_prev_loc_in_region = location->GetID(); if(index+1 >= region->locs.GetSize()) { region->locs.Push(location); } else { region->locs.Insert((index+1)%region->locs.GetSize(),location); } return location; }