You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
(4) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
(20) |
Feb
(11) |
Mar
(6) |
Apr
(5) |
May
(4) |
Jun
(7) |
Jul
(9) |
Aug
(11) |
Sep
|
Oct
(4) |
Nov
(13) |
Dec
(21) |
2010 |
Jan
(23) |
Feb
(32) |
Mar
(6) |
Apr
(2) |
May
(10) |
Jun
(15) |
Jul
(1) |
Aug
(1) |
Sep
(3) |
Oct
|
Nov
(1) |
Dec
(16) |
2011 |
Jan
(1) |
Feb
(5) |
Mar
(19) |
Apr
(13) |
May
(4) |
Jun
(2) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2012 |
Jan
(4) |
Feb
(8) |
Mar
(2) |
Apr
(6) |
May
(13) |
Jun
(1) |
Jul
|
Aug
|
Sep
(5) |
Oct
|
Nov
(4) |
Dec
|
2013 |
Jan
(1) |
Feb
(2) |
Mar
(15) |
Apr
(2) |
May
(4) |
Jun
(17) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
(6) |
Jun
(6) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2015 |
Jan
|
Feb
(2) |
Mar
(1) |
Apr
(1) |
May
(6) |
Jun
(1) |
Jul
(2) |
Aug
|
Sep
(7) |
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(4) |
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
(4) |
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <he...@us...> - 2017-07-11 20:56:17
|
Revision: 416 http://sourceforge.net/p/simspark/svn/416 Author: hedayat Date: 2017-07-11 20:56:15 +0000 (Tue, 11 Jul 2017) Log Message: ----------- Prepare rcssserver3d 0.7.0 release Modified Paths: -------------- trunk/rcssserver3d/CMakeLists.txt trunk/rcssserver3d/NEWS trunk/rcssserver3d/RELEASE Modified: trunk/rcssserver3d/CMakeLists.txt =================================================================== --- trunk/rcssserver3d/CMakeLists.txt 2017-07-08 15:42:38 UTC (rev 415) +++ trunk/rcssserver3d/CMakeLists.txt 2017-07-11 20:56:15 UTC (rev 416) @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 2.6) project(rcssserver3d CXX C) -set(PACKAGE_VERSION "0.7.0") +set(PACKAGE_VERSION "0.7.1") option(RVDRAW "Enable roboviz drawings" OFF) if (RVDRAW) Modified: trunk/rcssserver3d/NEWS =================================================================== --- trunk/rcssserver3d/NEWS 2017-07-08 15:42:38 UTC (rev 415) +++ trunk/rcssserver3d/NEWS 2017-07-11 20:56:15 UTC (rev 416) @@ -1,3 +1,47 @@ +[0.7.1] +New changes for the RoboCup 2017 competition: + +* Bug Fixes: + - Fixed bug where double touches on kicks (kickoffs, free kicks, + kick-ins, corner kicks) were not always being detected correctly + - Fixed bug where if a player is touching the ball right when the wait + time at the beginning of a kick play mode ends the play mode could end up + recording the touch and inadvertently end the kick. + - Fixed bug where if two players enter their own penalty area at the + same time, and in doing so cause the maximum allowed number of players in + the penalty area to be exceeded, both players will be called for illegal + defense even if the team is only one player over the allowed number of + players in the penalty area. + - Fixed issue where free kicks and kicks-in printed an error message + and didn't behave correctly if the ball has yet to be touched by an agent. + +* Rule Changes: + - The automated referee will no longer move/reposition agents on top + of each other or into their own penalty area if it will trigger an illegal + defense penalty. This is accomplished by doing a breadth first search + around the position that an agent is to be repositioned to until a safe + position is found. The number of positions that will be considered by + the breadth first search is bounded by the MaxNumSafeRepositionAttempts + value (default 100) in naosocersim.rb. Setting this value to 0 turns this + feature off. If ever the server isn't able to safely reposition a player + it will print an error message. + - The order in which players are evaluated for fouls and are penalized + is now randomized so as to not have any bias associated with players' + teams and uniform numbers. + - Averaging the velocity of an agent over the last 3 time steps + instead of 5 when determining charging fouls. This allows agents to + reduce their effective velocities faster so as to have a better chance of + avoiding charging fouls when colliding with an opponent. + - Removing code that takes into account the opponent's velocity moving + away from a colliding agent when determining fouls. This code was + decreasing the likelihood of an agent being called for a foul when running + down an opponent from behind. + - Turning off crowding rules in naosoccersim.rb + - Adding StartAnyFieldPosition flag (default false) to + naosoccersim.rb. Turning this flag on allows agents to be at, beam, or be + moved to any position on the field at the start of kickoffs including the + opponent's side of the field. + [0.7.0] A new GUI application is developed to run and control simspark simulations. Additinoally, there are a number changes to the soccer rules enforced in Modified: trunk/rcssserver3d/RELEASE =================================================================== --- trunk/rcssserver3d/RELEASE 2017-07-08 15:42:38 UTC (rev 415) +++ trunk/rcssserver3d/RELEASE 2017-07-11 20:56:15 UTC (rev 416) @@ -1,125 +1,48 @@ -RELEASE News of rcssserver3d-0.7.0 +RELEASE News of rcssserver3d-0.7.1 -A new GUI application is developed to run and control simspark simulations. -Additinoally, there are a number changes to the soccer rules enforced in -the simulator. More details about changes in this release follows: +New changes for the RoboCup 2017 competition: -* Updates to charging foul model and other fouls: -An initial implementation of the charging foul model is documented at -http://www.acso.uneb.br/bahiart/uploads/Main/FoulModel2016.pdf. The -following are some updates to the charging foul model which will hopefully -be added to the documentation of the charging foul model soon: +* Bug Fixes: + - Fixed bug where double touches on kicks (kickoffs, free kicks, + kick-ins, corner kicks) were not always being detected correctly + - Fixed bug where if a player is touching the ball right when the wait + time at the beginning of a kick play mode ends the play mode could end up + recording the touch and inadvertently end the kick. + - Fixed bug where if two players enter their own penalty area at the + same time, and in doing so cause the maximum allowed number of players in + the penalty area to be exceeded, both players will be called for illegal + defense even if the team is only one player over the allowed number of + players in the penalty area. + - Fixed issue where free kicks and kicks-in printed an error message + and didn't behave correctly if the ball has yet to be touched by an agent. - - Rules for charging involving agents' relative positions to the ball - are only active for agents within 1 meter (ChargingMaxBallRulesDist) of - the ball - - Players are immune to committing a charging foul after touching the - ball for 1 second (ChargingImmunityTime) - - There is no maximum distance from the ball that a charging foul will - be called -- charging fouls can be called at any position on or off the - field - - After a player is moved/beamed by the server no charging fouls in any - collision involving that agent will be called for 1 second after the - player is moved. - - There is no longer a concept of ChargingMinCollisionPoint. Instead a - threshold of velocity exerted in a collision (ChargingMinCollisionSpeed - with a default value of 0.2) must be exceeded for a charging foul to be - called. This value is calculated as a cross product between an agent's - velocity vector and the normalized vector from the agent to the average of - the opponent agent and collision point. +* Rule Changes: + - The automated referee will no longer move/reposition agents on top + of each other or into their own penalty area if it will trigger an illegal + defense penalty. This is accomplished by doing a breadth first search + around the position that an agent is to be repositioned to until a safe + position is found. The number of positions that will be considered by + the breadth first search is bounded by the MaxNumSafeRepositionAttempts + value (default 100) in naosocersim.rb. Setting this value to 0 turns this + feature off. If ever the server isn't able to safely reposition a player + it will print an error message. + - The order in which players are evaluated for fouls and are penalized + is now randomized so as to not have any bias associated with players' + teams and uniform numbers. + - Averaging the velocity of an agent over the last 3 time steps + instead of 5 when determining charging fouls. This allows agents to + reduce their effective velocities faster so as to have a better chance of + avoiding charging fouls when colliding with an opponent. + - Removing code that takes into account the opponent's velocity moving + away from a colliding agent when determining fouls. This code was + decreasing the likelihood of an agent being called for a foul when running + down an opponent from behind. + - Turning off crowding rules in naosoccersim.rb + - Adding StartAnyFieldPosition flag (default false) to + naosoccersim.rb. Turning this flag on allows agents to be at, beam, or be + moved to any position on the field at the start of kickoffs including the + opponent's side of the field. -General foul changes: - - For visualization purposes after any foul (charging, crowding, illegal - defense, touching, incapable) agents are lifted up in the air for - FoulHoldTime (default 0.5 seconds) before being beamed to the sideline. - - Touching fouls in groups of three or more are no longer called on - goalies (a goalie's teammate will be called for a touching foul instead). - - -* New kick rules: - -The following is a summary of the rule changes for kicking: - - A player taking a kick can't touch the ball more than once before - another player touches the ball -- touching the ball more than once - results in an indirect free kick for the opponent (same as in human - soccer). Note that a goal kick doesn't count as having been taken until - the ball leaves the penalty area - - You can never score an own goal directly off your own kick -- the - result of such an own goal is a corner kick for the opponent (same as in - human soccer). - - Kick-ins are indirect (same as throw-ins in human soccer). - - Goal kicks and corner kicks are direct (same as in human soccer). - - Scoring a goal directly from an indirect kick results in a goal kick - for the opponent (same as in human soccer). - - Kickoffs are still indirect and the ball must be touched outside the - center circle, or an opponent must first touch the ball, before the team - taking a kickoff can score (in human soccer kickoffs are direct, but this - artificial rule is needed to prevent "kickoff taking contests"). - - Players within KickRepelDist (defined in naosoccersim.rb) of the ball - when it is placed for a kick are moved back to a position exactly - KickRepelDist from the ball to prevent players from accidentally touching - the ball and losing a kick if the ball is placed right underneath their - current position on the field. - - Two new direct kick playmodes have been added - (direct_free_kick_[left|right]). While there is no plan to use these - playmodes at this year's competition, shift+L and shift+R key bindings for - them have been added to rcssmonitor3d and roboviz. - - -* Keepaway mode: - -The keepaway playmode sets the playmode to GameOver if a player on the -right team touches the ball or if the ball leaves a predefined keepaway -area. During keepaway no charging fouls will be called on agents on the -right team (the team trying to take the ball). - -The keepaway mode adds the following parameters to naosoccersim.rb: - -// if in keepaway mode -Keepaway -// center X value of keepaway box -KeepawayCenterX -// center Y value of keepaway box -KeepawayCenterY -// length of keepaway box -KeepawayLength -// width of keepaway box -KeepawayWidth -// reduction rate of length of keepaway box per minute -KeepawayLengthReductionRate -// reduction rate of width of keepaway box per minute -KeepawayWidthReductionRate - - -* Blocking of say messages with illegal characters: - -While most agents have been sending legal say messages, there have been a -few instances of agents sending say messages with illegal characters. The -server now throws out say messages containing illegal characters (space, -parenthesis, and those outside the range [0x20-0x7E]). The server also -prints an error message containing the illegal say message and the agent -who said it. When running in sync mode the proxy still needs to be used -to protect against bad say messages that break parsing (or really any -unparseable messages sent to the server) -- this change only throws out -say messages with illegal that were able to be parsed. - - -* Plugin for drawing objects in roboviz: - -You can activate a new plugin (rvdraw) within rcssserver3d allowing it to -draw objects in roboviz by using the "-DRVDRAW=ON" command line argument -when running cmake before building rcssserver3d. The plugin likely only -works in linux which is why it isn't enabled by default. Currently this -plugin is set to draw debugging information for the charging foul model, -but one might find it useful to add their own code to the server to draw -things in roboviz. - -After rcssserver3d is compiled with the rvdraw plugin enabled use the -following command line argument when running the server to have it send -draw commands to roboviz: -rcssserver3d --rvdraw-host <roboviz_host_machine> - - You can get the package on the Simspark page on SourceForge at http://sourceforge.net/projects/simspark/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pat...@us...> - 2017-07-08 15:42:41
|
Revision: 415 http://sourceforge.net/p/simspark/svn/415 Author: patmac369 Date: 2017-07-08 15:42:38 +0000 (Sat, 08 Jul 2017) Log Message: ----------- Adding changes for the RoboCup 2017 competition. Additions are the following: - Fixed bug where double touches on kicks (kickoffs, free kicks, kick-ins, corner kicks) were not always being detected correctly - Fixed bug where if a player is touching the ball right when the wait time at the beginning of a kick play mode ends the play mode could end up recording the touch and inadvertently end the kick. - Fixed bug where if two players enter their own penalty area at the same time, and in doing so cause the maximum allowed number of players in the penalty area to be exceeded, both players will be called for illegal defense even if the team is only one player over the allowed number of players in the penalty area. - The automated referee will no longer move/reposition agents on top of each other or into their own penalty area if it will trigger an illegal defense penalty. This is accomplished by doing a breadth first search around the position that an agent is to be repositioned to until a safe position is found. The number of positions that will be considered by the breadth first search is bounded by the MaxNumSafeRepositionAttempts value (default 100) in naosocersim.rb. Setting this value to 0 turns this feature off. If ever the server isn't able to safely reposition a player it will print an error message. - The order in which players are evaluated for fouls and are penalized is now randomized so as to not have any bias associated with players' teams and uniform numbers. - Fixed issue where free kicks and kicks-in printed an error message and didn't behave correctly if the ball has yet to be touched by an agent. - Averaging the velocity of an agent over the last 3 time steps instead of 5 when determining charging fouls. This allows agents to reduce their effective velocities faster so as to have a better chance of avoiding charging fouls when colliding with an opponent. - Removing code that takes into account the opponent's velocity moving away from a colliding agent when determining fouls. This code was decreasing the likelihood of an agent being called for a foul when running down an opponent from behind. - Turning off crowding rules in naosoccersim.rb - Adding StartAnyFieldPosition flag (default false) to naosoccersim.rb. Turning this flag on allows agents to be at, beam, or be moved to any position on the field at the start of kickoffs including the opponent's side of the field. Modified Paths: -------------- trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.cpp trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.h trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.h trunk/rcssserver3d/rcssserver3d/naosoccersim.rb Modified: trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.cpp =================================================================== --- trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.cpp 2017-03-24 21:15:15 UTC (rev 414) +++ trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.cpp 2017-07-08 15:42:38 UTC (rev 415) @@ -94,16 +94,19 @@ return; } - // an agent can only beam within it's own field half - float minX = -mFieldLength/2; - pos[0] = std::max<float>(pos[0],minX); - pos[0] = std::min<float>(pos[0],0.0f); + if (!mStartAnyFieldPosition) + { + // an agent can only beam within it's own field half + float minX = -mFieldLength/2; + pos[0] = std::max<float>(pos[0],minX); + pos[0] = std::min<float>(pos[0],0.0f); + + float minY = -mFieldWidth/2; + float maxY = mFieldWidth/2; + pos[1] = std::max<float>(minY,pos[1]); + pos[1] = std::min<float>(maxY,pos[1]); + } - float minY = -mFieldWidth/2; - float maxY = mFieldWidth/2; - pos[1] = std::max<float>(minY,pos[1]); - pos[1] = std::min<float>(maxY,pos[1]); - // fix z coordinate pos[2] = mAgentRadius; @@ -190,6 +193,9 @@ mBeamNoiseAngle = 10.0f; SoccerBase::GetSoccerVar(*this, "BeamNoiseAngle",mBeamNoiseAngle); + mStartAnyFieldPosition = false; + SoccerBase::GetSoccerVar(*this,"StartAnyFieldPosition",mStartAnyFieldPosition); + UniformRngPtr rng1(new salt::UniformRNG<>(-1,1)); mNoiseRng = rng1; } Modified: trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.h =================================================================== --- trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.h 2017-03-24 21:15:15 UTC (rev 414) +++ trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.h 2017-07-08 15:42:38 UTC (rev 415) @@ -80,6 +80,10 @@ /** amount of noise added to beam angle value */ float mBeamNoiseAngle; + + /** Allow starting at any field position including on opponent's + side of the field */ + bool mStartAnyFieldPosition; }; DECLARE_CLASS(BeamEffector); Modified: trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp =================================================================== --- trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp 2017-03-24 21:15:15 UTC (rev 414) +++ trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp 2017-07-08 15:42:38 UTC (rev 415) @@ -98,7 +98,9 @@ mKeepawayLength(20.0), mKeepawayWidth(20.0), mKeepawayLengthReductionRate(4.0), - mKeepawayWidthReductionRate(4.0) + mKeepawayWidthReductionRate(4.0), + mMaxNumSafeRepositionAttempts(100), + mStartAnyFieldPosition(false) { mFreeKickPos = Vector3f(0.0,0.0,mBallRadius); ResetFoulCounter(TI_LEFT); @@ -188,7 +190,7 @@ mGameState->SetPlayMode(PM_GameOver); } } - } + } if (mPenaltyShootout && mGameState->GetPlayMode() == PM_Goal_Left) { // Cancel penalty shootout mode now that a goal has been scored @@ -213,8 +215,13 @@ AnalyseTouchGroups(TI_LEFT); // Analyzes whether too many players are touching for the left team AnalyseTouchGroups(TI_RIGHT); // Analyzes whether too many players are touching for the right team - ClearPlayersAutomatic(TI_LEFT); // enforce standing and not overcrowding rules for left team - ClearPlayersAutomatic(TI_RIGHT); // enforce standing and not overcrowding rules for right team + if (rand()%2 == 0) { + ClearPlayersAutomatic(TI_LEFT); // enforce standing and not overcrowding rules for left team + ClearPlayersAutomatic(TI_RIGHT); // enforce standing and not overcrowding rules for right team + } else { + ClearPlayersAutomatic(TI_RIGHT); // enforce standing and not overcrowding rules for right team + ClearPlayersAutomatic(TI_LEFT); // enforce standing and not overcrowding rules for left team + } // Reset touch groups ResetTouchGroups(TI_LEFT); @@ -384,6 +391,7 @@ SoccerBase::TAgentStateList::const_iterator i; numPlInsideOwnArea[idx] = 0; + numPlReposInsideOwnArea[idx] = 0; closestPlayer[idx] = 1; closestPlayerDist[idx] = 1000.0; for(int t = 1; t <= 11; t++) @@ -605,17 +613,11 @@ for (int i = 0; i <= 1; i++) { - // Take into account the opponent's velocity vector when determining - // collision speed and subtract half the opponent's speed moving - // away from the the collision point as that speed reduces the - // collision force. - agentCollisionSpeed[i] = (agentAvgVel[i].x()*agentToCollisionVec[i].x() + agentAvgVel[i].y()*agentToCollisionVec[i].y()) + - 0.5*min(0.0f, agentAvgVel[1-i].x()*agentToCollisionVec[1-i].x() + agentAvgVel[1-i].y()*agentToCollisionVec[1-i].y()); - + // Get collision speed + agentCollisionSpeed[i] = agentAvgVel[i].x()*agentToCollisionVec[i].x() + agentAvgVel[i].y()*agentToCollisionVec[i].y(); isCharging[i] = (isCharging[i] && s[i] >= mChargingMinSpeed - && agentCollisionSpeed[i] >= mMinCollisionSpeed); - + && agentCollisionSpeed[i] >= mMinCollisionSpeed); } #ifdef RVDRAW @@ -814,9 +816,16 @@ void SoccerRuleAspect::AnalyseFouls(TTeamIndex idx) { TTeamIndex idx2 = SoccerBase::OpponentTeam(idx); // //Other team + + // Randomize order of agents evaluated + std::vector<unsigned int> unums(11); + for (unsigned int i = 0; i < unums.size(); i++) {unums[i] = i+1;} + std::random_shuffle(unums.begin(), unums.end()); - for(unsigned int unum=1; unum<=11; unum++) + for(std::vector<unsigned int>::const_iterator it = unums.begin(); it != unums.end(); ++it) { + unsigned int unum = *it; + if (HaveEnforceableFoul(unum,idx)) { // Once a player has been called for a foul don't check for @@ -853,6 +862,7 @@ { playerFoulTime[unum][idx]++; playerLastFoul[unum][idx] = FT_IllegalDefence; + numPlInsideOwnArea[idx]--; } // I am a field player and on the ground for too much time else if (unum != 1 && playerGround[unum][idx] > mGroundMaxTime / 0.02) @@ -901,6 +911,327 @@ } +bool SoccerRuleAspect::GetSafeRepositionHelper_AdjustPositionForPenaltyArea(const salt::Vector2f agent_pos, int unum, TTeamIndex idx, salt::Vector2f ¤t_pos) +{ + // Check that we're not being moved into our penalty area when there + // are already the maximum number of teammates allowed in the penalty + // area + if (playerInsideOwnArea[unum][idx] == 0 && numPlInsideOwnArea[idx]+numPlReposInsideOwnArea[idx] >= mMaxPlayersInsideOwnArea) { + if ((idx == TI_LEFT + && current_pos.x() > mLeftPenaltyArea.minVec[0]-mAgentRadius + && current_pos.x() < mLeftPenaltyArea.maxVec[0]+mAgentRadius + && current_pos.y() > mLeftPenaltyArea.minVec[1]-mAgentRadius + && current_pos.y() < mLeftPenaltyArea.maxVec[1]+mAgentRadius) + || (idx == TI_RIGHT + && current_pos.x() > mRightPenaltyArea.minVec[0]-mAgentRadius + && current_pos.x() < mRightPenaltyArea.maxVec[0]+mAgentRadius + && current_pos.y() > mRightPenaltyArea.minVec[1]-mAgentRadius + && current_pos.y() < mRightPenaltyArea.maxVec[1]+mAgentRadius)) { + /* +#ifdef RVDRAW + if (mRVSender) { + //mRVSender->clearStaticDrawings(); + mRVSender->drawPoint(current_pos.x(), current_pos.y(), 10, RVSender::YELLOW); + } +#endif + */ + if (idx == TI_LEFT) { + if (current_pos.x() > agent_pos.x()) { + // Move beyond the top of the penalty area + current_pos[0] = mLeftPenaltyArea.maxVec[0]+mAgentRadius; + } else { + // Move to a side of the penalty area + if (current_pos.y() > agent_pos.y() || (current_pos.y() == agent_pos.y() && current_pos.y() < 0)) { + current_pos[1] = mLeftPenaltyArea.maxVec[1]+mAgentRadius; + } else { + current_pos[1] = mLeftPenaltyArea.minVec[1]-mAgentRadius; + } + } + } else { + if (current_pos.x() < agent_pos.x()) { + // Move beyond the top of the penalty area + current_pos[0] = mRightPenaltyArea.minVec[0]-mAgentRadius; + } else { + // Move to a side of the penalty area + if (current_pos.y() > agent_pos.y() || (current_pos.y() == agent_pos.y() && current_pos.y() < 0)) { + current_pos[1] = mRightPenaltyArea.maxVec[1]+mAgentRadius; + } else { + current_pos[1] = mRightPenaltyArea.minVec[1]-mAgentRadius; + } + } + } + return true; + } + } + return false; +} + +void SoccerRuleAspect::GetSafeRepositionHelper_SamplePositions(const salt::Vector2f agent_pos, int unum, TTeamIndex idx, salt::Vector2f current_pos, std::list<salt::Vector2f> &candidatePosList) +{ + std::list<salt::Vector2f> newPosList; + salt::Vector2f agent_pos_xmove = current_pos; + if (idx == TI_LEFT) { + agent_pos_xmove[0] = current_pos.x() + mAgentRadius * (agent_pos.x() < current_pos.x() ? 1 : -1); + } else { + agent_pos_xmove[0] = current_pos.x() + mAgentRadius * (agent_pos.x() > current_pos.x() ? -1 : 1); + } + if (abs(agent_pos_xmove.x()) <= mFieldLength/2.0) { + GetSafeRepositionHelper_AdjustPositionForPenaltyArea(agent_pos, unum, idx, agent_pos_xmove); + newPosList.push_back(agent_pos_xmove); + } + + if (current_pos.x() == agent_pos.x()) { + // Also add x position moving in other direction + salt::Vector2f agent_pos_xmove2 = current_pos; + if (idx == TI_LEFT) { + agent_pos_xmove2[0] = current_pos.x() + mAgentRadius; + } else { + agent_pos_xmove2[0] = current_pos.x() - mAgentRadius; + } + if (abs(agent_pos_xmove2.x()) <= mFieldLength/2.0) { + GetSafeRepositionHelper_AdjustPositionForPenaltyArea(agent_pos, unum, idx, agent_pos_xmove2); + newPosList.push_back(agent_pos_xmove2); + } + } + + salt::Vector2f agent_pos_ymove = current_pos; + if (current_pos.y() == agent_pos.y()) { + // Move towards the center of the field + agent_pos_ymove[1] = current_pos.y() + mAgentRadius * (agent_pos.y() < 0 ? 1 : -1); + GetSafeRepositionHelper_AdjustPositionForPenaltyArea(agent_pos, unum, idx, agent_pos_ymove); + newPosList.push_back(agent_pos_ymove); + + // Move away from the center of the field + salt::Vector2f agent_pos_ymove2 = current_pos; + agent_pos_ymove2[1] = current_pos.y() + mAgentRadius * (agent_pos.y() < 0 ? -1 : 1); + GetSafeRepositionHelper_AdjustPositionForPenaltyArea(agent_pos, unum, idx, agent_pos_ymove2); + newPosList.push_back(agent_pos_ymove2); + } else { + agent_pos_ymove[1] = current_pos.y() + mAgentRadius * (agent_pos.y() < current_pos.y() ? 1 : -1); + GetSafeRepositionHelper_AdjustPositionForPenaltyArea(agent_pos, unum, idx, agent_pos_ymove); + newPosList.push_back(agent_pos_ymove); + } + + std::list<salt::Vector2f>::const_iterator i; + for (i = newPosList.begin(); i != newPosList.end(); ++i) { + salt::Vector2f newPos = *i; + float newPosDistToAgent = sqrt((newPos.x()-agent_pos.x())*(newPos.x()-agent_pos.x()) + + (newPos.y()-agent_pos.y())*(newPos.y()-agent_pos.y())); + bool fAddPos = true; + std::list<salt::Vector2f>::reverse_iterator c; + for (c = candidatePosList.rbegin(); c != candidatePosList.rend(); ++c) { + salt::Vector2f candidatePos = *c; + float candidatePosDistToNewPos = sqrt((candidatePos.x()-newPos.x())*(candidatePos.x()-newPos.x()) + + (candidatePos.y()-newPos.y())*(candidatePos.y()-newPos.y())); + if (candidatePosDistToNewPos < mAgentRadius/2.0) { + fAddPos = false; + break; + } + + float candidatePosDistToAgent = sqrt((candidatePos.x()-agent_pos.x())*(candidatePos.x()-agent_pos.x()) + + (candidatePos.y()-agent_pos.y())*(candidatePos.y()-agent_pos.y())); + if (newPosDistToAgent >= candidatePosDistToAgent) { + break; + } + } + if (fAddPos) { + /* +#ifdef RVDRAW + if (mRVSender) { + //mRVSender->clearStaticDrawings(); + mRVSender->drawPoint(newPos.x(), newPos.y(), 10, RVSender::LIGHTBLUE); + } +#endif + */ + candidatePosList.insert(c.base(), newPos); + } + + /* + std::list<salt::Vector2f>::const_iterator d; + std::cout << "-----------------\n"; + for (d = candidatePosList.begin(); d != candidatePosList.end(); ++d) { + salt::Vector2f candidatePos = *d; + float candidatePosDistToAgent = sqrt((candidatePos.x()-agent_pos.x())*(candidatePos.x()-agent_pos.x()) + + (candidatePos.y()-agent_pos.y())*(candidatePos.y()-agent_pos.y())); + std::cout << candidatePosDistToAgent << "\n"; + } + std::cout << "-----------------\n"; + */ + } +} + +salt::Vector3f SoccerRuleAspect::GetSafeReposition(salt::Vector3f posIni, int unum, TTeamIndex idx) +{ + salt::Vector3f pos = posIni; + if (mMaxNumSafeRepositionAttempts == 0 || idx == TI_NONE || mBallState.get() == 0 || mAgentRadius <= 0) + return pos; + + bool fFoundAgentPos = false; + salt::Vector3f agentPos = Vector3f(0,0,0); + SoccerBase::TAgentStateList agent_states; + if (SoccerBase::GetAgentStates(*mBallState.get(), agent_states, idx)) { + boost::shared_ptr<oxygen::Transform> agent_aspect; + SoccerBase::TAgentStateList::const_iterator i; + for (i = agent_states.begin(); i != agent_states.end(); ++i) + { + int unumAgent = (*i)->GetUniformNumber(); + if (unum == unumAgent) { + SoccerBase::GetTransformParent(**i, agent_aspect); + agentPos = agent_aspect->GetWorldTransform().Pos(); + fFoundAgentPos = true; + break; + } + } + } else { + return pos; + } + + if (!fFoundAgentPos) { + return pos; + } + + std::list<salt::Vector2f> candidatePosList; + + Vector2f agent_pos = Vector2f(agentPos.x(),agentPos.y()); + Vector2f initial_pos = Vector2f(posIni.x(),posIni.y()); + bool fUnsafePosition = GetSafeRepositionHelper_AdjustPositionForPenaltyArea(agent_pos, unum, idx, initial_pos); + if (fUnsafePosition) { + Vector2f current_pos = Vector2f(posIni.x(),posIni.y()); + GetSafeRepositionHelper_SamplePositions(agent_pos, unum, idx, current_pos, candidatePosList); + if (candidatePosList.empty()) { + GetLog()->Error() << "ERROR: (SoccerRuleAspect) Failed to safely reposition player " << unum << " " << (idx == TI_LEFT ? "(left)" : "(right)") << "\n"; + return posIni; + } + Vector2f candidatePos = candidatePosList.front(); + candidatePosList.pop_front(); + pos[0] = candidatePos.x(); + pos[1] = candidatePos.y(); + } + + // Count the number of times we've repositioned an agent from colliding, + // and bound this so as to avoid the possibility of an infinite loop + int repositionAttempts = 0; + while (repositionAttempts < mMaxNumSafeRepositionAttempts) { + fUnsafePosition = false; + SoccerBase::TAgentStateList agent_states; + salt::BoundingSphere sphere(pos, mAgentRadius); + + // Check for collisions with teammates + if (SoccerBase::GetAgentStates(*mBallState.get(), agent_states, idx)) { + SoccerBase::TAgentStateList::const_iterator i; + + for (i = agent_states.begin(); i != agent_states.end(); ++i) + { + int unumAgent = (*i)->GetUniformNumber(); + if (unum == unumAgent) { + continue; + } + + boost::shared_ptr<oxygen::Transform> agent_aspect; + SoccerBase::GetTransformParent(**i, agent_aspect); + AABB3 agentAABB = SoccerBase::GetAgentBoundingBox(*agent_aspect); + if (sphere.Intersects(agentAABB)) { + /* +#ifdef RVDRAW + if (mRVSender) { + //mRVSender->clearStaticDrawings(); + mRVSender->drawPoint(pos.x(), pos.y(), 10, RVSender::RED); + } +#endif + */ + Vector2f current_pos = Vector2f(pos.x(),pos.y()); + GetSafeRepositionHelper_SamplePositions(agent_pos, unum, idx, current_pos, candidatePosList); + fUnsafePosition = true; + break; + } + } + } + + // Check for collision with opponents + agent_states.clear(); + if (!fUnsafePosition && SoccerBase::GetAgentStates(*mBallState.get(), agent_states, SoccerBase::OpponentTeam(idx))) { + SoccerBase::TAgentStateList::const_iterator i; + + for (i = agent_states.begin(); i != agent_states.end(); ++i) + { + boost::shared_ptr<oxygen::Transform> agent_aspect; + SoccerBase::GetTransformParent(**i, agent_aspect); + AABB3 agentAABB = SoccerBase::GetAgentBoundingBox(*agent_aspect); + if (sphere.Intersects(agentAABB)) { +#ifdef RVDRAW + if (mRVSender) { + //mRVSender->clearStaticDrawings(); + mRVSender->drawPoint(pos.x(), pos.y(), 10, RVSender::RED); + } +#endif + Vector2f current_pos = Vector2f(pos.x(),pos.y()); + GetSafeRepositionHelper_SamplePositions(agent_pos, unum, idx, current_pos, candidatePosList); + fUnsafePosition = true; + break; + } + } + } + + if (!fUnsafePosition) { + // Check for collisions with other repositioned agents + list<Vector2f>::const_iterator i; + for (i = reposLocs.begin(); i != reposLocs.end(); ++i) + { + Vector2f repos_agent_pos = *i; + float dist = sqrt((repos_agent_pos.x()-pos.x())*(repos_agent_pos.x()-pos.x()) + + (repos_agent_pos.y()-pos.y())*(repos_agent_pos.y()-pos.y())); + if (dist < mAgentRadius*2) { + /* +#ifdef RVDRAW + if (mRVSender) { + //mRVSender->clearStaticDrawings(); + mRVSender->drawPoint(pos.x(), pos.y(), 10, RVSender::ORANGE); + } +#endif + */ + Vector2f current_pos = Vector2f(pos.x(),pos.y()); + GetSafeRepositionHelper_SamplePositions(agent_pos, unum, idx, current_pos, candidatePosList); + fUnsafePosition = true; + break; + } + } + } + + if (!fUnsafePosition || candidatePosList.empty()) { + break; + } + + Vector2f candidatePos = candidatePosList.front(); + candidatePosList.pop_front(); + pos[0] = candidatePos.x(); + pos[1] = candidatePos.y(); + repositionAttempts++; + } + + //std::cout << repositionAttempts << "\n"; + + if (fUnsafePosition) { + GetLog()->Error() << "ERROR: (SoccerRuleAspect) Failed to safely reposition player " << unum << " " << (idx == TI_LEFT ? "(left)" : "(right)") << "\n"; + pos = posIni; + } + + if (playerInsideOwnArea[unum][idx] == 0 && ((idx == TI_LEFT && mLeftPenaltyArea.Contains(Vector2f(pos.x(), pos.y()))) || + (idx == TI_RIGHT && mRightPenaltyArea.Contains(Vector2f(pos.x(), pos.y()))))) + { + numPlReposInsideOwnArea[idx]++; + } + else if (playerInsideOwnArea[unum][idx] == 1 && ((idx == TI_LEFT && !mLeftPenaltyArea.Contains(Vector2f(pos.x(), pos.y()))) || + (idx == TI_RIGHT && !mRightPenaltyArea.Contains(Vector2f(pos.x(), pos.y()))))) + { + numPlReposInsideOwnArea[idx]--; + } + + reposLocs.push_back(Vector2f(pos.x(), pos.y())); + + return pos; +} + + // Clear Players that are violating the rules void SoccerRuleAspect::ClearPlayersAutomatic(TTeamIndex idx) @@ -912,6 +1243,8 @@ if (! SoccerBase::GetAgentStates(*mBallState.get(), agent_states, idx)) return; + random_shuffle(agent_states.begin(), agent_states.end()); + salt::Vector3f ballPos = mBallBody->GetPosition(); boost::shared_ptr<oxygen::Transform> agent_aspect; @@ -931,7 +1264,7 @@ if (playerFoulTime[unum][idx] <= mFoulHoldTime/0.02) { playerFoulTime[unum][idx]++; agentPos[2] = 1.0 + playerFoulTime[unum][idx]*0.01; - MoveAgent(agent_aspect, agentPos); + MoveAgent(agent_aspect, agentPos, false /*fSafe*/); } else { // I am not a very good soccer player... I am violating the rules... salt::Vector3f new_pos = RepositionOutsidePos(ballPos, unum, idx); @@ -959,6 +1292,8 @@ if (! SoccerBase::GetAgentStates(*mBallState.get(), agent_states, idx)) return; + random_shuffle(agent_states.begin(), agent_states.end()); + salt::BoundingSphere sphere(pos, radius); boost::shared_ptr<oxygen::Transform> agent_aspect; SoccerBase::TAgentStateList::const_iterator i; @@ -1004,6 +1339,8 @@ if (! SoccerBase::GetAgentStates(*mBallState.get(), agent_states, idx)) return; + random_shuffle(agent_states.begin(), agent_states.end()); + boost::shared_ptr<oxygen::Transform> agent_aspect; SoccerBase::TAgentStateList::const_iterator i; for (i = agent_states.begin(); i != agent_states.end(); ++i) @@ -1031,7 +1368,7 @@ void SoccerRuleAspect::ClearPlayersBeforeKickOff(TTeamIndex idx) { - if (idx == TI_NONE || mBallState.get() == 0) return; + if (mStartAnyFieldPosition || idx == TI_NONE || mBallState.get() == 0) return; // move the non-kick off team to own half field except the center // circle @@ -1049,6 +1386,8 @@ if (! SoccerBase::GetAgentStates(*mBallState.get(), agent_states, idx)) return; + random_shuffle(agent_states.begin(), agent_states.end()); + salt::AABB2 box; if ( TI_RIGHT == idx ){ box = mLeftHalf; @@ -1098,6 +1437,8 @@ if (! SoccerBase::GetAgentStates(*mBallState.get(), agent_states, idx)) return; + random_shuffle(agent_states.begin(), agent_states.end()); + boost::shared_ptr<oxygen::Transform> agent_aspect; SoccerBase::TAgentStateList::const_iterator i; for (i = agent_states.begin(); i != agent_states.end(); ++i) @@ -1116,6 +1457,7 @@ Vector2f updated_pos = avoid_pos+pos2Agent.Normalize()*radius; new_pos[0] = updated_pos[0]; new_pos[1] = updated_pos[1]; + new_pos = GetSafeReposition(new_pos, (*i)->GetUniformNumber(), idx); SoccerBase::MoveAgent(agent_aspect, new_pos); } } @@ -1297,9 +1639,29 @@ TTime kickTime; // notice that a kick is not necessarily an immediate action, it can // take some time... - return mBallState->GetLastCollidingAgent(lastKicker, kickTime) - && kickTime - mLastFreeKickKickTime < 0.1 // kick duration = 0.1 - && lastKicker == mLastFreeKickTaker; + if (!mLastFreeKickTaker || !mBallState->GetLastCollidingAgent(lastKicker, kickTime)) { + return false; + } + + boost::shared_ptr<AgentState> agentStateLastKicker; + if (!SoccerBase::GetAgentState(lastKicker, agentStateLastKicker)) + { + GetLog()->Error() << "ERROR: (SoccerRuleAspect) Cannot get " + "AgentState from an AgentAspect\n"; + return false; + } + + boost::shared_ptr<AgentState> agentStateLastFreeKickTaker; + if (!SoccerBase::GetAgentState(mLastFreeKickTaker, agentStateLastFreeKickTaker)) + { + GetLog()->Error() << "ERROR: (SoccerRuleAspect) Cannot get " + "AgentState from an AgentAspect\n"; + return false; + } + + return kickTime - mLastFreeKickKickTime < 0.1 // kick duration = 0.1 + && agentStateLastKicker->GetUniformNumber() == agentStateLastFreeKickTaker->GetUniformNumber() + && agentStateLastKicker->GetTeamIndex() == agentStateLastFreeKickTaker->GetTeamIndex(); } void @@ -1310,6 +1672,8 @@ if (! SoccerBase::GetAgentStates(*mBallState.get(), agent_states, TI_NONE)) return; + random_shuffle(agent_states.begin(), agent_states.end()); + boost::shared_ptr<oxygen::Transform> agent_aspect; SoccerBase::TAgentStateList::const_iterator i; for (i = agent_states.begin(); i != agent_states.end(); ++i) @@ -1395,9 +1759,17 @@ MoveBall(pos); - ClearPlayers(pos, mFreeKickDist, mFreeKickMoveDist, TI_LEFT); - ClearPlayers(pos, mFreeKickDist, mFreeKickMoveDist, TI_RIGHT); - + if (rand()%2 == 0) + { + ClearPlayers(pos, mFreeKickDist, mFreeKickMoveDist, TI_LEFT); + ClearPlayers(pos, mFreeKickDist, mFreeKickMoveDist, TI_RIGHT); + } + else + { + ClearPlayers(pos, mFreeKickDist, mFreeKickMoveDist, TI_RIGHT); + ClearPlayers(pos, mFreeKickDist, mFreeKickMoveDist, TI_LEFT); + } + // After a drop ball allow anyone to touch it ResetKickChecks(); @@ -1425,8 +1797,20 @@ MoveBall(pos); mGameState->SetPaused(true); - ClearPlayers(mRightHalf, mFreeKickMoveDist, TI_LEFT); - ClearPlayers(mLeftHalf, mFreeKickMoveDist, TI_RIGHT); + + if (!mStartAnyFieldPosition) + { + if (rand()%2 == 0) + { + ClearPlayers(mRightHalf, mFreeKickMoveDist, TI_LEFT); + ClearPlayers(mLeftHalf, mFreeKickMoveDist, TI_RIGHT); + } + else + { + ClearPlayers(mLeftHalf, mFreeKickMoveDist, TI_RIGHT); + ClearPlayers(mRightHalf, mFreeKickMoveDist, TI_LEFT); + } + } #if 0 // @@ -1493,6 +1877,9 @@ void SoccerRuleAspect::UpdateKickIn(TTeamIndex idx) { + // [patmac] This method is almost identical to UpdateFreeKick + // and could probably just call UpdateFreeKick(idx, true /*indirect*/) + mGameState->SetPaused(false); // do nothing for the duration of mKickInPauseTime @@ -1523,14 +1910,10 @@ // change to the KickIn mode *plus* pause time boost::shared_ptr<AgentAspect> agent; TTime time; - if (! mBallState->GetLastCollidingAgent(agent,time)) - { - GetLog()->Error() << "ERROR: (SoccerRuleAspect) " << "no agent collided yet\n"; - return; - } + bool fHaveAgentCollidedWithBall = mBallState->GetLastCollidingAgent(agent,time); TTime lastChange = mGameState->GetLastModeChange(); - if (time > lastChange + mKickInPauseTime && !mRepelPlayersForKick) + if (fHaveAgentCollidedWithBall && time > lastChange + mKickInPauseTime + 0.03 && !mRepelPlayersForKick) { SetKickTakenValues(time, agent, true); mGameState->SetPlayMode(PM_PlayOn); @@ -1600,14 +1983,10 @@ // change to the KickIn mode boost::shared_ptr<AgentAspect> agent; TTime time; - if (! mBallState->GetLastCollidingAgent(agent,time)) - { - GetLog()->Error() << "ERROR: (SoccerRuleAspect) " << "no agent collided yet\n"; - return; - } + bool fHaveAgentCollidedWithBall = mBallState->GetLastCollidingAgent(agent,time); TTime lastChange = mGameState->GetLastModeChange(); - if (time > lastChange + mKickInPauseTime && !mRepelPlayersForKick) + if (fHaveAgentCollidedWithBall && time > lastChange + mKickInPauseTime + 0.03 && !mRepelPlayersForKick) { SetKickTakenValues(time, agent, indirect); mGameState->SetPlayMode(PM_PlayOn); @@ -1666,7 +2045,7 @@ TTime lastChange = mGameState->GetLastModeChange(); // if the team with the goal kick touched the ball and the ball is // outside the penalty area, we switch to play on. - if (time > lastChange + mKickInPauseTime && !mRepelPlayersForKick) + if (time > lastChange + mKickInPauseTime + 0.03 && !mRepelPlayersForKick) { Vector2f pos(mBallBody->GetPosition().x(), mBallBody->GetPosition().y()); @@ -1737,7 +2116,7 @@ } TTime lastChange = mGameState->GetLastModeChange(); - if (time > lastChange + mKickInPauseTime && !mRepelPlayersForKick) + if (time > lastChange + mKickInPauseTime + 0.03 && !mRepelPlayersForKick) { SetKickTakenValues(time, agent, false); mGameState->SetPlayMode(PM_PlayOn); @@ -1956,7 +2335,7 @@ bool SoccerRuleAspect::CheckFreeKickTakerFoul() { - if (!mCheckFreeKickKickerFoul) + if (!mCheckFreeKickKickerFoul || !mLastFreeKickTaker) return false; boost::shared_ptr<AgentAspect> agent; @@ -1964,8 +2343,26 @@ { mCheckFreeKickKickerFoul = false; mIndirectKick = false; - if (agent == mLastFreeKickTaker) + + boost::shared_ptr<AgentState> agentStateLastKicker; + if (!SoccerBase::GetAgentState(agent, agentStateLastKicker)) { + GetLog()->Error() << "ERROR: (SoccerRuleAspect) Cannot get " + "AgentState from an AgentAspect\n"; + return false; + } + + boost::shared_ptr<AgentState> agentStateLastFreeKickTaker; + if (!SoccerBase::GetAgentState(mLastFreeKickTaker, agentStateLastFreeKickTaker)) + { + GetLog()->Error() << "ERROR: (SoccerRuleAspect) Cannot get " + "AgentState from an AgentAspect\n"; + return false; + } + + if (agentStateLastKicker->GetUniformNumber() == agentStateLastFreeKickTaker->GetUniformNumber() + && agentStateLastKicker->GetTeamIndex() == agentStateLastFreeKickTaker->GetTeamIndex()) + { PunishFreeKickFoul(mLastFreeKickTaker); return true; } @@ -2167,6 +2564,8 @@ return; } + reposLocs.clear(); + CheckTime(); TPlayMode playMode = mGameState->GetPlayMode(); @@ -2420,7 +2819,10 @@ SoccerBase::GetSoccerVar(*this,"ChargingMinCollisionSpeed",mMinCollisionSpeed); SoccerBase::GetSoccerVar(*this,"FoulHoldTime",mFoulHoldTime); + SoccerBase::GetSoccerVar(*this,"MaxNumSafeRepositionAttempts",mMaxNumSafeRepositionAttempts); + SoccerBase::GetSoccerVar(*this,"StartAnyFieldPosition",mStartAnyFieldPosition); + // cout << "MaxInside " << mMaxPlayersInsideOwnArea << endl << endl; // set up bounding boxes for halfs and goal areas @@ -2806,7 +3208,7 @@ TTeamIndex collidingAgentIdx = agentState->GetTeamIndex(); TTime lastChange = mGameState->GetLastModeChange(); - if (time > lastChange && collidingAgentIdx==idx && !mRepelPlayersForKick) + if (time > lastChange + 0.03 && collidingAgentIdx==idx && !mRepelPlayersForKick) { mGameState->SetPlayMode(PM_PlayOn); } @@ -2830,6 +3232,8 @@ if (! SoccerBase::GetAgentStates(*mBallState.get(), agent_states, idx)) return; + random_shuffle(agent_states.begin(), agent_states.end()); + salt::BoundingSphere sphere(pos, radius); boost::shared_ptr<oxygen::Transform> agent_aspect; SoccerBase::TAgentStateList::const_iterator i; @@ -2919,8 +3323,10 @@ bool -SoccerRuleAspect::MoveAgent(boost::shared_ptr<Transform> agent_aspect, const Vector3f& pos) +SoccerRuleAspect::MoveAgent(boost::shared_ptr<Transform> agent_aspect, const Vector3f& pos, bool fSafe) { + Vector3f move_pos = pos; + boost::shared_ptr<AgentState> agentState; if (!SoccerBase::GetAgentState(agent_aspect, agentState)) { @@ -2930,11 +3336,15 @@ else { int unum = agentState->GetUniformNumber(); - int idx = agentState->GetTeamIndex(); + TTeamIndex idx = agentState->GetTeamIndex(); playerTimeSinceLastWasMoved[unum][idx] = 0; + + if (fSafe) { + move_pos = GetSafeReposition(pos, unum, idx); + } } - return SoccerBase::MoveAgent(agent_aspect, pos); + return SoccerBase::MoveAgent(agent_aspect, move_pos); } bool Modified: trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.h =================================================================== --- trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.h 2017-03-24 21:15:15 UTC (rev 414) +++ trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.h 2017-07-08 15:42:38 UTC (rev 415) @@ -102,6 +102,23 @@ */ salt::Vector3f RepositionOutsidePos(salt::Vector3f initPos, int unum, TTeamIndex idx); + /** Helper for GetSafeReposition that adjusts positions if they are in + a team's penalty area and would cause an illegal defense foul if an + agent was moved there + */ + bool GetSafeRepositionHelper_AdjustPositionForPenaltyArea(const salt::Vector2f agent_pos, int unum, TTeamIndex idx, salt::Vector2f ¤t_pos); + + /** Helper for GetSafeReposition that samples new positions to try and + move an agent to for repositioning + */ + void GetSafeRepositionHelper_SamplePositions(const salt::Vector2f agent_pos, int unum, TTeamIndex idx, salt::Vector2f current_pos, std::list<salt::Vector2f> &candidatePosList); + + /** Checks the current position for an agent to be repositioned to for + potential collisions with other agents, and adjusts the position if need + be to avoid collisions + */ + salt::Vector3f GetSafeReposition(salt::Vector3f posIni, int unum, TTeamIndex idx); + /** Calculates the inside field reposition pos for a given agent with unum and team idx Agents are repositioned at distance from the ball, that is, at: plpos + (plpos-ballpos).normalize()*dist */ @@ -367,13 +384,13 @@ bool WasLastKickFromFreeKick( boost::shared_ptr<oxygen::AgentAspect> &lastKicker); - bool MoveAgent(boost::shared_ptr<oxygen::Transform> agent_aspect, const salt::Vector3f& pos); + bool MoveAgent(boost::shared_ptr<oxygen::Transform> agent_aspect, const salt::Vector3f& pos, bool fSafe=true); /** if a player has committed a foul that should be enforced */ bool HaveEnforceableFoul(int unum, TTeamIndex ti); protected: - static const int AVERAGE_VELOCITY_MEASUREMENTS = 5; + static const int AVERAGE_VELOCITY_MEASUREMENTS = 3; /** reference to the body node of the Ball */ boost::shared_ptr<oxygen::RigidBody> mBallBody; @@ -485,6 +502,8 @@ int playerFoulTime[12][3]; //Time player is commiting a positional foul EFoulType playerLastFoul[12][3]; //Type of last foul committed by player int numPlInsideOwnArea[3]; //Number of players inside own area + int numPlReposInsideOwnArea[3]; //Number of players repositioned inside own area + std::list<salt::Vector2f> reposLocs; // List of locations players have been repositioned to int closestPlayer[3]; //Closest Player from each team float closestPlayerDist[3]; //Closest Player distance to ball from each team salt::Vector3f playerVelocities[12][3][AVERAGE_VELOCITY_MEASUREMENTS]; // Player velocities over last AVERAGE_VELOCITY_MEASUREMENTS cycles @@ -594,6 +613,13 @@ /** reduction rate of width of keepaway box per minute */ float mKeepawayWidthReductionRate; + /** Maximum number of attempts made to safely reposition an agent */ + int mMaxNumSafeRepositionAttempts; + + /** Allow starting at any field position including on opponent's + side of the field */ + bool mStartAnyFieldPosition; + #ifdef RVDRAW boost::shared_ptr<RVSender> mRVSender; #endif // RVDRAW Modified: trunk/rcssserver3d/rcssserver3d/naosoccersim.rb =================================================================== --- trunk/rcssserver3d/rcssserver3d/naosoccersim.rb 2017-03-24 21:15:15 UTC (rev 414) +++ trunk/rcssserver3d/rcssserver3d/naosoccersim.rb 2017-07-08 15:42:38 UTC (rev 415) @@ -56,6 +56,7 @@ addSoccerVar('WaitBeforeKickOff', 30.0) addSoccerVar('CoinTossForKickOff', false) addSoccerVar('PenaltyShootout', false) +addSoccerVar('StartAnyFieldPosition', false) addSoccerVar('AutomaticQuit', false) addSoccerVar('ChangeSidesInSecondHalf', false) @@ -106,9 +107,13 @@ addSoccerVar('GroundMaxTime',15) addSoccerVar('GoalieGroundMaxTime', 30) addSoccerVar('MaxPlayersInsideOwnArea',3) -addSoccerVar('MinOppDistance',0.8) -addSoccerVar('Min2PlDistance',0.4) -addSoccerVar('Min3PlDistance',1.0) +#addSoccerVar('MinOppDistance',0.8) +#addSoccerVar('Min2PlDistance',0.4) +#addSoccerVar('Min3PlDistance',1.0) +# Turning off crowding for 2017 competition +addSoccerVar('MinOppDistance',0.0) +addSoccerVar('Min2PlDistance',0.0) +addSoccerVar('Min3PlDistance',0.0) addSoccerVar('FoulHoldTime', 0.5) @@ -128,8 +133,10 @@ #addSoccerVar('MaxPlayersInsideOwnArea',2) #addSoccerVar('MinOppDistance',1.0) #addSoccerVar('Min2PlDistance',0.6) -#addSoccerVar('Min3PlDistance',1.5) +#addSoccerVar('Min3PlDistance',1.5) +addSoccerVar('MaxNumSafeRepositionAttempts', 100) + # recorders addSoccerVar('BallRecorder',"Ball/geometry/recorder") addSoccerVar('LeftGoalRecorder',"leftgoal/GoalBox/BoxCollider/recorder") This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2017-03-24 21:15:17
|
Revision: 414 http://sourceforge.net/p/simspark/svn/414 Author: hedayat Date: 2017-03-24 21:15:15 +0000 (Fri, 24 Mar 2017) Log Message: ----------- Fix carbon libdir Modified Paths: -------------- trunk/rcssserver3d/CMakeLists.txt Modified: trunk/rcssserver3d/CMakeLists.txt =================================================================== --- trunk/rcssserver3d/CMakeLists.txt 2017-03-24 21:15:10 UTC (rev 413) +++ trunk/rcssserver3d/CMakeLists.txt 2017-03-24 21:15:15 UTC (rev 414) @@ -96,9 +96,9 @@ ########## Additional variables for config files ########## if (CARBON_FOUND) set(carbondatadir ${CARBON_DATA_DIR}) - set(carbonlayoutlibdir ${CARBON_ROOT_DIR}/lib/guilayout) - set(carbonpluginlibdir ${CARBON_ROOT_DIR}/lib/guiplugin) - set(guipluginlibdir ${CMAKE_INSTALL_PREFIX}/lib/guiplugin) + set(carbonlayoutlibdir ${CARBON_ROOT_DIR}/${LIBDIR}/guilayout) + set(carbonpluginlibdir ${CARBON_ROOT_DIR}/${LIBDIR}/guiplugin) + set(guipluginlibdir ${CMAKE_INSTALL_PREFIX}/${LIBDIR}/guiplugin) set(GUI_PLUGIN_INCLUDE_DIR include/guiplugin) set(carbonsetupdir ${carbondatadir}/setups) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2017-03-24 21:15:12
|
Revision: 413 http://sourceforge.net/p/simspark/svn/413 Author: hedayat Date: 2017-03-24 21:15:10 +0000 (Fri, 24 Mar 2017) Log Message: ----------- Use TXZ as default source format rather than TGZ Modified Paths: -------------- trunk/rcssserver3d/CMakeLists.txt trunk/spark/CMakeLists.txt Modified: trunk/rcssserver3d/CMakeLists.txt =================================================================== --- trunk/rcssserver3d/CMakeLists.txt 2017-03-24 17:16:19 UTC (rev 412) +++ trunk/rcssserver3d/CMakeLists.txt 2017-03-24 21:15:10 UTC (rev 413) @@ -138,7 +138,7 @@ ########### CPack section ############# include(InstallRequiredSystemLibraries) -set(CPACK_SOURCE_GENERATOR TGZ) +set(CPACK_SOURCE_GENERATOR TXZ) set(CPACK_SOURCE_IGNORE_FILES /CVS/ /[.]svn/ /.*[.]o$ /.*[.]o/ /autom4te[.]cache/ /[.].* /bootstrap /RELEASE /rpm.am /msi.am) Modified: trunk/spark/CMakeLists.txt =================================================================== --- trunk/spark/CMakeLists.txt 2017-03-24 17:16:19 UTC (rev 412) +++ trunk/spark/CMakeLists.txt 2017-03-24 21:15:10 UTC (rev 413) @@ -290,7 +290,7 @@ "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") ########### CPack section ############# -set(CPACK_SOURCE_GENERATOR TGZ) +set(CPACK_SOURCE_GENERATOR TXZ) set(CPACK_SOURCE_IGNORE_FILES /CVS/ /[.]svn/ /.*[.]o$ /.*[.]o/ /autom4te[.]cache/ /[.].* /bootstrap /RELEASE /styles/ /papers/ /rpm.am /msi.am /codingstyle.txt) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2017-03-24 17:16:21
|
Revision: 412 http://sourceforge.net/p/simspark/svn/412 Author: hedayat Date: 2017-03-24 17:16:19 +0000 (Fri, 24 Mar 2017) Log Message: ----------- SimSpark 0.3.0 release Added Paths: ----------- tags/SIMSPARK_0.3.0_RELEASE/ Index: tags/SIMSPARK_0.3.0_RELEASE =================================================================== --- trunk/spark 2016-06-04 14:25:52 UTC (rev 410) +++ tags/SIMSPARK_0.3.0_RELEASE 2017-03-24 17:16:19 UTC (rev 412) Property changes on: tags/SIMSPARK_0.3.0_RELEASE ___________________________________________________________________ Added: svn:ignore ## -0,0 +1,27 ## +.project + +.cproject + +autom4te.cache + +configure + +sparkconfig.h.in + +Makefile.in + +aclocal.m4 + +.cdtconfigure.Build (GNU) + +Makefile + +config.status + +stamp-h1 + +libtool + +sparkconfig.h + +.settings Added: svn:mergeinfo ## -0,0 +1,2 ## +/branches/agentselection/spark:195-206 +/branches/treehole/spark:175 \ No newline at end of property This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2017-03-24 17:14:41
|
Revision: 411 http://sourceforge.net/p/simspark/svn/411 Author: hedayat Date: 2017-03-24 17:14:39 +0000 (Fri, 24 Mar 2017) Log Message: ----------- RCSSServer3D 0.7.0 release Added Paths: ----------- tags/RCSSSERVER3D_0.7.0_RELEASE/ Index: tags/RCSSSERVER3D_0.7.0_RELEASE =================================================================== --- trunk/rcssserver3d 2016-06-04 14:25:52 UTC (rev 410) +++ tags/RCSSSERVER3D_0.7.0_RELEASE 2017-03-24 17:14:39 UTC (rev 411) Property changes on: tags/RCSSSERVER3D_0.7.0_RELEASE ___________________________________________________________________ Added: svn:ignore ## -0,0 +1,27 ## +.project + +.cproject + +Makefile.in + +rcssserver3d_config.h + +rcssserver3d_config.h.in + +configure + +stamp-h1 + +aclocal.m4 + +autom4te.cache + +config.status + +.cdtconfigure.Build (GNU) + +libtool + +Makefile + +.settings Added: svn:mergeinfo ## -0,0 +1,2 ## +/branches/agentselection/rcssserver3d:195-206 +/branches/treehole/rcssserver3d:175 \ No newline at end of property This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2016-06-04 14:25:53
|
Revision: 410 http://sourceforge.net/p/simspark/svn/410 Author: hedayat Date: 2016-06-04 14:25:52 +0000 (Sat, 04 Jun 2016) Log Message: ----------- SPARK_DIR/CARBON_DIR environment variables take precedence over system default search paths Modified Paths: -------------- trunk/rcssserver3d/cmake/FindCarbon.cmake trunk/rcssserver3d/cmake/FindSpark.cmake Modified: trunk/rcssserver3d/cmake/FindCarbon.cmake =================================================================== --- trunk/rcssserver3d/cmake/FindCarbon.cmake 2016-06-02 11:31:53 UTC (rev 409) +++ trunk/rcssserver3d/cmake/FindCarbon.cmake 2016-06-04 14:25:52 UTC (rev 410) @@ -14,21 +14,25 @@ SET(CARBON_FIND_QUIETLY TRUE) ENDIF (CARBON_INCLUDE_DIR) -SET(CARBON_DIR $ENV{CARBON_DIR} "C:/Program Files/simspark" "C:/Program Files (x86)/simspark" "C:/library/simspark") +SET(CARBON_DIR "C:/Program Files/simspark" "C:/Program Files (x86)/simspark" "C:/library/simspark") FIND_PATH(CARBON_INCLUDE_DIR carbon/carbon.h + HINTS ENV CARBON_DIR PATHS ${CARBON_DIR} PATH_SUFFIXES simspark include/simspark) FIND_PATH(CARBON_ROOT_DIR share/carbon/setups/DefaultSetupGrid.xml + HINTS ENV CARBON_DIR PATHS ${CARBON_DIR}) FIND_PATH(CARBON_DATA_DIR setups/DefaultSetupGrid.xml + HINTS ENV CARBON_DIR PATHS ${CARBON_DIR} PATH_SUFFIXES share/carbon) SET(CARBON_NAMES carbon carbon_debug) FIND_LIBRARY(CARBON_LIBRARY NAMES ${CARBON_NAMES} + HINTS ENV CARBON_DIR PATHS ${CARBON_DIR} PATH_SUFFIXES simspark lib/simspark) Modified: trunk/rcssserver3d/cmake/FindSpark.cmake =================================================================== --- trunk/rcssserver3d/cmake/FindSpark.cmake 2016-06-02 11:31:53 UTC (rev 409) +++ trunk/rcssserver3d/cmake/FindSpark.cmake 2016-06-04 14:25:52 UTC (rev 410) @@ -41,14 +41,16 @@ SET(SPARK_FIND_QUIETLY TRUE) ENDIF (SPARK_INCLUDE_DIR) -SET(SPARK_DIR $ENV{SPARK_DIR} "C:/Program Files/simspark" "C:/Program Files (x86)/simspark" "C:/library/simspark") +SET(SPARK_DIR "C:/Program Files/simspark" "C:/Program Files (x86)/simspark" "C:/library/simspark") FIND_PATH(SPARK_INCLUDE_DIR spark/spark.h + HINTS ENV SPARK_DIR PATHS ${SPARK_DIR} PATH_SUFFIXES simspark include/simspark) SET(SPARK_NAMES spark spark_debug) FIND_LIBRARY(SPARK_LIBRARY NAMES ${SPARK_NAMES} + HINTS ENV SPARK_DIR PATHS ${SPARK_DIR} PATH_SUFFIXES simspark lib/simspark) GET_FILENAME_COMPONENT(SPARK_LIB_DIR ${SPARK_LIBRARY} PATH) @@ -76,11 +78,13 @@ ENDIF (SALT_INCLUDE_DIR) FIND_PATH(SALT_INCLUDE_DIR salt/salt.h + HINTS ENV SPARK_DIR PATHS ${SPARK_DIR} PATH_SUFFIXES simspark include/simspark) SET(SALT_NAMES salt salt_debug) FIND_LIBRARY(SALT_LIBRARY NAMES ${SALT_NAMES} + HINTS ENV SPARK_DIR PATHS ${SPARK_DIR} PATH_SUFFIXES simspark lib/simspark) @@ -107,11 +111,13 @@ ENDIF (ZEITGEIST_INCLUDE_DIR) FIND_PATH(ZEITGEIST_INCLUDE_DIR zeitgeist/zeitgeist.h + HINTS ENV SPARK_DIR PATHS ${SPARK_DIR} PATH_SUFFIXES simspark include/simspark) SET(ZEITGEIST_NAMES zeitgeist zeitgeist_debug) FIND_LIBRARY(ZEITGEIST_LIBRARY NAMES ${ZEITGEIST_NAMES} + HINTS ENV SPARK_DIR PATHS ${SPARK_DIR} PATH_SUFFIXES simspark lib/simspark) @@ -138,11 +144,13 @@ ENDIF (OXYGEN_INCLUDE_DIR) FIND_PATH(OXYGEN_INCLUDE_DIR oxygen/oxygen.h + HINTS ENV SPARK_DIR PATHS ${SPARK_DIR} PATH_SUFFIXES simspark include/simspark) SET(OXYGEN_NAMES oxygen oxygen_debug) FIND_LIBRARY(OXYGEN_LIBRARY NAMES ${OXYGEN_NAMES} + HINTS ENV SPARK_DIR PATHS ${SPARK_DIR} PATH_SUFFIXES simspark lib/simspark) @@ -169,11 +177,13 @@ ENDIF (KEROSIN_INCLUDE_DIR) FIND_PATH(KEROSIN_INCLUDE_DIR kerosin/kerosin.h + HINTS ENV SPARK_DIR PATHS ${SPARK_DIR} PATH_SUFFIXES simspark include/simspark) SET(KEROSIN_NAMES kerosin kerosin_debug) FIND_LIBRARY(KEROSIN_LIBRARY NAMES ${KEROSIN_NAMES} + HINTS ENV SPARK_DIR PATHS ${SPARK_DIR} PATH_SUFFIXES simspark lib/simspark) @@ -200,11 +210,13 @@ ENDIF (RCSSNET3D_INCLUDE_DIR) FIND_PATH(RCSSNET3D_INCLUDE_DIR rcssnet/addr.hpp + HINTS ENV SPARK_DIR PATHS ${SPARK_DIR} PATH_SUFFIXES simspark include/simspark) SET(RCSSNET3D_NAMES rcssnet3D rcssnet3D_debug) FIND_LIBRARY(RCSSNET3D_LIBRARY NAMES ${RCSSNET3D_NAMES} + HINTS ENV SPARK_DIR PATHS ${SPARK_DIR} PATH_SUFFIXES simspark lib/simspark) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2016-06-02 11:31:56
|
Revision: 409 http://sourceforge.net/p/simspark/svn/409 Author: hedayat Date: 2016-06-02 11:31:53 +0000 (Thu, 02 Jun 2016) Log Message: ----------- Add lib dependency for guiplugin/guilayout which fixes parallel build issue Modified Paths: -------------- trunk/spark/guilayout/CMakeLists.txt trunk/spark/guiplugin/CMakeLists.txt Modified: trunk/spark/guilayout/CMakeLists.txt =================================================================== --- trunk/spark/guilayout/CMakeLists.txt 2016-05-31 20:58:29 UTC (rev 408) +++ trunk/spark/guilayout/CMakeLists.txt 2016-06-02 11:31:53 UTC (rev 409) @@ -1,9 +1,7 @@ include_directories(${CMAKE_SOURCE_DIR}/lib ${CMAKE_SOURCE_DIR}/utility ${OPENGL_INCLUDE_DIR}) -if (WIN32 OR APPLE) - set(spark_gui_libs salt oxygen zeitgeist kerosin spark carbon rcssnet3D) -endif (WIN32 OR APPLE) +set(spark_gui_libs salt oxygen zeitgeist kerosin spark carbon rcssnet3D) add_subdirectory(guigridlayout) add_subdirectory(guisimplelayout) Modified: trunk/spark/guiplugin/CMakeLists.txt =================================================================== --- trunk/spark/guiplugin/CMakeLists.txt 2016-05-31 20:58:29 UTC (rev 408) +++ trunk/spark/guiplugin/CMakeLists.txt 2016-06-02 11:31:53 UTC (rev 409) @@ -1,11 +1,9 @@ include_directories(${CMAKE_SOURCE_DIR}/lib ${CMAKE_SOURCE_DIR}/utility ${OPENGL_INCLUDE_DIR}) -if (WIN32 OR APPLE) - set(spark_gui_libs - salt oxygen zeitgeist kerosin spark carbon rcssnet3D - ) -endif (WIN32 OR APPLE) +set(spark_gui_libs + salt oxygen zeitgeist kerosin spark carbon rcssnet3D +) add_subdirectory(logframe) add_subdirectory(setupframe) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2016-05-31 20:58:31
|
Revision: 408 http://sourceforge.net/p/simspark/svn/408 Author: hedayat Date: 2016-05-31 20:58:29 +0000 (Tue, 31 May 2016) Log Message: ----------- Prepare rcssserver3d 0.7.0 release Modified Paths: -------------- trunk/rcssserver3d/CMakeLists.txt trunk/rcssserver3d/NEWS trunk/rcssserver3d/RELEASE Modified: trunk/rcssserver3d/CMakeLists.txt =================================================================== --- trunk/rcssserver3d/CMakeLists.txt 2016-05-31 20:58:23 UTC (rev 407) +++ trunk/rcssserver3d/CMakeLists.txt 2016-05-31 20:58:29 UTC (rev 408) @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 2.6) project(rcssserver3d CXX C) -set(PACKAGE_VERSION "0.6.11") +set(PACKAGE_VERSION "0.7.0") option(RVDRAW "Enable roboviz drawings" OFF) if (RVDRAW) Modified: trunk/rcssserver3d/NEWS =================================================================== --- trunk/rcssserver3d/NEWS 2016-05-31 20:58:23 UTC (rev 407) +++ trunk/rcssserver3d/NEWS 2016-05-31 20:58:29 UTC (rev 408) @@ -1,3 +1,125 @@ +[0.7.0] +A new GUI application is developed to run and control simspark simulations. +Additinoally, there are a number changes to the soccer rules enforced in +the simulator. More details about changes in this release follows: + +* Updates to charging foul model and other fouls: +An initial implementation of the charging foul model is documented at +http://www.acso.uneb.br/bahiart/uploads/Main/FoulModel2016.pdf. The +following are some updates to the charging foul model which will hopefully +be added to the documentation of the charging foul model soon: + + - Rules for charging involving agents' relative positions to the ball + are only active for agents within 1 meter (ChargingMaxBallRulesDist) of + the ball + - Players are immune to committing a charging foul after touching the + ball for 1 second (ChargingImmunityTime) + - There is no maximum distance from the ball that a charging foul will + be called -- charging fouls can be called at any position on or off the + field + - After a player is moved/beamed by the server no charging fouls in any + collision involving that agent will be called for 1 second after the + player is moved. + - There is no longer a concept of ChargingMinCollisionPoint. Instead a + threshold of velocity exerted in a collision (ChargingMinCollisionSpeed + with a default value of 0.2) must be exceeded for a charging foul to be + called. This value is calculated as a cross product between an agent's + velocity vector and the normalized vector from the agent to the average of + the opponent agent and collision point. + +General foul changes: + + - For visualization purposes after any foul (charging, crowding, illegal + defense, touching, incapable) agents are lifted up in the air for + FoulHoldTime (default 0.5 seconds) before being beamed to the sideline. + - Touching fouls in groups of three or more are no longer called on + goalies (a goalie's teammate will be called for a touching foul instead). + + +* New kick rules: + +The following is a summary of the rule changes for kicking: + - A player taking a kick can't touch the ball more than once before + another player touches the ball -- touching the ball more than once + results in an indirect free kick for the opponent (same as in human + soccer). Note that a goal kick doesn't count as having been taken until + the ball leaves the penalty area + - You can never score an own goal directly off your own kick -- the + result of such an own goal is a corner kick for the opponent (same as in + human soccer). + - Kick-ins are indirect (same as throw-ins in human soccer). + - Goal kicks and corner kicks are direct (same as in human soccer). + - Scoring a goal directly from an indirect kick results in a goal kick + for the opponent (same as in human soccer). + - Kickoffs are still indirect and the ball must be touched outside the + center circle, or an opponent must first touch the ball, before the team + taking a kickoff can score (in human soccer kickoffs are direct, but this + artificial rule is needed to prevent "kickoff taking contests"). + - Players within KickRepelDist (defined in naosoccersim.rb) of the ball + when it is placed for a kick are moved back to a position exactly + KickRepelDist from the ball to prevent players from accidentally touching + the ball and losing a kick if the ball is placed right underneath their + current position on the field. + - Two new direct kick playmodes have been added + (direct_free_kick_[left|right]). While there is no plan to use these + playmodes at this year's competition, shift+L and shift+R key bindings for + them have been added to rcssmonitor3d and roboviz. + + +* Keepaway mode: + +The keepaway playmode sets the playmode to GameOver if a player on the +right team touches the ball or if the ball leaves a predefined keepaway +area. During keepaway no charging fouls will be called on agents on the +right team (the team trying to take the ball). + +The keepaway mode adds the following parameters to naosoccersim.rb: + +// if in keepaway mode +Keepaway +// center X value of keepaway box +KeepawayCenterX +// center Y value of keepaway box +KeepawayCenterY +// length of keepaway box +KeepawayLength +// width of keepaway box +KeepawayWidth +// reduction rate of length of keepaway box per minute +KeepawayLengthReductionRate +// reduction rate of width of keepaway box per minute +KeepawayWidthReductionRate + + +* Blocking of say messages with illegal characters: + +While most agents have been sending legal say messages, there have been a +few instances of agents sending say messages with illegal characters. The +server now throws out say messages containing illegal characters (space, +parenthesis, and those outside the range [0x20-0x7E]). The server also +prints an error message containing the illegal say message and the agent +who said it. When running in sync mode the proxy still needs to be used +to protect against bad say messages that break parsing (or really any +unparseable messages sent to the server) -- this change only throws out +say messages with illegal that were able to be parsed. + + +* Plugin for drawing objects in roboviz: + +You can activate a new plugin (rvdraw) within rcssserver3d allowing it to +draw objects in roboviz by using the "-DRVDRAW=ON" command line argument +when running cmake before building rcssserver3d. The plugin likely only +works in linux which is why it isn't enabled by default. Currently this +plugin is set to draw debugging information for the charging foul model, +but one might find it useful to add their own code to the server to draw +things in roboviz. + +After rcssserver3d is compiled with the rvdraw plugin enabled use the +following command line argument when running the server to have it send +draw commands to roboviz: +rcssserver3d --rvdraw-host <roboviz_host_machine> + + [0.6.10] This is the final release of rcssserver3d for RoboCup 2015, which brings a few bug fixes and enhancements for the competitions: Modified: trunk/rcssserver3d/RELEASE =================================================================== --- trunk/rcssserver3d/RELEASE 2016-05-31 20:58:23 UTC (rev 407) +++ trunk/rcssserver3d/RELEASE 2016-05-31 20:58:29 UTC (rev 408) @@ -1,15 +1,125 @@ -RELEASE News of rcssserver3d-0.6.10 +RELEASE News of rcssserver3d-0.7.0 -This is the final release of rcssserver3d for RoboCup 2015, which brings a few -bug fixes and enhancements for the competitions: - * Turning off penalty shootout mode as soon as a goal is scored by the left - team so that a later second goal won't be recorded if the goalie leaves - the penalty area after the goal was scored. - * Added models for visually differentiating between different robot body - types. This changes some of the black coloring on the robot's body to be - a different type dependent neutral color. - * Fixed bug where the server may hang on certain systems if beam effector - noise (BeamNoiseXY and BeamNoiseAngle) are set to 0. +A new GUI application is developed to run and control simspark simulations. +Additinoally, there are a number changes to the soccer rules enforced in +the simulator. More details about changes in this release follows: +* Updates to charging foul model and other fouls: +An initial implementation of the charging foul model is documented at +http://www.acso.uneb.br/bahiart/uploads/Main/FoulModel2016.pdf. The +following are some updates to the charging foul model which will hopefully +be added to the documentation of the charging foul model soon: + + - Rules for charging involving agents' relative positions to the ball + are only active for agents within 1 meter (ChargingMaxBallRulesDist) of + the ball + - Players are immune to committing a charging foul after touching the + ball for 1 second (ChargingImmunityTime) + - There is no maximum distance from the ball that a charging foul will + be called -- charging fouls can be called at any position on or off the + field + - After a player is moved/beamed by the server no charging fouls in any + collision involving that agent will be called for 1 second after the + player is moved. + - There is no longer a concept of ChargingMinCollisionPoint. Instead a + threshold of velocity exerted in a collision (ChargingMinCollisionSpeed + with a default value of 0.2) must be exceeded for a charging foul to be + called. This value is calculated as a cross product between an agent's + velocity vector and the normalized vector from the agent to the average of + the opponent agent and collision point. + +General foul changes: + + - For visualization purposes after any foul (charging, crowding, illegal + defense, touching, incapable) agents are lifted up in the air for + FoulHoldTime (default 0.5 seconds) before being beamed to the sideline. + - Touching fouls in groups of three or more are no longer called on + goalies (a goalie's teammate will be called for a touching foul instead). + + +* New kick rules: + +The following is a summary of the rule changes for kicking: + - A player taking a kick can't touch the ball more than once before + another player touches the ball -- touching the ball more than once + results in an indirect free kick for the opponent (same as in human + soccer). Note that a goal kick doesn't count as having been taken until + the ball leaves the penalty area + - You can never score an own goal directly off your own kick -- the + result of such an own goal is a corner kick for the opponent (same as in + human soccer). + - Kick-ins are indirect (same as throw-ins in human soccer). + - Goal kicks and corner kicks are direct (same as in human soccer). + - Scoring a goal directly from an indirect kick results in a goal kick + for the opponent (same as in human soccer). + - Kickoffs are still indirect and the ball must be touched outside the + center circle, or an opponent must first touch the ball, before the team + taking a kickoff can score (in human soccer kickoffs are direct, but this + artificial rule is needed to prevent "kickoff taking contests"). + - Players within KickRepelDist (defined in naosoccersim.rb) of the ball + when it is placed for a kick are moved back to a position exactly + KickRepelDist from the ball to prevent players from accidentally touching + the ball and losing a kick if the ball is placed right underneath their + current position on the field. + - Two new direct kick playmodes have been added + (direct_free_kick_[left|right]). While there is no plan to use these + playmodes at this year's competition, shift+L and shift+R key bindings for + them have been added to rcssmonitor3d and roboviz. + + +* Keepaway mode: + +The keepaway playmode sets the playmode to GameOver if a player on the +right team touches the ball or if the ball leaves a predefined keepaway +area. During keepaway no charging fouls will be called on agents on the +right team (the team trying to take the ball). + +The keepaway mode adds the following parameters to naosoccersim.rb: + +// if in keepaway mode +Keepaway +// center X value of keepaway box +KeepawayCenterX +// center Y value of keepaway box +KeepawayCenterY +// length of keepaway box +KeepawayLength +// width of keepaway box +KeepawayWidth +// reduction rate of length of keepaway box per minute +KeepawayLengthReductionRate +// reduction rate of width of keepaway box per minute +KeepawayWidthReductionRate + + +* Blocking of say messages with illegal characters: + +While most agents have been sending legal say messages, there have been a +few instances of agents sending say messages with illegal characters. The +server now throws out say messages containing illegal characters (space, +parenthesis, and those outside the range [0x20-0x7E]). The server also +prints an error message containing the illegal say message and the agent +who said it. When running in sync mode the proxy still needs to be used +to protect against bad say messages that break parsing (or really any +unparseable messages sent to the server) -- this change only throws out +say messages with illegal that were able to be parsed. + + +* Plugin for drawing objects in roboviz: + +You can activate a new plugin (rvdraw) within rcssserver3d allowing it to +draw objects in roboviz by using the "-DRVDRAW=ON" command line argument +when running cmake before building rcssserver3d. The plugin likely only +works in linux which is why it isn't enabled by default. Currently this +plugin is set to draw debugging information for the charging foul model, +but one might find it useful to add their own code to the server to draw +things in roboviz. + +After rcssserver3d is compiled with the rvdraw plugin enabled use the +following command line argument when running the server to have it send +draw commands to roboviz: +rcssserver3d --rvdraw-host <roboviz_host_machine> + + You can get the package on the Simspark page on SourceForge at http://sourceforge.net/projects/simspark/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2016-05-31 20:58:25
|
Revision: 407 http://sourceforge.net/p/simspark/svn/407 Author: hedayat Date: 2016-05-31 20:58:23 +0000 (Tue, 31 May 2016) Log Message: ----------- Prepare simspark 0.3.0 release Modified Paths: -------------- trunk/spark/CMakeLists.txt trunk/spark/NEWS trunk/spark/RELEASE Modified: trunk/spark/CMakeLists.txt =================================================================== --- trunk/spark/CMakeLists.txt 2016-05-29 05:32:35 UTC (rev 406) +++ trunk/spark/CMakeLists.txt 2016-05-31 20:58:23 UTC (rev 407) @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 2.6) project(simspark CXX C) -set(PACKAGE_VERSION "0.2.4") +set(PACKAGE_VERSION "0.3.0") ########## check for headerfiles/libraries ########## include(CheckIncludeFile) @@ -156,13 +156,13 @@ set(SALT_SO_VERSION 1) set(SALT_VERSION ${SALT_SO_VERSION}.0.0) set(ZEITGEIST_SO_VERSION 3) -set(ZEITGEIST_VERSION ${ZEITGEIST_SO_VERSION}.1.4) +set(ZEITGEIST_VERSION ${ZEITGEIST_SO_VERSION}.2.0) set(OXYGEN_SO_VERSION 6) -set(OXYGEN_VERSION ${OXYGEN_SO_VERSION}.0.1) +set(OXYGEN_VERSION ${OXYGEN_SO_VERSION}.1.0) set(KEROSIN_SO_VERSION 2) -set(KEROSIN_VERSION ${KEROSIN_SO_VERSION}.1.1) +set(KEROSIN_VERSION ${KEROSIN_SO_VERSION}.2.0) set(SPARK_SO_VERSION 1) -set(SPARK_VERSION ${SPARK_SO_VERSION}.0.1) +set(SPARK_VERSION ${SPARK_SO_VERSION}.1.0) set(CARBON_SO_VERSION 1) set(CARBON_VERSION ${CARBON_SO_VERSION}.0.0) set(RCSSNET_SO_VERSION 0) Modified: trunk/spark/NEWS =================================================================== --- trunk/spark/NEWS 2016-05-29 05:32:35 UTC (rev 406) +++ trunk/spark/NEWS 2016-05-31 20:58:23 UTC (rev 407) @@ -1,3 +1,18 @@ +[0.3.0] +This release comes with a new library: carbon. The carbon library contains a +gui-framework and a simulation-framework which wraps simspark using qt. +Its main features are: + - Offering a graphical user interface which can be extended + by visual and functional plugins. The plugins can be used + to write easy-to-use interfaces to simspark simulations. + - Creating, managing and executing simspark-simulations + alongside with any additional threads and processes. + - The gui can be altered flexibly. Its main window with + "attachment points" is loaded from a shared library, and + its used plugins are loaded from shared libraries too. + Plugins with visual representation can be attached to the + Gui. + [0.2.4] Simspark 0.2.4 is ready. This release is mostly a bug fix and compile fix release for RoboCup 2013. New exciting changes are pending, but will be Modified: trunk/spark/RELEASE =================================================================== --- trunk/spark/RELEASE 2016-05-29 05:32:35 UTC (rev 406) +++ trunk/spark/RELEASE 2016-05-31 20:58:23 UTC (rev 407) @@ -1,13 +1,18 @@ -RELEASE News of simspark-0.2.4 +RELEASE News of simspark-0.3.0 -Simspark 0.2.4 is ready. This release is mostly a bug fix and compile fix -release for RoboCup 2013. New exciting changes are pending, but will be -released in Simspark 0.3.0 very soon. The most considerable change in this -release is the possibility of sending parameters to the SceneEffector, which -is required for Heterogeneous robots functionality. +This release comes with a new library: carbon. The carbon library contains a +gui-framework and a simulation-framework which wraps simspark using qt. +Its main features are: + - Offering a graphical user interface which can be extended + by visual and functional plugins. The plugins can be used + to write easy-to-use interfaces to simspark simulations. + - Creating, managing and executing simspark-simulations + alongside with any additional threads and processes. + - The gui can be altered flexibly. Its main window with + "attachment points" is loaded from a shared library, and + its used plugins are loaded from shared libraries too. + Plugins with visual representation can be attached to the + Gui. -Additionally, a paper about recent changes to Simspark/Rcssserver3d which is -mostly written by Yuan Xu is available in SimSpark SVN repository. - You can get the package on the Simspark page on SourceForge at http://sourceforge.net/projects/simspark/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pat...@us...> - 2016-05-29 05:32:37
|
Revision: 406 http://sourceforge.net/p/simspark/svn/406 Author: patmac369 Date: 2016-05-29 05:32:35 +0000 (Sun, 29 May 2016) Log Message: ----------- Adding additional directory to seach for ODE libraries so that they can be found in the default location on Ubuntu 16.04. Modified Paths: -------------- trunk/spark/cmake/FindODE.cmake Modified: trunk/spark/cmake/FindODE.cmake =================================================================== --- trunk/spark/cmake/FindODE.cmake 2016-05-29 05:27:56 UTC (rev 405) +++ trunk/spark/cmake/FindODE.cmake 2016-05-29 05:32:35 UTC (rev 406) @@ -97,6 +97,7 @@ ${ODE_CONFIG_PREFIX}/lib /usr/lib /usr/lib64 + /usr/lib/x86_64-linux-gnu /usr/local/lib $ENV{ODE_HOME}/lib C:/library/ode/lib/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pat...@us...> - 2016-05-29 05:27:59
|
Revision: 405 http://sourceforge.net/p/simspark/svn/405 Author: patmac369 Date: 2016-05-29 05:27:56 +0000 (Sun, 29 May 2016) Log Message: ----------- Adding changes for the RoboCup 2016 competition. Additions are the following: - Updated and revised foul model - Most free kicks are now indirect and direct_free_kick playmodes are added - Keepaway mode - Say messages with illegal characters are thrown out - Plugin for sending draw commands to roboviz (rvdraw) Modified Paths: -------------- trunk/rcssserver3d/CMakeLists.txt trunk/rcssserver3d/cmake/FindODE.cmake trunk/rcssserver3d/plugin/soccer/CMakeLists.txt trunk/rcssserver3d/plugin/soccer/agentcollisionhandler/agentcollisionhandler.cpp trunk/rcssserver3d/plugin/soccer/agentstate/agentstate.h trunk/rcssserver3d/plugin/soccer/ballstateaspect/ballstateaspect.cpp trunk/rcssserver3d/plugin/soccer/ballstateaspect/ballstateaspect.h trunk/rcssserver3d/plugin/soccer/internalsoccermonitor/internalsoccerinput.cpp trunk/rcssserver3d/plugin/soccer/internalsoccermonitor/internalsoccerinput.h trunk/rcssserver3d/plugin/soccer/sayeffector/sayeffector.cpp trunk/rcssserver3d/plugin/soccer/soccerbase/soccerbase.cpp trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.h trunk/rcssserver3d/plugin/soccer/soccertypes.h trunk/rcssserver3d/plugin/soccer/trainercommandparser/trainercommandparser.cpp trunk/rcssserver3d/plugin/soccermonitor/soccerinput.cpp trunk/rcssserver3d/plugin/soccermonitor/soccerinput.h trunk/rcssserver3d/rcssmonitor3d/soccerbindings.rb trunk/rcssserver3d/rcssserver3d/main.cpp trunk/rcssserver3d/rcssserver3d/naosoccersim.rb Added Paths: ----------- trunk/rcssserver3d/plugin/soccer/rvdraw/ trunk/rcssserver3d/plugin/soccer/rvdraw/rvdraw.cpp trunk/rcssserver3d/plugin/soccer/rvdraw/rvdraw.h Modified: trunk/rcssserver3d/CMakeLists.txt =================================================================== --- trunk/rcssserver3d/CMakeLists.txt 2015-09-12 01:48:59 UTC (rev 404) +++ trunk/rcssserver3d/CMakeLists.txt 2016-05-29 05:27:56 UTC (rev 405) @@ -1,8 +1,13 @@ cmake_minimum_required(VERSION 2.6) project(rcssserver3d CXX C) -set(PACKAGE_VERSION "0.6.10") +set(PACKAGE_VERSION "0.6.11") +option(RVDRAW "Enable roboviz drawings" OFF) +if (RVDRAW) + add_definitions(-DRVDRAW) +endif (RVDRAW) + ########## check for headerfiles/libraries ########## include(CheckIncludeFile) check_include_file("sys/socket.h" HAVE_SYS_SOCKET_H) @@ -26,7 +31,7 @@ find_package(Spark REQUIRED) find_package(Freetype REQUIRED) -find_package(Boost REQUIRED system) +find_package(Boost REQUIRED system regex) find_package(SDL REQUIRED) find_package(DevIL REQUIRED) find_package(ODE REQUIRED) Modified: trunk/rcssserver3d/cmake/FindODE.cmake =================================================================== --- trunk/rcssserver3d/cmake/FindODE.cmake 2015-09-12 01:48:59 UTC (rev 404) +++ trunk/rcssserver3d/cmake/FindODE.cmake 2016-05-29 05:27:56 UTC (rev 405) @@ -97,6 +97,7 @@ ${ODE_CONFIG_PREFIX}/lib /usr/lib /usr/lib64 + /usr/lib/x86_64-linux-gnu /usr/local/lib $ENV{ODE_HOME}/lib C:/library/ode/lib/ Modified: trunk/rcssserver3d/plugin/soccer/CMakeLists.txt =================================================================== --- trunk/rcssserver3d/plugin/soccer/CMakeLists.txt 2015-09-12 01:48:59 UTC (rev 404) +++ trunk/rcssserver3d/plugin/soccer/CMakeLists.txt 2016-05-29 05:27:56 UTC (rev 405) @@ -51,6 +51,11 @@ rcs3dmonitor/rcs3dmonitor.h ) +if (RVDRAW) + list(APPEND soccer_LIB_HDRS rvdraw/rvdraw.h) +endif (RVDRAW) + + set(soccer_LIB_SRCS export.cpp agentstate/agentstate.cpp @@ -131,6 +136,11 @@ rcs3dmonitor/rcs3dmonitor_c.cpp ) +if (RVDRAW) + list(APPEND soccer_LIB_SRCS rvdraw/rvdraw.cpp) +endif (RVDRAW) + + include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${FREETYPE_INCLUDE_DIRS} ${IL_INCLUDE_DIR}) Modified: trunk/rcssserver3d/plugin/soccer/agentcollisionhandler/agentcollisionhandler.cpp =================================================================== --- trunk/rcssserver3d/plugin/soccer/agentcollisionhandler/agentcollisionhandler.cpp 2015-09-12 01:48:59 UTC (rev 404) +++ trunk/rcssserver3d/plugin/soccer/agentcollisionhandler/agentcollisionhandler.cpp 2016-05-29 05:27:56 UTC (rev 405) @@ -7,6 +7,8 @@ { } +#include <ode/ode.h> + void AgentCollisionHandler::HandleCollision(boost::shared_ptr<Collider> collidee, GenericContact& contact) { if (!mAgentState.get()) @@ -44,6 +46,14 @@ myGroup->clear(); mAgentState->SetTouchGroup(otherGroup); } + dContact& ODEContact = (dContact&) contact; + //GetLog()->Error() << "(AgentCollisionHandler) contact pos " << ODEContact.geom.pos[0]<<","<< ODEContact.geom.pos[1] << ","<< ODEContact.geom.pos[2] << "\n"; + mAgentState->mCollisionPos.x() = ODEContact.geom.pos[0]; + mAgentState->mCollisionPos.y() = ODEContact.geom.pos[1]; + mAgentState->mCollisionPos.z() = ODEContact.geom.pos[2]; + other->mCollisionPos.x() = ODEContact.geom.pos[0]; + other->mCollisionPos.y() = ODEContact.geom.pos[1]; + other->mCollisionPos.z() = ODEContact.geom.pos[2]; } } Modified: trunk/rcssserver3d/plugin/soccer/agentstate/agentstate.h =================================================================== --- trunk/rcssserver3d/plugin/soccer/agentstate/agentstate.h 2015-09-12 01:48:59 UTC (rev 404) +++ trunk/rcssserver3d/plugin/soccer/agentstate/agentstate.h 2016-05-29 05:27:56 UTC (rev 405) @@ -122,6 +122,9 @@ /** Set the current touch group */ void SetTouchGroup(boost::shared_ptr<TouchGroup> group); + /** Point at which collision with another agent occurred */ + salt::Vector3f mCollisionPos; + protected: /** team index */ TTeamIndex mTeamIndex; Modified: trunk/rcssserver3d/plugin/soccer/ballstateaspect/ballstateaspect.cpp =================================================================== --- trunk/rcssserver3d/plugin/soccer/ballstateaspect/ballstateaspect.cpp 2015-09-12 01:48:59 UTC (rev 404) +++ trunk/rcssserver3d/plugin/soccer/ballstateaspect/ballstateaspect.cpp 2016-05-29 05:27:56 UTC (rev 405) @@ -49,6 +49,13 @@ { } + +bool BallStateAspect::GetCollidingAgents(list<boost::shared_ptr<AgentAspect> >& agents) +{ + agents = mCollidingAgents; + return agents.size() > 0; +} + bool BallStateAspect::GetLastCollidingAgent(boost::shared_ptr<AgentAspect>& agent, TTime& time) { @@ -67,10 +74,11 @@ return (agent.get() != 0); } -void BallStateAspect::UpdateLastCollidingAgent() +void BallStateAspect::UpdateCollidingAgents() { mCollidingWithLeftTeamAgent = false; mCollidingWithRightTeamAgent = false; + mCollidingAgents = list<boost::shared_ptr<AgentAspect> >(); // get a list of agents that collided with the ball since the last // update of the recorder and remember the first returned node as @@ -96,6 +104,7 @@ " get AgentState from an AgentAspect\n"; } else { + mCollidingAgents.push_back(agent); TTeamIndex team = agentState->GetTeamIndex(); if (team == TI_LEFT) { mCollidingWithLeftTeamAgent = true; @@ -184,7 +193,7 @@ return; } - UpdateLastCollidingAgent(); + UpdateCollidingAgents(); UpdateBallOnField(); UpdateLastValidBallPos(); UpdateGoalState(); Modified: trunk/rcssserver3d/plugin/soccer/ballstateaspect/ballstateaspect.h =================================================================== --- trunk/rcssserver3d/plugin/soccer/ballstateaspect/ballstateaspect.h 2015-09-12 01:48:59 UTC (rev 404) +++ trunk/rcssserver3d/plugin/soccer/ballstateaspect/ballstateaspect.h 2016-05-29 05:27:56 UTC (rev 405) @@ -47,6 +47,11 @@ */ virtual void Update(float deltaTime); + /** returns list of agents colliding with the ball + */ + bool GetCollidingAgents + (std::list<boost::shared_ptr<oxygen::AgentAspect> >& agents); + /** returns the last agent that collided with the ball and the time when this happened*/ bool GetLastCollidingAgent @@ -88,10 +93,8 @@ /** reset the reference to the ball and field recorder */ virtual void OnUnlink(); - /** updates the reference to the last agent that collided with the - ball - */ - void UpdateLastCollidingAgent(); + /** updates the references to agents colliding with the ball */ + void UpdateCollidingAgents(); /** checks if the ball is on the playing field an updates the mBallOnField flag @@ -120,6 +123,9 @@ /** reference to the right goal recorder */ boost::shared_ptr<oxygen::RecorderHandler> mRightGoalRecorder; + /** list of references to agents currently colliding with the ball */ + std::list<boost::shared_ptr<oxygen::AgentAspect> > mCollidingAgents; + /** holds a reference to the last agent that collided with the ball */ boost::shared_ptr<oxygen::AgentAspect> mLastCollidingAgent; Modified: trunk/rcssserver3d/plugin/soccer/internalsoccermonitor/internalsoccerinput.cpp =================================================================== --- trunk/rcssserver3d/plugin/soccer/internalsoccermonitor/internalsoccerinput.cpp 2015-09-12 01:48:59 UTC (rev 404) +++ trunk/rcssserver3d/plugin/soccer/internalsoccermonitor/internalsoccerinput.cpp 2016-05-29 05:27:56 UTC (rev 405) @@ -61,6 +61,8 @@ //JAN scriptServer->CreateVariable("Command.FreeKickLeft", CmdFreeKickLeft); scriptServer->CreateVariable("Command.FreeKickRight", CmdFreeKickRight); + scriptServer->CreateVariable("Command.DirectFreeKickLeft", CmdDirectFreeKickLeft); + scriptServer->CreateVariable("Command.DirectFreeKickRight", CmdDirectFreeKickRight); scriptServer->CreateVariable("Command.NextCamera", CmdNextCamera); scriptServer->CreateVariable("Command.PreviousCamera", CmdPreviousCamera); @@ -255,6 +257,19 @@ } break; + case CmdDirectFreeKickLeft: + if (input.GetKeyPress()) + { + mGameState->SetPlayMode(PM_DIRECT_FREE_KICK_LEFT); + } + break; + case CmdDirectFreeKickRight: + if (input.GetKeyPress()) + { + mGameState->SetPlayMode(PM_DIRECT_FREE_KICK_RIGHT); + + } + break; case CmdKillAgentLeft: if (input.GetKeyPress()) { Modified: trunk/rcssserver3d/plugin/soccer/internalsoccermonitor/internalsoccerinput.h =================================================================== --- trunk/rcssserver3d/plugin/soccer/internalsoccermonitor/internalsoccerinput.h 2015-09-12 01:48:59 UTC (rev 404) +++ trunk/rcssserver3d/plugin/soccer/internalsoccermonitor/internalsoccerinput.h 2016-05-29 05:27:56 UTC (rev 405) @@ -56,7 +56,9 @@ //JAN CmdFreeKickLeft = CmdCameraRightGoal + 1, CmdFreeKickRight = CmdFreeKickLeft + 1, - CmdKillAgentLeft = CmdFreeKickRight + 1, + CmdDirectFreeKickLeft = CmdFreeKickRight + 1, + CmdDirectFreeKickRight = CmdDirectFreeKickLeft + 1, + CmdKillAgentLeft = CmdDirectFreeKickRight + 1, CmdKillAgentRight = CmdKillAgentLeft + 1, CmdNextCamera = CmdKillAgentRight + 1, Added: trunk/rcssserver3d/plugin/soccer/rvdraw/rvdraw.cpp =================================================================== --- trunk/rcssserver3d/plugin/soccer/rvdraw/rvdraw.cpp (rev 0) +++ trunk/rcssserver3d/plugin/soccer/rvdraw/rvdraw.cpp 2016-05-29 05:27:56 UTC (rev 405) @@ -0,0 +1,719 @@ +/* + * Copyright (C) 2011 Justin Stoecker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "rvdraw.h" +#include "soccertypes.h" + +long RVSender::uniqueIdNum; + + +/** + * sockfd = -1 on error! + * This creates a socket, which + * is then closed by the + * destructor. Do not close the + * socket! + */ +RVSender::RVSender() +{ + socketCreated = false; + sockfd = -1; + + struct addrinfo hints, *servinfo, *p_ptr; + int rv; + + char *mHost = getenv("RVDRAW_HOST"); + if (mHost == NULL) { + return; + } + + memset(&hints, 0, sizeof hints); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_DGRAM; + + if ((rv = getaddrinfo(mHost, ROBOVIS_PORT, &hints, &servinfo)) != 0) { + fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); + return; + } + + // loop through all the results and make a socket + for(p_ptr = servinfo; p_ptr != NULL; p_ptr = p_ptr->ai_next) { + if ((sockfd = socket(p_ptr->ai_family, p_ptr->ai_socktype, + p_ptr->ai_protocol)) == -1) { + perror("socket"); + continue; + } + + p = *p_ptr; + + break; + } + + if (p_ptr == NULL) { + fprintf(stderr, "failed to bind socket\n"); + freeaddrinfo(servinfo); + return; + } + + socketCreated = true; + + //freeaddrinfo(servinfo); +} + +/** + * Give a socket and addrinfo. + * Whoever created the socket is + * responsible for closing it! + */ +RVSender::RVSender(int sockfd_, struct addrinfo p_) +{ + socketCreated = false; + p = p_; + sockfd = sockfd_; +} + +RVSender::~RVSender() +{ + if (socketCreated) + close(sockfd); +} + +/* +int RVSender::getSockFD() + { + return sockfd; + } + +struct addrinfo RVSender::getP() + { + return p; + } +*/ + + +char RVSender::getTeamAgent(int uNum, int side) { + return (side == TI_LEFT ? uNum : uNum + 128) - 1; +} + +//drawing colors are uniform & team specific +//this must match the enum in rvdraw.h +void RVSender::getColor(int uNum, float &r, float &g, float &b, bool shade) { + switch(uNum) { + case 1: //red + r = 1; + g = 0; + b = 0; + break; + case 2: //orange + r = 1; + g = 0.5f; + b = 0; + break; + case 3: //yellow + r = 1; + g = 1; + b = 0; + break; + case 4: //green + r = 0; + g = 1; + b = 0; + break; + case 5: //blue-green + r = 0; + g = 1; + b = 0.5f; + break; + case 6: //light blue + r = 0; + g = 1; + b = 1; + break; + case 7: //blue + r = 0; + g = 0.5f; + b = 1; + break; + case 8: //dark blue + r = 0; + g = 0; + b = 1; + break; + case 9: //violet + r = 0.5f; + g = 0; + b = 1; + break; + case 10: //pink + r = 1; + g = 0; + b = 1; + break; + case 11: //magenta + r = 1; + g = 0; + b = 0.5f; + break; + default: + r = 0; + g = 0; + b = 0; + } + + // Get darker color + if (shade) { + r /= 2.0f; + g /= 2.0f; + b /= 2.0f; + } +} + +string RVSender::getMyId() { + return "rcss"; +} + +string RVSender::getDrawingId(const string* name) { + stringstream stream; + stream << getMyId() << '.' << *name; + return stream.str(); +} + +string RVSender::getUniqueId(long unique) { + stringstream stream; + stream << '_' << unique << '.' << getMyId(); + return stream.str(); +} + +string RVSender::getUniqueId() { + return getUniqueId(uniqueIdNum++); +} + +void RVSender::flipPolygon(float *v, int numVerts) { + /* must flip each number, there are three numbers (x, y, z) for each vertex */ + for (int i = 0; i < numVerts * 3; i++) { + v[i] = -v[i]; + } +} + +void RVSender::updateDrawings(string id, string buf) { + drawings[id] = buf; +} + + +// === Public Methods === + +void RVSender::clear() { + for (map<string,string>::iterator it = drawings.begin(); + it != drawings.end(); ++it) { + it->second = ""; + } +} + +void RVSender::refresh() { + string myId(getMyId()); + swapBuffers(&myId); +} + +void RVSender::clearStaticDrawings() { + for (long i = 0; i < uniqueIdNum; i++) { + string uniqueId = getUniqueId(i); + swapBuffers(&uniqueId); + } + uniqueIdNum = 0; +} + +void RVSender::drawCircle(string name, double x, double y, double radius, + RVSender::Color c, bool shade) { + float r, g, b; + getColor(c, r, g, b, shade); + drawCircle(name, x, y, radius, r, g, b); +} + +void RVSender::drawCircle(string name, double x, double y, double radius, float r, float g, float b) { + string id = getDrawingId(&name); + string buf = string(id); + drawCircle(x, y, radius, 3, r, g, b, &buf); + updateDrawings(id, buf); +} + +void RVSender::drawCircle(double x, double y, double radius, RVSender::Color c, bool shade) { + float r, g, b; + getColor(c, r, g, b, shade); + drawCircle(x, y, radius, r, g, b); +} + +void RVSender::drawCircle(double x, double y, double radius, float r, float g, float b) { + string id = getUniqueId(); + string buf = string(id); + drawCircle(x, y, radius, 3, r, g, b, &buf); + swapBuffers(&id); +} + +void RVSender::drawLine(string name, double x1, double y1, double x2, double y2, + RVSender::Color c, bool shade) { + float r, g, b; + getColor(c, r, g, b, shade); + drawLine(name, x1, y1, x2, y2, r, g, b); +} + +void RVSender::drawLine(string name, double x1, double y1, double x2, double y2, + float r, float g, float b) { + string id = getDrawingId(&name); + string buf = string(id); + drawLine(x1, y1, 0, x2, y2, 0, 3, r, g, b, &buf); + updateDrawings(id, buf); +} + +void RVSender::drawLine(double x1, double y1, double x2, double y2, RVSender::Color c, bool shade) { + float r, g, b; + getColor(c, r, g, b, shade); + drawLine(x1, y1, x2, y2, r, g, b); +} + +void RVSender::drawLine(double x1, double y1, double x2, double y2, float r, float g, float b) { + string id = getUniqueId(); + string buf = string(id); + drawLine(x1, y1, 0, x2, y2, 0, 3, r, g, b, &buf); + swapBuffers(&id); +} + +void RVSender::drawText(string name, string text, double x, double y, + RVSender::Color c, bool shade) { + float r, g, b; + getColor(c, r, g, b, shade); + drawText(name, text, x, y, r, g, b); +} + +void RVSender::drawText(string name, string text, double x, double y, + float r, float g, float b) { + string id = getDrawingId(&name); + string buf = string(id); + drawAnnotation(&text, x, y, 0, r, g, b, &buf); + updateDrawings(id, buf); +} + +void RVSender::drawText(string text, double x, double y, + RVSender::Color c, bool shade) { + float r, g, b; + getColor(c, r, g, b, shade); + drawText(text, x, y, r, g, b); +} + +void RVSender::drawText(string text, double x, double y, + float r, float g, float b) { + string id = getUniqueId(); + string buf = string(id); + drawAnnotation(&text, x, y, 0, r, g, b, &buf); + swapBuffers(&id); +} + +void RVSender::drawPoint(string name, double x, double y, double radius, + RVSender::Color c, bool shade) { + float r, g, b; + getColor(c, r, g, b, shade); + drawPoint(name, x, y, radius, r, g, b); +} + +void RVSender::drawPoint(string name, double x, double y, double radius, + float r, float g, float b) { + string id = getDrawingId(&name); + string buf = string(id); + drawPoint(x, y, 0, radius, r, g, b, &buf); + updateDrawings(id, buf); +} + +void RVSender::drawPoint(double x, double y, double radius, + RVSender::Color c, bool shade) { + float r, g, b; + getColor(c, r, g, b, shade); + drawPoint(x, y, radius, r, g, b); +} + +void RVSender::drawPoint(double x, double y, double radius, + float r, float g, float b) { + string id = getUniqueId(); + string buf = string(id); + drawPoint(x, y, 0, radius, r, g, b, &buf); + swapBuffers(&id); +} + +void RVSender::drawSphere(string name, double x, double y, double z, + double radius, RVSender::Color c, bool shade) { + float r, g, b; + getColor(c, r, g, b, shade); + drawSphere(name, x, y, z, radius, r, g, b); +} + +void RVSender::drawSphere(string name, double x, double y, double z, + double radius, float r, float g, float b) { + string id = getDrawingId(&name); + string buf = string(id); + drawSphere(x, y, z, radius, r, g, b, &buf); + updateDrawings(id, buf); +} + +void RVSender::drawSphere(double x, double y, double z, + double radius, RVSender::Color c, bool shade) { + float r, g, b; + getColor(c, r, g, b, shade); + drawSphere(x, y, z, radius, r, g, b); +} + +void RVSender::drawSphere(double x, double y, double z, + double radius, float r, float g, float b) { + string id = getUniqueId(); + string buf = string(id); + drawSphere(x, y, z, radius, r, g, b, &buf); + swapBuffers(&id); +} + +void RVSender::drawPolygon(string name, float *v, int numVerts, + RVSender::Color c, bool shade, float a) { + float r, g, b; + getColor(c, r, g, b, shade); + drawPolygon(name, v, numVerts, r, g, b, a); +} + +void RVSender::drawPolygon(string name, float *v, int numVerts, + float r, float g, float b, float a) { + string id = getDrawingId(&name); + string buf = string(id); + drawPolygon((float*)v, numVerts, r, g, b, a, &buf); + updateDrawings(id, buf); +} + +void RVSender::drawPolygon(float *v, int numVerts, + RVSender::Color c, bool shade, float a) { + float r, g, b; + getColor(c, r, g, b, shade); + drawPolygon(v, numVerts, r, g, b, a); +} + +void RVSender::drawPolygon(float *v, int numVerts, + float r, float g, float b, float a) { + string id = getUniqueId(); + string buf = string(id); + drawPolygon((float*)v, numVerts, r, g, b, a, &buf); + swapBuffers(&id); +} + +void RVSender::drawAgentText(string text, int uNum, int side, RVSender::Color c, bool shade) { + float r, g, b; + getColor(c, r, g, b, shade); + drawAgentText(text, uNum, side, r, g, b); +} + +void RVSender::drawAgentText(string text, int uNum, int side, float r, float g, float b) { + char teamAgent = getTeamAgent(uNum, side); + drawAgentAnnotation(&text, teamAgent, r, g, b); +} + +void RVSender::removeAgentText(int u, int s) { + char teamAgent = getTeamAgent(u, s); + removeAgentAnnotation(teamAgent); +} + +void RVSender::selectAgent(int u, int s) { + char teamAgent = getTeamAgent(u, s); + selectAgent(teamAgent); +} + +void RVSender::swapBuffers(const string* setName) { + int bufSize = -1; + unsigned char* buf = newBufferSwap(setName, &bufSize); + sendto(sockfd, buf, bufSize, 0, p.ai_addr, p.ai_addrlen); + delete[] buf; +} + +void RVSender::drawLine(float x1, float y1, float z1, float x2, float y2, float z2, float thickness, float r, float g, float b, + const string* setName) { + float pa[3] = {x1,y1,z1}; + float pb[3] = {x2,y2,z2}; + float color[3] = {r,g,b}; + + int bufSize = -1; + unsigned char* buf = newLine(pa, pb, thickness, color, setName, &bufSize); + sendto(sockfd, buf, bufSize, 0, p.ai_addr, p.ai_addrlen); + delete[] buf; +} + +void RVSender::drawCircle(float x, float y, float radius, float thickness, float r, float g, float b, const string* setName) { + float center[2] = {x,y}; + float color[3] = {r,g,b}; + + int bufSize = -1; + unsigned char* buf = newCircle(center, radius, thickness, color, setName, &bufSize); + sendto(sockfd, buf, bufSize, 0, p.ai_addr, p.ai_addrlen); + delete[] buf; +} + +void RVSender::drawSphere(float x, float y, float z, float radius, float r, float g, float b, const string* setName) { + float center[3] = {x,y,z}; + float color[3] = {r,g,b}; + + int bufSize = -1; + unsigned char* buf = newSphere(center, radius, color, setName, &bufSize); + sendto(sockfd, buf, bufSize, 0, p.ai_addr, p.ai_addrlen); + delete[] buf; +} + +void RVSender::drawPoint(float x, float y, float z, float size, float r, float g, float b, const string* setName) { + float center[3] = {x,y,z}; + float color[3] = {r,g,b}; + + //printf("Point: (%f, %f, %f)\n", x, y, z); + + int bufSize = -1; + unsigned char* buf = newPoint(center, size, color, setName, &bufSize); + sendto(sockfd, buf, bufSize, 0, p.ai_addr, p.ai_addrlen); + delete[] buf; +} + +void RVSender::drawPolygon(const float* v, int numVerts, float r, float g, float b, float a, + const string* setName) { + float color[4] = {r,g,b,a}; + + int bufSize = -1; + unsigned char* buf = newPolygon(v, numVerts, color, setName, &bufSize); + sendto(sockfd, buf, bufSize, 0, p.ai_addr, p.ai_addrlen); + delete[] buf; +} + +void RVSender::drawAnnotation(const string *txt, float x, float y, float z, + float r, float g, float b, const string *setName) +{ + float color[3] = {r,g,b}; + float point[3] = {x,y,z}; + int bufSize = -1; + unsigned char *buf = newAnnotation(txt, point, color, setName, &bufSize); + sendto(sockfd, buf, bufSize, 0, p.ai_addr, p.ai_addrlen); + delete[] buf; +} + +void RVSender::drawAgentAnnotation(const string *txt, char teamAgent, + float r, float g, float b) +{ + float color[3] = {r,g,b}; + int bufSize = -1; + unsigned char *buf = newAgentAnnotation(txt, teamAgent, color, &bufSize); + sendto(sockfd, buf, bufSize, 0, p.ai_addr, p.ai_addrlen); + delete[] buf; +} + +void RVSender::removeAgentAnnotation(char teamAgent) +{ + int bufSize = -1; + unsigned char *buf = newRemoveAgentAnnotation(teamAgent, &bufSize); + sendto(sockfd, buf, bufSize, 0, p.ai_addr, p.ai_addrlen); + delete[] buf; +} + +void RVSender::selectAgent(char teamAgent) +{ + int bufSize = -1; + unsigned char *buf = newSelectAgent(teamAgent, &bufSize); + sendto(sockfd, buf, bufSize, 0, p.ai_addr, p.ai_addrlen); + delete[] buf; +} + +// The following commands allocate memory, if you use them be sure to deallocate +// the memory later. + +unsigned char* RVSender::newBufferSwap(const string* name, int* bufSize) { + *bufSize = 3 + ((name != NULL) ? name->length() : 0); + unsigned char* buf = new unsigned char[*bufSize]; + + long i = 0; + i += writeCharToBuf(buf+i, 0); + i += writeCharToBuf(buf+i, 0); + i += writeStringToBuf(buf+i, name); + + return buf; +} + +unsigned char* RVSender::newCircle(const float* center, float radius, float thickness, + const float* color, const string* setName, int* bufSize) { + + *bufSize = 30 + ((setName != NULL) ? setName->length() : 0); + unsigned char* buf = new unsigned char[*bufSize]; + + long i = 0; + i += writeCharToBuf(buf+i, 1); + i += writeCharToBuf(buf+i, 0); + i += writeFloatToBuf(buf+i, center[0]); + i += writeFloatToBuf(buf+i, center[1]); + i += writeFloatToBuf(buf+i, radius); + i += writeFloatToBuf(buf+i, thickness); + i += writeColorToBuf(buf+i, color, 3); + i += writeStringToBuf(buf+i, setName); + + return buf; +} + +unsigned char* RVSender::newLine(const float* a, const float* b, float thickness, + const float* color, const string* setName, int* bufSize) { + + *bufSize = 48 + ((setName != NULL) ? setName->length() : 0); + unsigned char* buf = new unsigned char[*bufSize]; + + long i = 0; + i += writeCharToBuf(buf+i, 1); + i += writeCharToBuf(buf+i, 1); + i += writeFloatToBuf(buf+i, a[0]); + i += writeFloatToBuf(buf+i, a[1]); + i += writeFloatToBuf(buf+i, a[2]); + i += writeFloatToBuf(buf+i, b[0]); + i += writeFloatToBuf(buf+i, b[1]); + i += writeFloatToBuf(buf+i, b[2]); + i += writeFloatToBuf(buf+i, thickness); + i += writeColorToBuf(buf+i, color, 3); + i += writeStringToBuf(buf+i, setName); + + return buf; +} + +unsigned char* RVSender::newPoint(const float* p, float size, const float* color, + const string* setName, int* bufSize) { + + *bufSize = 30 + ((setName != NULL) ? setName->length() : 0); + unsigned char* buf = new unsigned char[*bufSize]; + + long i = 0; + i += writeCharToBuf(buf+i, 1); + i += writeCharToBuf(buf+i, 2); + i += writeFloatToBuf(buf+i, p[0]); + i += writeFloatToBuf(buf+i, p[1]); + i += writeFloatToBuf(buf+i, p[2]); + i += writeFloatToBuf(buf+i, size); + i += writeColorToBuf(buf+i, color, 3); + i += writeStringToBuf(buf+i, setName); + + return buf; +} + +unsigned char* RVSender::newSphere(const float* p, float radius, const float* color, + const string* setName, int* bufSize) { + + *bufSize = 30 + ((setName != NULL) ? setName->length() : 0); + unsigned char* buf = new unsigned char[*bufSize]; + + long i = 0; + i += writeCharToBuf(buf+i, 1); + i += writeCharToBuf(buf+i, 3); + i += writeFloatToBuf(buf+i, p[0]); + i += writeFloatToBuf(buf+i, p[1]); + i += writeFloatToBuf(buf+i, p[2]); + i += writeFloatToBuf(buf+i, radius); + i += writeColorToBuf(buf+i, color, 3); + i += writeStringToBuf(buf+i, setName); + + return buf; +} + +unsigned char* RVSender::newPolygon(const float* v, int numVerts, const float* color, + const string* setName, int* bufSize) { + + *bufSize = 18 * numVerts + 8 + ((setName != NULL) ? setName->length() : 0); + unsigned char* buf = new unsigned char[*bufSize]; + + long i = 0; + i += writeCharToBuf(buf+i, 1); + i += writeCharToBuf(buf+i, 4); + i += writeCharToBuf(buf+i, numVerts); + i += writeColorToBuf(buf+i, color, 4); + + for (int j = 0; j < numVerts; j++) { + i += writeFloatToBuf(buf+i, v[j*3+0]); + i += writeFloatToBuf(buf+i, v[j*3+1]); + i += writeFloatToBuf(buf+i, v[j*3+2]); + } + + i += writeStringToBuf(buf+i, setName); + + return buf; +} + +unsigned char* RVSender::newAnnotation(const string *txt, const float *p, const float* color, + const string* setName, int* bufSize) { + + *bufSize = 25 + ((setName != NULL) ? setName->length() : 0) + + ((txt != NULL) ? txt->length(): 0); + unsigned char* buf = new unsigned char[*bufSize]; + + long i = 0; + i += writeCharToBuf(buf+i, 2); + i += writeCharToBuf(buf+i, 0); + i += writeFloatToBuf(buf+i, p[0]); + i += writeFloatToBuf(buf+i, p[1]); + i += writeFloatToBuf(buf+i, p[2]); + i += writeColorToBuf(buf+i, color, 3); + i += writeStringToBuf(buf+i, txt); + i += writeStringToBuf(buf+i, setName); + + return buf; +} + +unsigned char* RVSender::newAgentAnnotation(const string *txt, const char teamAgent, const float* color, int* bufSize) { + + *bufSize = 7 + ((txt != NULL) ? txt->length(): 0); + unsigned char* buf = new unsigned char[*bufSize]; + + long i = 0; + i += writeCharToBuf(buf+i, 2); + i += writeCharToBuf(buf+i, 1); + i += writeCharToBuf(buf+i, teamAgent); + i += writeColorToBuf(buf+i, color, 3); + i += writeStringToBuf(buf+i, txt); + + return buf; +} + +unsigned char* RVSender::newRemoveAgentAnnotation(const char teamAgent, int* bufSize) { + + *bufSize = 3; + unsigned char* buf = new unsigned char[*bufSize]; + + long i = 0; + i += writeCharToBuf(buf+i, 2); + i += writeCharToBuf(buf+i, 2); + i += writeCharToBuf(buf+i, teamAgent); + + return buf; +} + +unsigned char* RVSender::newSelectAgent(const char teamAgent, int* bufSize) { + + *bufSize = 3; + unsigned char* buf = new unsigned char[*bufSize]; + + long i = 0; + i += writeCharToBuf(buf+i, 3); + i += writeCharToBuf(buf+i, 0); + i += writeCharToBuf(buf+i, teamAgent); + + return buf; +} + +/* +int main() + { + RVSender send = RVSender(); + string str = string("thing"); + send.drawPoint(1, 1, 1, 4, 1, 0, 0, &str); + send.swapBuffers(&str); + } +//*/ + Added: trunk/rcssserver3d/plugin/soccer/rvdraw/rvdraw.h =================================================================== --- trunk/rcssserver3d/plugin/soccer/rvdraw/rvdraw.h (rev 0) +++ trunk/rcssserver3d/plugin/soccer/rvdraw/rvdraw.h 2016-05-29 05:27:56 UTC (rev 405) @@ -0,0 +1,301 @@ +#ifndef RVDRAW_H +#define RVDRAW_H + +/* + * Copyright (C) 2011 Justin Stoecker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include <cstdio> +#include <cstring> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <errno.h> +#include <string.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <netdb.h> +#include <string> +#include <math.h> +#include <map> +#include <boost/lexical_cast.hpp> +#include <sstream> +#include <iomanip> + +#define ROBOVIS_PORT "32769" + +//class RVSender; + +//RVSender* pRVSender; + +using namespace std; + +//extern string mRVDrawHost; + +inline int writeCharToBuf(unsigned char* buf, unsigned char value) { + *buf = value; + return 1; +} + +inline int writeFloatToBuf(unsigned char* buf, float value) { + char temp[20]; + sprintf(temp, "%6f", value); + memcpy(buf, temp, 6); + return 6; +} + +inline int writeColorToBuf(unsigned char* buf, const float* color, int channels) { + int i; + for (i = 0; i < channels; i++) + writeCharToBuf(buf+i, (unsigned char)(color[i]*255)); + return i; +} + +inline int writeStringToBuf(unsigned char* buf, const string* text) { + long i = 0; + if (text != NULL) + i += text->copy((char*)buf+i, text->length(), 0); + i += writeCharToBuf(buf+i, 0); + return i; +} + +//for the drawings map +struct DrawObject { + string id; + string buf; +}; + +class RVSender +{ +private: + static long uniqueIdNum; + map<string, string> drawings; + char getTeamAgent(int uNum, int side); //for AgentAnnotation commands + void getColor(int uNum, float &r, float &g, float &b, bool shade=false); + string getMyId(); + string getDrawingId(const string* name); + string getUniqueId(long unique); + string getUniqueId(); + void flipPolygon(float *v, const int numVerts); //for agents on SIDE_RIGHT + void updateDrawings(string id, string buf); + + int sockfd; + struct addrinfo p; + bool socketCreated; + + unsigned char* newBufferSwap(const string* name, int* bufSize); + unsigned char* newCircle(const float* center, + float radius, float thickness, + const float* color, + const string* setName, + int *bufSize); + unsigned char* newLine(const float* a, + const float* b, + float thickness, + const float* color, + const string* setName, + int* bufSize); + unsigned char* newPoint(const float* p, + float size, + const float* color, + const string* setName, + int* bufSize); + unsigned char* newSphere(const float* p, + float radius, + const float* color, + const string* setName, + int* bufSize); + unsigned char* newPolygon(const float* v, + int numVerts, + const float* color, + const string* setName, + int* bufSize); + unsigned char* newAnnotation(const string *txt, + const float *p, + const float* color, + const string* setName, + int* bufSize); + unsigned char* newAgentAnnotation(const string *txt, + const char teamAgent, + const float* color, + int* bufSize); + unsigned char* newRemoveAgentAnnotation(const char teamAgent, + int* bufSize); + unsigned char* newSelectAgent(const char teamAgent, + int* bufSize); + +public: + RVSender(); + RVSender(int sockfd_, struct addrinfo p); + ~RVSender(); + + inline int getSockFD() { + return sockfd; + } + inline struct addrinfo getP() { + return p; + } + + //this must match the switch in getColor. See rvdraw.cc before changing + enum Color { + RED = 1, ORANGE = 2, YELLOW = 3, GREEN = 4, + BLUEGREEN = 5, LIGHTBLUE = 6, BLUE = 7, DARKBLUE = 8, + VIOLET = 9, PINK = 10, MAGENTA = 11 + }; + + + /* + * These draw commands support animation. + * + * Every time a draw command is called, a map is updated with + * key = string name (the first argument to each of these commands), and + * value = the draw command's buffer (no need to understand that part). + * + * Call refresh() to write these buffers to the screen. + * + * Call clear() to erase what's in the buffers. That allows old shapes to be removed from the + * screen and prevents clutter. It allows you to know what your agents are thinking right now. + * + * It's important to give shapes unique a unique 'string name' argument. + * A shape created with some 'string name' argument will overwrite an older shape with the + * same 'string name' argument. That's how the animation works. + * + * You can use the RVSender::Color enum to specify colors, or specify your own r,g,b values. + */ + + /* draws all elements of drawings map to the screen */ + void refresh(); + + /* erases all elements of drawings map */ + void clear(); + + void drawCircle(string name, double x, double y, double radius, + RVSender::Color c, bool shade=false); + void drawCircle(string name, double x, double y, double radius, float r, float g, float b); + + void drawLine(string name, double x1, double y1, double x2, double y2, + RVSender::Color c, bool shade=false); + void drawLine(string name, double x1, double y1, double x2, double y2, float r, float g, float b); + + void drawText(string name, string text, double x, double y, + RVSender::Color c, bool shade=false); + void drawText(string name, string text, double x, double y, float r, float g, float b); + + void drawPoint(string name, double x, double y, double radius, + RVSender::Color c, bool shade=false); + void drawPoint(string name, double x, double y, double radius, float r, float g, float b); + + void drawSphere(string name, double x, double y, double z, double radius, + RVSender::Color c, bool shade=false); + void drawSphere(string name, double x, double y, double z, double radius, + float r, float g, float b); + + /* format your *v array as {x1, y1, z1, x2, y2, z2, ...} */ + /* the 'a' arguments are for alpha channel (transparency) */ + void drawPolygon(string name, float *v, int numVerts, RVSender::Color c, + bool shade=false, float a=1.0f); + void drawPolygon(string name, float *v, int numVerts, float r, float g, float b, float a=1.0f); + + /* + * These draw commands are for static shapes that remain on the screen indefinitely, + * or until you call clearStaticDrawings() to remove all of them. Use that method on + * a timer to keep only a recent history of drawings on screen. + */ + + /* use this to erase all static shapes. */ + void clearStaticDrawings(); + + void drawCircle(double x, double y, double radius, + RVSender::Color c, bool shade=false); + void drawCircle(double x, double y, double radius, float r, float g, float b); + + void drawLine(double x1, double y1, double x2, double y2, + RVSender::Color c, bool shade=false); + void drawLine(double x1, double y1, double x2, double y2, float r, float g, float b); + + //these two are causing strange errors in roboviz + /*void drawText(string text, double x, double y, + RVSender::Color c, bool shade=false); + void drawText(string text, double x, double y, float r, float g, float b);*/ + + void drawPoint(double x, double y, double radius, + RVSender::Color c, bool shade=false); + void drawPoint(double x, double y, double radius, float r, float g, float b); + + void drawSphere(double x, double y, double z, double radius, + RVSender::Color c, bool shade=false); + void drawSphere(double x, double y, double z, double radius, + float r, float g, float b); + + void drawPolygon(float *v, int numVerts, RVSender::Color c, bool shade=false, float a=1.0f); + void drawPolygon(float *v, int numVerts, float r, float g, float b, float a=1.0f); + + /* + * These agentText commands work differently. No animation involved, you don't need + * the refresh() and clear() commands for these to work. No unique 'string name' either. + */ + + void drawText(string text, double x, double y, + RVSender::Color c, bool shade=false); + void drawText(string text, double x, double y, float r, float g, float b); + + /* draw to player on team "side", with uniform "uNum" */ + void drawAgentText(string text, int uNum, int side, RVSender::Color c, bool shade=false); + void drawAgentText(string text, int uNum, int side, float r, float g, float b); + + /* removes text from a player */ + void removeAgentText(int u, int s); + + void selectAgent(int u, int s); + + + /* old draw commands, don't support the animation */ + void swapBuffers(const string* setName); + void drawLine(float x1, float y1, float z1, + float x2, float y2, float z2, + float thickness, + float r, float g, float b, + const string* setName); + void drawCircle(float x, float y, float radius, + float thickness, + float r, float g, float b, + const string* setName); + void drawSphere(float x, float y, float z, + float radius, + float r, float g, float b, + const string* setName); + void drawPoint(float x, float y, float z, + float size, + float r, float g, float b, + const string *setName); + void drawPolygon(const float *v, int numVerts, + float r, float g, float b, + float a, + const string *setName); + void drawAnnotation(const string *txt, + float x, float y, float z, + float r, float g, float b, + const string *setName); + void drawAgentAnnotation(const string *txt, + char teamAgent, + float r, float g, float b); + void removeAgentAnnotation(char teamAgent); + void selectAgent(char teamAgent); +}; + +#endif // !RVDRAW_H Modified: trunk/rcssserver3d/plugin/soccer/sayeffector/sayeffector.cpp =================================================================== --- trunk/rcssserver3d/plugin/soccer/sayeffector/sayeffector.cpp 2015-09-12 01:48:59 UTC (rev 404) +++ trunk/rcssserver3d/plugin/soccer/sayeffector/sayeffector.cpp 2016-05-29 05:27:56 UTC (rev 405) @@ -25,6 +25,7 @@ #include <agentstate/agentstate.h> #include <soccerbase/soccerbase.h> #include <soccerruleaspect/soccerruleaspect.h> +#include <boost/regex.hpp> using namespace boost; using namespace oxygen; @@ -76,12 +77,24 @@ sayAction->GetMessage(mMessage); ifText=true; - // If " ", "(" or ")" are in mMessage, return false - if (mMessage.find_first_of("() ") != std::string::npos) + // If characters outside allowed value range or " ", "(" or ")" are in mMessage, return false + boost::regex allowedCharacterRange("[\x20-\x7E]*"); + if (!boost::regex_match(mMessage, allowedCharacterRange) + || mMessage.find_first_of("() ") != std::string::npos) { - GetLog()->Debug() + std::string teamName = mAgentState->GetTeamIndex() == TI_RIGHT ? "Right" : "Left"; + + // get the GameStateAspect + boost::shared_ptr<GameStateAspect> mGameState = dynamic_pointer_cast<GameStateAspect> + (SoccerBase::GetControlAspect(*this, "GameStateAspect")); + if (mGameState.get() != 0) + { + teamName = mGameState->GetTeamName(mAgentState->GetTeamIndex()); + } + GetLog()->Error() << "(SayEffector) found illegal character. Ignoring message [" - << mMessage << "]\n"; + << mMessage << "] from " << teamName << " " + << mAgentState->GetUniformNumber() << "\n"; ifText=false; Modified: trunk/rcssserver3d/plugin/soccer/soccerbase/soccerbase.cpp =================================================================== --- trunk/rcssserver3d/plugin/soccer/soccerbase/soccerbase.cpp 2015-09-12 01:48:59 UTC (rev 404) +++ trunk/rcssserver3d/plugin/soccer/soccerbase/soccerbase.cpp 2016-05-29 05:27:56 UTC (rev 405) @@ -608,6 +608,12 @@ case PM_FREE_KICK_RIGHT: return STR_PM_FREE_KICK_RIGHT; + case PM_DIRECT_FREE_KICK_LEFT: + return STR_PM_DIRECT_FREE_KICK_LEFT; + + case PM_DIRECT_FREE_KICK_RIGHT: + return STR_PM_DIRECT_FREE_KICK_RIGHT; + default: return STR_PM_Unknown; }; Modified: trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp =================================================================== --- trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp 2015-09-12 01:48:59 UTC (rev 404) +++ trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp 2016-05-29 05:27:56 UTC (rev 405) @@ -32,6 +32,10 @@ #include <agentstate/agentstate.h> #include <algorithm> +#ifdef RVDRAW +#include <rvdraw/rvdraw.h> +#endif // RVDRAW + using namespace oxygen; using namespace boost; using namespace std; @@ -40,11 +44,15 @@ SoccerRuleAspect::SoccerRuleAspect() : SoccerControlAspect(), mBallRadius(0.111), + mAgentRadius(0.4), mGoalPauseTime(3), mKickInPauseTime(1), mHalfTime(2.25 * 60), + mDropBallTime(15), mFreeKickDist(9.15), mFreeKickMoveDist(15.15), + mRepelPlayersForKick(false), + mKickRepelDist(0.5), mGoalKickDist(1.0), mAutomaticKickOff(false), mWaitBeforeKickOff(1.0), @@ -54,32 +62,69 @@ mAutoKickOffTimeOrigin(1000000.0), mSayMsgSize(20), mAudioCutDist(50.0), - mFirstCollidingAgent(true), - mNotOffside(false), - mLastModeWasPlayOn(false), - mUseOffside(true), - mUseCharging(false), - mChargingMinSpeed(0.2), - mChargingMinBallDist(0.2), - mChargingMaxOppSpeedAngle(90), - mChargingIllInterceptMinMutualSpeedAngel(70), - mDropBallTime(15), mNotStandingMaxTime(1000), // max time player may be sitted or laying down before being repositioned + mGroundMaxTime(1000), // max time player may be on the ground before being repositioned mGoalieNotStandingMaxTime(1000), // max time goalie may be sitted or laying down before being repositioned - mGroundMaxTime(1000), // max time player may be on the ground before being repositioned mGoalieGroundMaxTime(1000), // max time goalie (pl number 1) may be on the ground before being repositioned - mMaxPlayersInsideOwnArea(1000), // maximum number of players of the defending team that may be inside own penalty area mMinOppDistance(0), // min dist for closest Opponent to ball in order to use repositions for 2nd, 3rd player mMin2PlDistance(0), // min dist for second closest of team before being repositioned mMin3PlDistance(0), // min dist for third closest of team before being repositioned + mMaxPlayersInsideOwnArea(1000), // maximum number of players of the defending team that may be inside own penalty area mMaxTouchGroupSize(1000), mMaxFoulTime(0.0), // maximum time allowed for a player to commit a positional foul before being repositioned - mLastKickOffKickTime(0), - mCheckKickOffKickerFoul(false), + mFirstCollidingAgent(true), + mNotOffside(false), + mLastModeWasPlayOn(false), + mUseOffside(true), + mUseCharging(false), + mChargingMinSpeed(0.2), + mChargingMinBallSpeedAngle(15), + mChargingMinDeltaDist(0.2), + mChargingMinDeltaAng(30), + mChargingImmunityTime(1), + mChargingCollisionMinTime(0.2), + mChargingMaxBallRulesDist(100), + mChargingMinCollBallDist(0.1), + mMinCollisionSpeed(0.15), + mFoulHoldTime(0.5), + mLastFreeKickKickTime(0), + mCheckFreeKickKickerFoul(false), mAllowKickOffTeamToScore(true), - mPenaltyShootout(false) + mIndirectKick(false), + mPenaltyShootout(false), + mKeepaway(false), + mKeepawayCenterX(0.0), + mKeepawayCenterY(0.0), + mKeepawayLength(20.0), + mKeepawayWidth(20.0), + mKeepawayLengthReductionRate(4.0), + mKeepawayWidthReductionRate(4.0) { mFreeKickPos = Vector3f(0.0,0.0,mBallRadius); + ResetFoulCounter(TI_LEFT); + ResetFoulCounter(TI_RIGHT); + +#ifdef RVDRAW + // Create connection for sending draw commands to roboviz + mRVSender = boost::shared_ptr<RVSender>(new RVSender()); + if (mRVSender->getSockFD() == -1) + { + mRVSender.reset(); + } +#endif // RVDRAW + + // Initialize values + for (int i = 0; i <= 11; i++) + { + for (int t = 0; t <= 2; t++) + { + playerTimeSinceLastWasMoved[i][t] = 1/.02; + for(int j = 0; j < AVERAGE_VELOCITY_MEASUREMENTS; j++) + { + playerVelocities[i][t][j] = salt::Vector3f(0,0,0); + } + } + } } SoccerRuleAspect::~SoccerRuleAspect() @@ -101,27 +146,71 @@ /* Uses only Ball and Players positions and detects overcrowind near ball and areas and players inappropriate behavior (laying on the ground or not walking for too much time) */ void -SoccerRuleAspect::AutomaticSimpleReferee(TPlayMode playMode) +SoccerRuleAspect::AutomaticSimpleReferee() { + if (mKeepaway) + { + TTime game_time = mGameState->GetTime(); + + float areaMinX = mKeepawayCenterX - mKeepawayLength/2.0 + (mKeepawayLengthReductionRate/2.0*game_time/60.0); + float areaMaxX = mKeepawayCenterX + mKeepawayLength/2.0 - (mKeepawayLengthReductionRate/2.0*game_time/60.0); + float areaMinY = mKeepawayCenterY - mKeepawayWidth/2.0 + (mKeepawayWidthReductionRate/2.0*game_time/60.0); + float areaMaxY = mKeepawayCenterY + mKeepawayWidth/2.0 - (mKeepawayWidthReductionRate/2.0*game_time/60.0); + +#ifdef RVDRAW + if (mRVSender) + { + mRVSender->clear(); + mRVSender->drawLine("KeepawayArea", areaMinX, areaMinY, areaMinX, areaMaxY, RVSender::RED); + mRVSender->drawLine("KeepawayArea", areaMinX, areaMaxY, areaMaxX, areaMaxY, RVSender::RED); + mRVSender->drawLine("KeepawayArea", areaMaxX, areaMaxY, areaMaxX, areaMinY, RVSender::RED); + mRVSender->drawLine("KeepawayArea", areaMaxX, areaMinY, areaMinX, areaMinY, RVSender::RED); + mRVSender->refresh(); + } +#endif // RVDRAW + + if (game_time > 0) + { + bool fBallOutsideKeepawayBox = false; + Vector3f ball_pos = mBallBody->GetPosition(); + if (ball_pos.x() < areaMinX + || ball_pos.x() > areaMaxX + || ball_pos.y() < areaMinY + || ball_pos.y() > areaMaxY) + { + fBallOutsideKeepawayBox = true; + } + + bool fBallCollidedWithTaker = mBallState->GetBallCollidingWithAgentTeam(TI_RIGHT); + + if (fBallOutsideKeepawayBox || fBallCollidedWithTaker) + { + mGameState->SetPlayMode(PM_GameOver); + } + } + } + + if (mPenaltyShootout && mGameState->GetPlayMode() == PM_Goal_Left) { + // Cancel penalty shootout mode now that a goal has been scored + mPenaltyShootout = false; + } + // Reset counters and do not consider players' fouls when game is not - // running + // running (when players can beam) if (mGameState->IsPaused()) { ResetFoulCounter(TI_LEFT); ResetFoulCounter(TI_RIGHT); - - if (mPenaltyShootout && mGameState->GetPlayMode() == PM_Goal_Left) { - // Cancel penalty shootout mode now that a goal has been scored - mPenaltyShootout = false; - } } else { CalculateDistanceArrays(TI_LEFT); // Calculates distance arrays for left team CalculateDistanceArrays(TI_RIGHT); // Calculates distance arrays for right team + UpdateTimesSinceLastBallTouch(); // Resets time since last ball touch for agents currently colliding with ball + AnalyseChargingFouls(); // Analyzes if there are any charging fouls AnalyseFouls(TI_LEFT); // Analyzes simple fouls for the left team AnalyseFouls(TI_RIGHT); // Analyzes simple fouls for the right team - AnalyseTouchGroups(TI_LEFT); // Analyzes how many players are touching for the left team + AnalyseTouchGroups(TI_LEFT); // Analyzes whether too many players are touching for the left team AnalyseTouchGroups(TI_RIGHT); // Analyzes whether too many players are touching for the right team ClearPlayersAutomatic(TI_LEFT); // enforce standing and not overcrowding rules for left team @@ -165,6 +254,9 @@ prevPlayerInsideOwnArea[unum][idx] = 0; playerInsideOwnArea[unum][idx] = 0; playerFoulTime[unum][idx] = 0; + playerTimeSinceLastBallTouch[unum][idx] = mChargingImmunityTime/0.02; + playerChargingTime[unum][idx] = mChargingCollisionMinTime/0.02; + playerLastFoul[unum][idx] = FT_None; } void @@ -176,6 +268,36 @@ } } +// Resets time since last ball touch for agents currently colliding with ball +void +SoccerRuleAspect::UpdateTimesSinceLastBallTouch() +{ + if (mBallState.get() == 0) + return; + + list<boost::shared_ptr<AgentAspect> > agents; + if (mBallState->GetCollidingAgents(agents)) + { + for (list<boost::shared_ptr<AgentAspect> > ::const_iterator agentIt = agents.begin(); + agentIt != agents.end(); + agentIt++) + { + boost::shared_ptr<AgentState> agentState; + if (!SoccerBase::GetAgentState(*agentIt, agentState)) + { + GetLog()->Error() << "ERROR: (SoccerRuleAspect) Cannot get " + "AgentState from an AgentAspect\n"; + } + else + { + int unum = agentState->GetUniformNumber(); + int idx = agentState->GetTeamIndex(); + playerTimeSinceLastBallTouch[unum][idx] = 0; + } + } + } +} + // Process agent state: standing, sitted, laying down, ... void SoccerRuleAspect::ProcessAgentState(salt::Vector3f pos, int unum, TTeamIndex idx) @@ -207,18 +329,32 @@ if (playerStanding[unum][idx] > 0.5 / 0.02) { playerNotStanding[unum][idx] = 0; } + + playerTimeSinceLastBallTouch[unum][idx]++; + playerChargingTime[unum][idx]++; + playerTimeSinceLastWasMoved[unum][idx]++; } // Calculates ordering on a distance vector void SoccerRuleAspect::SimpleOrder(float dArr[][3], int oArr[][3], TTeamIndex idx) { - for(int t1 = 1; t1 <= 10; t1++) - for(int t2 = t1 + 1; t2 <= 11; t2++) + for(int t1 = 1; t1 <= 11; t1++) { + if (HaveEnforceableFoul(t1,idx)) { + // Don't count players who have committed a foul + oArr[t1][idx] = -1; + continue; + } + for(int t2 = t1 + 1; t2 <= 11; t2++) { + if (HaveEnforceableFoul(t2,idx)) { + // Don't count players who have committed a foul + continue; + } if (dArr[t1][idx] >= dArr[t2][idx]) oArr[t1][idx]++; else oArr[t2][idx]++; - + } + } // DEBUG // if (dArr[1][idx]<1000.0) { // cout << "Team: " << idx << " --> "; @@ -279,8 +415,9 @@ prevPlayerInsideOwnArea[unum][idx] = playerInsideOwnArea[unum][idx]; // determine number of players inside area and set inside area state of player - if (idx == TI_LEFT && mLeftPenaltyArea.Contains(Vector2f(agentPos.x(), agentPos.y())) || - idx == TI_RIGHT && mRightPenaltyArea.Contains(Vector2f(agentPos.x(), agentPos.y()))) + if (((idx == TI_LEFT && mLeftPenaltyArea.Contains(Vector2f(agentPos.x(), agentPos.y()))) || + (idx == TI_RIGHT && mRightPenaltyArea.Contains(Vector2f(agentPos.x(), agentPos.y())))) + && !HaveEnforceableFoul(unum,idx)) { numPlInsideOwnArea[idx]++; playerInsideOwnArea[unum][idx] = 1; @@ -304,243 +441,346 @@ SimpleOrder(distGArr, ordGArr, idx); } -void SoccerRuleAspect::AnalyseTouchGroups(TTeamIndex idx) +void SoccerRuleAspect::AnalyseChargingFouls() { - if (idx == TI_NONE || mBallState.get() == 0) + if (!mUseCharging) + { return; + } + + if (mBallState.get() == 0) + return; SoccerBase::TAgentStateList agent_states; - if (! SoccerBase::GetAgentStates(*mBallState.get(), agent_states, idx)) + if (! SoccerBase::GetAgentStates(*mBallState.get(), agent_states, TI_LEFT)) return; - random_shuffle(agent_states.begin(), agent_states.end()); - - // BEGIN FOUL DETECTION - if (mUseCharging) + SoccerBase::TAgentStateList::iterator asIt = agent_states.begin(); + for (; asIt != agent_states.end(); ++asIt) { - - SoccerBase::TAgentStateList::iterator asIt = agent_states.begin(); - for (; asIt != agent_states.end(); ++asIt) + boost::shared_ptr<TouchGroup> touchGroup = (*asIt)->GetTouchGroup(); + if (touchGroup->size() != 2) { - boost::shared_ptr<TouchGroup> touchGroup = (*asIt)->GetTouchGroup(); + continue; + } + + salt::Vector3f agentAvgVel[2]; + salt::Vector3f agentPos[2]; + float s[2]; //agentSpeed + float d[2]; //agentDistToBall + float aVB[2]; //agentAngleOfSpeedVectorToBall + float aVO[2]; //agentAngleOfSpeedVectorToOpponent + int agentUNum[2]; + TTeamIndex agentTeamIndex[2]; + bool isCharging[2]; // Boolean if an agent had co... [truncated message content] |
From: <he...@us...> - 2015-09-12 01:49:01
|
Revision: 404 http://sourceforge.net/p/simspark/svn/404 Author: hedayat Date: 2015-09-12 01:48:59 +0000 (Sat, 12 Sep 2015) Log Message: ----------- Undo some weird changes in GUI branch Modified Paths: -------------- trunk/rcssserver3d/plugin/soccer/rcs3dmonitor/rcs3dmonitor.h trunk/rcssserver3d/plugin/soccer/sexpmonitor/sexpmonitor.h trunk/spark/lib/zeitgeist/scriptserver/scriptserver.cpp Modified: trunk/rcssserver3d/plugin/soccer/rcs3dmonitor/rcs3dmonitor.h =================================================================== --- trunk/rcssserver3d/plugin/soccer/rcs3dmonitor/rcs3dmonitor.h 2015-09-12 01:48:50 UTC (rev 403) +++ trunk/rcssserver3d/plugin/soccer/rcs3dmonitor/rcs3dmonitor.h 2015-09-12 01:48:59 UTC (rev 404) @@ -144,7 +144,7 @@ TNodeCacheMap mNodeCache; }; -DECLARE_ABSTRACTCLASS(RCS3DMonitor); +DECLARE_CLASS(RCS3DMonitor); #endif // RCS3DMONITOR_H__ Modified: trunk/rcssserver3d/plugin/soccer/sexpmonitor/sexpmonitor.h =================================================================== --- trunk/rcssserver3d/plugin/soccer/sexpmonitor/sexpmonitor.h 2015-09-12 01:48:50 UTC (rev 403) +++ trunk/rcssserver3d/plugin/soccer/sexpmonitor/sexpmonitor.h 2015-09-12 01:48:59 UTC (rev 404) @@ -124,6 +124,6 @@ bool mSentFlags; }; -DECLARE_ABSTRACTCLASS(SexpMonitor); +DECLARE_CLASS(SexpMonitor); #endif // SEXPMONITOR_H__ Modified: trunk/spark/lib/zeitgeist/scriptserver/scriptserver.cpp =================================================================== --- trunk/spark/lib/zeitgeist/scriptserver/scriptserver.cpp 2015-09-12 01:48:50 UTC (rev 403) +++ trunk/spark/lib/zeitgeist/scriptserver/scriptserver.cpp 2015-09-12 01:48:59 UTC (rev 404) @@ -614,6 +614,25 @@ ERunScriptErrorType result = eNotFound; + // Trying directory given in mRelPathPrefix + if (!mRelPathPrefix.empty()) + { + result = RunInitScriptInternal(mRelPathPrefix, fileName, validDotDir, dotDir); + if (result == eOK) + { + GetLog()->Debug() << "(ScriptServer) : Ran init script '" + << mRelPathPrefix << salt::RFile::Sep() << fileName << "'\n"; + return true; + } + else if (result == eError) + { + GetLog()->Error() << "(ScriptServer) ERROR: Found error in init script '" + << mRelPathPrefix << salt::RFile::Sep() << fileName << "'\n"; + return false; + } + } + + if (validDotDir) { // Trying dot-dir in home directory This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2015-09-12 01:48:52
|
Revision: 403 http://sourceforge.net/p/simspark/svn/403 Author: hedayat Date: 2015-09-12 01:48:50 +0000 (Sat, 12 Sep 2015) Log Message: ----------- Link gui plugin with required spark libraries Modified Paths: -------------- trunk/rcssserver3d/guiplugin/CMakeLists.txt Modified: trunk/rcssserver3d/guiplugin/CMakeLists.txt =================================================================== --- trunk/rcssserver3d/guiplugin/CMakeLists.txt 2015-09-12 01:48:44 UTC (rev 402) +++ trunk/rcssserver3d/guiplugin/CMakeLists.txt 2015-09-12 01:48:50 UTC (rev 403) @@ -1,9 +1,7 @@ -if (WIN32 OR APPLE) - set(spark_gui_debug_libs ${SALT_LIBRARY_DEBUG} ${OXYGEN_LIBRARY_DEBUG} ${ZEITGEIST_LIBRARY_DEBUG} - ${KEROSIN_LIBRARY_DEBUG} ${SPARK_LIBRARY_DEBUG} ${CARBON_LIBRARY_DEBUG} ${RCSSNET3D_LIBRARY}) - set(spark_gui_release_libs ${SALT_LIBRARY_RELEASE} ${OXYGEN_LIBRARY_RELEASE} ${ZEITGEIST_LIBRARY_RELEASE} - ${KEROSIN_LIBRARY_RELEASE} ${SPARK_LIBRARY_RELEASE} ${CARBON_LIBRARY_RELEASE} ${RCSSNET3D_LIBRARY}) -endif (WIN32 OR APPLE) +set(spark_gui_debug_libs ${SALT_LIBRARY_DEBUG} ${OXYGEN_LIBRARY_DEBUG} ${ZEITGEIST_LIBRARY_DEBUG} + ${KEROSIN_LIBRARY_DEBUG} ${SPARK_LIBRARY_DEBUG} ${CARBON_LIBRARY_DEBUG} ${RCSSNET3D_LIBRARY}) +set(spark_gui_release_libs ${SALT_LIBRARY_RELEASE} ${OXYGEN_LIBRARY_RELEASE} ${ZEITGEIST_LIBRARY_RELEASE} + ${KEROSIN_LIBRARY_RELEASE} ${SPARK_LIBRARY_RELEASE} ${CARBON_LIBRARY_RELEASE} ${RCSSNET3D_LIBRARY}) add_subdirectory(soccercontrolframe) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2015-09-12 01:48:46
|
Revision: 402 http://sourceforge.net/p/simspark/svn/402 Author: hedayat Date: 2015-09-12 01:48:44 +0000 (Sat, 12 Sep 2015) Log Message: ----------- Fix a compile error Modified Paths: -------------- trunk/spark/lib/zeitgeist/object.cpp Modified: trunk/spark/lib/zeitgeist/object.cpp =================================================================== --- trunk/spark/lib/zeitgeist/object.cpp 2015-09-12 01:48:37 UTC (rev 401) +++ trunk/spark/lib/zeitgeist/object.cpp 2015-09-12 01:48:44 UTC (rev 402) @@ -96,7 +96,7 @@ if (leaf != 0) { std::cout << "for '" << leaf->GetName() - << std::cout << "' installed at '" + << "' installed at '" << leaf->GetFullPath() << "'"; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2015-09-12 01:48:40
|
Revision: 401 http://sourceforge.net/p/simspark/svn/401 Author: hedayat Date: 2015-09-12 01:48:37 +0000 (Sat, 12 Sep 2015) Log Message: ----------- Properly enable C++11 flags; don't use CACHE FORCE for setting compiler flag variables Modified Paths: -------------- trunk/spark/CMakeLists.txt Added Paths: ----------- trunk/spark/cmake/EnableCXX11.cmake Modified: trunk/spark/CMakeLists.txt =================================================================== --- trunk/spark/CMakeLists.txt 2015-09-12 01:48:31 UTC (rev 400) +++ trunk/spark/CMakeLists.txt 2015-09-12 01:48:37 UTC (rev 401) @@ -103,6 +103,7 @@ endif (WIN32) ########## add extra flags ########## +include(EnableCXX11) if(NOT CMAKE_BUILD_TYPE) set (CMAKE_BUILD_TYPE Release) endif(NOT CMAKE_BUILD_TYPE) @@ -112,14 +113,7 @@ link_directories(${Boost_LIBRARY_DIRS}) if (UNIX) - set(CMAKE_CXX_FLAGS $ENV{CXXFLAGS} "--std=gnu++11" CACHE - STRING "Common C++ compiler flags" FORCE) - set(CMAKE_C_FLAGS $ENV{CFLAGS} CACHE - STRING "Common C compiler flags" FORCE) - set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -W -Wall -Woverloaded-virtual" CACHE - STRING "C++ compiler flags for Debug builds" FORCE) - set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE - STRING "C++ compiler flags for Release builds" FORCE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wall -Woverloaded-virtual") endif (UNIX) set(BINDIR "bin" CACHE PATH "The directory to install binaries into.") Added: trunk/spark/cmake/EnableCXX11.cmake =================================================================== --- trunk/spark/cmake/EnableCXX11.cmake (rev 0) +++ trunk/spark/cmake/EnableCXX11.cmake 2015-09-12 01:48:37 UTC (rev 401) @@ -0,0 +1,21 @@ +# - Use C++11 standard +# +# Author: +# Kevin M. Godby <ke...@go...> +# +# Hedayat: modified to support gnu++11/gnu++0x instead +# Note that Microsoft Visual C++ compiler enables C++11 by default + +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR CMAKE_COMPILER_IS_GNUCXX) + include(CheckCXXCompilerFlag) + check_cxx_compiler_flag(-std=gnu++11 SUPPORTS_STD_GNUXX11) + check_cxx_compiler_flag(-std=gnu++0x SUPPORTS_STD_GNUXX0X) + if(SUPPORTS_STD_GNUXX11) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") + elseif(SUPPORTS_STD_GNUXX0X) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x") + else() + message(ERROR "Compiler does not support -std=gnu++11 or -std=gnu++0x.") + endif() +endif() + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2015-09-12 01:48:33
|
Revision: 400 http://sourceforge.net/p/simspark/svn/400 Author: hedayat Date: 2015-09-12 01:48:31 +0000 (Sat, 12 Sep 2015) Log Message: ----------- Fix cmake error when Carbon library is not found * Enable C++11 support only when Carbon is found. If C++11 support is enabled, compilation will fail with currently released simspark library versions. For the next release, C++11 support will be always enabled. Modified Paths: -------------- trunk/rcssserver3d/CMakeLists.txt Added Paths: ----------- trunk/rcssserver3d/cmake/EnableCXX11.cmake Modified: trunk/rcssserver3d/CMakeLists.txt =================================================================== --- trunk/rcssserver3d/CMakeLists.txt 2015-09-12 01:48:23 UTC (rev 399) +++ trunk/rcssserver3d/CMakeLists.txt 2015-09-12 01:48:31 UTC (rev 400) @@ -42,16 +42,17 @@ add_definitions(-DHAVE_CONFIG_H ${ODE_CFLAGS}) include_directories(${CMAKE_BINARY_DIR} ${Boost_INCLUDE_DIRS} ${ODE_INCLUDE_DIR} ${SPARK_INCLUDE_DIR} ${SALT_INCLUDE_DIR} ${ZEITGEIST_INCLUDE_DIR} - ${OXYGEN_INCLUDE_DIR} ${KEROSIN_INCLUDE_DIR} ${CARBON_INCLUDE_DIR}) + ${OXYGEN_INCLUDE_DIR} ${KEROSIN_INCLUDE_DIR}) + +if (CARBON_FOUND) + include(EnableCXX11) + include_directories(${CARBON_INCLUDE_DIR}) +endif (CARBON_FOUND) + link_directories(${Boost_LIBRARY_DIRS}) if (UNIX) - set(CMAKE_CXX_FLAGS $ENV{CXXFLAGS} "-std=gnu++11" CACHE - STRING "Common C++ compiler flags" FORCE) - set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -W -Wall -Woverloaded-virtual" CACHE - STRING "C++ compiler flags for Debug builds" FORCE) - set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE - STRING "C++ compiler flags for Release builds" FORCE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wall -Woverloaded-virtual") endif (UNIX) if(WIN32) Added: trunk/rcssserver3d/cmake/EnableCXX11.cmake =================================================================== --- trunk/rcssserver3d/cmake/EnableCXX11.cmake (rev 0) +++ trunk/rcssserver3d/cmake/EnableCXX11.cmake 2015-09-12 01:48:31 UTC (rev 400) @@ -0,0 +1,21 @@ +# - Use C++11 standard +# +# Author: +# Kevin M. Godby <ke...@go...> +# +# Hedayat: modified to support gnu++11/gnu++0x instead +# Note that Microsoft Visual C++ compiler enables C++11 by default + +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR CMAKE_COMPILER_IS_GNUCXX) + include(CheckCXXCompilerFlag) + check_cxx_compiler_flag(-std=gnu++11 SUPPORTS_STD_GNUXX11) + check_cxx_compiler_flag(-std=gnu++0x SUPPORTS_STD_GNUXX0X) + if(SUPPORTS_STD_GNUXX11) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") + elseif(SUPPORTS_STD_GNUXX0X) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x") + else() + message(ERROR "Compiler does not support -std=gnu++11 or -std=gnu++0x.") + endif() +endif() + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2015-09-12 01:48:26
|
Revision: 399 http://sourceforge.net/p/simspark/svn/399 Author: hedayat Date: 2015-09-12 01:48:23 +0000 (Sat, 12 Sep 2015) Log Message: ----------- Add sparkgui and guiplugin to rcssserver3d and update CMake files Modified Paths: -------------- trunk/rcssserver3d/AUTHORS trunk/rcssserver3d/CMakeLists.txt trunk/rcssserver3d/cmake/FindSpark.cmake trunk/rcssserver3d/data/scripts/bindings.rb trunk/rcssserver3d/doc/Doxyfile.in trunk/rcssserver3d/plugin/CMakeLists.txt trunk/rcssserver3d/plugin/soccer/CMakeLists.txt trunk/rcssserver3d/plugin/soccer/rcs3dmonitor/rcs3dmonitor.h trunk/rcssserver3d/plugin/soccer/sexpmonitor/sexpmonitor.h trunk/rcssserver3d/plugin/soccermonitor/CMakeLists.txt trunk/rcssserver3d/rcssagent3d/CMakeLists.txt trunk/rcssserver3d/rcssmonitor3d/CMakeLists.txt trunk/rcssserver3d/rcssserver3d/CMakeLists.txt trunk/simspark-utilities/cmake/FindSpark.cmake Added Paths: ----------- trunk/rcssserver3d/cmake/FindCarbon.cmake trunk/rcssserver3d/guiplugin/ trunk/rcssserver3d/guiplugin/CMakeLists.txt trunk/rcssserver3d/guiplugin/soccercontrolframe/ trunk/rcssserver3d/guiplugin/soccercontrolframe/CMakeLists.txt trunk/rcssserver3d/guiplugin/soccercontrolframe/export.h trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.cpp trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.h trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.ui trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe_soccercommands.cpp trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe_soccercommands.h trunk/rcssserver3d/sparkgui/ trunk/rcssserver3d/sparkgui/CMakeLists.txt trunk/rcssserver3d/sparkgui/internalsoccerbindingsgui.rb trunk/rcssserver3d/sparkgui/internalsoccermonitorgui.rb trunk/rcssserver3d/sparkgui/main.cpp trunk/rcssserver3d/sparkgui/naosoccersimgui.rb trunk/rcssserver3d/sparkgui/rcssserver3dintegrated.rb trunk/rcssserver3d/sparkgui/rcssserver3dinternal.rb trunk/rcssserver3d/sparkgui/soccersimgui.rb trunk/rcssserver3d/sparkgui/sparkgui_config.h.cmake Modified: trunk/rcssserver3d/AUTHORS =================================================================== --- trunk/rcssserver3d/AUTHORS 2015-09-12 01:47:34 UTC (rev 398) +++ trunk/rcssserver3d/AUTHORS 2015-09-12 01:48:23 UTC (rev 399) @@ -11,6 +11,7 @@ Joschka Bödecker <jbo...@un...> Christoph Ringelstein <cr...@un...> Hesham Ebrahimi <hes...@gm...> +Patrick Geib <pg...@un...> Also see files ChangeLog and THANKS. Modified: trunk/rcssserver3d/CMakeLists.txt =================================================================== --- trunk/rcssserver3d/CMakeLists.txt 2015-09-12 01:47:34 UTC (rev 398) +++ trunk/rcssserver3d/CMakeLists.txt 2015-09-12 01:48:23 UTC (rev 399) @@ -31,6 +31,8 @@ find_package(DevIL REQUIRED) find_package(ODE REQUIRED) find_package(OpenGL REQUIRED) +find_package(Carbon) +find_package(Qt4 COMPONENTS QtXml QtOpenGl QtGui QtCore) ########## add extra flags ########## if(NOT CMAKE_BUILD_TYPE) @@ -40,11 +42,11 @@ add_definitions(-DHAVE_CONFIG_H ${ODE_CFLAGS}) include_directories(${CMAKE_BINARY_DIR} ${Boost_INCLUDE_DIRS} ${ODE_INCLUDE_DIR} ${SPARK_INCLUDE_DIR} ${SALT_INCLUDE_DIR} ${ZEITGEIST_INCLUDE_DIR} - ${OXYGEN_INCLUDE_DIR} ${KEROSIN_INCLUDE_DIR}) + ${OXYGEN_INCLUDE_DIR} ${KEROSIN_INCLUDE_DIR} ${CARBON_INCLUDE_DIR}) link_directories(${Boost_LIBRARY_DIRS}) if (UNIX) - set(CMAKE_CXX_FLAGS $ENV{CXXFLAGS} CACHE + set(CMAKE_CXX_FLAGS $ENV{CXXFLAGS} "-std=gnu++11" CACHE STRING "Common C++ compiler flags" FORCE) set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -W -Wall -Woverloaded-virtual" CACHE STRING "C++ compiler flags for Debug builds" FORCE) @@ -69,6 +71,8 @@ set(CMAKE_SHARED_MODULE_PREFIX "") mark_as_advanced(BINDIR LIBDIR DATADIR INCLUDEDIR) + +set(GUI_DATA_DIR ${DATADIR}/carbon) ########## generate configuration file ########## if (APPLE) @@ -82,15 +86,34 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/rcssserver3d_config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/rcssserver3d_config.h) + +########## Additional variables for config files ########## +if (CARBON_FOUND) + set(carbondatadir ${CARBON_DATA_DIR}) + set(carbonlayoutlibdir ${CARBON_ROOT_DIR}/lib/guilayout) + set(carbonpluginlibdir ${CARBON_ROOT_DIR}/lib/guiplugin) + set(guipluginlibdir ${CMAKE_INSTALL_PREFIX}/lib/guiplugin) + set(GUI_PLUGIN_INCLUDE_DIR include/guiplugin) + + set(carbonsetupdir ${carbondatadir}/setups) + set(carbonscriptdir ${carbondatadir}/scripts) + set(sparkscriptdir ${CARBON_ROOT_DIR}/${DATADIR}/simspark) +endif (CARBON_FOUND) + ########## add subdirectories ############ +set(PLUGIN_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/plugin) + add_subdirectory(data) add_subdirectory(doc) add_subdirectory(plugin) add_subdirectory(rcssagent3d) add_subdirectory(rcssmonitor3d) add_subdirectory(rcssserver3d) +if (CARBON_FOUND) + add_subdirectory(guiplugin) + add_subdirectory(sparkgui) +endif (CARBON_FOUND) - ########### install files ############### install(FILES AUTHORS ChangeLog COPYING NEWS README THANKS TODO Added: trunk/rcssserver3d/cmake/FindCarbon.cmake =================================================================== --- trunk/rcssserver3d/cmake/FindCarbon.cmake (rev 0) +++ trunk/rcssserver3d/cmake/FindCarbon.cmake 2015-09-12 01:48:23 UTC (rev 399) @@ -0,0 +1,51 @@ +# - Find Carbon +# Find the native Carbon includes and libraries +# +# CARBON_INCLUDE_DIR - where to find carbon include files +# CARBON_LIB_DIR - where to find carbon libraries +# CARBON_LIBRARIES - list of libraries when using carbon (contains first found carbon lib, debug or release) +# CARBON_LIBRARY_DEBUG - carbon debug library +# CARBON_LIBRARY_RELEASE - carbon release library +# CARBON_FOUND - true if a carbon library was found + +# Carbon section +IF (CARBON_INCLUDE_DIR) + # Already in cache, be silent + SET(CARBON_FIND_QUIETLY TRUE) +ENDIF (CARBON_INCLUDE_DIR) + +SET(CARBON_DIR $ENV{CARBON_DIR} "C:/Program Files/simspark" "C:/Program Files (x86)/simspark" "C:/library/simspark") + +FIND_PATH(CARBON_INCLUDE_DIR carbon/carbon.h + PATHS ${CARBON_DIR} + PATH_SUFFIXES simspark include/simspark) + +FIND_PATH(CARBON_ROOT_DIR share/carbon/setups/DefaultSetupGrid.xml + PATHS ${CARBON_DIR}) + +FIND_PATH(CARBON_DATA_DIR setups/DefaultSetupGrid.xml + PATHS ${CARBON_DIR} + PATH_SUFFIXES share/carbon) + +SET(CARBON_NAMES carbon carbon_debug) +FIND_LIBRARY(CARBON_LIBRARY NAMES ${CARBON_NAMES} + PATHS ${CARBON_DIR} + PATH_SUFFIXES simspark lib/simspark) + +GET_FILENAME_COMPONENT(CARBON_LIB_DIR ${CARBON_LIBRARY} PATH) + +# handle the QUIETLY and REQUIRED arguments and set CARBON_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(CARBON DEFAULT_MSG CARBON_LIBRARY + CARBON_INCLUDE_DIR) + +IF(CARBON_FOUND) + SET( CARBON_LIBRARIES ${CARBON_LIBRARY} ) + STRING(REPLACE "carbon." "carbon_debug." CARBON_LIBRARY_DEBUG ${CARBON_LIBRARY}) + STRING(REPLACE "carbon_debug." "carbon." CARBON_LIBRARY_RELEASE ${CARBON_LIBRARY}) +ELSE(CARBON_FOUND) + SET( CARBON_LIBRARIES ) +ENDIF(CARBON_FOUND) + +MARK_AS_ADVANCED( CARBON_PLUGIN_LIB_DIR CARBON_LAYOUT_LIB_DIR CARBON_DIR CARBON_LIBRARY CARBON_LIBRARY_RELEASE CARBON_LIBRARY_DEBUG CARBON_INCLUDE_DIR ) Modified: trunk/rcssserver3d/cmake/FindSpark.cmake =================================================================== --- trunk/rcssserver3d/cmake/FindSpark.cmake 2015-09-12 01:47:34 UTC (rev 398) +++ trunk/rcssserver3d/cmake/FindSpark.cmake 2015-09-12 01:48:23 UTC (rev 399) @@ -1,25 +1,39 @@ # - Find Spark # Find the native Spark includes and libraries # -# SPARK_INCLUDE_DIR - where to find spark include files -# SPARK_LIB_DIR - where to find spark libraries -# SPARK_LIBRARIES - List of libraries when using spark. -# SPARK_FOUND - True if spark found. -# SALT_INCLUDE_DIR - where to find salt include files -# SALT_LIBRARIES - List of libraries when using salt. -# SALT_FOUND - True if salt found. -# ZEITGEIST_INCLUDE_DIR - where to find zeitgeist include files -# ZEITGEIST_LIBRARIES - List of libraries when using zeitgeist. -# ZEITGEIST_FOUND - True if zeitgeist found. -# OXYGEN_INCLUDE_DIR - where to find oxygen include files -# OXYGEN_LIBRARIES - List of libraries when using oxygen. -# OXYGEN_FOUND - True if oxygen found. -# KEROSIN_INCLUDE_DIR - where to find kerosin include files -# KEROSIN_LIBRARIES - List of libraries when using kerosin. -# KEROSIN_FOUND - True if kerosin found. -# RCSSNET3D_INCLUDE_DIR - where to find kerosin include files -# RCSSNET3D_LIBRARIES - List of libraries when using kerosin. -# RCSSNET3D_FOUND - True if kerosin found. +# SPARK_INCLUDE_DIR - where to find spark include files +# SPARK_LIB_DIR - where to find spark libraries +# SPARK_LIBRARIES - list of libraries when using spark (contains first found spark lib, debug or release) +# SPARK_LIBRARY_DEBUG - spark debug library +# SPARK_LIBRARY_RELEASE - spark release library +# SPARK_FOUND - true if a spark library was found +# SALT_INCLUDE_DIR - where to find salt include files +# SALT_LIB_DIR - where to find salt libraries +# SALT_LIBRARIES - list of libraries when using salt (contains first found salt lib, debug or release) +# SALT_LIBRARY_DEBUG - salt debug library +# SALT_LIBRARY_RELEASE - salt release library +# SALT_FOUND - true if a salt library was found +# KEROSIN_INCLUDE_DIR - where to find spark include files +# KEROSIN_LIB_DIR - where to find spark libraries +# KEROSIN_LIBRARIES - list of libraries when using spark (contains first found spark lib, debug or release) +# KEROSIN_LIBRARY_DEBUG - spark debug library +# KEROSIN_LIBRARY_RELEASE - spark release library +# KEROSIN_FOUND - true if a spark library was found +# ZEITGEIST_INCLUDE_DIR - where to find zeitgeist include files +# ZEITGEIST_LIB_DIR - where to find zeitgeist libraries +# ZEITGEIST_LIBRARIES - list of libraries when using zeitgeist (contains first found zeitgeist lib, debug or release) +# ZEITGEIST_LIBRARY_DEBUG - zeitgeist debug library +# ZEITGEIST_LIBRARY_RELEASE - zeitgeist release library +# ZEITGEIST_FOUND - true if a zeitgeist library was found +# OXYGEN_INCLUDE_DIR - where to find oxygen include files +# OXYGEN_LIB_DIR - where to find oxygen libraries +# OXYGEN_LIBRARIES - list of libraries when using oxygen (contains first found oxygen lib, debug or release) +# OXYGEN_LIBRARY_DEBUG - oxygen debug library +# OXYGEN_LIBRARY_RELEASE - oxygen release library +# OXYGEN_FOUND - true if a oxygen library was found +# RCSSNET3D_INCLUDE_DIR - where to find rcssnet include files +# RCSSNET3D_LIBRARIES - List of libraries when using rcssnet. +# RCSSNET3D_FOUND - True if rcssnet found. # Spark section IF (SPARK_INCLUDE_DIR) @@ -30,16 +44,16 @@ SET(SPARK_DIR $ENV{SPARK_DIR} "C:/Program Files/simspark" "C:/Program Files (x86)/simspark" "C:/library/simspark") FIND_PATH(SPARK_INCLUDE_DIR spark/spark.h - HINTS ${SPARK_DIR} + PATHS ${SPARK_DIR} PATH_SUFFIXES simspark include/simspark) SET(SPARK_NAMES spark spark_debug) FIND_LIBRARY(SPARK_LIBRARY NAMES ${SPARK_NAMES} - HINTS ${SPARK_DIR} + PATHS ${SPARK_DIR} PATH_SUFFIXES simspark lib/simspark) GET_FILENAME_COMPONENT(SPARK_LIB_DIR ${SPARK_LIBRARY} PATH) -# handle the QUIETLY and REQUIRED arguments and set SPARK_FOUND to TRUE if +# handle the QUIETLY and REQUIRED arguments and set SPARK_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(SPARK DEFAULT_MSG SPARK_LIBRARY @@ -47,11 +61,13 @@ IF(SPARK_FOUND) SET( SPARK_LIBRARIES ${SPARK_LIBRARY} ) + STRING(REPLACE "spark." "spark_debug." SPARK_LIBRARY_DEBUG ${SPARK_LIBRARY}) + STRING(REPLACE "spark_debug." "spark." SPARK_LIBRARY_RELEASE ${SPARK_LIBRARY}) ELSE(SPARK_FOUND) SET( SPARK_LIBRARIES ) ENDIF(SPARK_FOUND) -MARK_AS_ADVANCED( SPARK_LIBRARY SPARK_INCLUDE_DIR ) +MARK_AS_ADVANCED( SPARK_LIBRARY SPARK_LIBRARY_RELEASE SPARK_LIBRARY_DEBUG SPARK_INCLUDE_DIR ) # Salt section IF (SALT_INCLUDE_DIR) @@ -60,15 +76,15 @@ ENDIF (SALT_INCLUDE_DIR) FIND_PATH(SALT_INCLUDE_DIR salt/salt.h - HINTS ${SPARK_DIR} + PATHS ${SPARK_DIR} PATH_SUFFIXES simspark include/simspark) SET(SALT_NAMES salt salt_debug) FIND_LIBRARY(SALT_LIBRARY NAMES ${SALT_NAMES} - HINTS ${SPARK_DIR} + PATHS ${SPARK_DIR} PATH_SUFFIXES simspark lib/simspark) -# handle the QUIETLY and REQUIRED arguments and set SALT_FOUND to TRUE if +# handle the QUIETLY and REQUIRED arguments and set SALT_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(SALT DEFAULT_MSG SALT_LIBRARY @@ -76,11 +92,13 @@ IF(SALT_FOUND) SET( SALT_LIBRARIES ${SALT_LIBRARY} ) + STRING(REPLACE "salt." "salt_debug." SALT_LIBRARY_DEBUG ${SALT_LIBRARY}) + STRING(REPLACE "salt_debug." "salt." SALT_LIBRARY_RELEASE ${SALT_LIBRARY}) ELSE(SALT_FOUND) SET( SALT_LIBRARIES ) ENDIF(SALT_FOUND) -MARK_AS_ADVANCED( SALT_LIBRARY SALT_INCLUDE_DIR ) +MARK_AS_ADVANCED( SALT_LIBRARY SALT_LIBRARY_RELEASE SALT_LIBRARY_DEBUG SALT_INCLUDE_DIR ) # Zeitgeist section IF (ZEITGEIST_INCLUDE_DIR) @@ -89,15 +107,15 @@ ENDIF (ZEITGEIST_INCLUDE_DIR) FIND_PATH(ZEITGEIST_INCLUDE_DIR zeitgeist/zeitgeist.h - HINTS ${SPARK_DIR} + PATHS ${SPARK_DIR} PATH_SUFFIXES simspark include/simspark) SET(ZEITGEIST_NAMES zeitgeist zeitgeist_debug) FIND_LIBRARY(ZEITGEIST_LIBRARY NAMES ${ZEITGEIST_NAMES} - HINTS ${SPARK_DIR} + PATHS ${SPARK_DIR} PATH_SUFFIXES simspark lib/simspark) -# handle the QUIETLY and REQUIRED arguments and set ZEITGEIST_FOUND to TRUE if +# handle the QUIETLY and REQUIRED arguments and set ZEITGEIST_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZEITGEIST DEFAULT_MSG ZEITGEIST_LIBRARY @@ -105,11 +123,13 @@ IF(ZEITGEIST_FOUND) SET( ZEITGEIST_LIBRARIES ${ZEITGEIST_LIBRARY} ) + STRING(REPLACE "zeitgeist." "zeitgeist_debug." ZEITGEIST_LIBRARY_DEBUG ${ZEITGEIST_LIBRARY}) + STRING(REPLACE "zeitgeist_debug." "zeitgeist." ZEITGEIST_LIBRARY_RELEASE ${ZEITGEIST_LIBRARY}) ELSE(ZEITGEIST_FOUND) SET( ZEITGEIST_LIBRARIES ) ENDIF(ZEITGEIST_FOUND) -MARK_AS_ADVANCED( ZEITGEIST_LIBRARY ZEITGEIST_INCLUDE_DIR ) +MARK_AS_ADVANCED( ZEITGEIST_LIBRARY ZEITGEIST_LIBRARY_RELEASE ZEITGEIST_LIBRARY_DEBUG ZEITGEIST_INCLUDE_DIR ) # Oxygen section IF (OXYGEN_INCLUDE_DIR) @@ -118,15 +138,15 @@ ENDIF (OXYGEN_INCLUDE_DIR) FIND_PATH(OXYGEN_INCLUDE_DIR oxygen/oxygen.h - HINTS ${SPARK_DIR} + PATHS ${SPARK_DIR} PATH_SUFFIXES simspark include/simspark) SET(OXYGEN_NAMES oxygen oxygen_debug) FIND_LIBRARY(OXYGEN_LIBRARY NAMES ${OXYGEN_NAMES} - HINTS ${SPARK_DIR} + PATHS ${SPARK_DIR} PATH_SUFFIXES simspark lib/simspark) -# handle the QUIETLY and REQUIRED arguments and set OXYGEN_FOUND to TRUE if +# handle the QUIETLY and REQUIRED arguments and set OXYGEN_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(OXYGEN DEFAULT_MSG OXYGEN_LIBRARY @@ -134,11 +154,13 @@ IF(OXYGEN_FOUND) SET( OXYGEN_LIBRARIES ${OXYGEN_LIBRARY} ) + STRING(REPLACE "oxygen." "oxygen_debug." OXYGEN_LIBRARY_DEBUG ${OXYGEN_LIBRARY}) + STRING(REPLACE "oxygen_debug." "oxygen." OXYGEN_LIBRARY_RELEASE ${OXYGEN_LIBRARY}) ELSE(OXYGEN_FOUND) SET( OXYGEN_LIBRARIES ) ENDIF(OXYGEN_FOUND) -MARK_AS_ADVANCED( OXYGEN_LIBRARY OXYGEN_INCLUDE_DIR ) +MARK_AS_ADVANCED( OXYGEN_LIBRARY OXYGEN_LIBRARY_RELEASE OXYGEN_LIBRARY_DEBUG OXYGEN_INCLUDE_DIR ) # Kerosin section IF (KEROSIN_INCLUDE_DIR) @@ -147,15 +169,15 @@ ENDIF (KEROSIN_INCLUDE_DIR) FIND_PATH(KEROSIN_INCLUDE_DIR kerosin/kerosin.h - HINTS ${SPARK_DIR} + PATHS ${SPARK_DIR} PATH_SUFFIXES simspark include/simspark) SET(KEROSIN_NAMES kerosin kerosin_debug) FIND_LIBRARY(KEROSIN_LIBRARY NAMES ${KEROSIN_NAMES} - HINTS ${SPARK_DIR} + PATHS ${SPARK_DIR} PATH_SUFFIXES simspark lib/simspark) -# handle the QUIETLY and REQUIRED arguments and set KEROSIN_FOUND to TRUE if +# handle the QUIETLY and REQUIRED arguments and set KEROSIN_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(KEROSIN DEFAULT_MSG KEROSIN_LIBRARY @@ -163,11 +185,13 @@ IF(KEROSIN_FOUND) SET( KEROSIN_LIBRARIES ${KEROSIN_LIBRARY} ) + STRING(REPLACE "kerosin." "kerosin_debug." KEROSIN_LIBRARY_DEBUG ${KEROSIN_LIBRARY}) + STRING(REPLACE "kerosin_debug." "kerosin." KEROSIN_LIBRARY_RELEASE ${KEROSIN_LIBRARY}) ELSE(KEROSIN_FOUND) SET( KEROSIN_LIBRARIES ) ENDIF(KEROSIN_FOUND) -MARK_AS_ADVANCED( KEROSIN_LIBRARY KEROSIN_INCLUDE_DIR ) +MARK_AS_ADVANCED( KEROSIN_LIBRARY KEROSIN_LIBRARY_RELEASE KEROSIN_LIBRARY_DEBUG KEROSIN_INCLUDE_DIR ) # rcssnet3D IF (RCSSNET3D_INCLUDE_DIR) @@ -176,15 +200,15 @@ ENDIF (RCSSNET3D_INCLUDE_DIR) FIND_PATH(RCSSNET3D_INCLUDE_DIR rcssnet/addr.hpp - HINTS ${SPARK_DIR} + PATHS ${SPARK_DIR} PATH_SUFFIXES simspark include/simspark) SET(RCSSNET3D_NAMES rcssnet3D rcssnet3D_debug) FIND_LIBRARY(RCSSNET3D_LIBRARY NAMES ${RCSSNET3D_NAMES} - HINTS ${SPARK_DIR} + PATHS ${SPARK_DIR} PATH_SUFFIXES simspark lib/simspark) -# handle the QUIETLY and REQUIRED arguments and set RCSSNET3D_FOUND to TRUE if +# handle the QUIETLY and REQUIRED arguments and set RCSSNET3D_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(RCSSNET3D DEFAULT_MSG RCSSNET3D_LIBRARY Modified: trunk/rcssserver3d/data/scripts/bindings.rb =================================================================== --- trunk/rcssserver3d/data/scripts/bindings.rb 2015-09-12 01:47:34 UTC (rev 398) +++ trunk/rcssserver3d/data/scripts/bindings.rb 2015-09-12 01:48:23 UTC (rev 399) @@ -14,9 +14,10 @@ inputServer.bindCommand('axisy', Command.MouseY); inputServer.bindCommand('mouse_left', Command.Mouselook); inputServer.bindCommand('mouse_right',Command.Up); + inputServer.bindCommand('mouse_middle',Command.Down); inputServer.bindCommand('pagedown', Command.Down); - inputServer.bindCommand('kp_minus', Command.Down); - inputServer.bindCommand('kp_plus',Command.Up); + inputServer.bindCommand('kp_minus', Command.Down); + inputServer.bindCommand('kp_plus', Command.Up); inputServer.bindCommand('pageup', Command.Up); inputServer.bindCommand('q', Command.Quit) inputServer.bindCommand('a', Command.Left) Modified: trunk/rcssserver3d/doc/Doxyfile.in =================================================================== --- trunk/rcssserver3d/doc/Doxyfile.in 2015-09-12 01:47:34 UTC (rev 398) +++ trunk/rcssserver3d/doc/Doxyfile.in 2015-09-12 01:48:23 UTC (rev 399) @@ -58,7 +58,9 @@ #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = @top_srcdir@/plugin +INPUT = @top_srcdir@/plugin \ + @top_srcdir@/guiplugin \ + @top_srcdir@/sparkgui FILE_PATTERNS = *.h \ *.cpp RECURSIVE = YES Added: trunk/rcssserver3d/guiplugin/CMakeLists.txt =================================================================== --- trunk/rcssserver3d/guiplugin/CMakeLists.txt (rev 0) +++ trunk/rcssserver3d/guiplugin/CMakeLists.txt 2015-09-12 01:48:23 UTC (rev 399) @@ -0,0 +1,9 @@ +if (WIN32 OR APPLE) + set(spark_gui_debug_libs ${SALT_LIBRARY_DEBUG} ${OXYGEN_LIBRARY_DEBUG} ${ZEITGEIST_LIBRARY_DEBUG} + ${KEROSIN_LIBRARY_DEBUG} ${SPARK_LIBRARY_DEBUG} ${CARBON_LIBRARY_DEBUG} ${RCSSNET3D_LIBRARY}) + set(spark_gui_release_libs ${SALT_LIBRARY_RELEASE} ${OXYGEN_LIBRARY_RELEASE} ${ZEITGEIST_LIBRARY_RELEASE} + ${KEROSIN_LIBRARY_RELEASE} ${SPARK_LIBRARY_RELEASE} ${CARBON_LIBRARY_RELEASE} ${RCSSNET3D_LIBRARY}) +endif (WIN32 OR APPLE) + +add_subdirectory(soccercontrolframe) + Added: trunk/rcssserver3d/guiplugin/soccercontrolframe/CMakeLists.txt =================================================================== --- trunk/rcssserver3d/guiplugin/soccercontrolframe/CMakeLists.txt (rev 0) +++ trunk/rcssserver3d/guiplugin/soccercontrolframe/CMakeLists.txt 2015-09-12 01:48:23 UTC (rev 399) @@ -0,0 +1,105 @@ +########### target files ############### +set(soccercontrolframe_QOBJECT_HEADERS + soccercontrolframe.h +) + +set(soccercontrolframe_HEADERS + soccercontrolframe_soccercommands.h + export.h + + ${PLUGIN_INCLUDE_DIR}/soccer/agentstate/agentstate.h + ${PLUGIN_INCLUDE_DIR}/soccer/ballstateaspect/ballstateaspect.h + ${PLUGIN_INCLUDE_DIR}/soccer/gamestateaspect/gamestateaspect.h + ${PLUGIN_INCLUDE_DIR}/soccer/gamestateaspect/gamestateitem.h + ${PLUGIN_INCLUDE_DIR}/soccer/objectstate/objectstate.h + ${PLUGIN_INCLUDE_DIR}/soccer/soccerbase/soccerbase.h + ${PLUGIN_INCLUDE_DIR}/soccer/soccercontrolaspect/soccercontrolaspect.h + ${PLUGIN_INCLUDE_DIR}/soccer/soccernode/soccernode.h + ${PLUGIN_INCLUDE_DIR}/soccer/soccertypes.h +) + +set(soccercontrolframe_SOURCES + soccercontrolframe.cpp + soccercontrolframe_soccercommands.cpp + + ${PLUGIN_INCLUDE_DIR}/soccer/agentstate/agentstate.cpp + ${PLUGIN_INCLUDE_DIR}/soccer/agentstate/agentstate_c.cpp + ${PLUGIN_INCLUDE_DIR}/soccer/ballstateaspect/ballstateaspect.cpp + ${PLUGIN_INCLUDE_DIR}/soccer/ballstateaspect/ballstateaspect_c.cpp + ${PLUGIN_INCLUDE_DIR}/soccer/gamestateaspect/gamestateaspect.cpp + ${PLUGIN_INCLUDE_DIR}/soccer/gamestateaspect/gamestateaspect_c.cpp + ${PLUGIN_INCLUDE_DIR}/soccer/gamestateaspect/gamestateitem.cpp + ${PLUGIN_INCLUDE_DIR}/soccer/gamestateaspect/gamestateitem_c.cpp + ${PLUGIN_INCLUDE_DIR}/soccer/objectstate/objectstate.cpp + ${PLUGIN_INCLUDE_DIR}/soccer/objectstate/objectstate_c.cpp + ${PLUGIN_INCLUDE_DIR}/soccer/soccerbase/soccerbase.cpp + ${PLUGIN_INCLUDE_DIR}/soccer/soccercontrolaspect/soccercontrolaspect.cpp + ${PLUGIN_INCLUDE_DIR}/soccer/soccercontrolaspect/soccercontrolaspect_c.cpp + ${PLUGIN_INCLUDE_DIR}/soccer/soccernode/soccernode.cpp + ${PLUGIN_INCLUDE_DIR}/soccer/soccernode/soccernode_c.cpp +) + +set(soccercontrolframe_FORMS + soccercontrolframe.ui +) + +#set(soccercontrolframe_RESOURCES) + +########### qt properties ############### + +#Additional used libraries +set(QT_USE_QTOPENGL TRUE) +set(QT_USE_QTXML TRUE) + +#Include qt properties +include(${QT_USE_FILE}) +add_definitions(${QT_DEFINITIONS}) + +########### create library ############### + +#Meta object compiler wrapping of header files, forms and resources +QT4_WRAP_CPP(soccercontrolframe_QOBJECT_HEADERS_MOC ${soccercontrolframe_QOBJECT_HEADERS}) +QT4_WRAP_UI(soccercontrolframe_FORMS_HEADERS ${soccercontrolframe_FORMS}) +#QT4_ADD_RESOURCES(soccercontrolframe_RESOURCES_RCC ${soccercontrolframe_RESOURCES}) + +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CARBON_INCLUDE_DIR}/carbon + ${FREETYPE_INCLUDE_DIRS} + ${IL_INCLUDE_DIR} + ${OPENGL_INCLUDE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${PLUGIN_INCLUDE_DIR}/soccer + ${PLUGIN_INCLUDE_DIR}) + +add_library( + soccercontrolframe MODULE + ${soccercontrolframe_SOURCES} + ${soccercontrolframe_QOBJECT_HEADERS} + ${soccercontrolframe_QOBJECT_HEADERS_MOC} + ${soccercontrolframe_HEADERS} + ${soccercontrolframe_FORMS_HEADERS}) + #${soccercontrolframe_RESOURCES_RCC}) + +set(soccercontrolframe_LIBS ${OPENGL_LIBRARIES} ${QT_LIBRARIES}) +set(soccercontrolframe_DEBUG_LIBS ${spark_gui_debug_libs}) +set(soccercontrolframe_RELEASE_LIBS ${spark_gui_release_libs}) + +target_link_libraries(soccercontrolframe ${soccercontrolframe_LIBS}) +FOREACH(LIB ${soccercontrolframe_DEBUG_LIBS}) + target_link_libraries(soccercontrolframe debug ${LIB}) +ENDFOREACH(LIB) +FOREACH(LIB ${soccercontrolframe_RELEASE_LIBS}) + target_link_libraries(soccercontrolframe optimized ${LIB}) +ENDFOREACH(LIB) + +if (NOT APPLE) + set_target_properties(soccercontrolframe PROPERTIES VERSION 1.0.0 SOVERSION 1) +endif (NOT APPLE) + +install(TARGETS soccercontrolframe DESTINATION ${guipluginlibdir}) + +########### install files ############### + +install(DIRECTORY ./ DESTINATION ${GUI_PLUGIN_INCLUDE_DIR}/soccercontrolframe + FILES_MATCHING PATTERN "*.h" PATTERN ".svn" EXCLUDE) Added: trunk/rcssserver3d/guiplugin/soccercontrolframe/export.h =================================================================== --- trunk/rcssserver3d/guiplugin/soccercontrolframe/export.h (rev 0) +++ trunk/rcssserver3d/guiplugin/soccercontrolframe/export.h 2015-09-12 01:48:23 UTC (rev 399) @@ -0,0 +1,14 @@ +#ifndef EXPORT_LIB +#define EXPORT_LIB +/** + * \file soccercontrolframe/export.h + * \brief Exports the SoccerControlFrame class as a plugin from a shared library. + */ + +#include "soccercontrolframe.h" + +PLUGINS_EXPORT_BEGIN() +PLUGIN_EXPORT(SoccerControlFrame) +PLUGINS_EXPORT_END() + +#endif \ No newline at end of file Added: trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.cpp =================================================================== --- trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.cpp (rev 0) +++ trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.cpp 2015-09-12 01:48:23 UTC (rev 399) @@ -0,0 +1,610 @@ +/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- + + this file is part of rcssserver3D + Author: Patrick Geib + Copyright (C) 2012 RoboCup Soccer Server 3D Maintenance Group + $Id$ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +//Local +#include "soccercontrolframe.h" +#include "soccercontrolframe_soccercommands.h" +#include "export.h" + +//Carbon +#include <pluginmanager.h> +#include <carbon.h> +#include <simulationmanager.h> +#include <simulation.h> +#include <sparkcontroller.h> +#include <guisimcontrol.h> +#include <serverthread.h> +#include <simspark.h> +#include <settings.h> + +//SimSpark +#include <oxygen/gamecontrolserver/gamecontrolserver.h> +#include <zeitgeist/leaf.h> + +//Soccer +#include "soccer/gamestateaspect/gamestateaspect.h" +#include "soccer/soccerruleaspect/soccerruleaspect.h" +#include "soccer/ballstateaspect/ballstateaspect.h" +//#include <agentstate/agentstate.h> + +//Boost +#include <boost/make_shared.hpp> + +//Qt +#include <QValidator> + +using namespace boost; +using namespace oxygen; +using namespace SoccerControlFrameUtil; + +//-------------------------------------------------------------- +// Static +//-------------------------------------------------------------- + +//Factory registration +REGISTER_EXPORT_FRAME(SoccerControlFrame, "soccercontrolframe", "Soccer", 1000) + +//Static class information +void SoccerControlFrame::saveClassInfo() +{ + //Description + setClassInfo(mClassId, AbstractPlugin::PI_DESCRIPTION, + tr("The soccer control frame can be used to monitor and control the state of a simspark soccer simulation.")); + + //Icon + setClassInfo(mClassId, AbstractPlugin::PI_ICON_NAME, ":soccer"); + + //Tags + QStringList tags; + tags << "soccer" << "spark" << "rcssserver3d"; + setClassInfo(mClassId, AbstractPlugin::PI_TAGS, tags); +} + +//-------------------------------------------------------------- +// SoccerFrameUpdateControl +//-------------------------------------------------------------- + +SoccerFrameUpdateControl::SoccerFrameUpdateControl(SoccerControlFrame* parent) + : mParent(parent), CommandQueue(0) +{ +} +SoccerFrameUpdateControl::~SoccerFrameUpdateControl() +{ +} + +void SoccerFrameUpdateControl::startCycle() +{ + emit stateStartCycle(); +} + +void SoccerFrameUpdateControl::endCycle() +{ + SparkCommand::CommandQueue::endCycle(); + emit stateEndCycle(); +} + +void SoccerFrameUpdateControl::waitCycle() +{ + SparkCommand::CommandQueue::waitCycle(); + emit stateWaitCycle(); +} + +//-------------------------------------------------------------- +// SoccerFrame +//-------------------------------------------------------------- +// Public +//-------------------------------------------------------------- + +SoccerControlFrame::SoccerControlFrame() : + mSettings(getCarbon()->getSettings()) +{ + //---------------- + //Layout + ui.setupUi(this); + loadFrameDesign(); + + //---------------- + //Variables + mInit = false; + mLastInitState = true; //--> 1 display update during initialization + mReadyUpdate = true; + mSelectedPlayer = -1; + mSelectedPlayMode = PM_NONE; + mUpdateTimer.setInterval(100); + + //---------------- + //Gui-Field init + ui.gameTimeEdit->setValidator(new QDoubleValidator(0.0, INT_MAX, 4, ui.gameTimeEdit)); + ui.team1GoalsEdit->setValidator(new QIntValidator(0, INT_MAX, ui.team1GoalsEdit)); + ui.team2GoalsEdit->setValidator(new QIntValidator(0, INT_MAX, ui.team2GoalsEdit)); + ui.team1PenaltiesEdit->setValidator(new QIntValidator(0, INT_MAX, ui.team1PenaltiesEdit)); + ui.team2PenaltiesEdit->setValidator(new QIntValidator(0, INT_MAX, ui.team2PenaltiesEdit)); + ui.batteryEdit->setValidator(new QDoubleValidator(0.0, INT_MAX, 4, ui.batteryEdit)); + + //---------------- + //Settings + + loadDefaultSettings(); + loadSettings(); + + //---------------- + //Menu Entries + + //---------------- + //Connections + Simulation* simulation = &*getCarbon()->getSimulationManager()->getSimulation(); + connect(simulation, SIGNAL(serverCreated(boost::shared_ptr<ServerThread>)), this, SLOT(updateServerCreated(boost::shared_ptr<ServerThread>))); + + connect(&mUpdateTimer, SIGNAL(timeout()), this, SLOT(readyUpdate())); +} + +SoccerControlFrame::~SoccerControlFrame() +{ + +} + +void SoccerControlFrame::init(const QStringList& parameters) +{ + //Combo box entries + mGameModes.clear(); + ui.playModeComboBox->clear(); + + mGameModes.insert(PM_BeforeKickOff, GameMode(0, PM_BeforeKickOff, true, tr("Before Kickoff"))); + mGameModes.insert(PM_KickOff_Left, GameMode(0, PM_KickOff_Left, true, tr("KickOff Left"))); + mGameModes.insert(PM_KickOff_Right, GameMode(0, PM_KickOff_Right, true, tr("KickOff Right"))); + mGameModes.insert(PM_PlayOn, GameMode(0, PM_PlayOn, true, tr("Play On"))); + mGameModes.insert(PM_KickIn_Left, GameMode(0, PM_KickIn_Left, true, tr("Kick-In Left"))); + mGameModes.insert(PM_KickIn_Right, GameMode(0, PM_KickIn_Right, true, tr("Kick-In Right"))); + mGameModes.insert(PM_CORNER_KICK_LEFT, GameMode(0, PM_CORNER_KICK_LEFT, true, tr("Corner Kick Left"))); + mGameModes.insert(PM_CORNER_KICK_RIGHT, GameMode(0, PM_CORNER_KICK_RIGHT, true, tr("Corner Kick Right"))); + mGameModes.insert(PM_GOAL_KICK_LEFT, GameMode(0, PM_GOAL_KICK_LEFT, true, tr("Goal Kick Left"))); + mGameModes.insert(PM_GOAL_KICK_RIGHT, GameMode(0, PM_GOAL_KICK_RIGHT, true, tr("Goal Kick Right"))); + mGameModes.insert(PM_OFFSIDE_LEFT, GameMode(0, PM_OFFSIDE_LEFT, true, tr("Offside Left"))); + mGameModes.insert(PM_OFFSIDE_RIGHT, GameMode(0, PM_OFFSIDE_RIGHT, true, tr("Offside Right"))); + mGameModes.insert(PM_GameOver, GameMode(0, PM_GameOver, true, tr("Game Over"))); + mGameModes.insert(PM_Goal_Left, GameMode(0, PM_Goal_Left, true, tr("Goal Left"))); + mGameModes.insert(PM_Goal_Right, GameMode(0, PM_Goal_Right, true, tr("Goal Right"))); + mGameModes.insert(PM_FREE_KICK_LEFT, GameMode(0, PM_FREE_KICK_LEFT, true, tr("Free Kick Left"))); + mGameModes.insert(PM_FREE_KICK_RIGHT, GameMode(0, PM_FREE_KICK_RIGHT, true, tr("Free Kick Right"))); + + int run = 0; + for (auto it = mGameModes.begin(); it != mGameModes.end(); it++) + { + it->mIndex = run; + ui.playModeComboBox->addItem(it->mName); + run++; + } + mSelectedPlayMode = PM_BeforeKickOff; + + tryInitSpark(); + updateDisplay(); +} + +bool SoccerControlFrame::initialized() +{ + return mInit; +} + +void SoccerControlFrame::loadSettings() +{ + +} + +void SoccerControlFrame::saveSettings() +{ + +} + +void SoccerControlFrame::loadDefaultSettings() +{ + mGameControlServerPath = "/sys/server/gamecontrol/"; + mGameStateAspectPath = "/sys/server/gamecontrol/GameStateAspect/"; + mSoccerRuleAspectPath = "/sys/server/gamecontrol/SoccerRuleAspect/"; + mBallStateAspectPath = "/sys/server/gamecontrol/BallStateAspect/"; +} + +//-------------------------------------------------------------- +// Protected +//-------------------------------------------------------------- + +bool SoccerControlFrame::tryInitSpark() +{ + //If already initialized, simply update + if (mInit) + updateDisplay(); + + //If there is no spark controller, try to get it + if (mSparkController.get() == 0) + { + mServerThread = getCarbon()->getSimulationManager()->getSparkServerThread(); + + if (mServerThread.get() == 0) + return false; + else + { + mSparkController = mServerThread->getSparkController(); + connect(&*mSparkController, SIGNAL(sparkRunning(SparkController*)), this, SLOT(updateSparkRunning(SparkController*))); + } + } + + //If there is a spark controller, check for SimSpark + if (mSparkController->getSpark().get() != 0) + { + //There is a controller and simspark-> initialize + + QString gameControlServer = mGameControlServerPath; + QString gameStateAspect = mGameStateAspectPath; + QString soccerRuleAspect = mSoccerRuleAspectPath; + QString ballStateAspect = mBallStateAspectPath; + + //Try to find soccer aspects + if (mSettings->beginGroup(this, true, 1000)) //lock + { + gameControlServer = mSettings->value("mGameControlServerPath", mGameControlServerPath).toString(); + gameStateAspect = mSettings->value("mGameStateAspectPath", mGameStateAspectPath).toString(); + soccerRuleAspect = mSettings->value("mSoccerRuleAspectPath", mSoccerRuleAspectPath).toString(); + ballStateAspect = mSettings->value("mBallStateAspectPath", mBallStateAspectPath).toString(); + mSettings->endGroup(true); //unlock + } + else + { + LOG_WARNING() << "Could not read Settings object in SoccerControlFrame. Using default values for control node paths."; + } + + SimSpark* spark = &*mSparkController->getSpark(); + boost::shared_ptr<GameControlServer> gameControl(dynamic_pointer_cast<GameControlServer>(spark->GetCore()->Get(gameControlServer.toStdString()))); + boost::shared_ptr<GameStateAspect> gameState (dynamic_pointer_cast<GameStateAspect> (spark->GetCore()->Get(gameStateAspect.toStdString()))); + boost::shared_ptr<SoccerRuleAspect> soccerRule (dynamic_pointer_cast<SoccerRuleAspect> (spark->GetCore()->Get(soccerRuleAspect.toStdString()))); + boost::shared_ptr<BallStateAspect> ballState (dynamic_pointer_cast<BallStateAspect> (spark->GetCore()->Get(ballStateAspect.toStdString()))); + + bool success = true; + if (!gameControl.get()) + { + LOG_ERROR() << "Soccer GameControlServer not found. Expected it to be at " << gameControlServer << "."; + success = false; + } + if (!gameState.get()) + { + LOG_ERROR() << "Soccer GameStateAspect not found. Expected it to be at " << gameStateAspect << "."; + success = false; + } + if (!soccerRule.get()) + { + LOG_ERROR() << "Soccer SoccerRuleAspect not found. Expected it to be at " << soccerRuleAspect << "."; + success = false; + } + if (!ballState.get()) + { + LOG_ERROR() << "Soccer BallStateAspect not found. Expected it to be at " << ballStateAspect << "."; + success = false; + } + + if (success == false) + { + //Init failed, return + mGameControlServer.reset(); + mRuleAspect.reset(); + mBallAspect.reset(); + mGameAspect.reset(); + return false; + } + + //All nodes found, init successful + mGameControlServer = gameControl; + mRuleAspect = soccerRule; + mBallAspect = ballState; + mGameAspect = gameState; + + //Register control node that polls an update every time a cycle ended + registerUpdater(); + + mInit = true; + updateDisplay(); + return true; + } + return false; +} + +void SoccerControlFrame::registerUpdater() +{ + shared_ptr<GuiSimControl> simControl = mSparkController->getSimulationControl().lock(); + if (simControl.get() == 0) + { + LOG_ERROR() << "No gui simulation control node found to register updater in."; + return; + } + + //Remove old updater (should happen automatically, just to be safe) + if (mUpdater.get() != 0) + { + simControl->unregisterSimControl(mUpdater); + mUpdater.reset(); + } + + //Create new updater + mUpdater = shared_ptr<SoccerFrameUpdateControl>(new SoccerFrameUpdateControl(this)); + simControl->registerSimControl(mUpdater); + connect(&*mUpdater, SIGNAL(stateEndCycle()), this, SLOT(onCycleFinished())); //Queued connection + connect(&*mUpdater, SIGNAL(stateWaitCycle()), this, SLOT(onCycleFinished())); //Queued connection + + //Start update timer + mUpdateTimer.start(); +} + +//-------------------------------------------------------------- +// Private +//-------------------------------------------------------------- + +//-------------------------------------------------------------- +// Protected Slots +//-------------------------------------------------------------- + +void SoccerControlFrame::updateServerCreated(boost::shared_ptr<ServerThread> server) +{ + mSparkController = server->getSparkController(); + connect(&*mSparkController, SIGNAL(sparkRunning(SparkController*)), this, SLOT(updateSparkRunning(SparkController*))); + tryInitSpark(); +} + +void SoccerControlFrame::updateSparkRunning(SparkController* controller) +{ + if (mSparkController.get() != 0) + { + if (mSparkController->getSpark().get() == controller->getSpark().get()) + { + tryInitSpark(); + } + } +} + +void SoccerControlFrame::onCycleFinished() +{ + updateDisplay(); + mReadyUpdate = false; +} + +//-------------------------------------------------------------- +// Public Slots +//-------------------------------------------------------------- + +void SoccerControlFrame::readyUpdate() +{ + mReadyUpdate = true; +} + +void SoccerControlFrame::updateDisplay() +{ + if (mLastInitState != mInit) + { + mLastInitState = mInit; + mUpdateCount = 0; + + ui.batteryEdit->setEnabled(mInit); + ui.temperatureEdit->setEnabled(mInit); + ui.gameTimeEdit->setEnabled(mInit); + ui.team1GoalsEdit->setEnabled(mInit); + ui.team2GoalsEdit->setEnabled(mInit); + ui.team1PenaltiesEdit->setEnabled(mInit); + ui.team2PenaltiesEdit->setEnabled(mInit); + + ui.gameTimeResetButton->setEnabled(mInit); + ui.resetBatteryButton->setEnabled(mInit); + ui.resetTemperatureButton->setEnabled(mInit); + ui.kickOffButton->setEnabled(mInit); + ui.playModeButton->setEnabled(mInit); + ui.playModeComboBox->setEnabled(mInit); + + mSelectedPlayer = -1; + } + + if (!mInit) + { + ui.batteryEdit->setText(""); + ui.temperatureEdit->setText(""); + ui.gameTimeEdit->setText(""); + ui.team1GoalsEdit->setText(""); + ui.team2GoalsEdit->setText(""); + ui.team1PenaltiesEdit->setText(""); + ui.team2PenaltiesEdit->setText(""); + ui.team1NameLabel->setText(tr("Left")); + ui.team2NameLabel->setText(tr("Right")); + ui.agentNameLabel->setText(""); + ui.agentTeamLabel->setText(""); + ui.playModeLabel->setText(tr("Not initialized.")); + } + + if (mInit && mReadyUpdate) + { + //Read and display non-changing values + if (mUpdateCount == 0) + { + } + + //Read and update changing values + ui.team1NameLabel->setText(mGameAspect->GetTeamName(TI_LEFT).c_str()); + ui.team2NameLabel->setText(mGameAspect->GetTeamName(TI_RIGHT).c_str()); + if (!ui.team1GoalsEdit->hasFocus()) ui.team1GoalsEdit->setText(QString::number(mGameAspect->GetScore(TI_LEFT))); + if (!ui.team2GoalsEdit->hasFocus()) ui.team2GoalsEdit->setText(QString::number(mGameAspect->GetScore(TI_RIGHT))); + if (!ui.team1PenaltiesEdit->hasFocus()) ui.team1PenaltiesEdit->setText("0"); + if (!ui.team2PenaltiesEdit->hasFocus()) ui.team2PenaltiesEdit->setText("0"); + + if (!ui.gameTimeEdit->hasFocus()) ui.gameTimeEdit->setText(QString::number(mGameAspect->GetTime())); + + auto pos = mGameModes.find((int)mGameAspect->GetPlayMode()); + if (pos == mGameModes.end()) + { + LOG_WARNING() << "Current game mode " << mGameAspect->GetPlayMode() << " is unknown."; + } + else + { + if (mUpdateCount == 0) + ui.playModeComboBox->setCurrentIndex(pos->mIndex); + ui.playModeLabel->setText(pos->mName); + } + + updatePlayerDisplay(); + } + + mUpdateCount++; +} + +void SoccerControlFrame::updatePlayerDisplay() +{ + if (mSelectedPlayer == -1) + return; + + if (!mInit) + return; +} + +void SoccerControlFrame::editGameTime() +{ + if (!mInit) + return; + + mUpdater->queueCommand(make_shared<SoccerControlFrameUtil::SetTime>(mGameAspect, ui.gameTimeEdit->text().toFloat())); +} + +void SoccerControlFrame::resetGameTime() +{ + if (!mInit) + return; + + mUpdater->queueCommand(make_shared<SoccerControlFrameUtil::SetTime>(mGameAspect, 0.0)); +} + +void SoccerControlFrame::editTeam1Goals() +{ + if (!mInit) + return; + + mUpdater->queueCommand(make_shared<SoccerControlFrameUtil::SetTeamGoals>(mGameAspect, TI_LEFT, ui.team1GoalsEdit->text().toInt())); +} + +void SoccerControlFrame::editTeam2Goals() +{ + if (!mInit) + return; + + mUpdater->queueCommand(make_shared<SoccerControlFrameUtil::SetTeamGoals>(mGameAspect, TI_LEFT, ui.team2GoalsEdit->text().toInt())); +} + +void SoccerControlFrame::editTeam1Penalties() +{ + if (!mInit) + return; +} + +void SoccerControlFrame::editTeam2Penalties() +{ + if (!mInit) + return; +} + +void SoccerControlFrame::selectPlayMode(int index) +{ + if (!mInit) + return; + + ui.playModeButton->setEnabled(false); + + for (auto it = mGameModes.begin(); it != mGameModes.end(); it++) + { + if (it->mIndex == index) + { + mSelectedPlayMode = it->mMode; + ui.playModeButton->setEnabled(it->mManual); + } + } +} + +void SoccerControlFrame::changePlayMode() +{ + if (!mInit) + return; + + mUpdater->queueCommand(make_shared<SoccerControlFrameUtil::ChangePlayMode>(mGameAspect, mSelectedPlayMode)); +} + +void SoccerControlFrame::kickOff() +{ + if (!mInit) + return; + + mUpdater->queueCommand(make_shared<SoccerControlFrameUtil::KickOff>(mGameAspect)); +} + +void SoccerControlFrame::clearPlayers() +{ + if (!mInit) + return; +} + + +void SoccerControlFrame::selectPlayer(int index) +{ + if (!mInit) + return; + + mSelectedPlayer = -1; + updatePlayerDisplay(); +} + +void SoccerControlFrame::editBattery() +{ + if (!mInit) + return; + + if (mSelectedPlayer == -1) + return; + +} + +void SoccerControlFrame::editTemperature() +{ + if (!mInit) + return; + + if (mSelectedPlayer == -1) + return; + +} + +void SoccerControlFrame::resetBattery() +{ + if (!mInit) + return; + + if (mSelectedPlayer == -1) + return; + +} + +void SoccerControlFrame::resetTemperature() +{ + if (!mInit) + return; + + if (mSelectedPlayer == -1) + return; + + +} \ No newline at end of file Added: trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.h =================================================================== --- trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.h (rev 0) +++ trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.h 2015-09-12 01:48:23 UTC (rev 399) @@ -0,0 +1,391 @@ +/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- + + this file is part of rcssserver3D + Author: Patrick Geib + Copyright (C) 2012 RoboCup Soccer Server 3D Maintenance Group + $Id$ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef SOCCERCONTROLFRAME_H +#define SOCCERCONTROLFRAME_H +/** + * \file soccercontrolframe.h + * \brief Contains SoccerControlFrame and SoccerFrameUpdateControl classes. + */ + +#include "ui_soccercontrolframe.h" +#include "attachableframe.h" +#include "isimcontrol.h" +#include "sparkcommandqueue.h" + +#include <boost/shared_ptr.hpp> +#include <QObject> +#include <QTimer> + +#include <soccer/soccertypes.h> + +class ServerThread; +class SimSpark; +class Settings; + +class SoccerFrameUpdateControl; +class SoccerControlFrame; + +class GameStateAspect; +class SoccerRuleAspect; +class BallStateAspect; + +namespace oxygen +{ + class GameControlServer; +} + +/*! + \brief Update command queue read and set soccer variables and settings in the SimSpark simulation. +*/ +class SoccerFrameUpdateControl : public QObject, public SparkCommand::CommandQueue // is ISimControl +{ + Q_OBJECT + +public: + //public functions + + /*! + \brief Constructor. + */ + SoccerFrameUpdateControl(SoccerControlFrame* parent); + /*! + \brief Destructor. + */ + ~SoccerFrameUpdateControl(); + + /*! + \brief Called when the simulation cycle starts. + + Emits stateStartCycle() + */ + virtual void startCycle(); + /*! + \brief Called when the simulation cycle ends. + + Executes update commands. + Emits stateEndCycle() + */ + virtual void endCycle(); + /*! + \brief Called when the simulation executes a wait-cycle. + + Executes update commands. + Emits stateWaitCycle() + */ + virtual void waitCycle(); + +public: signals: + //public signals + + /*! + \brief Emittet when simualtion cycle starts. + + Calls update function. + */ + void stateStartCycle(); + /*! + \brief Emitted when simulation cycle ends. + + Calls update function. + */ + void stateEndCycle(); + /*! + \brief Emitted when simulation executes a wait-cycle. + + Calls update function. + */ + void stateWaitCycle(); + +public: + //public members + + SoccerControlFrame* mParent; /*!< Parent frame. */ +}; + +/*! + \brief AttachableFrame plugin that displays the state of a Ssoccer simulation and can control it. + + The SoccerControlFrame will wait and try to identify a soccer simulation in every Spark ServerThread that is started. + When it has found a ServerThread that runs a soccer simulation, the frame will register an updater to the SparkController and repeatedly update the + view on soccer variables like the team names, goals and the game time. + + The soccer values can be changed. + A List of SoccerFrameUtil::SoccerCommand derived classes can queue update calls for soccer variables and safely change the current game state. + + \todo Player control not implemented yet. Anyway, for player control to be effective there need to be additional functions to control them. + At the moment the only available functions would be battery state and temperature. + + \todo Currently the frame only controls basic soccer game control with the GameStateAspect and GameControlServer. + Additional control with the BallStateAspect, SoccerRuleAspect and the trainer command parser could be added. +*/ +class SoccerControlFrame : public AttachableFrame +{ + Q_OBJECT + GUI_FRAME + +public: + //public types + + /*! + \brief Description of the current game mode. + + Contains all the soccer game modes (BeforeKickoff, GoalLeft, FreekickRight and so on) and is robust to extension of the game modes. + */ + struct GameMode + { + public: + //public functions + + /*! + \brief full constructor. + + \param index index of the game mode in the combobox + \param mode spark game mode id + \param manual can it be selected by the user + \param name name string of the game mode + */ + GameMode(int index, TPlayMode mode, bool manual, QString name) + : mIndex(index), mMode(mode), mName(name), mManual(manual) {} + + TPlayMode mMode; /*!< spark game mode id */ + QString mName; /*!< name string of the game mode */ + int mIndex; /*!< index of the game mode in the combobox */ + bool mManual; /*!< can it be selected by the user */ + }; + +public: + // public functions + + /*! + \brief Constructor. + */ + SoccerControlFrame(); + /*! + \brief Destructor. + */ + ~SoccerControlFrame(); + +public: + //public virtual functions + + /*! + \brief Initialization function. + + \param parameters parameter list (not used) + */ + virtual void init(const QStringList& parameters); + + /*! + \brief Loads settings from global settings object. + */ + virtual void loadSettings(); + /*! + \brief Saves settings to global settings object. + */ + virtual void saveSettings(); + /*! + \brief Initializes settings with default values. + */ + virtual void loadDefaultSettings(); + + /*! + \brief Returns true after initialization of SimSpark simulation access. + */ + bool initialized(); + +protected: + //protected functions + + /*! + \brief Tries to initialize spark simulation access. + + Will fail if there is no Spark-Server, if the server has no SparkController, if the controller has not initialized SimSpark, or + if the Simulation does not have the required soccer control nodes. + + Tries to initialize again every time a server thread was created or started. + */ + bool tryInitSpark(); + /*! + \brief Registers the updater control to the SparkController. + + Called when spark access was initialized successfully. + */ + void registerUpdater(); + +protected slots: + //protected slots + + /*! + \brief Tries to initialize SimSpark access after a server was created. + + \param server serverthread that was created + */ + void updateServerCreated(boost::shared_ptr<ServerThread> server); + /*! + \brief Tries to initialize SimSpark access after spark was started. + + \param controller that startet SimSpark + */ + void updateSparkRunning(SparkController* controller); + + /*! + \brief Update function called after a run or wait simulation cycle finished. + + Disables updates until the update timer ticks for the next time and calls readyUpdate(). + */ + void onCycleFinished(); + +public slots: + //public slots + + /*! + \brief Causes an update of the display the next time a simulation cycle ends. + */ + void readyUpdate(); + /*! + \brief Updates the data fields with the current soccer variables. + */ + void updateDisplay(); + /*! + \brief updates the data fields of the currently selected agent. + + \todo not implemented yet + */ + void updatePlayerDisplay(); + + /*! + \brief Updates the game time from the ui text edit. + */ + void editGameTime(); + /*! + \brief Resets the game time to the first value recorded. + */ + void resetGameTime(); + + /*! + \brief Updates team 1 goals from the ui text edit. + */ + void editTeam1Goals(); + /*! + \brief Updates team 2 goals from the ui text edit. + */ + void editTeam2Goals(); + /*! + \brief Updates team 1 penalties from the ui text edit. + + \todo Penalties are just a possibility. They are not recorded in SimSpark yet. + */ + void editTeam1Penalties(); + /*! + \brief Updates team 2 penalties from the ui text edit. + + \todo Penalties are just a possibility. They are not recorded in SimSpark yet. + */ + void editTeam2Penalties(); + + /*! + \brief Select a play mode from the ui combo box. It will be changed after confirmation by a button click. + + \param index index of the mode entry + */ + void selectPlayMode(int index); + /*! + \brief Change the current game mode as chosen in the ui combo box. + */ + void changePlayMode(); + + /*! + \brief Change game mode to KickOff. + */ + void kickOff(); + /*! + \brief Moves players away from the ball and resets their position. + + \todo not implemented yet, because there is no direct implementation in SoccerRuleAspect. Integrate the commands of trainer command parser + for this. + */ + void clearPlayers(); + + /*! + \brief Chooses an agent by index. + + \todo player control not implemented yet + \param index index of the player + */ + void selectPlayer(int index); + /*! + \brief Changes the battery value of an agent from the ui text edit. + + \todo player control not implemented yet + */ + void editBattery(); + /*! + \brief Changes the temperature value of an agent from the ui text edit. + + \todo player control not implemented yet + */ + void editTemperature(); + /*! + \brief Resets the battery of an agent to the first recorded value. + + \todo player control not implemented yet + */ + void resetBattery(); + /*! + \brief Resets the temperature of an agent to the first recorded value. + + \todo player control not implemented yet + */ + void resetTemperature(); + +private: + // private members + + Ui::SoccerControlFrame ui; /*!< Ui definition object. */ + boost::shared_ptr<Settings> mSettings; /*!< Global Settings object. */ + boost::shared_ptr<SoccerFrameUpdateControl> mUpdater; /*!< Update control for the soccer frame. Registered to the current SparkControllers GuiSimControl node. */ + boost::shared_ptr<SparkController> mSparkController; /*!< SparkController of the observed simualtion. */ + QTimer mUpdateTimer; /*!< Update timer. When it ticks, the next simualtion cycle will update the display. */ + + bool mInit; /*!< True after spark access was initialized. */ + bool mLastInitState; /*!< Initialization state during last init try. */ + int mSelectedPlayer; /*!< Currently selected agents index. */ + int mUpdateCount; /*!< Amount of updates calls since last reset. */ + bool mReadyUpdate; /*!< If true (activated by update timer) update will be called in next simulation cycle. */ + TPlayMode mSelectedPlayMode; /*!< Currently selected play mode in ui combo box. */ + + boost::shared_ptr<ServerThread> mServerThread; /*!< Observes server thread. */ + boost::shared_ptr<oxygen::GameControlServer> mGameControlServer; /*!< Observes game control server. */ + boost::shared_ptr<SoccerRuleAspect> mRuleAspect; /*!< Observes servers soccer rule aspect. */ + boost::shared_ptr<BallStateAspect> mBallAspect; /*!< Observed servers ball state asoect. */ + boost::shared_ptr<GameStateAspect> mGameAspect; /*!< Observed servers game state aspect. */ + //std::vector<boost::shared_ptr<AgentAspect>> mAgentAspects; /*!< Observed servers agent state aspects. */ + + QString mGameControlServerPath; /*!< Expected scene graph path of game control server. (Loaded from settings) */ + QString mGameStateAspectPath; /*!< Expected scene graph path of game state aspect. (Loaded from settings) */ + QString mSoccerRuleAspectPath; /*!< Expected scene graph path of soccer rule aspect. (Loaded from settings) */ + QString mBallStateAspectPath; /*!< Expected scene graph path of ball state aspect. (Loaded from settings) */ + + QMap<int, GameMode> mGameModes; /*!< Map containing all of the game modes with their TPlayMode indices. */ +}; + +#endif // SOCCERCONTROLFRAME_H Added: trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.ui =================================================================== --- trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.ui (rev 0) +++ trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.ui 2015-09-12 01:48:23 UTC (rev 399) @@ -0,0 +1,857 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>SoccerControlFrame</class> + <widget class="AttachableFrame" name="SoccerControlFrame"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>297</width> + <height>565</height> + </rect> + </property> + <property name="windowTitle"> + <string>Frame</string> + </property> + <property name="whatsThis"> + <string>The soccer control frame can be used to monitor and control the state of a simspark soccer simulation.</string> + </property> + <layout class="QGridLayout" name="gridLayout_3"> + <property name="margin"> + <number>0</number> + </property> + <item row="0" column="0"> + <widget class="QWidget" name="widget_6" native="true"> + <layout class="QVBoxLayout" name="verticalLayout_5"> + <item> + <widget class="QGroupBox" name="groupBox"> + <property name="font"> + <font> + <pointsize>10</pointsize> + </font> + </property> + <property name="title"> + <string>Game State</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QWidget" name="widget_8" native="true"> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="gameTimeHeaderLabel"> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="text"> + <string>Game Time:</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit"... [truncated message content] |
From: <he...@us...> - 2015-09-12 01:47:39
|
Revision: 398 http://sourceforge.net/p/simspark/svn/398 Author: hedayat Date: 2015-09-12 01:47:34 +0000 (Sat, 12 Sep 2015) Log Message: ----------- Add Carbon to Spark Modified Paths: -------------- trunk/spark/CMakeLists.txt trunk/spark/ChangeLog trunk/spark/README trunk/spark/data/CMakeLists.txt trunk/spark/doc/Doxyfile.in trunk/spark/lib/kerosin/inputserver/inputsystem.cpp trunk/spark/lib/kerosin/inputserver/inputsystem.h trunk/spark/lib/kerosin/renderserver/rendercontrol.cpp trunk/spark/lib/kerosin/renderserver/rendercontrol.h trunk/spark/lib/kerosin/renderserver/rendercontrol_c.cpp trunk/spark/lib/kerosin/renderserver/renderserver.cpp trunk/spark/lib/oxygen/sceneserver/fpscontroller.cpp trunk/spark/lib/oxygen/simulationserver/simcontrolnode.h trunk/spark/lib/oxygen/simulationserver/simulationserver.cpp trunk/spark/lib/oxygen/simulationserver/simulationserver.h trunk/spark/lib/salt/gmath.h trunk/spark/lib/zeitgeist/core.cpp trunk/spark/lib/zeitgeist/core.h trunk/spark/lib/zeitgeist/leaf_c.cpp trunk/spark/lib/zeitgeist/logserver/logserver.cpp trunk/spark/lib/zeitgeist/logserver/logserver.h trunk/spark/lib/zeitgeist/logserver/logserver_c.cpp trunk/spark/lib/zeitgeist/logserver/logserverstreambuf.cpp trunk/spark/lib/zeitgeist/logserver/logserverstreambuf.h trunk/spark/lib/zeitgeist/scriptserver/scriptserver.cpp trunk/spark/plugin/CMakeLists.txt trunk/spark/plugin/filesystemzip/filesystemzip.cpp trunk/spark/spark/CMakeLists.txt trunk/spark/spark/spark.cpp trunk/spark/spark/spark.h trunk/spark/spark/spark.rb trunk/spark/test/scenetest/main.cpp trunk/spark/test/scenetest/md5mesh.cpp Added Paths: ----------- trunk/spark/carbon/ trunk/spark/carbon/CMakeLists.txt trunk/spark/carbon/Doxyfile trunk/spark/carbon/about.ui trunk/spark/carbon/aboutdialog.cpp trunk/spark/carbon/aboutdialog.h trunk/spark/carbon/abstractcommand.cpp trunk/spark/carbon/abstractcommand.h trunk/spark/carbon/abstractcommandqueue.cpp trunk/spark/carbon/abstractcommandqueue.h trunk/spark/carbon/abstractplugin.cpp trunk/spark/carbon/abstractplugin.h trunk/spark/carbon/attachableframe.cpp trunk/spark/carbon/attachableframe.h trunk/spark/carbon/build_doc.bat trunk/spark/carbon/carbon.cpp trunk/spark/carbon/carbon.h trunk/spark/carbon/communicationmanager.cpp trunk/spark/carbon/communicationmanager.h trunk/spark/carbon/cutelogger/ trunk/spark/carbon/cutelogger/abstractappender.cpp trunk/spark/carbon/cutelogger/abstractappender.h trunk/spark/carbon/cutelogger/abstractstringappender.cpp trunk/spark/carbon/cutelogger/abstractstringappender.h trunk/spark/carbon/cutelogger/consoleappender.cpp trunk/spark/carbon/cutelogger/consoleappender.h trunk/spark/carbon/cutelogger/debugappender.cpp trunk/spark/carbon/cutelogger/debugappender.h trunk/spark/carbon/cutelogger/fileappender.cpp trunk/spark/carbon/cutelogger/fileappender.h trunk/spark/carbon/cutelogger/functionappender.cpp trunk/spark/carbon/cutelogger/functionappender.h trunk/spark/carbon/cutelogger/imessagereceiver.cpp trunk/spark/carbon/cutelogger/imessagereceiver.h trunk/spark/carbon/cutelogger/logger.cpp trunk/spark/carbon/cutelogger/logger.h trunk/spark/carbon/cutelogger/logmessage.cpp trunk/spark/carbon/cutelogger/logmessage.h trunk/spark/carbon/cutelogger/logstream.cpp trunk/spark/carbon/cutelogger/logstream.h trunk/spark/carbon/cutelogger/logstreambuffer.cpp trunk/spark/carbon/cutelogger/logstreambuffer.h trunk/spark/carbon/cutelogger/messageobjectappender.cpp trunk/spark/carbon/cutelogger/messageobjectappender.h trunk/spark/carbon/cutelogger/messagereceiverappender.cpp trunk/spark/carbon/cutelogger/messagereceiverappender.h trunk/spark/carbon/frameattachmentpoint.cpp trunk/spark/carbon/frameattachmentpoint.h trunk/spark/carbon/glwidget.cpp trunk/spark/carbon/glwidget.h trunk/spark/carbon/gui.pri trunk/spark/carbon/gui.pro trunk/spark/carbon/guisettings_pluginsettings.cpp trunk/spark/carbon/guisettings_pluginsettings.h trunk/spark/carbon/guisettings_pluginsettings.ui trunk/spark/carbon/guisettings_simulationsettings.cpp trunk/spark/carbon/guisettings_simulationsettings.h trunk/spark/carbon/guisettings_simulationsettings.ui trunk/spark/carbon/guisimcontrol.cpp trunk/spark/carbon/guisimcontrol.h trunk/spark/carbon/guisimcontrol_c.cpp trunk/spark/carbon/imageresources.qrc trunk/spark/carbon/inputqt.cpp trunk/spark/carbon/inputqt.h trunk/spark/carbon/isimcontrol.cpp trunk/spark/carbon/isimcontrol.h trunk/spark/carbon/libraryloader.cpp trunk/spark/carbon/libraryloader.h trunk/spark/carbon/main.cpp trunk/spark/carbon/matrixwidget.cpp trunk/spark/carbon/matrixwidget.h trunk/spark/carbon/matrixwidget.ui trunk/spark/carbon/menumanager.cpp trunk/spark/carbon/menumanager.h trunk/spark/carbon/menuobject.cpp trunk/spark/carbon/menuobject.h trunk/spark/carbon/menuobjectcall.cpp trunk/spark/carbon/menuobjectcall.h trunk/spark/carbon/menuobjectconnection.cpp trunk/spark/carbon/menuobjectconnection.h trunk/spark/carbon/menuobjectfile.cpp trunk/spark/carbon/menuobjectfile.h trunk/spark/carbon/menuobjectmenu.cpp trunk/spark/carbon/menuobjectmenu.h trunk/spark/carbon/menuobjectmenuaction.cpp trunk/spark/carbon/menuobjectmenuaction.h trunk/spark/carbon/menuobjecttoolbar.cpp trunk/spark/carbon/menuobjecttoolbar.h trunk/spark/carbon/namedactionreceiver.cpp trunk/spark/carbon/namedactionreceiver.h trunk/spark/carbon/numberedactionreceiver.cpp trunk/spark/carbon/numberedactionreceiver.h trunk/spark/carbon/openglmanager.cpp trunk/spark/carbon/openglmanager.h trunk/spark/carbon/plugin.cpp trunk/spark/carbon/plugin.h trunk/spark/carbon/plugindefinition.cpp trunk/spark/carbon/plugindefinition.h trunk/spark/carbon/plugindialog.cpp trunk/spark/carbon/plugindialog.h trunk/spark/carbon/plugindialog.ui trunk/spark/carbon/plugininstantiatormodel.cpp trunk/spark/carbon/plugininstantiatormodel.h trunk/spark/carbon/pluginmanager.cpp trunk/spark/carbon/pluginmanager.h trunk/spark/carbon/pluginthread.cpp trunk/spark/carbon/pluginthread.h trunk/spark/carbon/plugintype.cpp trunk/spark/carbon/plugintype.h trunk/spark/carbon/process.cpp trunk/spark/carbon/process.h trunk/spark/carbon/serverthread.cpp trunk/spark/carbon/serverthread.h trunk/spark/carbon/settings.cpp trunk/spark/carbon/settings.h trunk/spark/carbon/settingsdialog.cpp trunk/spark/carbon/settingsdialog.h trunk/spark/carbon/settingsdialog.ui trunk/spark/carbon/settingstreeview.cpp trunk/spark/carbon/settingstreeview.h trunk/spark/carbon/settingswidget.cpp trunk/spark/carbon/settingswidget.h trunk/spark/carbon/setupdialog.cpp trunk/spark/carbon/setupdialog.h trunk/spark/carbon/setupdialog.ui trunk/spark/carbon/setupframe.cpp trunk/spark/carbon/setupframe.h trunk/spark/carbon/setupframe.ui trunk/spark/carbon/signalplugin.cpp trunk/spark/carbon/signalplugin.h trunk/spark/carbon/simspark.cpp trunk/spark/carbon/simspark.h trunk/spark/carbon/simulation.cpp trunk/spark/carbon/simulation.h trunk/spark/carbon/simulationmanager.cpp trunk/spark/carbon/simulationmanager.h trunk/spark/carbon/simulationprocess.cpp trunk/spark/carbon/simulationprocess.h trunk/spark/carbon/simulationsetup.cpp trunk/spark/carbon/simulationsetup.h trunk/spark/carbon/simulationtask.cpp trunk/spark/carbon/simulationtask.h trunk/spark/carbon/simulationthread.cpp trunk/spark/carbon/simulationthread.h trunk/spark/carbon/sparkcommandqueue.cpp trunk/spark/carbon/sparkcommandqueue.h trunk/spark/carbon/sparkcommands.cpp trunk/spark/carbon/sparkcommands.h trunk/spark/carbon/sparkcontext.cpp trunk/spark/carbon/sparkcontext.h trunk/spark/carbon/sparkcontroller.cpp trunk/spark/carbon/sparkcontroller.h trunk/spark/carbon/sparkprocess.cpp trunk/spark/carbon/sparkprocess.h trunk/spark/carbon/sparkproperty.cpp trunk/spark/carbon/sparkproperty.h trunk/spark/carbon/sparkpropertycontrol.cpp trunk/spark/carbon/sparkpropertycontrol.h trunk/spark/carbon/sparkpropertycontrolbasic.cpp trunk/spark/carbon/sparkpropertycontrolbasic.h trunk/spark/carbon/sparkpropertydata.cpp trunk/spark/carbon/sparkpropertydata.h trunk/spark/carbon/sparkpropertyexecuter.cpp trunk/spark/carbon/sparkpropertyexecuter.h trunk/spark/carbon/sparkpropertylist.cpp trunk/spark/carbon/sparkpropertylist.h trunk/spark/carbon/sparkpropertymanager.cpp trunk/spark/carbon/sparkpropertymanager.h trunk/spark/carbon/sparkpropertytablewidget.cpp trunk/spark/carbon/sparkpropertytablewidget.h trunk/spark/carbon/sparkpropertywidget.cpp trunk/spark/carbon/sparkpropertywidget.h trunk/spark/carbon/sparkpropertywidget.ui trunk/spark/carbon/sparksimulationthread.cpp trunk/spark/carbon/sparksimulationthread.h trunk/spark/carbon/sparktreemodel.cpp trunk/spark/carbon/sparktreemodel.h trunk/spark/carbon/sparktreeview.cpp trunk/spark/carbon/sparktreeview.h trunk/spark/carbon/taskdefinition.cpp trunk/spark/carbon/taskdefinition.h trunk/spark/carbon/toolseparatorbutton.cpp trunk/spark/carbon/toolseparatorbutton.h trunk/spark/carbon/topic.cpp trunk/spark/carbon/topic.h trunk/spark/carbon/topicregistration.cpp trunk/spark/carbon/topicregistration.h trunk/spark/carbon/treeitem.cpp trunk/spark/carbon/treeitem.h trunk/spark/carbon/typedlineedit.cpp trunk/spark/carbon/typedlineedit.h trunk/spark/carbon/vector2x3widget.cpp trunk/spark/carbon/vector2x3widget.h trunk/spark/carbon/vector3widget.cpp trunk/spark/carbon/vector3widget.h trunk/spark/carbon/vector3widget.ui trunk/spark/carbon/vector4widget.cpp trunk/spark/carbon/vector4widget.h trunk/spark/carbon/vector4widget.ui trunk/spark/carbon/windowdefinition.cpp trunk/spark/carbon/windowdefinition.h trunk/spark/carbon/windowmanager.cpp trunk/spark/carbon/windowmanager.h trunk/spark/data/guisetups/ trunk/spark/data/guisetups/DefaultSetupGrid.xml trunk/spark/data/guisetups/ExternalSoccerSim.xml trunk/spark/data/guisetups/IntegratedSoccerSim.xml trunk/spark/data/guisetups/InternalSoccerSim.xml trunk/spark/data/images/ trunk/spark/data/images/ilikebuttons/ trunk/spark/data/images/ilikebuttons/VeryIcon.com.url trunk/spark/data/images/ilikebuttons/VeryIcon.txt trunk/spark/data/images/ilikebuttons/permission.txt trunk/spark/data/images/ilikebuttons/png/ trunk/spark/data/images/ilikebuttons/png/Aqua_Favorites.png trunk/spark/data/images/ilikebuttons/png/Aqua_Menu.png trunk/spark/data/images/ilikebuttons/png/Aqua_Next.png trunk/spark/data/images/ilikebuttons/png/Aqua_Pause.png trunk/spark/data/images/ilikebuttons/png/Aqua_Play.png trunk/spark/data/images/ilikebuttons/png/Aqua_Previous.png trunk/spark/data/images/ilikebuttons/png/Aqua_Stop.png trunk/spark/data/images/ilikebuttons/png/NN_Play.png trunk/spark/data/images/ilikebuttons/png/NN_Stop.png trunk/spark/data/images/led/ trunk/spark/data/images/led/1license.txt trunk/spark/data/images/led/entension.txt trunk/spark/data/images/led/png/ trunk/spark/data/images/led/png/accept.png trunk/spark/data/images/led/png/add.png trunk/spark/data/images/led/png/alarm.png trunk/spark/data/images/led/png/anchor.png trunk/spark/data/images/led/png/application.png trunk/spark/data/images/led/png/application2.png trunk/spark/data/images/led/png/application_add.png trunk/spark/data/images/led/png/application_cascade.png trunk/spark/data/images/led/png/application_delete.png trunk/spark/data/images/led/png/application_double.png trunk/spark/data/images/led/png/application_edit.png trunk/spark/data/images/led/png/application_error.png trunk/spark/data/images/led/png/application_form.png trunk/spark/data/images/led/png/application_get.png trunk/spark/data/images/led/png/application_go.png trunk/spark/data/images/led/png/application_home.png trunk/spark/data/images/led/png/application_key.png trunk/spark/data/images/led/png/application_lightning.png trunk/spark/data/images/led/png/application_link.png trunk/spark/data/images/led/png/application_osx.png trunk/spark/data/images/led/png/application_osx_terminal.png trunk/spark/data/images/led/png/application_put.png trunk/spark/data/images/led/png/application_side_boxes.png trunk/spark/data/images/led/png/application_side_contract.png trunk/spark/data/images/led/png/application_side_expand.png trunk/spark/data/images/led/png/application_side_list.png trunk/spark/data/images/led/png/application_side_tree.png trunk/spark/data/images/led/png/application_split.png trunk/spark/data/images/led/png/application_tile_horizontal.png trunk/spark/data/images/led/png/application_tile_vertical.png trunk/spark/data/images/led/png/application_view_columns.png trunk/spark/data/images/led/png/application_view_detail.png trunk/spark/data/images/led/png/application_view_gallery.png trunk/spark/data/images/led/png/application_view_icons.png trunk/spark/data/images/led/png/application_view_list.png trunk/spark/data/images/led/png/application_view_tile.png trunk/spark/data/images/led/png/application_view_xp.png trunk/spark/data/images/led/png/application_view_xp_terminal.png trunk/spark/data/images/led/png/arrow_branch.png trunk/spark/data/images/led/png/arrow_collapse.png trunk/spark/data/images/led/png/arrow_divide.png trunk/spark/data/images/led/png/arrow_down.png trunk/spark/data/images/led/png/arrow_expand.png trunk/spark/data/images/led/png/arrow_in.png trunk/spark/data/images/led/png/arrow_inout.png trunk/spark/data/images/led/png/arrow_join.png trunk/spark/data/images/led/png/arrow_left.png trunk/spark/data/images/led/png/arrow_merge.png trunk/spark/data/images/led/png/arrow_out.png trunk/spark/data/images/led/png/arrow_play.png trunk/spark/data/images/led/png/arrow_redo.png trunk/spark/data/images/led/png/arrow_refresh.png trunk/spark/data/images/led/png/arrow_right.png trunk/spark/data/images/led/png/arrow_undo.png trunk/spark/data/images/led/png/arrow_up.png trunk/spark/data/images/led/png/asterisk_orange.png trunk/spark/data/images/led/png/attach.png trunk/spark/data/images/led/png/attach_2.png trunk/spark/data/images/led/png/award_star_gold.png trunk/spark/data/images/led/png/bandaid.png trunk/spark/data/images/led/png/basket.png trunk/spark/data/images/led/png/bell.png trunk/spark/data/images/led/png/bin_closed.png trunk/spark/data/images/led/png/blog.png trunk/spark/data/images/led/png/blueprint.png trunk/spark/data/images/led/png/blueprint_horizontal.png trunk/spark/data/images/led/png/bluetooth.png trunk/spark/data/images/led/png/bomb.png trunk/spark/data/images/led/png/book.png trunk/spark/data/images/led/png/book_addresses.png trunk/spark/data/images/led/png/book_next.png trunk/spark/data/images/led/png/book_open.png trunk/spark/data/images/led/png/book_previous.png trunk/spark/data/images/led/png/bookmark.png trunk/spark/data/images/led/png/bookmark_book.png trunk/spark/data/images/led/png/bookmark_book_open.png trunk/spark/data/images/led/png/bookmark_document.png trunk/spark/data/images/led/png/bookmark_folder.png trunk/spark/data/images/led/png/books.png trunk/spark/data/images/led/png/box.png trunk/spark/data/images/led/png/brick.png trunk/spark/data/images/led/png/bricks.png trunk/spark/data/images/led/png/briefcase.png trunk/spark/data/images/led/png/bug.png trunk/spark/data/images/led/png/buildings.png trunk/spark/data/images/led/png/bullet_add_1.png trunk/spark/data/images/led/png/bullet_add_2.png trunk/spark/data/images/led/png/bullet_key.png trunk/spark/data/images/led/png/cake.png trunk/spark/data/images/led/png/calculator.png trunk/spark/data/images/led/png/calendar_1.png trunk/spark/data/images/led/png/calendar_2.png trunk/spark/data/images/led/png/camera.png trunk/spark/data/images/led/png/cancel.png trunk/spark/data/images/led/png/car.png trunk/spark/data/images/led/png/cart.png trunk/spark/data/images/led/png/cd.png trunk/spark/data/images/led/png/chart_bar.png trunk/spark/data/images/led/png/chart_curve.png trunk/spark/data/images/led/png/chart_line.png trunk/spark/data/images/led/png/chart_organisation.png trunk/spark/data/images/led/png/chart_pie.png trunk/spark/data/images/led/png/clipboard_paste_image.png trunk/spark/data/images/led/png/clipboard_sign.png trunk/spark/data/images/led/png/clipboard_text.png trunk/spark/data/images/led/png/clock.png trunk/spark/data/images/led/png/cog.png trunk/spark/data/images/led/png/coins.png trunk/spark/data/images/led/png/color_swatch_1.png trunk/spark/data/images/led/png/color_swatch_2.png trunk/spark/data/images/led/png/comment.png trunk/spark/data/images/led/png/compass.png trunk/spark/data/images/led/png/compress.png trunk/spark/data/images/led/png/computer.png trunk/spark/data/images/led/png/connect.png trunk/spark/data/images/led/png/contrast.png trunk/spark/data/images/led/png/control_eject.png trunk/spark/data/images/led/png/control_end.png trunk/spark/data/images/led/png/control_equalizer.png trunk/spark/data/images/led/png/control_fastforward.png trunk/spark/data/images/led/png/control_pause.png trunk/spark/data/images/led/png/control_play.png trunk/spark/data/images/led/png/control_repeat.png trunk/spark/data/images/led/png/control_rewind.png trunk/spark/data/images/led/png/control_start.png trunk/spark/data/images/led/png/control_stop.png trunk/spark/data/images/led/png/control_wheel.png trunk/spark/data/images/led/png/counter.png trunk/spark/data/images/led/png/counter_count.png trunk/spark/data/images/led/png/counter_count_up.png trunk/spark/data/images/led/png/counter_reset.png trunk/spark/data/images/led/png/counter_stop.png trunk/spark/data/images/led/png/cross.png trunk/spark/data/images/led/png/cross_octagon.png trunk/spark/data/images/led/png/cross_octagon_fram.png trunk/spark/data/images/led/png/cross_shield.png trunk/spark/data/images/led/png/cross_shield_2.png trunk/spark/data/images/led/png/crown.png trunk/spark/data/images/led/png/crown_bronze.png trunk/spark/data/images/led/png/crown_silver.png trunk/spark/data/images/led/png/css.png trunk/spark/data/images/led/png/cursor.png trunk/spark/data/images/led/png/cut.png trunk/spark/data/images/led/png/dashboard.png trunk/spark/data/images/led/png/data.png trunk/spark/data/images/led/png/database.png trunk/spark/data/images/led/png/databases.png trunk/spark/data/images/led/png/delete.png trunk/spark/data/images/led/png/delivery.png trunk/spark/data/images/led/png/desktop.png trunk/spark/data/images/led/png/desktop_empty.png trunk/spark/data/images/led/png/direction.png trunk/spark/data/images/led/png/disconnect.png trunk/spark/data/images/led/png/disk.png trunk/spark/data/images/led/png/doc_access.png trunk/spark/data/images/led/png/doc_break.png trunk/spark/data/images/led/png/doc_convert.png trunk/spark/data/images/led/png/doc_excel_csv.png trunk/spark/data/images/led/png/doc_excel_table.png trunk/spark/data/images/led/png/doc_film.png trunk/spark/data/images/led/png/doc_illustrator.png trunk/spark/data/images/led/png/doc_music.png trunk/spark/data/images/led/png/doc_music_playlist.png trunk/spark/data/images/led/png/doc_offlice.png trunk/spark/data/images/led/png/doc_page.png trunk/spark/data/images/led/png/doc_page_previous.png trunk/spark/data/images/led/png/doc_pdf.png trunk/spark/data/images/led/png/doc_photoshop.png trunk/spark/data/images/led/png/doc_resize.png trunk/spark/data/images/led/png/doc_resize_actual.png trunk/spark/data/images/led/png/doc_shred.png trunk/spark/data/images/led/png/doc_stand.png trunk/spark/data/images/led/png/doc_table.png trunk/spark/data/images/led/png/doc_tag.png trunk/spark/data/images/led/png/doc_text_image.png trunk/spark/data/images/led/png/door.png trunk/spark/data/images/led/png/door_in.png trunk/spark/data/images/led/png/drawer.png trunk/spark/data/images/led/png/drink.png trunk/spark/data/images/led/png/drink_empty.png trunk/spark/data/images/led/png/drive.png trunk/spark/data/images/led/png/drive_burn.png trunk/spark/data/images/led/png/drive_cd.png trunk/spark/data/images/led/png/drive_cd_empty.png trunk/spark/data/images/led/png/drive_delete.png trunk/spark/data/images/led/png/drive_disk.png trunk/spark/data/images/led/png/drive_error.png trunk/spark/data/images/led/png/drive_go.png trunk/spark/data/images/led/png/drive_link.png trunk/spark/data/images/led/png/drive_network.png trunk/spark/data/images/led/png/drive_rename.png trunk/spark/data/images/led/png/dvd.png trunk/spark/data/images/led/png/email.png trunk/spark/data/images/led/png/email_open.png trunk/spark/data/images/led/png/email_open_image.png trunk/spark/data/images/led/png/emoticon_evilgrin.png trunk/spark/data/images/led/png/emoticon_grin.png trunk/spark/data/images/led/png/emoticon_happy.png trunk/spark/data/images/led/png/emoticon_smile.png trunk/spark/data/images/led/png/emoticon_surprised.png trunk/spark/data/images/led/png/emoticon_tongue.png trunk/spark/data/images/led/png/emoticon_unhappy.png trunk/spark/data/images/led/png/emoticon_waii.png trunk/spark/data/images/led/png/emoticon_wink.png trunk/spark/data/images/led/png/envelope.png trunk/spark/data/images/led/png/envelope_2.png trunk/spark/data/images/led/png/error.png trunk/spark/data/images/led/png/exclamation.png trunk/spark/data/images/led/png/exclamation_octagon_fram.png trunk/spark/data/images/led/png/eye.png trunk/spark/data/images/led/png/feed.png trunk/spark/data/images/led/png/feed_ballon.png trunk/spark/data/images/led/png/feed_document.png trunk/spark/data/images/led/png/female.png trunk/spark/data/images/led/png/film.png trunk/spark/data/images/led/png/films.png trunk/spark/data/images/led/png/find.png trunk/spark/data/images/led/png/flag_blue.png trunk/spark/data/images/led/png/folder.png trunk/spark/data/images/led/png/font.png trunk/spark/data/images/led/png/funnel.png trunk/spark/data/images/led/png/grid.png trunk/spark/data/images/led/png/grid_dot.png trunk/spark/data/images/led/png/group.png trunk/spark/data/images/led/png/hammer.png trunk/spark/data/images/led/png/hammer_screwdriver.png trunk/spark/data/images/led/png/hand.png trunk/spark/data/images/led/png/hand_point.png trunk/spark/data/images/led/png/heart.png trunk/spark/data/images/led/png/heart_break.png trunk/spark/data/images/led/png/heart_empty.png trunk/spark/data/images/led/png/heart_half.png trunk/spark/data/images/led/png/heart_small.png trunk/spark/data/images/led/png/help.png trunk/spark/data/images/led/png/highlighter.png trunk/spark/data/images/led/png/house.png trunk/spark/data/images/led/png/html.png trunk/spark/data/images/led/png/image_1.png trunk/spark/data/images/led/png/image_2.png trunk/spark/data/images/led/png/images.png trunk/spark/data/images/led/png/inbox.png trunk/spark/data/images/led/png/ipod.png trunk/spark/data/images/led/png/ipod_cast.png trunk/spark/data/images/led/png/joystick.png trunk/spark/data/images/led/png/key.png trunk/spark/data/images/led/png/keyboard.png trunk/spark/data/images/led/png/layer_treansparent.png trunk/spark/data/images/led/png/layers.png trunk/spark/data/images/led/png/layout.png trunk/spark/data/images/led/png/layout_header_footer_3.png trunk/spark/data/images/led/png/layout_header_footer_3_mix.png trunk/spark/data/images/led/png/layout_join.png trunk/spark/data/images/led/png/layout_join_vertical.png trunk/spark/data/images/led/png/layout_select.png trunk/spark/data/images/led/png/layout_select_content.png trunk/spark/data/images/led/png/layout_select_footer.png trunk/spark/data/images/led/png/layout_select_sidebar.png trunk/spark/data/images/led/png/layout_split.png trunk/spark/data/images/led/png/layout_split_vertical.png trunk/spark/data/images/led/png/lifebuoy.png trunk/spark/data/images/led/png/lightbulb.png trunk/spark/data/images/led/png/lightbulb_off.png trunk/spark/data/images/led/png/lightning.png trunk/spark/data/images/led/png/link.png trunk/spark/data/images/led/png/link_break.png trunk/spark/data/images/led/png/lock.png trunk/spark/data/images/led/png/lock_unlock.png trunk/spark/data/images/led/png/magnet.png trunk/spark/data/images/led/png/magnifier.png trunk/spark/data/images/led/png/magnifier_zoom_in.png trunk/spark/data/images/led/png/male.png trunk/spark/data/images/led/png/map.png trunk/spark/data/images/led/png/marker.png trunk/spark/data/images/led/png/medal_bronze_1.png trunk/spark/data/images/led/png/medal_gold_1.png trunk/spark/data/images/led/png/media_player_small_blue.png trunk/spark/data/images/led/png/microphone.png trunk/spark/data/images/led/png/mobile_phone.png trunk/spark/data/images/led/png/money.png trunk/spark/data/images/led/png/money_dollar.png trunk/spark/data/images/led/png/money_euro.png trunk/spark/data/images/led/png/money_pound.png trunk/spark/data/images/led/png/money_yen.png trunk/spark/data/images/led/png/monitor.png trunk/spark/data/images/led/png/mouse.png trunk/spark/data/images/led/png/music.png trunk/spark/data/images/led/png/music_beam.png trunk/spark/data/images/led/png/neutral.png trunk/spark/data/images/led/png/new.png trunk/spark/data/images/led/png/newspaper.png trunk/spark/data/images/led/png/note.png trunk/spark/data/images/led/png/nuclear.png trunk/spark/data/images/led/png/package.png trunk/spark/data/images/led/png/page.png trunk/spark/data/images/led/png/page_2.png trunk/spark/data/images/led/png/page_2_copy.png trunk/spark/data/images/led/png/page_code.png trunk/spark/data/images/led/png/page_copy.png trunk/spark/data/images/led/png/page_excel.png trunk/spark/data/images/led/png/page_lightning.png trunk/spark/data/images/led/png/page_paste.png trunk/spark/data/images/led/png/page_red.png trunk/spark/data/images/led/png/page_refresh.png trunk/spark/data/images/led/png/page_save.png trunk/spark/data/images/led/png/page_white_cplusplus.png trunk/spark/data/images/led/png/page_white_csharp.png trunk/spark/data/images/led/png/page_white_cup.png trunk/spark/data/images/led/png/page_white_database.png trunk/spark/data/images/led/png/page_white_delete.png trunk/spark/data/images/led/png/page_white_dvd.png trunk/spark/data/images/led/png/page_white_edit.png trunk/spark/data/images/led/png/page_white_error.png trunk/spark/data/images/led/png/page_white_excel.png trunk/spark/data/images/led/png/page_white_find.png trunk/spark/data/images/led/png/page_white_flash.png trunk/spark/data/images/led/png/page_white_freehand.png trunk/spark/data/images/led/png/page_white_gear.png trunk/spark/data/images/led/png/page_white_get.png trunk/spark/data/images/led/png/page_white_paintbrush.png trunk/spark/data/images/led/png/page_white_paste.png trunk/spark/data/images/led/png/page_white_php.png trunk/spark/data/images/led/png/page_white_picture.png trunk/spark/data/images/led/png/page_white_powerpoint.png trunk/spark/data/images/led/png/page_white_put.png trunk/spark/data/images/led/png/page_white_ruby.png trunk/spark/data/images/led/png/page_white_stack.png trunk/spark/data/images/led/png/page_white_star.png trunk/spark/data/images/led/png/page_white_swoosh.png trunk/spark/data/images/led/png/page_white_text.png trunk/spark/data/images/led/png/page_white_text_width.png trunk/spark/data/images/led/png/page_white_tux.png trunk/spark/data/images/led/png/page_white_vector.png trunk/spark/data/images/led/png/page_white_visualstudio.png trunk/spark/data/images/led/png/page_white_width.png trunk/spark/data/images/led/png/page_white_word.png trunk/spark/data/images/led/png/page_white_world.png trunk/spark/data/images/led/png/page_white_wrench.png trunk/spark/data/images/led/png/page_white_zip.png trunk/spark/data/images/led/png/paintbrush.png trunk/spark/data/images/led/png/paintcan.png trunk/spark/data/images/led/png/palette.png trunk/spark/data/images/led/png/paper_bag.png trunk/spark/data/images/led/png/paste_plain.png trunk/spark/data/images/led/png/paste_word.png trunk/spark/data/images/led/png/pause.png trunk/spark/data/images/led/png/pencil.png trunk/spark/data/images/led/png/photo.png trunk/spark/data/images/led/png/photo_album.png trunk/spark/data/images/led/png/photos.png trunk/spark/data/images/led/png/piano.png trunk/spark/data/images/led/png/picture.png trunk/spark/data/images/led/png/pilcrow.png trunk/spark/data/images/led/png/pill.png trunk/spark/data/images/led/png/pin.png trunk/spark/data/images/led/png/pipette.png trunk/spark/data/images/led/png/plaing_card.png trunk/spark/data/images/led/png/plug.png trunk/spark/data/images/led/png/plugin.png trunk/spark/data/images/led/png/printer.png trunk/spark/data/images/led/png/projection_screen.png trunk/spark/data/images/led/png/projection_screen_present.png trunk/spark/data/images/led/png/rainbow.png trunk/spark/data/images/led/png/readme.txt trunk/spark/data/images/led/png/report.png trunk/spark/data/images/led/png/rocket.png trunk/spark/data/images/led/png/rosette.png trunk/spark/data/images/led/png/rss.png trunk/spark/data/images/led/png/ruby.png trunk/spark/data/images/led/png/ruler_1.png trunk/spark/data/images/led/png/ruler_2.png trunk/spark/data/images/led/png/ruler_crop.png trunk/spark/data/images/led/png/ruler_triangle.png trunk/spark/data/images/led/png/safe.png trunk/spark/data/images/led/png/script.png trunk/spark/data/images/led/png/selection.png trunk/spark/data/images/led/png/selection_select.png trunk/spark/data/images/led/png/server.png trunk/spark/data/images/led/png/shading.png trunk/spark/data/images/led/png/shape_aling_bottom.png trunk/spark/data/images/led/png/shape_aling_center.png trunk/spark/data/images/led/png/shape_aling_left.png trunk/spark/data/images/led/png/shape_aling_middle.png trunk/spark/data/images/led/png/shape_aling_right.png trunk/spark/data/images/led/png/shape_aling_top.png trunk/spark/data/images/led/png/shape_flip_horizontal.png trunk/spark/data/images/led/png/shape_flip_vertical.png trunk/spark/data/images/led/png/shape_group.png trunk/spark/data/images/led/png/shape_handles.png trunk/spark/data/images/led/png/shape_move_back.png trunk/spark/data/images/led/png/shape_move_backwards.png trunk/spark/data/images/led/png/shape_move_forwards.png trunk/spark/data/images/led/png/shape_move_front.png trunk/spark/data/images/led/png/shape_square.png trunk/spark/data/images/led/png/shape_stop.png trunk/spark/data/images/led/png/shield.png trunk/spark/data/images/led/png/sitemap.png trunk/spark/data/images/led/png/slide.png trunk/spark/data/images/led/png/slides.png trunk/spark/data/images/led/png/slides_stack.png trunk/spark/data/images/led/png/smiley_confuse.png trunk/spark/data/images/led/png/smiley_cool.png trunk/spark/data/images/led/png/smiley_cry.png trunk/spark/data/images/led/png/smiley_fat.png trunk/spark/data/images/led/png/smiley_mad.png trunk/spark/data/images/led/png/smiley_red.png trunk/spark/data/images/led/png/smiley_roll.png trunk/spark/data/images/led/png/smiley_slim.png trunk/spark/data/images/led/png/smiley_yell.png trunk/spark/data/images/led/png/socket.png trunk/spark/data/images/led/png/sockets.png trunk/spark/data/images/led/png/sort.png trunk/spark/data/images/led/png/sort_alphabet.png trunk/spark/data/images/led/png/sort_date.png trunk/spark/data/images/led/png/sort_disable.png trunk/spark/data/images/led/png/sort_number.png trunk/spark/data/images/led/png/sort_price.png trunk/spark/data/images/led/png/sort_quantity.png trunk/spark/data/images/led/png/sort_rating.png trunk/spark/data/images/led/png/sound.png trunk/spark/data/images/led/png/sound_note.png trunk/spark/data/images/led/png/spellcheck.png trunk/spark/data/images/led/png/sport_8ball.png trunk/spark/data/images/led/png/sport_basketball.png trunk/spark/data/images/led/png/sport_football.png trunk/spark/data/images/led/png/sport_golf.png trunk/spark/data/images/led/png/sport_raquet.png trunk/spark/data/images/led/png/sport_shuttlecock.png trunk/spark/data/images/led/png/sport_soccer.png trunk/spark/data/images/led/png/sport_tennis.png trunk/spark/data/images/led/png/stamp.png trunk/spark/data/images/led/png/star_1.png trunk/spark/data/images/led/png/star_2.png trunk/spark/data/images/led/png/status_online.png trunk/spark/data/images/led/png/stop.png trunk/spark/data/images/led/png/style.png trunk/spark/data/images/led/png/subtract.png trunk/spark/data/images/led/png/sum.png trunk/spark/data/images/led/png/sum_2.png trunk/spark/data/images/led/png/switch.png trunk/spark/data/images/led/png/tab.png trunk/spark/data/images/led/png/table.png trunk/spark/data/images/led/png/tag.png trunk/spark/data/images/led/png/tag_blue.png trunk/spark/data/images/led/png/target.png trunk/spark/data/images/led/png/telephone.png trunk/spark/data/images/led/png/television.png trunk/spark/data/images/led/png/text_align_center.png trunk/spark/data/images/led/png/text_align_justify.png trunk/spark/data/images/led/png/text_align_left.png trunk/spark/data/images/led/png/text_align_right.png trunk/spark/data/images/led/png/text_allcaps.png trunk/spark/data/images/led/png/text_bold.png trunk/spark/data/images/led/png/text_columns.png trunk/spark/data/images/led/png/text_dropcaps.png trunk/spark/data/images/led/png/text_heading_1.png trunk/spark/data/images/led/png/text_horizontalrule.png trunk/spark/data/images/led/png/text_indent.png trunk/spark/data/images/led/png/text_indent_remove.png trunk/spark/data/images/led/png/text_italic.png trunk/spark/data/images/led/png/text_kerning.png trunk/spark/data/images/led/png/text_letter_omega.png trunk/spark/data/images/led/png/text_letterspacing.png trunk/spark/data/images/led/png/text_linespacing.png trunk/spark/data/images/led/png/text_list_bullets.png trunk/spark/data/images/led/png/text_list_numbers.png trunk/spark/data/images/led/png/text_lowercase.png trunk/spark/data/images/led/png/text_padding_bottom.png trunk/spark/data/images/led/png/text_padding_left.png trunk/spark/data/images/led/png/text_padding_right.png trunk/spark/data/images/led/png/text_padding_top.png trunk/spark/data/images/led/png/text_signature.png trunk/spark/data/images/led/png/text_smallcaps.png trunk/spark/data/images/led/png/text_strikethrough.png trunk/spark/data/images/led/png/text_subscript.png trunk/spark/data/images/led/png/textfield.png trunk/spark/data/images/led/png/textfield_rename.png trunk/spark/data/images/led/png/ticket.png trunk/spark/data/images/led/png/timeline_marker.png trunk/spark/data/images/led/png/traffic.png trunk/spark/data/images/led/png/transmit.png trunk/spark/data/images/led/png/trophy.png trunk/spark/data/images/led/png/trophy_bronze.png trunk/spark/data/images/led/png/trophy_silver.png trunk/spark/data/images/led/png/ui_combo_box.png trunk/spark/data/images/led/png/ui_saccordion.png trunk/spark/data/images/led/png/ui_slider_1.png trunk/spark/data/images/led/png/ui_slider_2.png trunk/spark/data/images/led/png/ui_tab_bottom.png trunk/spark/data/images/led/png/ui_tab_content.png trunk/spark/data/images/led/png/ui_tab_disable.png trunk/spark/data/images/led/png/ui_tab_side.png trunk/spark/data/images/led/png/ui_text_field_hidden.png trunk/spark/data/images/led/png/ui_text_field_password.png trunk/spark/data/images/led/png/umbrella.png trunk/spark/data/images/led/png/user.png trunk/spark/data/images/led/png/user_black_female.png trunk/spark/data/images/led/png/user_business.png trunk/spark/data/images/led/png/user_business_boss.png trunk/spark/data/images/led/png/user_female.png trunk/spark/data/images/led/png/user_silhouette.png trunk/spark/data/images/led/png/user_thief.png trunk/spark/data/images/led/png/user_thief_baldie.png trunk/spark/data/images/led/png/vcard.png trunk/spark/data/images/led/png/vector.png trunk/spark/data/images/led/png/wait.png trunk/spark/data/images/led/png/wall.png trunk/spark/data/images/led/png/wall_break.png trunk/spark/data/images/led/png/wall_brick.png trunk/spark/data/images/led/png/wall_disable.png trunk/spark/data/images/led/png/wand.png trunk/spark/data/images/led/png/weather_clouds.png trunk/spark/data/images/led/png/weather_cloudy.png trunk/spark/data/images/led/png/weather_lightning.png trunk/spark/data/images/led/png/weather_rain.png trunk/spark/data/images/led/png/weather_snow.png trunk/spark/data/images/led/png/weather_sun.png trunk/spark/data/images/led/png/webcam.png trunk/spark/data/images/led/png/world.png trunk/spark/data/images/led/png/zone.png trunk/spark/data/images/led/png/zone_money.png trunk/spark/data/images/led/png/zones.png trunk/spark/data/images/spark/ trunk/spark/data/images/spark/png/ trunk/spark/data/images/spark/png/spark.png trunk/spark/data/images/splashyIcons/ trunk/spark/data/images/splashyIcons/png/ trunk/spark/data/images/splashyIcons/png/error.png trunk/spark/data/images/splashyIcons/png/warning_triangle.png trunk/spark/data/images/splashyIcons/png/zoom.png trunk/spark/data/images/splashyIcons/png/zoom_in.png trunk/spark/data/images/splashyIcons/png/zoom_out.png trunk/spark/data/images/toolbar1/ trunk/spark/data/images/toolbar1/VeryIcon.com.url trunk/spark/data/images/toolbar1/VeryIcon.txt trunk/spark/data/images/toolbar1/license.txt trunk/spark/data/images/toolbar1/png/ trunk/spark/data/images/toolbar1/png/bug.png trunk/spark/data/images/toolbar1/png/config.png trunk/spark/data/images/toolbar1/png/document.png trunk/spark/data/images/toolbar1/png/info.png trunk/spark/data/images/toolbar1/png/monitor.png trunk/spark/data/images/toolbar1/png/new.png trunk/spark/data/images/toolbar1/png/print.png trunk/spark/data/images/toolbar1/png/save.png trunk/spark/data/images/toolbar1/png/search.png trunk/spark/data/images/toolbar1/png/soccer.png trunk/spark/data/images/toolbar1/png/star.png trunk/spark/guilayout/ trunk/spark/guilayout/CMakeLists.txt trunk/spark/guilayout/guigridlayout/ trunk/spark/guilayout/guigridlayout/CMakeLists.txt trunk/spark/guilayout/guigridlayout/export.h trunk/spark/guilayout/guigridlayout/guigridlayout.cpp trunk/spark/guilayout/guigridlayout/guigridlayout.h trunk/spark/guilayout/guigridlayout/guigridlayout.ui trunk/spark/guilayout/guisimplelayout/ trunk/spark/guilayout/guisimplelayout/CMakeLists.txt trunk/spark/guilayout/guisimplelayout/export.h trunk/spark/guilayout/guisimplelayout/guisimplelayout.cpp trunk/spark/guilayout/guisimplelayout/guisimplelayout.h trunk/spark/guilayout/guisimplelayout/guisimplelayout.ui trunk/spark/guiplugin/ trunk/spark/guiplugin/CMakeLists.txt trunk/spark/guiplugin/logframe/ trunk/spark/guiplugin/logframe/CMakeLists.txt trunk/spark/guiplugin/logframe/export.h trunk/spark/guiplugin/logframe/logframe.cpp trunk/spark/guiplugin/logframe/logframe.h trunk/spark/guiplugin/logframe/logframe.ui trunk/spark/guiplugin/logframe/logframe_logsettings.cpp trunk/spark/guiplugin/logframe/logframe_logsettings.h trunk/spark/guiplugin/logframe/logframe_logsettings.ui trunk/spark/guiplugin/monitorframe/ trunk/spark/guiplugin/monitorframe/CMakeLists.txt trunk/spark/guiplugin/monitorframe/export.h trunk/spark/guiplugin/monitorframe/monitorframe.cpp trunk/spark/guiplugin/monitorframe/monitorframe.h trunk/spark/guiplugin/monitorframe/monitorframe.ui trunk/spark/guiplugin/monitorframe/monitorframe_glconstants.cpp trunk/spark/guiplugin/monitorframe/monitorframe_glconstants.h trunk/spark/guiplugin/monitorframe/monitorframe_sparkglrender.cpp trunk/spark/guiplugin/monitorframe/monitorframe_sparkglrender.h trunk/spark/guiplugin/monitorframe/monitorframe_sparkglwidget.cpp trunk/spark/guiplugin/monitorframe/monitorframe_sparkglwidget.h trunk/spark/guiplugin/scenegraphframe/ trunk/spark/guiplugin/scenegraphframe/CMakeLists.txt trunk/spark/guiplugin/scenegraphframe/export.h trunk/spark/guiplugin/scenegraphframe/scenegraphframe.cpp trunk/spark/guiplugin/scenegraphframe/scenegraphframe.h trunk/spark/guiplugin/scenegraphframe/scenegraphframe.ui trunk/spark/guiplugin/scenegraphframe/scenegraphframe_propertyframe.cpp trunk/spark/guiplugin/scenegraphframe/scenegraphframe_propertyframe.h trunk/spark/guiplugin/scenegraphframe/scenegraphframe_propertyframe.ui trunk/spark/guiplugin/scenegraphframe/scenegraphframe_scenegraphwidget.cpp trunk/spark/guiplugin/scenegraphframe/scenegraphframe_scenegraphwidget.h trunk/spark/guiplugin/scenegraphframe/scenegraphframe_scenegraphwidget.ui trunk/spark/guiplugin/setupframe/ trunk/spark/guiplugin/setupframe/CMakeLists.txt trunk/spark/guiplugin/setupframe/export.h trunk/spark/guiplugin/setupframe/setupframe.cpp trunk/spark/guiplugin/setupframe/setupframe.h trunk/spark/guiplugin/setupframe/setupframe.ui trunk/spark/guiplugin/simulationframe/ trunk/spark/guiplugin/simulationframe/CMakeLists.txt trunk/spark/guiplugin/simulationframe/export.h trunk/spark/guiplugin/simulationframe/simulationframe.cpp trunk/spark/guiplugin/simulationframe/simulationframe.h trunk/spark/guiplugin/simulationframe/simulationframe.ui trunk/spark/guiplugin/simulationframe/simulationframe_taskwidget.cpp trunk/spark/guiplugin/simulationframe/simulationframe_taskwidget.h trunk/spark/guiplugin/simulationframe/simulationframe_taskwidget.ui trunk/spark/plugin/inputqt/ trunk/spark/plugin/inputqt/CMakeLists.txt trunk/spark/plugin/inputqt/export.cpp trunk/spark/plugin/inputqt/inputqt.cpp trunk/spark/plugin/inputqt/inputqt.h trunk/spark/plugin/inputqt/inputsystemqt.cpp trunk/spark/plugin/inputqt/inputsystemqt.h trunk/spark/plugin/inputqt/inputsystemqt_c.cpp trunk/spark/plugin/openglsysqt/ trunk/spark/plugin/openglsysqt/CMakeLists.txt trunk/spark/plugin/openglsysqt/export.cpp trunk/spark/plugin/openglsysqt/openglsystemqt.cpp trunk/spark/plugin/openglsysqt/openglsystemqt.h trunk/spark/plugin/openglsysqt/openglsystemqt_c.cpp trunk/spark/spark/sparkbullet.rb trunk/spark/spark/sparkode.rb Modified: trunk/spark/CMakeLists.txt =================================================================== --- trunk/spark/CMakeLists.txt 2015-07-14 21:56:34 UTC (rev 397) +++ trunk/spark/CMakeLists.txt 2015-09-12 01:47:34 UTC (rev 398) @@ -58,6 +58,7 @@ find_package(ODE REQUIRED) find_package(OpenGL REQUIRED) find_package(SDL REQUIRED) +find_package(Qt4 COMPONENTS QtGui QtCore QtXml QtOpenGl) find_package(FMOD) find_package(ZLIB) set(HAVE_IL_IL_H 1) @@ -111,7 +112,7 @@ link_directories(${Boost_LIBRARY_DIRS}) if (UNIX) - set(CMAKE_CXX_FLAGS $ENV{CXXFLAGS} CACHE + set(CMAKE_CXX_FLAGS $ENV{CXXFLAGS} "--std=gnu++11" CACHE STRING "Common C++ compiler flags" FORCE) set(CMAKE_C_FLAGS $ENV{CFLAGS} CACHE STRING "Common C compiler flags" FORCE) @@ -127,7 +128,13 @@ set(INCLUDEDIR "include" CACHE PATH "The directory to install includes into.") set(CMAKE_SHARED_MODULE_PREFIX "") +set(CARBON_LAYOUT_LIB_DIR ${LIBDIR}/guilayout CACHE PATH "The directory to install carbon gui layout libraries into.") +set(CARBON_PLUGIN_LIB_DIR ${LIBDIR}/guiplugin CACHE PATH "The directory to install carbon gui plugin libraries into.") +set(CARBON_LAYOUT_INCLUDE_DIR ${INCLUDEDIR}/guilayout CACHE PATH "The directory to install carbon gui layout include files into.") +set(CARBON_PLUGIN_INCLUDE_DIR ${INCLUDEDIR}/guiplugin CACHE PATH "The directory to install carbon gui plugin include files into.") + mark_as_advanced(BINDIR LIBDIR DATADIR INCLUDEDIR) +set(BUILD_CARBON TRUE CACHE BOOL "Check if the Carbon libraries and plugins should be built.") set(BUILD_SHARED_LIBS TRUE) if (BUILD_SHARED_LIBS) set(SHARED_LIB_COMPILE 1) @@ -162,6 +169,8 @@ set(KEROSIN_VERSION ${KEROSIN_SO_VERSION}.1.1) set(SPARK_SO_VERSION 1) set(SPARK_VERSION ${SPARK_SO_VERSION}.0.1) +set(CARBON_SO_VERSION 1) +set(CARBON_VERSION ${CARBON_SO_VERSION}.0.0) set(RCSSNET_SO_VERSION 0) set(RCSSNET_VERSION ${RCSSNET_SO_VERSION}.1.0) @@ -173,8 +182,14 @@ set(zeitgeist_version ${ZEITGEIST_VERSION}) set(oxygen_version ${OXYGEN_VERSION}) set(kerosin_version ${KEROSIN_VERSION}) +set(carbon_version ${CARBON_VERSION}) set(includedir ${CMAKE_INSTALL_PREFIX}/${INCLUDEDIR}) set(libdir ${CMAKE_INSTALL_PREFIX}/${LIBDIR}) +set(guipluginlibdir ${CMAKE_INSTALL_PREFIX}/${CARBON_PLUGIN_LIB_DIR}) +set(guilayoutlibdir ${CMAKE_INSTALL_PREFIX}/${CARBON_LAYOUT_LIB_DIR}) +set(guidatadir ${CMAKE_INSTALL_PREFIX}/${DATADIR}/carbon) +set(guisetupdir ${guidatadir}/setups) +set(guiscriptdir ${guidatadir}/scripts) if (CMAKE_BUILD_TYPE STREQUAL "Debug") set(debug "true") else (CMAKE_BUILD_TYPE STREQUAL "Debug") @@ -194,6 +209,11 @@ add_subdirectory(doc) add_subdirectory(spark) add_subdirectory(data) +if (BUILD_CARBON) + add_subdirectory(carbon) + add_subdirectory(guiplugin) + add_subdirectory(guilayout) +endif (BUILD_CARBON) ########### install files ############### Modified: trunk/spark/ChangeLog =================================================================== --- trunk/spark/ChangeLog 2015-07-14 21:56:34 UTC (rev 397) +++ trunk/spark/ChangeLog 2015-09-12 01:47:34 UTC (rev 398) @@ -10,8 +10,28 @@ * cmake/AdditionalSearchPaths.cmake: - fixed some problems in building Windows installer (with MinGW) +2013-06-13 Hedayat Vatankhah <hed...@gm...> + + * README: + * ChangeLog: + - added Patrick changes and documentation about the new parts + 2013-06-12 Hedayat Vatankhah <hed...@gm...> + * carbon/: + * guiplugin/: + * guilayout/: + * data/guisetups/: + * plugin/inputsysqt/: + * plugin/openglsysqt/: + - fixed compilation issues under GNU/Linux+GCC. + + * lib/salt/gmath.h: + - removed type specifier for std::isnan, since not all overloads are + templates + +2013-06-12 Hedayat Vatankhah <hed...@gm...> + * NEWS: * RELEASE: * CMakeLists.txt: @@ -23,6 +43,105 @@ * plugin/sceneeffector/sceneeffector.cpp: - added the ability to receive and apply scene parameters +2012-06-23 Patrick Geib <Pat...@on...> + + * carbon/ + - the Carbon library + + * guiplugin/ + - generic (not soccer related) plugins for the carbon gui + + * guilayout/ + - layout projects for the Gui + + * data/guisetups/ + - image resources for the carbon gui. + + * plugin/inputsysqt/ + - a new spark plugin which handles inputs to a spark simulation by + converting from qt to spark defines. + + * plugin/openglsysqt/ + - empty placeholder openglsystem to be used in simspark when an external + rendering by carbon is used. + + * spark/spark.h: + * spark/spark.cpp: + - relative path prefix can now be given in constructor as optional + parameter. Needed by carbon. + + * spark.rb: + - the spark script now contains logging functions and other functions + needed by the carbon gui + + * plugin/odeimps/odecollider.cpp: + - fixed bug where body was deleted twice + + * lib/zeitgeist/core.h: + * lib/zeitgeist/core.cpp: + - added function to reset the self pointer. Needed by carbon. + + * lib/zeitgeist/leaf_c.cpp: + - added unlinkLeaf() function to ruby interface. + + * lib/zeitgeist/logserver/logserverstreambuf.h: + * lib/zeitgeist/logserver/logserverstreambuf.cpp: + - replaced typedef TMaskStream with struct MaskStream. Now it not only + contains the integer mask and stream pointer, but also a synchronization + flag. If the flag is true, the stream will by sync()'ed every time the + input stream flushes a message. This is needed for carbons message stream + appenders, so it can receive the logservers messages immediately when the + simulation thread sends them. + + * lib/zeitgeist/logserver/logserver.h: + * lib/zeitgeist/logserver/logserver.cpp: + * lib/zeitgeist/logserver/logserver_c.cpp: + - streams can now be added with an optional synchronization flag. + - updated the script interface for AddStream too. + + * lib/zeitgeist/scriptserver/scriptserver.cpp: + - ruby error messages are now sent to ->Error() instead of ->Debug(). + + * lib/oxygen/simulationserver/simulationserver.h: + * lib/oxygen/simulationserver/simulationserver.cpp: + - the Simulation can now be paused. There is a flag in the simulation + server and a pause/unpause function. When a simulation is paused, the next + simulation cycle will not call StartCycle, SenseAgent, ActAgent and + EndCycle, but a new control event CE_WaitCycle. + When a simulation is paused, the simulation time does not advance and + agents are not notified about changed time. The wait cycle lasts as long + as a normal simulation cycle. Calling pause(false) will resume the normal + simulation cycle after the current wait cycle and agents are + notified again. + The pausing function is meant to pause and observe the state of the + simulation using the carbon library and the gui. It was tested with + several agent implementations and seemed to work perfectly. + + * lib/oxygen/simulationserver/simcontrolnode.h: + - the new control event CE_WaitCycle calls a new interface function + WaitCycle() in simcontrolnodes. This way control nodes can be notified + about running and paused simulation steps. This is used by carbon. + WaitCycle() and EndCycle() are used for SimControlNodes which act as + interface between carbon and spark. + + * lib/kerosin/inputsystem/inputsystem.h: + * lib/kerosin/inputsystem/inputsystem.cpp: + - AddInput() and GetInput() now use a boost::shared_mutex to make the + access thread safe. This is neccessary because there may be simulatneous + access from different threads in a carbon simulation. + + * lib/kerosin/renderserver/renderserver.cpp: + - added OpenGlError-code checking between rendering stages. Removed double + picking-end-bracket glPopName() which caused picking to fail. + + * lib/kerosin/renderserver/rendercontrol.cpp: + * lib/kerosin/renderserver/rendercontrol.h: + * lib/kerosin/renderserver/rendercontrol_c.cpp: + - RenderControlNodes can now be activated or deactivated. Carbon uses this + feature to deactivate them in the spark simulation if the rendering is + done in the gui thread or any other than the server thread. + - Added setActive() function to ruby interface. + 2012-05-23 Hedayat Vatankhah <hed...@gm...> * lib/kerosin/CMakeLists.txt: Modified: trunk/spark/README =================================================================== --- trunk/spark/README 2015-07-14 21:56:34 UTC (rev 397) +++ trunk/spark/README 2015-09-12 01:47:34 UTC (rev 398) @@ -83,7 +83,50 @@ for creating simulations using simspark ./test applications for testing different subsystems of the simulator. - +./carbon The carbon library contains a gui-framework and a + simulation-framework which wraps simspark using qt. + Its main features are: + - Offering a graphical user interface which can be extended + by visual and functional plugins. The plugins can be used + to write easy-to-use interfaces to simspark simulations. + - Creating, managing and executing simspark-simulations + alongside with any additional threads and processes. + - The gui can be altered flexibly. Its main window with + "attachment points" is loaded from a shared library, and + its used plugins are loaded from shared libraries too. + Plugins with visual representation can be attached to the + Gui. +./guilayout Layout projects for the Gui. They export main windows for + the carbon gui from a shared library. You can easily and + quickly create a new layout for the gui by creating a new + layout project. A gui-layout (main window) may define + attachment points for gui-plugins. + + Initial layout projects: + - guigridlayout: Contains 4 attachment points (left, center, + right, bottom) + - guisimplelayout: Contains 2 attachment points (left, right) +./guiplugin Generic (not soccer related) plugins for the carbon gui. + Plugins can be anything to extend the gui with. There are + three types: Simple Plugins (can be executed), Signal + Plugins (can communicate), and AttachableFrame Plugins (can + be embedded into the Gui). Examples which can be created + really easily and quickly, are: executable plugins running in + a new thread, function libraries, toolboxes or menu entries, + or visual plugins made for user interaction. + + Initial plugins (all of them are plugins that can be attached + to attachment points): + - logframe: logs and displays messages + - setupframe: creates simulation setups for the gui + - simulationframe: displays and controls simulation tasks and + processes in the gui + - scenegraphframe: displays and controls the whole scene graph + of a spark simulation. The user can freely change the values + of several types of nodes. + This interaction can be extended with additional plugins. + - monitorframe: renders a spark simulation + Literature: [1] Marco Kögler and Oliver Obst. Simulation League: The Next Generation. Added: trunk/spark/carbon/CMakeLists.txt =================================================================== --- trunk/spark/carbon/CMakeLists.txt (rev 0) +++ trunk/spark/carbon/CMakeLists.txt 2015-09-12 01:47:34 UTC (rev 398) @@ -0,0 +1,324 @@ +########### moc target files ############### +set(carbon_QOBJECT_HEADERS + cutelogger/imessagereceiver.h + process.h + pluginthread.h + simulationprocess.h + simulationmanager.h + serverthread.h + signalplugin.h + simulationsetup.h + simulation.h + simulationthread.h + sparksimulationthread.h + simulationtask.h + taskdefinition.h + menumanager.h + menuobjectconnection.h + plugininstantiatormodel.h + plugindefinition.h + pluginmanager.h + attachableframe.h + windowdefinition.h + frameattachmentpoint.h + numberedactionreceiver.h + guisettings_pluginsettings.h + guisettings_simulationsettings.h + namedactionreceiver.h + matrixwidget.h + toolseparatorbutton.h + vector3widget.h + vector4widget.h + vector2x3widget.h + typedlineedit.h + carbon.h + settingsdialog.h + settingswidget.h + plugindialog.h + settings.h + setupdialog.h + abstractcommand.h + sparkcontroller.h + sparkcommands.h + sparktreemodel.h + sparktreeview.h + sparkpropertylist.h + sparkpropertywidget.h + sparkpropertycontrol.h + sparkpropertyexecuter.h + sparkpropertymanager.h + glwidget.h + openglmanager.h + communicationmanager.h + topic.h + ) + +set(carbon_HEADERS + cutelogger/abstractappender.h + cutelogger/abstractstringappender.h + cutelogger/consoleappender.h + cutelogger/debugappender.h + cutelogger/fileappender.h + cutelogger/functionappender.h + cutelogger/logger.h + cutelogger/logmessage.h + cutelogger/logstream.h + cutelogger/logstreambuffer.h + cutelogger/messageobjectappender.h + cutelogger/messagereceiverappender.h + cutelogger/imessagereceiver.h + sparkprocess.h + process.h + pluginthread.h + simulationprocess.h + simulationmanager.h + serverthread.h + simulationsetup.h + simulation.h + simulationthread.h + sparksimulationthread.h + simulationtask.h + taskdefinition.h + menuobject.h + menuobjectcall.h + menuobjectfile.h + menuobjectmenu.h + menuobjectmenuaction.h + menuobjecttoolbar.h + menumanager.h + menuobjectconnection.h + plugin.h + plugintype.h + signalplugin.h + abstractplugin.h + plugininstantiatormodel.h + plugindefinition.h + pluginmanager.h + attachableframe.h + windowmanager.h + windowdefinition.h + frameattachmentpoint.h + aboutdialog.h + treeitem.h + numberedactionreceiver.h + guisettings_pluginsettings.h + guisettings_simulationsettings.h + namedactionreceiver.h + matrixwidget.h + toolseparatorbutton.h + vector3widget.h + vector4widget.h + vector2x3widget.h + typedlineedit.h + libraryloader.h + carbon.h + settingsdialog.h + settingswidget.h + plugindialog.h + settings.h + setupdialog.h + abstractcommandqueue.h + guisimcontrol.h + isimcontrol.h + sparkcontext.h + simspark.h + sparkproperty.h + sparkpropertycontrolbasic.h + sparkpropertydata.h + sparkpropertytablewidget.h + abstractcommand.h + sparkcontroller.h + sparkcommands.h + sparkcommandqueue.h + sparktreemodel.h + sparktreeview.h + sparkpropertylist.h + sparkpropertywidget.h + sparkpropertycontrol.h + sparkpropertyexecuter.h + sparkpropertymanager.h + inputqt.h + glwidget.h + openglmanager.h + topicregistration.h + communicationmanager.h + topic.h + ) + +set(carbon_SOURCES + cutelogger/abstractappender.cpp + cutelogger/abstractstringappender.cpp + cutelogger/consoleappender.cpp + cutelogger/debugappender.cpp + cutelogger/fileappender.cpp + cutelogger/functionappender.cpp + cutelogger/imessagereceiver.cpp + cutelogger/logger.cpp + cutelogger/logmessage.cpp + cutelogger/logstream.cpp + cutelogger/logstreambuffer.cpp + cutelogger/messageobjectappender.cpp + cutelogger/messagereceiverappender.cpp + pluginthread.cpp + process.cpp + sparkprocess.cpp + simulationprocess.cpp + serverthread.cpp + simulationmanager.cpp + simulationsetup.cpp + simulation.cpp + simulationtask.cpp + simulationthread.cpp + sparksimulationthread.cpp + taskdefinition.cpp + menumanager.cpp + menuobject.cpp + menuobjectcall.cpp + menuobjectconnection.cpp + ... [truncated message content] |
From: <he...@us...> - 2015-07-14 21:56:36
|
Revision: 397 http://sourceforge.net/p/simspark/svn/397 Author: hedayat Date: 2015-07-14 21:56:34 +0000 (Tue, 14 Jul 2015) Log Message: ----------- Prepared for 0.6.10 release Modified Paths: -------------- trunk/rcssserver3d/CMakeLists.txt trunk/rcssserver3d/NEWS trunk/rcssserver3d/RELEASE Modified: trunk/rcssserver3d/CMakeLists.txt =================================================================== --- trunk/rcssserver3d/CMakeLists.txt 2015-07-09 03:02:47 UTC (rev 396) +++ trunk/rcssserver3d/CMakeLists.txt 2015-07-14 21:56:34 UTC (rev 397) @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 2.6) project(rcssserver3d CXX C) -set(PACKAGE_VERSION "0.6.9") +set(PACKAGE_VERSION "0.6.10") ########## check for headerfiles/libraries ########## include(CheckIncludeFile) Modified: trunk/rcssserver3d/NEWS =================================================================== --- trunk/rcssserver3d/NEWS 2015-07-09 03:02:47 UTC (rev 396) +++ trunk/rcssserver3d/NEWS 2015-07-14 21:56:34 UTC (rev 397) @@ -1,3 +1,15 @@ +[0.6.10] +This is the final release of rcssserver3d for RoboCup 2015, which brings a few +bug fixes and enhancements for the competitions: + * Turning off penalty shootout mode as soon as a goal is scored by the left + team so that a later second goal won't be recorded if the goalie leaves + the penalty area after the goal was scored. + * Added models for visually differentiating between different robot body + types. This changes some of the black coloring on the robot's body to be + a different type dependent neutral color. + * Fixed bug where the server may hang on certain systems if beam effector + noise (BeamNoiseXY and BeamNoiseAngle) are set to 0. + [0.6.9] This release comes with a number of bug fixes and also adds some new features to enhance managing games and also to add more challenges to games, most notably Modified: trunk/rcssserver3d/RELEASE =================================================================== --- trunk/rcssserver3d/RELEASE 2015-07-09 03:02:47 UTC (rev 396) +++ trunk/rcssserver3d/RELEASE 2015-07-14 21:56:34 UTC (rev 397) @@ -1,46 +1,15 @@ -RELEASE News of rcssserver3d-0.6.9 +RELEASE News of rcssserver3d-0.6.10 -This release comes with a number of bug fixes and also adds some new features -to enhance managing games and also to add more challenges to games, most notably -adding noise to the beam effector. The changes are: +This is the final release of rcssserver3d for RoboCup 2015, which brings a few +bug fixes and enhancements for the competitions: + * Turning off penalty shootout mode as soon as a goal is scored by the left + team so that a later second goal won't be recorded if the goalie leaves + the penalty area after the goal was scored. + * Added models for visually differentiating between different robot body + types. This changes some of the black coloring on the robot's body to be + a different type dependent neutral color. + * Fixed bug where the server may hang on certain systems if beam effector + noise (BeamNoiseXY and BeamNoiseAngle) are set to 0. -* Rule Changes: - - Added new rule requiring that the ball must either touch an opponent, or - touch a teammate outside the center circle, before a team taking a - kickoff can score. - - Penalty shootout kickoffs are direct now. - -* New Features: - - Added noise to the beam effector with the amount of noise added controlled - by the 'BeamNoiseXY' (in meters) and 'BeamNoiseAngle' (in degrees) - values in naosoccersim.rb. Noise is added to beam X and Y values from - a uniform distribution within the range [-BeamNoiseXY, BeamNoiseXY] - and to beam angle values from a uniform distribution within the range - [-BeamNoiseAngle, BeamNoiseAngle]. - - Added new training command parser commands for setting the game time and - score. They are the following commands: - (time <time>) - (score (left <score>) (right <score>)) - - Added penalty shootout mode where a goal is awarded to the left team - (penalty kicker) if the right team's player (penalty goalie) leaves the - penalty area. - -* Bug fixes: - - Fixing a bug with free kicks where as soon as the ball was touched, - and the playmode transitioned from freekick to play on, the ball was - still moved back to the location of the freekick preventing the ball from - being directly kicked out of a free kick. Also ensuring that the ball - position for free kicks is updated correctly as this wasn't happening - right after the ball was placed back at the center of the field after - a goal was scored. - - Fixing a bug where a player would be incorrectly called for double - touching the ball on a kickoff if the player first kicked the ball - directly in the opponent's goal from a kickoff, resulting in no goal - being awarded a nd the opposing team being given a kickoff, and then is - the next player to touch the ball in the PlayOn playmode after a dropball - when the opponent doesn't take their kickoff. - - Fixing a bug where rules such as too many players in their own penalty - area was not being enforced. - You can get the package on the Simspark page on SourceForge at http://sourceforge.net/projects/simspark/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pat...@us...> - 2015-07-09 03:02:49
|
Revision: 396 http://sourceforge.net/p/simspark/svn/396 Author: patmac369 Date: 2015-07-09 03:02:47 +0000 (Thu, 09 Jul 2015) Log Message: ----------- Turning off penalty shootout mode as soon as a goal is scored by the left team so that a later second goal won't be recorded if the goalie leaves the penalty area after the goal was scored. Modified Paths: -------------- trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp Modified: trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp =================================================================== --- trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp 2015-06-06 07:28:08 UTC (rev 395) +++ trunk/rcssserver3d/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp 2015-07-09 03:02:47 UTC (rev 396) @@ -109,6 +109,11 @@ { ResetFoulCounter(TI_LEFT); ResetFoulCounter(TI_RIGHT); + + if (mPenaltyShootout && mGameState->GetPlayMode() == PM_Goal_Left) { + // Cancel penalty shootout mode now that a goal has been scored + mPenaltyShootout = false; + } } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pat...@us...> - 2015-06-06 07:28:11
|
Revision: 395 http://sourceforge.net/p/simspark/svn/395 Author: patmac369 Date: 2015-06-06 07:28:08 +0000 (Sat, 06 Jun 2015) Log Message: ----------- Adding models for visually differentiating between different robot body types. This changes some of the black coloring on the robot's body to be a different type dependent neutral color. Modified Paths: -------------- trunk/rcssserver3d/data/materials/nao.mtl trunk/rcssserver3d/data/rsg/agent/nao/nao_hetero.rsg trunk/rcssserver3d/data/rsg/agent/nao/naoarm.rsg trunk/rcssserver3d/data/rsg/agent/nao/naoleg.rsg trunk/rcssserver3d/data/rsg/agent/nao/naolegtoe.rsg Added Paths: ----------- trunk/rcssserver3d/data/models/lshank0.obj trunk/rcssserver3d/data/models/lshank1.obj trunk/rcssserver3d/data/models/lshank2.obj trunk/rcssserver3d/data/models/lshank3.obj trunk/rcssserver3d/data/models/lshank4.obj trunk/rcssserver3d/data/models/lupperarm0.obj trunk/rcssserver3d/data/models/lupperarm1.obj trunk/rcssserver3d/data/models/lupperarm2.obj trunk/rcssserver3d/data/models/lupperarm3.obj trunk/rcssserver3d/data/models/lupperarm4.obj trunk/rcssserver3d/data/models/naobody0.obj trunk/rcssserver3d/data/models/naobody1.obj trunk/rcssserver3d/data/models/naobody2.obj trunk/rcssserver3d/data/models/naobody3.obj trunk/rcssserver3d/data/models/naobody4.obj trunk/rcssserver3d/data/models/rshank0.obj trunk/rcssserver3d/data/models/rshank1.obj trunk/rcssserver3d/data/models/rshank2.obj trunk/rcssserver3d/data/models/rshank3.obj trunk/rcssserver3d/data/models/rshank4.obj trunk/rcssserver3d/data/models/rupperarm0.obj trunk/rcssserver3d/data/models/rupperarm1.obj trunk/rcssserver3d/data/models/rupperarm2.obj trunk/rcssserver3d/data/models/rupperarm3.obj trunk/rcssserver3d/data/models/rupperarm4.obj Modified: trunk/rcssserver3d/data/materials/nao.mtl =================================================================== --- trunk/rcssserver3d/data/materials/nao.mtl 2015-05-16 01:17:59 UTC (rev 394) +++ trunk/rcssserver3d/data/materials/nao.mtl 2015-06-06 07:28:08 UTC (rev 395) @@ -27,7 +27,43 @@ d 1.000000 illum 2 +newmtl matType0 +Ns 96.078431 +Ka 0.000000 0.000000 0.000000 +Kd 0.000000 0.000000 0.000000 +Ks 0.500000 0.500000 0.500000 +Ni 1.000000 +d 1.000000 +illum 2 +newmtl matType1 +Ns 96.078431 +Ka 0.000000 0.000000 0.000000 +Kd 0.040000 0.040000 0.040000 +Ks 0.500000 0.500000 0.500000 +Ni 1.000000 +d 1.000000 +illum 2 + +newmtl matType2 +Ns 96.078431 +Ka 0.000000 0.000000 0.000000 +Kd 0.080000 0.080000 0.080000 +Ks 0.500000 0.500000 0.500000 +Ni 1.000000 +d 1.000000 +illum 2 + +newmtl matType3 +Ns 96.078431 +Ka 0.000000 0.000000 0.000000 +Kd 0.720000 0.720000 0.720000 +Ks 0.500000 0.500000 0.500000 +Ni 1.000000 +d 1.000000 +illum 2 + + newmtl naoblack Ns 96.078431 Ka 0.000000 0.000000 0.000000 Added: trunk/rcssserver3d/data/models/lshank0.obj =================================================================== --- trunk/rcssserver3d/data/models/lshank0.obj (rev 0) +++ trunk/rcssserver3d/data/models/lshank0.obj 2015-06-06 07:28:08 UTC (rev 395) @@ -0,0 +1,3795 @@ +# Blender3D v245 OBJ File: lshank.blend +# www.blender3d.org +mtllib nao.mtl +o shank.001_Circle.002 +v -0.062438 -0.259177 0.701438 +v -0.122493 -0.239455 0.726317 +v -0.177839 -0.207430 0.749245 +v -0.226350 -0.164333 0.769343 +v -0.266162 -0.111820 0.785837 +v -0.295743 -0.051910 0.798093 +v -0.313959 0.013097 0.805641 +v -0.320108 0.080701 0.808190 +v -0.313954 0.148304 0.805643 +v -0.295734 0.213309 0.798097 +v -0.266148 0.273218 0.785842 +v -0.226333 0.325727 0.769350 +v -0.177818 0.368820 0.749254 +v -0.122469 0.400840 0.726326 +v -0.062413 0.420557 0.701447 +v -0.047758 0.420557 0.723379 +v -0.093722 0.400840 0.769346 +v -0.136084 0.368819 0.811710 +v -0.173215 0.325726 0.848841 +v -0.203688 0.273217 0.879314 +v -0.226332 0.213308 0.901958 +v -0.240277 0.148303 0.915901 +v -0.244988 0.080700 0.920608 +v -0.240282 0.013096 0.915899 +v -0.226342 -0.051911 0.901954 +v -0.203702 -0.111821 0.879309 +v -0.173232 -0.164334 0.848835 +v -0.136105 -0.207431 0.811702 +v -0.093745 -0.239455 0.769337 +v -0.047782 -0.259177 0.723369 +v 0.000018 -0.265838 0.675564 +v -0.025850 -0.259178 0.738023 +v -0.050723 -0.239457 0.798082 +v -0.073646 -0.207433 0.853432 +v -0.093738 -0.164336 0.901948 +v -0.110226 -0.111824 0.941763 +v -0.122477 -0.051913 0.971349 +v -0.130020 0.013093 0.989569 +v -0.132566 0.080697 0.995721 +v -0.130015 0.148300 0.989571 +v -0.122468 0.213305 0.971353 +v -0.110212 0.273214 0.941769 +v -0.093720 0.325724 0.901955 +v -0.073626 0.368818 0.853440 +v -0.050700 0.400839 0.798091 +v -0.025825 0.420556 0.738033 +v 0.000045 0.420555 0.743178 +v 0.000047 0.400837 0.808183 +v 0.000048 0.368815 0.868092 +v 0.000048 0.325721 0.920603 +v 0.000048 0.273211 0.963697 +v 0.000047 0.213301 0.995719 +v 0.000045 0.148296 1.015437 +v 0.000043 0.080692 1.022094 +v 0.000040 0.013089 1.015435 +v 0.000037 -0.051917 0.995715 +v 0.000034 -0.111828 0.963692 +v 0.000030 -0.164339 0.920596 +v 0.000027 -0.207435 0.868084 +v 0.000024 -0.239458 0.808174 +v 0.000021 -0.259178 0.743168 +v 0.025891 -0.259179 0.738021 +v 0.050770 -0.239460 0.798078 +v 0.073699 -0.207438 0.853427 +v 0.093797 -0.164343 0.901941 +v 0.110292 -0.111832 0.941756 +v 0.122550 -0.051922 0.971341 +v 0.130099 0.013083 0.989560 +v 0.132649 0.080687 0.995712 +v 0.130104 0.148291 0.989562 +v 0.122559 0.213297 0.971345 +v 0.110306 0.273206 0.941761 +v 0.093815 0.325718 0.901948 +v 0.073720 0.368812 0.853435 +v 0.050793 0.400835 0.798087 +v 0.025916 0.420554 0.738031 +v 0.047847 0.420553 0.723375 +v 0.093813 0.400833 0.769340 +v 0.136175 0.368809 0.811700 +v 0.173306 0.325714 0.848829 +v 0.203777 0.273202 0.879300 +v 0.226419 0.213292 0.901942 +v 0.240360 0.148286 0.915884 +v 0.245066 0.080682 0.920591 +v 0.240355 0.013078 0.915882 +v 0.226409 -0.051927 0.901938 +v 0.203763 -0.111836 0.879295 +v 0.173288 -0.164347 0.848822 +v 0.136154 -0.207441 0.811692 +v 0.093790 -0.239462 0.769330 +v 0.047822 -0.259180 0.723366 +v 0.062476 -0.259181 0.701433 +v 0.122534 -0.239464 0.726308 +v 0.177884 -0.207443 0.749233 +v 0.226400 -0.164350 0.769327 +v 0.266217 -0.111840 0.785818 +v 0.295804 -0.051931 0.798072 +v 0.314024 0.013074 0.805619 +v 0.320178 0.080678 0.808167 +v 0.314029 0.148282 0.805621 +v 0.295813 0.213288 0.798076 +v 0.266230 0.273198 0.785823 +v 0.226418 0.325711 0.769334 +v 0.177905 0.368807 0.749241 +v 0.122557 0.400831 0.726317 +v 0.062501 0.420552 0.701443 +v 0.067646 0.420552 0.675572 +v 0.132650 0.400830 0.675569 +v 0.192557 0.368805 0.675567 +v 0.245066 0.325709 0.675564 +v 0.288159 0.273196 0.675562 +v 0.320178 0.213285 0.675560 +v 0.339895 0.148279 0.675558 +v 0.346551 0.080675 0.675557 +v 0.339890 0.013071 0.675556 +v 0.320169 -0.051934 0.675556 +v 0.288145 -0.111842 0.675556 +v 0.245048 -0.164352 0.675557 +v 0.192536 -0.207445 0.675559 +v 0.132626 -0.239465 0.675560 +v 0.067621 -0.259182 0.675562 +v 0.062474 -0.259182 0.649692 +v 0.122530 -0.239465 0.624813 +v 0.177879 -0.207445 0.601885 +v 0.226394 -0.164352 0.581789 +v 0.266209 -0.111843 0.565297 +v 0.295795 -0.051935 0.553042 +v 0.314015 0.013070 0.545496 +v 0.320169 0.080674 0.542949 +v 0.314020 0.148278 0.545498 +v 0.295805 0.213284 0.553046 +v 0.266223 0.273195 0.565302 +v 0.226411 0.325708 0.581796 +v 0.177900 0.368805 0.601893 +v 0.122554 0.400830 0.624822 +v 0.062499 0.420552 0.649701 +v 0.047844 0.420552 0.627769 +v 0.093807 0.400830 0.581802 +v 0.136166 0.368806 0.539437 +v 0.173293 0.325709 0.502304 +v 0.203763 0.273196 0.471830 +v 0.226403 0.213285 0.449185 +v 0.240343 0.148279 0.435240 +v 0.245049 0.080675 0.430530 +v 0.240338 0.013072 0.435238 +v 0.226393 -0.051933 0.449181 +v 0.203749 -0.111842 0.471824 +v 0.173276 -0.164352 0.502297 +v 0.136145 -0.207445 0.539429 +v 0.093783 -0.239465 0.581793 +v 0.047819 -0.259182 0.627760 +v 0.025886 -0.259181 0.613106 +v 0.050761 -0.239464 0.553048 +v 0.073687 -0.207443 0.497698 +v 0.093781 -0.164350 0.449184 +v 0.110273 -0.111839 0.409370 +v 0.122529 -0.051931 0.379785 +v 0.130077 0.013075 0.361568 +v 0.132627 0.080678 0.355417 +v 0.130081 0.148282 0.361570 +v 0.122538 0.213288 0.379789 +v 0.110287 0.273199 0.409375 +v 0.093799 0.325711 0.449191 +v 0.073708 0.368807 0.497706 +v 0.050785 0.400831 0.553057 +v 0.025911 0.420552 0.613115 +v 0.000043 0.427212 0.675574 +v 0.000041 0.420553 0.607970 +v 0.000038 0.400833 0.542964 +v 0.000034 0.368810 0.483054 +v 0.000031 0.325714 0.430543 +v 0.000027 0.273202 0.387447 +v 0.000024 0.213292 0.355424 +v 0.000021 0.148286 0.335704 +v 0.000018 0.080682 0.329044 +v 0.000016 0.013079 0.335702 +v 0.000014 -0.051927 0.355420 +v 0.000013 -0.111836 0.387442 +v 0.000013 -0.164346 0.430536 +v 0.000013 -0.207440 0.483046 +v 0.000014 -0.239462 0.542955 +v 0.000016 -0.259180 0.607961 +v -0.025854 -0.259179 0.613108 +v -0.050732 -0.239460 0.553052 +v -0.073659 -0.207438 0.497704 +v -0.093754 -0.164343 0.449191 +v -0.110245 -0.111831 0.409378 +v -0.122498 -0.051922 0.379794 +v -0.130042 0.013084 0.361577 +v -0.132588 0.080688 0.355427 +v -0.130038 0.148291 0.361579 +v -0.122488 0.213297 0.379798 +v -0.110231 0.273207 0.409383 +v -0.093736 0.325718 0.449198 +v -0.073638 0.368813 0.497712 +v -0.050709 0.400835 0.553061 +v -0.025830 0.420554 0.613117 +v -0.047761 0.420555 0.627773 +v -0.093729 0.400837 0.581808 +v -0.136093 0.368816 0.539447 +v -0.173227 0.325721 0.502316 +v -0.203702 0.273211 0.471844 +v -0.226348 0.213302 0.449201 +v -0.240294 0.148296 0.435257 +v -0.245005 0.080693 0.430548 +v -0.240299 0.013089 0.435255 +v -0.226357 -0.051917 0.449197 +v -0.203716 -0.111827 0.471839 +v -0.173245 -0.164339 0.502309 +v -0.136114 -0.207435 0.539439 +v -0.093752 -0.239458 0.581799 +v -0.047786 -0.259178 0.627763 +v -0.062439 -0.259178 0.649696 +v -0.122496 -0.239456 0.624822 +v -0.177844 -0.207432 0.601898 +v -0.226357 -0.164336 0.581805 +v -0.266169 -0.111824 0.565315 +v -0.295752 -0.051913 0.553063 +v -0.313968 0.013093 0.545518 +v -0.320117 0.080697 0.542971 +v -0.313963 0.148301 0.545520 +v -0.295742 0.213306 0.553067 +v -0.266155 0.273215 0.565321 +v -0.226339 0.325725 0.581812 +v -0.177823 0.368818 0.601906 +v -0.122473 0.400839 0.624831 +v -0.062415 0.420556 0.649706 +v -0.067560 0.420557 0.675577 +v -0.132565 0.400840 0.675579 +v -0.192475 0.368819 0.675580 +v -0.244987 0.325727 0.675581 +v -0.288083 0.273217 0.675582 +v -0.320107 0.213308 0.675583 +v -0.339829 0.148303 0.675582 +v -0.346489 0.080700 0.675582 +v -0.339834 0.013096 0.675580 +v -0.320117 -0.051910 0.675579 +v -0.288097 -0.111821 0.675577 +v -0.245005 -0.164334 0.675574 +v -0.192496 -0.207431 0.675572 +v -0.132589 -0.239455 0.675569 +v -0.067584 -0.259177 0.675567 +v -0.067635 -0.259177 -0.729811 +v -0.132639 -0.239455 -0.729809 +v -0.192547 -0.207431 -0.729806 +v -0.245056 -0.164334 -0.729804 +v -0.288148 -0.111821 -0.729801 +v -0.320168 -0.051910 -0.729799 +v -0.339884 0.013096 -0.729798 +v -0.346540 0.080700 -0.729797 +v -0.339879 0.148303 -0.729796 +v -0.320158 0.213308 -0.729796 +v -0.288134 0.273217 -0.729796 +v -0.245038 0.325727 -0.729797 +v -0.192526 0.368819 -0.729798 +v -0.132616 0.400840 -0.729800 +v -0.067610 0.420557 -0.729802 +v -0.062465 0.420556 -0.755673 +v -0.122523 0.400839 -0.780547 +v -0.177874 0.368818 -0.803472 +v -0.226389 0.325725 -0.823566 +v -0.266206 0.273215 -0.840057 +v -0.295793 0.213306 -0.852312 +v -0.314013 0.148301 -0.859858 +v -0.320167 0.080697 -0.862407 +v -0.314018 0.013093 -0.859860 +v -0.295802 -0.051913 -0.852315 +v -0.266220 -0.111824 -0.840063 +v -0.226407 -0.164336 -0.823573 +v -0.177895 -0.207432 -0.803480 +v -0.122547 -0.239456 -0.780556 +v -0.062490 -0.259178 -0.755682 +v -0.047836 -0.259178 -0.777615 +v -0.093802 -0.239458 -0.823579 +v -0.136165 -0.207435 -0.865939 +v -0.173295 -0.164339 -0.903069 +v -0.203766 -0.111827 -0.933540 +v -0.226408 -0.051917 -0.956181 +v -0.240349 0.013089 -0.970123 +v -0.245055 0.080693 -0.974830 +v -0.240345 0.148296 -0.970121 +v -0.226398 0.213302 -0.956177 +v -0.203752 0.273211 -0.933534 +v -0.173277 0.325721 -0.903062 +v -0.136144 0.368815 -0.865931 +v -0.093779 0.400837 -0.823570 +v -0.047812 0.420555 -0.777605 +v -0.025880 0.420554 -0.792261 +v -0.050759 0.400835 -0.852318 +v -0.073688 0.368813 -0.907667 +v -0.093787 0.325718 -0.956180 +v -0.110281 0.273207 -0.995995 +v -0.122539 0.213297 -1.025580 +v -0.130088 0.148291 -1.043799 +v -0.132639 0.080688 -1.049952 +v -0.130093 0.013084 -1.043801 +v -0.122549 -0.051922 -1.025584 +v -0.110295 -0.111831 -0.996000 +v -0.093804 -0.164343 -0.956187 +v -0.073709 -0.207438 -0.907675 +v -0.050783 -0.239460 -0.852327 +v -0.025905 -0.259179 -0.792270 +v -0.000035 -0.259180 -0.797417 +v -0.000036 -0.239462 -0.862423 +v -0.000037 -0.207440 -0.922332 +v -0.000037 -0.164346 -0.974842 +v -0.000037 -0.111836 -1.017936 +v -0.000036 -0.051927 -1.049958 +v -0.000034 0.013079 -1.069676 +v -0.000032 0.080682 -1.076334 +v -0.000029 0.148286 -1.069674 +v -0.000026 0.213292 -1.049954 +v -0.000023 0.273202 -1.017931 +v -0.000020 0.325714 -0.974836 +v -0.000016 0.368810 -0.922324 +v -0.000013 0.400833 -0.862414 +v -0.000010 0.420553 -0.797408 +v -0.000007 0.427212 -0.729804 +v 0.025861 0.420552 -0.792263 +v 0.050734 0.400831 -0.852321 +v 0.073657 0.368807 -0.907672 +v 0.093749 0.325711 -0.956187 +v 0.110237 0.273199 -0.996003 +v 0.122488 0.213288 -1.025589 +v 0.130031 0.148282 -1.043808 +v 0.132576 0.080678 -1.049961 +v 0.130026 0.013074 -1.043810 +v 0.122478 -0.051931 -1.025593 +v 0.110223 -0.111839 -0.996008 +v 0.093731 -0.164350 -0.956194 +v 0.073636 -0.207443 -0.907680 +v 0.050711 -0.239464 -0.852330 +v 0.025836 -0.259181 -0.792272 +v 0.047768 -0.259182 -0.777618 +v 0.093733 -0.239465 -0.823586 +v 0.136094 -0.207445 -0.865949 +v 0.173225 -0.164352 -0.903081 +v 0.203698 -0.111842 -0.933554 +v 0.226342 -0.051934 -0.956197 +v 0.240288 0.013072 -0.970140 +v 0.244998 0.080675 -0.974848 +v 0.240293 0.148279 -0.970138 +v 0.226352 0.213285 -0.956193 +v 0.203712 0.273196 -0.933548 +v 0.173243 0.325709 -0.903074 +v 0.136115 0.368806 -0.865941 +v 0.093756 0.400830 -0.823577 +v 0.047793 0.420552 -0.777609 +v 0.062448 0.420551 -0.755677 +v 0.122503 0.400830 -0.780556 +v 0.177850 0.368805 -0.803485 +v 0.226361 0.325708 -0.823582 +v 0.266172 0.273195 -0.840076 +v 0.295754 0.213284 -0.852333 +v 0.313969 0.148278 -0.859880 +v 0.320118 0.080674 -0.862429 +v 0.313964 0.013070 -0.859882 +v 0.295744 -0.051935 -0.852336 +v 0.266158 -0.111843 -0.840082 +v 0.226343 -0.164352 -0.823589 +v 0.177829 -0.207445 -0.803493 +v 0.122480 -0.239465 -0.780565 +v 0.062423 -0.259182 -0.755687 +v 0.067570 -0.259182 -0.729816 +v 0.132576 -0.239465 -0.729818 +v 0.192486 -0.207445 -0.729820 +v 0.244998 -0.164352 -0.729821 +v 0.288094 -0.111842 -0.729822 +v 0.320118 -0.051934 -0.729822 +v 0.339840 0.013071 -0.729822 +v 0.346500 0.080675 -0.729821 +v 0.339844 0.148279 -0.729820 +v 0.320128 0.213285 -0.729818 +v 0.288108 0.273196 -0.729816 +v 0.245016 0.325709 -0.729814 +v 0.192507 0.368805 -0.729811 +v 0.132599 0.400830 -0.729809 +v 0.067595 0.420552 -0.729806 +v 0.062450 0.420552 -0.703935 +v 0.122507 0.400831 -0.679061 +v 0.177855 0.368807 -0.656137 +v 0.226367 0.325711 -0.636044 +v 0.266180 0.273198 -0.619555 +v 0.295763 0.213288 -0.607302 +v 0.313979 0.148282 -0.599758 +v 0.320128 0.080678 -0.597211 +v 0.313974 0.013074 -0.599759 +v 0.295753 -0.051931 -0.607306 +v 0.266166 -0.111840 -0.619560 +v 0.226350 -0.164350 -0.636051 +v 0.177834 -0.207443 -0.656145 +v 0.122484 -0.239464 -0.679070 +v 0.062425 -0.259181 -0.703945 +v 0.047772 -0.259180 -0.682012 +v 0.093739 -0.239462 -0.636048 +v 0.136104 -0.207441 -0.593686 +v 0.173237 -0.164347 -0.556556 +v 0.203713 -0.111836 -0.526083 +v 0.226358 -0.051927 -0.503440 +v 0.240305 0.013078 -0.489496 +v 0.245015 0.080682 -0.484787 +v 0.240310 0.148286 -0.489494 +v 0.226368 0.213292 -0.503437 +v 0.203727 0.273202 -0.526078 +v 0.173255 0.325714 -0.556549 +v 0.136125 0.368809 -0.593678 +v 0.093763 0.400833 -0.636039 +v 0.047796 0.420553 -0.682003 +v 0.025865 0.420554 -0.667347 +v 0.050743 0.400835 -0.607291 +v 0.073670 0.368812 -0.551943 +v 0.093765 0.325717 -0.503430 +v 0.110256 0.273206 -0.463617 +v 0.122509 0.213297 -0.434034 +v 0.130053 0.148291 -0.415817 +v 0.132599 0.080687 -0.409666 +v 0.130048 0.013083 -0.415818 +v 0.122499 -0.051922 -0.434037 +v 0.110242 -0.111832 -0.463622 +v 0.093747 -0.164343 -0.503437 +v 0.073649 -0.207438 -0.551951 +v 0.050719 -0.239460 -0.607300 +v 0.025840 -0.259179 -0.667357 +v -0.000030 -0.259178 -0.662210 +v -0.000027 -0.239458 -0.597204 +v -0.000024 -0.207435 -0.537294 +v -0.000020 -0.164339 -0.484782 +v -0.000017 -0.111828 -0.441686 +v -0.000013 -0.051917 -0.409663 +v -0.000010 0.013089 -0.389943 +v -0.000008 0.080692 -0.383284 +v -0.000006 0.148296 -0.389941 +v -0.000004 0.213301 -0.409659 +v -0.000003 0.273210 -0.441681 +v -0.000002 0.325721 -0.484775 +v -0.000003 0.368815 -0.537286 +v -0.000004 0.400837 -0.597195 +v -0.000005 0.420555 -0.662200 +v -0.025876 0.420556 -0.667345 +v -0.050751 0.400838 -0.607287 +v -0.073676 0.368818 -0.551938 +v -0.093771 0.325724 -0.503424 +v -0.110263 0.273214 -0.463609 +v -0.122518 0.213305 -0.434025 +v -0.130066 0.148300 -0.415807 +v -0.132616 0.080697 -0.409657 +v -0.130071 0.013093 -0.415809 +v -0.122528 -0.051913 -0.434029 +v -0.110277 -0.111824 -0.463615 +v -0.093789 -0.164336 -0.503430 +v -0.073697 -0.207433 -0.551946 +v -0.050774 -0.239457 -0.607296 +v -0.025900 -0.259178 -0.667355 +v -0.000032 -0.265838 -0.729814 +v -0.047833 -0.259177 -0.682009 +v -0.093796 -0.239455 -0.636041 +v -0.136155 -0.207431 -0.593677 +v -0.173283 -0.164334 -0.556544 +v -0.203752 -0.111821 -0.526069 +v -0.226392 -0.051911 -0.503424 +v -0.240333 0.013096 -0.489479 +v -0.245038 0.080700 -0.484770 +v -0.240328 0.148303 -0.489477 +v -0.226382 0.213308 -0.503421 +v -0.203738 0.273217 -0.526064 +v -0.173265 0.325726 -0.556537 +v -0.136134 0.368819 -0.593668 +v -0.093773 0.400840 -0.636032 +v -0.047808 0.420557 -0.681999 +v -0.062463 0.420557 -0.703931 +v -0.122520 0.400840 -0.679053 +v -0.177869 0.368820 -0.656125 +v -0.226383 0.325727 -0.636028 +v -0.266198 0.273218 -0.619536 +v -0.295784 0.213309 -0.607281 +v -0.314004 0.148304 -0.599735 +v -0.320158 0.080701 -0.597188 +v -0.314009 0.013097 -0.599737 +v -0.295794 -0.051910 -0.607285 +v -0.266212 -0.111820 -0.619541 +v -0.226401 -0.164333 -0.636035 +v -0.177890 -0.207430 -0.656133 +v -0.122543 -0.239455 -0.679062 +v -0.062488 -0.259177 -0.703941 +v -0.485205 0.084077 -0.789490 +v -0.447134 0.291622 -0.754475 +v -0.598015 0.083112 -0.571360 +v -0.559944 0.327266 -0.571361 +v -0.488731 -0.478788 -0.294715 +v -0.597113 -0.300347 -0.294711 +v -0.635159 0.083113 -0.294709 +v -0.597088 0.327267 -0.294711 +v -0.488692 0.505700 -0.294715 +v -0.326473 0.624921 -0.294722 +v -0.372509 -0.495673 0.000071 +v -0.480891 -0.317233 0.000075 +v -0.518936 0.083109 0.000077 +v -0.480867 0.293587 0.000075 +v -0.372471 0.472020 0.000071 +v -0.210251 0.591241 0.000064 +v -0.485156 0.083107 0.428656 +v -0.447086 0.293586 0.428654 +v -0.485148 0.083107 0.607231 +v -0.447079 0.293586 0.607229 +v -0.463998 -0.264493 0.214365 +v -0.502046 0.083108 0.214366 +v -0.463976 0.293587 0.214365 +v -0.355581 0.472019 0.214360 +v -0.497528 -0.432365 -0.437262 +v -0.542922 -0.389568 -0.294713 +v -0.616136 -0.108617 -0.294710 +v -0.616123 0.222028 -0.294710 +v -0.542890 0.416484 -0.294713 +v -0.407583 0.565310 -0.294719 +v -0.331048 0.645968 -0.433046 +v -0.476100 -0.409154 -0.502203 +v -0.501144 -0.455576 -0.375138 +v -0.515826 -0.434178 -0.294714 +v -0.570017 -0.344957 -0.294712 +v -0.584481 -0.230714 -0.502198 +v -0.606624 -0.204482 -0.294711 +v -0.625647 -0.012752 -0.294710 +v -0.622530 0.083113 -0.502197 +v -0.625640 0.169408 -0.294710 +v -0.606605 0.274648 -0.294711 +v -0.584459 0.339895 -0.502198 +v -0.569989 0.371876 -0.294712 +v -0.515791 0.461092 -0.294714 +v -0.476063 0.518327 -0.502203 +v -0.448137 0.535505 -0.294717 +v -0.367028 0.595115 -0.294720 +v -0.313844 0.637548 -0.502209 +v -0.336070 0.637549 -0.363884 +v -0.530291 -0.319934 -0.502200 +v -0.603506 -0.073800 -0.502197 +v -0.530261 0.429111 -0.502200 +v -0.394953 0.577938 -0.502206 +v -0.503195 -0.364544 -0.502201 +v -0.557386 -0.275324 -0.502199 +v -0.593994 -0.152257 -0.502198 +v -0.613018 0.004656 -0.502197 +v -0.557360 0.384503 -0.502199 +v -0.503162 0.473719 -0.502201 +v -0.435508 0.548133 -0.502204 +v -0.354399 0.607743 -0.502207 +v -0.595270 0.100688 -0.747455 +v -0.557199 0.308233 -0.712440 +v -0.693106 0.106483 -0.595912 +v -0.655036 0.350637 -0.595913 +v -0.482575 -0.472301 0.022102 +v -0.590955 -0.293861 0.040404 +v -0.629000 0.106481 0.054480 +v -0.590931 0.316959 0.054479 +v -0.482536 0.495391 0.040399 +v -0.320317 0.614612 0.022095 +v -0.607813 0.106480 0.411401 +v -0.569743 0.316958 0.411400 +v -0.585488 0.106479 0.578690 +v -0.547419 0.316958 0.578689 +v -0.581362 -0.241121 0.187641 +v -0.624274 0.106480 0.187642 +v -0.586205 0.316959 0.187641 +v -0.472945 0.495391 0.187636 +v -0.674071 0.245398 -0.595913 +v -0.683588 0.192778 -0.595912 +v -0.664553 0.298018 -0.595913 +v -0.609002 -0.408993 -0.433059 +v -0.594376 -0.385782 -0.486270 +v -0.612618 -0.432204 -0.369762 +v -0.598799 -0.455416 -0.319132 +v -0.652989 -0.366196 -0.319130 +v -0.625894 -0.410806 -0.319131 +v -0.680085 -0.321585 -0.319129 +v -0.707180 -0.276975 -0.319128 +v -0.717384 -0.230552 -0.433055 +v -0.702757 -0.207341 -0.486266 +v -0.720999 -0.253763 -0.369757 +v -0.726203 -0.085245 -0.319127 +v -0.716692 -0.181110 -0.319128 +v -0.735715 0.010620 -0.319127 +v -0.745226 0.106485 -0.319126 +v -0.755432 0.106486 -0.433053 +v -0.740806 0.106485 -0.486264 +v -0.759046 0.106486 -0.369756 +v -0.726190 0.245400 -0.319127 +v -0.735708 0.192780 -0.319127 +v -0.716673 0.298020 -0.319128 +v -0.707156 0.350639 -0.319128 +v -0.717360 0.371687 -0.433055 +v -0.702735 0.363268 -0.486266 +v -0.720975 0.363268 -0.369757 +v -0.652958 0.439855 -0.319130 +v -0.680057 0.395247 -0.319129 +v -0.625859 0.484464 -0.319131 +v -0.598760 0.529072 -0.319132 +v -0.608965 0.550119 -0.433059 +v -0.594339 0.541700 -0.486270 +v -0.612579 0.541700 -0.369762 +v -0.517650 0.588682 -0.319136 +v -0.558205 0.558877 -0.319134 +v -0.477095 0.618487 -0.319137 +v -0.436540 0.648293 -0.319139 +v -0.446745 0.669340 -0.433066 +v -0.432120 0.660921 -0.486277 +v -0.450360 0.660921 -0.369768 +v -0.636098 -0.364383 -0.433058 +v -0.663193 -0.319773 -0.433057 +v -0.648567 -0.296562 -0.486268 +v -0.690288 -0.275162 -0.433056 +v -0.666808 -0.342984 -0.369760 +v -0.726896 -0.146293 -0.433055 +v -0.736408 -0.062033 -0.433054 +v -0.721782 -0.050428 -0.486265 +v -0.745920 0.022226 -0.433054 +v -0.740023 -0.073639 -0.369757 +v -0.745912 0.213828 -0.433054 +v -0.736395 0.266448 -0.433054 +v -0.721770 0.258028 -0.486265 +v -0.726878 0.319067 -0.433055 +v -0.740010 0.258029 -0.369757 +v -0.690261 0.416295 -0.433056 +v -0.663162 0.460903 -0.433057 +v -0.648537 0.452484 -0.486268 +v -0.636063 0.505511 -0.433058 +v -0.666777 0.452484 -0.369760 +v -0.568410 0.579924 -0.433061 +v -0.527855 0.609730 -0.433063 +v -0.513229 0.601310 -0.486274 +v -0.487300 0.639535 -0.433064 +v -0.531470 0.601311 -0.369765 +v -0.621471 -0.341172 -0.486269 +v -0.675662 -0.251952 -0.486267 +v -0.639713 -0.387594 -0.369761 +v -0.693904 -0.298374 -0.369759 +v -0.712270 -0.128885 -0.486266 +v -0.731294 0.028028 -0.486265 +v -0.730511 -0.163701 -0.369757 +v -0.749534 0.016423 -0.369756 +v -0.731287 0.205409 -0.486265 +v -0.712252 0.310648 -0.486266 +v -0.749527 0.205409 -0.369756 +v -0.730492 0.310649 -0.369757 +v -0.675636 0.407876 -0.486267 +v -0.621438 0.497092 -0.486269 +v -0.693876 0.407876 -0.369758 +v -0.639678 0.497092 -0.369761 +v -0.553784 0.571505 -0.486272 +v -0.472675 0.631115 -0.486275 +v -0.572024 0.571506 -0.369763 +v -0.490915 0.631116 -0.369767 +v 0.368383 0.467540 -0.724824 +v 0.476764 0.291586 -0.754514 +v 0.514815 0.084038 -0.789533 +v 0.476745 -0.123508 -0.824548 +v 0.368348 -0.299453 -0.854230 +v 0.206128 -0.417013 -0.874058 +v 0.014780 -0.458289 -0.881015 +v -0.176563 -0.416998 -0.874042 +v -0.338773 -0.299426 -0.854199 +v -0.447154 -0.123472 -0.824509 +v -0.485205 0.084077 -0.789490 +v -0.447134 0.291622 -0.754475 +v -0.338737 0.467568 -0.724793 +v -0.176517 0.585127 -0.704965 +v 0.014831 0.626403 -0.698008 +v 0.206174 0.585112 -0.704981 +v 0.453435 0.505663 -0.571402 +v 0.561816 0.327222 -0.571407 +v 0.599868 0.083065 -0.571408 +v 0.561795 -0.207547 -0.571407 +v 0.453400 -0.385980 -0.571403 +v 0.291179 -0.523423 -0.571396 +v 0.014789 -0.547057 -0.571385 +v -0.289373 -0.505178 -0.571372 +v -0.451584 -0.385944 -0.571366 +v -0.559965 -0.207503 -0.571361 +v -0.598015 0.083112 -0.571360 +v -0.559944 0.327266 -0.571361 +v -0.451549 0.505698 -0.571366 +v -0.289329 0.624919 -0.571372 +v 0.014837 0.666774 -0.571385 +v 0.291225 0.643119 -0.571396 +v 0.401528 0.505664 -0.294751 +v 0.509910 0.327224 -0.294756 +v 0.547961 0.083067 -0.294757 +v 0.509885 -0.300391 -0.294756 +v 0.401490 -0.478823 -0.294751 +v 0.239270 -0.598044 -0.294745 +v 0.014797 -0.639902 -0.294736 +v -0.326521 -0.598022 -0.294722 +v -0.488731 -0.478788 -0.294715 +v -0.597113 -0.300347 -0.294711 +v -0.635159 0.083113 -0.294709 +v -0.597088 0.327267 -0.294711 +v -0.488692 0.505700 -0.294715 +v -0.326473 0.624921 -0.294722 +v 0.014848 0.666774 -0.294736 +v 0.239319 0.624898 -0.294745 +v 0.476794 0.293550 0.000037 +v 0.368413 0.471990 0.000041 +v 0.514847 0.083068 0.000035 +v 0.476770 -0.317270 0.000036 +v 0.368375 -0.495702 0.000041 +v 0.206155 -0.614923 0.000047 +v 0.014808 -0.656783 0.000055 +v -0.210299 -0.614907 0.000064 +v -0.372509 -0.495673 0.000071 +v -0.480891 -0.317233 0.000075 +v -0.518936 0.083109 0.000077 +v -0.480867 0.293587 0.000075 +v -0.372471 0.472020 0.000071 +v -0.210251 0.591241 0.000064 +v 0.014859 0.633099 0.000055 +v 0.206203 0.591224 0.000048 +v 0.476812 0.293550 0.428617 +v 0.368430 0.471990 0.428621 +v 0.514864 0.083068 0.428615 +v 0.476792 -0.211790 0.428617 +v 0.368396 -0.390222 0.428621 +v 0.206177 -0.509443 0.428628 +v 0.014830 -0.551303 0.428636 +v -0.176514 -0.509428 0.428643 +v -0.338725 -0.390194 0.428650 +v -0.447106 -0.211754 0.428654 +v -0.485156 0.083107 0.428656 +v -0.447086 0.293586 0.428654 +v -0.338691 0.472018 0.428650 +v -0.176471 0.591239 0.428643 +v 0.014876 0.633099 0.428636 +v 0.206220 0.591224 0.428628 +v 0.476828 0.290352 0.822315 +v 0.368447 0.466082 0.853305 +v 0.514879 0.083068 0.785764 +v 0.476808 -0.124213 0.749216 +v 0.368412 -0.299934 0.718235 +v 0.206191 -0.417344 0.697539 +v 0.014844 -0.458567 0.690277 +v -0.176500 -0.417329 0.697555 +v -0.338709 -0.299907 0.718266 +v -0.447090 -0.124177 0.749255 +v -0.485141 0.083107 0.785807 +v -0.447070 0.290388 0.822355 +v -0.338674 0.466110 0.853335 +v -0.176453 0.583519 0.874032 +v 0.014894 0.624743 0.881294 +v 0.206238 0.583504 0.874015 +v -0.485148 0.083107 0.607231 +v -0.447079 0.293586 0.607229 +v -0.463998 -0.264493 0.214365 +v -0.502046 0.083108 0.214366 +v -0.463976 0.293587 0.214365 +v -0.355581 0.472019 0.214360 +v 0.507625 0.416442 -0.571405 +v 0.580842 0.221981 -0.571408 +v 0.580831 -0.062241 -0.571408 +v 0.507597 -0.296763 -0.571405 +v 0.372289 -0.454701 -0.571399 +v 0.144862 -0.535240 -0.571390 +v -0.140947 -0.526117 -0.571378 +v -0.370479 -0.445561 -0.571369 +v -0.505775 -0.296724 -0.571364 +v -0.578990 -0.062196 -0.571361 +v -0.578979 0.222027 -0.571361 +v -0.505746 0.416482 -0.571364 +v -0.370439 0.565309 -0.571369 +v -0.140901 0.645847 -0.571378 +v 0.144909 0.654947 -0.571390 +v 0.372330 0.574391 -0.571399 +v 0.451852 0.526710 -0.433078 +v 0.455719 0.416444 -0.294754 +v 0.560234 0.348269 -0.433082 +v 0.528936 0.221983 -0.294757 +v 0.598284 0.083065 -0.433084 +v 0.528923 -0.108662 -0.294757 +v 0.560210 -0.253970 -0.433082 +v 0.455687 -0.389607 -0.294754 +v 0.451814 -0.432402 -0.433078 +v 0.320380 -0.538433 -0.294748 +v 0.289595 -0.560734 -0.433071 +v 0.135156 -0.618973 -0.294741 +v 0.014793 -0.593479 -0.433060 +v -0.148552 -0.618962 -0.294729 +v -0.331096 -0.551599 -0.433046 +v -0.407626 -0.538405 -0.294719 +v -0.493306 -0.432365 -0.433040 +v -0.542922 -0.389568 -0.294713 +v -0.601687 -0.253924 -0.433035 +v -0.616136 -0.108617 -0.294710 +v -0.639735 0.083113 -0.433034 +v -0.616123 0.222028 -0.294710 +v -0.601664 0.348315 -0.433035 +v -0.542890 0.416484 -0.294713 +v -0.493268 0.526747 -0.433040 +v -0.407583 0.565310 -0.294719 +v -0.331048 0.645968 -0.433046 +v -0.148502 0.645847 -0.294729 +v 0.014844 0.687821 -0.433060 +v 0.135206 0.645836 -0.294741 +v 0.289643 0.655055 -0.433071 +v 0.320423 0.565281 -0.294748 +v 0.506043 0.437489 -0.433080 +v 0.579260 0.243028 -0.433083 +v 0.579247 -0.085453 -0.433083 +v 0.506012 -0.343186 -0.433080 +v 0.370705 -0.496568 -0.433075 +v 0.164379 -0.577107 -0.433066 +v -0.167898 -0.572539 -0.433053 +v -0.412201 -0.491982 -0.433043 +v -0.547497 -0.343145 -0.433037 +v -0.620711 -0.085405 -0.433034 +v -0.620698 0.243075 -0.433034 +v -0.547466 0.437531 -0.433037 +v -0.412158 0.586357 -0.433043 +v -0.167849 0.666895 -0.433053 +v 0.164428 0.671437 -0.433066 +v 0.370747 0.590882 -0.433075 +v 0.480530 0.461052 -0.571404 +v 0.534721 0.371832 -0.571406 +v 0.571329 0.274601 -0.571407 +v 0.590356 0.169361 -0.571408 +v 0.590349 0.010412 -0.571408 +v 0.571313 -0.134894 -0.571407 +v 0.534696 -0.252155 -0.571406 +v 0.480498 -0.341371 -0.571404 +v 0.412844 -0.420340 -0.571401 +v 0.331734 -0.489062 -0.571398 +v 0.218021 -0.529331 -0.571393 +v 0.071703 -0.541148 -0.571387 +v -0.066734 -0.536587 -0.571381 +v -0.215160 -0.515647 -0.571375 +v -0.329926 -0.475369 -0.571371 +v -0.411031 -0.415752 -0.571368 +v -0.478679 -0.341334 -0.571365 +v -0.532870 -0.252113 -0.571363 +v -0.569478 -0.134849 -0.571361 +v -0.588503 0.010458 -0.571360 +v -0.588496 0.169407 -0.571360 +v -0.569462 0.274646 -0.571361 +v -0.532845 0.371874 -0.571362 +v -0.478648 0.461090 -0.571365 +v -0.410994 0.535503 -0.571367 +v -0.329884 0.595114 -0.571371 +v -0.215115 0.635383 -0.571375 +v -0.066687 0.656311 -0.571381 +v 0.071751 0.660861 -0.571387 +v 0.218067 0.649033 -0.571393 +v 0.412882 0.540027 -0.571401 +v 0.331778 0.608755 -0.571397 +v 0.460766 0.518290 -0.502240 +v 0.430754 0.518292 -0.363915 +v 0.428624 0.461054 -0.294752 +v 0.482815 0.371834 -0.294755 +v 0.569148 0.339850 -0.502245 +v 0.539135 0.339851 -0.363919 +v 0.519423 0.274603 -0.294756 +v 0.538449 0.169363 -0.294757 +v 0.607199 0.083064 -0.502246 +v 0.577186 0.083066 -0.363921 +v 0.538442 -0.012798 -0.294757 +v 0.519404 -0.204526 -0.294756 +v 0.569125 -0.230759 -0.502245 +v 0.539111 -0.277180 -0.363919 +v 0.482786 -0.344999 -0.294755 +v 0.428589 -0.434215 -0.294753 +v 0.460730 -0.409191 -0.502241 +v 0.430715 -0.455613 -0.363915 +v 0.360935 -0.508628 -0.294750 +v 0.279825 -0.568239 -0.294747 +v 0.298509 -0.542079 -0.502234 +v 0.268496 -0.579389 -0.363908 +v 0.187213 -0.608509 -0.294743 +v 0.083099 -0.629438 -0.294739 +v 0.014791 -0.570268 -0.502223 +v 0.014795 -0.616691 -0.363898 +v -0.059568 -0.629433 -0.294733 +v -0.237536 -0.608492 -0.294726 +v -0.313890 -0.528388 -0.502209 +v -0.336118 -0.574810 -0.363884 +v -0.367073 -0.568213 -0.294720 +v -0.448179 -0.508596 -0.294717 +v -0.476100 -0.409154 -0.502203 +v -0.498328 -0.455576 -0.363877 +v -0.515826 -0.434178 -0.294714 +v -0.570017 -0.344957 -0.294712 +v -0.584481 -0.230714 -0.502198 +v -0.606710 -0.277135 -0.363873 +v -0.606624 -0.204482 -0.294711 +v -0.625647 -0.012752 -0.294710 +v -0.622530 0.083113 -0.502197 +v -0.644757 0.083114 -0.363871 +v -0.625640 0.169408 -0.294710 +v -0.606605 0.274648 -0.294711 +v -0.584459 0.339895 -0.502198 +v -0.606686 0.339896 -0.363873 +v -0.569989 0.371876 -0.294712 +v -0.515791 0.461092 -0.294714 +v -0.476063 0.518327 -0.502203 +v -0.498290 0.518328 -0.363877 +v -0.448137 0.535505 -0.294717 +v -0.367028 0.595115 -0.294720 +v -0.313844 0.637548 -0.502209 +v -0.336070 0.637549 -0.363884 +v -0.237487 0.635384 -0.294725 +v -0.059517 0.656310 -0.294733 +v 0.014840 0.679402 -0.502222 +v 0.014846 0.679402 -0.363898 +v 0.083150 0.656305 -0.294738 +v 0.187262 0.635367 -0.294743 +v 0.298557 0.651191 -0.502234 +v 0.268544 0.642081 -0.363908 +v 0.360976 0.535473 -0.294750 +v 0.279871 0.595090 -0.294746 +v 0.478948 0.482100 -0.433079 +v 0.514957 0.429070 -0.502243 +v 0.533138 0.392879 -0.433081 +v 0.484944 0.429071 -0.363917 +v 0.569747 0.295649 -0.433083 +v 0.588174 0.234609 -0.502246 +v 0.588773 0.190408 -0.433083 +v 0.558162 0.234610 -0.363920 +v 0.588766 -0.001194 -0.433084 +v 0.588162 -0.073847 -0.502246 +v 0.569729 -0.169711 -0.433083 +v 0.558149 -0.097057 -0.363920 +v 0.533111 -0.298578 -0.433081 +v 0.514927 -0.319975 -0.502243 +v 0.478913 -0.387794 -0.433079 +v 0.484913 -0.366397 -0.363917 +v 0.411259 -0.464485 -0.433076 +v 0.379619 -0.475635 -0.502237 +v 0.330150 -0.528651 -0.433073 +v 0.349605 -0.517501 -0.363912 +v 0.226987 -0.568921 -0.433069 +v 0.162743 -0.556174 -0.502228 +v 0.101771 -0.585294 -0.433064 +v 0.153831 -0.598041 -0.363904 +v -0.086299 -0.583009 -0.433056 +v -0.158078 -0.549328 -0.502216 +v -0.249497 -0.562069 -0.433050 +v -0.165535 -0.595750 -0.363891 +v -0.371648 -0.521790 -0.433045 +v -0.394995 -0.468771 -0.502206 +v -0.452753 -0.462173 -0.433041 +v -0.417223 -0.515193 -0.363881 +v -0.520401 -0.387755 -0.433039 +v -0.530291 -0.319934 -0.502200 +v -0.574592 -0.298534 -0.433036 +v -0.552519 -0.366356 -0.363875 +v -0.611199 -0.169665 -0.433035 +v -0.603506 -0.073800 -0.502197 +v -0.630223 -0.001146 -0.433034 +v -0.625733 -0.097011 -0.363872 +v -0.630216 0.190456 -0.433034 +v -0.603494 0.234656 -0.502197 +v -0.611181 0.295695 -0.433035 +v -0.625720 0.234657 -0.363872 +v -0.574565 0.392923 -0.433036 +v -0.530261 0.429111 -0.502200 +v -0.520367 0.482139 -0.433038 +v -0.552488 0.429112 -0.363875 +v -0.452713 0.556552 -0.433041 +v -0.394953 0.577938 -0.502206 +v -0.371603 0.616163 -0.433044 +v -0.417180 0.577939 -0.363880 +v -0.249449 0.656431 -0.433049 +v -0.158030 0.658476 -0.502215 +v -0.086249 0.677359 -0.433056 +v -0.165486 0.658476 -0.363891 +v 0.101821 0.679629 -0.433064 +v 0.162791 0.665296 -0.502228 +v 0.227035 0.663246 -0.433069 +v 0.153880 0.660741 -0.363904 +v 0.349649 0.580186 -0.363912 +v 0.330195 0.622968 -0.433073 +v 0.379661 0.584741 -0.502237 +v 0.411300 0.558796 -0.433076 +v 0.487861 0.473680 -0.502242 +v 0.542052 0.384460 -0.502244 +v 0.457849 0.473682 -0.363916 +v 0.512040 0.384461 -0.363918 +v 0.578661 0.287229 -0.502245 +v 0.597687 0.181989 -0.502246 +v 0.548648 0.287231 -0.363920 +v 0.567675 0.181990 -0.363920 +v 0.597680 0.004609 -0.502246 +v 0.578643 -0.152303 -0.502245 +v 0.567667 -0.006996 -0.363920 +v 0.548630 -0.187119 -0.363920 +v 0.542026 -0.275367 -0.502244 +v 0.487828 -0.364583 -0.502242 +v 0.512012 -0.321789 -0.363918 +v 0.457814 -0.411005 -0.363916 +v 0.420175 -0.442413 -0.502239 +v 0.339064 -0.508857 -0.502236 +v 0.390160 -0.486557 -0.363913 +v 0.309051 -0.548445 -0.363910 +v 0.230626 -0.549126 -0.502231 +v 0.094859 -0.563221 -0.502226 +v 0.211163 -0.588715 -0.363906 +v 0.096498 -0.607366 -0.363901 +v -0.080172 -0.559798 -0.502219 +v -0.235984 -0.538858 -0.502212 +v -0.080243 -0.606220 -0.363894 +v -0.250827 -0.585280 -0.363887 +v -0.354442 -0.498580 -0.502208 +v -0.435547 -0.438963 -0.502204 +v -0.376671 -0.545002 -0.363882 +v -0.457776 -0.485385 -0.363879 +v -0.503195 -0.364544 -0.502201 +v -0.557386 -0.275324 -0.502199 +v -0.525424 -0.410966 -0.363876 +v -0.579615 -0.321746 -0.363874 +v -0.593994 -0.152257 -0.502198 +v -0.613018 0.004656 -0.502197 +v -0.616222 -0.187073 -0.363872 +v -0.635245 -0.006949 -0.363872 +v -0.613011 0.182036 -0.502197 +v -0.593976 0.287276 -0.502198 +v -0.635238 0.182037 -0.363872 +v -0.616203 0.287276 -0.363872 +v -0.557360 0.384503 -0.502199 +v -0.503162 0.473719 -0.502201 +v -0.579587 0.384504 -0.363874 +v -0.525389 0.473720 -0.363876 +v -0.435508 0.548133 -0.502204 +v -0.354399 0.607743 -0.502207 +v -0.457735 0.548134 -0.363879 +v -0.376625 0.607744 -0.363882 +v -0.235937 0.648012 -0.502212 +v -0.080123 0.668939 -0.502219 +v -0.250778 0.648013 -0.363887 +v -0.080193 0.668939 -0.363894 +v 0.094908 0.672349 -0.502226 +v 0.230674 0.658244 -0.502231 +v 0.096549 0.670071 -0.363901 +v 0.211212 0.651411 -0.363906 +v 0.309096 0.611134 -0.363910 +v 0.339109 0.617966 -0.502236 +v 0.390201 0.549239 -0.363913 +v 0.420214 0.551516 -0.502239 +vn -0.668722 0.559465 -0.489639 +vn -0.476730 0.651173 0.590442 +vn -0.236335 0.943297 -0.233039 +vn -0.613361 -0.779992 -0.123875 +vn -0.701987 -0.337443 0.627125 +vn -0.867916 -0.268288 -0.417951 +vn -0.575335 0.815729 0.059603 +vn -0.527024 0.721976 0.448286 +vn -0.748497 -0.465621 0.472121 +vn -0.828761 -0.552995 0.085696 +vn -0.599994 -0.420911 -0.680288 +vn -0.814295 0.165410 -0.556322 +vn -0.306528 0.695944 -0.649342 +vn -0.737724 -0.554643 -0.384808 +vn -0.870327 0.124851 -0.476363 +vn -0.825922 0.149358 -0.543596 +vn -0.455458 0.766259 -0.453169 +vn -0.922330 0.166814 -0.348460 +vn -0.446760 0.656514 -0.607715 +vn -0.645405 -0.444411 -0.621204 +vn -0.932279 0.125065 -0.339335 +vn -0.613788 -0.752007 -0.240242 +vn -0.548753 -0.753868 0.361278 +vn -0.685141 -0.416150 0.597797 +vn -0.848567 -0.515397 -0.119449 +vn -0.561205 -0.733909 -0.382611 +vn -0.808191 -0.490860 -0.325327 +vn -0.420972 -0.550249 -0.721091 +vn -0.522568 -0.317392 -0.791284 +vn -0.588946 0.801355 -0.104434 +vn -0.396161 0.539018 -0.743278 +vn -0.729087 0.673177 -0.123356 +vn -0.517045 0.476760 -0.710868 +vn -0.234687 0.970763 -0.049898 +vn -0.178259 0.776177 -0.604755 +vn -0.405896 0.552324 0.728111 +vn -0.403882 0.549577 0.731315 +vn -0.579089 0.787988 0.208991 +vn -0.845882 0.513840 -0.142888 +vn -0.840510 0.510605 0.181005 +vn -0.840541 0.510605 0.180944 +vn -0.553331 0.336131 -0.762108 +vn -0.846126 0.514023 -0.140751 +vn -0.840205 0.510392 0.183081 +vn -0.551744 0.335154 -0.763665 +vn -0.971252 0.175665 -0.160649 +vn -0.975005 0.176336 0.134983 +vn -0.974731 0.176275 0.137120 +vn -0.971587 0.175726 -0.158513 +vn -0.977966 0.133000 -0.160710 +vn -0.983520 0.134434 0.120792 +vn -0.976928 -0.110294 -0.182836 +vn -0.990966 -0.104648 0.083560 +vn -0.990051 -0.104556 0.093905 +vn -0.978820 -0.110508 -0.172277 +vn -0.653157 -0.079134 -0.753044 +vn -0.656026 -0.079470 -0.750511 +vn -0.974914 -0.110080 -0.193304 +vn -0.991791 -0.104740 0.073153 +vn -0.648518 -0.078555 -0.757103 +vn -0.807581 -0.490493 -0.327372 +vn -0.848354 -0.515244 -0.121586 +vn -0.404889 0.550951 0.729698 +vn -0.728294 0.656545 0.196234 +vn -0.521073 0.476699 0.707968 +vn -0.566332 0.344066 0.748894 +vn -0.567858 0.344981 0.747307 +vn -0.920774 0.359355 -0.151585 +vn -0.924314 0.347392 0.157903 +vn -0.662160 0.247780 0.707175 +vn -0.665700 0.120396 0.736412 +vn -0.663961 0.120090 0.738029 +vn -0.692007 0.099277 0.714988 +vn -0.986175 -0.007843 -0.165349 +vn -0.994049 -0.001648 0.108646 +vn -0.719138 0.002777 0.694815 +vn -0.696402 -0.069124 0.714286 +vn -0.701804 -0.069643 0.708914 +vn -0.705527 -0.070009 0.705161 +vn -0.915952 -0.301187 -0.265053 +vn -0.952483 -0.304056 -0.016327 +vn -0.646779 -0.211554 -0.732719 +vn -0.757012 -0.268410 0.595691 +vn -0.686422 -0.416944 0.595752 +vn -0.257973 0.944121 0.205115 +vn -0.190863 0.770745 0.607837 +vn -0.718070 -0.445051 0.535020 +vn -0.492630 0.685903 0.535508 +vn -0.893399 0.036622 -0.447707 +vn -0.836756 0.306558 -0.453688 +vn -0.104495 0.142125 -0.984313 +vn 0.051332 0.726707 -0.684988 +vn -0.111850 0.107273 -0.987884 +vn -0.119083 0.072298 -0.990234 +vn 0.062807 0.749168 -0.659352 +vn -0.136692 -0.016541 -0.990448 +vn -0.227332 -0.662984 -0.713248 +vn -0.143773 -0.054048 -0.988128 +vn -0.150670 -0.091464 -0.984313 +vn -0.218909 -0.566118 -0.794671 +vn 0.185797 0.969176 0.161596 +vn 0.004395 0.732261 0.680990 +vn 0.196814 0.980407 0.005982 +vn -0.165258 0.224891 0.960234 +vn -0.178655 0.170904 0.968932 +vn -0.191473 0.116337 0.974548 +vn -0.200262 0.077120 0.976684 +vn 0.197424 0.972655 -0.122166 +vn -0.208747 0.037751 0.977233 +vn -0.210578 0.029023 0.977111 +vn -0.216407 0.000702 0.976287 +vn -0.205878 -0.974059 -0.093600 +vn -0.220954 -0.021912 0.975036 +vn -0.232978 -0.085269 0.968719 +vn -0.244057 -0.148259 0.958342 +vn -0.285867 -0.807703 0.515610 +vn -0.181341 -0.932371 -0.312632 +vn -0.208197 -0.892544 -0.399976 +vn 0.125980 0.926786 -0.353801 +vn -0.031465 0.583789 0.811274 +vn -0.000580 0.751640 0.659536 +vn 0.205847 0.978484 -0.012543 +vn -0.278329 -0.682638 0.675619 +vn -0.234931 -0.455061 0.858882 +vn -0.250740 -0.931028 -0.265114 +vn -0.205847 -0.978484 0.012543 +vn -0.025727 0.727165 0.685965 +vn -0.344096 -0.650685 0.676870 +vn -0.241462 0.221412 -0.944792 +vn -0.384136 0.153020 -0.910489 +vn -0.414167 0.004975 -0.910154 +vn -0.317240 -0.109622 -0.941954 +vn -0.137181 0.744438 -0.653401 +vn -0.368480 -0.555712 -0.745232 +vn -0.999939 -0.008423 0.002716 +vn -0.941343 -0.316996 0.115513 +vn -0.698111 -0.360118 0.618793 +vn -0.770989 -0.108341 0.627522 +vn -0.998901 0.025147 0.039277 +vn -0.933714 0.357982 0.002716 +vn -0.596789 0.438307 0.672048 +vn -0.742302 0.669210 0.033448 +vn -0.935789 0.350627 0.036409 +vn -0.739250 0.171758 0.651143 +vn -0.941954 -0.301431 0.147649 +vn -0.723716 -0.649831 0.232215 +vn -0.710532 -0.669668 0.215918 +vn -0.929594 -0.278176 0.241768 +vn -0.973693 0.039521 0.224342 +vn -0.996643 0.016663 0.079775 +vn -0.910733 0.345531 0.226081 +vn -0.736137 0.674306 0.058016 +vn -0.401349 0.915616 0.023164 +vn -0.388623 0.909391 0.148167 +vn -0.724570 0.658528 0.203223 +vn -0.932463 0.353618 0.073489 +vn 0.555193 0.320750 -0.767357 +vn 0.410199 0.482650 -0.773766 +vn 0.790399 0.489151 -0.368725 +vn 0.934996 0.176824 -0.307352 +vn 0.624775 0.122074 -0.771172 +vn 0.962401 -0.125614 -0.240730 +vn 0.613697 -0.114780 -0.781121 +vn 0.804529 -0.480911 -0.348430 +vn 0.486282 -0.317423 -0.814081 +vn 0.602222 -0.716392 -0.352214 +vn 0.277444 -0.562517 -0.778832 +vn 0.121830 -0.941527 -0.314127 +vn 0.000946 -0.614154 -0.789148 +vn -0.157109 -0.937803 -0.309519 +vn -0.274361 -0.540117 -0.795587 +vn -0.547136 -0.720573 -0.425886 +vn -0.473312 -0.317423 -0.821711 +vn -0.768700 -0.445662 -0.458754 +vn -0.581225 -0.101169 -0.807398 +vn -0.907773 -0.115726 -0.403119 +vn -0.585040 0.123020 -0.801569 +vn -0.869442 0.173193 -0.462661 +vn -0.514603 0.307321 -0.800409 +vn -0.732139 0.459700 -0.502579 +vn -0.383862 0.464003 -0.798303 +vn -0.514237 0.710776 -0.479904 +vn -0.215430 0.635609 -0.741325 +vn -0.141484 0.942808 -0.301737 +vn 0.000092 0.708792 -0.705374 +vn 0.097659 0.944792 -0.312693 +vn 0.225959 0.642384 -0.732292 +vn 0.577868 0.705527 -0.410169 +vn 0.818781 0.497299 0.286813 +vn 0.734855 0.673574 0.078890 +vn 0.931669 0.355937 0.072604 +vn 0.946837 0.171178 0.272286 +vn 0.997833 0.034455 0.055666 +vn 0.965239 -0.095859 0.243019 +vn 0.947691 -0.308359 0.082308 +vn 0.847926 -0.515091 0.125126 +vn 0.719962 -0.686117 0.104343 +vn 0.597369 -0.801813 0.014039 +vn 0.390423 -0.914975 0.101627 +vn 0.192694 -0.969024 -0.154302 +vn 0.011597 -0.995849 0.089938 +vn -0.123020 -0.982940 -0.136570 +vn -0.335734 -0.930754 0.144780 +vn -0.592242 -0.805719 -0.002594 +vn -0.848415 -0.515305 0.120945 +vn -0.965972 -0.095889 0.240181 +vn -0.946348 0.171148 0.273995 +vn -0.818018 0.496933 0.289560 +vn -0.570391 0.776116 0.268777 +vn -0.130619 0.979308 0.154363 +vn -0.002869 0.998077 0.061434 +vn 0.190283 0.962523 0.193121 +vn 0.409497 0.909116 0.075838 +vn 0.567949 0.771722 0.286081 +vn 0.799005 0.485305 -0.354961 +vn 0.716727 0.602954 -0.350261 +vn 0.810572 0.492325 -0.317087 +vn 0.892727 0.331736 -0.304819 +vn 0.941099 0.170141 -0.292123 +vn 0.960814 0.136784 -0.241035 +vn 0.972045 -0.009980 -0.234535 +vn 0.964476 -0.126133 -0.232032 +vn 0.963042 -0.125919 -0.238044 +vn 0.906827 -0.303140 -0.292795 +vn 0.804346 -0.488632 -0.337992 +vn 0.810053 -0.492111 -0.318705 +vn 0.722587 -0.603381 -0.337260 +vn 0.606647 -0.717856 -0.341472 +vn 0.607440 -0.718345 -0.339030 +vn 0.372112 -0.864132 -0.338786 +vn 0.079806 -0.946104 -0.313791 +vn 0.086795 -0.950499 -0.298288 +vn -0.011567 -0.954863 -0.296793 +vn -0.124241 -0.942778 -0.309305 +vn -0.130833 -0.932005 -0.337901 +vn -0.338145 -0.855922 -0.391156 +vn -0.535997 -0.729179 -0.425398 +vn -0.533708 -0.726035 -0.433576 +vn -0.663656 -0.602557 -0.443190 +vn -0.767998 -0.466445 -0.438826 +vn -0.759972 -0.461562 -0.457564 +vn -0.853603 -0.287088 -0.434614 +vn -0.912503 -0.118992 -0.391339 +vn -0.908963 -0.118992 -0.399457 +vn -0.917753 -0.008484 -0.397046 +vn -0.906888 0.127995 -0.401410 +vn -0.878597 0.158910 -0.450270 +vn -0.834956 0.311014 -0.453932 +vn -0.762169 0.462996 -0.452437 +vn -0.744469 0.452223 -0.491134 +vn -0.653615 0.593249 -0.469924 +vn -0.532060 0.723930 -0.439070 +vn -0.522507 0.710929 -0.470656 +vn -0.351695 0.844295 -0.404279 +vn -0.133244 0.945982 -0.295511 +vn -0.126988 0.962310 -0.240394 +vn -0.011658 0.970306 -0.241523 +vn 0.090030 0.966369 -0.240852 +vn 0.078066 0.954558 -0.287545 +vn 0.374157 0.858638 -0.350261 +vn 0.596759 0.704794 -0.383526 +vn 0.608844 0.719230 -0.334666 +vn 0.898618 0.336436 0.281533 +vn 0.818232 0.496963 0.288888 +vn 0.711539 0.644429 0.279977 +vn 0.967681 0.004364 0.252022 +vn 0.953734 0.136998 0.267586 +vn 0.947417 0.171270 0.270211 +vn 0.937407 -0.290078 0.192572 +vn 0.965850 -0.095981 0.240547 +vn 0.963408 -0.095737 0.250282 +vn 0.747520 -0.660360 0.071261 +vn 0.848140 -0.515244 0.123051 +vn 0.361827 -0.930021 -0.064058 +vn 0.597339 -0.801508 0.027070 +vn 0.595691 -0.803186 0.005127 +vn 0.005890 -0.982208 -0.187658 +vn 0.164647 -0.968505 -0.186743 +vn 0.191931 -0.970580 -0.145177 +vn -0.377483 -0.922941 -0.075014 +vn -0.115452 -0.980834 -0.156896 +vn -0.126133 -0.974181 -0.187078 +vn -0.734306 -0.676199 0.059236 +vn -0.592242 -0.805719 -0.000397 +vn -0.929197 -0.325785 0.174413 +vn -0.848628 -0.515427 0.118778 +vn -0.968444 0.002380 0.249092 +vn -0.965239 -0.095859 0.243049 +vn -0.967742 -0.096103 0.232826 +vn -0.900388 0.330424 0.282968 +vn -0.956786 0.135777 0.257057 +vn -0.716422 0.637471 0.283425 +vn -0.363079 0.902676 0.230811 +vn -0.571032 0.777032 0.264779 +vn 0.006073 0.989166 0.146489 +vn -0.123569 0.979553 0.158605 +vn -0.115085 0.976745 0.180761 +vn 0.392315 0.881466 0.262795 +vn 0.188604 0.957610 0.217597 +vn 0.163762 0.970672 0.175848 +vn 0.568896 0.772973 0.280709 +vn 0.566973 0.770440 0.291421 +vn 0.739799 0.172002 0.650441 +vn 0.705100 -0.357952 0.612079 +vn 0.771111 -0.108402 0.627369 +vn -0.501114 -0.561968 0.658040 +vn -0.264107 -0.680441 0.683523 +vn -0.338847 0.641743 0.687979 +vn 0.000000 -0.717856 0.696188 +vn 0.000031 0.719962 0.693960 +vn 0.264107 -0.680471 0.683493 +vn 0.338969 0.641713 0.687948 +vn 0.596912 0.438276 0.671987 +vn 0.501144 -0.562029 0.657979 +vn 0.630757 0.769951 -0.096408 +vn 0.756859 0.647725 -0.087069 +vn 0.614124 0.776147 0.142918 +vn 0.739036 0.655049 0.157170 +vn 0.631489 0.770806 -0.083956 +vn 0.612995 0.774682 0.155126 +vn 0.571978 0.749443 0.333323 +vn 0.698477 0.625385 0.347789 +vn 0.569628 0.746330 0.344188 +vn 0.631764 0.772332 -0.065828 +vn 0.611744 0.773125 0.167272 +vn 0.411115 0.908322 -0.076815 +vn 0.373547 0.918516 0.129337 +vn 0.567186 0.743156 0.354930 +vn 0.357128 0.878811 0.316355 +vn 0.156835 0.958312 0.238777 +vn 0.157811 0.964324 0.212409 +vn 0.129704 0.989288 0.066744 +vn 0.131169 0.989563 0.059572 +vn 0.138707 0.972594 0.186560 +vn 0.005982 0.986694 0.162358 +vn 0.115360 0.992584 0.038301 +vn -0.002564 0.999939 0.009949 +vn 0.103580 0.989898 -0.096469 +vn 0.104678 0.987060 -0.121189 +vn 0.092837 0.983825 -0.153020 +vn -0.013703 0.987548 -0.156621 +vn -0.112888 0.979949 0.164129 +vn -0.120212 0.979278 0.162816 +vn -0.115543 0.993255 -0.005737 +vn -0.127232 0.991791 -0.011902 +vn -0.120304 0.980407 0.155919 +vn -0.380993 0.912290 0.150060 +vn -0.127171 0.991760 -0.013459 +vn -0.372112 0.926450 -0.056459 +vn -0.119449 0.979064 -0.164769 +vn -0.131108 0.975982 -0.173864 +vn -0.130955 0.974792 -0.180639 +vn -0.361736 0.899594 -0.244575 +vn -0.586383 0.797876 0.139744 +vn -0.589648 0.802301 -0.092654 +vn -0.736412 0.665151 0.123356 +vn -0.729240 0.674978 -0.112186 +vn -0.567156 0.771722 -0.287667 +vn -0.701956 0.642232 -0.307779 +vn -0.849879 0.516282 0.105472 +vn -0.850063 0.516404 0.103366 +vn -0.846980 0.514512 -0.133580 +vn -0.932951 0.350536 0.081698 +vn -0.847224 0.514664 -0.131443 +vn -0.921690 0.360485 -0.143223 +vn -0.810236 0.492172 -0.318186 +vn -0.810236 0.492203 -0.318186 +vn -0.886563 0.336924 -0.316874 +vn -0.982177 0.177648 0.060945 +vn -0.982299 0.177648 0.058809 +vn -0.972533 0.175878 -0.152318 +vn -0.972198 0.175817 -0.154454 +vn -0.989746 0.134770 0.046785 +vn -0.999329 -0.001556 0.035829 +vn -0.978881 0.133122 -0.155065 +vn -0.987091 -0.007782 -0.159856 +vn -0.935789 0.169225 -0.309275 +vn -0.936399 0.169347 -0.307260 +vn -0.945647 0.127659 -0.298959 +vn -0.956542 -0.003784 -0.291513 +vn -0.994171 -0.105014 0.023408 +vn -0.994354 -0.105014 0.014740 +vn -0.979949 -0.110630 -0.165593 +vn -0.978423 -0.110477 -0.174505 +vn -0.994446 -0.105045 0.006043 +vn -0.948057 -0.310373 -0.069613 +vn -0.976806 -0.110294 -0.183416 +vn -0.921873 -0.300943 -0.244026 +vn -0.948790 -0.115146 -0.294076 +vn -0.945769 -0.114719 -0.303842 +vn -0.942991 -0.114383 -0.312510 +vn -0.884793 -0.293100 -0.362224 +vn -0.845851 -0.513749 -0.143284 +vn -0.816889 -0.496170 -0.294015 +vn -0.731956 -0.653615 -0.192297 +vn -0.816370 -0.495834 -0.296060 +vn -0.704825 -0.631672 -0.322764 +vn -0.784814 -0.476669 -0.396008 +vn -0.784112 -0.476241 -0.397900 +vn -0.676962 -0.612110 -0.408612 +vn -0.574572 -0.781671 -0.242439 +vn -0.556413 -0.756951 -0.342601 +vn -0.375561 -0.882656 -0.282510 +vn -0.360637 -0.865658 -0.347148 +vn -0.539872 -0.734458 -0.411176 +vn -0.346019 -0.853175 -0.390301 +vn -0.116062 -0.943876 -0.309122 +vn -0.116245 -0.946318 -0.301584 +vn -0.120701 -0.935789 -0.331187 +vn -0.120457 -0.938261 -0.324198 +vn -0.107913 -0.947295 -0.301553 +vn 0.006378 -0.949248 -0.314402 +vn -0.111759 -0.941130 -0.318918 +vn -0.000793 -0.948363 -0.317118 +vn -0.125156 -0.930754 -0.343486 +vn -0.125462 -0.932890 -0.337565 +vn -0.114261 -0.936918 -0.330271 +vn -0.013855 -0.947539 -0.319315 +vn 0.137638 -0.949675 -0.281320 +vn 0.156865 -0.954283 -0.254311 +vn 0.119419 -0.948820 -0.292276 +vn 0.132389 -0.954680 -0.266457 +vn 0.157964 -0.960692 -0.228126 +vn 0.384625 -0.916623 -0.108646 +vn 0.126438 -0.958556 -0.255257 +vn 0.384747 -0.908597 -0.162450 +vn 0.086276 -0.943907 -0.318674 +vn 0.100925 -0.950652 -0.293283 +vn 0.100589 -0.957335 -0.270821 +vn 0.398114 -0.886990 -0.233894 +vn 0.606494 -0.795038 -0.006806 +vn 0.606372 -0.794885 -0.019868 +vn 0.617878 -0.781182 -0.089206 +vn 0.617115 -0.780206 -0.101871 +vn 0.606159 -0.794641 -0.032929 +vn 0.747246 -0.662618 0.050325 +vn 0.616260 -0.779138 -0.114536 +vn 0.755028 -0.653493 -0.053499 +vn 0.619709 -0.756615 -0.208380 +vn 0.618061 -0.754631 -0.220191 +vn 0.616352 -0.752525 -0.231910 +vn 0.747429 -0.633534 -0.199805 +vn 0.846797 -0.514420 0.135105 +vn 0.854579 -0.519150 0.011139 +vn 0.854610 -0.519150 0.009003 +vn 0.922025 -0.310312 0.231422 +vn 0.943449 -0.316050 0.099765 +vn 0.843532 -0.512436 -0.160710 +vn 0.843226 -0.512253 -0.162847 +vn 0.944975 -0.314615 -0.089511 +vn 0.943327 -0.099734 0.316477 +vn 0.940794 -0.099490 0.323954 +vn 0.977050 -0.110416 0.182134 +vn 0.975372 -0.110233 0.190985 +vn 0.938261 -0.099216 0.331339 +vn 0.939573 -0.001221 0.342326 +vn 0.973632 -0.110019 0.199774 +vn 0.978393 -0.008057 0.206549 +vn 0.992523 -0.120457 -0.019105 +vn 0.992645 -0.120457 -0.009186 +vn 0.992706 -0.120457 0.000702 +vn 0.999939 -0.010010 0.000427 +vn 0.928129 0.125309 0.350475 +vn 0.919462 0.166204 0.356273 +vn 0.968932 0.132328 0.208930 +vn 0.962798 0.174047 0.206580 +vn 0.918699 0.166082 0.358257 +vn 0.869991 0.332316 0.364147 +vn 0.962371 0.173986 0.208655 +vn 0.914090 0.356456 0.193213 +vn 0.990814 0.135014 -0.003265 +vn 0.983917 0.177862 -0.015564 +vn 0.934843 0.352489 -0.041841 +vn 0.796686 0.483871 0.362072 +vn 0.796045 0.483474 0.364025 +vn 0.840541 0.510514 0.181219 +vn 0.840877 0.510727 0.179113 +vn 0.797327 0.484268 0.360118 +vn 0.852687 0.517899 -0.068117 +vn 0.410871 0.911649 0.007843 +vn 0.736473 0.676412 0.004639 +vn 0.000031 0.999939 0.009186 +vn -0.380078 -0.882687 0.276315 +vn 0.002625 -0.957915 0.286996 +vn 0.388348 -0.883663 0.261361 +vn 0.708670 -0.678732 0.192480 +vn 0.941801 -0.325419 0.084201 +vn 0.999939 -0.009430 0.002228 +vn 0.934721 0.355327 0.001373 +vn -0.000031 -1.000000 0.000000 +vn -0.192480 -0.978027 0.079714 +vn -0.208350 -0.978027 0.000000 +vn -0.208258 0.978057 0.000000 +vn -0.192419 0.978057 0.079684 +vn 0.000031 1.000000 0.000000 +vn -0.147252 0.978057 0.147282 +vn -0.147313 -0.978027 0.147313 +vn -0.079745 -0.978027 0.192450 +vn -0.079653 0.978057 0.192419 +vn 0.000031 0.978057 0.208289 +vn 0.000000 -0.978057 0.208319 +vn 0.079684 -0.978057 0.192450 +vn 0.079745 0.978057 0.192419 +vn 0.147343 0.978057 0.147252 +vn 0.147252 -0.978057 0.147282 +vn 0.192419 -0.978057 0.079714 +vn 0.192480 0.978027 0.079684 +vn 0.208350 0.978027 0.000000 +vn 0.208258 -0.978057 0.000000 +vn 0.192419 -0.978057 -0.079684 +vn 0.192480 0.978027 -0.079714 +vn 0.147313 0.978027 -0.147313 +vn 0.147252 -0.978057 -0.147282 +vn 0.079653 -0.978057 -0.192419 +vn 0.079745 0.978027 -0.192450 +vn 0.000000 0.978057 -0.208319 +vn 0.000855 -0.977783 -0.209571 +vn -0.079745 -0.978057 -0.192419 +vn -0.079684 0.978057 -0.192450 +vn -0.147252 0.978057 -0.147282 +vn -0.147343 -0.978057 -0.147252 +vn -0.192480 -0.978027 -0.079684 +vn -0.192419 0.978057 -0.079714 +vn -0.000031 -0.978057 -0.208289 +vn 0.147343 0.978057 0.147282 +vn -0.391858 -0.920011 0.000000 +vn -0.362041 -0.920011 0.149968 +vn -0.561724 -0.827296 0.000031 +vn -0.518967 -0.827296 0.214972 +vn -0.710959 -0.703207 0.000031 +vn -0.656819 -0.703207 0.272073 +vn -0.833583 -0.552355 0.000031 +vn -0.770135 -0.552355 0.319010 +vn -0.924802 -0.380383 0.000031 +vn -0.854396 -0.380383 0.353923 +vn -0.981017 -0.193884 0.000031 +vn -0.906308 -0.193884 0.375439 +vn -1.000000 0.000031 0.000031 +vn -0.923856 0.000000 0.382702 +vn -0.980987 0.193945 0.000031 +vn -0.906308 0.193945 0.375439 +vn -0.924772 0.380444 0.000000 +vn -0.854366 0.380444 0.353923 +vn -0.833552 0.552416 0.000000 +vn -0.770104 0.552385 0.319010 +vn -0.710898 0.703269 0.000000 +vn -0.656789 0.703269 0.272073 +vn -0.561663 0.827326 0.000000 +vn -0.518906 0.827326 0.214942 +vn -0.391797 0.920042 0.000000 +vn -0.361980 0.920042 0.149937 +vn -0.277017 0.920042 0.277047 +vn -0.397137 0.827326 0.397168 +vn -0.502670 0.703269 0.502701 +vn -0.589373 0.552385 0.589435 +vn -0.653890 0.380444 0.653951 +vn -0.693655 0.193945 0.693686 +vn -0.707083 0.000000 0.707114 +vn -0.693655 -0.193884 0.693686 +vn -0.653920 -0.380413 0.653951 +vn -0.589404 -0.552355 0.589435 +vn -0.502701 -0.703207 0.502701 +vn -0.397198 -0.827296 0.397198 +vn -0.277078 -0.920011 0.277078 +vn -0.149968 -0.920011 0.362011 +vn -0.214942 -0.827326 0.518937 +vn -0.272042 -0.703238 0.656819 +vn -0.318979 -0.552385 0.770135 +vn -0.353893 -0.380413 0.854396 +vn -0.375378 -0.193915 0.906339 +vn -0.382641 0.000000 0.923887 +vn -0.375378 0.193915 0.906339 +vn -0.353862 0.380413 0.854396 +vn -0.318949 0.552385 0.770135 +vn -0.272011 0.703238 0.656819 +vn -0.214911 0.827326 0.518937 +vn -0.149907 0.920011 0.362011 +vn 0.000031 0.920011 0.391827 +vn 0.000031 0.827326 0.561693 +vn 0.000031 0.703238 0.710929 +vn 0.000031 0.552385 0.833583 +vn 0.000031 0.380413 0.924802 +vn 0.000031 0.193915 0.981017 +vn 0.000031 0.000000 1.000000 +vn 0.000000 -0.193915 0.980987 +vn 0.000000 -0.380444 0.924802 +vn 0.000000 -0.552385 0.833552 +vn 0.000000 -0.703238 0.710929 +vn 0.000000 -0.827326 0.561693 +vn 0.000000 -0.920011 0.391827 +vn 0.149907 -0.920011 0.362011 +vn 0.214942 -0.827326 0.518937 +vn 0.272042 -0.703238 0.656789 +vn 0.318979 -0.552385 0.770104 +vn 0.353923 -0.380444 0.854366 +vn 0.375439 -0.193945 0.906308 +vn 0.382702 0.000000 0.923856 +vn 0.375439 0.193884 0.906308 +vn 0.353954 0.380413 0.854396 +vn 0.319041 0.552355 0.770104 +vn 0.272103 0.703238 0.656789 +vn 0.215003 0.827326 0.518906 +vn 0.149998 0.920011 0.361980 +vn 0.277108 0.920011 0.277047 +vn 0.397229 0.827296 0.397137 +vn 0.502731 0.703207 0.502670 +vn 0.589465 0.552355 0.589404 +vn 0.653981 0.380383 0.653890 +vn 0.693716 0.193884 0.693625 +vn 0.707114 -0.000031 0.707053 +vn 0.693686 -0.193945 0.693625 +vn 0.653920 -0.380444 0.653890 +vn 0.589404 -0.552385 0.589404 +vn 0.502670 -0.703269 0.502670 +vn 0.397168 -0.827326 0.397168 +vn 0.277047 -0.920011 0.277078 +vn 0.361980 -0.920011 0.149937 +vn 0.518906 -0.827326 0.214942 +vn 0.656789 -0.703269 0.272042 +vn 0.770104 -0.552416 0.318949 +vn 0.854396 -0.380444 0.353862 +vn 0.906339 -0.193945 0.375378 +vn 0.923887 -0.000031 0.382641 +vn 0.906339 0.193884 0.375378 +vn 0.854427 0.380383 0.353862 +vn 0.770165 0.552355 0.318949 +vn 0.656850 0.703207 0.272011 +vn 0.518967 0.827296 0.214911 +vn 0.362041 0.920011 0.149907 +vn 0.391858 0.920011 0.000000 +vn 0.561724 0.827296 -0.000031 +vn 0.710288 0.703879 -0.001190 +vn 0.833583 0.552355 -0.000031 +vn 0.924802 0.380383 -0.000031 +vn 0.981017 0.193884 -0.000031 +vn 1.000000 -0.000031 -0.000031 +vn 0.980987 -0.193945 -0.000031 +vn 0.924772 -0.380444 0.000000 +vn 0.833552 -0.552416 0.000000 +vn 0.710898 -0.703269 0.000000 +vn 0.561663 -0.827326 0.000000 +vn 0.391797 -0.920042 0.000000 +vn 0.361980 -0.920042 -0.149937 +vn 0.518906 -0.827326 -0.214942 +vn 0.656789 -0.703269 -0.272073 +vn 0.770104 -0.552416 -0.319010 +vn 0.854366 -0.380444 -0.353923 +vn 0.906308 -0.193945 -0.375439 +vn 0.923856 0.000000 -0.382702 +vn 0.906308 0.193884 -0.375439 +vn 0.854396 0.380383 -0.353923 +vn 0.770135 0.552355 -0.319010 +vn 0.656819 0.703207 -0.272073 +vn 0.520188 0.826777 -0.214057 +vn 0.362041 0.920011 -0.149968 +vn 0.277078 0.920011 -0.277078 +vn 0.397198 0.827296 -0.397198 +vn 0.502701 0.703207 -0.502701 +vn 0.589404 0.552355 -0.589435 +vn 0.653920 0.380413 -0.653951 +vn 0.693655 0.193884 -0.693686 +vn 0.707083 0.000000 -0.707114 +vn 0.693655 -0.193945 -0.693686 +vn 0.653890 -0.380444 -0.653951 +vn 0.589373 -0.552385 -0.589435 +vn 0.502670 -0.703269 -0.502701 +vn 0.397137 -0.827326 -0.397168 +vn 0.277017 -0.920042 -0.277047 +vn 0.149907 -0.920011 -0.362011 +vn 0.214911 -0.827326 -0.518937 +vn 0.272011 -0.703238 -0.656819 +vn 0.318949 -0.552385 -0.770135 +vn 0.353862 -0.380413 -0.854396 +vn 0.375378 -0.193915 -0.906339 +vn 0.382641 0.000000 -0.923887 +vn 0.375378 0.193915 -0.906339 +vn 0.353893 0.380413 -0.854396 +vn 0.318979 0.552355 -0.770135 +vn 0.272042 0.703238 -0.656819 +vn 0.214942 0.827326 -0.518937 +vn 0.149968 0.920011 -0.362011 +vn 0.000000 0.920011 -0.391858 +vn 0.000000 0.827326 -0.561693 +vn 0.000000 0.703238 -0.710929 +vn 0.000000 0.552385 -0.833552 +vn 0.000000 0.380444 -0.924802 +vn 0.000000 0.193915 -0.980987 +vn -0.000031 0.000000 -1.000000 +vn -0.000031 -0.193915 -0.981017 +vn -0.000031 -0.380413 -0.924802 +vn -0.000031 -0.552385 -0.833583 +vn -0.000031 -0.703238 -0.710929 +vn -0.000031 -0.827326 -0.561693 +vn -0.000031 -0.920011 -0.391827 +vn -0.149998 -0.920011 -0.361980 +vn -0.215003 -0.827326 -0.518906 +vn -0.272103 -0.703238 -0.656789 +vn -0.319041 -0.552355 -0.770104 +vn -0.353954 -0.380413 -0.854396 +vn -0.375439 -0.193884 -0.906308 +vn -0.382702 0.000000 -0.923856 +vn -0.375439 0.193945 -0.906308 +vn -0.353923 0.380444 -0.854366 +vn -0.318979 0.552385 -0.770104 +vn -0.272042 0.703238 -0.656789 +vn -0.214942 0.827326 -0.518937 +vn -0.149907 0.920011 -0.362011 +vn -0.277047 0.920011 -0.277078 +vn -0.397168 0.827326 -0.397168 +vn -0.502670 0.703269 -0.502670 +vn -0.589404 0.552385 -0.589404 +vn -0.653920 0.380444 -0.653890 +vn -0.693686 0.193945 -0.693625 +vn -0.707114 0.000031 -0.707053 +vn -0.693716 -0.193884 -0.693625 +vn -0.653981 -0.380383 -0.653890 +vn -0.589465 -0.552355 -0.589404 +vn -0.502731 -0.703207 -0.502670 +vn -0.397229 -0.827296 -0.397137 +vn -0.277108 -0.920011 -0.277047 +vn -0.362041 -0.920011 -0.149907 +vn -0.518967 -0.827296 -0.214911 +vn -0.656850 -0.703207 -0.272011 +vn -0.770165 -0.552355 -0.318949 +vn -0.854427 -0.380383 -0.353862 +vn -0.906339 -0.193884 -0.375378 +vn -0.923887 0.000031 -0.382641 +vn -0.906339 0.193945 -0.375378 +vn -0.854396 0.380444 -0.353862 +vn -0.770104 0.552416 -0.318949 +vn -0.656789 0.703269 -0.272042 +vn -0.518906 0.827326 -0.214942 +vn -0.361980 0.920011 -0.149937 +vn -0.999969 -0.000671 0.001495 +vn 0.148778 -0.920560 -0.361126 +vn 0.693655 -0.193915 -0.693686 +vn 0.770104 -0.552385 -0.319010 +vn 0.518967 0.827296 -0.214972 +vn 0.710959 0.703207 -0.000031 +vn 0.589404 -0.552416 0.589404 +vn 0.000000 -0.920011 0.391858 +vn -0.214942 -0.827296 0.518937 +vn -0.277017 0.920011 0.277047 +vn -0.907010 -0.193182 0.374096 +usemtl matTeam +s 1 +f 554//1 563//2 555//3 +f 550//4 560//5 551//6 +f 557//7 562//8 561//9 +f 556//10 557//7 561//9 +f 546//11 564//12 547//13 +f 546//11 548//14 565//15 +f 546//11 565//15 564//12 +f 547//13 566//16 549//17 +f 547//13 564//12 ... [truncated message content] |
From: <pat...@us...> - 2015-05-16 01:18:02
|
Revision: 394 http://sourceforge.net/p/simspark/svn/394 Author: patmac369 Date: 2015-05-16 01:17:59 +0000 (Sat, 16 May 2015) Log Message: ----------- Fixing bug where the server may hang on certain systems if beam effector noise (BeamNoiseXY and BeamNoiseAngle) are set to 0. This was happening due to trying to sample random values from a uniform distribution in the range (-0,0) which seems OK on certain systems (Ubuntu 12.04) but not others (Ubuntu 14.04). Modified Paths: -------------- trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.cpp trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.h Modified: trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.cpp =================================================================== --- trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.cpp 2015-05-15 18:23:24 UTC (rev 393) +++ trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.cpp 2015-05-16 01:17:59 UTC (rev 394) @@ -37,8 +37,7 @@ BeamEffector::~BeamEffector() { - mXYRng.reset(); - mThetaRng.reset(); + mNoiseRng.reset(); } #ifdef __APPLE_CC__ @@ -57,8 +56,7 @@ (mBody.get() == 0) || (mGameState.get() == 0) || (mAgentState.get() == 0) || - (mXYRng.get() == 0) || - (mThetaRng.get() == 0) + (mNoiseRng.get() == 0) ) { return; @@ -82,10 +80,10 @@ || mGameState->GetPlayMode() == PM_Goal_Right) { Vector3f pos; - pos[0] = beamAction->GetPosX() + (*(mXYRng.get()))(); - pos[1] = beamAction->GetPosY() + (*(mXYRng.get()))(); + pos[0] = beamAction->GetPosX() + mBeamNoiseXY*(*(mNoiseRng.get()))(); + pos[1] = beamAction->GetPosY() + mBeamNoiseXY*(*(mNoiseRng.get()))(); - float angle = beamAction->GetXYAngle() + (*(mThetaRng.get()))(); + float angle = beamAction->GetXYAngle() + mBeamNoiseAngle*(*(mNoiseRng.get()))(); // reject nan or infinite numbers in the beam position if ( @@ -192,10 +190,8 @@ mBeamNoiseAngle = 10.0f; SoccerBase::GetSoccerVar(*this, "BeamNoiseAngle",mBeamNoiseAngle); - UniformRngPtr rng1(new salt::UniformRNG<>(-mBeamNoiseXY,mBeamNoiseXY)); - mXYRng = rng1; - UniformRngPtr rng2(new salt::UniformRNG<>(-mBeamNoiseAngle,mBeamNoiseAngle)); - mThetaRng = rng2; + UniformRngPtr rng1(new salt::UniformRNG<>(-1,1)); + mNoiseRng = rng1; } void @@ -204,7 +200,6 @@ mBody.reset(); mGameState.reset(); mAgentState.reset(); - mXYRng.reset(); - mThetaRng.reset(); + mNoiseRng.reset(); } Modified: trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.h =================================================================== --- trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.h 2015-05-15 18:23:24 UTC (rev 393) +++ trunk/rcssserver3d/plugin/soccer/beameffector/beameffector.h 2015-05-16 01:17:59 UTC (rev 394) @@ -72,12 +72,9 @@ /** the cached agent radius */ float mAgentRadius; - /** random number generator for beam X and Y noise */ - UniformRngPtr mXYRng; + /** random number generator for noise */ + UniformRngPtr mNoiseRng; - /** random number generator for beam angle noise */ - UniformRngPtr mThetaRng; - /** amount of noise added to beam X and Y values */ float mBeamNoiseXY; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2015-05-15 18:23:25
|
Revision: 393 http://sourceforge.net/p/simspark/svn/393 Author: hedayat Date: 2015-05-15 18:23:24 +0000 (Fri, 15 May 2015) Log Message: ----------- RCSSServer3D 0.6.9 release Added Paths: ----------- tags/RCSSSERVER3D_0.6.9_RELEASE/ Index: tags/RCSSSERVER3D_0.6.9_RELEASE =================================================================== --- trunk/rcssserver3d 2015-05-15 18:13:36 UTC (rev 392) +++ tags/RCSSSERVER3D_0.6.9_RELEASE 2015-05-15 18:23:24 UTC (rev 393) Property changes on: tags/RCSSSERVER3D_0.6.9_RELEASE ___________________________________________________________________ Added: svn:ignore ## -0,0 +1,27 ## +.project + +.cproject + +Makefile.in + +rcssserver3d_config.h + +rcssserver3d_config.h.in + +configure + +stamp-h1 + +aclocal.m4 + +autom4te.cache + +config.status + +.cdtconfigure.Build (GNU) + +libtool + +Makefile + +.settings Added: svn:mergeinfo ## -0,0 +1,2 ## +/branches/agentselection/rcssserver3d:195-206 +/branches/treehole/rcssserver3d:175 \ No newline at end of property This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2015-05-15 18:13:37
|
Revision: 392 http://sourceforge.net/p/simspark/svn/392 Author: hedayat Date: 2015-05-15 18:13:36 +0000 (Fri, 15 May 2015) Log Message: ----------- Update version to 0.6.9 Modified Paths: -------------- trunk/rcssserver3d/CMakeLists.txt trunk/rcssserver3d/ChangeLog trunk/rcssserver3d/NEWS Modified: trunk/rcssserver3d/CMakeLists.txt =================================================================== --- trunk/rcssserver3d/CMakeLists.txt 2015-05-10 19:53:15 UTC (rev 391) +++ trunk/rcssserver3d/CMakeLists.txt 2015-05-15 18:13:36 UTC (rev 392) @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 2.6) project(rcssserver3d CXX C) -set(PACKAGE_VERSION "0.6.8.1") +set(PACKAGE_VERSION "0.6.9") ########## check for headerfiles/libraries ########## include(CheckIncludeFile) Modified: trunk/rcssserver3d/ChangeLog =================================================================== --- trunk/rcssserver3d/ChangeLog 2015-05-10 19:53:15 UTC (rev 391) +++ trunk/rcssserver3d/ChangeLog 2015-05-15 18:13:36 UTC (rev 392) @@ -1,3 +1,9 @@ +2015-05-15 Hedayat Vatankhah <hed...@gm...> + + * CMakeLists.txt: + * NEWS: + - updated for version 0.6.9 + 2015-05-11 Hedayat Vatankhah <hed...@gm...> * RELEASE: Modified: trunk/rcssserver3d/NEWS =================================================================== --- trunk/rcssserver3d/NEWS 2015-05-10 19:53:15 UTC (rev 391) +++ trunk/rcssserver3d/NEWS 2015-05-15 18:13:36 UTC (rev 392) @@ -1,3 +1,46 @@ +[0.6.9] +This release comes with a number of bug fixes and also adds some new features +to enhance managing games and also to add more challenges to games, most notably +adding noise to the beam effector. The changes are: + +* Rule Changes: + - Added new rule requiring that the ball must either touch an opponent, or + touch a teammate outside the center circle, before a team taking a + kickoff can score. + - Penalty shootout kickoffs are direct now. + +* New Features: + - Added noise to the beam effector with the amount of noise added controlled + by the 'BeamNoiseXY' (in meters) and 'BeamNoiseAngle' (in degrees) + values in naosoccersim.rb. Noise is added to beam X and Y values from + a uniform distribution within the range [-BeamNoiseXY, BeamNoiseXY] + and to beam angle values from a uniform distribution within the range + [-BeamNoiseAngle, BeamNoiseAngle]. + - Added new training command parser commands for setting the game time and + score. They are the following commands: + (time <time>) + (score (left <score>) (right <score>)) + - Added penalty shootout mode where a goal is awarded to the left team + (penalty kicker) if the right team's player (penalty goalie) leaves the + penalty area. + +* Bug fixes: + - Fixing a bug with free kicks where as soon as the ball was touched, + and the playmode transitioned from freekick to play on, the ball was + still moved back to the location of the freekick preventing the ball from + being directly kicked out of a free kick. Also ensuring that the ball + position for free kicks is updated correctly as this wasn't happening + right after the ball was placed back at the center of the field after + a goal was scored. + - Fixing a bug where a player would be incorrectly called for double + touching the ball on a kickoff if the player first kicked the ball + directly in the opponent's goal from a kickoff, resulting in no goal + being awarded a nd the opposing team being given a kickoff, and then is + the next player to touch the ball in the PlayOn playmode after a dropball + when the opponent doesn't take their kickoff. + - Fixing a bug where rules such as too many players in their own penalty + area was not being enforced. + [0.6.8.1] This is a bug-fix release for 0.6.8, which had a bug in labeling hear messages. It also includes few other changes: a small bug fix, and new hetero robot types This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |