From: <phi...@us...> - 2007-05-27 09:36:48
|
Revision: 7272 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7272&view=rev Author: philippeqc Date: 2007-05-27 02:36:47 -0700 (Sun, 27 May 2007) Log Message: ----------- Basic support for old maps win and death zones. Modified Paths: -------------- armagetronad/trunk/armagetronad/src/tron/gParser.cpp armagetronad/trunk/armagetronad/src/tron/gParser.h Modified: armagetronad/trunk/armagetronad/src/tron/gParser.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-05-26 11:54:26 UTC (rev 7271) +++ armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-05-27 09:36:47 UTC (rev 7272) @@ -53,7 +53,18 @@ static tString polygonal_shape_used(DEFAULT_POLYGONAL_SHAPE_USED); static nSettingItemWatched<tString> safetymecanism_polygonal_shapeused("POLYGONAL_SHAPE_USED",polygonal_shape_used, nConfItemVersionWatcher::Group_Breaking, 21 ); +int mapVersion = 0; // The version of the map currently being parsed. Used to adapt parsing to support version specific features +// The following are only relevant in the case of zones from maps using version 1 +static REAL sg_conquestRate = .5; +static REAL sg_defendRate = .25; +static REAL sg_conquestDecayRate = .1; + +static tSettingItem< REAL > sg_conquestRateConf( "FORTRESS_CONQUEST_RATE", sg_conquestRate ); +static tSettingItem< REAL > sg_defendRateConf( "FORTRESS_DEFEND_RATE", sg_defendRate ); +static tSettingItem< REAL > sg_conquestDecayRateConf( "FORTRESS_CONQUEST_DECAY_RATE", sg_conquestDecayRate ); + + //! Warn about deprecated map format static void sg_Deprecated() { @@ -68,7 +79,7 @@ static bool newGameRound; // Indicate that a round has just started when true (no not really, a bad approximation) // the following crash on the server as soon as the player being monitored dies!!!! -float tSysTimeHack2(float x) +float tSysTimeHack2(float x) { int playerID = sr_viewportBelongsToPlayer[ 0 ]; // get the player @@ -79,8 +90,8 @@ static float basePing; // preserve basePing only at the start of a new round if (newGameRound == true) { - newGameRound = false; - basePing = asdf; + newGameRound = false; + basePing = asdf; } return static_cast<float> (tSysTimeFloat() /*+ (player->netPlayer->ping*2)*/ + basePing/2); @@ -96,16 +107,16 @@ m_Doc = NULL; // HACK - philippeqc - // This seems as inconvenient as any other place to load the + // This seems as inconvenient as any other place to load the // static tables of variables and functions available. - // It's run once per map loading, between round, so its basically + // It's run once per map loading, between round, so its basically // cost less vs the real structural mess that it cause ;) // vars[tString("sizeMultiplier")] = &sizeMultiplier; // BAD dont use other than as an example, non static content - - // tValue::Expr::functions[tString("time")] = &tSysTimeHack; + + // tValue::Expr::functions[tString("time")] = &tSysTimeHack; #ifdef DEBUG_ZONE_SYNC - tValue::Expr::functions[tString("time2")] = &tSysTimeHack2; + tValue::Expr::functions[tString("time2")] = &tSysTimeHack2; #endif //DEBUG_ZONE_SYNC // tValue::Expr::functions[tString("sizeMultiplier")] = &gArena::GetSizeMultiplierHack; // static @@ -491,9 +502,56 @@ } zShapePtr -gParser::parseShapeCircle(eGrid *grid, xmlNodePtr cur, unsigned short idZone, const xmlChar * keyword) +gParser::parseShapeCircleArthemis(eGrid *grid, xmlNodePtr cur, unsigned short idZone, const xmlChar * keyword) { zShapePtr shape = zShapePtr( new zShapeCircle(grid, idZone) ); + + // Build up the scale information + { + tFunction tfScale; + tfScale.SetOffset( myxmlGetPropFloat(cur, "radius") * sizeMultiplier ); + tfScale.SetSlope( myxmlGetPropFloat(cur, "growth") * sizeMultiplier ); + shape->setScale( tfScale ); + } + + // Set up the default rotation speed + { + tFunction tfRotation; + tfRotation.SetOffset( .3f ); + shape->setRotation( tfRotation ); + } + + // Set up the location + cur = cur->xmlChildrenNode; + while( cur != NULL) { + if (!xmlStrcmp(cur->name, (const xmlChar *)"text") || !xmlStrcmp(cur->name, (const xmlChar *)"comment")) {} + else if (isElement(cur->name, (const xmlChar *)"Point", keyword)) { + REAL x = myxmlGetPropFloat(cur, "x"); + REAL y = myxmlGetPropFloat(cur, "y"); + + tFunction tfPos; + tfPos.SetOffset( x * sizeMultiplier ); + shape->setPosX( tfPos ); + + tfPos.SetOffset( y * sizeMultiplier ); + shape->setPosY( tfPos ); + + endElementAlternative(grid, cur, keyword); + } + else if (isElement(cur->name, (const xmlChar *)"Alternative", keyword)) { + if (isValidAlternative(cur, keyword)) { + parseAlternativeContent(grid, cur); + } + } + cur = cur->next; + } + return shape; +} + +zShapePtr +gParser::parseShapeCircleBachus(eGrid *grid, xmlNodePtr cur, unsigned short idZone, const xmlChar * keyword) +{ + zShapePtr shape = zShapePtr( new zShapeCircle(grid, idZone) ); parseShape(grid, cur, keyword, shape); return shape; @@ -519,29 +577,29 @@ // Remove when all that is variant has been ported to ruby void gParser::myCheapParameterSplitter(const string &str, tFunction &tf, bool addSizeMultiplier) { - REAL param[2] = {0.0, 0.0}; - int bPos; - if( (bPos = str.find(',')) != -1) + REAL param[2] = {0.0, 0.0}; + int bPos; + if( (bPos = str.find(',')) != -1) { - param[0] = atof(str.substr(0, bPos).c_str()); - param[1] = atof(str.substr(bPos + 1, str.length()).c_str()); + param[0] = atof(str.substr(0, bPos).c_str()); + param[1] = atof(str.substr(bPos + 1, str.length()).c_str()); } - else + else { - param[0] = atof(str.c_str()); + param[0] = atof(str.c_str()); } - if(addSizeMultiplier) + if(addSizeMultiplier) { - param[0] = param[0] * sizeMultiplier; - param[1] = param[1] * sizeMultiplier; + param[0] = param[0] * sizeMultiplier; + param[1] = param[1] * sizeMultiplier; } - tf.SetOffset(param[0]); - tf.SetSlope(param[1]); + tf.SetOffset(param[0]); + tf.SetSlope(param[1]); } #endif void -gParser::parseShape(eGrid *grid, xmlNodePtr cur, const xmlChar * keyword, zShapePtr &shape) +gParser::parseShape(eGrid *grid, xmlNodePtr cur, const xmlChar * keyword, zShapePtr &shape) { tValue::BasePtr xp; tValue::BasePtr yp; @@ -553,8 +611,8 @@ shape->setScale( tValue::BasePtr( new tValue::Expr (str, tValue::Expr::vars, tValue::Expr::functions)), str ); #else string str = string(myxmlGetProp(cur, "scale")); - tFunction tfScale; - myCheapParameterSplitter(str, tfScale, false); + tFunction tfScale; + myCheapParameterSplitter(str, tfScale, true); shape->setScale( tfScale ); #endif } @@ -565,8 +623,8 @@ shape->setRotation( tValue::BasePtr( new tValue::Expr (str, tValue::Expr::vars, tValue::Expr::functions)), str ); #else string str = string(myxmlGetProp(cur, "rotation")); - tFunction tfRotation; - myCheapParameterSplitter(str, tfRotation, false); + tFunction tfRotation; + myCheapParameterSplitter(str, tfRotation, false); shape->setRotation( tfRotation ); #endif } @@ -582,34 +640,34 @@ tString strY = tString("(" + tString(myxmlGetProp(cur, "y")) + ")*sizeMultiplier()"); yp = tValue::BasePtr( new tValue::Expr (strY, tValue::Expr::vars, tValue::Expr::functions) ); - if(centerLocationFound == false) { + if(centerLocationFound == false) { shape->setPosX( xp, strX ); shape->setPosY( yp, strY ); centerLocationFound = true; - } - else { - zShapePolygon *tmpShapePolygon = dynamic_cast<zShapePolygon *>( shape.get() ); - if (tmpShapePolygon) - tmpShapePolygon->addPoint( myPoint( xp, yp ), std::pair<tString, tString>(strX, strY) ); - } + } + else { + zShapePolygon *tmpShapePolygon = dynamic_cast<zShapePolygon *>( shape.get() ); + if (tmpShapePolygon) + tmpShapePolygon->addPoint( myPoint( xp, yp ), std::pair<tString, tString>(strX, strY) ); + } #else - string strX = string(myxmlGetProp(cur, "x")); - tFunction tfX; - myCheapParameterSplitter(strX, tfX, true); - string strY = string(myxmlGetProp(cur, "y")); - tFunction tfY; - myCheapParameterSplitter(strY, tfY, true); + string strX = string(myxmlGetProp(cur, "x")); + tFunction tfX; + myCheapParameterSplitter(strX, tfX, true); + string strY = string(myxmlGetProp(cur, "y")); + tFunction tfY; + myCheapParameterSplitter(strY, tfY, true); - if(centerLocationFound == false) { + if(centerLocationFound == false) { shape->setPosX( tfX ); shape->setPosY( tfY ); centerLocationFound = true; - } - else { - zShapePolygon *tmpShapePolygon = dynamic_cast<zShapePolygon *>( (zShape*)shape ); - if (tmpShapePolygon) - tmpShapePolygon->addPoint( myPoint( tfX, tfY ) ); - } + } + else { + zShapePolygon *tmpShapePolygon = dynamic_cast<zShapePolygon *>( (zShape*)shape ); + if (tmpShapePolygon) + tmpShapePolygon->addPoint( myPoint( tfX, tfY ) ); + } #endif endElementAlternative(grid, cur, keyword); @@ -644,9 +702,9 @@ else { // make an empty zone and store under the right label // It should be populated later - - // refZone = zZonePtr(new zZone(grid)); - refZone = tNEW(zZone)(grid); + + // refZone = zZonePtr(new zZone(grid)); + refZone = tNEW(zZone)(grid); if (!zoneName.empty()) mapZones[zoneName] = refZone; } @@ -934,43 +992,28 @@ gVectorExtra< nNetObjectID > nidPlayerOwners; if(xmlHasProp(cur, (const xmlChar*)"owners")) - { + { string ownersDesc( myxmlGetProp(cur, "owners")); boost::tokenizer<> tok(ownersDesc); + // For each owner listed for(boost::tokenizer<>::iterator iter=tok.begin(); iter!=tok.end(); ++iter) - { - /* - * Map from map descriptor to in-game ids - */ - /* - for (int i=0; i<se_PlayerNetIDs.Len(); i++) { - // TODO: change this to a call to Joda's code - tString str(*iter); - if ( se_PlayerNetIDs(i)->GetName() == str ) { - nidPlayerOwners.push_back( se_PlayerNetIDs(i) ); - } - //Hack to support referring to players without knowing their names. - int id; - if(str.Convert(id)) { - if(i == id) { - owners.push_back( se_PlayerNetIDs(i) ); - } - } - } - */ - MapIdToGameId::iterator asdf = playerAsso.find(*iter); - if(asdf != playerAsso.end()) { - std::cout << "********** player matching " << (*iter) << std::endl; - nidPlayerOwners.push_back( (*asdf).second ); + { + // Map from map descriptor to in-game ids + MapIdToGameId::iterator mapOwnerToInGameOwnerPairIter = playerAsso.find(*iter); + if(mapOwnerToInGameOwnerPairIter != playerAsso.end()) + { + // Found a matching in-game owner + nidPlayerOwners.push_back( (*mapOwnerToInGameOwnerPairIter).second ); + } + else + { + // No in-game owner matching, pass + } } - else { - std::cout << "********** player not matching " << (*iter) << " ***" <<std::endl; - } - } - } + } /* * Store the teamOwners information @@ -986,14 +1029,15 @@ iter!=tok.end(); ++iter) { - MapIdToGameId::iterator asdf = teamAsso.find(*iter); - if(asdf != teamAsso.end()) { - std::cout << "********** team matching " << (*iter) << std::endl; - nidTeamOwners.push_back( (*asdf).second ); - } - else { - std::cout << "********** team not matching " << (*iter) << " ***" <<std::endl; - } + MapIdToGameId::iterator mapTeamOwnerToInGameTeamOwnerPairIter = teamAsso.find(*iter); + if(mapTeamOwnerToInGameTeamOwnerPairIter != teamAsso.end()) + { + // Found a matching in-game owning team + nidTeamOwners.push_back( (*mapTeamOwnerToInGameTeamOwnerPairIter).second ); + } + else { + // No in-game owning team found. pass. + } } } @@ -1021,8 +1065,130 @@ return currentZoneEffect; } +void +gParser::parseZoneArthemis(eGrid * grid, xmlNodePtr cur, const xmlChar * keyword) +{ + + if (sn_GetNetState() != nCLIENT ) + { + rColor color; + + // Create a new zone + zZonePtr zone = zZonePtr(new zZone(grid)); + + // Insert the zone under a bogus name + string zoneName = ""; + zoneMap::const_iterator iterZone; + do + { + // Fill the zone under the shortest available series of pound. + zoneName += "#"; + iterZone = mapZones.find(zoneName); + } + while (iterZone != mapZones.end()); + + // If a name was assigned to it, save the zone in a map so it can be refered to + if (!zoneName.empty()) + mapZones[zoneName] = zone; + + + enum odlEffect = { win, death, fortress }; + int effect = win; + if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"win")) { + effect = win; + } + else if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"death")) { + effect = death; + } + else if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"fortress")) { + effect = fortress; + } + + if (sn_GetNetState() != nCLIENT ) + { + if (effect != fortress) + { + // Create an effect group without ownership + zEffectGroupPtr currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), gVectorExtra< nNetObjectID >())); + + // Create a validator for everybody (i.e. All) + zValidatorPtr validator = zValidatorPtr( new zValidatorAll(_ignore, _ignore) ); + + zSelectorPtr selector = zSelectorPtr( new zSelectorSelf() ); + //selector->setCount( -1 ); // Give infinite usage + + zEffectorPtr effector; + if (effect == win) + effector = zEffectorPtr( new zEffectorWin() ); + else + effector = zEffectorPtr( new zEffectorDeath() ); + + effector->setCount( -1 ); + + // Store all the objects + selector->addEffector( effector ); + validator->addSelector( selector ); + currentZoneEffect->setValidator( validator ); + zone->addEffectGroupEnter( currentZoneEffect ); + + } + else { + /* + * REALLY DOESNT WORK! JUST PRE-CODED. NEED TO ASSOCIATE ZONES TO TEAM AND SET THE CONQUEST + */ + + // Create an effect group without ownership + zEffectGroupPtr currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), gVectorExtra< nNetObjectID >())); + zone->addEffectGroupEnter( currentZoneEffect ); + + // Create a validator for everybody (i.e. All) + zValidatorPtr validator = zValidatorPtr( new zValidatorAll(_ignore, _ignore) ); + + zMonitorPtr monitor = zMonitorPtr(new zMonitor(grid)); + // use the same name as the associated zone + monitors[zoneName] = monitor; + monitor->setInit( 0.0f ); + monitor->setDrift( -1.0 * sg_conquestDecayRate ); + monitor->setClampLow ( 0.0f ); + monitor->setClampHigh( 1.0f ); + + + + zMonitorInfluencePtr inflAttaquer = zMonitorInfluencePtr(new zMonitorInfluence( monitor )); + inflAttaquer->setInfluenceSlide( sg_conquestRate ); + + + // sg_defendRate + + + // Store all the objects + validator->addMonitorInfluence( inflAttaquer ); + currentZoneEffect->setValidator( validator ); + + } + } + + cur = cur->xmlChildrenNode; + + while(cur) { + if (!xmlStrcmp(cur->name, (const xmlChar *)"text") || !xmlStrcmp(cur->name, (const xmlChar *)"comment")) {} + else if (isElement(cur->name, (const xmlChar *)"ShapeCircle", keyword)) { + zone->setShape( parseShapeCircleArthemis(grid, cur, zone->ID(), keyword) ); + } + else if (isElement(cur->name, (const xmlChar *)"Alternative", keyword)) { + if (isValidAlternative(cur, keyword)) { + parseAlternativeContent(grid, cur); + } + } + cur = cur->next; + } + + + } +} + void -gParser::parseZone(eGrid * grid, xmlNodePtr cur, const xmlChar * keyword) +gParser::parseZoneBachus(eGrid * grid, xmlNodePtr cur, const xmlChar * keyword) { string zoneName = ""; @@ -1053,9 +1219,9 @@ while(cur != NULL) { if (!xmlStrcmp(cur->name, (const xmlChar *)"text") || !xmlStrcmp(cur->name, (const xmlChar *)"comment")) {} else if (isElement(cur->name, (const xmlChar *)"ShapeCircle", keyword)) { - zone->setShape( parseShapeCircle(grid, cur, zone->ID(), keyword) ); + zone->setShape( parseShapeCircleBachus(grid, cur, zone->ID(), keyword) ); } - else if (isElement(cur->name, (const xmlChar *)"ShapePolygon", keyword)) { + else if (isElement(cur->name, (const xmlChar *)"ShapePolygon", keyword)) { zone->setShape( parseShapePolygon(grid, cur, zone->ID(), keyword) ); } else if (isElement(cur->name, (const xmlChar *)"Enter", keyword)) { @@ -1115,6 +1281,23 @@ } void +gParser::parseZone(eGrid * grid, xmlNodePtr cur, const xmlChar * keyword) +{ + switch(mapVersion) + { + case 1: + parseZoneArthemis(grid, cur, keyword); + break; + case 2: + parseZoneBachus(grid, cur, keyword); + break; + default: + parseZoneBachus(grid, cur, keyword); + break; + } +} + +void gParser::parseMonitor(eGrid * grid, xmlNodePtr cur, const xmlChar * keyword) { if (sn_GetNetState() != nCLIENT ) @@ -1450,9 +1633,9 @@ parseAxes(grid, cur, keyword); } // Introduced in version 2, but no extra logic is required for it. - else if (isElement(cur->name, (const xmlChar *)"Ownership", keyword)) { - parseOwnership(grid, cur, keyword); - } + else if (isElement(cur->name, (const xmlChar *)"Ownership", keyword)) { + parseOwnership(grid, cur, keyword); + } else if (isElement(cur->name, (const xmlChar *)"Spawn", keyword)) { parseSpawn(grid, cur, keyword); } @@ -1492,97 +1675,97 @@ void gParser::parseOwnership(eGrid *grid, xmlNodePtr cur, const xmlChar * keyword) { - // Prepare the structures to store the ownership information - TeamOwnershipInfo mapIdOfTeamOwners; - std::cout << "############ about to clean" << std::endl; - playerAsso.erase(playerAsso.begin(), playerAsso.end()); - teamAsso.erase(teamAsso.begin(), teamAsso.end()); + // Prepare the structures to store the ownership information + TeamOwnershipInfo mapIdOfTeamOwners; - cur = cur->xmlChildrenNode; - while (cur != NULL) { - if (!xmlStrcmp(cur->name, (const xmlChar *)"text") || !xmlStrcmp(cur->name, (const xmlChar *)"comment")) {} - else if (isElement(cur->name, (const xmlChar *)"TeamOwnership", keyword)) { - parseTeamOwnership(grid, cur, keyword, mapIdOfTeamOwners); + // Remove previous ownership + playerAsso.erase(playerAsso.begin(), playerAsso.end()); + teamAsso.erase(teamAsso.begin(), teamAsso.end()); + + cur = cur->xmlChildrenNode; + while (cur != NULL) { + if (!xmlStrcmp(cur->name, (const xmlChar *)"text") || !xmlStrcmp(cur->name, (const xmlChar *)"comment")) {} + else if (isElement(cur->name, (const xmlChar *)"TeamOwnership", keyword)) { + parseTeamOwnership(grid, cur, keyword, mapIdOfTeamOwners); + } + cur = cur->next; } - cur = cur->next; - } - // BOP - // The association between teamId and in-game teams should be moved to its own class + // BOP + // The association between teamId and in-game teams should be moved to its own class - std::cout << "###################" << std::endl; - std::cout << "number of teams " << eTeam::teams.Len() << std::endl; + std::cout << "###################" << std::endl; + std::cout << "number of teams " << eTeam::teams.Len() << std::endl; - TeamOwnershipInfo::iterator iterTeamOwnership = mapIdOfTeamOwners.begin(); - for(int index=0; index<eTeam::teams.Len() && iterTeamOwnership != mapIdOfTeamOwners.end(); ) { - eTeam* ee = eTeam::teams[index]; - string teamId = (*iterTeamOwnership).first; - std::cout << "associating " << teamId << " with " << ee->Name() << " net ID:" << ee->ID() << std::endl; - MapIdToGameId::value_type asdf(teamId, ee->ID()); - - // Store the association between the map id and the in-game id - teamAsso.insert(asdf); + TeamOwnershipInfo::iterator iterTeamOwnership = mapIdOfTeamOwners.begin(); + for(int index=0; index<eTeam::teams.Len() && iterTeamOwnership != mapIdOfTeamOwners.end(); ) { + eTeam* ee = eTeam::teams[index]; + string teamId = (*iterTeamOwnership).first; + std::cout << "associating " << teamId << " with " << ee->Name() << " net ID:" << ee->ID() << std::endl; + MapIdToGameId::value_type asdf(teamId, ee->ID()); - std::set<string> playerIdForThisTeam = (*iterTeamOwnership).second; - int indexPlayer=0; - for(std::set<string>::iterator iter = playerIdForThisTeam.begin(); - iter != playerIdForThisTeam.end() && indexPlayer<ee->NumPlayers(); - ++iter, ++indexPlayer) { - ePlayerNetID *aa = ee->Player(indexPlayer); - string playerId = (*iter); - // TODO - // HACK - // BOP - // The following might produce unexpected results should the same playerId be associated in many team - MapIdToGameId::value_type jj(playerId, aa->ID()); - std::cout << "associating in team " << teamId << " player: " << playerId << " with: " << aa->GetName() << std::endl; - playerAsso.insert(jj); + // Store the association between the map id and the in-game id + teamAsso.insert(asdf); + + std::set<string> playerIdForThisTeam = (*iterTeamOwnership).second; + int indexPlayer=0; + for(std::set<string>::iterator iter = playerIdForThisTeam.begin(); + iter != playerIdForThisTeam.end() && indexPlayer<ee->NumPlayers(); + ++iter, ++indexPlayer) { + ePlayerNetID *aa = ee->Player(indexPlayer); + string playerId = (*iter); + // TODO + // HACK + // BOP + // The following might produce unexpected results should the same playerId be associated in many team + MapIdToGameId::value_type mapOwnerToInGameOwnerPair(playerId, aa->ID()); + playerAsso.insert(mapOwnerToInGameOwnerPair); + } + ++index; ++iterTeamOwnership; } - ++index; ++iterTeamOwnership; - } - // EOP + // EOP } void gParser::parseTeamOwnership(eGrid *grid, xmlNodePtr cur, const xmlChar * keyword, TeamOwnershipInfo & mapIdOfTeamOwners) { - // Explore the teamId attribute - if(myxmlHasProp(cur, TEAM_ID_STR )) { - string tOwnersDesc( myxmlGetProp(cur, TEAM_ID_STR)); - boost::tokenizer<> tokTeam(tOwnersDesc); + // Explore the teamId attribute + if(myxmlHasProp(cur, TEAM_ID_STR )) { + string tOwnersDesc( myxmlGetProp(cur, TEAM_ID_STR)); + boost::tokenizer<> tokTeam(tOwnersDesc); - for(boost::tokenizer<>::iterator tokTeamIter=tokTeam.begin(); - tokTeamIter!=tokTeam.end(); - ++tokTeamIter) { - tString aTeamId = tString(*tokTeamIter); - TeamOwnershipInfo::iterator teamIter = mapIdOfTeamOwners.find(aTeamId); - // Add the teamId to the list if abscent - if(teamIter == mapIdOfTeamOwners.end()) { - // teamIter = team.insert(std::pair<string, std::set<string> >( aTeamId, std::set<string> )); - std::pair<string, std::set<string> > asdf( aTeamId, std::set<string>() ); - teamIter = mapIdOfTeamOwners.insert(teamIter, asdf); - } + for(boost::tokenizer<>::iterator tokTeamIter=tokTeam.begin(); + tokTeamIter!=tokTeam.end(); + ++tokTeamIter) { + tString aTeamId = tString(*tokTeamIter); + TeamOwnershipInfo::iterator teamIter = mapIdOfTeamOwners.find(aTeamId); + // Add the teamId to the list if abscent + if(teamIter == mapIdOfTeamOwners.end()) { + // teamIter = team.insert(std::pair<string, std::set<string> >( aTeamId, std::set<string> )); + std::pair<string, std::set<string> > asdf( aTeamId, std::set<string>() ); + teamIter = mapIdOfTeamOwners.insert(teamIter, asdf); + } - // Should the team receive playerId - if(myxmlHasProp(cur, PLAYER_ID_STR)) { - // Extract all the playerId for this team - string plOwnersDesc( myxmlGetProp(cur, PLAYER_ID_STR) ); - boost::tokenizer<> tokPlayer(plOwnersDesc); - for(boost::tokenizer<>::iterator tokPlayerIter=tokPlayer.begin(); - tokPlayerIter!=tokPlayer.end(); - ++tokPlayerIter) { - tString aPlayerId = tString(*tokPlayerIter); + // Should the team receive playerId + if(myxmlHasProp(cur, PLAYER_ID_STR)) { + // Extract all the playerId for this team + string plOwnersDesc( myxmlGetProp(cur, PLAYER_ID_STR) ); + boost::tokenizer<> tokPlayer(plOwnersDesc); + for(boost::tokenizer<>::iterator tokPlayerIter=tokPlayer.begin(); + tokPlayerIter!=tokPlayer.end(); + ++tokPlayerIter) { + tString aPlayerId = tString(*tokPlayerIter); - std::set<string> aa = (*teamIter).second; - aa.insert(aPlayerId); - (*teamIter).second = aa; - } - } - } - } - else { - // TeamId is #REQUIRED, this should not happen - } + std::set<string> aa = (*teamIter).second; + aa.insert(aPlayerId); + (*teamIter).second = aa; + } + } + } + } + else { + // TeamId is #REQUIRED, this should not happen + } } void @@ -1653,7 +1836,7 @@ void gParser::parseMap(eGrid *grid, xmlNodePtr cur, const xmlChar * keyword) { - + mapVersion = myxmlGetPropInt(cur, "version"); cur = cur->xmlChildrenNode; while (cur != NULL) { Modified: armagetronad/trunk/armagetronad/src/tron/gParser.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gParser.h 2007-05-26 11:54:26 UTC (rev 7271) +++ armagetronad/trunk/armagetronad/src/tron/gParser.h 2007-05-27 09:36:47 UTC (rev 7272) @@ -67,11 +67,15 @@ void parseAxes(eGrid *grid, xmlNodePtr cur, const xmlChar * keyword); void parseSpawn(eGrid *grid, xmlNodePtr cur, const xmlChar * keyword); void parseZone(eGrid *grid, xmlNodePtr cur, const xmlChar * keyword); + void parseZoneArthemis(eGrid * grid, xmlNodePtr cur, const xmlChar * keyword); + void parseZoneBachus(eGrid * grid, xmlNodePtr cur, const xmlChar * keyword); + void parseWall(eGrid *grid, xmlNodePtr cur, const xmlChar * keyword); rColor parseColor(eGrid *grid, xmlNodePtr cur, const xmlChar * keyword); - zShapePtr parseShapeCircle(eGrid *grid, xmlNodePtr cur, short unsigned int idZone, const xmlChar * keyword); + zShapePtr parseShapeCircleArthemis(eGrid *grid, xmlNodePtr cur, short unsigned int idZone, const xmlChar * keyword); + zShapePtr parseShapeCircleBachus(eGrid *grid, xmlNodePtr cur, short unsigned int idZone, const xmlChar * keyword); zShapePtr parseShapePolygon(eGrid *grid, xmlNodePtr cur, short unsigned int idZone, const xmlChar * keyword); void parseShape(eGrid *grid, xmlNodePtr cur, const xmlChar * keyword, zShapePtr &shape); void parseMonitor(eGrid * grid, xmlNodePtr cur, const xmlChar * keyword); @@ -108,7 +112,7 @@ /* This is a hack that will bring shame to my decendants for many generations: */ float sizeMultiplier; int currentFormat; // Store the format version of the map currently being parsed. Used to support different format. - public: +public: tValue::Expr::varmap_t vars; tValue::Expr::funcmap_t functions; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <phi...@us...> - 2007-05-27 18:38:28
|
Revision: 7275 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7275&view=rev Author: philippeqc Date: 2007-05-27 11:38:23 -0700 (Sun, 27 May 2007) Log Message: ----------- Bulk of support for old fortress. Modified Paths: -------------- armagetronad/trunk/armagetronad/src/tron/gGame.cpp armagetronad/trunk/armagetronad/src/tron/gGame.h armagetronad/trunk/armagetronad/src/tron/gParser.cpp armagetronad/trunk/armagetronad/src/tron/gParser.h armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.h armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp armagetronad/trunk/armagetronad/src/tron/zone/zValidator.h armagetronad/trunk/armagetronad/src/tron/zone/zZone.cpp armagetronad/trunk/armagetronad/src/tron/zone/zZone.h Modified: armagetronad/trunk/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2007-05-27 11:05:42 UTC (rev 7274) +++ armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2007-05-27 18:38:23 UTC (rev 7275) @@ -121,6 +121,14 @@ #define DEFAULT_MAP "Anonymous/polygon/regular/square-1.0.1.aamap.xml" static tString mapfile(DEFAULT_MAP); + +// The following are only relevant in the case of zones from maps using version 1 +static REAL sg_conquestRate = .5; +static REAL sg_defendRate = .25; + +static tSettingItem< REAL > sg_conquestRateConf( "FORTRESS_CONQUEST_RATE", sg_conquestRate ); +static tSettingItem< REAL > sg_defendRateConf( "FORTRESS_DEFEND_RATE", sg_defendRate ); + /* static void sg_ParseMap ( gParser * aParser, tString map_file ); static void change_mapfile(std::istream &s) @@ -2502,6 +2510,7 @@ } just_connected=false; + init_second_pass_zones(grid, aParser); break; case GS_TRANSFER_OBJECTS: // con << "Transferring objects...\n"; @@ -4135,6 +4144,141 @@ } } +void oldFortressAutomaticAssignment(zZone *zone, zMonitorPtr monitor); + +void init_second_pass_zones(eGrid *grid, gParser *parser) +{ + const tList<eGameObject>& gameObjects = grid->GameObjects(); + for (int i=gameObjects.Len()-1;i>=0;i--) + { + zZone *zone=dynamic_cast<zZone *>(gameObjects(i)); + + if (zone && zone->getOldFortressAutomaticAssignmentBehavior() == true) + { + zMonitorPtr monitor = parser->getMonitor(zone->getName()); + oldFortressAutomaticAssignment(zone, monitor); + } + } +} + +void oldFortressAutomaticAssignment(zZone *zone, zMonitorPtr monitor) +{ + if (zone->getOldFortressAutomaticAssignmentBehavior() == true) + { // Recreate the automatic assignment of zones to teams as found in Arthemis + + // Do only once + zone->setOldFortressAutomaticAssignmentBehavior( false ); + + // teamDistance_ = 0; + const tList<eGameObject>& gameObjects = zone->Grid()->GameObjects(); + gCycle * closest = NULL; + REAL closestDistance = 0; + eTeam * team; + for (int i=gameObjects.Len()-1;i>=0;i--) + { + gCycle *other=dynamic_cast<gCycle *>(gameObjects(i)); + + if (other ) + { + eTeam * otherTeam = other->Player()->CurrentTeam(); + eCoord otherpos = other->Position() - zone->GetPosition(); + REAL distance = otherpos.NormSquared(); + if ( !closest || distance < closestDistance ) + { + // check whether other zones are already registered to that team + /* + zZone * farthest = NULL; + int count = 0; + if ( sg_baseZonesPerTeam > 0 ) + CountZonesOfTeam( Grid(), otherTeam, count, farthest ); + + // only set team if not too many closer other zones are registered + // if ( sg_baseZonesPerTeam == 0 || count < sg_baseZonesPerTeam || farthest->teamDistance_ > distance ) + */ + { + closest = other; + closestDistance = distance; + } + } + } + } + + if ( closest ) + { + // take over team and color + team = closest->Player()->CurrentTeam(); + rColor teamColor; + teamColor.r_ = team->R()/15.0; + teamColor.g_ = team->G()/15.0; + teamColor.b_ = team->B()/15.0; + zone->getShape()->setColor(teamColor); + // teamDistance_ = closestDistance; + + { // Build the monitor influence objects for this zone + + + // Load the associated monitor + // Its name is the same as the zone, as both are generated in the same way + // through a series of # + + + // + gVectorExtra< nNetObjectID > teamOwners; + teamOwners.push_back(team->ID()); + zEffectGroupPtr currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), teamOwners)); + + // The part for the defender + zValidatorPtr validator = zValidatorPtr( new zValidatorOwnerTeam(_ignore, _ignore) ); + + zMonitorInfluencePtr inflDefender = zMonitorInfluencePtr(new zMonitorInfluence( monitor )); + inflDefender->setInfluenceSlide( sg_defendRate ); + + // Store all the objects + validator->addMonitorInfluence( inflDefender ); + currentZoneEffect->setValidator( validator ); + + // The part for the attaquer + validator = zValidatorPtr( new zValidatorAllButOwnerTeam(_ignore, _ignore) ); + + zMonitorInfluencePtr inflAttaquer = zMonitorInfluencePtr(new zMonitorInfluence( monitor )); + inflAttaquer->setInfluenceSlide( sg_conquestRate ); + // Store all the objects + validator->addMonitorInfluence( inflAttaquer ); + currentZoneEffect->setValidator( validator ); + + + + zone->addEffectGroupInside( currentZoneEffect ); + + } + + zone->RequestSync(); + } + + /* + // if this zone does not belong to a team, discard it. + if ( !team ) + { + return true; + } + + // check other zones owned by the same team. Discard the one farthest away + // if the max count is exceeded + if ( team && sg_baseZonesPerTeam > 0 ) + { + gBaseZoneHack * farthest = 0; + int count = 0; + CountZonesOfTeam( Grid(), team, count, farthest ); + + // discard team of farthest zone + if ( count > sg_baseZonesPerTeam ) + farthest->team = NULL; + } + */ + } +} + + static nCallbackLoginLogout lc(LoginCallback); Modified: armagetronad/trunk/armagetronad/src/tron/gGame.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gGame.h 2007-05-27 11:05:42 UTC (rev 7274) +++ armagetronad/trunk/armagetronad/src/tron/gGame.h 2007-05-27 18:38:23 UTC (rev 7275) @@ -140,6 +140,7 @@ gArena * sg_GetArena(); // END OF HACK +void init_second_pass_zones(eGrid *grid, gParser *parser); class gGameSettings { @@ -197,5 +198,6 @@ void rotate(); + #endif Modified: armagetronad/trunk/armagetronad/src/tron/gParser.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-05-27 11:05:42 UTC (rev 7274) +++ armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-05-27 18:38:23 UTC (rev 7275) @@ -56,12 +56,7 @@ int mapVersion = 0; // The version of the map currently being parsed. Used to adapt parsing to support version specific features // The following are only relevant in the case of zones from maps using version 1 -static REAL sg_conquestRate = .5; -static REAL sg_defendRate = .25; static REAL sg_conquestDecayRate = .1; - -static tSettingItem< REAL > sg_conquestRateConf( "FORTRESS_CONQUEST_RATE", sg_conquestRate ); -static tSettingItem< REAL > sg_defendRateConf( "FORTRESS_DEFEND_RATE", sg_defendRate ); static tSettingItem< REAL > sg_conquestDecayRateConf( "FORTRESS_CONQUEST_DECAY_RATE", sg_conquestDecayRate ); @@ -508,20 +503,20 @@ // Build up the scale information { - tFunction tfScale; - tfScale.SetOffset( myxmlGetPropFloat(cur, "radius") * sizeMultiplier ); - tfScale.SetSlope( myxmlGetPropFloat(cur, "growth") * sizeMultiplier ); - shape->setScale( tfScale ); + tFunction tfScale; + tfScale.SetOffset( myxmlGetPropFloat(cur, "radius") * sizeMultiplier ); + tfScale.SetSlope( myxmlGetPropFloat(cur, "growth") * sizeMultiplier ); + shape->setScale( tfScale ); } // Set up the default rotation speed { - tFunction tfRotation; - tfRotation.SetOffset( .3f ); - shape->setRotation( tfRotation ); + tFunction tfRotation; + tfRotation.SetOffset( .3f ); + shape->setRotation( tfRotation ); } - // Set up the location + // Set up the location cur = cur->xmlChildrenNode; while( cur != NULL) { if (!xmlStrcmp(cur->name, (const xmlChar *)"text") || !xmlStrcmp(cur->name, (const xmlChar *)"comment")) {} @@ -529,12 +524,12 @@ REAL x = myxmlGetPropFloat(cur, "x"); REAL y = myxmlGetPropFloat(cur, "y"); - tFunction tfPos; - tfPos.SetOffset( x * sizeMultiplier ); - shape->setPosX( tfPos ); + tFunction tfPos; + tfPos.SetOffset( x * sizeMultiplier ); + shape->setPosX( tfPos ); - tfPos.SetOffset( y * sizeMultiplier ); - shape->setPosY( tfPos ); + tfPos.SetOffset( y * sizeMultiplier ); + shape->setPosY( tfPos ); endElementAlternative(grid, cur, keyword); } @@ -992,28 +987,28 @@ gVectorExtra< nNetObjectID > nidPlayerOwners; if(xmlHasProp(cur, (const xmlChar*)"owners")) - { + { string ownersDesc( myxmlGetProp(cur, "owners")); boost::tokenizer<> tok(ownersDesc); - // For each owner listed + // For each owner listed for(boost::tokenizer<>::iterator iter=tok.begin(); iter!=tok.end(); ++iter) - { - // Map from map descriptor to in-game ids + { + // Map from map descriptor to in-game ids MapIdToGameId::iterator mapOwnerToInGameOwnerPairIter = playerAsso.find(*iter); - if(mapOwnerToInGameOwnerPairIter != playerAsso.end()) - { - // Found a matching in-game owner - nidPlayerOwners.push_back( (*mapOwnerToInGameOwnerPairIter).second ); - } - else - { - // No in-game owner matching, pass - } - } - } + if(mapOwnerToInGameOwnerPairIter != playerAsso.end()) + { + // Found a matching in-game owner + nidPlayerOwners.push_back( (*mapOwnerToInGameOwnerPairIter).second ); + } + else + { + // No in-game owner matching, pass + } + } + } /* * Store the teamOwners information @@ -1030,13 +1025,13 @@ ++iter) { MapIdToGameId::iterator mapTeamOwnerToInGameTeamOwnerPairIter = teamAsso.find(*iter); - if(mapTeamOwnerToInGameTeamOwnerPairIter != teamAsso.end()) - { - // Found a matching in-game owning team + if(mapTeamOwnerToInGameTeamOwnerPairIter != teamAsso.end()) + { + // Found a matching in-game owning team nidTeamOwners.push_back( (*mapTeamOwnerToInGameTeamOwnerPairIter).second ); } else { - // No in-game owning team found. pass. + // No in-game owning team found. pass. } } } @@ -1065,123 +1060,123 @@ return currentZoneEffect; } -void +void gParser::parseZoneArthemis(eGrid * grid, xmlNodePtr cur, const xmlChar * keyword) { - - if (sn_GetNetState() != nCLIENT ) + + if (sn_GetNetState() != nCLIENT ) { - rColor color; + rColor color; - // Create a new zone - zZonePtr zone = zZonePtr(new zZone(grid)); + // Create a new zone + zZonePtr zone = zZonePtr(new zZone(grid)); - // Insert the zone under a bogus name - string zoneName = ""; - zoneMap::const_iterator iterZone; - do - { - // Fill the zone under the shortest available series of pound. - zoneName += "#"; - iterZone = mapZones.find(zoneName); - } - while (iterZone != mapZones.end()); + // Insert the zone under a bogus name + string zoneName = ""; + zoneMap::const_iterator iterZone; + do + { + // Fill the zone under the shortest available series of pound. + zoneName += "#"; + iterZone = mapZones.find(zoneName); + } + while (iterZone != mapZones.end()); - // If a name was assigned to it, save the zone in a map so it can be refered to - if (!zoneName.empty()) - mapZones[zoneName] = zone; + // If a name was assigned to it, save the zone in a map so it can be refered to + if (!zoneName.empty()) + mapZones[zoneName] = zone; + zone->setName(zoneName); - enum odlEffect = { win, death, fortress }; - int effect = win; - if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"win")) { - effect = win; - } - else if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"death")) { - effect = death; - } - else if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"fortress")) { - effect = fortress; - } + enum { win, death, fortress }; + int effect = win; + if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"win")) { + effect = win; + } + else if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"death")) { + effect = death; + } + else if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"fortress")) { + effect = fortress; + } - if (sn_GetNetState() != nCLIENT ) - { - if (effect != fortress) - { - // Create an effect group without ownership - zEffectGroupPtr currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), gVectorExtra< nNetObjectID >())); + if (sn_GetNetState() != nCLIENT ) + { + if (effect != fortress) + { + // Create an effect group without ownership + zEffectGroupPtr currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), gVectorExtra< nNetObjectID >())); - // Create a validator for everybody (i.e. All) - zValidatorPtr validator = zValidatorPtr( new zValidatorAll(_ignore, _ignore) ); + // Create a validator for everybody (i.e. All) + zValidatorPtr validator = zValidatorPtr( new zValidatorAll(_ignore, _ignore) ); - zSelectorPtr selector = zSelectorPtr( new zSelectorSelf() ); - //selector->setCount( -1 ); // Give infinite usage + zSelectorPtr selector = zSelectorPtr( new zSelectorSelf() ); + //selector->setCount( -1 ); // Give infinite usage - zEffectorPtr effector; - if (effect == win) - effector = zEffectorPtr( new zEffectorWin() ); - else - effector = zEffectorPtr( new zEffectorDeath() ); + zEffectorPtr effector; + if (effect == win) + effector = zEffectorPtr( new zEffectorWin() ); + else + effector = zEffectorPtr( new zEffectorDeath() ); - effector->setCount( -1 ); + effector->setCount( -1 ); - // Store all the objects - selector->addEffector( effector ); - validator->addSelector( selector ); - currentZoneEffect->setValidator( validator ); - zone->addEffectGroupEnter( currentZoneEffect ); + // Store all the objects + selector->addEffector( effector ); + validator->addSelector( selector ); + currentZoneEffect->setValidator( validator ); + zone->addEffectGroupEnter( currentZoneEffect ); + } + else { + zMonitorPtr monitor = zMonitorPtr(new zMonitor(grid)); + // use the same name as the associated zone + monitors[zoneName] = monitor; + monitor->setInit( 0.0f ); + monitor->setDrift( -1.0 * sg_conquestDecayRate ); + monitor->setClampLow ( 0.0f ); + monitor->setClampHigh( 1.0f ); - } - else { - /* - * REALLY DOESNT WORK! JUST PRE-CODED. NEED TO ASSOCIATE ZONES TO TEAM AND SET THE CONQUEST - */ + zMonitorRulePtr rule; + rule = zMonitorRulePtr( new zMonitorRuleOver( 1.0f ) ); - // Create an effect group without ownership - zEffectGroupPtr currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), gVectorExtra< nNetObjectID >())); - zone->addEffectGroupEnter( currentZoneEffect ); + zEffectGroupPtr currentZoneEffect; + { + // Create an effect group without ownership + currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), gVectorExtra< nNetObjectID >())); - // Create a validator for everybody (i.e. All) - zValidatorPtr validator = zValidatorPtr( new zValidatorAll(_ignore, _ignore) ); + // Create a validator for everybody (i.e. All) + zValidatorPtr validator = zValidatorPtr( new zValidatorAll(_ignore, _ignore) ); - zMonitorPtr monitor = zMonitorPtr(new zMonitor(grid)); - // use the same name as the associated zone - monitors[zoneName] = monitor; - monitor->setInit( 0.0f ); - monitor->setDrift( -1.0 * sg_conquestDecayRate ); - monitor->setClampLow ( 0.0f ); - monitor->setClampHigh( 1.0f ); + zZoneInfluencePtr infl = zZoneInfluencePtr(new zZoneInfluence(zone)); + zZoneInfluenceItemScale *b = new zZoneInfluenceItemScale(zone); + b->set( -1.5f ); + infl->addZoneInfluenceRule(zZoneInfluenceItemPtr(b)); + validator->addZoneInfluence( infl ); + currentZoneEffect->setValidator( validator ); + zone->addEffectGroupEnter( currentZoneEffect ); + } + rule->addEffectGroup( currentZoneEffect ); + monitor->addRule(rule); + zone->setOldFortressAutomaticAssignmentBehavior(true); + } + } - zMonitorInfluencePtr inflAttaquer = zMonitorInfluencePtr(new zMonitorInfluence( monitor )); - inflAttaquer->setInfluenceSlide( sg_conquestRate ); + cur = cur->xmlChildrenNode; - - // sg_defendRate - - - // Store all the objects - validator->addMonitorInfluence( inflAttaquer ); - currentZoneEffect->setValidator( validator ); - - } - } - - cur = cur->xmlChildrenNode; - - while(cur) { - if (!xmlStrcmp(cur->name, (const xmlChar *)"text") || !xmlStrcmp(cur->name, (const xmlChar *)"comment")) {} - else if (isElement(cur->name, (const xmlChar *)"ShapeCircle", keyword)) { - zone->setShape( parseShapeCircleArthemis(grid, cur, zone->ID(), keyword) ); + while(cur) { + if (!xmlStrcmp(cur->name, (const xmlChar *)"text") || !xmlStrcmp(cur->name, (const xmlChar *)"comment")) {} + else if (isElement(cur->name, (const xmlChar *)"ShapeCircle", keyword)) { + zone->setShape( parseShapeCircleArthemis(grid, cur, zone->ID(), keyword) ); + } + else if (isElement(cur->name, (const xmlChar *)"Alternative", keyword)) { + if (isValidAlternative(cur, keyword)) { + parseAlternativeContent(grid, cur); + } + } + cur = cur->next; } - else if (isElement(cur->name, (const xmlChar *)"Alternative", keyword)) { - if (isValidAlternative(cur, keyword)) { - parseAlternativeContent(grid, cur); - } - } - cur = cur->next; - } } @@ -1214,6 +1209,7 @@ // If a name was assigned to it, save the zone in a map so it can be refered to if (!zoneName.empty()) mapZones[zoneName] = zone; + zone->setName(zoneName); } while(cur != NULL) { @@ -1283,17 +1279,17 @@ void gParser::parseZone(eGrid * grid, xmlNodePtr cur, const xmlChar * keyword) { - switch(mapVersion) + switch(mapVersion) { case 1: - parseZoneArthemis(grid, cur, keyword); - break; + parseZoneArthemis(grid, cur, keyword); + break; case 2: - parseZoneBachus(grid, cur, keyword); - break; + parseZoneBachus(grid, cur, keyword); + break; default: - parseZoneBachus(grid, cur, keyword); - break; + parseZoneBachus(grid, cur, keyword); + break; } } @@ -1327,10 +1323,6 @@ if (sn_GetNetState() != nCLIENT ) { - //std::auto_ptr<zMonitor> monitor = std::auto_ptr<zMonitor>(); - //zMonitor *monitor = tNEW(zMonitor) (); - - zMonitorRulePtr rule; while(cur != NULL) { @@ -1837,6 +1829,7 @@ gParser::parseMap(eGrid *grid, xmlNodePtr cur, const xmlChar * keyword) { mapVersion = myxmlGetPropInt(cur, "version"); + mapVersion = 1; // for debug purpose cur = cur->xmlChildrenNode; while (cur != NULL) { @@ -1930,3 +1923,9 @@ // fprintf(stderr,"ERROR: Map file is missing root \'Resources\' node"); } + +zMonitorPtr +gParser::getMonitor(string monitorName) +{ + return monitors[monitorName]; +} Modified: armagetronad/trunk/armagetronad/src/tron/gParser.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gParser.h 2007-05-27 11:05:42 UTC (rev 7274) +++ armagetronad/trunk/armagetronad/src/tron/gParser.h 2007-05-27 18:38:23 UTC (rev 7275) @@ -18,6 +18,7 @@ #include "zone/zZone.h" #include "zone/zMisc.h" + /* Note to the reader: In the full World idea, the parser should, when called, create a full world structure, from the Empire down, @@ -43,6 +44,7 @@ // gParser(const gGame *aGame, gArena *anArena, tControlledPTR<eGrid> aGrid); void setSizeMultiplier(REAL aSizeMultiplier); void Parse(); + zMonitorPtr getMonitor(string monitorName); protected: bool trueOrFalse(char *str); @@ -115,6 +117,7 @@ public: tValue::Expr::varmap_t vars; tValue::Expr::funcmap_t functions; + }; #endif //ArmageTron_PARSER_H Modified: armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.h 2007-05-27 11:05:42 UTC (rev 7274) +++ armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.h 2007-05-27 18:38:23 UTC (rev 7275) @@ -10,7 +10,6 @@ #include "zone/zMisc.h" #include "zone/zEffectGroup.h" - class zMonitorRule; class zMonitor; Modified: armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp 2007-05-27 11:05:42 UTC (rev 7274) +++ armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp 2007-05-27 18:38:23 UTC (rev 7275) @@ -59,8 +59,8 @@ iter != owners.end(); ++iter) { - if (bool(sn_netObjects[(*iter)]) && (*iter == possibleOwner->ID()) ) - return true; + if (bool(sn_netObjects[(*iter)]) && (*iter == possibleOwner->ID()) ) + return true; } return false; } @@ -230,12 +230,42 @@ return !isOwner(possibleUser->Player(), owners); } +// ******************* +// zValidatorAllButOwnerTeam +// ******************* +zValidator * zValidatorAllButOwnerTeam::create(Triad _positive, Triad _marked) +{ + return new zValidatorAllButOwnerTeam(_positive, _marked); +} +zValidatorAllButOwnerTeam::zValidatorAllButOwnerTeam(Triad _positive, Triad _marked): + zValidator(_positive, _marked) +{ } +zValidatorAllButOwnerTeam::zValidatorAllButOwnerTeam(zValidatorAllButOwnerTeam const &other): + zValidator(other) +{ } +void zValidatorAllButOwnerTeam::operator=(zValidatorAllButOwnerTeam const &other) +{ + this->zValidator::operator=(other); +} +zValidator *zValidatorAllButOwnerTeam::copy(void) const { + return new zValidatorAllButOwnerTeam(*this); +} +bool +zValidatorAllButOwnerTeam::isValid(gVectorExtra< nNetObjectID > &owners, gVectorExtra< nNetObjectID > &teamOwners, gCycle* possibleUser) +{ + return !isTeamOwner(possibleUser->Player()->CurrentTeam(), teamOwners); +} + + + + + /* bool ::isValidUser(gCycle *possibleUser) Modified: armagetronad/trunk/armagetronad/src/tron/zone/zValidator.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zValidator.h 2007-05-27 11:05:42 UTC (rev 7274) +++ armagetronad/trunk/armagetronad/src/tron/zone/zValidator.h 2007-05-27 18:38:23 UTC (rev 7275) @@ -137,6 +137,21 @@ bool isValid(gVectorExtra< nNetObjectID > &owners, gVectorExtra< nNetObjectID > &teamOwners, gCycle* possibleUser); }; +class zValidatorAllButOwnerTeam : public zValidator +{ +public: + static zValidator* create(Triad _positive, Triad _marked); + zValidatorAllButOwnerTeam(Triad _positive, Triad _marked); + zValidatorAllButOwnerTeam(zValidatorAllButOwnerTeam const &other); + void operator=(zValidatorAllButOwnerTeam const &other); //!< overloaded assignment operator + virtual ~zValidatorAllButOwnerTeam() {}; + zValidator *copy(void) const; +protected: + bool isValid(gVectorExtra< nNetObjectID > &owners, gVectorExtra< nNetObjectID > &teamOwners, gCycle* possibleUser); +}; + + + /* * ******** WARNING ********* * This include has to be at the end of this file to break a cyclic referencing. Modified: armagetronad/trunk/armagetronad/src/tron/zone/zZone.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zZone.cpp 2007-05-27 11:05:42 UTC (rev 7274) +++ armagetronad/trunk/armagetronad/src/tron/zone/zZone.cpp 2007-05-27 18:38:23 UTC (rev 7275) @@ -60,8 +60,6 @@ static nSettingItem< REAL > sg_expansionSpeedConf( "WIN_ZONE_EXPANSION", sg_expansionSpeed ); static nSettingItem< REAL > sg_initialSizeConf( "WIN_ZONE_INITIAL_SIZE", sg_initialSize ); - - // ******************************************************************************* // * // * EvaluateFunctionNow @@ -106,13 +104,15 @@ // ******************************************************************************* zZone::zZone( eGrid * grid ) :eNetGameObject( grid, eCoord(0,0), eCoord(0,0), NULL, true ), - // rotation_(1,0), + // rotation_(1,0), effectGroupEnter(), effectGroupInside(), effectGroupLeave(), effectGroupOutside(), playersInside(), - playersOutside() + playersOutside(), + oldFortressAutomaticAssignmentBehavior_(false), + name_() { // store creation time referenceTime_ = createTime_ = lastTime = 0; @@ -141,10 +141,12 @@ // ******************************************************************************* zZone::zZone( nMessage & m ) - :eNetGameObject( m ), - //rotation_(1,0), + :eNetGameObject( m ), + //rotation_(1,0), playersInside(), - playersOutside() + playersOutside(), + oldFortressAutomaticAssignmentBehavior_(false), + name_() { // read creation time m >> createTime_; @@ -169,55 +171,55 @@ tFunction asdf = tFunction(); asdf.SetSlope(0.0); asdf.SetOffset(100.0); - shape->setPosX(asdf); - shape->setPosY(asdf); - shape->setScale(asdf); - shape->setRotation(asdf); - shape->setScale(asdf); - shape->setColor(rColor(0.7, 0.0, 0.7)); - zShapeCircle *circle = dynamic_cast<zShapeCircle *>( (zShape*)shape ); - - circle->emulatingOldZone_ = true; + shape->setPosX(asdf); + shape->setPosY(asdf); + shape->setScale(asdf); + shape->setRotation(asdf); + shape->setScale(asdf); + shape->setColor(rColor(0.7, 0.0, 0.7)); + zShapeCircle *circle = dynamic_cast<zShapeCircle *>( (zShape*)shape ); - /* + circle->emulatingOldZone_ = true; + + /* if (!m.End() && sz_ShapedZones.Supported() ) { - // Factory to make the shapes - // HACK - // This makes them static for the life of the zone - // rather than to re-send them all at each updates - typedef zShape* (*shapeFactory)(nMessage &); - std::map<tString, shapeFactory> shapes; - // Build the list of supported shapes - shapes[tString("circle")] = zShapeCircle::create; - shapes[tString("polygon")] = zShapePolygon::create; + // Factory to make the shapes + // HACK + // This makes them static for the life of the zone + // rather than to re-send them all at each updates + typedef zShape* (*shapeFactory)(nMessage &); + std::map<tString, shapeFactory> shapes; + // Build the list of supported shapes + shapes[tString("circle")] = zShapeCircle::create; + shapes[tString("polygon")] = zShapePolygon::create; - // Get the name of the shape from the network - tString shapeName; - m >> shapeName; + // Get the name of the shape from the network + tString shapeName; + m >> shapeName; - std::map<tString, shapeFactory>::const_iterator iterShapeFactory; - // Build that shape if it is available - if((iterShapeFactory = shapes.find(shapeName)) != shapes.end()) - { - shape = zShapePtr((*(iterShapeFactory->second))(m)); - } + std::map<tString, shapeFactory>::const_iterator iterShapeFactory; + // Build that shape if it is available + if((iterShapeFactory = shapes.find(shapeName)) != shapes.end()) + { + shape = zShapePtr((*(iterShapeFactory->second))(m)); + } } else { - // Didnt receive a shape information. Assume we are talking to a 0.2.8- server - shape = zShapePtr(new zShapeCircle()); -#ifdef DADA - // TODO: Fill this if and when we decide to with with xValue -#else - shape->setPosX(posx_); - shape->setPosY(posy_); - shape->setScale(scale_); - shape->setRotation(rotationSpeed_); - shape->setScale(scale_); - shape->setColor(color_); -#endif - emulateOldZoneShape = true; + // Didnt receive a shape information. Assume we are talking to a 0.2.8- server + shape = zShapePtr(new zShapeCircle()); + #ifdef DADA + // TODO: Fill this if and when we decide to with with xValue + #else + shape->setPosX(posx_); + shape->setPosY(posy_); + shape->setScale(scale_); + shape->setRotation(rotationSpeed_); + shape->setScale(scale_); + shape->setColor(color_); + #endif + emulateOldZoneShape = true; } */ } @@ -338,75 +340,75 @@ eNetGameObject::ReadSync( m ); if(shape->isEmulatingOldZone()) - { + { - // read color - rColor aColor(0.0, 0.7, 0.5); - if (!m.End()) - { - m >> aColor.r_; - m >> aColor.g_; - m >> aColor.b_; - } + // read color + rColor aColor(0.0, 0.7, 0.5); + if (!m.End()) + { + m >> aColor.r_; + m >> aColor.g_; + m >> aColor.b_; + } se_MakeColorValid(aColor.r_, aColor.g_, aColor.b_, 1.0f); - shape->setColor(aColor); + shape->setColor(aColor); - // read reference time and functions - if (!m.End()) - { - m >> referenceTime_; - shape->setReferenceTime(referenceTime_); - if (!m.End()) - { - tFunction aFunc; - m >> aFunc; - shape->setPosX(aFunc); - m >> aFunc; - shape->setPosY(aFunc); - m >> aFunc; - shape->setScale(aFunc); - } - } - else - { - // Uses values from the eNetGameObject - referenceTime_ = createTime_; - shape->setReferenceTime(referenceTime_); + // read reference time and functions + if (!m.End()) + { + m >> referenceTime_; + shape->setReferenceTime(referenceTime_); + if (!m.End()) + { + tFunction aFunc; + m >> aFunc; + shape->setPosX(aFunc); + m >> aFunc; + shape->setPosY(aFunc); + m >> aFunc; + shape->setScale(aFunc); + } + } + else + { + // Uses values from the eNetGameObject + referenceTime_ = createTime_; + shape->setReferenceTime(referenceTime_); - tFunction aFunc; - aFunc.SetOffset( pos.x ); - aFunc.SetSlope( 0 ); - shape->setPosX( aFunc ); + tFunction aFunc; + aFunc.SetOffset( pos.x ); + aFunc.SetSlope( 0 ); + shape->setPosX( aFunc ); - aFunc.SetOffset( pos.y ); - aFunc.SetSlope( 0 ); - shape->setPosY( aFunc ); + aFunc.SetOffset( pos.y ); + aFunc.SetSlope( 0 ); + shape->setPosY( aFunc ); - aFunc.SetOffset( sg_initialSize ); - aFunc.SetSlope( sg_expansionSpeed ); - shape->setScale( aFunc ); - } + aFunc.SetOffset( sg_initialSize ); + aFunc.SetSlope( sg_expansionSpeed ); + shape->setScale( aFunc ); + } - // read rotation speed - tFunction rotationSpeed; - if (!m.End()) - { - m >> rotationSpeed; + // read rotation speed + tFunction rotationSpeed; + if (!m.End()) + { + m >> rotationSpeed; + } + else + { + // set fixed values + rotationSpeed.SetOffset( .3f ); + rotationSpeed.SetSlope( 0.0f ); + } + shape->setRotation(rotationSpeed); } else { - // set fixed values - rotationSpeed.SetOffset( .3f ); - rotationSpeed.SetSlope( 0.0f ); + bool b; + // Discard the information + while(!m.End()) { m >> b;} } - shape->setRotation(rotationSpeed); - } - else - { - bool b; - // Discard the information - while(!m.End()) { m >> b;} - } } // ******************************************************************************* @@ -421,32 +423,32 @@ bool zZone::Timestep( REAL time ) { - shape->TimeStep( time ); - /* - if(!emulateOldZoneShape) { - shape->TimeStep( time ); - } - else { // Old representation of zone - // rotate - REAL speed = GetRotationSpeed(); - REAL angle = ( time - lastTime ) * speed; - // angle /= ( 1 + 2 * 3.14159 * angle/sg_segments ); - rotation_ = rotation_.Turn( cos( angle ), sin( angle ) ); + shape->TimeStep( time ); + /* + if(!emulateOldZoneShape) { + shape->TimeStep( time ); + } + else { // Old representation of zone + // rotate + REAL speed = GetRotationSpeed(); + REAL angle = ( time - lastTime ) * speed; + // angle /= ( 1 + 2 * 3.14159 * angle/sg_segments ); + rotation_ = rotation_.Turn( cos( angle ), sin( angle ) ); - // move to new position - REAL dt = time - referenceTime_; - Move( eCoord( posx_( dt ), posy_( dt ) ), lastTime, time ); - + // move to new position + REAL dt = time - referenceTime_; + Move( eCoord( posx_( dt ), posy_( dt ) ), lastTime, time ); + - // kill this zone if it shrunk down to zero scale - if ( GetExpansionSpeed() < 0 && GetScale() <= 0 ) - { - OnVanish(); - return true; - } - } - // update time - */ + // kill this zone if it shrunk down to zero scale + if ( GetExpansionSpeed() < 0 && GetScale() <= 0 ) + { + OnVanish(); + return true; + } + } + // update time + */ lastTime = time; return false; @@ -491,15 +493,15 @@ std::set<ePlayerNetID *>::iterator iter; if ((iter = playersInside.find(prey->Player()) ) == playersInside.end()) { playersInside.insert(prey->Player()); - - // Should the player not be marked as being outside - // avoid the OnEnter transition. This happens at game - // start-up for example, when players are neither inside nor outside - if( playersOutside.find(prey->Player()) != playersOutside.end() ) - { - // Passing from outside to inside triggers the OnEnter event - OnEnter( prey, time ); - } + + // Should the player not be marked as being outside + // avoid the OnEnter transition. This happens at game + // start-up for example, when players are neither inside nor outside + if( playersOutside.find(prey->Player()) != playersOutside.end() ) + { + // Passing from outside to inside triggers the OnEnter event + OnEnter( prey, time ); + } // The player is no longer outside playersOutside.erase(prey->Player()); } @@ -512,14 +514,14 @@ if ((iter = playersOutside.find(prey->Player())) == playersOutside.end()) { playersOutside.insert(prey->Player()); - // Should the player not be marked as being inside - // avoid OnLeave transition. This happens at game - // start-up for example, when players are neither inside nor outside - if( playersInside.find(prey->Player()) != playersInside.end() ) - { - // Passing from inside to outside triggers the OnLeave event - OnLeave( prey, time ); - } + // Should the player not be marked as being inside + // avoid OnLeave transition. This happens at game + // start-up for example, when players are neither inside nor outside + if( playersInside.find(prey->Player()) != playersInside.end() ) + { + // Passing from inside to outside triggers the OnLeave event + OnLeave( prey, time ); + } // The player is no longer inside playersInside.erase(prey->Player()); } @@ -666,8 +668,8 @@ eCoord zZone::GetPosition( void ) const { - // HACK, to be implemented later and differently - // Should get this info from the shape, not the zone + // HACK, to be implemented later and differently + // Should get this info from the shape, not the zone eCoord ret; GetPosition( ret ); return ret; @@ -703,12 +705,12 @@ REAL zZone::GetScale( void ) const { - // REAL ret = EvaluateFunctionNow( this->scale_ ); - // ret = ret > 0 ? ret : 0; + // REAL ret = EvaluateFunctionNow( this->scale_ ); + // ret = ret > 0 ? ret : 0; - // HACK, to be implemented later and differently - // Should get this info from the shape, not the zone + // HACK, to be implemented later and differently + // Should get this info from the shape, not the zone return EvaluateFunctionNow( shape->getScale() ); } @@ -725,12 +727,12 @@ void zZone::SetReferenceTime( void ) { // set offsets to current values - /* - this->posx_.SetOffset( EvaluateFunctionNow( this->posx_ ) ); - this->posy_.SetOffset( EvaluateFunctionNow( this->posy_ ) ); - this->scale_.SetOffset( EvaluateFunctionNow( this->scale_ ) ); - this->rotationSpeed_.SetOffset( EvaluateFunctionNow( this->rotationSpeed_ ) ); - */ + /* + this->posx_.SetOffset( EvaluateFunctionNow( this->posx_ ) ); + this->posy_.SetOffset( EvaluateFunctionNow( this->posy_ ) ); + this->scale_.SetOffset( EvaluateFunctionNow( this->scale_ ) ); + this->rotationSpeed_.SetOffset( EvaluateFunctionNow( this->rotationSpeed_ ) ); + */ // reset time this->referenceTime_ = lastTime; } @@ -747,8 +749,8 @@ tCoord const zZone::GetRotation( void ) const { - // HACK, to be implemented later and differently - // Should get this info from the shape, not the zone + // HACK, to be implemented later and differently + // Should get this info from the shape, not the zone return tCoord(0.0, 0.0); } Modified: armagetronad/trunk/armagetronad/src/tron/zone/zZone.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zZone.h 2007-05-27 11:05:42 UTC (rev 7274) +++ armagetronad/trunk/armagetronad/src/tron/zone/zZone.h 2007-05-27 18:38:23 UTC (rev 7275) @@ -98,27 +98,27 @@ zZone const & GetRotationAcceleration( REAL & rotationAcceleration ) const; //!< Gets the current acceleration of the rotation rColor const & GetColor( void ) const; //!< Gets the current color void SetColor( rColor const & color ); //!< Sets the current color -*/ + */ void addEffectGroupEnter (zEffectGroupPtr anEffectGroup) {effectGroupEnter.push_back (anEffectGroup);}; void addEffectGroupInside (zEffectGroupPtr anEffectGroup) {effectGroupInside.push_back (anEffectGroup);}; void addEffectGroupLeave (zEffectGroupPtr anEffectGroup) {effectGroupLeave.push_back (anEffectGroup);}; void addEffectGroupOutside(zEffectGroupPtr anEffectGroup) {effectGroupOutside.push_back(anEffectGroup);}; - void setShape (zShapePtr aShape) { - shape = aShape; -#ifdef DADA -#else - /* - posx_ = shape->getPosX(); - posy_ = shape->getPosY(); - scale_ = shape->getScale(); - rotationSpeed_ = shape->getRotation(); - color_ = shape->getColor(); - */ -#endif + void setShape (zShapePtr aShape) { shape = aShape; }; + zShapePtr getShape() { return shape; }; + + // HACK + // Enables fortress described in maps from format 1 to be assigned to a team according to the old behavior + void setOldFortressAutomaticAssignmentBehavior(bool oldFortressAutomaticAssignmentBehavior) + { + oldFortressAutomaticAssignmentBehavior_ = oldFortressAutomaticAssignmentBehavior; }; + bool getOldFortressAutomaticAssignmentBehavior() { return oldFortressAutomaticAssignmentBehavior_; }; + void setName(string name) {name_ = name;}; + string getName() { return name_; }; + protected: // rColor color_; //!< the zone's color REAL createTime_; //!< the time the zone was created at @@ -167,6 +167,10 @@ void RemoveFromZoneList(void); //!< Removes the zone from the sg_Zones list if it's there + bool oldFortressAutomaticAssignmentBehavior_; + + string name_; + }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <phi...@us...> - 2007-05-27 19:08:39
|
Revision: 7276 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7276&view=rev Author: philippeqc Date: 2007-05-27 12:08:38 -0700 (Sun, 27 May 2007) Log Message: ----------- Re-activated some zoneInfluences to operate on a zones' shape Modified Paths: -------------- armagetronad/trunk/armagetronad/src/tron/gParser.cpp armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.cpp Modified: armagetronad/trunk/armagetronad/src/tron/gParser.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-05-27 18:38:23 UTC (rev 7275) +++ armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-05-27 19:08:38 UTC (rev 7276) @@ -503,20 +503,20 @@ // Build up the scale information { - tFunction tfScale; - tfScale.SetOffset( myxmlGetPropFloat(cur, "radius") * sizeMultiplier ); - tfScale.SetSlope( myxmlGetPropFloat(cur, "growth") * sizeMultiplier ); - shape->setScale( tfScale ); + tFunction tfScale; + tfScale.SetOffset( myxmlGetPropFloat(cur, "radius") * sizeMultiplier ); + tfScale.SetSlope( myxmlGetPropFloat(cur, "growth") * sizeMultiplier ); + shape->setScale( tfScale ); } // Set up the default rotation speed { - tFunction tfRotation; - tfRotation.SetOffset( .3f ); - shape->setRotation( tfRotation ); + tFunction tfRotation; + tfRotation.SetOffset( .3f ); + shape->setRotation( tfRotation ); } - // Set up the location + // Set up the location cur = cur->xmlChildrenNode; while( cur != NULL) { if (!xmlStrcmp(cur->name, (const xmlChar *)"text") || !xmlStrcmp(cur->name, (const xmlChar *)"comment")) {} @@ -524,12 +524,12 @@ REAL x = myxmlGetPropFloat(cur, "x"); REAL y = myxmlGetPropFloat(cur, "y"); - tFunction tfPos; - tfPos.SetOffset( x * sizeMultiplier ); - shape->setPosX( tfPos ); + tFunction tfPos; + tfPos.SetOffset( x * sizeMultiplier ); + shape->setPosX( tfPos ); - tfPos.SetOffset( y * sizeMultiplier ); - shape->setPosY( tfPos ); + tfPos.SetOffset( y * sizeMultiplier ); + shape->setPosY( tfPos ); endElementAlternative(grid, cur, keyword); } @@ -987,28 +987,28 @@ gVectorExtra< nNetObjectID > nidPlayerOwners; if(xmlHasProp(cur, (const xmlChar*)"owners")) - { + { string ownersDesc( myxmlGetProp(cur, "owners")); boost::tokenizer<> tok(ownersDesc); - // For each owner listed + // For each owner listed for(boost::tokenizer<>::iterator iter=tok.begin(); iter!=tok.end(); ++iter) - { - // Map from map descriptor to in-game ids + { + // Map from map descriptor to in-game ids MapIdToGameId::iterator mapOwnerToInGameOwnerPairIter = playerAsso.find(*iter); - if(mapOwnerToInGameOwnerPairIter != playerAsso.end()) - { - // Found a matching in-game owner - nidPlayerOwners.push_back( (*mapOwnerToInGameOwnerPairIter).second ); - } - else - { - // No in-game owner matching, pass - } - } - } + if(mapOwnerToInGameOwnerPairIter != playerAsso.end()) + { + // Found a matching in-game owner + nidPlayerOwners.push_back( (*mapOwnerToInGameOwnerPairIter).second ); + } + else + { + // No in-game owner matching, pass + } + } + } /* * Store the teamOwners information @@ -1025,13 +1025,13 @@ ++iter) { MapIdToGameId::iterator mapTeamOwnerToInGameTeamOwnerPairIter = teamAsso.find(*iter); - if(mapTeamOwnerToInGameTeamOwnerPairIter != teamAsso.end()) - { - // Found a matching in-game owning team + if(mapTeamOwnerToInGameTeamOwnerPairIter != teamAsso.end()) + { + // Found a matching in-game owning team nidTeamOwners.push_back( (*mapTeamOwnerToInGameTeamOwnerPairIter).second ); } else { - // No in-game owning team found. pass. + // No in-game owning team found. pass. } } } @@ -1060,123 +1060,123 @@ return currentZoneEffect; } -void +void gParser::parseZoneArthemis(eGrid * grid, xmlNodePtr cur, const xmlChar * keyword) { - - if (sn_GetNetState() != nCLIENT ) + + if (sn_GetNetState() != nCLIENT ) { - rColor color; + rColor color; - // Create a new zone - zZonePtr zone = zZonePtr(new zZone(grid)); + // Create a new zone + zZonePtr zone = zZonePtr(new zZone(grid)); - // Insert the zone under a bogus name - string zoneName = ""; - zoneMap::const_iterator iterZone; - do - { - // Fill the zone under the shortest available series of pound. - zoneName += "#"; - iterZone = mapZones.find(zoneName); - } - while (iterZone != mapZones.end()); + // Insert the zone under a bogus name + string zoneName = ""; + zoneMap::const_iterator iterZone; + do + { + // Fill the zone under the shortest available series of pound. + zoneName += "#"; + iterZone = mapZones.find(zoneName); + } + while (iterZone != mapZones.end()); - // If a name was assigned to it, save the zone in a map so it can be refered to - if (!zoneName.empty()) - mapZones[zoneName] = zone; - zone->setName(zoneName); + // If a name was assigned to it, save the zone in a map so it can be refered to + if (!zoneName.empty()) + mapZones[zoneName] = zone; + zone->setName(zoneName); - enum { win, death, fortress }; - int effect = win; - if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"win")) { - effect = win; - } - else if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"death")) { - effect = death; - } - else if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"fortress")) { - effect = fortress; - } + enum { win, death, fortress }; + int effect = win; + if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"win")) { + effect = win; + } + else if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"death")) { + effect = death; + } + else if (!xmlStrcmp(xmlGetProp(cur, (const xmlChar *)"effect"), (const xmlChar *)"fortress")) { + effect = fortress; + } - if (sn_GetNetState() != nCLIENT ) - { - if (effect != fortress) - { - // Create an effect group without ownership - zEffectGroupPtr currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), gVectorExtra< nNetObjectID >())); + if (sn_GetNetState() != nCLIENT ) + { + if (effect != fortress) + { + // Create an effect group without ownership + zEffectGroupPtr currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), gVectorExtra< nNetObjectID >())); - // Create a validator for everybody (i.e. All) - zValidatorPtr validator = zValidatorPtr( new zValidatorAll(_ignore, _ignore) ); + // Create a validator for everybody (i.e. All) + zValidatorPtr validator = zValidatorPtr( new zValidatorAll(_ignore, _ignore) ); - zSelectorPtr selector = zSelectorPtr( new zSelectorSelf() ); - //selector->setCount( -1 ); // Give infinite usage + zSelectorPtr selector = zSelectorPtr( new zSelectorSelf() ); + //selector->setCount( -1 ); // Give infinite usage - zEffectorPtr effector; - if (effect == win) - effector = zEffectorPtr( new zEffectorWin() ); - else - effector = zEffectorPtr( new zEffectorDeath() ); + zEffectorPtr effector; + if (effect == win) + effector = zEffectorPtr( new zEffectorWin() ); + else + effector = zEffectorPtr( new zEffectorDeath() ); - effector->setCount( -1 ); + effector->setCount( -1 ); - // Store all the objects - selector->addEffector( effector ); - validator->addSelector( selector ); - currentZoneEffect->setValidator( validator ); - zone->addEffectGroupEnter( currentZoneEffect ); - } - else { - zMonitorPtr monitor = zMonitorPtr(new zMonitor(grid)); - // use the same name as the associated zone - monitors[zoneName] = monitor; - monitor->setInit( 0.0f ); - monitor->setDrift( -1.0 * sg_conquestDecayRate ); - monitor->setClampLow ( 0.0f ); - monitor->setClampHigh( 1.0f ); + // Store all the objects + selector->addEffector( effector ); + validator->addSelector( selector ); + currentZoneEffect->setValidator( validator ); + zone->addEffectGroupEnter( currentZoneEffect ); + } + else { + zMonitorPtr monitor = zMonitorPtr(new zMonitor(grid)); + // use the same name as the associated zone + monitors[zoneName] = monitor; + monitor->setInit( 0.0f ); + monitor->setDrift( -1.0 * sg_conquestDecayRate ); + monitor->setClampLow ( 0.0f ); + monitor->setClampHigh( 1.0f ); - zMonitorRulePtr rule; - rule = zMonitorRulePtr( new zMonitorRuleOver( 1.0f ) ); + zMonitorRulePtr rule; + rule = zMonitorRulePtr( new zMonitorRuleOver( 1.0f ) ); - zEffectGroupPtr currentZoneEffect; - { - // Create an effect group without ownership - currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), gVectorExtra< nNetObjectID >())); + zEffectGroupPtr currentZoneEffect; + { + // Create an effect group without ownership + currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), gVectorExtra< nNetObjectID >())); - // Create a validator for everybody (i.e. All) - zValidatorPtr validator = zValidatorPtr( new zValidatorAll(_ignore, _ignore) ); + // Create a validator for everybody (i.e. All) + zValidatorPtr validator = zValidatorPtr( new zValidatorAll(_ignore, _ignore) ); - zZoneInfluencePtr infl = zZoneInfluencePtr(new zZoneInfluence(zone)); - zZoneInfluenceItemScale *b = new zZoneInfluenceItemScale(zone); - b->set( -1.5f ); - infl->addZoneInfluenceRule(zZoneInfluenceItemPtr(b)); + zZoneInfluencePtr infl = zZoneInfluencePtr(new zZoneInfluence(zone)); + zZoneInfluenceItemScale *b = new zZoneInfluenceItemScale(zone); + b->set( -1.5f ); + infl->addZoneInfluenceRule(zZoneInfluenceItemPtr(b)); - validator->addZoneInfluence( infl ); - currentZoneEffect->setValidator( validator ); - zone->addEffectGroupEnter( currentZoneEffect ); - } + validator->addZoneInfluence( infl ); + currentZoneEffect->setValidator( validator ); + zone->addEffectGroupEnter( currentZoneEffect ); + } - rule->addEffectGroup( currentZoneEffect ); - monitor->addRule(rule); - zone->setOldFortressAutomaticAssignmentBehavior(true); - } - } + rule->addEffectGroup( currentZoneEffect ); + monitor->addRule(rule); + zone->setOldFortressAutomaticAssignmentBehavior(true); + } + } - cur = cur->xmlChildrenNode; + cur = cur->xmlChildrenNode; - while(cur) { - if (!xmlStrcmp(cur->name, (const xmlChar *)"text") || !xmlStrcmp(cur->name, (const xmlChar *)"comment")) {} - else if (isElement(cur->name, (const xmlChar *)"ShapeCircle", keyword)) { - zone->setShape( parseShapeCircleArthemis(grid, cur, zone->ID(), keyword) ); - } - else if (isElement(cur->name, (const xmlChar *)"Alternative", keyword)) { - if (isValidAlternative(cur, keyword)) { - parseAlternativeContent(grid, cur); - } - } - cur = cur->next; + while(cur) { + if (!xmlStrcmp(cur->name, (const xmlChar *)"text") || !xmlStrcmp(cur->name, (const xmlChar *)"comment")) {} + else if (isElement(cur->name, (const xmlChar *)"ShapeCircle", keyword)) { + zone->setShape( parseShapeCircleArthemis(grid, cur, zone->ID(), keyword) ); } + else if (isElement(cur->name, (const xmlChar *)"Alternative", keyword)) { + if (isValidAlternative(cur, keyword)) { + parseAlternativeContent(grid, cur); + } + } + cur = cur->next; + } } @@ -1209,7 +1209,7 @@ // If a name was assigned to it, save the zone in a map so it can be refered to if (!zoneName.empty()) mapZones[zoneName] = zone; - zone->setName(zoneName); + zone->setName(zoneName); } while(cur != NULL) { @@ -1279,17 +1279,17 @@ void gParser::parseZone(eGrid * grid, xmlNodePtr cur, const xmlChar * keyword) { - switch(mapVersion) + switch(mapVersion) { case 1: - parseZoneArthemis(grid, cur, keyword); - break; + parseZoneArthemis(grid, cur, keyword); + break; case 2: - parseZoneBachus(grid, cur, keyword); - break; + parseZoneBachus(grid, cur, keyword); + break; default: - parseZoneBachus(grid, cur, keyword); - break; + parseZoneBachus(grid, cur, keyword); + break; } } @@ -1829,7 +1829,6 @@ gParser::parseMap(eGrid *grid, xmlNodePtr cur, const xmlChar * keyword) { mapVersion = myxmlGetPropInt(cur, "version"); - mapVersion = 1; // for debug purpose cur = cur->xmlChildrenNode; while (cur != NULL) { @@ -1927,5 +1926,5 @@ zMonitorPtr gParser::getMonitor(string monitorName) { - return monitors[monitorName]; + return monitors[monitorName]; } Modified: armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.cpp 2007-05-27 18:38:23 UTC (rev 7275) +++ armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.cpp 2007-05-27 19:08:38 UTC (rev 7276) @@ -31,24 +31,23 @@ void zZoneInfluenceItemRotation::apply(REAL value) { - // HACK: - // Need a solution that influence the shape, not the zone - // zone->SetRotationSpeed(rotationSpeed*value); - // zone->SetRotationAcceleration(rotationAcceleration); - std::cout << "This has not been implemented yet! Tell Philippeqc he forgot to do it!" << std::endl; + tFunction tfRotation; + tfRotation.SetOffset( rotationSpeed*value ); + tfRotation.SetSlope( rotationAcceleration ); + zone->getShape()->setRotation( tfRotation ); } zZoneInfluenceItemScale::zZoneInfluenceItemScale(zZonePtr aZone): - zZoneInfluenceItem(aZone), - scale(0.0) + zZoneInfluenceItem(aZone), + scale(0.0) {} void zZoneInfluenceItemScale::apply(REAL value) { - // HACK: - // Need a solution that influence the shape, not the zone - // zone->SetScale(scale); - std::cout << "This has not been implemented yet! Tell Philippeqc he forgot to do it!" << std::endl; + tFunction tfScale; + tfScale.SetOffset( scale ); + tfScale.SetSlope( 0.0f ); + zone->getShape()->setScale( tfScale ); } zZoneInfluenceItemPosition::zZoneInfluenceItemPosition(zZonePtr aZone): @@ -58,10 +57,14 @@ void zZoneInfluenceItemPosition::apply(REAL value) { - // HACK: - // Need a solution that influence the shape, not the zone - // zone->SetPosition(pos); - std::cout << "This has not been implemented yet! Tell Philippeqc he forgot to do it!" << std::endl; + tFunction tfPosition; + + tfPosition.SetOffset( pos.x ); + tfPosition.SetSlope( 0.0f ); + zone->getShape()->setPosX( tfPosition ); + + tfPosition.SetOffset( pos.y ); + zone->getShape()->setPosY( tfPosition ); } zZoneInfluenceItemColor::zZoneInfluenceItemColor(zZonePtr aZone): @@ -71,9 +74,6 @@ void zZoneInfluenceItemColor::apply(REAL value) { - // HACK: - // Need a solution that influence the shape, not the zone - // zone->SetColor(color); - std::cout << "This has not been implemented yet! Tell Philippeqc he forgot to do it!" << std::endl; + zone->getShape()->setColor( color ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <phi...@us...> - 2007-06-08 16:05:45
|
Revision: 7286 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7286&view=rev Author: philippeqc Date: 2007-06-08 09:05:40 -0700 (Fri, 08 Jun 2007) Log Message: ----------- Old fortress work a bit better, but still spin too fast without making anyone a winner Modified Paths: -------------- armagetronad/trunk/armagetronad/src/tron/gGame.cpp armagetronad/trunk/armagetronad/src/tron/gParser.cpp armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.cpp armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.h armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.cpp armagetronad/trunk/armagetronad/src/tron/zone/zShape.cpp armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.cpp armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.h Modified: armagetronad/trunk/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2007-06-03 16:36:14 UTC (rev 7285) +++ armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2007-06-08 16:05:40 UTC (rev 7286) @@ -4223,28 +4223,45 @@ // - gVectorExtra< nNetObjectID > teamOwners; - teamOwners.push_back(team->ID()); - zEffectGroupPtr currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), teamOwners)); + zEffectGroupPtr currentZoneEffect; // The part for the defender - zValidatorPtr validator = zValidatorPtr( new zValidatorOwnerTeam(_ignore, _ignore) ); + zValidatorPtr validator; + if (sg_singlePlayer) { + // In single player mode, all the players teams have the ID 0, making team logic fail + gVectorExtra< nNetObjectID > playerOwners; + playerOwners.push_back(closest->Player()->ID()); + currentZoneEffect = zEffectGroupPtr(new zEffectGroup(playerOwners, gVectorExtra< nNetObjectID >())); + validator = zValidatorPtr( new zValidatorOwner(_ignore, _ignore) ); + } + else { + gVectorExtra< nNetObjectID > teamOwners; + teamOwners.push_back(team->ID()); + currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), teamOwners)); + validator = zValidatorPtr( new zValidatorOwnerTeam(_ignore, _ignore) ); + } zMonitorInfluencePtr inflDefender = zMonitorInfluencePtr(new zMonitorInfluence( monitor )); - inflDefender->setInfluenceSlide( sg_defendRate ); + inflDefender->setInfluenceSlide( -1.0 * sg_defendRate ); // Store all the objects validator->addMonitorInfluence( inflDefender ); - currentZoneEffect->setValidator( validator ); + currentZoneEffect->addValidator( validator ); // The part for the attaquer - validator = zValidatorPtr( new zValidatorAllButOwnerTeam(_ignore, _ignore) ); + if (sg_singlePlayer) { + // In single player mode, all the players teams have the ID 0, making team logic fail + validator = zValidatorPtr( new zValidatorAllButOwner(_ignore, _ignore) ); + } + else { + validator = zValidatorPtr( new zValidatorAllButOwnerTeam(_ignore, _ignore) ); + } zMonitorInfluencePtr inflAttaquer = zMonitorInfluencePtr(new zMonitorInfluence( monitor )); - inflAttaquer->setInfluenceSlide( sg_conquestRate ); + inflAttaquer->setInfluenceSlide( sg_conquestRate ); // Store all the objects validator->addMonitorInfluence( inflAttaquer ); - currentZoneEffect->setValidator( validator ); + currentZoneEffect->addValidator( validator ); Modified: armagetronad/trunk/armagetronad/src/tron/gParser.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-06-03 16:36:14 UTC (rev 7285) +++ armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-06-08 16:05:40 UTC (rev 7286) @@ -493,9 +493,66 @@ color.b_ = myxmlGetPropFloat(cur, "blue"); color.a_ = myxmlGetPropFloat(cur, "alpha"); + /* + string colorName = myxmlGetProp(cur, "name"); + + + // Blue + +0xf0f8ff alice, +0x007fff azure, +0x007ba7 cerulean, +0x0047ab cobalt +0x6495ed cornflower +0x0000c8 dark +0x1560bd denim +0x1e90ff dodger +0x4b0082 indigo +0x002fa7 internationalklein +0xbdbbd7 lavender +0x003366 midnight +0x000080 navy +0xccccff periwinkle +0x32127a persian +0x003399 powder +0x003153 prussian +0x4169e1 royal +0x082567 sapphire +0x4682b4 steel +0x120a8f ultramarine + + + + // RED + +0xe32636 alizarin, +0x800020 burgundy, +0xc41e3a cardinal, +0x960018 carmine, +0xde3163 cerise +0xcd5c5c chestnut +0xdc143c crimson +0x801818 falu +0xff00ff fuchsia +0xff0090 magenta +0x800000 maroon +0x993366 mauve +0xc71585 red-violet +0xb7410e rust +0xcc8899 puce +0x92000a sangria +0xff2400 scarlet +0xe2725b terracotta +0xcc4e5c darkterracotta +0xe34234 vermilion + */ + return color; } + + + zShapePtr gParser::parseShapeCircleArthemis(eGrid *grid, xmlNodePtr cur, unsigned short idZone, const xmlChar * keyword) { @@ -512,7 +569,8 @@ // Set up the default rotation speed { tFunction tfRotation; - tfRotation.SetOffset( .3f ); + tfRotation.SetOffset( 0.0f ); + tfRotation.SetSlope( .3f ); shape->setRotation( tfRotation ); } @@ -710,7 +768,12 @@ if (!xmlStrcmp(cur->name, (const xmlChar *)"text") || !xmlStrcmp(cur->name, (const xmlChar *)"comment")) {} else if (isElement(cur->name, (const xmlChar *)"Rotation", keyword)) { zZoneInfluenceItemRotation *b = new zZoneInfluenceItemRotation(refZone); - b->set(myxmlGetPropFloat(cur, "rotationSpeed"), myxmlGetPropFloat(cur, "rotationAcceleration")); + b->set( + myxmlGetPropFloat(cur, "rotationBaseAngle"), + myxmlGetPropFloat(cur, "rotationValueAngle"), + myxmlGetPropFloat(cur, "rotationBaseSpeed"), + myxmlGetPropFloat(cur, "rotationValueSpeed") + ); infl->addZoneInfluenceRule(zZoneInfluenceItemPtr(b)); } else if (isElement(cur->name, (const xmlChar *)"Scale", keyword)) { @@ -1046,7 +1109,7 @@ while( cur != NULL) { if (!xmlStrcmp(cur->name, (const xmlChar *)"text") || !xmlStrcmp(cur->name, (const xmlChar *)"comment")) {} else if (isElement(cur->name, (const xmlChar *)"User", keyword)) { - currentZoneEffect->setValidator(parseZoneEffectGroupValidator(grid, cur, keyword)); + currentZoneEffect->addValidator(parseZoneEffectGroupValidator(grid, cur, keyword)); } else if (isElement(cur->name, (const xmlChar *)"Alternative", keyword)) { if (isValidAlternative(cur, keyword)) { @@ -1124,7 +1187,7 @@ // Store all the objects selector->addEffector( effector ); validator->addSelector( selector ); - currentZoneEffect->setValidator( validator ); + currentZoneEffect->addValidator( validator ); zone->addEffectGroupEnter( currentZoneEffect ); } else { @@ -1132,33 +1195,61 @@ // use the same name as the associated zone monitors[zoneName] = monitor; monitor->setInit( 0.0f ); - monitor->setDrift( -1.0 * sg_conquestDecayRate ); + monitor->setDrift( -1.0f * sg_conquestDecayRate ); monitor->setClampLow ( 0.0f ); monitor->setClampHigh( 1.0f ); zMonitorRulePtr rule; - rule = zMonitorRulePtr( new zMonitorRuleOver( 1.0f ) ); + { + // All that happens once the zone is conquered + rule = zMonitorRulePtr( new zMonitorRuleOver( 1.0f ) ); - zEffectGroupPtr currentZoneEffect; + zEffectGroupPtr currentZoneEffect; + { + // Create an effect group without ownership + currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), gVectorExtra< nNetObjectID >())); + + // Create a validator for everybody (i.e. All) + zValidatorPtr validator = zValidatorPtr( new zValidatorAll(_ignore, _ignore) ); + + // Once the zone is conquered, collapse the zhape + zZoneInfluenceItemScale *scaler = new zZoneInfluenceItemScale(zone); + scaler->set( -1.5f ); + + zZoneInfluencePtr infl = zZoneInfluencePtr(new zZoneInfluence(zone)); + infl->addZoneInfluenceRule(zZoneInfluenceItemPtr(scaler)); + + validator->addZoneInfluence( infl ); + currentZoneEffect->addValidator( validator ); + } + + rule->addEffectGroup( currentZoneEffect ); + monitor->addRule(rule); + } + { - // Create an effect group without ownership - currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), gVectorExtra< nNetObjectID >())); + rule = zMonitorRulePtr( new zMonitorRuleUnder( 1.0f ) ); // i.e: Always + zEffectGroupPtr currentZoneEffect; + { + // Create an effect group without ownership + currentZoneEffect = zEffectGroupPtr(new zEffectGroup(gVectorExtra< nNetObjectID >(), gVectorExtra< nNetObjectID >())); - // Create a validator for everybody (i.e. All) - zValidatorPtr validator = zValidatorPtr( new zValidatorAll(_ignore, _ignore) ); + // Create a validator for everybody (i.e. All) + zValidatorPtr validator = zValidatorPtr( new zValidatorAll(_ignore, _ignore) ); - zZoneInfluencePtr infl = zZoneInfluencePtr(new zZoneInfluence(zone)); - zZoneInfluenceItemScale *b = new zZoneInfluenceItemScale(zone); - b->set( -1.5f ); - infl->addZoneInfluenceRule(zZoneInfluenceItemPtr(b)); + zZoneInfluenceItemRotation *b = new zZoneInfluenceItemRotation(zone); + b->set( 0.0f, 0.0f, 0.3f, 2.0f * 3.141f / 11.0f); - validator->addZoneInfluence( infl ); - currentZoneEffect->setValidator( validator ); - zone->addEffectGroupEnter( currentZoneEffect ); + zZoneInfluencePtr infl = zZoneInfluencePtr(new zZoneInfluence(zone)); + infl->addZoneInfluenceRule(zZoneInfluenceItemPtr(b)); + + validator->addZoneInfluence( infl ); + currentZoneEffect->addValidator( validator ); + } + rule->addEffectGroup( currentZoneEffect ); + monitor->addRule(rule); } - rule->addEffectGroup( currentZoneEffect ); - monitor->addRule(rule); zone->setOldFortressAutomaticAssignmentBehavior(true); } } Modified: armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.cpp 2007-06-03 16:36:14 UTC (rev 7285) +++ armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.cpp 2007-06-08 16:05:40 UTC (rev 7286) @@ -29,6 +29,8 @@ zEffectGroup::zEffectGroup(gVectorExtra< nNetObjectID > const owners, gVectorExtra< nNetObjectID > const teamOwners): validators(), + // monitorInfluences(), + // zoneInfluences(), d_owners(owners), d_teamOwners(teamOwners), d_calculatedTargets() @@ -36,6 +38,8 @@ zEffectGroup::zEffectGroup(zEffectGroup const &other) : validators(other.validators), + // monitorInfluences(other.monitorInfluences), + // zoneInfluences(other.zoneInfluences), d_owners(other.d_owners), d_teamOwners(other.d_teamOwners), d_calculatedTargets(other.d_calculatedTargets) @@ -63,4 +67,25 @@ { (*iter)->validate(d_owners, d_teamOwners, possibleUser, miscData); } + /* + zMonitorInfluencePtrs::const_iterator iterMonitorInfluence; + for(iterMonitorInfluence=monitorInfluences.begin(); + iterMonitorInfluence!=monitorInfluences.end(); + ++iterMonitorInfluence) + { + (*iterMonitorInfluence)->apply(d_owners, d_teamOwners, possibleUser.who); + } + + zZoneInfluencePtrs::const_iterator iterZoneInfluence; + for(iterZoneInfluence=zoneInfluences.begin(); + iterZoneInfluence!=zoneInfluences.end(); + ++iterZoneInfluence) + { + REAL value = 0.0; + if ( miscData.get() != 0 ) + value = *miscData; + + (*iterZoneInfluence)->apply(value); + } + */ } Modified: armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.h 2007-06-03 16:36:14 UTC (rev 7285) +++ armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.h 2007-06-08 16:05:40 UTC (rev 7286) @@ -46,8 +46,11 @@ ~zEffectGroup(); void operator=(zEffectGroup const &other); - void setValidator(zValidatorPtr _validator) {validators.push_back( _validator );}; - + void addValidator(zValidatorPtr _validator) {validators.push_back( _validator );}; + /* + void addMonitorInfluence(zMonitorInfluencePtr newInfluence) {monitorInfluences.push_back( newInfluence );}; + void addZoneInfluence(zZoneInfluencePtr newInfluence) {zoneInfluences.push_back( newInfluence );}; + */ bool isValidUser(gCycle *possibleUser); gVectorExtra <ePlayerNetID *> getCalculatedTarget( gCycle * triggerer ); @@ -61,6 +64,8 @@ protected: std::vector<zValidatorPtr> validators; + // zMonitorInfluencePtrs monitorInfluences; + // zZoneInfluencePtrs zoneInfluences; gVectorExtra< nNetObjectID > d_owners; gVectorExtra< nNetObjectID > d_teamOwners; Modified: armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.cpp 2007-06-03 16:36:14 UTC (rev 7285) +++ armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.cpp 2007-06-08 16:05:40 UTC (rev 7286) @@ -15,7 +15,6 @@ triggerer.marked = marked; contributorsSlide.push_back(triggerer); - totalInfluenceSlide += triggererInfluenceSlide; } @@ -28,7 +27,6 @@ triggerer.marked = marked; contributorsAdd.push_back(triggerer); - totalInfluenceAdd += triggererInfluenceAdd; } @@ -40,7 +38,6 @@ triggerer.marked = marked; contributorsSet.push_back(triggerer); - totalInfluenceSet = triggererInfluenceSet; } Modified: armagetronad/trunk/armagetronad/src/tron/zone/zShape.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zShape.cpp 2007-06-03 16:36:14 UTC (rev 7285) +++ armagetronad/trunk/armagetronad/src/tron/zone/zShape.cpp 2007-06-08 16:05:40 UTC (rev 7286) @@ -257,7 +257,10 @@ #ifdef DADA eCoord rot(cos(rotation_->GetFloat()) , sin(rotation_->GetFloat())); #else - eCoord rot(cos(rotation_.Evaluate(lasttime_ - referencetime_) ), sin(rotation_.Evaluate(lasttime_ - referencetime_))); + // eCoord rot(cos(rotation_.Evaluate(lasttime_ - referencetime_) ), sin(rotation_.Evaluate(lasttime_ - referencetime_))); + eCoord rot(1,0); + REAL currAngle = rotation_.Evaluate(lasttime_ - referencetime_); + rot = rot.Turn( cos(currAngle), sin(currAngle) ); #endif GLfloat m[4][4]={{rot.x,rot.y,0,0}, Modified: armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp 2007-06-03 16:36:14 UTC (rev 7285) +++ armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp 2007-06-08 16:05:40 UTC (rev 7286) @@ -30,12 +30,14 @@ -zValidator::zValidator(Triad _positive, Triad _marked):positive(_positive), marked(_marked) +zValidator::zValidator(Triad _positive, Triad _marked):positive(_positive), marked(_marked), + selectors(), monitorInfluences(), zoneInfluences() { } zValidator::zValidator(zValidator const &other): positive( other.getPositive()), - marked( other.getMarked()) + marked( other.getMarked()), + selectors(), monitorInfluences(), zoneInfluences() { } @@ -73,7 +75,9 @@ iter != teamOwners.end(); ++iter) { - if (bool(sn_netObjects[(*iter)]) && (*iter == possibleTeamOwner->ID()) ) + // When in local game, the team id of all players is 0, which while not a valid reference, it still ok + bool isValidID = ( (*iter) == 0 || bool(sn_netObjects[(*iter)])); + if ( isValidID && (*iter == possibleTeamOwner->ID()) ) return true; } return false; Modified: armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.cpp 2007-06-03 16:36:14 UTC (rev 7285) +++ armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.cpp 2007-06-08 16:05:40 UTC (rev 7286) @@ -25,15 +25,17 @@ zZoneInfluenceItemRotation::zZoneInfluenceItemRotation(zZonePtr aZone): zZoneInfluenceItem(aZone), - rotationSpeed(0.0), - rotationAcceleration(0.0) + rotationBaseAngle(0.0), + rotationValueAngle(0.0), + rotationBaseSpeed(0.0), + rotationValueSpeed(0.0) {} void zZoneInfluenceItemRotation::apply(REAL value) { tFunction tfRotation; - tfRotation.SetOffset( rotationSpeed*value ); - tfRotation.SetSlope( rotationAcceleration ); + tfRotation.SetOffset( rotationBaseAngle + rotationValueAngle*value ); + tfRotation.SetSlope( rotationBaseSpeed + rotationValueSpeed*value*value ); zone->getShape()->setRotation( tfRotation ); } Modified: armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.h 2007-06-03 16:36:14 UTC (rev 7285) +++ armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.h 2007-06-08 16:05:40 UTC (rev 7286) @@ -41,13 +41,20 @@ class zZoneInfluenceItemRotation : public zZoneInfluenceItem { protected: - REAL rotationSpeed; - REAL rotationAcceleration; + REAL rotationBaseAngle; // The base component of the rotation speed + REAL rotationValueAngle; // This component of the speed is affected by "value" + REAL rotationBaseSpeed; + REAL rotationValueSpeed; public: zZoneInfluenceItemRotation(zZonePtr aZone); virtual ~zZoneInfluenceItemRotation() {}; - void set(REAL rotSp, REAL rotAcc) {rotationSpeed = rotSp; rotationAcceleration = rotAcc;}; + void set(REAL rotBaseAn, REAL rotValueAn, REAL rotBaseSp, REAL rotValueSp) { + rotationBaseAngle = rotBaseAn; + rotationValueAngle = rotValueAn; + rotationBaseSpeed = rotBaseSp; + rotationValueSpeed = rotValueSp; + }; virtual void apply(REAL value); }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <phi...@us...> - 2007-06-08 21:17:34
|
Revision: 7288 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7288&view=rev Author: philippeqc Date: 2007-06-08 14:17:35 -0700 (Fri, 08 Jun 2007) Log Message: ----------- Monitor influence operates with tFunction internally During parsing, monitor and zone names are preserved Added a new validator: allButTeamOwner (previously commented away and named allButOwnerTeam) The monitor influence set are now cumulated together. miscDataPtr cannot be an auto_ptr, as the value carried dissapear somewhere along the way when there are more than one actor in the fortress. Modified Paths: -------------- armagetronad/trunk/armagetronad/src/tron/gGame.cpp armagetronad/trunk/armagetronad/src/tron/gParser.cpp armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.cpp armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.h armagetronad/trunk/armagetronad/src/tron/zone/zMisc.h armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.cpp armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.h armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp armagetronad/trunk/armagetronad/src/tron/zone/zValidator.h Modified: armagetronad/trunk/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2007-06-08 21:09:18 UTC (rev 7287) +++ armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2007-06-08 21:17:35 UTC (rev 7288) @@ -4242,7 +4242,7 @@ } zMonitorInfluencePtr inflDefender = zMonitorInfluencePtr(new zMonitorInfluence( monitor )); - inflDefender->setInfluenceSlide( -1.0 * sg_defendRate ); + inflDefender->setInfluenceSlide( tFunction(-1.0 * sg_defendRate, 0.0) ); // Store all the objects validator->addMonitorInfluence( inflDefender ); @@ -4254,11 +4254,11 @@ validator = zValidatorPtr( new zValidatorAllButOwner(_ignore, _ignore) ); } else { - validator = zValidatorPtr( new zValidatorAllButOwnerTeam(_ignore, _ignore) ); + validator = zValidatorPtr( new zValidatorAllButTeamOwner(_ignore, _ignore) ); } zMonitorInfluencePtr inflAttaquer = zMonitorInfluencePtr(new zMonitorInfluence( monitor )); - inflAttaquer->setInfluenceSlide( sg_conquestRate ); + inflAttaquer->setInfluenceSlide( tFunction(sg_conquestRate, 0.0) ); // Store all the objects validator->addMonitorInfluence( inflAttaquer ); currentZoneEffect->addValidator( validator ); Modified: armagetronad/trunk/armagetronad/src/tron/gParser.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-06-08 21:09:18 UTC (rev 7287) +++ armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-06-08 21:17:35 UTC (rev 7288) @@ -632,7 +632,7 @@ { REAL param[2] = {0.0, 0.0}; int bPos; - if( (bPos = str.find(',')) != -1) + if( (bPos = str.find(';')) != -1) { param[0] = atof(str.substr(0, bPos).c_str()); param[1] = atof(str.substr(bPos + 1, str.length()).c_str()); @@ -824,24 +824,36 @@ // make an empty zone and store under the right label // It should be populated later ref = zMonitorPtr(new zMonitor(grid)); - if (!monitorName.empty()) + if (!monitorName.empty()) { monitors[monitorName] = ref; + ref->setName(monitorName); + } } zMonitorInfluencePtr infl = zMonitorInfluencePtr(new zMonitorInfluence(ref)); infl->setMarked(myxmlGetPropTriad(cur, "marked")); - if(xmlHasProp(cur, (const xmlChar*)"influenceSlide")) - infl->setInfluenceSlide(myxmlGetPropFloat(cur, "influenceSlide")); + if(xmlHasProp(cur, (const xmlChar*)"influenceSlide")) { + string str = string(myxmlGetProp(cur, "influenceSlide")); + tFunction tfInfluence; + myCheapParameterSplitter(str, tfInfluence, false); + infl->setInfluenceSlide( tfInfluence ); + } - if(xmlHasProp(cur, (const xmlChar *)"influenceAdd")) - infl->setInfluenceAdd(myxmlGetPropFloat(cur, "influenceAdd")); + if(xmlHasProp(cur, (const xmlChar *)"influenceAdd")) { + string str = string(myxmlGetProp(cur, "influenceAdd")); + tFunction tfInfluence; + myCheapParameterSplitter(str, tfInfluence, false); + infl->setInfluenceAdd( tfInfluence ); + } - if(xmlHasProp(cur, (const xmlChar *)"influenceSet")) - infl->setInfluenceSet(myxmlGetPropFloat(cur, "influenceSet")); + if(xmlHasProp(cur, (const xmlChar *)"influenceSet")) { + string str = string(myxmlGetProp(cur, "influenceSet")); + tFunction tfInfluence; + myCheapParameterSplitter(str, tfInfluence, false); + infl->setInfluenceSet( tfInfluence ); + } - - return infl; } @@ -995,8 +1007,8 @@ validators[tString("owner")] = zValidatorOwner::create; validators[tString("ownerteam")] = zValidatorOwnerTeam::create; validators[tString("allbutowner")] = zValidatorAllButOwner::create; + validators[tString("allbutteamowner")] = zValidatorAllButTeamOwner::create; /* - validators[tString("allbutteamowner")] = zValidatorAllButTeamOwner::create; validators[tString("anotherteammate")] = zValidatorTeammate::create; */ @@ -1401,8 +1413,10 @@ // make an empty zone and store under the right label // It should be populated later monitor = zMonitorPtr(new zMonitor(grid)); - if (!monitorName.empty()) + if (!monitorName.empty()) { monitors[monitorName] = monitor; + monitor->setName(monitorName); + } } monitor->setInit(myxmlGetPropFloat(cur, "init")); Modified: armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.cpp 2007-06-08 21:09:18 UTC (rev 7287) +++ armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.cpp 2007-06-08 21:17:35 UTC (rev 7288) @@ -67,25 +67,4 @@ { (*iter)->validate(d_owners, d_teamOwners, possibleUser, miscData); } - /* - zMonitorInfluencePtrs::const_iterator iterMonitorInfluence; - for(iterMonitorInfluence=monitorInfluences.begin(); - iterMonitorInfluence!=monitorInfluences.end(); - ++iterMonitorInfluence) - { - (*iterMonitorInfluence)->apply(d_owners, d_teamOwners, possibleUser.who); - } - - zZoneInfluencePtrs::const_iterator iterZoneInfluence; - for(iterZoneInfluence=zoneInfluences.begin(); - iterZoneInfluence!=zoneInfluences.end(); - ++iterZoneInfluence) - { - REAL value = 0.0; - if ( miscData.get() != 0 ) - value = *miscData; - - (*iterZoneInfluence)->apply(value); - } - */ } Modified: armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.h 2007-06-08 21:09:18 UTC (rev 7287) +++ armagetronad/trunk/armagetronad/src/tron/zone/zEffectGroup.h 2007-06-08 21:17:35 UTC (rev 7288) @@ -47,10 +47,7 @@ void operator=(zEffectGroup const &other); void addValidator(zValidatorPtr _validator) {validators.push_back( _validator );}; - /* - void addMonitorInfluence(zMonitorInfluencePtr newInfluence) {monitorInfluences.push_back( newInfluence );}; - void addZoneInfluence(zZoneInfluencePtr newInfluence) {zoneInfluences.push_back( newInfluence );}; - */ + bool isValidUser(gCycle *possibleUser); gVectorExtra <ePlayerNetID *> getCalculatedTarget( gCycle * triggerer ); @@ -64,8 +61,6 @@ protected: std::vector<zValidatorPtr> validators; - // zMonitorInfluencePtrs monitorInfluences; - // zZoneInfluencePtrs zoneInfluences; gVectorExtra< nNetObjectID > d_owners; gVectorExtra< nNetObjectID > d_teamOwners; Modified: armagetronad/trunk/armagetronad/src/tron/zone/zMisc.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zMisc.h 2007-06-08 21:09:18 UTC (rev 7287) +++ armagetronad/trunk/armagetronad/src/tron/zone/zMisc.h 2007-06-08 21:17:35 UTC (rev 7288) @@ -41,8 +41,5 @@ * ATM: only the value from the monitor is passed * We use an auto_ptr so we can control if there is a value or not */ -typedef std::auto_ptr<REAL> miscDataPtr; - - - +typedef boost::shared_ptr<REAL> miscDataPtr; #endif Modified: armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.cpp 2007-06-08 21:09:18 UTC (rev 7287) +++ armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.cpp 2007-06-08 21:17:35 UTC (rev 7288) @@ -38,7 +38,7 @@ triggerer.marked = marked; contributorsSet.push_back(triggerer); - totalInfluenceSet = triggererInfluenceSet; + totalInfluenceSet += triggererInfluenceSet; } @@ -172,12 +172,12 @@ } void -zMonitorInfluence::apply(gVectorExtra< nNetObjectID > &owners, gVectorExtra< nNetObjectID > &teamOwners, gCycle * user) { +zMonitorInfluence::apply(gVectorExtra< nNetObjectID > &owners, gVectorExtra< nNetObjectID > &teamOwners, gCycle * user, REAL value) { // Currently, we discard ownership information if (influenceSlideAvailable == true) - monitor->affectSlide(user, influenceSlide, marked); + monitor->affectSlide(user, influenceSlide(value), marked); if (influenceAddAvailable == true) - monitor->affectAdd(user, influenceAdd, marked); + monitor->affectAdd(user, influenceAdd(value), marked); if (influenceSetAvailable == true) - monitor->affectSet(user, influenceSet, marked); + monitor->affectSet(user, influenceSet(value), marked); } Modified: armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.h 2007-06-08 21:09:18 UTC (rev 7287) +++ armagetronad/trunk/armagetronad/src/tron/zone/zMonitor.h 2007-06-08 21:17:35 UTC (rev 7288) @@ -9,6 +9,7 @@ #include "gCycle.h" #include "zone/zMisc.h" #include "zone/zEffectGroup.h" +#include "tFunction.h" class zMonitorRule; class zMonitor; @@ -50,6 +51,7 @@ RemoveFromListsAll(); }; + void setName(string name) {this->name = name;}; void addRule(zMonitorRulePtr aRule); void setInit(REAL v) {initialValue = v;}; @@ -80,6 +82,8 @@ REAL minValue; //!< Low bound that value can take REAL maxValue; //!< High bound that value can take + + string name; }; @@ -150,9 +154,9 @@ */ class zMonitorInfluence { zMonitorPtr monitor; - REAL influenceSlide; - REAL influenceAdd; - REAL influenceSet; + tFunction influenceSlide; + tFunction influenceAdd; + tFunction influenceSet; bool influenceSlideAvailable; bool influenceAddAvailable; @@ -163,9 +167,9 @@ public: zMonitorInfluence(zMonitorPtr aMonitor): monitor(aMonitor), - influenceSlide(0), - influenceAdd(0), - influenceSet(0), + influenceSlide(), + influenceAdd(), + influenceSet(), influenceSlideAvailable(false), influenceAddAvailable(false), influenceSetAvailable(false), @@ -173,12 +177,12 @@ { }; ~zMonitorInfluence() { }; - void apply(gVectorExtra< nNetObjectID > &owners, gVectorExtra< nNetObjectID > &teamOwners, gCycle* triggerer); + void apply(gVectorExtra< nNetObjectID > &owners, gVectorExtra< nNetObjectID > &teamOwners, gCycle* triggerer, REAL value); void setMarked(Triad mark) {marked = mark;}; - void setInfluenceSlide(REAL infl) {influenceSlide = infl; influenceSlideAvailable=true;}; - void setInfluenceAdd (REAL infl) {influenceAdd = infl; influenceAddAvailable =true;}; - void setInfluenceSet (REAL infl) {influenceSet = infl; influenceSetAvailable =true;}; + void setInfluenceSlide(tFunction infl) {influenceSlide = infl; influenceSlideAvailable=true;}; + void setInfluenceAdd (tFunction infl) {influenceAdd = infl; influenceAddAvailable =true;}; + void setInfluenceSet (tFunction infl) {influenceSet = infl; influenceSetAvailable =true;}; }; Modified: armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp 2007-06-08 21:09:18 UTC (rev 7287) +++ armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp 2007-06-08 21:17:35 UTC (rev 7288) @@ -85,6 +85,10 @@ void zValidator::validate(gVectorExtra< nNetObjectID > &owners, gVectorExtra< nNetObjectID > &teamOwners, Triggerer possibleUser, miscDataPtr &miscData) { + REAL value = 0.0; + if ( miscData.get() != 0 ) + value = *miscData; + if(isValid(owners, teamOwners, possibleUser.who) && validateTriad(possibleUser.positive, positive) && validateTriad(possibleUser.marked, marked)) { zSelectorPtrs::const_iterator iterSelector; for(iterSelector=selectors.begin(); @@ -99,7 +103,7 @@ iterMonitorInfluence!=monitorInfluences.end(); ++iterMonitorInfluence) { - (*iterMonitorInfluence)->apply(owners, teamOwners, possibleUser.who); + (*iterMonitorInfluence)->apply(owners, teamOwners, possibleUser.who, value); } zZoneInfluencePtrs::const_iterator iterZoneInfluence; @@ -107,10 +111,6 @@ iterZoneInfluence!=zoneInfluences.end(); ++iterZoneInfluence) { - REAL value = 0.0; - if ( miscData.get() != 0 ) - value = *miscData; - (*iterZoneInfluence)->apply(value); } } @@ -235,32 +235,32 @@ } // ******************* -// zValidatorAllButOwnerTeam +// zValidatorAllButTeamOwner // ******************* -zValidator * zValidatorAllButOwnerTeam::create(Triad _positive, Triad _marked) +zValidator * zValidatorAllButTeamOwner::create(Triad _positive, Triad _marked) { - return new zValidatorAllButOwnerTeam(_positive, _marked); + return new zValidatorAllButTeamOwner(_positive, _marked); } -zValidatorAllButOwnerTeam::zValidatorAllButOwnerTeam(Triad _positive, Triad _marked): +zValidatorAllButTeamOwner::zValidatorAllButTeamOwner(Triad _positive, Triad _marked): zValidator(_positive, _marked) { } -zValidatorAllButOwnerTeam::zValidatorAllButOwnerTeam(zValidatorAllButOwnerTeam const &other): +zValidatorAllButTeamOwner::zValidatorAllButTeamOwner(zValidatorAllButTeamOwner const &other): zValidator(other) { } -void zValidatorAllButOwnerTeam::operator=(zValidatorAllButOwnerTeam const &other) +void zValidatorAllButTeamOwner::operator=(zValidatorAllButTeamOwner const &other) { this->zValidator::operator=(other); } -zValidator *zValidatorAllButOwnerTeam::copy(void) const { - return new zValidatorAllButOwnerTeam(*this); +zValidator *zValidatorAllButTeamOwner::copy(void) const { + return new zValidatorAllButTeamOwner(*this); } bool -zValidatorAllButOwnerTeam::isValid(gVectorExtra< nNetObjectID > &owners, gVectorExtra< nNetObjectID > &teamOwners, gCycle* possibleUser) +zValidatorAllButTeamOwner::isValid(gVectorExtra< nNetObjectID > &owners, gVectorExtra< nNetObjectID > &teamOwners, gCycle* possibleUser) { return !isTeamOwner(possibleUser->Player()->CurrentTeam(), teamOwners); } Modified: armagetronad/trunk/armagetronad/src/tron/zone/zValidator.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zValidator.h 2007-06-08 21:09:18 UTC (rev 7287) +++ armagetronad/trunk/armagetronad/src/tron/zone/zValidator.h 2007-06-08 21:17:35 UTC (rev 7288) @@ -137,14 +137,14 @@ bool isValid(gVectorExtra< nNetObjectID > &owners, gVectorExtra< nNetObjectID > &teamOwners, gCycle* possibleUser); }; -class zValidatorAllButOwnerTeam : public zValidator +class zValidatorAllButTeamOwner : public zValidator { public: static zValidator* create(Triad _positive, Triad _marked); - zValidatorAllButOwnerTeam(Triad _positive, Triad _marked); - zValidatorAllButOwnerTeam(zValidatorAllButOwnerTeam const &other); - void operator=(zValidatorAllButOwnerTeam const &other); //!< overloaded assignment operator - virtual ~zValidatorAllButOwnerTeam() {}; + zValidatorAllButTeamOwner(Triad _positive, Triad _marked); + zValidatorAllButTeamOwner(zValidatorAllButTeamOwner const &other); + void operator=(zValidatorAllButTeamOwner const &other); //!< overloaded assignment operator + virtual ~zValidatorAllButTeamOwner() {}; zValidator *copy(void) const; protected: bool isValid(gVectorExtra< nNetObjectID > &owners, gVectorExtra< nNetObjectID > &teamOwners, gCycle* possibleUser); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <phi...@us...> - 2007-06-08 21:36:58
|
Revision: 7289 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7289&view=rev Author: philippeqc Date: 2007-06-08 14:36:59 -0700 (Fri, 08 Jun 2007) Log Message: ----------- zZoneInfluenceRotation internally works with tFunctions now Modified Paths: -------------- armagetronad/trunk/armagetronad/src/tron/gParser.cpp armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.cpp armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.h Modified: armagetronad/trunk/armagetronad/src/tron/gParser.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-06-08 21:17:35 UTC (rev 7288) +++ armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-06-08 21:36:59 UTC (rev 7289) @@ -768,12 +768,16 @@ if (!xmlStrcmp(cur->name, (const xmlChar *)"text") || !xmlStrcmp(cur->name, (const xmlChar *)"comment")) {} else if (isElement(cur->name, (const xmlChar *)"Rotation", keyword)) { zZoneInfluenceItemRotation *b = new zZoneInfluenceItemRotation(refZone); - b->set( - myxmlGetPropFloat(cur, "rotationBaseAngle"), - myxmlGetPropFloat(cur, "rotationValueAngle"), - myxmlGetPropFloat(cur, "rotationBaseSpeed"), - myxmlGetPropFloat(cur, "rotationValueSpeed") - ); + + string str = string(myxmlGetProp(cur, "rotationAngle")); + tFunction tfRotationAngle; + myCheapParameterSplitter(str, tfRotationAngle, true); + + str = string(myxmlGetProp(cur, "rotationSpeed")); + tFunction tfRotationSpeed; + myCheapParameterSplitter(str, tfRotationSpeed, true); + + b->set(tfRotationAngle, tfRotationSpeed); infl->addZoneInfluenceRule(zZoneInfluenceItemPtr(b)); } else if (isElement(cur->name, (const xmlChar *)"Scale", keyword)) { @@ -1250,7 +1254,7 @@ zValidatorPtr validator = zValidatorPtr( new zValidatorAll(_ignore, _ignore) ); zZoneInfluenceItemRotation *b = new zZoneInfluenceItemRotation(zone); - b->set( 0.0f, 0.0f, 0.3f, 2.0f * 3.141f / 11.0f); + b->set( tFunction(0.0f, 0.0f), tFunction(0.3f, 2.0f * 3.141f / 11.0f) ); zZoneInfluencePtr infl = zZoneInfluencePtr(new zZoneInfluence(zone)); infl->addZoneInfluenceRule(zZoneInfluenceItemPtr(b)); Modified: armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.cpp 2007-06-08 21:17:35 UTC (rev 7288) +++ armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.cpp 2007-06-08 21:36:59 UTC (rev 7289) @@ -25,17 +25,15 @@ zZoneInfluenceItemRotation::zZoneInfluenceItemRotation(zZonePtr aZone): zZoneInfluenceItem(aZone), - rotationBaseAngle(0.0), - rotationValueAngle(0.0), - rotationBaseSpeed(0.0), - rotationValueSpeed(0.0) + rotationAngle(), + rotationSpeed() {} void zZoneInfluenceItemRotation::apply(REAL value) { tFunction tfRotation; - tfRotation.SetOffset( rotationBaseAngle + rotationValueAngle*value ); - tfRotation.SetSlope( rotationBaseSpeed + rotationValueSpeed*value*value ); + tfRotation.SetOffset( rotationAngle(value) ); + tfRotation.SetSlope( rotationSpeed(value*value) ); zone->getShape()->setRotation( tfRotation ); } Modified: armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.h 2007-06-08 21:17:35 UTC (rev 7288) +++ armagetronad/trunk/armagetronad/src/tron/zone/zZoneInfluence.h 2007-06-08 21:36:59 UTC (rev 7289) @@ -7,6 +7,7 @@ #include "eCoord.h" #include "tSafePTR.h" #include "rColor.h" +#include "tFunction.h" class zZone; //typedef boost::shared_ptr< zZone > zZonePtr; @@ -41,19 +42,15 @@ class zZoneInfluenceItemRotation : public zZoneInfluenceItem { protected: - REAL rotationBaseAngle; // The base component of the rotation speed - REAL rotationValueAngle; // This component of the speed is affected by "value" - REAL rotationBaseSpeed; - REAL rotationValueSpeed; + tFunction rotationAngle; // The base component of the rotation speed + tFunction rotationSpeed; public: zZoneInfluenceItemRotation(zZonePtr aZone); virtual ~zZoneInfluenceItemRotation() {}; - void set(REAL rotBaseAn, REAL rotValueAn, REAL rotBaseSp, REAL rotValueSp) { - rotationBaseAngle = rotBaseAn; - rotationValueAngle = rotValueAn; - rotationBaseSpeed = rotBaseSp; - rotationValueSpeed = rotValueSp; + void set(tFunction rotAngle, tFunction rotSpeed) { + rotationAngle = rotAngle; + rotationSpeed = rotSpeed; }; virtual void apply(REAL value); }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <phi...@us...> - 2007-06-10 10:09:49
|
Revision: 7296 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7296&view=rev Author: philippeqc Date: 2007-06-10 03:09:51 -0700 (Sun, 10 Jun 2007) Log Message: ----------- The dedicated server doesnt kick itself out for being of an early version. Typo corrected on constructor Modified Paths: -------------- armagetronad/trunk/armagetronad/src/tron/gParser.cpp armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp Modified: armagetronad/trunk/armagetronad/src/tron/gParser.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-06-10 09:59:23 UTC (rev 7295) +++ armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-06-10 10:09:51 UTC (rev 7296) @@ -51,7 +51,7 @@ #include "nConfig.h" #define DEFAULT_POLYGONAL_SHAPE_USED "FALSE" static tString polygonal_shape_used(DEFAULT_POLYGONAL_SHAPE_USED); -static nSettingItemWatched<tString> safetymecanism_polygonal_shapeused("POLYGONAL_SHAPE_USED",polygonal_shape_used, nConfItemVersionWatcher::Group_Breaking, 21 ); +static nSettingItemWatched<tString> safetymecanism_polygonal_shapeused("POLYGONAL_SHAPE_USED",polygonal_shape_used, nConfItemVersionWatcher::Group_Breaking, 20 ); int mapVersion = 0; // The version of the map currently being parsed. Used to adapt parsing to support version specific features Modified: armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp 2007-06-10 09:59:23 UTC (rev 7295) +++ armagetronad/trunk/armagetronad/src/tron/zone/zValidator.cpp 2007-06-10 10:09:51 UTC (rev 7296) @@ -35,7 +35,7 @@ monitorInfluences(), zoneInfluences(), positive(_positive), - marked(_marked), + marked(_marked) { } zValidator::zValidator(zValidator const &other): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <phi...@us...> - 2007-06-21 16:51:07
|
Revision: 7306 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7306&view=rev Author: philippeqc Date: 2007-06-21 09:51:02 -0700 (Thu, 21 Jun 2007) Log Message: ----------- Added an acceleration effect for the zones Modified Paths: -------------- armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h armagetronad/trunk/armagetronad/src/tron/gParser.cpp armagetronad/trunk/armagetronad/src/tron/zone/zEffector.cpp armagetronad/trunk/armagetronad/src/tron/zone/zEffector.h Modified: armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2007-06-17 19:42:08 UTC (rev 7305) +++ armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2007-06-21 16:51:02 UTC (rev 7306) @@ -2341,6 +2341,7 @@ destinationList(NULL),currentDestination(NULL),lastDestination(NULL), dirDrive(dir), acceleration(0), + totalZoneAcceleration(0), lastTimestep_(0), verletSpeed_(sg_speedCycleStart * SpeedMultiplier()), pendingTurns() @@ -2365,6 +2366,7 @@ destinationList(NULL),currentDestination(NULL),lastDestination(NULL), dirDrive(1,0), acceleration(0), + totalZoneAcceleration(0), lastTimestep_(0), verletSpeed_(5) { @@ -2828,6 +2830,8 @@ // apply wall acceleration acceleration += totalWallAcceleration; + acceleration += totalZoneAcceleration; + totalZoneAcceleration = 0.0; // This comes from external influence and should be applied only once per Timestep tASSERT( good( acceleration ) ); sg_ArchiveReal( acceleration, 9 ); @@ -3948,4 +3952,7 @@ return ret; } - +void gCycleMovement::AddZoneAcceleration( REAL zoneAcceleration ) +{ + totalZoneAcceleration += zoneAcceleration; +} Modified: armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h 2007-06-17 19:42:08 UTC (rev 7305) +++ armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h 2007-06-21 16:51:02 UTC (rev 7306) @@ -208,6 +208,7 @@ eCoord dirSpawn; //!< the direction we were facing on the last spawn eCoord lastDirDrive; //!< the direction we were facing before the last turn REAL acceleration; //!< current acceleration + REAL totalZoneAcceleration; //!< current acceleration from the effect of zones and monitor REAL lastTimestep_; //!< the length of the last timestep REAL verletSpeed_; //!< object speed according to verlet (speed of half a frame ago) @@ -261,6 +262,8 @@ inline REAL const & GetLastTurnTime( void ) const; //!< Gets the time of the last turn inline gCycleMovement const & GetLastTurnTime( REAL & lastTurnTime ) const; //!< Gets the time of the last turn REAL GetAcceleration(void) const { return acceleration; }; //!< Gets the cycle's acceleration + virtual void AddZoneAcceleration ( REAL zoneAcceleration ) ; + protected: inline gCycleMovement & SetLastTurnPos( eCoord const & lastTurnPos ); //!< Sets the location of the last turn inline gCycleMovement & SetLastTurnTime( REAL const & lastTurnTime ); //!< Sets the time of the last turn Modified: armagetronad/trunk/armagetronad/src/tron/gParser.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-06-17 19:42:08 UTC (rev 7305) +++ armagetronad/trunk/armagetronad/src/tron/gParser.cpp 2007-06-21 16:51:02 UTC (rev 7306) @@ -943,6 +943,7 @@ effectors[tString("spawnplayer")] = zEffectorSpawnPlayer::create; effectors[tString("brakerecharge")] = zEffectorCycleBrake::create; effectors[tString("rubberrecharge")] = zEffectorCycleRubber::create; + effectors[tString("acceleration")] = zEffectorCycleAcceleration::create; effectors[tString("setting")] = zEffectorSetting::create; @@ -967,6 +968,16 @@ effectorPoint->setPoint(myxmlGetPropInt(cur, "score")); } + // Should we load the acceleration + zEffectorCycleAcceleration *effectorAcceleration; + effectorAcceleration = dynamic_cast<zEffectorCycleAcceleration *>(effector.get()); + if (effectorAcceleration) { + tFunction tfValue; + string str = string(myxmlGetProp(cur, "value")); + myCheapParameterSplitter(str, tfValue, false); + effectorAcceleration->setValue(tfValue); + } + // Should we set the grid and arena for respawning zEffectorSpawnPlayer *effectorSpawnPlayer; effectorSpawnPlayer = dynamic_cast<zEffectorSpawnPlayer *>(effector.get()); @@ -1825,8 +1836,6 @@ void gParser::parseOwnership(eGrid *grid, xmlNodePtr cur, const xmlChar * keyword) { - if (sn_GetNetState() != nCLIENT ) - { // Prepare the structures to store the ownership information TeamOwnershipInfo mapIdOfTeamOwners; @@ -1876,7 +1885,6 @@ ++index; ++iterTeamOwnership; } // EOP - } } void Modified: armagetronad/trunk/armagetronad/src/tron/zone/zEffector.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zEffector.cpp 2007-06-17 19:42:08 UTC (rev 7305) +++ armagetronad/trunk/armagetronad/src/tron/zone/zEffector.cpp 2007-06-21 16:51:02 UTC (rev 7306) @@ -49,33 +49,33 @@ void zEffector::setMessage(tString unformated) {/* - tString res; - for (size_t i=0; i< unformated.Size(); i++) - { - char c = unformated(i); - if (c != '\\') - res += c; - else if (i < unformated.Size()) - { - switch (unformated(i+1)) - { - case 'n': - res += '\n'; - i++; - break; - case '1': - res += '\1'; - i++; - break; - default: - res += '\\'; - break; - } - } - } + tString res; + for (size_t i=0; i< unformated.Size(); i++) + { + char c = unformated(i); + if (c != '\\') + res += c; + else if (i < unformated.Size()) + { + switch (unformated(i+1)) + { + case 'n': + res += '\n'; + i++; + break; + case '1': + res += '\1'; + i++; + break; + default: + res += '\\'; + break; + } + } + } - message = res; - */ + message = res; + */ message << unformated; /* message.Append( unformated ); @@ -161,6 +161,21 @@ // // +void zEffectorCycleAcceleration::effect(gVectorExtra<ePlayerNetID *> &d_calculatedTargets) +{ + gVectorExtra<ePlayerNetID *>::iterator iter; + for(iter = d_calculatedTargets.begin(); + iter != d_calculatedTargets.end(); + ++iter) + { + static_cast<gCycle *>((*iter)->Object())->AddZoneAcceleration(acceleration.GetOffset()); + } +} + +// +// +// + void zEffectorSpawnPlayer::effect(gVectorExtra<ePlayerNetID *> &d_calculatedTargets) { gVectorExtra<ePlayerNetID *>::iterator iter; Modified: armagetronad/trunk/armagetronad/src/tron/zone/zEffector.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zEffector.h 2007-06-17 19:42:08 UTC (rev 7305) +++ armagetronad/trunk/armagetronad/src/tron/zone/zEffector.h 2007-06-21 16:51:02 UTC (rev 7306) @@ -36,6 +36,7 @@ #include "gCycle.h" #include "eTeam.h" #include "tLocale.h" +#include "tFunction.h" class zEffector { @@ -133,6 +134,23 @@ virtual void effect(gVectorExtra<ePlayerNetID *> &d_calculatedTargets); }; +class zEffectorCycleAcceleration : public zEffector +{ +public: + static zEffector* create() { return new zEffectorCycleAcceleration(); }; + zEffectorCycleAcceleration():zEffector(),acceleration(1.0, 1.0) { }; //<! Constructor + //zEffectorCycleAcceleration(zEffectorCycleAcceleration const &other):zEffector(other) { acceleration = other.acceleration}; + // void operator=(zEffectorCycleAcceleration const &other) { this->zEffector::operator=(other); }; //!< overloaded assignment operator + virtual zEffectorCycleAcceleration *copy(void) const { return new zEffectorCycleAcceleration(*this); }; + virtual ~zEffectorCycleAcceleration() {}; + + virtual void effect(gVectorExtra<ePlayerNetID *> &d_calculatedTargets); + + virtual void setValue(tFunction const &accel) { acceleration = accel; }; +protected: + tFunction acceleration; +}; + class gArena; class zEffectorSpawnPlayer : public zEffector This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-12-19 22:33:32
|
Revision: 7425 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7425&view=rev Author: z-man Date: 2007-12-19 14:33:36 -0800 (Wed, 19 Dec 2007) Log Message: ----------- Disabled DGA mouse hack (suggested by CrimsonKing) Modified Paths: -------------- armagetronad/trunk/armagetronad/src/tron/gArmagetron.cpp Property Changed: ---------------- / Property changes on: ___________________________________________________________________ Name: svk:merge - 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10252 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10264 Modified: armagetronad/trunk/armagetronad/src/tron/gArmagetron.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gArmagetron.cpp 2007-12-17 12:27:02 UTC (rev 7424) +++ armagetronad/trunk/armagetronad/src/tron/gArmagetron.cpp 2007-12-19 22:33:36 UTC (rev 7425) @@ -539,6 +539,58 @@ tRecorder::Record( dedicatedSection, dedicatedServer ); } + + // while DGA mouse is buggy in XFree 4.0: +#ifdef linux + // Sam 5/23 - Don't ever use DGA, we don't need it for this game. + // no longer needed, the bug this compensated was fixed a long time + // ago. + /* + if ( ! getenv("SDL_VIDEO_X11_DGAMOUSE") ) { + putenv("SDL_VIDEO_X11_DGAMOUSE=0"); + } + */ +#endif + +#ifdef WIN32 + // disable DirectX by default; it causes problems with some boards. + if (!use_directx && !getenv("SDL_VIDEODRIVER") ) { + putenv("SDL_VIDEODRIVER=windib"); + } +#endif + + // atexit(ANET_Shutdown); + +#ifndef WIN32 +#ifdef DEBUG +#define NOSOUND +#endif +#endif + +#ifndef DEDICATED + Uint32 flags = SDL_INIT_VIDEO; +#ifdef DEBUG + flags |= SDL_INIT_NOPARACHUTE; +#endif // DEBUG + if (SDL_Init(flags) < 0) { + tERR_ERROR("Couldn't initialize SDL: " << SDL_GetError()); + } + atexit(SDL_Quit); + su_KeyInit(); + +#ifndef NOJOYSTICK + if (SDL_InitSubSystem(SDL_INIT_JOYSTICK)) + std::cout << "Error initializing joystick subsystem\n"; + else + { +#ifdef DEBUG + std::cout << "Joystick(s) initialized\n"; +#endif // DEBUG + su_JoystickInit(); + } +#endif // NOJOYSTICK +#endif // DEDICATED + // tERR_MESSAGE( "Initializing player data." ); ePlayer::Init(); @@ -617,59 +669,12 @@ } } - #ifndef DEDICATED +#ifndef DEDICATED sr_glOut=1; - #endif - //std::cout << "checked mp\n"; - // while DGA mouse is buggy in XFree 4.0: - #ifdef linux - // Sam 5/23 - Don't ever use DGA, we don't need it for this game. - if ( ! getenv("SDL_VIDEO_X11_DGAMOUSE") ) { - putenv("SDL_VIDEO_X11_DGAMOUSE=0"); - } - #endif - - #ifdef WIN32 - // disable DirectX by default; it causes problems with some boards. - if (!use_directx && !getenv("SDL_VIDEODRIVER") ) { - putenv("SDL_VIDEODRIVER=windib"); - } - #endif - - // atexit(ANET_Shutdown); - - #ifndef WIN32 - #ifdef DEBUG - #define NOSOUND - #endif - #endif - - #ifndef DEDICATED - Uint32 flags = SDL_INIT_VIDEO; -#ifdef DEBUG - flags |= SDL_INIT_NOPARACHUTE; -#endif - if (SDL_Init(flags) < 0) { - tERR_ERROR("Couldn't initialize SDL: " << SDL_GetError()); - } - atexit(SDL_Quit); - sr_glRendererInit(); - #ifndef NOJOYSTICK - if (SDL_InitSubSystem(SDL_INIT_JOYSTICK)) - std::cout << "Error initializing joystick subsystem\n"; - else - { -#ifdef DEBUG - std::cout << "Joystick(s) initialized\n"; -#endif - su_JoystickInit(); - } - #endif - SDL_SetEventFilter(&filter); //std::cout << "set filter\n"; @@ -758,7 +763,7 @@ eSoundMixer::ShutDown(); SDL_Quit(); - #else +#else // DEDICATED if (!commandLineAnalyzer.daemon_) sr_Unblock_stdin(); @@ -768,7 +773,7 @@ while (!uMenu::quickexit) sg_HostGame(); - #endif +#endif // DEDICATED nNetObject::ClearAll(); nServerInfo::DeleteAll(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-02-05 15:31:00
|
Revision: 7740 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7740&view=rev Author: z-man Date: 2008-02-05 07:31:02 -0800 (Tue, 05 Feb 2008) Log Message: ----------- Using tFunction from tools now. Modified Paths: -------------- armagetronad/trunk/armagetronad/src/tron/gWinZone.cpp armagetronad/trunk/armagetronad/src/tron/gWinZone.h Modified: armagetronad/trunk/armagetronad/src/tron/gWinZone.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gWinZone.cpp 2008-02-05 15:12:29 UTC (rev 7739) +++ armagetronad/trunk/armagetronad/src/tron/gWinZone.cpp 2008-02-05 15:31:02 UTC (rev 7740) @@ -1181,103 +1181,6 @@ // ******************************************************************************* // * -// * tFunction -// * -// ******************************************************************************* -//! -//! -// ******************************************************************************* - -tFunction::tFunction( void ) - : offset_(0), slope_(0) -{ -} - -// ******************************************************************************* -// * -// * ~tFunction -// * -// ******************************************************************************* -//! -//! -// ******************************************************************************* - -tFunction::~tFunction( void ) -{ -} - -// ******************************************************************************* -// * -// * Evaluate -// * -// ******************************************************************************* -//! -//! @param argument -//! @return -//! -// ******************************************************************************* - -REAL tFunction::Evaluate( REAL argument ) const -{ - return offset_ + slope_ * argument; -} - -// ******************************************************************************* -// * -// * operator << -// * -// ******************************************************************************* -//! -//! @param m message to write to -//! @param f function to write -//! @return reference to message for chaining -//! -// ******************************************************************************* - -nMessage & operator << ( nMessage & m, tFunction const & f ) -{ - // write ID for compatibility with future extensions - unsigned short ID = 1; - m.Write( ID ); - - // write values - m << f.GetOffset(); - m << f.GetSlope(); - - return m; -} - -// ******************************************************************************* -// * -// * operator >> -// * -// ******************************************************************************* -//! -//! @param m message to read from -//! @param f function to read to -//! @return reference to message for chaining -//! -// ******************************************************************************* - -nMessage & operator >> ( nMessage & m, tFunction & f ) -{ - // write ID for compatibility with future extensions - unsigned short ID; - m.Read(ID); - tASSERT( ID == 1 ); - - // read values - REAL slope, offset; - m >> offset >> slope; - - // store values - f.SetOffset( offset ).SetSlope( slope ); - - return m; -} - -// ******************************************************************************* -// * // * GetPosition // * // ******************************************************************************* Modified: armagetronad/trunk/armagetronad/src/tron/gWinZone.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gWinZone.h 2008-02-05 15:12:29 UTC (rev 7739) +++ armagetronad/trunk/armagetronad/src/tron/gWinZone.h 2008-02-05 15:31:02 UTC (rev 7740) @@ -34,38 +34,10 @@ #include "gCycle.h" #include "rColor.h" +#include "tFunction.h" - class eTeam; -//! mathematical function (to be moved into tools sometime, and currently limited to linear functions) -class tFunction -{ -public: - tFunction(); //!< constructor - ~tFunction(); //!< destructor - - REAL Evaluate( REAL argument ) const; //!< evaluates the function - inline REAL operator()( REAL argument ) const; //!< evaluation operator - - // function parameters: currently limited to offset_ + slope_ * argument - REAL offset_; //!< offset value - REAL slope_; //!< function slope - -public: - inline tFunction & SetOffset( REAL const & offset ); //!< Sets offset value - inline REAL const & GetOffset( void ) const; //!< Gets offset value - inline tFunction const & GetOffset( REAL & offset ) const; //!< Gets offset value - inline tFunction & SetSlope( REAL const & slope ); //!< Sets function slope - inline REAL const & GetSlope( void ) const; //!< Gets function slope - inline tFunction const & GetSlope( REAL & slope ) const; //!< Gets function slope -protected: -private: -}; - -nMessage & operator << ( nMessage & m, tFunction const & f ); //! function network message writing operator -nMessage & operator >> ( nMessage & m, tFunction & f ); //! function network message reading operator - //! basic zone class: handles rendering and entwork syncing class gZone: public eNetGameObject { @@ -203,117 +175,4 @@ //! creates a win or death zone (according to configuration) at the specified position gZone * sg_CreateWinDeathZone( eGrid * grid, const eCoord & pos ); -// ******************************************************************************* -// * -// * operator ( ) -// * -// ******************************************************************************* -//! -//! @return the function value -//! -// ******************************************************************************* - -REAL tFunction::operator ( )( REAL argument ) const -{ - return Evaluate( argument ); -} - -// ******************************************************************************* -// * -// * GetOffset -// * -// ******************************************************************************* -//! -//! @return offset value -//! -// ******************************************************************************* - -REAL const & tFunction::GetOffset( void ) const -{ - return this->offset_; -} - -// ******************************************************************************* -// * -// * GetOffset -// * -// ******************************************************************************* -//! -//! @param offset offset value to fill -//! @return A reference to this to allow chaining -//! -// ******************************************************************************* - -tFunction const & tFunction::GetOffset( REAL & offset ) const -{ - offset = this->offset_; - return *this; -} - -// ******************************************************************************* -// * -// * SetOffset -// * -// ******************************************************************************* -//! -//! @param offset offset value to set -//! @return A reference to this to allow chaining -//! -// ******************************************************************************* - -tFunction & tFunction::SetOffset( REAL const & offset ) -{ - this->offset_ = offset; - return *this; -} - -// ******************************************************************************* -// * -// * GetSlope -// * -// ******************************************************************************* -//! -//! @return function slope -//! -// ******************************************************************************* - -REAL const & tFunction::GetSlope( void ) const -{ - return this->slope_; -} - -// ******************************************************************************* -// * -// * GetSlope -// * -// ******************************************************************************* -//! -//! @param slope function slope to fill -//! @return A reference to this to allow chaining -//! -// ******************************************************************************* - -tFunction const & tFunction::GetSlope( REAL & slope ) const -{ - slope = this->slope_; - return *this; -} - -// ******************************************************************************* -// * -// * SetSlope -// * -// ******************************************************************************* -//! -//! @param slope function slope to set -//! @return A reference to this to allow chaining -//! -// ******************************************************************************* - -tFunction & tFunction::SetSlope( REAL const & slope ) -{ - this->slope_ = slope; - return *this; -} - #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |