Added extractMapInfo(vector---) + finish const correct functions

This commit is contained in:
suhrke 2017-07-06 11:10:04 -07:00
parent 3b73c4300a
commit 100c830c83
2 changed files with 69 additions and 39 deletions

View File

@ -84,15 +84,6 @@ EntityConverter::EntityConverter(const std::string &entityMapFile,
/*
*--------------------------------------------------------------------------------------
* Class: EntityConverter
* Method: EntityConverter :: extractMapInfo
* Description: Read through entities, matching related as necessary
* Note: For now, accomplishes the same goal as the pre-scan
* constructor
*--------------------------------------------------------------------------------------
*/
void void
EntityConverter::extractMapInfo(std::queue<std::vector<std::string>> entities) EntityConverter::extractMapInfo(std::queue<std::vector<std::string>> entities)
{ {
@ -101,7 +92,7 @@ EntityConverter::extractMapInfo(std::queue<std::vector<std::string>> entities)
} }
else { else {
while ( ! entities.empty() ) { while ( ! entities.empty() ) {
std::vector<std::string> entity = entities.front(); std::vector<std::string> entity( entities.front() );
entities.pop(); entities.pop();
std::stringstream ss; std::stringstream ss;
@ -120,6 +111,32 @@ EntityConverter::extractMapInfo(std::queue<std::vector<std::string>> entities)
void
EntityConverter::extractMapInfo(const std::vector<std::vector<std::string>> &entities)
{
if( haveMapInfo_ ) {
std::cerr << "Map info already extracted, doing nothing" << std::endl;
}
else {
for ( int i = 0; i < entities.size(); i++ ) {
std::vector<std::string> entity( entities[i] );
std::stringstream ss;
std::copy(entity.begin(), entity.end(),
std::ostream_iterator<std::string>(ss, "\n"));
std::string nextLine;
if ( getline(ss, nextLine )) {
extractFromEntity(nextLine, ss);
}
}
}
haveMapInfo_ = true;
}
std::vector<std::string> std::vector<std::string>
EntityConverter::convert(const std::vector<std::string> &lines) EntityConverter::convert(const std::vector<std::string> &lines)
{ {
@ -208,7 +225,7 @@ EntityConverter::convert(const std::vector<std::string> &lines)
* PROTECTED * PROTECTED
*-----------------------------------------------------------------------------*/ *-----------------------------------------------------------------------------*/
std::vector<std::string> std::vector<std::string>
EntityConverter::convertPickup(const std::vector<std::string> &lines) EntityConverter::convertPickup(const std::vector<std::string> &lines) const
{ {
std::vector<std::string> convertedLines; std::vector<std::string> convertedLines;
//can ignore angle of pickups in xonotic format //can ignore angle of pickups in xonotic format
@ -245,7 +262,7 @@ EntityConverter::convertPickup(const std::vector<std::string> &lines)
if ( havePosition && havePickupID ) { if ( havePosition && havePickupID ) {
std::stringstream pickupStream; std::stringstream pickupStream;
pickupStream << "\"classname\" \"" << pickupMapping_[pickupID] << "\"" << std::endl; pickupStream << "\"classname\" \"" << pickupMapping_.find(pickupID)->second << "\"" << std::endl;
convertedLines.push_back ( pickupStream.str() ); convertedLines.push_back ( pickupStream.str() );
// coordinates reordered to x, z, y // coordinates reordered to x, z, y
std::stringstream positionStream; std::stringstream positionStream;
@ -272,7 +289,7 @@ EntityConverter::convertPickup(const std::vector<std::string> &lines)
*-------------------------------------------------------------------------------------- *--------------------------------------------------------------------------------------
*/ */
std::vector<std::string> std::vector<std::string>
EntityConverter::convertPlayerSpawn(const std::vector<std::string> &lines) EntityConverter::convertPlayerSpawn(const std::vector<std::string> &lines) const
{ {
std::vector<std::string> convertedLines; std::vector<std::string> convertedLines;
// Requires position coordinate // Requires position coordinate
@ -377,7 +394,7 @@ EntityConverter::convertPlayerSpawn(const std::vector<std::string> &lines)
std::vector<std::string> std::vector<std::string>
EntityConverter::convertJumpPad(const std::vector<std::string> &lines) EntityConverter::convertJumpPad(const std::vector<std::string> &lines) const
{ {
std::vector<std::string> convertedLines; std::vector<std::string> convertedLines;
std::string targetName; std::string targetName;
@ -402,7 +419,7 @@ EntityConverter::convertJumpPad(const std::vector<std::string> &lines)
std::vector<std::string> std::vector<std::string>
EntityConverter::convertTeleporter(const std::vector<std::string> &lines) EntityConverter::convertTeleporter(const std::vector<std::string> &lines) const
{ {
std::vector<std::string> convertedLines; std::vector<std::string> convertedLines;
std::string targetName; std::string targetName;
@ -427,7 +444,7 @@ EntityConverter::convertTeleporter(const std::vector<std::string> &lines)
std::vector<std::string> std::vector<std::string>
EntityConverter::convertTarget(const std::vector<std::string> &lines) EntityConverter::convertTarget(const std::vector<std::string> &lines) const
{ {
std::vector<std::string> convertedLines; std::vector<std::string> convertedLines;
//position and name required, angles optional //position and name required, angles optional
@ -475,7 +492,7 @@ EntityConverter::convertTarget(const std::vector<std::string> &lines)
} }
if ( havePosition && haveName) { if ( havePosition && haveName) {
if ( targetMap_[targetName] == "Teleporter") { if ( targetMap_.find(targetName)->second == "Teleporter") {
convertedLines.push_back ( "\"classname\" \"misc_teleporter_dest\"\n" ); convertedLines.push_back ( "\"classname\" \"misc_teleporter_dest\"\n" );
// coordinates reordered to x, z, y // coordinates reordered to x, z, y
// teleporter height is OFFSET // teleporter height is OFFSET
@ -484,7 +501,7 @@ EntityConverter::convertTarget(const std::vector<std::string> &lines)
offset(coords[1], OFFSET_PLAYER) << "\"" << std::endl; offset(coords[1], OFFSET_PLAYER) << "\"" << std::endl;
convertedLines.push_back ( oss.str() ); convertedLines.push_back ( oss.str() );
} }
else if ( targetMap_[targetName] == "JumpPad") { else if ( targetMap_.find(targetName)->second == "JumpPad") {
convertedLines.push_back ( "\"classname\" \"target_position\"\n" ); convertedLines.push_back ( "\"classname\" \"target_position\"\n" );
// coordinates reordered to x, z, y // coordinates reordered to x, z, y
std::stringstream oss; std::stringstream oss;
@ -513,7 +530,7 @@ EntityConverter::convertTarget(const std::vector<std::string> &lines)
std::vector<std::string> std::vector<std::string>
EntityConverter::convertRaceStart(const std::vector<std::string> &lines) EntityConverter::convertRaceStart(const std::vector<std::string> &lines) const
{ {
std::vector<std::string> convertedLines; std::vector<std::string> convertedLines;
convertedLines.push_back ("\"classname\" \"trigger_race_checkpoint\"\n"); convertedLines.push_back ("\"classname\" \"trigger_race_checkpoint\"\n");
@ -525,7 +542,7 @@ EntityConverter::convertRaceStart(const std::vector<std::string> &lines)
std::vector<std::string> std::vector<std::string>
EntityConverter::convertRaceFinish(const std::vector<std::string> &lines) EntityConverter::convertRaceFinish(const std::vector<std::string> &lines) const
{ {
std::vector<std::string> convertedLines; std::vector<std::string> convertedLines;
convertedLines.push_back ("\"classname\" \"trigger_race_checkpoint\"\n"); convertedLines.push_back ("\"classname\" \"trigger_race_checkpoint\"\n");
@ -537,7 +554,7 @@ EntityConverter::convertRaceFinish(const std::vector<std::string> &lines)
std::vector<std::string> std::vector<std::string>
EntityConverter::convertPointLight(const std::vector<std::string> &lines) EntityConverter::convertPointLight(const std::vector<std::string> &lines) const
{ {
std::vector<std::string> convertedLines; std::vector<std::string> convertedLines;
//position and intensity required, color optional //position and intensity required, color optional
@ -705,7 +722,7 @@ EntityConverter::offset(const std::string &value, const float amount) const
void void
EntityConverter::hexToRGB(const std::string &hex, float &r, float &g, float &b) EntityConverter::hexToRGB(const std::string &hex, float &r, float &g, float &b) const
{ {
unsigned int value; unsigned int value;
std::stringstream ss; std::stringstream ss;
@ -734,18 +751,20 @@ EntityConverter::adjustBrightness(const std::string &value) const
// DEBUG // DEBUG
void void
EntityConverter::printMapping() EntityConverter::printMapping() const
{ {
std::map<int, std::string>::iterator it; std::cout << std::endl << "Reflex pickup ID mapped to Xonotic pickup names: " << std::endl;
std::map<int, std::string>::const_iterator it;
for ( it=pickupMapping_.begin(); it!=pickupMapping_.end(); ++it ) for ( it=pickupMapping_.begin(); it!=pickupMapping_.end(); ++it )
std::cout << it->first << " => " << it->second << std::endl; std::cout << it->first << " => " << it->second << std::endl;
} }
// DEBUG // DEBUG
void void
EntityConverter::printTargetSources() EntityConverter::printTargetSources() const
{ {
std::map<std::string, std::string>::iterator it; std::cout << std::endl << "Target and Sources: " << std::endl;
std::map<std::string, std::string>::const_iterator it;
for ( it=targetMap_.begin(); it!=targetMap_.end(); ++it ) for ( it=targetMap_.begin(); it!=targetMap_.end(); ++it )
std::cout << it->first << " => " << it->second << std::endl; std::cout << it->first << " => " << it->second << std::endl;
} }

View File

@ -98,6 +98,17 @@ class EntityConverter
*-------------------------------------------------------------------------------------- *--------------------------------------------------------------------------------------
*/ */
void extractMapInfo(std::queue<std::vector<std::string>> entities); void extractMapInfo(std::queue<std::vector<std::string>> entities);
/*
*--------------------------------------------------------------------------------------
* Class: EntityConverter
* Method: EntityConverter :: extractMapInfo
* Description: Get information needed by the converter that can't be obtained
* in entity-by-entity conversion (teleport and jump pad
* Parameter: vector of vector of string entities, ALL entities in a .map file
* THROWS: runtime_error when encountering malformed entity
*--------------------------------------------------------------------------------------
*/
void extractMapInfo(const std::vector<std::vector<std::string>> &entities);
@ -113,14 +124,14 @@ class EntityConverter
* Return: vector of strings, the converted entity * Return: vector of strings, the converted entity
*-------------------------------------------------------------------------------------- *--------------------------------------------------------------------------------------
*/ */
std::vector<std::string> convertPickup(const std::vector<std::string> &lines); std::vector<std::string> convertPickup(const std::vector<std::string> &lines) const;
std::vector<std::string> convertPlayerSpawn(const std::vector<std::string> &lines); std::vector<std::string> convertPlayerSpawn(const std::vector<std::string> &lines) const;
std::vector<std::string> convertJumpPad(const std::vector<std::string> &lines); std::vector<std::string> convertJumpPad(const std::vector<std::string> &lines) const;
std::vector<std::string> convertTeleporter(const std::vector<std::string> &lines); std::vector<std::string> convertTeleporter(const std::vector<std::string> &lines) const;
std::vector<std::string> convertTarget(const std::vector<std::string> &lines); std::vector<std::string> convertTarget(const std::vector<std::string> &lines) const;
std::vector<std::string> convertRaceStart(const std::vector<std::string> &lines); std::vector<std::string> convertRaceStart(const std::vector<std::string> &lines) const;
std::vector<std::string> convertRaceFinish(const std::vector<std::string> &lines); std::vector<std::string> convertRaceFinish(const std::vector<std::string> &lines) const;
std::vector<std::string> convertPointLight(const std::vector<std::string> &lines); std::vector<std::string> convertPointLight(const std::vector<std::string> &lines) const;
@ -194,7 +205,7 @@ class EntityConverter
* Parameter: float b, RETURN BY REFERENCE: converted blue value * Parameter: float b, RETURN BY REFERENCE: converted blue value
*-------------------------------------------------------------------------------------- *--------------------------------------------------------------------------------------
*/ */
void hexToRGB(const std::string &hex, float &r, float &g, float &b); void hexToRGB(const std::string &hex, float &r, float &g, float &b) const;
/* /*
*-------------------------------------------------------------------------------------- *--------------------------------------------------------------------------------------
* Class: EntityConverter * Class: EntityConverter
@ -207,8 +218,8 @@ class EntityConverter
void printMapping(); //DEBUG void printMapping() const; //DEBUG
void printTargetSources(); //DEBUG void printTargetSources() const; //DEBUG
}; };