diff -Nru rcssserver3d-0.6.5/ChangeLog rcssserver3d-0.6.6/ChangeLog --- rcssserver3d-0.6.5/ChangeLog 2011-03-26 12:12:49.000000000 +0000 +++ rcssserver3d-0.6.6/ChangeLog 2012-05-22 23:18:54.000000000 +0000 @@ -1,3 +1,222 @@ +2012-05-23 Hedayat Vatankhah + + * NEWS: + * RELEASE: + - updated for 0.6.6 + + * plugin/soccer/soccerruleaspect/soccerruleaspect.cpp: + - do not allow direct goals from kickoff + - do not let the kickoff taker to kick the ball again befor other players + +2012-05-22 Hedayat Vatankhah + + * plugin/soccer/gamestateaspect/gamestateaspect.cpp: + * plugin/soccer/gamestateaspect/gamestateaspect.h: + - added knowledge about a 'paused' state, in which game is not really + running (waiting for the referee to allow the game to continue, e.g. in + goal left/right state or at the beginning of a kick in state) + + * plugin/soccer/soccerruleaspect/soccerruleaspect.h: + - a little cleanup, and fixed comment for mAutoKickOffTimeOrigin + - removed an unused variable mLastValidBallPosition + + * plugin/soccer/soccerruleaspect/soccerruleaspect.cpp: + - update game's paused state + - consider the referee rules always while the game is running (not paused), + and reset all counters otherwise. + +2012-05-21 Hedayat Vatankhah + + * NEWS: + * RELEASE: + - updated for 0.6.6 release + + * data/rsg/agent/nao/naoleg.rsg: + - reduce Nao's foot height (patch by Sander) and modify the position of + ankle accordingly + +2012-05-19 Hedayat Vatankhah + + * plugin/soccer/soccerruleaspect/soccerruleaspect.cpp + (SoccerRuleAspect::CheckBallLeftField): + - fix the position of right corner kick to use mBallRadius rather than + a hard coded value + - use new value for corner kick position for RoboCup 2012, to be between + the goal and field's corner position + + * NEWS: + * RELEASE: + - added information about the new dimensions in this release + + * CMakeLists.txt: + - updated version to 0.6.6 + + * rcssserver3d/naosoccersim.rb: + - increased free kick distance to 2.0. actually it should be 2.75, but + since we are going to have an artificial corner point it should be + probably smaller too. + + * plugin/soccer/rcs3dmonitor/rcs3dmonitor.h: + * plugin/soccer/rcs3dmonitor/rcs3dmonitor.cpp: + * plugin/soccer/sexpmonitor/sexpmonitor.h: + * plugin/soccer/sexpmonitor/sexpmonitor.cpp: + - fixed spelling error in GetMonitorInformation() + +2012-05-17 Hedayat Vatankhah + + * rcssserver3d/naosoccersim.rb: + - use new field dimensions: 20x30 + + * data/rsg/agent/nao/soccer.rsg: + - The radius of center circle (field ring) should be equal to + FreeKickDistance (they are equal in FIFA rules too) +2012-05-16 Hedayat Vatankhah + + * RELEASE: + - initial version for 0.6.6 release + + * plugin/soccer/trainercommandparser/trainercommandparser.cpp + (TrainerCommandParser::OnLink): + - fixed a typo where mGameControl was checked instead of mSimServer to see + if it is valid + + * data/rsg/agent/nao/soccer.rsg: + - use correct penalty width which is equal to PenaltyWidth + GoalWidth + + * rcssserver3d/naosoccersim.rb: + - changed default value of 'WaitBeforeKickOff' to 30, since 5 seconds + is too small for any team to start. + - disabled AutomaticQuit mode by default for consistency with older versions + +2012-04-15 Hedayat Vatankhah + + * plugin/soccer/trainercommandparser/trainercommandparser.cpp + (TrainerCommandParser::ParsePlayerCommand): + - fixed a small bug in parsing move paramter (Thanks to Andreas Seekircher) + +2012-04-10 Hedayat Vatankhah + + * plugin/soccer/soccerruleaspect/soccerruleaspect.cpp + (SoccerRuleAspect::UpdateBeforeKickOff): + - WaitBeforeKickOff is now calculated from when the first agent connects + rather than from the beginning of the before kickoff playmode (when the + simulator is started) + +2012-04-09 Hedayat Vatankhah + + * plugin/soccer/gamestateaspect/gamestateaspect.h (GameStateAspect): + * plugin/soccer/gamestateaspect/gamestateaspect.cpp (GameStateAspect::KickOff): + - Fix KickOff for the second half: give the ball to the other team in all + cases (both when the teams change their sides in the second half and when + they don't). + + * plugin/soccer/soccerruleaspect/soccerruleaspect.h: + * plugin/soccer/soccerruleaspect/soccerruleaspect.cpp (SoccerRuleAspect::SwapTeamSides): + - change teams' sides in the second half if enabled (enabled by default) + + * rcssserver3d/naosoccersim.rb: + - add new variables for the above changes: CoinTossForKickOff and + ChangeSidesInSecondHalf. The former specifies if in the automatic kickoff + mode, the first half kick off is always given to the left team or is + determined randomly. The latter specifies if the teams should change + their sides in the second half. + +2012-04-07 Hedayat Vatankhah + + * plugin/soccer/soccerruleaspect/soccerruleaspect.cpp (SoccerRuleAspect::UpdateGameOver): + - add AutomaticQuit mode to shutdown automatically when the game is over + +2012-02-14 Sander van Dijk + + * rcssserver3d/main.cpp (Spark): + * rcssmonitor3d/main.cpp (Spark): + - add --init-script-prefix option to specify location of spark.rb, + zeitgeist.rb, etc + +2011-06-06 Hedayat Vatankhah + + * plugin/soccer/soccerruleaspect/soccerruleaspect.cpp + (SoccerRuleAspect::AnalyseTouchGroups): + - fixed a horrible mistake of mine which prevented from touch group rules + to be applied at all + +2011-05-14 Hedayat Vatankhah + + * plugin/soccer/soccerruleaspect/soccerruleaspect.cpp + (SoccerRuleAspect::CheckGoal): + - fixed a small bug in goal counting which cause this function to always + count a goal when ball moved out of the field + +2011-05-02 Hedayat Vatankhah + + * CMakeLists.txt: + - strip files when creating a binary package + +2011-05-01 Hedayat Vatankhah + + * windows/uninstall_extra.nsi: + * windows/install_extra.nsi: + - install an rcsoccersim3d script under Windows + - fixed path commands to not include = sign + + * cmake/FindODE.cmake: + - don't overwrite config options obtained from ode-config if available + + * rcssagent3d/CMakeLists.txt: + - use lowercase ws2_32 to be compatible with mingw32 + + * CMakeLists.txt: + - include AdditionalSearchPaths.cmake + - added -shared flag for mingw when linking modules + + * cmake/AdditionalSearchPaths.cmake: + - sets up additional search paths under Windows to find dependencies in + common directories and the ones documented on the wiki + + * cmake/FindFreetype.cmake: + - removed; and additional search paths have been added to + AdditionalSearchPaths.cmake file + +2011-04-29 Hedayat Vatankhah + + * CMakeLists.txt: + - use static boost libraries under Windows + + * windows/install_extra.nsi: + - adopt the script for the latest version of CMake and NSIS + + * rcssserver3d/CMakeLists.txt: + - don't install Linux only files in Windows + + * cmake/FindBoost.cmake: + - removed in favor of CMake's own version + +2011-04-21 Hedayat Vatankhah + + * NEWS: + * RELEASE: + - updated for 0.6.5 to reflect removing an opponent from a touch group when + there are more opponents in the group than teammates + + * plugin/soccer/soccerruleaspect/soccerruleaspect.h: + * plugin/soccer/soccerruleaspect/soccerruleaspect.cpp + (SoccerRuleAspect::CheckGoal): + - if goal recorder's cannot detect any goals, geometrically check to + make sure that no goal is actually happened. Thanks to Luis for starting + the effort and Mahdi for the initial code for calculating where the ball + crosses the goal geometrically. + (SoccerRuleAspect::AnalyseTouchGroups): + - reposition a player from a team with more players in a touch group. Thanks + to Nexus3D (Mehdi?) for the initial patch. It intended to reposition the + player who joined last even from the opponent team, but we don't have + this info now so remove an unspecified player from the opponent if the + last player is not going to be removed. + +2011-03-28 Hedayat Vatankhah + + * rcssmonitor3d/rcssmonitor3d.rb: + - only log error messages to output (a small cleanup for 0.6.5 release) + 2011-03-26 Hedayat Vatankhah * NEWS: diff -Nru rcssserver3d-0.6.5/cmake/AdditionalSearchPaths.cmake rcssserver3d-0.6.6/cmake/AdditionalSearchPaths.cmake --- rcssserver3d-0.6.5/cmake/AdditionalSearchPaths.cmake 1970-01-01 00:00:00.000000000 +0000 +++ rcssserver3d-0.6.6/cmake/AdditionalSearchPaths.cmake 2012-05-22 23:18:54.000000000 +0000 @@ -0,0 +1,29 @@ +if (WIN32) + set(ENV{SDLDIR} $ENV{SDLDIR} C:/library/SDL/ + "C:/Program Files/SDL/" + "C:/Program Files (x86)/SDL/" + C:/SDL/ + ) + set(CMAKE_PROGRAM_PATH ${CMAKE_PROGRAM_PATH} + C:/Library/ + C:/Library/ruby/bin + ) + set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} + C:/Library/include + C:/Library/boost + C:/library/devil/include + "C:/Program Files/GnuWin32/include" + "C:/Program Files (x86)/GnuWin32/include" + C:/library/GnuWin32/include + C:/GnuWin32/include + ) + set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} + C:/Library/lib + C:/Library/boost + C:/library/devil + "C:/Program Files/GnuWin32" + "C:/Program Files (x86)/GnuWin32" + C:/library/GnuWin32/ + C:/GnuWin32/ + ) +endif (WIN32) diff -Nru rcssserver3d-0.6.5/cmake/FindBoost.cmake rcssserver3d-0.6.6/cmake/FindBoost.cmake --- rcssserver3d-0.6.5/cmake/FindBoost.cmake 2011-03-26 12:12:49.000000000 +0000 +++ rcssserver3d-0.6.6/cmake/FindBoost.cmake 1970-01-01 00:00:00.000000000 +0000 @@ -1,938 +0,0 @@ -# - Try to find Boost include dirs and libraries -# Usage of this module as follows: -# -# NOTE: Take note of the Boost_ADDITIONAL_VERSIONS variable below. -# Due to Boost naming conventions and limitations in CMake this find -# module is NOT future safe with respect to Boost version numbers, -# and may break. -# -# == Using Header-Only libraries from within Boost: == -# -# find_package( Boost 1.36.0 ) -# if(Boost_FOUND) -# include_directories(${Boost_INCLUDE_DIRS}) -# add_executable(foo foo.cc) -# endif() -# -# -# == Using actual libraries from within Boost: == -# -# set(Boost_USE_STATIC_LIBS ON) -# set(Boost_USE_MULTITHREADED ON) -# find_package( Boost 1.36.0 COMPONENTS date_time filesystem system ... ) -# -# if(Boost_FOUND) -# include_directories(${Boost_INCLUDE_DIRS}) -# add_executable(foo foo.cc) -# target_link_libraries(foo ${Boost_LIBRARIES}) -# endif() -# -# -# The components list needs to contain actual names of boost libraries only, -# such as "date_time" for "libboost_date_time". If you're using parts of -# Boost that contain header files only (e.g. foreach) you do not need to -# specify COMPONENTS. -# -# You should provide a minimum version number that should be used. If you provide this -# version number and specify the REQUIRED attribute, this module will fail if it -# can't find the specified or a later version. If you specify a version number this is -# automatically put into the considered list of version numbers and thus doesn't need -# to be specified in the Boost_ADDITIONAL_VERSIONS variable (see below). -# -# NOTE for Visual Studio Users: -# Automatic linking is used on MSVC & Borland compilers by default when -# #including things in Boost. It's important to note that setting -# Boost_USE_STATIC_LIBS to OFF is NOT enough to get you dynamic linking, -# should you need this feature. Automatic linking typically uses static -# libraries with a few exceptions (Boost.Python is one). -# -# Please see the section below near Boost_LIB_DIAGNOSTIC_DEFINITIONS for -# more details. Adding a TARGET_LINK_LIBRARIES() as shown in the example -# above appears to cause VS to link dynamically if Boost_USE_STATIC_LIBS -# gets set to OFF. It is suggested you avoid automatic linking since it -# will make your application less portable. -# -# =========== The mess that is Boost_ADDITIONAL_VERSIONS (sorry?) ============ -# -# OK, so the Boost_ADDITIONAL_VERSIONS variable can be used to specify a list of -# boost version numbers that should be taken into account when searching -# for Boost. Unfortunately boost puts the version number into the -# actual filename for the libraries, so this variable will certainly be needed -# in the future when new Boost versions are released. -# -# Currently this module searches for the following version numbers: -# 1.33, 1.33.0, 1.33.1, 1.34, 1.34.0, 1.34.1, 1.35, 1.35.0, 1.35.1, -# 1.36, 1.36.0, 1.36.1, 1.37, 1.37.0, 1.38, 1.38.0, 1.39, 1.39.0, -# 1.40, 1.40.0, 1.41, 1.41.0 -# -# NOTE: If you add a new major 1.x version in Boost_ADDITIONAL_VERSIONS you should -# add both 1.x and 1.x.0 as shown above. Official Boost include directories -# omit the 3rd version number from include paths if it is 0 although not all -# binary Boost releases do so. -# -# SET(Boost_ADDITIONAL_VERSIONS "1.78" "1.78.0" "1.79" "1.79.0") -# -# ===================================== ============= ======================== -# -# Variables used by this module, they can change the default behaviour and -# need to be set before calling find_package: -# -# Boost_USE_MULTITHREADED Can be set to OFF to use the non-multithreaded -# boost libraries. If not specified, defaults -# to ON. -# -# Boost_USE_STATIC_LIBS Can be set to ON to force the use of the static -# boost libraries. Defaults to OFF. -# -# Other Variables used by this module which you may want to set. -# -# Boost_ADDITIONAL_VERSIONS A list of version numbers to use for searching -# the boost include directory. Please see -# the documentation above regarding this -# annoying, but necessary variable :( -# -# Boost_DEBUG Set this to TRUE to enable debugging output -# of FindBoost.cmake if you are having problems. -# Please enable this before filing any bug -# reports. -# -# Boost_DETAILED_FAILURE_MSG FindBoost doesn't output detailed information -# about why it failed or how to fix the problem -# unless this is set to TRUE or the REQUIRED -# keyword is specified in find_package(). -# [Since CMake 2.8.0] -# -# Boost_COMPILER Set this to the compiler suffix used by Boost -# (e.g. "-gcc43") if FindBoost has problems finding -# the proper Boost installation -# -# These last three variables are available also as environment variables: -# -# BOOST_ROOT or BOOSTROOT The preferred installation prefix for searching for -# Boost. Set this if the module has problems finding -# the proper Boost installation. -# -# BOOST_INCLUDEDIR Set this to the include directory of Boost, if the -# module has problems finding the proper Boost installation -# -# BOOST_LIBRARYDIR Set this to the lib directory of Boost, if the -# module has problems finding the proper Boost installation -# -# Variables defined by this module: -# -# Boost_FOUND System has Boost, this means the include dir was -# found, as well as all the libraries specified in -# the COMPONENTS list. -# -# Boost_INCLUDE_DIRS Boost include directories: not cached -# -# Boost_INCLUDE_DIR This is almost the same as above, but this one is -# cached and may be modified by advanced users -# -# Boost_LIBRARIES Link to these to use the Boost libraries that you -# specified: not cached -# -# Boost_LIBRARY_DIRS The path to where the Boost library files are. -# -# Boost_VERSION The version number of the boost libraries that -# have been found, same as in version.hpp from Boost -# -# Boost_LIB_VERSION The version number in filename form as -# it's appended to the library filenames -# -# Boost_MAJOR_VERSION major version number of boost -# Boost_MINOR_VERSION minor version number of boost -# Boost_SUBMINOR_VERSION subminor version number of boost -# -# Boost_LIB_DIAGNOSTIC_DEFINITIONS [WIN32 Only] You can call -# add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS}) -# to have diagnostic information about Boost's -# automatic linking outputted during compilation time. -# -# For each component you specify in find_package(), the following (UPPER-CASE) -# variables are set. You can use these variables if you would like to pick and -# choose components for your targets instead of just using Boost_LIBRARIES. -# -# Boost_${COMPONENT}_FOUND True IF the Boost library "component" was found. -# -# Boost_${COMPONENT}_LIBRARY Contains the libraries for the specified Boost -# "component" (includes debug and optimized keywords -# when needed). - -#============================================================================= -# Copyright 2006-2009 Kitware, Inc. -# Copyright 2006-2008 Andreas Schneider -# Copyright 2007 Wengo -# Copyright 2007 Mike Jackson -# Copyright 2008 Andreas Pakulat -# Copyright 2008-2009 Philip Lowman -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distributed this file outside of CMake, substitute the full -# License text for the above reference.) - -#------------------------------------------------------------------------------- -# FindBoost functions & macros -# -############################################ -# -# Check the existence of the libraries. -# -############################################ -# This macro was taken directly from the FindQt4.cmake file that is included -# with the CMake distribution. This is NOT my work. All work was done by the -# original authors of the FindQt4.cmake file. Only minor modifications were -# made to remove references to Qt and make this file more generally applicable -# And ELSE/ENDIF pairs were removed for readability. -######################################################################### - -MACRO (_Boost_ADJUST_LIB_VARS basename) - IF (Boost_INCLUDE_DIR ) - IF (Boost_${basename}_LIBRARY_DEBUG AND Boost_${basename}_LIBRARY_RELEASE) - # if the generator supports configuration types then set - # optimized and debug libraries, or if the CMAKE_BUILD_TYPE has a value - IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) - SET(Boost_${basename}_LIBRARY optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG}) - ELSE() - # if there are no configuration types and CMAKE_BUILD_TYPE has no value - # then just use the release libraries - SET(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE} ) - ENDIF() - # FIXME: This probably should be set for both cases - SET(Boost_${basename}_LIBRARIES optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG}) - ENDIF() - - # if only the release version was found, set the debug variable also to the release version - IF (Boost_${basename}_LIBRARY_RELEASE AND NOT Boost_${basename}_LIBRARY_DEBUG) - SET(Boost_${basename}_LIBRARY_DEBUG ${Boost_${basename}_LIBRARY_RELEASE}) - SET(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE}) - SET(Boost_${basename}_LIBRARIES ${Boost_${basename}_LIBRARY_RELEASE}) - ENDIF() - - # if only the debug version was found, set the release variable also to the debug version - IF (Boost_${basename}_LIBRARY_DEBUG AND NOT Boost_${basename}_LIBRARY_RELEASE) - SET(Boost_${basename}_LIBRARY_RELEASE ${Boost_${basename}_LIBRARY_DEBUG}) - SET(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_DEBUG}) - SET(Boost_${basename}_LIBRARIES ${Boost_${basename}_LIBRARY_DEBUG}) - ENDIF() - - IF (Boost_${basename}_LIBRARY) - set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY} CACHE FILEPATH "The Boost ${basename} library") - - # Remove superfluous "debug" / "optimized" keywords from - # Boost_LIBRARY_DIRS - FOREACH(_boost_my_lib ${Boost_${basename}_LIBRARY}) - GET_FILENAME_COMPONENT(_boost_my_lib_path "${_boost_my_lib}" PATH) - LIST(APPEND Boost_LIBRARY_DIRS ${_boost_my_lib_path}) - ENDFOREACH() - LIST(REMOVE_DUPLICATES Boost_LIBRARY_DIRS) - - set(Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIRS} CACHE FILEPATH "Boost library directory") - SET(Boost_${basename}_FOUND ON CACHE INTERNAL "Whether the Boost ${basename} library found") - ENDIF(Boost_${basename}_LIBRARY) - - ENDIF (Boost_INCLUDE_DIR ) - # Make variables changeble to the advanced user - MARK_AS_ADVANCED( - Boost_${basename}_LIBRARY - Boost_${basename}_LIBRARY_RELEASE - Boost_${basename}_LIBRARY_DEBUG - ) -ENDMACRO (_Boost_ADJUST_LIB_VARS) - -#------------------------------------------------------------------------------- - -# -# Runs compiler with "-dumpversion" and parses major/minor -# version with a regex. -# -FUNCTION(_Boost_COMPILER_DUMPVERSION _OUTPUT_VERSION) - - EXEC_PROGRAM(${CMAKE_CXX_COMPILER} - ARGS ${CMAKE_CXX_COMPILER_ARG1} -dumpversion - OUTPUT_VARIABLE _boost_COMPILER_VERSION - ) - STRING(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1\\2" - _boost_COMPILER_VERSION ${_boost_COMPILER_VERSION}) - - SET(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION} PARENT_SCOPE) -ENDFUNCTION() - -# -# A convenience function for marking desired components -# as found or not -# -function(_Boost_MARK_COMPONENTS_FOUND _yes_or_no) - foreach(COMPONENT ${Boost_FIND_COMPONENTS}) - string(TOUPPER ${COMPONENT} UPPERCOMPONENT) - set(Boost_${UPPERCOMPONENT}_FOUND ${_yes_or_no} CACHE INTERNAL "Whether the Boost ${COMPONENT} library found" FORCE) - endforeach() -endfunction() - -# -# End functions/macros -# -#------------------------------------------------------------------------------- - - - - -IF(NOT DEFINED Boost_USE_MULTITHREADED) - SET(Boost_USE_MULTITHREADED TRUE) -ENDIF() - -if(Boost_FIND_VERSION_EXACT) - # The version may appear in a directory with or without the patch - # level, even when the patch level is non-zero. - set(_boost_TEST_VERSIONS - "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}.${Boost_FIND_VERSION_PATCH}" - "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}") -else(Boost_FIND_VERSION_EXACT) - # The user has not requested an exact version. Among known - # versions, find those that are acceptable to the user request. - set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS} - "1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37" - "1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0" - "1.34" "1.33.1" "1.33.0" "1.33") - set(_boost_TEST_VERSIONS) - if(Boost_FIND_VERSION) - set(_Boost_FIND_VERSION_SHORT "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}") - # Select acceptable versions. - foreach(version ${_Boost_KNOWN_VERSIONS}) - if(NOT "${version}" VERSION_LESS "${Boost_FIND_VERSION}") - # This version is high enough. - list(APPEND _boost_TEST_VERSIONS "${version}") - elseif("${version}.99" VERSION_EQUAL "${_Boost_FIND_VERSION_SHORT}.99") - # This version is a short-form for the requested version with - # the patch level dropped. - list(APPEND _boost_TEST_VERSIONS "${version}") - endif() - endforeach(version) - else(Boost_FIND_VERSION) - # Any version is acceptable. - set(_boost_TEST_VERSIONS "${_Boost_KNOWN_VERSIONS}") - endif(Boost_FIND_VERSION) -endif(Boost_FIND_VERSION_EXACT) - -# The reason that we failed to find Boost. This will be set to a -# user-friendly message when we fail to find some necessary piece of -# Boost. -set(Boost_ERROR_REASON) - -SET( _boost_IN_CACHE TRUE) -IF(Boost_INCLUDE_DIR) - - # On versions < 1.35, remove the System library from the considered list - # since it wasn't added until 1.35. - if(Boost_VERSION AND Boost_FIND_COMPONENTS) - math(EXPR _boost_maj "${Boost_VERSION} / 100000") - math(EXPR _boost_min "${Boost_VERSION} / 100 % 1000") - if(${_boost_maj}.${_boost_min} VERSION_LESS 1.35) - list(REMOVE_ITEM Boost_FIND_COMPONENTS system) - endif() - endif() - - FOREACH(COMPONENT ${Boost_FIND_COMPONENTS}) - STRING(TOUPPER ${COMPONENT} COMPONENT) - IF(NOT Boost_${COMPONENT}_FOUND) - SET( _boost_IN_CACHE FALSE) - ENDIF(NOT Boost_${COMPONENT}_FOUND) - ENDFOREACH(COMPONENT) -ELSE(Boost_INCLUDE_DIR) - SET( _boost_IN_CACHE FALSE) -ENDIF(Boost_INCLUDE_DIR) - -IF (_boost_IN_CACHE) - # in cache already - SET(Boost_FOUND TRUE) - FOREACH(COMPONENT ${Boost_FIND_COMPONENTS}) - STRING(TOUPPER ${COMPONENT} COMPONENT) - _Boost_ADJUST_LIB_VARS( ${COMPONENT} ) - SET(Boost_LIBRARIES ${Boost_LIBRARIES} ${Boost_${COMPONENT}_LIBRARY}) - ENDFOREACH(COMPONENT) - SET(Boost_INCLUDE_DIRS ${Boost_INCLUDE_DIR}) - IF(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0") - MATH(EXPR Boost_MAJOR_VERSION "${Boost_VERSION} / 100000") - MATH(EXPR Boost_MINOR_VERSION "${Boost_VERSION} / 100 % 1000") - MATH(EXPR Boost_SUBMINOR_VERSION "${Boost_VERSION} % 100") - ENDIF(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0") - if(Boost_DEBUG) - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "boost ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION} " - "is already in the cache. For debugging messages, please clear the cache.") - endif() -ELSE (_boost_IN_CACHE) - # Need to search for boost - if(Boost_DEBUG) - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "Boost not in cache") - # Output some of their choices - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "_boost_TEST_VERSIONS = ${_boost_TEST_VERSIONS}") - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "Boost_USE_MULTITHREADED = ${Boost_USE_MULTITHREADED}") - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "Boost_USE_STATIC_LIBS = ${Boost_USE_STATIC_LIBS}") - endif() - - IF(WIN32) - # In windows, automatic linking is performed, so you do not have - # to specify the libraries. If you are linking to a dynamic - # runtime, then you can choose to link to either a static or a - # dynamic Boost library, the default is to do a static link. You - # can alter this for a specific library "whatever" by defining - # BOOST_WHATEVER_DYN_LINK to force Boost library "whatever" to be - # linked dynamically. Alternatively you can force all Boost - # libraries to dynamic link by defining BOOST_ALL_DYN_LINK. - - # This feature can be disabled for Boost library "whatever" by - # defining BOOST_WHATEVER_NO_LIB, or for all of Boost by defining - # BOOST_ALL_NO_LIB. - - # If you want to observe which libraries are being linked against - # then defining BOOST_LIB_DIAGNOSTIC will cause the auto-linking - # code to emit a #pragma message each time a library is selected - # for linking. - SET(Boost_LIB_DIAGNOSTIC_DEFINITIONS - "-DBOOST_LIB_DIAGNOSTIC" CACHE STRING "Boost diagnostic define") - ENDIF(WIN32) - - SET(_boost_INCLUDE_SEARCH_DIRS - C:/boost/include - C:/boost - C:/library/boost - "C:/Program Files/boost" - "C:/Program Files (x86)/boost" - "$ENV{ProgramFiles}/boost/include" - "$ENV{ProgramFiles}/boost" - /sw/local/include - ) - - # If BOOST_ROOT was defined in the environment, use it. - if (NOT BOOST_ROOT AND NOT $ENV{BOOST_ROOT} STREQUAL "") - set(BOOST_ROOT $ENV{BOOST_ROOT}) - endif(NOT BOOST_ROOT AND NOT $ENV{BOOST_ROOT} STREQUAL "") - - # If BOOSTROOT was defined in the environment, use it. - if (NOT BOOST_ROOT AND NOT $ENV{BOOSTROOT} STREQUAL "") - set(BOOST_ROOT $ENV{BOOSTROOT}) - endif(NOT BOOST_ROOT AND NOT $ENV{BOOSTROOT} STREQUAL "") - - # If BOOST_INCLUDEDIR was defined in the environment, use it. - IF( NOT $ENV{BOOST_INCLUDEDIR} STREQUAL "" ) - set(BOOST_INCLUDEDIR $ENV{BOOST_INCLUDEDIR}) - ENDIF( NOT $ENV{BOOST_INCLUDEDIR} STREQUAL "" ) - - # If BOOST_LIBRARYDIR was defined in the environment, use it. - IF( NOT $ENV{BOOST_LIBRARYDIR} STREQUAL "" ) - set(BOOST_LIBRARYDIR $ENV{BOOST_LIBRARYDIR}) - ENDIF( NOT $ENV{BOOST_LIBRARYDIR} STREQUAL "" ) - - IF( BOOST_ROOT ) - file(TO_CMAKE_PATH ${BOOST_ROOT} BOOST_ROOT) - ENDIF( BOOST_ROOT ) - - if(Boost_DEBUG) - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "Declared as CMake or Environmental Variables:") - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - " BOOST_ROOT = ${BOOST_ROOT}") - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - " BOOST_INCLUDEDIR = ${BOOST_INCLUDEDIR}") - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - " BOOST_LIBRARYDIR = ${BOOST_LIBRARYDIR}") - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "_boost_TEST_VERSIONS = ${_boost_TEST_VERSIONS}") - endif() - - IF( BOOST_ROOT ) - SET(_boost_INCLUDE_SEARCH_DIRS - ${BOOST_ROOT}/include - ${BOOST_ROOT} - ${_boost_INCLUDE_SEARCH_DIRS}) - ENDIF( BOOST_ROOT ) - - IF( BOOST_INCLUDEDIR ) - file(TO_CMAKE_PATH ${BOOST_INCLUDEDIR} BOOST_INCLUDEDIR) - SET(_boost_INCLUDE_SEARCH_DIRS - ${BOOST_INCLUDEDIR} ${_boost_INCLUDE_SEARCH_DIRS}) - ENDIF( BOOST_INCLUDEDIR ) - - # ------------------------------------------------------------------------ - # Search for Boost include DIR - # ------------------------------------------------------------------------ - # Try to find Boost by stepping backwards through the Boost versions - # we know about. - IF( NOT Boost_INCLUDE_DIR ) - # Build a list of path suffixes for each version. - SET(_boost_PATH_SUFFIXES) - FOREACH(_boost_VER ${_boost_TEST_VERSIONS}) - # Add in a path suffix, based on the required version, ideally - # we could read this from version.hpp, but for that to work we'd - # need to know the include dir already - set(_boost_BOOSTIFIED_VERSION) - - # Transform 1.35 => 1_35 and 1.36.0 => 1_36_0 - IF(_boost_VER MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+") - STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1_\\2_\\3" - _boost_BOOSTIFIED_VERSION ${_boost_VER}) - ELSEIF(_boost_VER MATCHES "[0-9]+\\.[0-9]+") - STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)" "\\1_\\2" - _boost_BOOSTIFIED_VERSION ${_boost_VER}) - ENDIF() - - list(APPEND _boost_PATH_SUFFIXES "boost-${_boost_BOOSTIFIED_VERSION}") - if(WIN32) - # For BoostPro's underscores (and others?) - list(APPEND _boost_PATH_SUFFIXES "boost_${_boost_BOOSTIFIED_VERSION}") - endif() - - ENDFOREACH(_boost_VER) - - if(Boost_DEBUG) - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "Include debugging info:") - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - " _boost_INCLUDE_SEARCH_DIRS = ${_boost_INCLUDE_SEARCH_DIRS}") - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - " _boost_PATH_SUFFIXES = ${_boost_PATH_SUFFIXES}") - endif() - - # Look for a standard boost header file. - FIND_PATH(Boost_INCLUDE_DIR - NAMES boost/config.hpp - HINTS ${_boost_INCLUDE_SEARCH_DIRS} - PATH_SUFFIXES ${_boost_PATH_SUFFIXES} - ) - ENDIF( NOT Boost_INCLUDE_DIR ) - - # ------------------------------------------------------------------------ - # Extract version information from version.hpp - # ------------------------------------------------------------------------ - - IF(Boost_INCLUDE_DIR) - # Extract Boost_VERSION and Boost_LIB_VERSION from version.hpp - # Read the whole file: - # - SET(BOOST_VERSION 0) - SET(BOOST_LIB_VERSION "") - FILE(READ "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS) - if(Boost_DEBUG) - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "location of version.hpp: ${Boost_INCLUDE_DIR}/boost/version.hpp") - endif() - - STRING(REGEX REPLACE ".*#define BOOST_VERSION ([0-9]+).*" "\\1" Boost_VERSION "${_boost_VERSION_HPP_CONTENTS}") - STRING(REGEX REPLACE ".*#define BOOST_LIB_VERSION \"([0-9_]+)\".*" "\\1" Boost_LIB_VERSION "${_boost_VERSION_HPP_CONTENTS}") - - SET(Boost_LIB_VERSION ${Boost_LIB_VERSION} CACHE INTERNAL "The library version string for boost libraries") - SET(Boost_VERSION ${Boost_VERSION} CACHE INTERNAL "The version number for boost libraries") - - IF(NOT "${Boost_VERSION}" STREQUAL "0") - MATH(EXPR Boost_MAJOR_VERSION "${Boost_VERSION} / 100000") - MATH(EXPR Boost_MINOR_VERSION "${Boost_VERSION} / 100 % 1000") - MATH(EXPR Boost_SUBMINOR_VERSION "${Boost_VERSION} % 100") - - set(Boost_ERROR_REASON - "${Boost_ERROR_REASON}Boost version: ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}\nBoost include path: ${Boost_INCLUDE_DIR}") - ENDIF(NOT "${Boost_VERSION}" STREQUAL "0") - if(Boost_DEBUG) - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "version.hpp reveals boost " - "${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}") - endif() - ELSE(Boost_INCLUDE_DIR) - set(Boost_ERROR_REASON - "${Boost_ERROR_REASON}Unable to find the Boost header files. Please set BOOST_ROOT to the root directory containing Boost or BOOST_INCLUDEDIR to the directory containing Boost's headers.") - ENDIF(Boost_INCLUDE_DIR) - - # ------------------------------------------------------------------------ - # Suffix initialization and compiler suffix detection. - # ------------------------------------------------------------------------ - - # Setting some more suffixes for the library - SET (Boost_LIB_PREFIX "") - if ( WIN32 AND Boost_USE_STATIC_LIBS ) - SET (Boost_LIB_PREFIX "lib") - endif() - - if (Boost_COMPILER) - set(_boost_COMPILER ${Boost_COMPILER}) - if(Boost_DEBUG) - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "using user-specified Boost_COMPILER = ${_boost_COMPILER}") - endif() - else(Boost_COMPILER) - # Attempt to guess the compiler suffix - # NOTE: this is not perfect yet, if you experience any issues - # please report them and use the Boost_COMPILER variable - # to work around the problems. - if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" - OR "${CMAKE_CXX_COMPILER}" MATCHES "icl" - OR "${CMAKE_CXX_COMPILER}" MATCHES "icpc") - if(WIN32) - set (_boost_COMPILER "-iw") - else() - set (_boost_COMPILER "-il") - endif() - elseif (MSVC90) - SET (_boost_COMPILER "-vc90") - elseif (MSVC10) - SET (_boost_COMPILER "-vc100") - elseif (MSVC80) - SET (_boost_COMPILER "-vc80") - elseif (MSVC71) - SET (_boost_COMPILER "-vc71") - elseif (MSVC70) # Good luck! - SET (_boost_COMPILER "-vc7") # yes, this is correct - elseif (MSVC60) # Good luck! - SET (_boost_COMPILER "-vc6") # yes, this is correct - elseif (BORLAND) - SET (_boost_COMPILER "-bcb") - elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "SunPro") - set(_boost_COMPILER "-sw") - elseif (MINGW) - if(${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION} VERSION_LESS 1.34) - SET(_boost_COMPILER "-mgw") # no GCC version encoding prior to 1.34 - else() - _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION) - SET (_boost_COMPILER "-mgw${_boost_COMPILER_VERSION}") - endif() - elseif (UNIX) - if (CMAKE_COMPILER_IS_GNUCXX) - if(${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION} VERSION_LESS 1.34) - SET(_boost_COMPILER "-gcc") # no GCC version encoding prior to 1.34 - else() - _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION) - # Determine which version of GCC we have. - IF(APPLE) - IF(Boost_MINOR_VERSION) - IF(${Boost_MINOR_VERSION} GREATER 35) - # In Boost 1.36.0 and newer, the mangled compiler name used - # on Mac OS X/Darwin is "xgcc". - SET(_boost_COMPILER "-xgcc${_boost_COMPILER_VERSION}") - ELSE(${Boost_MINOR_VERSION} GREATER 35) - # In Boost <= 1.35.0, there is no mangled compiler name for - # the Mac OS X/Darwin version of GCC. - SET(_boost_COMPILER "") - ENDIF(${Boost_MINOR_VERSION} GREATER 35) - ELSE(Boost_MINOR_VERSION) - # We don't know the Boost version, so assume it's - # pre-1.36.0. - SET(_boost_COMPILER "") - ENDIF(Boost_MINOR_VERSION) - ELSE() - SET (_boost_COMPILER "-gcc${_boost_COMPILER_VERSION}") - ENDIF() - endif() - endif (CMAKE_COMPILER_IS_GNUCXX) - endif() - if(Boost_DEBUG) - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "guessed _boost_COMPILER = ${_boost_COMPILER}") - endif() - endif(Boost_COMPILER) - - SET (_boost_MULTITHREADED "-mt") - if( NOT Boost_USE_MULTITHREADED ) - set (_boost_MULTITHREADED "") - endif() - if(Boost_DEBUG) - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "_boost_MULTITHREADED = ${_boost_MULTITHREADED}") - endif() - - SET( _boost_STATIC_TAG "") - set( _boost_ABI_TAG "") - IF (WIN32) - IF(MSVC OR "${CMAKE_CXX_COMPILER}" MATCHES "icl" - OR "${CMAKE_CXX_COMPILER}" MATCHES "icpc") - SET (_boost_ABI_TAG "g") - ENDIF() - IF( Boost_USE_STATIC_LIBS ) - SET( _boost_STATIC_TAG "-s") - ENDIF( Boost_USE_STATIC_LIBS ) - ENDIF(WIN32) - SET (_boost_ABI_TAG "${_boost_ABI_TAG}d") - if(Boost_DEBUG) - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "_boost_STATIC_TAG = ${_boost_STATIC_TAG}") - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "_boost_ABI_TAG = ${_boost_ABI_TAG}") - endif() - - # ------------------------------------------------------------------------ - # Begin finding boost libraries - # ------------------------------------------------------------------------ - - SET(_boost_LIBRARIES_SEARCH_DIRS - ${Boost_INCLUDE_DIR}/lib - ${Boost_INCLUDE_DIR}/../lib - C:/boost/lib - C:/boost - "$ENV{ProgramFiles}/boost/boost_${Boost_MAJOR_VERSION}_${Boost_MINOR_VERSION}_${Boost_SUBMINOR_VERSION}/lib" - "$ENV{ProgramFiles}/boost/boost_${Boost_MAJOR_VERSION}_${Boost_MINOR_VERSION}/lib" - "$ENV{ProgramFiles}/boost/lib" - C:/library/boost/stage/lib - "C:/Program Files/boost/stage/lib" - "C:/Program Files (x86)/boost/stage/lib" - "$ENV{ProgramFiles}/boost" - /sw/local/lib - ) - IF( BOOST_ROOT ) - SET(_boost_LIBRARIES_SEARCH_DIRS - ${BOOST_ROOT}/lib - ${BOOST_ROOT}/stage/lib - ${_boost_LIBRARIES_SEARCH_DIRS}) - ENDIF( BOOST_ROOT ) - - IF( BOOST_LIBRARYDIR ) - file(TO_CMAKE_PATH ${BOOST_LIBRARYDIR} BOOST_LIBRARYDIR) - SET(_boost_LIBRARIES_SEARCH_DIRS - ${BOOST_LIBRARYDIR} ${_boost_LIBRARIES_SEARCH_DIRS}) - ENDIF( BOOST_LIBRARYDIR ) - - if(Boost_DEBUG) - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " - "_boost_LIBRARIES_SEARCH_DIRS = ${_boost_LIBRARIES_SEARCH_DIRS}") - endif() - - FOREACH(COMPONENT ${Boost_FIND_COMPONENTS}) - STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT) - SET( Boost_${UPPERCOMPONENT}_LIBRARY "Boost_${UPPERCOMPONENT}_LIBRARY-NOTFOUND" ) - SET( Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE "Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE-NOTFOUND" ) - SET( Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG "Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG-NOTFOUND") - - # Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES - IF( Boost_USE_STATIC_LIBS ) - SET( _boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) - IF(WIN32) - SET(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) - ELSE(WIN32) - SET(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) - ENDIF(WIN32) - ENDIF( Boost_USE_STATIC_LIBS ) - - FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE - NAMES ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_STATIC_TAG}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG} - ${Boost_LIB_PREFIX}boost_${COMPONENT} - HINTS ${_boost_LIBRARIES_SEARCH_DIRS} - ) - - FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG - NAMES ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}-${_boost_ABI_TAG}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_STATIC_TAG}${_boost_ABI_TAG}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}-${_boost_ABI_TAG}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG}${_boost_ABI_TAG}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}-${_boost_ABI_TAG} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG}${_boost_ABI_TAG} - ${Boost_LIB_PREFIX}boost_${COMPONENT}-${_boost_ABI_TAG} - HINTS ${_boost_LIBRARIES_SEARCH_DIRS} - ) - - _Boost_ADJUST_LIB_VARS(${UPPERCOMPONENT}) - IF( Boost_USE_STATIC_LIBS ) - SET(CMAKE_FIND_LIBRARY_SUFFIXES ${_boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) - ENDIF( Boost_USE_STATIC_LIBS ) - ENDFOREACH(COMPONENT) - # ------------------------------------------------------------------------ - # End finding boost libraries - # ------------------------------------------------------------------------ - - SET(Boost_INCLUDE_DIRS - ${Boost_INCLUDE_DIR} - ) - - SET(Boost_FOUND FALSE) - IF(Boost_INCLUDE_DIR) - SET( Boost_FOUND TRUE ) - - # Check the version of Boost against the requested version. - if (Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR) - message(SEND_ERROR "When requesting a specific version of Boost, you must provide at least the major and minor version numbers, e.g., 1.34") - endif (Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR) - if(Boost_MAJOR_VERSION LESS "${Boost_FIND_VERSION_MAJOR}" ) - set( Boost_FOUND FALSE ) - set(_Boost_VERSION_AGE "old") - elseif(Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" ) - if(Boost_MINOR_VERSION LESS "${Boost_FIND_VERSION_MINOR}" ) - set( Boost_FOUND FALSE ) - set(_Boost_VERSION_AGE "old") - elseif(Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" ) - if( Boost_FIND_VERSION_PATCH AND Boost_SUBMINOR_VERSION LESS "${Boost_FIND_VERSION_PATCH}" ) - set( Boost_FOUND FALSE ) - set(_Boost_VERSION_AGE "old") - endif( Boost_FIND_VERSION_PATCH AND Boost_SUBMINOR_VERSION LESS "${Boost_FIND_VERSION_PATCH}" ) - endif( Boost_MINOR_VERSION LESS "${Boost_FIND_VERSION_MINOR}" ) - endif( Boost_MAJOR_VERSION LESS "${Boost_FIND_VERSION_MAJOR}" ) - - if (NOT Boost_FOUND) - _Boost_MARK_COMPONENTS_FOUND(OFF) - endif() - - if (Boost_FOUND AND Boost_FIND_VERSION_EXACT) - # If the user requested an exact version of Boost, check - # that. We already know that the Boost version we have is >= the - # requested version. - set(_Boost_VERSION_AGE "new") - - # If the user didn't specify a patchlevel, it's 0. - if (NOT Boost_FIND_VERSION_PATCH) - set(Boost_FIND_VERSION_PATCH 0) - endif (NOT Boost_FIND_VERSION_PATCH) - - # We'll set Boost_FOUND true again if we have an exact version match. - set(Boost_FOUND FALSE) - _Boost_MARK_COMPONENTS_FOUND(OFF) - if(Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" ) - if(Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" ) - if(Boost_SUBMINOR_VERSION EQUAL "${Boost_FIND_VERSION_PATCH}" ) - set( Boost_FOUND TRUE ) - _Boost_MARK_COMPONENTS_FOUND(ON) - endif(Boost_SUBMINOR_VERSION EQUAL "${Boost_FIND_VERSION_PATCH}" ) - endif( Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" ) - endif( Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" ) - endif (Boost_FOUND AND Boost_FIND_VERSION_EXACT) - - if(NOT Boost_FOUND) - # State that we found a version of Boost that is too new or too old. - set(Boost_ERROR_REASON - "${Boost_ERROR_REASON}\nDetected version of Boost is too ${_Boost_VERSION_AGE}. Requested version was ${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}") - if (Boost_FIND_VERSION_PATCH) - set(Boost_ERROR_REASON - "${Boost_ERROR_REASON}.${Boost_FIND_VERSION_PATCH}") - endif (Boost_FIND_VERSION_PATCH) - if (NOT Boost_FIND_VERSION_EXACT) - set(Boost_ERROR_REASON "${Boost_ERROR_REASON} (or newer)") - endif (NOT Boost_FIND_VERSION_EXACT) - set(Boost_ERROR_REASON "${Boost_ERROR_REASON}.") - endif (NOT Boost_FOUND) - - # Always check for missing components - set(_boost_CHECKED_COMPONENT FALSE) - set(_Boost_MISSING_COMPONENTS "") - foreach(COMPONENT ${Boost_FIND_COMPONENTS}) - string(TOUPPER ${COMPONENT} COMPONENT) - set(_boost_CHECKED_COMPONENT TRUE) - if(NOT Boost_${COMPONENT}_FOUND) - string(TOLOWER ${COMPONENT} COMPONENT) - list(APPEND _Boost_MISSING_COMPONENTS ${COMPONENT}) - set( Boost_FOUND FALSE) - endif(NOT Boost_${COMPONENT}_FOUND) - endforeach(COMPONENT) - - if(Boost_DEBUG) - message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] Boost_FOUND = ${Boost_FOUND}") - endif() - - if (_Boost_MISSING_COMPONENTS) - # We were unable to find some libraries, so generate a sensible - # error message that lists the libraries we were unable to find. - set(Boost_ERROR_REASON - "${Boost_ERROR_REASON}\nThe following Boost libraries could not be found:\n") - foreach(COMPONENT ${_Boost_MISSING_COMPONENTS}) - set(Boost_ERROR_REASON - "${Boost_ERROR_REASON} boost_${COMPONENT}\n") - endforeach(COMPONENT) - - list(LENGTH Boost_FIND_COMPONENTS Boost_NUM_COMPONENTS_WANTED) - list(LENGTH _Boost_MISSING_COMPONENTS Boost_NUM_MISSING_COMPONENTS) - if (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS}) - set(Boost_ERROR_REASON - "${Boost_ERROR_REASON}No Boost libraries were found. You may need to set Boost_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.") - else (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS}) - set(Boost_ERROR_REASON - "${Boost_ERROR_REASON}Some (but not all) of the required Boost libraries were found. You may need to install these additional Boost libraries. Alternatively, set Boost_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.") - endif (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS}) - endif (_Boost_MISSING_COMPONENTS) - - IF( NOT Boost_LIBRARY_DIRS AND NOT _boost_CHECKED_COMPONENT ) - # Compatibility Code for backwards compatibility with CMake - # 2.4's FindBoost module. - - # Look for the boost library path. - # Note that the user may not have installed any libraries - # so it is quite possible the Boost_LIBRARY_PATH may not exist. - SET(_boost_LIB_DIR ${Boost_INCLUDE_DIR}) - - IF("${_boost_LIB_DIR}" MATCHES "boost-[0-9]+") - GET_FILENAME_COMPONENT(_boost_LIB_DIR ${_boost_LIB_DIR} PATH) - ENDIF ("${_boost_LIB_DIR}" MATCHES "boost-[0-9]+") - - IF("${_boost_LIB_DIR}" MATCHES "/include$") - # Strip off the trailing "/include" in the path. - GET_FILENAME_COMPONENT(_boost_LIB_DIR ${_boost_LIB_DIR} PATH) - ENDIF("${_boost_LIB_DIR}" MATCHES "/include$") - - IF(EXISTS "${_boost_LIB_DIR}/lib") - SET (_boost_LIB_DIR ${_boost_LIB_DIR}/lib) - ELSE(EXISTS "${_boost_LIB_DIR}/lib") - IF(EXISTS "${_boost_LIB_DIR}/stage/lib") - SET(_boost_LIB_DIR ${_boost_LIB_DIR}/stage/lib) - ELSE(EXISTS "${_boost_LIB_DIR}/stage/lib") - SET(_boost_LIB_DIR "") - ENDIF(EXISTS "${_boost_LIB_DIR}/stage/lib") - ENDIF(EXISTS "${_boost_LIB_DIR}/lib") - - IF(_boost_LIB_DIR AND EXISTS "${_boost_LIB_DIR}") - SET(Boost_LIBRARY_DIRS ${_boost_LIB_DIR} CACHE FILEPATH "Boost library directory") - ENDIF(_boost_LIB_DIR AND EXISTS "${_boost_LIB_DIR}") - - ENDIF( NOT Boost_LIBRARY_DIRS AND NOT _boost_CHECKED_COMPONENT ) - - ELSE(Boost_INCLUDE_DIR) - SET( Boost_FOUND FALSE) - ENDIF(Boost_INCLUDE_DIR) - - IF (Boost_FOUND) - IF (NOT Boost_FIND_QUIETLY) - MESSAGE(STATUS "Boost version: ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}") - if(Boost_FIND_COMPONENTS) - message(STATUS "Found the following Boost libraries:") - endif() - ENDIF(NOT Boost_FIND_QUIETLY) - FOREACH ( COMPONENT ${Boost_FIND_COMPONENTS} ) - STRING( TOUPPER ${COMPONENT} UPPERCOMPONENT ) - IF ( Boost_${UPPERCOMPONENT}_FOUND ) - IF (NOT Boost_FIND_QUIETLY) - MESSAGE (STATUS " ${COMPONENT}") - ENDIF(NOT Boost_FIND_QUIETLY) - SET(Boost_LIBRARIES ${Boost_LIBRARIES} ${Boost_${UPPERCOMPONENT}_LIBRARY}) - ENDIF ( Boost_${UPPERCOMPONENT}_FOUND ) - ENDFOREACH(COMPONENT) - else() - if(Boost_FIND_REQUIRED) - message(SEND_ERROR "Unable to find the requested Boost libraries.\n${Boost_ERROR_REASON}") - else() - if(NOT Boost_FIND_QUIETLY) - # we opt not to automatically output Boost_ERROR_REASON here as - # it could be quite lengthy and somewhat imposing in it's requests - # Since Boost is not always a required dependency we'll leave this - # up to the end-user. - if(Boost_DEBUG OR Boost_DETAILED_FAILURE_MSG) - message(STATUS "Could NOT find Boost\n${Boost_ERROR_REASON}") - else() - message(STATUS "Could NOT find Boost") - endif() - endif() - endif(Boost_FIND_REQUIRED) - endif() - - # show the Boost_INCLUDE_DIRS AND Boost_LIBRARIES variables only in the advanced view - MARK_AS_ADVANCED(Boost_INCLUDE_DIR - Boost_INCLUDE_DIRS - Boost_LIBRARY_DIRS - ) -ENDIF(_boost_IN_CACHE) - diff -Nru rcssserver3d-0.6.5/cmake/FindFreetype.cmake rcssserver3d-0.6.6/cmake/FindFreetype.cmake --- rcssserver3d-0.6.5/cmake/FindFreetype.cmake 2011-03-26 12:12:49.000000000 +0000 +++ rcssserver3d-0.6.6/cmake/FindFreetype.cmake 1970-01-01 00:00:00.000000000 +0000 @@ -1,94 +0,0 @@ -# - Locate FreeType library -# This module defines -# FREETYPE_LIBRARIES, the library to link against -# FREETYPE_FOUND, if false, do not try to link to FREETYPE -# FREETYPE_INCLUDE_DIRS, where to find headers. -# This is the concatenation of the paths: -# FREETYPE_INCLUDE_DIR_ft2build -# FREETYPE_INCLUDE_DIR_freetype2 -# -# $FREETYPE_DIR is an environment variable that would -# correspond to the ./configure --prefix=$FREETYPE_DIR -# used in building FREETYPE. - -# Created by Eric Wing. -# Modifications by Alexander Neundorf. -# This file has been renamed to "FindFreetype.cmake" instead of the correct -# "FindFreeType.cmake" in order to be compatible with the one from KDE4, Alex. - -# Ugh, FreeType seems to use some #include trickery which -# makes this harder than it should be. It looks like they -# put ft2build.h in a common/easier-to-find location which -# then contains a #include to a more specific header in a -# more specific location (#include ). -# Then from there, they need to set a bunch of #define's -# so you can do something like: -# #include FT_FREETYPE_H -# Unfortunately, using CMake's mechanisms like INCLUDE_DIRECTORIES() -# wants explicit full paths and this trickery doesn't work too well. -# I'm going to attempt to cut out the middleman and hope -# everything still works. -FIND_PATH(FREETYPE_INCLUDE_DIR_ft2build ft2build.h - HINTS - $ENV{FREETYPE_DIR} - PATH_SUFFIXES include - PATHS - /usr/local/X11R6/include - /usr/local/X11/include - /usr/X11/include - /sw/include - /opt/local/include - /usr/freeware/include - C:/library/GnuWin32/include - "C:/Program Files/GnuWin32/include" - "C:/Program Files (x86)/GnuWin32/include" - C:/GnuWin32/include -) - -FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h - HINTS - $ENV{FREETYPE_DIR}/include/freetype2 - PATHS - /usr/local/X11R6/include - /usr/local/X11/include - /usr/X11/include - /sw/include - /opt/local/include - /usr/freeware/include - C:/library/GnuWin32/include/freetype2 - "C:/Program Files/GnuWin32/include/freetype2" - "C:/Program Files (x86)/GnuWin32/include/freetype2" - C:/GnuWin32/include/freetype2 - PATH_SUFFIXES freetype2 -) - -FIND_LIBRARY(FREETYPE_LIBRARY - NAMES freetype libfreetype freetype219 - HINTS - $ENV{FREETYPE_DIR} - PATH_SUFFIXES lib64 lib - PATHS - /usr/local/X11R6 - /usr/local/X11 - /usr/X11 - /sw - /usr/freeware - C:/library/GnuWin32/lib - "C:/Program Files/GnuWin32/lib" - "C:/Program Files (x86)/GnuWin32/lib" - C:/GnuWin32/lib -) - -# set the user variables -IF(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2) - SET(FREETYPE_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR_ft2build};${FREETYPE_INCLUDE_DIR_freetype2}") -ENDIF(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2) -SET(FREETYPE_LIBRARIES "${FREETYPE_LIBRARY}") - -# handle the QUIETLY and REQUIRED arguments and set FREETYPE_FOUND to TRUE if -# all listed variables are TRUE -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Freetype DEFAULT_MSG FREETYPE_LIBRARY FREETYPE_INCLUDE_DIRS) - - -MARK_AS_ADVANCED(FREETYPE_LIBRARY FREETYPE_INCLUDE_DIR_freetype2 FREETYPE_INCLUDE_DIR_ft2build) \ No newline at end of file diff -Nru rcssserver3d-0.6.5/cmake/FindODE.cmake rcssserver3d-0.6.6/cmake/FindODE.cmake --- rcssserver3d-0.6.5/cmake/FindODE.cmake 2011-03-26 12:12:49.000000000 +0000 +++ rcssserver3d-0.6.6/cmake/FindODE.cmake 2012-05-22 23:18:54.000000000 +0000 @@ -8,7 +8,7 @@ IF (NOT ODE_FOUND) - FIND_PROGRAM(ODE_CONFIG ode-config) + FIND_PROGRAM(ODE_CONFIG NAMES ${ODE_CONFIG_EXEC} ode-config) IF(ODE_CONFIG) # Use the newer EXECUTE_PROCESS command if it is available. IF(COMMAND EXECUTE_PROCESS) @@ -60,7 +60,20 @@ ENDFOREACH(flag) SET(ODE_EXTRA_LDFLAGS ${ODE_CONFIG_LIBS}) - ELSE("${ODE_CONFIG_RESULT}" MATCHES "^0$") + + # Convert the linker flags to a CMake list. + STRING(REGEX REPLACE " +" ";" + ODE_CONFIG_LIBS "${ODE_CONFIG_LIBS}") + + # Look for -l options. + FOREACH(flag ${ODE_CONFIG_LIBS}) + IF("${flag}" MATCHES "^-l.*ode.*") + STRING(REGEX REPLACE "^-l" "" + ODE_LIB_NAME "${flag}") + ENDIF("${flag}" MATCHES "^-l.*ode.*") + ENDFOREACH(flag) + + ELSE("${ODE_CONFIG_RESULT}" MATCHES "^0$") MESSAGE("Error running ${ODE_CONFIG}: [${ODE_CONFIG_RESULT}]") ENDIF("${ODE_CONFIG_RESULT}" MATCHES "^0$") @@ -79,7 +92,7 @@ NO_DEFAULT_PATH ) FIND_LIBRARY(ODE_LIBRARY - NAMES ode ode_double ode_single + NAMES ${ODE_LIB_NAME} ode ode_double ode_single PATHS ${ODE_CONFIG_PREFIX}/lib /usr/lib @@ -97,13 +110,13 @@ NO_DEFAULT_PATH ) - IF (WIN32) + IF (WIN32 AND NOT ODE_CONFIG) IF("${ODE_LIBRARY}" MATCHES ".*double.*") SET(ODE_EXTRA_CFLAGS "-DdDOUBLE") ELSE("${ODE_LIBRARY}" MATCHES ".*double.*") SET(ODE_EXTRA_CFLAGS "-DdSINGLE") ENDIF("${ODE_LIBRARY}" MATCHES ".*double.*") - ENDIF (WIN32) + ENDIF (WIN32 AND NOT ODE_CONFIG) IF (ODE_EXTRA_CFLAGS) SET(ODE_CFLAGS ${ODE_EXTRA_CFLAGS} CACHE STRING "Additional ODE flags") diff -Nru rcssserver3d-0.6.5/CMakeLists.txt rcssserver3d-0.6.6/CMakeLists.txt --- rcssserver3d-0.6.5/CMakeLists.txt 2011-03-26 12:12:49.000000000 +0000 +++ rcssserver3d-0.6.6/CMakeLists.txt 2012-05-22 23:18:54.000000000 +0000 @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 2.6) project(rcssserver3d CXX C) -set(PACKAGE_VERSION "0.6.5") +set(PACKAGE_VERSION "0.6.6") ########## check for headerfiles/libraries ########## include(CheckIncludeFile) @@ -10,7 +10,19 @@ check_include_file("arpa/inet.h" HAVE_ARPA_INET_H) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/) -set(ENV{SDLDIR} $ENV{SDLDIR} C:/library/SDL/ "C:/Program Files/SDL/" "C:/Program Files (x86)/SDL/" C:/SDL/) + +if (WIN32) + set(Boost_USE_STATIC_LIBS ON) + set(Boost_USE_MULTITHREADED ON) + set(Boost_USE_STATIC_RUNTIME OFF) + + # this must be added by cmake itself, but it is not + if ("${CMAKE_CXX_COMPILER}" MATCHES "mingw") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -shared") + endif ("${CMAKE_CXX_COMPILER}" MATCHES "mingw") +endif (WIN32) + +include(AdditionalSearchPaths) find_package(Spark REQUIRED) find_package(Freetype REQUIRED) @@ -41,7 +53,7 @@ endif (UNIX) if(WIN32) - add_definitions(-D_CRT_SECURE_NO_WARNINGS -DBOOST_ALL_DYN_LINK) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) include_directories(${CMAKE_SOURCE_DIR}/windows/include) if(MSVC) add_definitions(/Gm /Zi /GL) @@ -105,6 +117,7 @@ set(CPACK_SOURCE_PACKAGE_FILE_NAME ${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION}) +set(CPACK_STRIP_FILES TRUE) set(CPACK_PACKAGE_VENDOR "RoboCup Soccer Server 3D Maintenance Group") set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "RoboCup Soccer Simulation Server 3D") diff -Nru rcssserver3d-0.6.5/data/rsg/agent/nao/naoleg.rsg rcssserver3d-0.6.6/data/rsg/agent/nao/naoleg.rsg --- rcssserver3d-0.6.5/data/rsg/agent/nao/naoleg.rsg 2011-03-26 12:12:50.000000000 +0000 +++ rcssserver3d-0.6.6/data/rsg/agent/nao/naoleg.rsg 2012-05-22 23:18:54.000000000 +0000 @@ -68,7 +68,7 @@ (def $FootRelAnkle_X 0) (def $FootRelAnkle_Y 0.03) - (def $FootRelAnkle_Z -0.035) + (def $FootRelAnkle_Z -0.04) (def $Hip1_X (eval $Torso_X + $Hip1RelTorso_X)) (def $Hip1_Y (eval $Torso_Y + $Hip1RelTorso_Y)) @@ -118,7 +118,7 @@ (def $FootSizeX 0.08) (def $FootSizeY 0.16) - (def $FootSizeZ 0.03) + (def $FootSizeZ 0.02) (def $FootMass 0.2) diff -Nru rcssserver3d-0.6.5/data/rsg/agent/nao/naoneckhead.rsg rcssserver3d-0.6.6/data/rsg/agent/nao/naoneckhead.rsg --- rcssserver3d-0.6.5/data/rsg/agent/nao/naoneckhead.rsg 2011-03-26 12:12:50.000000000 +0000 +++ rcssserver3d-0.6.6/data/rsg/agent/nao/naoneckhead.rsg 2012-05-22 23:18:55.000000000 +0000 @@ -89,6 +89,7 @@ (nd RestrictedVisionPerceptor (setViewCones 120 120) (setSenseMyPos false) + (setSenseBallPos false) (setStaticSenseAxis false) (addNoise true) (setInterval 3) diff -Nru rcssserver3d-0.6.5/data/rsg/agent/nao/soccer.rsg rcssserver3d-0.6.6/data/rsg/agent/nao/soccer.rsg --- rcssserver3d-0.6.5/data/rsg/agent/nao/soccer.rsg 2011-03-26 12:12:50.000000000 +0000 +++ rcssserver3d-0.6.6/data/rsg/agent/nao/soccer.rsg 2012-05-22 23:18:55.000000000 +0000 @@ -11,7 +11,8 @@ (def $FieldHeight (eval Soccer.FieldHeight)) (def $GoalDepth (eval Soccer.GoalDepth)) (def $PenaltyLength (eval Soccer.PenaltyLength)) - (def $PenaltyWidth (eval Soccer.PenaltyWidth)) + (def $PenaltyWidth (eval Soccer.PenaltyWidth + Soccer.GoalWidth)) + (def $FreeKickDistance (eval Soccer.FreeKickDistance)) ;; height of the field ground plane (def $FieldMaterial matGrass) @@ -261,7 +262,7 @@ ;; ring (importScene rsg/agent/fieldring.rsg - 1.8) + $FreeKickDistance) ;; ;; add the ball diff -Nru rcssserver3d-0.6.5/debian/changelog rcssserver3d-0.6.6/debian/changelog --- rcssserver3d-0.6.5/debian/changelog 2012-01-05 22:08:51.000000000 +0000 +++ rcssserver3d-0.6.6/debian/changelog 2012-06-06 16:25:18.000000000 +0000 @@ -1,24 +1,65 @@ -rcssserver3d (0.6.5-0oneiric3) oneiric; urgency=high +rcssserver3d (0.6.6-0oneiric1) oneiric; urgency=high - * Official Release + * NEWS: + * RELEASE: + - updated for 0.6.6 + + * plugin/soccer/soccerruleaspect/soccerruleaspect.cpp: + - do not allow direct goals from kickoff + - do not let the kickoff taker to kick the ball again befor other players + + * plugin/soccer/gamestateaspect/gamestateaspect.cpp: + * plugin/soccer/gamestateaspect/gamestateaspect.h: + - added knowledge about a 'paused' state, in which game is not really + running (waiting for the referee to allow the game to continue, e.g. in + goal left/right state or at the beginning of a kick in state) + + * plugin/soccer/soccerruleaspect/soccerruleaspect.h: + - a little cleanup, and fixed comment for mAutoKickOffTimeOrigin + - removed an unused variable mLastValidBallPosition + + * plugin/soccer/soccerruleaspect/soccerruleaspect.cpp: + - update game's paused state + - consider the referee rules always while the game is running (not paused), + and reset all counters otherwise. + * NEWS: * RELEASE: - - updated for 0.6.5 to reflect removing an opponent from a touch group when - there are more opponents in the group than teammates - - * plugin/soccer/soccerruleaspect/soccerruleaspect.h: + - updated for 0.6.6 release + * data/rsg/agent/nao/naoleg.rsg: + - reduce Nao's foot height (patch by Sander) and modify the position of + ankle accordingly + + * plugin/soccer/soccerruleaspect/soccerruleaspect.cpp - (SoccerRuleAspect::CheckGoal): - - if goal recorder's cannot detect any goals, geometrically check to - make sure that no goal is actually happened. Thanks to Luis for starting - the effort and Mahdi for the initial code for calculating where the ball - crosses the goal geometrically. - (SoccerRuleAspect::AnalyseTouchGroups): - - reposition a player from a team with more players in a touch group. Thanks - to Nexus3D (Mehdi?) for the initial patch. It intended to reposition the - player who joined last even from the opponent team, but we don't have - this info now so remove an unspecified player from the opponent if the - last player is not going to be removed. + (SoccerRuleAspect::CheckBallLeftField): + - fix the position of right corner kick to use mBallRadius rather than + a hard coded value + - use new value for corner kick position for RoboCup 2012, to be between + the goal and field's corner position + + * NEWS: + * RELEASE: + - added information about the new dimensions in this release + + * CMakeLists.txt: + - updated version to 0.6.6 + * rcssserver3d/naosoccersim.rb: + - increased free kick distance to 2.0. actually it should be 2.75, but + since we are going to have an artificial corner point it should be + probably smaller too. + + * plugin/soccer/rcs3dmonitor/rcs3dmonitor.h: + * plugin/soccer/rcs3dmonitor/rcs3dmonitor.cpp: + * plugin/soccer/sexpmonitor/sexpmonitor.h: + * plugin/soccer/sexpmonitor/sexpmonitor.cpp: + - fixed spelling error in GetMonitorInformation() + * rcssserver3d/naosoccersim.rb: + - use new field dimensions: 20x30 + + * data/rsg/agent/nao/soccer.rsg: + - The radius of center circle (field ring) should be equal to + FreeKickDistance (they are equal in FIFA rules too) - -- Hossein Ansari Thu, 05 Jan 2012 23:05:57 +0430 + -- Hossein Ansari Wed, 06 Jun 2012 20:55:17 +0430 diff -Nru rcssserver3d-0.6.5/debian/compat rcssserver3d-0.6.6/debian/compat --- rcssserver3d-0.6.5/debian/compat 2011-03-29 06:54:50.000000000 +0000 +++ rcssserver3d-0.6.6/debian/compat 2012-05-26 22:38:39.000000000 +0000 @@ -1 +1 @@ -7 +8 diff -Nru rcssserver3d-0.6.5/debian/control rcssserver3d-0.6.6/debian/control --- rcssserver3d-0.6.5/debian/control 2011-04-17 14:36:51.000000000 +0000 +++ rcssserver3d-0.6.6/debian/control 2012-05-26 22:43:17.000000000 +0000 @@ -1,21 +1,14 @@ Source: rcssserver3d Priority: optional Maintainer: Hossein Ansari -Build-Depends: debhelper (>= 7), cmake, simspark-dev ( >= 0.2.2) , libode-dev ( >= 3:0.11.1-tbb) , libboost-dev, libboost-regex-dev, libboost-thread-dev, libfreetype6-dev, libsdl1.2-dev, libdevil-dev, freeglut3-dev, ruby1.8-dev ( >= 1.8.7.302), libmng-dev, libpng12-dev, libtiff4-dev +Build-Depends: debhelper (>= 7), cmake, simspark-dev ( >= 0.2.3) , libode-dev ( >= 3:0.11.1-tbb) , libboost-dev, libboost-regex-dev, libboost-thread-dev, libfreetype6-dev, libsdl1.2-dev, libdevil-dev, freeglut3-dev, ruby-dev ( >= 1.8.7.302), libmng-dev, libpng12-dev, libtiff4-dev Standards-Version: 3.8.3 Section: devel Homepage: http://robocup.allafiha.com -Package: rcssserver3d-dev -Section: libdevel -Architecture: any -Depends: rcssserver3d (= ${binary:Version}),cmake, simspark-dev ( >= 0.2.2) , libode-dev ( >= 3:0.11.1-tbb) , libboost-dev, libboost-regex-dev, libboost-thread-dev, libfreetype6-dev, libsdl1.2-dev, libdevil-dev, freeglut3-dev, ruby1.8-dev( >= 1.8.7.302), libmng-dev, libpng12-dev, libtiff4-dev -Description: Robocup 3D Soccer Simulation Server development files - Description: Robocup 3D Soccer Simulation Server development files - Package: rcssserver3d Section: devel Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} , libode2 ( >= 3:0.11.1-tbb) , libruby1.8 ( >= 1.8.7.302) +Depends: ${shlibs:Depends}, ${misc:Depends} , libode2 ( >= 3:0.11.1-tbb) , libruby ( >= 1.8.7.302) Description: Robocup 3D Soccer Simulation Server Robocup 3D Soccer Simulation Server diff -Nru rcssserver3d-0.6.5/debian/docs rcssserver3d-0.6.6/debian/docs --- rcssserver3d-0.6.5/debian/docs 2011-03-29 06:54:35.000000000 +0000 +++ rcssserver3d-0.6.6/debian/docs 2012-05-26 22:38:39.000000000 +0000 @@ -1,4 +1,3 @@ -CMakeLists.txt NEWS README README.MacOSX diff -Nru rcssserver3d-0.6.5/debian/patches/debian-changes-0.6.5-1maverick1 rcssserver3d-0.6.6/debian/patches/debian-changes-0.6.5-1maverick1 --- rcssserver3d-0.6.5/debian/patches/debian-changes-0.6.5-1maverick1 2011-04-07 08:16:20.000000000 +0000 +++ rcssserver3d-0.6.6/debian/patches/debian-changes-0.6.5-1maverick1 1970-01-01 00:00:00.000000000 +0000 @@ -1,2475 +0,0 @@ -Description: Upstream changes introduced in version 0.6.5-1maverick1 - This patch has been created by dpkg-source during the package build. - Here's the last changelog entry, hopefully it gives details on why - those changes were made: - . - rcssserver3d (0.6.5-1maverick1) maverick; urgency=high - . - * Multi-Thread version. - . - The person named in the Author field signed this changelog entry. -Author: Hossein Ansari - ---- -The information above should follow the Patch Tagging Guidelines, please -checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here -are templates for supplementary fields that you might want to add: - -Origin: , -Bug: -Bug-Debian: http://bugs.debian.org/ -Bug-Ubuntu: https://launchpad.net/bugs/ -Forwarded: -Reviewed-By: -Last-Update: - ---- rcssserver3d-0.6.5.orig/ChangeLog -+++ rcssserver3d-0.6.5/ChangeLog -@@ -1,3 +1,13 @@ -+2011-04-05 Hedayat Vatankhah -+ -+ * rcssserver3d/naosoccersim.rb: -+ - increased goal depth (fix goal count bug :P) -+ -+2011-03-28 Hedayat Vatankhah -+ -+ * rcssmonitor3d/rcssmonitor3d.rb: -+ - only log error messages to output (a small cleanup for 0.6.5 release) -+ - 2011-03-26 Hedayat Vatankhah - - * NEWS: ---- /dev/null -+++ rcssserver3d-0.6.5/doc/users/rcssmonitor3d.log -@@ -0,0 +1,2049 @@ -+This is XeTeX, Version 3.1415926-2.2-0.9997.4 (TeX Live 2011/dev) (format=xelatex 2011.3.11) 28 MAR 2011 00:22 -+entering extended mode -+ restricted \write18 enabled. -+ Source specials enabled. -+ %&-line parsing enabled. -+**rcssmonitor3d.tex -+(./rcssmonitor3d.tex -+LaTeX2e <2009/09/24> -+Babel and hyphenation patterns for english, dumylang, nohyphenation, lo -+aded. -+! Undefined control sequence. -+l.1 \chapter -+ {Rcssmonitor3d} -+The control sequence at the end of the top line -+of your error message was never \def'ed. If you have -+misspelled it (e.g., `\hobx'), type `I' and the correct -+spelling (e.g., `I\hbox'). Otherwise just continue, -+and I'll forget about whatever was undefined. -+ -+ -+! LaTeX Error: Missing \begin{document}. -+ -+See the LaTeX manual or LaTeX Companion for explanation. -+Type H for immediate help. -+ ... -+ -+l.1 \chapter{R -+ cssmonitor3d} -+You're in trouble here. Try typing to proceed. -+If that doesn't work, type X to quit. -+ -+Missing character: There is no R in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no 3 in font nullfont! -+Missing character: There is no d in font nullfont! -+ -+Overfull \hbox (20.0pt too wide) in paragraph at lines 1--3 -+[][] -+ [] -+ -+ -+! LaTeX Error: Missing \begin{document}. -+ -+See the LaTeX manual or LaTeX Companion for explanation. -+Type H for immediate help. -+ ... -+ -+l.4 T -+ his chapter gives an overview about the available monitor and log -+You're in trouble here. Try typing to proceed. -+If that doesn't work, type X to quit. -+ -+Missing character: There is no T in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no y in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no S in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no S in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no , in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no . in font nullfont! -+ -+Overfull \hbox (20.0pt too wide) in paragraph at lines 4--6 -+[][] -+ [] -+ -+! Undefined control sequence. -+l.7 \section -+ {Internal Monitor} -+The control sequence at the end of the top line -+of your error message was never \def'ed. If you have -+misspelled it (e.g., `\hobx'), type `I' and the correct -+spelling (e.g., `I\hbox'). Otherwise just continue, -+and I'll forget about whatever was undefined. -+ -+ -+! LaTeX Error: Missing \begin{document}. -+ -+See the LaTeX manual or LaTeX Companion for explanation. -+Type H for immediate help. -+ ... -+ -+l.7 \section{I -+ nternal Monitor} -+You're in trouble here. Try typing to proceed. -+If that doesn't work, type X to quit. -+ -+Missing character: There is no I in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no M in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+ -+Overfull \hbox (20.0pt too wide) in paragraph at lines 7--8 -+[][] -+ [] -+ -+ -+! LaTeX Error: Missing \begin{document}. -+ -+See the LaTeX manual or LaTeX Companion for explanation. -+Type H for immediate help. -+ ... -+ -+l.9 T -+ he internal monitor implementation is part of the SimSpark server. It -+You're in trouble here. Try typing to proceed. -+If that doesn't work, type X to quit. -+ -+Missing character: There is no T in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no S in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no S in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no . in font nullfont! -+Missing character: There is no I in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no y in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no . in font nullfont! -+Missing character: There is no T in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no , in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no . in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no . in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no . in font nullfont! -+ -+Overfull \hbox (20.0pt too wide) in paragraph at lines 9--14 -+[][] -+ [] -+ -+ -+Overfull \hbox (78.74931pt too wide) in paragraph at lines 9--14 -+\OT1/cmtt/m/n/10 rcssserver3d.rb -+ [] -+ -+ -+Overfull \hbox (110.24904pt too wide) in paragraph at lines 9--14 -+\OT1/cmtt/m/n/10 sparkSetupRendering() -+ [] -+ -+ -+Overfull \hbox (89.24922pt too wide) in paragraph at lines 9--14 -+\OT1/cmtt/m/n/10 sparkSetupInput() -+ [] -+ -+ -+Overfull \hbox (15.74986pt too wide) in paragraph at lines 9--14 -+\OT1/cmtt/m/n/10 '#' -+ [] -+ -+! Undefined control sequence. -+l.15 \section -+ {External Monitor} -+The control sequence at the end of the top line -+of your error message was never \def'ed. If you have -+misspelled it (e.g., `\hobx'), type `I' and the correct -+spelling (e.g., `I\hbox'). Otherwise just continue, -+and I'll forget about whatever was undefined. -+ -+ -+! LaTeX Error: Missing \begin{document}. -+ -+See the LaTeX manual or LaTeX Companion for explanation. -+Type H for immediate help. -+ ... -+ -+l.15 \section{E -+ xternal Monitor} -+You're in trouble here. Try typing to proceed. -+If that doesn't work, type X to quit. -+ -+Missing character: There is no E in font nullfont! -+Missing character: There is no x in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no M in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+ -+Overfull \hbox (20.0pt too wide) in paragraph at lines 15--16 -+[][] -+ [] -+ -+ -+! LaTeX Error: Missing \begin{document}. -+ -+See the LaTeX manual or LaTeX Companion for explanation. -+Type H for immediate help. -+ ... -+ -+l.17 T -+ he external monitor implementation is called -+You're in trouble here. Try typing to proceed. -+If that doesn't work, type X to quit. -+ -+Missing character: There is no T in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no x in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no . in font nullfont! -+Missing character: There is no I in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no S in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no S in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no y in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no . in font nullfont! -+ -+Overfull \hbox (20.0pt too wide) in paragraph at lines 17--20 -+[][] -+ [] -+ -+ -+Overfull \hbox (68.2494pt too wide) in paragraph at lines 17--20 -+\OT1/cmtt/m/n/10 rcssmonitor3d -+ [] -+ -+! Undefined control sequence. -+l.21 \section -+ {Playing Log files} -+The control sequence at the end of the top line -+of your error message was never \def'ed. If you have -+misspelled it (e.g., `\hobx'), type `I' and the correct -+spelling (e.g., `I\hbox'). Otherwise just continue, -+and I'll forget about whatever was undefined. -+ -+ -+! LaTeX Error: Missing \begin{document}. -+ -+See the LaTeX manual or LaTeX Companion for explanation. -+Type H for immediate help. -+ ... -+ -+l.21 \section{P -+ laying Log files} -+You're in trouble here. Try typing to proceed. -+If that doesn't work, type X to quit. -+ -+Missing character: There is no P in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no y in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no L in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no s in font nullfont! -+ -+Overfull \hbox (20.0pt too wide) in paragraph at lines 21--22 -+[][] -+ [] -+ -+ -+! LaTeX Error: Missing \begin{document}. -+ -+See the LaTeX manual or LaTeX Companion for explanation. -+Type H for immediate help. -+ ... -+ -+l.23 T -+ he monitor is able to replay a simulation that is recorded in a log -+You're in trouble here. Try typing to proceed. -+If that doesn't work, type X to quit. -+ -+Missing character: There is no T in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no y in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no . in font nullfont! -+Missing character: There is no I in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no y in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no . in font nullfont! -+ -+Overfull \hbox (20.0pt too wide) in paragraph at lines 23--26 -+[][] -+ [] -+ -+ -+Overfull \hbox (47.24959pt too wide) in paragraph at lines 23--26 -+\OT1/cmtt/m/n/10 --logfile -+ [] -+ -+! Undefined control sequence. -+l.27 \section -+ {Key Assignments} -+The control sequence at the end of the top line -+of your error message was never \def'ed. If you have -+misspelled it (e.g., `\hobx'), type `I' and the correct -+spelling (e.g., `I\hbox'). Otherwise just continue, -+and I'll forget about whatever was undefined. -+ -+ -+! LaTeX Error: Missing \begin{document}. -+ -+See the LaTeX manual or LaTeX Companion for explanation. -+Type H for immediate help. -+ ... -+ -+l.27 \section{K -+ ey Assignments} -+You're in trouble here. Try typing to proceed. -+If that doesn't work, type X to quit. -+ -+Missing character: There is no K in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no y in font nullfont! -+Missing character: There is no A in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no s in font nullfont! -+ -+Overfull \hbox (20.0pt too wide) in paragraph at lines 27--28 -+[][] -+ [] -+ -+ -+! LaTeX Error: Missing \begin{document}. -+ -+See the LaTeX manual or LaTeX Companion for explanation. -+Type H for immediate help. -+ ... -+ -+l.29 T -+ he monitor accepts a number of commands by key or mouse. These -+You're in trouble here. Try typing to proceed. -+If that doesn't work, type X to quit. -+ -+Missing character: There is no T in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no y in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no y in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no . in font nullfont! -+Missing character: There is no T in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no . in font nullfont! -+Missing character: There is no T in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no . in font nullfont! -+ -+Overfull \hbox (20.0pt too wide) in paragraph at lines 29--33 -+[][] -+ [] -+ -+ -+! LaTeX Error: Environment table undefined. -+ -+See the LaTeX manual or LaTeX Companion for explanation. -+Type H for immediate help. -+ ... -+ -+l.34 \begin{table} -+ -+Your command was ignored. -+Type I to replace it with another command, -+or to continue without it. -+ -+ -+! LaTeX Error: \caption outside float. -+ -+See the LaTeX manual or LaTeX Companion for explanation. -+Type H for immediate help. -+ ... -+ -+l.36 \caption -+ {Key assignments for rcssmonitor3d} -+You're in trouble here. Try typing to proceed. -+If that doesn't work, type X to quit. -+ -+ -+! LaTeX Error: Missing \begin{document}. -+ -+See the LaTeX manual or LaTeX Companion for explanation. -+Type H for immediate help. -+ ... -+ -+l.36 \caption{K -+ ey assignments for rcssmonitor3d} -+You're in trouble here. Try typing to proceed. -+If that doesn't work, type X to quit. -+ -+Missing character: There is no K in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no y in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no 3 in font nullfont! -+Missing character: There is no d in font nullfont! -+ -+Overfull \hbox (20.0pt too wide) in paragraph at lines 36--37 -+[][] -+ [] -+ -+LaTeX Font Info: External font `cmex10' loaded for size -+(Font) <7> on input line 38. -+LaTeX Font Info: External font `cmex10' loaded for size -+(Font) <5> on input line 38. -+! Undefined control sequence. -+l.39 {\bf -+ key} & {\bf function} \\ -+The control sequence at the end of the top line -+of your error message was never \def'ed. If you have -+misspelled it (e.g., `\hobx'), type `I' and the correct -+spelling (e.g., `I\hbox'). Otherwise just continue, -+and I'll forget about whatever was undefined. -+ -+Missing character: There is no k in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no y in font nullfont! -+! Undefined control sequence. -+l.39 {\bf key} & {\bf -+ function} \\ -+The control sequence at the end of the top line -+of your error message was never \def'ed. If you have -+misspelled it (e.g., `\hobx'), type `I' and the correct -+spelling (e.g., `I\hbox'). Otherwise just continue, -+and I'll forget about whatever was undefined. -+ -+Missing character: There is no f in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no q in font nullfont! -+Missing character: There is no q in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no y in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no y in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no 1 in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no 2 in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no 3 in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no 4 in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no 5 in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no 6 in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no 7 in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no x in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no y in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no y in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+ -+! LaTeX Error: \begin{document} ended by \end{table}. -+ -+See the LaTeX manual or LaTeX Companion for explanation. -+Type H for immediate help. -+ ... -+ -+l.81 \end{table} -+ -+Your command was ignored. -+Type I to replace it with another command, -+or to continue without it. -+ -+Missing character: There is no T in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no v in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no b in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no e in font nullfont! -+! Undefined control sequence. -+ ...`table:rcssmonitor3d' on page \thepage -+ \space undefined\on@line .^^J -+l.84 \ref{table:rcssmonitor3d} -+ . These short cuts are configured in the two s... -+The control sequence at the end of the top line -+of your error message was never \def'ed. If you have -+misspelled it (e.g., `\hobx'), type `I' and the correct -+spelling (e.g., `I\hbox'). Otherwise just continue, -+and I'll forget about whatever was undefined. -+ -+ -+LaTeX Warning: Reference `table:rcssmonitor3d' on page undefined on input line -+ 84. -+ -+Missing character: There is no . in font nullfont! -+Missing character: There is no T in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no f in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no g in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no w in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no c in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no h in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no S in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no S in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no k in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no i in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no d in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no o in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no t in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no p in font nullfont! -+Missing character: There is no . in font nullfont! -+ -+Overfull \hbox (20.0pt too wide) in paragraph at lines 83--87 -+[][] -+ [] -+ -+ -+Overfull \hbox (10.86105pt too wide) in paragraph at lines 83--87 -+[] -+ [] -+ -+ -+Overfull \hbox (57.7495pt too wide) in paragraph at lines 83--87 -+\OT1/cmtt/m/n/10 bindings.rb -+ [] -+ -+ -+Overfull \hbox (89.24922pt too wide) in paragraph at lines 83--87 -+\OT1/cmtt/m/n/10 soccerbindings.rb -+ [] -+ -+Missing character: There is no " in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no s in font nullfont! -+Missing character: There is no e in font nullfont! -+Missing character: There is no r in font nullfont! -+Missing character: There is no - in font nullfont! -+Missing character: There is no m in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no n in font nullfont! -+Missing character: There is no u in font nullfont! -+Missing character: There is no a in font nullfont! -+Missing character: There is no l in font nullfont! -+Missing character: There is no " in font nullfont! -+) -+! Emergency stop. -+<*> rcssmonitor3d.tex -+ -+*** (job aborted, no legal \end found) -+ -+ -+Here is how much of TeX's memory you used: -+ 14 strings out of 495724 -+ 174 string characters out of 3188971 -+ 51144 words of memory out of 3000000 -+ 3249 multiletter control sequences out of 15000+200000 -+ 4116 words of font info for 16 fonts, out of 3000000 for 9000 -+ 14 hyphenation exceptions out of 8191 -+ 19i,6n,14p,118b,143s stack positions out of 5000i,500n,10000p,200000b,50000s -+No pages of output. ---- rcssserver3d-0.6.5.orig/rcssserver3d/naosoccersim.rb -+++ rcssserver3d-0.6.5/rcssserver3d/naosoccersim.rb -@@ -41,7 +41,7 @@ addSoccerVar('FieldLength', 21.0) - addSoccerVar('FieldWidth', 14.0) - addSoccerVar('FieldHeight', 40.0) - addSoccerVar('GoalWidth', 2.1) --addSoccerVar('GoalDepth', 0.6) -+addSoccerVar('GoalDepth', 1.0) - addSoccerVar('GoalHeight', 0.8) - addSoccerVar('PenaltyLength',1.8) - addSoccerVar('PenaltyWidth',3.9) ---- rcssserver3d-0.6.5.orig/rcssmonitor3d/rcssmonitor3d.rb -+++ rcssserver3d-0.6.5/rcssmonitor3d/rcssmonitor3d.rb -@@ -41,7 +41,7 @@ run "soccersim-monitor.rb" - # - - sparkResetLogging() --sparkLogAllToCerr() -+sparkLogErrorToCerr() - # sparkLogAllToFile('./spark.txt') - # sparkLogDebugToCerr() - ---- rcssserver3d-0.6.5.orig/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp -+++ rcssserver3d-0.6.5/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp -@@ -63,7 +63,7 @@ SoccerRuleAspect::SoccerRuleAspect() : - 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 -+ mMin3PlDistance(0), // min dist for third closest of team before being repositioned - mMaxTouchGroupSize(1000), - mMaxFaultTime(0.0) // maximum time allowed for a player to commit a positional fault before being repositioned - { -@@ -83,23 +83,23 @@ SoccerRuleAspect::MoveBall(const Vector3 - mBallBody->Enable(); - } - --/* Uses only Ball and Players positions and detects overcrowind near ball and areas and -+/* Uses only Ball and Players positions and detects overcrowind near ball and areas and - players innappropriate behavior (laying on the ground or not walking for too much time) */ --void -+void - SoccerRuleAspect::AutomaticSimpleReferee(TPlayMode playMode) - { - // Reset counters before kickoff - if (playMode == PM_BeforeKickOff) -- { -+ { - ResetFaultCounter(TI_LEFT); - ResetFaultCounter(TI_RIGHT); - } - else - { -- CalculateDistanceArrays(TI_LEFT); // Calculates distance arrays for left team -- CalculateDistanceArrays(TI_RIGHT); // Calculates distance arrays for right team -- AnalyseFaults(TI_LEFT); // Analyses simple faults for the left team -- AnalyseFaults(TI_RIGHT); // Analyses simple faults for the right team -+ CalculateDistanceArrays(TI_LEFT); // Calculates distance arrays for left team -+ CalculateDistanceArrays(TI_RIGHT); // Calculates distance arrays for right team -+ AnalyseFaults(TI_LEFT); // Analyses simple faults for the left team -+ AnalyseFaults(TI_RIGHT); // Analyses simple faults for the right team - AnalyseTouchGroups(TI_LEFT); - AnalyseTouchGroups(TI_RIGHT); - // Only apply rules during play-on -@@ -108,7 +108,7 @@ SoccerRuleAspect::AutomaticSimpleReferee - ClearPlayersAutomatic(TI_LEFT); // enforce standing and not overcrowding rules for left team - ClearPlayersAutomatic(TI_RIGHT); // enforce standing and not overcrowding rules for right team - } -- -+ - // Reset touch groups - ResetTouchGroups(TI_LEFT); - ResetTouchGroups(TI_RIGHT); -@@ -116,18 +116,18 @@ SoccerRuleAspect::AutomaticSimpleReferee - } - - --void -+void - SoccerRuleAspect::ResetFaultCounterPlayer(int unum, TTeamIndex idx) - { -- playerGround[unum][idx] = 0; -- playerNotStanding[unum][idx] = 0; -+ playerGround[unum][idx] = 0; -+ playerNotStanding[unum][idx] = 0; - playerStanding[unum][idx] = 5/0.02; // Considers player has been standing for some time in playoff -- prevPlayerInsideOwnArea[unum][idx] = 0; -- playerInsideOwnArea[unum][idx] = 0; -- playerFaultTime[unum][idx] = 0; -+ prevPlayerInsideOwnArea[unum][idx] = 0; -+ playerInsideOwnArea[unum][idx] = 0; -+ playerFaultTime[unum][idx] = 0; - } - --void -+void - SoccerRuleAspect::ResetFaultCounter(TTeamIndex idx) - { - for(int t=1; t<=11; t++) { -@@ -136,54 +136,54 @@ SoccerRuleAspect::ResetFaultCounter(TTea - } - - // Process agent state: standing, sitted, laying down, ... --void -+void - SoccerRuleAspect::ProcessAgentState(salt::Vector3f pos, int unum, TTeamIndex idx) - { - float groundZVal = 0.15; //bellow this player is on the ground - float middleZVal = 0.25; //abovce this player is standing (or trying...) - -- //increase player not standing if it is not in upward position and inside of field -+ //increase player not standing if it is not in upward position and inside of field - if (pos.z() < middleZVal && fabs(pos.y())< mFieldWidth / 2 + 0.1) -- { -- playerNotStanding[unum][idx]++; -+ { -+ playerNotStanding[unum][idx]++; - playerStanding[unum][idx] = 0; //player not standing - } - - //increase player near ground if it is very low and inside of field - if (pos.z() < groundZVal && fabs(pos.y())< mFieldWidth / 2 + 0.1) - { -- playerGround[unum][idx]++; -+ playerGround[unum][idx]++; - } - - //increase player standing or at least trying... Reset ground - if (pos.z() >= middleZVal) - { -- playerStanding[unum][idx]++; -+ playerStanding[unum][idx]++; - playerGround[unum][idx] = 0; - } - - //Player standing for some cycles (0.5 seconds) reset not standing count -- if (playerStanding[unum][idx] > 0.5 / 0.02) { -- playerNotStanding[unum][idx] = 0; -+ if (playerStanding[unum][idx] > 0.5 / 0.02) { -+ playerNotStanding[unum][idx] = 0; - } - } - - // 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 <= 10; t1++) -+ for(int t2 = t1 + 1; t2 <= 11; t2++) - if (dArr[t1][idx] >= dArr[t2][idx]) - oArr[t1][idx]++; - else - oArr[t2][idx]++; -- -+ - // DEBUG - // if (dArr[1][idx]<1000.0) { - // cout << "Team: " << idx << " --> "; --// for(int t1=1; t1<=6; t1++) -+// for(int t1=1; t1<=6; t1++) - // if (dArr[t1][idx]<5.0) cout << t1 << " o:" << oArr[t1][idx] << " d: " << dArr[t1][idx] << " | "; --// cout << endl; -+// cout << endl; - // } - } - -@@ -202,7 +202,7 @@ void SoccerRuleAspect::CalculateDistance - ownGoalPos = Vector3f(-mFieldLength/2.0, 0.0, 0.0); - else - ownGoalPos = Vector3f(mFieldLength/2.0, 0.0, 0.0); -- -+ - boost::shared_ptr agent_aspect; - SoccerBase::TAgentStateList::const_iterator i; - -@@ -210,45 +210,45 @@ void SoccerRuleAspect::CalculateDistance - closestPlayer[idx] = 1; - closestPlayerDist[idx] = 1000.0; - for(int t = 1; t <= 11; t++) -- { -+ { - distArr[t][idx]=1000.0; - ordArr[t][idx]=1; - distGArr[t][idx]=1000.0; -- ordGArr[t][idx]=1; -+ ordGArr[t][idx]=1; - } - - for (i = agent_states.begin(); i != agent_states.end(); ++i) - { - SoccerBase::GetTransformParent(**i, agent_aspect); - Vector3f agentPos = agent_aspect->GetWorldTransform().Pos(); -- int unum = (*i)->GetUniformNumber(); -- distArr[unum][idx] = sqrt((agentPos.x()-ballPos.x())*(agentPos.x()-ballPos.x()) + -+ int unum = (*i)->GetUniformNumber(); -+ distArr[unum][idx] = sqrt((agentPos.x()-ballPos.x())*(agentPos.x()-ballPos.x()) + - (agentPos.y()-ballPos.y())*(agentPos.y()-ballPos.y())); -- distGArr[unum][idx] = sqrt((agentPos.x()-ownGoalPos.x())*(agentPos.x()-ownGoalPos.x()) + -+ distGArr[unum][idx] = sqrt((agentPos.x()-ownGoalPos.x())*(agentPos.x()-ownGoalPos.x()) + - (agentPos.y()-ownGoalPos.y())*(agentPos.y()-ownGoalPos.y())); - - // determine closest player - if (distArr[unum][idx] < closestPlayerDist[idx]) -- { -+ { - closestPlayerDist[idx] = distArr[unum][idx]; -- closestPlayer[idx] = unum; -+ closestPlayer[idx] = unum; - } - - // save player inside area state in previous cycle -- prevPlayerInsideOwnArea[unum][idx] = playerInsideOwnArea[unum][idx]; -+ 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())) || -+ if (idx == TI_LEFT && mLeftPenaltyArea.Contains(Vector2f(agentPos.x(), agentPos.y())) || - idx == TI_RIGHT && mRightPenaltyArea.Contains(Vector2f(agentPos.x(), agentPos.y()))) -- { -+ { - numPlInsideOwnArea[idx]++; -- playerInsideOwnArea[unum][idx] = 1; -+ playerInsideOwnArea[unum][idx] = 1; - - //goalie is not repositioned when inside own area... - if (unum == 1) -- { -- distGArr[unum][idx] = 0.0; -- } -+ { -+ distGArr[unum][idx] = 0.0; -+ } - } - else - playerInsideOwnArea[unum][idx] = 0; -@@ -256,7 +256,7 @@ void SoccerRuleAspect::CalculateDistance - // Process agent state: standing, sitted, laying down, ... - ProcessAgentState(agentPos, unum, idx); - } -- -+ - // compute rank of distance to ball - SimpleOrder(distArr, ordArr, idx); - // compute rank of distance to own goal -@@ -290,7 +290,7 @@ void SoccerRuleAspect::ResetTouchGroups( - SoccerBase::TAgentStateList agent_states; - if (! SoccerBase::GetAgentStates(*mBallState.get(), agent_states, idx)) - return; -- -+ - SoccerBase::TAgentStateList::const_iterator i; - for (i = agent_states.begin(); i != agent_states.end(); i++) - { -@@ -307,31 +307,31 @@ void SoccerRuleAspect::AnalyseFaults(TTe - idx2 = TI_RIGHT; - else - idx2 = TI_LEFT; //Other team -- -+ - for(int unum=1; unum<=11; unum++) - { -- // I am the third closest player but i am too near the ball (and not the goalie) -- if (unum != 1 && closestPlayerDist[idx2] < mMinOppDistance && -- (distArr[unum][idx] <= mMin3PlDistance + 0.01 && ordArr[unum][idx] == 3)) -+ // I am the third closest player but i am too near the ball (and not the goalie) -+ if (unum != 1 && closestPlayerDist[idx2] < mMinOppDistance && -+ (distArr[unum][idx] <= mMin3PlDistance + 0.01 && ordArr[unum][idx] == 3)) - { - playerFaultTime[unum][idx]++; - } - // I am the second closest player but i am too near the ball (and not the goalie) -- else if(unum != 1 && closestPlayerDist[idx2] < mMinOppDistance && -- distArr[unum][idx] <= mMin2PlDistance + 0.01 && ordArr[unum][idx] == 2 ) -+ else if(unum != 1 && closestPlayerDist[idx2] < mMinOppDistance && -+ distArr[unum][idx] <= mMin2PlDistance + 0.01 && ordArr[unum][idx] == 2 ) - { - playerFaultTime[unum][idx]++; - } -- // Too many players inside my own penalty area and Im am the last one to enter or -+ // Too many players inside my own penalty area and Im am the last one to enter or - // the last one to enter was the goalie and I am the one further away from own goal - else if((numPlInsideOwnArea[idx] > mMaxPlayersInsideOwnArea && unum != 1 && playerInsideOwnArea[unum][idx] == 1 && -- (prevPlayerInsideOwnArea[unum][idx] == 0 || -+ (prevPlayerInsideOwnArea[unum][idx] == 0 || - (prevPlayerInsideOwnArea[1][idx] == 0 && playerInsideOwnArea[1][idx] == 1 && mMaxPlayersInsideOwnArea + 1 == ordGArr[unum][idx])))) - { - playerFaultTime[unum][idx]++; - } - // I am a field player and on the ground for too much time -- else if (unum != 1 && playerGround[unum][idx] > mGroundMaxTime / 0.02) -+ else if (unum != 1 && playerGround[unum][idx] > mGroundMaxTime / 0.02) - { - playerFaultTime[unum][idx]++; - } -@@ -346,7 +346,7 @@ void SoccerRuleAspect::AnalyseFaults(TTe - playerFaultTime[unum][idx]++; - } - // I am the goalie and I and not standing for too much time -- else if (unum == 1 && playerNotStanding[unum][idx] > mGoalieNotStandingMaxTime / 0.02) -+ else if (unum == 1 && playerNotStanding[unum][idx] > mGoalieNotStandingMaxTime / 0.02) - { - playerFaultTime[unum][idx]++; - } -@@ -354,11 +354,11 @@ void SoccerRuleAspect::AnalyseFaults(TTe - { - playerFaultTime[unum][idx]=0; - } -- } -+ } - } - - --salt::Vector3f SoccerRuleAspect::RepositionOutsidePos(salt::Vector3f posIni, int unum, TTeamIndex idx) -+salt::Vector3f SoccerRuleAspect::RepositionOutsidePos(salt::Vector3f posIni, int unum, TTeamIndex idx) - { - salt::Vector3f pos; - // Choose x side based on team -@@ -396,12 +396,12 @@ SoccerRuleAspect::ClearPlayersAutomatic( - if (playerFaultTime[unum][idx] > mMaxFaultTime / 0.02) - { - // I am not a very good soccer player... I am violating the rules... -- salt::Vector3f new_pos = RepositionOutsidePos(ballPos, unum, idx); -+ salt::Vector3f new_pos = RepositionOutsidePos(ballPos, unum, idx); - //Calculate my Reposition pos outside of the field -- SoccerBase::MoveAgent(agent_aspect, new_pos); -+ SoccerBase::MoveAgent(agent_aspect, new_pos); - //Oh my God!! I am flying!! I am going outside of the field - ResetFaultCounterPlayer(unum, idx); -- //cout << "*********Player Repos Num: " << unum << " Team: " << team << " Pos: " << new_pos << endl; -+ //cout << "*********Player Repos Num: " << unum << " Team: " << team << " Pos: " << new_pos << endl; - } - } - } -@@ -1231,7 +1231,7 @@ SoccerRuleAspect::Update(float deltaTime - << playMode << "\n"; - break; - } -- -+ - // Simple Referee - AutomaticSimpleReferee(playMode); - } -@@ -1291,9 +1291,9 @@ SoccerRuleAspect::UpdateCachedInternal() - float penaltyLength, penaltyWidth; - SoccerBase::GetSoccerVar(*this,"PenaltyLength",penaltyLength); - SoccerBase::GetSoccerVar(*this,"PenaltyWidth",penaltyWidth); -- -+ - // auto ref parameters -- SoccerBase::GetSoccerVar(*this,"NotStandingMaxTime",mNotStandingMaxTime); -+ SoccerBase::GetSoccerVar(*this,"NotStandingMaxTime",mNotStandingMaxTime); - SoccerBase::GetSoccerVar(*this,"GoalieNotStandingMaxTime",mGoalieNotStandingMaxTime); - SoccerBase::GetSoccerVar(*this,"GroundMaxTime",mGroundMaxTime); - SoccerBase::GetSoccerVar(*this,"GoalieGroundMaxTime",mGoalieGroundMaxTime); -@@ -1753,7 +1753,7 @@ SoccerRuleAspect::ResetAgentSelection() - SoccerBase::TAgentStateList agent_states; - if (SoccerBase::GetAgentStates(*mBallState.get(), agent_states, TI_NONE)) - { -- -+ - SoccerBase::TAgentStateList::const_iterator i; - for (i = agent_states.begin(); i != agent_states.end(); ++i) - (*i)->UnSelect(); -@@ -1768,7 +1768,7 @@ SoccerRuleAspect::SelectNextAgent() - if (SoccerBase::GetAgentStates(*mBallState.get(), agent_states, TI_NONE) && agent_states.size() > 0) - { - boost::shared_ptr first = agent_states.front(); -- -+ - SoccerBase::TAgentStateList::const_iterator i; - for (i = agent_states.begin(); i != agent_states.end(); ++i) - { -@@ -1784,7 +1784,7 @@ SoccerRuleAspect::SelectNextAgent() - return; - } - } -- -+ - // No agent selected, select first - first->Select(); - } diff -Nru rcssserver3d-0.6.5/debian/patches/debian-changes-0.6.5-6maverick3 rcssserver3d-0.6.6/debian/patches/debian-changes-0.6.5-6maverick3 --- rcssserver3d-0.6.5/debian/patches/debian-changes-0.6.5-6maverick3 2011-04-27 12:22:58.000000000 +0000 +++ rcssserver3d-0.6.6/debian/patches/debian-changes-0.6.5-6maverick3 1970-01-01 00:00:00.000000000 +0000 @@ -1,401 +0,0 @@ -Description: Upstream changes introduced in version 0.6.5-6maverick3 - This patch has been created by dpkg-source during the package build. - Here's the last changelog entry, hopefully it gives details on why - those changes were made: - . - rcssserver3d (0.6.5-6maverick3) maverick; urgency=high - . - * Official Release - * NEWS: - * RELEASE: - - updated for 0.6.5 to reflect removing an opponent from a touch group when - there are more opponents in the group than teammates - . - * plugin/soccer/soccerruleaspect/soccerruleaspect.h: - * plugin/soccer/soccerruleaspect/soccerruleaspect.cpp - (SoccerRuleAspect::CheckGoal): - - if goal recorder's cannot detect any goals, geometrically check to - make sure that no goal is actually happened. Thanks to Luis for starting - the effort and Mahdi for the initial code for calculating where the ball - crosses the goal geometrically. - (SoccerRuleAspect::AnalyseTouchGroups): - - reposition a player from a team with more players in a touch group. Thanks - to Nexus3D (Mehdi?) for the initial patch. It intended to reposition the - player who joined last even from the opponent team, but we don't have - this info now so remove an unspecified player from the opponent if the - last player is not going to be removed. - . - The person named in the Author field signed this changelog entry. -Author: Hossein Ansari - ---- -The information above should follow the Patch Tagging Guidelines, please -checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here -are templates for supplementary fields that you might want to add: - -Origin: , -Bug: -Bug-Debian: http://bugs.debian.org/ -Bug-Ubuntu: https://launchpad.net/bugs/ -Forwarded: -Reviewed-By: -Last-Update: - ---- rcssserver3d-0.6.5.orig/ChangeLog -+++ rcssserver3d-0.6.5/ChangeLog -@@ -1,7 +1,23 @@ --2011-04-05 Hedayat Vatankhah -+2011-04-21 Hedayat Vatankhah - -- * rcssserver3d/naosoccersim.rb: -- - increased goal depth (fix goal count bug :P) -+ * NEWS: -+ * RELEASE: -+ - updated for 0.6.5 to reflect removing an opponent from a touch group when -+ there are more opponents in the group than teammates -+ -+ * plugin/soccer/soccerruleaspect/soccerruleaspect.h: -+ * plugin/soccer/soccerruleaspect/soccerruleaspect.cpp -+ (SoccerRuleAspect::CheckGoal): -+ - if goal recorder's cannot detect any goals, geometrically check to -+ make sure that no goal is actually happened. Thanks to Luis for starting -+ the effort and Mahdi for the initial code for calculating where the ball -+ crosses the goal geometrically. -+ (SoccerRuleAspect::AnalyseTouchGroups): -+ - reposition a player from a team with more players in a touch group. Thanks -+ to Nexus3D (Mehdi?) for the initial patch. It intended to reposition the -+ player who joined last even from the opponent team, but we don't have -+ this info now so remove an unspecified player from the opponent if the -+ last player is not going to be removed. - - 2011-03-28 Hedayat Vatankhah - ---- rcssserver3d-0.6.5.orig/NEWS -+++ rcssserver3d-0.6.5/NEWS -@@ -12,7 +12,9 @@ The automated referee now enforces two n - a high number of collisions in 9 vs 9 games: - - If an agent is in touch with more than 2 agents (including himself), and he - wasn't in such a situation in the previous time step - which means he is the -- last to join the group - he is relocated outside of the field. -+ last to join the group - he is relocated outside of the field. However, if -+ the number of opponents in the group are more than teammates, an unspecified -+ opponent will be relocated instead. - - If it is not clear which agent joined the group last, e.g. when 3 players - were all separate at time t, but were all touching each other in time t + 1, - an agent is chosen at random for relocation. ---- rcssserver3d-0.6.5.orig/rcssserver3d/naosoccersim.rb -+++ rcssserver3d-0.6.5/rcssserver3d/naosoccersim.rb -@@ -41,7 +41,7 @@ addSoccerVar('FieldLength', 21.0) - addSoccerVar('FieldWidth', 14.0) - addSoccerVar('FieldHeight', 40.0) - addSoccerVar('GoalWidth', 2.1) --addSoccerVar('GoalDepth', 1.0) -+addSoccerVar('GoalDepth', 0.6) - addSoccerVar('GoalHeight', 0.8) - addSoccerVar('PenaltyLength',1.8) - addSoccerVar('PenaltyWidth',3.9) ---- rcssserver3d-0.6.5.orig/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp -+++ rcssserver3d-0.6.5/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp -@@ -4,7 +4,7 @@ - Fri May 9 2003 - Copyright (C) 2002,2003 Koblenz University - Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group -- $Id: soccerruleaspect.cpp 253 2011-03-21 22:27:45Z sgvandijk $ -+ $Id: soccerruleaspect.cpp 269 2011-04-21 13:55:47Z hedayat $ - - 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 -@@ -84,7 +84,7 @@ SoccerRuleAspect::MoveBall(const Vector3 - } - - /* Uses only Ball and Players positions and detects overcrowind near ball and areas and --players innappropriate behavior (laying on the ground or not walking for too much time) */ -+players inappropriate behavior (laying on the ground or not walking for too much time) */ - void - SoccerRuleAspect::AutomaticSimpleReferee(TPlayMode playMode) - { -@@ -98,11 +98,13 @@ SoccerRuleAspect::AutomaticSimpleReferee - { - CalculateDistanceArrays(TI_LEFT); // Calculates distance arrays for left team - CalculateDistanceArrays(TI_RIGHT); // Calculates distance arrays for right team -- AnalyseFaults(TI_LEFT); // Analyses simple faults for the left team -- AnalyseFaults(TI_RIGHT); // Analyses simple faults for the right team -+ AnalyseFaults(TI_LEFT); // Analyzes simple faults for the left team -+ AnalyseFaults(TI_RIGHT); // Analyzes simple faults for the right team - AnalyseTouchGroups(TI_LEFT); - AnalyseTouchGroups(TI_RIGHT); -- // Only apply rules during play-on -+ -+ // Only apply rules during play-on, leaves some time for agents to -+ // solve it themselves - if (playMode == PM_PlayOn) - { - ClearPlayersAutomatic(TI_LEFT); // enforce standing and not overcrowding rules for left team -@@ -275,12 +277,39 @@ void SoccerRuleAspect::AnalyseTouchGroup - SoccerBase::TAgentStateList::iterator i = agent_states.begin(); - for (; i != agent_states.end(); ++i) - { -+ boost::shared_ptr touchGroup = (*i)->GetOldTouchGroup(); -+ - // Wasn't touching before, joined group making group too large -- if ((*i)->GetOldTouchGroup()->size() == 1 && (*i)->GetTouchGroup()->size() > mMaxTouchGroupSize) -+ if (touchGroup->size() == 1 && touchGroup->size() > mMaxTouchGroupSize) - { -- playerFaultTime[(*i)->GetUniformNumber()][idx]++; -- // Remove player from touch group so no more agents are replaced -- (*i)->GetTouchGroup()->erase(*i); -+ // determine the team that has more players in the touch group -+ int pl[3] = { 0 }; -+ TTeamIndex oppIdx; -+ TouchGroup::iterator oppIt; // stores the last opponent in touch group -+ for (TouchGroup::iterator agentIt = touchGroup->begin(); -+ agentIt != touchGroup->end(); ++agentIt) -+ { -+ pl[(*agentIt)->GetTeamIndex()]++; -+ if ((*agentIt)->GetTeamIndex() != idx) -+ { -+ oppIdx = (*agentIt)->GetTeamIndex(); -+ oppIt = agentIt; -+ } -+ } -+ -+ if (pl[idx] >= touchGroup->size() - pl[idx]) -+ { -+ playerFaultTime[(*i)->GetUniformNumber()][idx]++; -+ // Remove player from touch group so no more agents are replaced -+ touchGroup->erase(*i); -+ } -+ else -+ { -+ // I am the last one to enter the group, but the number of -+ // opponents in the group are more than us -+ playerFaultTime[(*oppIt)->GetUniformNumber()][oppIdx]++; -+ touchGroup->erase(*oppIt); -+ } - } - } - } -@@ -1025,9 +1054,35 @@ SoccerRuleAspect::CheckGoal() - { - // check if the ball is in one of the goals - TTeamIndex idx = mBallState->GetGoalState(); -+ - if (idx == TI_NONE) - { -- return false; -+ const salt::Vector3f ballPos = mBallBody->GetPosition(); -+ const float xDist2Goal = fabs(ballPos.x()) - mGoalBallLineX; -+ -+ // check if ball is completely out of the field -+ if (xDist2Goal < 0) -+ return false; -+ -+ salt::Vector3f normBVel = mBallBody->GetVelocity(); -+ // ball should be inside the field recently (assumes that the simulation -+ // step size is smaller than 1 second) -+ if (ballPos.x() - normBVel.x() > mGoalBallLineX) -+ return false; -+ -+ normBVel.Normalize(); -+ float velCos = normBVel.x(); -+ float dist = xDist2Goal / velCos; -+ salt::Vector3f crossPoint = ballPos - normBVel * dist; -+ -+ if (fabs(crossPoint.y()) < mGoalWidth / 2.0 && -+ crossPoint.z() < mGoalHeight) -+ { -+ if (ballPos.x() < 0) -+ idx = TI_LEFT; -+ else -+ idx = TI_RIGHT; -+ } - } - - // score the lucky team -@@ -1281,6 +1336,7 @@ SoccerRuleAspect::UpdateCachedInternal() - SoccerBase::GetSoccerVar(*this,"FieldLength",mFieldLength); - SoccerBase::GetSoccerVar(*this,"FieldWidth",mFieldWidth); - SoccerBase::GetSoccerVar(*this,"GoalWidth",mGoalWidth); -+ SoccerBase::GetSoccerVar(*this,"GoalHeight",mGoalHeight); - SoccerBase::GetSoccerVar(*this,"FreeKickDistance",mFreeKickDist); - SoccerBase::GetSoccerVar(*this,"FreeKickMoveDist",mFreeKickMoveDist); - SoccerBase::GetSoccerVar(*this,"GoalKickDist",mGoalKickDist); -@@ -1324,6 +1380,8 @@ SoccerRuleAspect::UpdateCachedInternal() - -(penaltyWidth + mGoalWidth)/2.0), - Vector2f(-mFieldLength/2.0, - (penaltyWidth + mGoalWidth)/2.0)); -+ -+ mGoalBallLineX = mFieldLength / 2.0 + mBallRadius; - } - - void ---- rcssserver3d-0.6.5.orig/plugin/soccer/soccerruleaspect/soccerruleaspect.h -+++ rcssserver3d-0.6.5/plugin/soccer/soccerruleaspect/soccerruleaspect.h -@@ -4,7 +4,7 @@ - Fri May 9 2003 - Copyright (C) 2002,2003 Koblenz University - Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group -- $Id: soccerruleaspect.h 253 2011-03-21 22:27:45Z sgvandijk $ -+ $Id: soccerruleaspect.h 268 2011-04-20 23:19:27Z hedayat $ - - 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 -@@ -45,7 +45,7 @@ class SoccerRuleAspect : public SoccerCo - { - public: - typedef std::list > TAgentStateList; -- -+ - public: - SoccerRuleAspect(); - virtual ~SoccerRuleAspect(); -@@ -64,13 +64,13 @@ public: - \param pos position where the ball should be dropped- - */ - void DropBall(salt::Vector3f pos); -- -+ - /** Calculates the out of the field reposition pos for a given agent with unum and team idx - Agents are repositioned outside of the field near the mid field line on the opposite yy side - regarding the ball position - */ - salt::Vector3f RepositionOutsidePos(salt::Vector3f initPos, 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 - */ -@@ -80,7 +80,7 @@ public: - */ - void ClearPlayersAutomatic(TTeamIndex idx); - -- /** Calculates distance arrays needed for repositioning players -+ /** Calculates distance arrays needed for repositioning players - */ - void CalculateDistanceArrays(TTeamIndex idx); - -@@ -99,18 +99,18 @@ public: - */ - void ResetFaultCounterPlayer(int unum, TTeamIndex idx); - -- /**Analyse Faults from players and increase fault counter of offending players -+ /**Analyse Faults from players and increase fault counter of offending players - */ - void AnalyseFaults(TTeamIndex idx); - - /** Check whether too many agents are touching - */ - void AnalyseTouchGroups(TTeamIndex idx); -- -+ - /** Reset the touch groups - */ - void ResetTouchGroups(TTeamIndex idx); -- -+ - /** Automatic Referee that clears players that violate the rules - */ - void AutomaticSimpleReferee(TPlayMode playMode); -@@ -138,19 +138,19 @@ public: - void ClearPlayersWithException(const salt::Vector3f& pos, float radius, float min_dist, - TTeamIndex idx, boost::shared_ptr agentState); - -- /** -+ /** - * get the size of field, i.e. length and width -- * -- * -+ * -+ * - * @return the length and width - */ - salt::Vector2f GetFieldSize() const; -- -- -+ -+ - void ResetAgentSelection(); -- -+ - void SelectNextAgent(); -- -+ - void ClearSelectedPlayers(); - - protected: -@@ -238,7 +238,7 @@ protected: - */ - void ClearPlayers(const salt::AABB2& box, float min_dist, TTeamIndex idx); - -- /** -+ /** - * clear the player before kick off, if the team is the kick off - * side, the robots can be on his own half and the center circle, - * otherwise the robots can only be on his own half except the -@@ -247,7 +247,7 @@ protected: - * @param idx the team which kick off - */ - void ClearPlayersBeforeKickOff(TTeamIndex idx); -- -+ - protected: - /** reference to the body node of the Ball */ - boost::shared_ptr mBallBody; -@@ -277,6 +277,10 @@ protected: - float mFieldWidth; - /** the goal width (in meters) */ - float mGoalWidth; -+ /** the goal height (in meters) */ -+ float mGoalHeight; -+ /** the absolute x coordinate of the goal which ball should pass (in meters) */ -+ float mGoalBallLineX; - /** the point on the field where we do the kick in, free kick etc. */ - salt::Vector3f mFreeKickPos; - /** the distance opponents have to keep during free kicks, kick ins etc. */ -@@ -295,28 +299,28 @@ protected: - - //FCP 2010 - New Parameters (added by FCPortugal for Singapure 2010) - /** max time player may be sitted or laying down before being repositioned */ -- int mNotStandingMaxTime; -+ int mNotStandingMaxTime; - /** max time player may be on the ground before being repositioned */ -- int mGroundMaxTime; -+ int mGroundMaxTime; - /** max time goalie may be sitted or laying down before being repositioned */ -- int mGoalieNotStandingMaxTime; -+ int mGoalieNotStandingMaxTime; - /** max time goalie (player number 1) may be on the ground before being repositioned */ - int mGoalieGroundMaxTime; - /** min dist for second closest of team before being repositioned */ -- float mMin2PlDistance; -+ float mMin2PlDistance; - /** min dist for third closest of team before being repositioned */ -- float mMin3PlDistance; -+ float mMin3PlDistance; - /** min dist for closest Opponent to ball in order to use repositions for the second and third player*/ -- float mMinOppDistance; -+ float mMinOppDistance; - /** maximum number of players of the defending team that may be inside own penalty area */ -- int mMaxPlayersInsideOwnArea; -+ int mMaxPlayersInsideOwnArea; - /** maximum number of players that may be in a single touch group */ - int mMaxTouchGroupSize; - /** maximum time allowed for a player to commit a positional fault before being repositioned */ -- int mMaxFaultTime; -+ int mMaxFaultTime; - /* Useful arrays for dealing with agent state an faults */ - salt::Vector3f playerPos[12][3]; //Players Positions - not used -- int playerGround[12][3]; //Time Players are on the ground -+ int playerGround[12][3]; //Time Players are on the ground - int playerNotStanding[12][3]; //Time Players are not standing (head up for more than 0.5s) - int playerInsideOwnArea[12][3]; //Player is inside own area - int prevPlayerInsideOwnArea[12][3]; //Player was inside own area last cycle -@@ -329,7 +333,7 @@ protected: - int numPlInsideOwnArea[3]; //Number of players inside own area - int closestPlayer[3]; //Closest Player from each team - float closestPlayerDist[3]; //Closest Player distance to ball from each team -- /* FCP 2010 - New Parameters */ -+ /* FCP 2010 - New Parameters */ - - // areas where opponents are not allowed in certain play modes - /** bounding box for the right half of the field */ diff -Nru rcssserver3d-0.6.5/debian/patches/series rcssserver3d-0.6.6/debian/patches/series --- rcssserver3d-0.6.5/debian/patches/series 2011-04-27 12:22:58.000000000 +0000 +++ rcssserver3d-0.6.6/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -debian-changes-0.6.5-1maverick1 -debian-changes-0.6.5-6maverick3 diff -Nru rcssserver3d-0.6.5/debian/rcssserver3d1.dirs rcssserver3d-0.6.6/debian/rcssserver3d1.dirs --- rcssserver3d-0.6.5/debian/rcssserver3d1.dirs 2011-03-29 06:54:35.000000000 +0000 +++ rcssserver3d-0.6.6/debian/rcssserver3d1.dirs 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib diff -Nru rcssserver3d-0.6.5/debian/rcssserver3d1.install rcssserver3d-0.6.6/debian/rcssserver3d1.install --- rcssserver3d-0.6.5/debian/rcssserver3d1.install 2011-03-29 06:54:35.000000000 +0000 +++ rcssserver3d-0.6.6/debian/rcssserver3d1.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/lib*.so.* diff -Nru rcssserver3d-0.6.5/debian/rcssserver3d-dev.dirs rcssserver3d-0.6.6/debian/rcssserver3d-dev.dirs --- rcssserver3d-0.6.5/debian/rcssserver3d-dev.dirs 2011-03-29 06:54:35.000000000 +0000 +++ rcssserver3d-0.6.6/debian/rcssserver3d-dev.dirs 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -usr/lib -usr/include diff -Nru rcssserver3d-0.6.5/debian/rcssserver3d-dev.install rcssserver3d-0.6.6/debian/rcssserver3d-dev.install --- rcssserver3d-0.6.5/debian/rcssserver3d-dev.install 2011-03-29 06:54:50.000000000 +0000 +++ rcssserver3d-0.6.6/debian/rcssserver3d-dev.install 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -usr/include/* - diff -Nru rcssserver3d-0.6.5/debian/README.Debian rcssserver3d-0.6.6/debian/README.Debian --- rcssserver3d-0.6.5/debian/README.Debian 2011-03-29 06:54:35.000000000 +0000 +++ rcssserver3d-0.6.6/debian/README.Debian 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -rcssserver3d for Debian ------------------------ - - - - -- Hossein Ansari Tue, 29 Mar 2011 11:24:34 +0430 diff -Nru rcssserver3d-0.6.5/debian/README.source rcssserver3d-0.6.6/debian/README.source --- rcssserver3d-0.6.5/debian/README.source 2011-03-29 06:54:35.000000000 +0000 +++ rcssserver3d-0.6.6/debian/README.source 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -rcssserver3d for Debian ------------------------ - - - - - - diff -Nru rcssserver3d-0.6.5/debian/rules rcssserver3d-0.6.6/debian/rules --- rcssserver3d-0.6.5/debian/rules 2011-03-29 06:54:50.000000000 +0000 +++ rcssserver3d-0.6.6/debian/rules 2012-05-26 22:40:05.000000000 +0000 @@ -15,8 +15,8 @@ # shared library versions, option 1 -version=2.0.5 -major=2 +version=0.6.6 +major=0 # option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so #version=`ls src/.libs/lib*.so.* | \ # awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'` diff -Nru rcssserver3d-0.6.5/NEWS rcssserver3d-0.6.6/NEWS --- rcssserver3d-0.6.5/NEWS 2011-03-26 12:12:49.000000000 +0000 +++ rcssserver3d-0.6.6/NEWS 2012-05-22 23:18:54.000000000 +0000 @@ -1,3 +1,64 @@ +[0.6.6] +It's time for a new release! This release comes with a number of bug fixes and +several minor enhancements here and there. Now, you can run the server for +two complete halves. Teams now change their sides in the second half. Also, +automatic kick off and automatic quit modes are added. Field dimensions are +also increased to 20x30 meters, and free kick distance is 2.0 meters now. +More detailed information about this release follows: + +* Rule Changes: + - automatic referee now enforces rules whenever players are permitted to + play, rather than only in playon play mode. + - it is no longer possible to score directly from kick off, the ball should + at least touch another player before going into the goal + - in kickoff playmode, the kicker cannot touch the ball again until another + player touches it. + +* Field/Dimension Changes: + - New dimensions: 20x30 + - Free kick distance: 2.0 + - Corner kick position: in the middle point between goal and corner of the + field, to facilitate faster corner kicks. + - Nao's foot height is now 0.02 rather than 0.03. Ankle's position changed + accordingly + +* Several Bug fixes. Some notable ones are: + - Penalty lines and middle circle are now visible at their actual position + (Thanks to Marcus for his bug report, and Sander). + - Fixed a small bug in parsing move paramter (Thanks to Andreas Seekircher) + - Fixed a mistake which prevented from touch group rules to be applied at all + - Fixed a small bug in goal counting which cause this function to always + count a goal when ball moved out of the field + +* Enhance Automatic Kickoff Support: + - Changed default value of 'WaitBeforeKickOff' to 30, since 5 seconds + is too small for any team to start. + - WaitBeforeKickOff is now calculated from when the first agent connects + rather than from the beginning of the before kickoff playmode (when the + simulator is started) + - A game can be started with kick off for the left team, or using 'coin toss' + to determine which team should start the game. CoinTossForKickOff variable + in naosoccersim.rb can be used to change the behavior. It is disabled + by default. + +* Enhance Support for 'Second Half': + - Automatic Kick Off mode assigns Kick off to the correct team in the second + half + - Change teams' sides in the second half if enabled (enabled by default). It + can be disabled using ChangeSidesInSecondHalf variable in naosoccersim.rb. + +* Automatic Quit: + - In Automatic Quit mode rcsssever3d shuts down automatically when the game + is over. It is disabled by default but can be enabled using 'AutomaticQuit' + variable in naosoccersim.rb + +* Other Enhancements: + - The location of init scripts (e.g. zeitgeist.rb) can now be specified using + --init-script-prefix (you still can put most of the scripts and data files + like rsg/ directory inside your ~/.simspark/ instead). + - Better Windows support + - Support creating Windows binaries under Linux using MinGW + [0.6.5] This release comes with a number of enhancements and some bug fixes. Most notably, the automated referee is improved to prevent many agents to collide @@ -12,7 +73,9 @@ a high number of collisions in 9 vs 9 games: - If an agent is in touch with more than 2 agents (including himself), and he wasn't in such a situation in the previous time step - which means he is the - last to join the group - he is relocated outside of the field. + last to join the group - he is relocated outside of the field. However, if + the number of opponents in the group are more than teammates, an unspecified + opponent will be relocated instead. - If it is not clear which agent joined the group last, e.g. when 3 players were all separate at time t, but were all touching each other in time t + 1, an agent is chosen at random for relocation. diff -Nru rcssserver3d-0.6.5/plugin/soccer/CMakeLists.txt rcssserver3d-0.6.6/plugin/soccer/CMakeLists.txt --- rcssserver3d-0.6.5/plugin/soccer/CMakeLists.txt 2011-03-26 12:12:48.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/CMakeLists.txt 2012-05-22 23:18:53.000000000 +0000 @@ -47,6 +47,7 @@ hmdp_effector/naospecific.h line/line.h agentcollisionhandler/agentcollisionhandler.h + rcs3dmonitor/rcs3dmonitor.h ) set(soccer_LIB_SRCS @@ -123,6 +124,8 @@ line/line_c.cpp agentcollisionhandler/agentcollisionhandler.cpp agentcollisionhandler/agentcollisionhandler_c.cpp + rcs3dmonitor/rcs3dmonitor.cpp + rcs3dmonitor/rcs3dmonitor_c.cpp ) include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${FREETYPE_INCLUDE_DIRS} diff -Nru rcssserver3d-0.6.5/plugin/soccer/export.cpp rcssserver3d-0.6.6/plugin/soccer/export.cpp --- rcssserver3d-0.6.5/plugin/soccer/export.cpp 2011-03-26 12:12:48.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/export.cpp 2012-05-22 23:18:53.000000000 +0000 @@ -4,7 +4,7 @@ Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group - $Id: export.cpp 253 2011-03-21 22:27:45Z sgvandijk $ + $Id: export.cpp 285 2011-06-23 18:00:49Z sgvandijk $ 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 @@ -55,6 +55,7 @@ #include "hmdp_effector/hmdpperceptor.h" #include "line/line.h" #include "agentcollisionhandler/agentcollisionhandler.h" +#include "rcs3dmonitor/rcs3dmonitor.h" ZEITGEIST_EXPORT_BEGIN() ZEITGEIST_EXPORT(SoccerControlAspect); @@ -92,5 +93,6 @@ ZEITGEIST_EXPORT(HMDPEffector); ZEITGEIST_EXPORT(Line); ZEITGEIST_EXPORT(AgentCollisionHandler); + ZEITGEIST_EXPORT(RCS3DMonitor); ZEITGEIST_EXPORT_END() diff -Nru rcssserver3d-0.6.5/plugin/soccer/gamestateaspect/gamestateaspect.cpp rcssserver3d-0.6.6/plugin/soccer/gamestateaspect/gamestateaspect.cpp --- rcssserver3d-0.6.5/plugin/soccer/gamestateaspect/gamestateaspect.cpp 2011-03-26 12:12:48.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/gamestateaspect/gamestateaspect.cpp 2012-05-22 23:18:53.000000000 +0000 @@ -4,7 +4,7 @@ Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group - $Id: gamestateaspect.cpp 181 2010-02-28 10:55:34Z marianbuchta $ + $Id: gamestateaspect.cpp 316 2012-05-22 22:33:15Z hedayat $ 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 @@ -40,11 +40,12 @@ mGameHalf = GH_FIRST; mScore[0] = 0; mScore[1] = 0; - mLastKickOff = TI_NONE; - //mSecondHalfKickOff = TI_NONE; + mLastKickOffGameHalf = GH_NONE; + mNextHalfKickOff = TI_NONE; mLeftInit = Vector3f(0,0,0); mRightInit = Vector3f(0,0,0); mFinished = false; + mGamePaused = true; } GameStateAspect::~GameStateAspect() @@ -97,77 +98,35 @@ } -// let the monitor handle who kicks off in 2nd half. void GameStateAspect::KickOff(TTeamIndex ti) { - // throw a coin to determine which team kicks off + // throw a coin to determine which team kicks off, except if a new half + // is started in which the opposite team should kick off if (ti == TI_NONE) { ti = (salt::UniformRNG<>(0,1)() <= 0.5) ? TI_LEFT : TI_RIGHT; + + if (mGameHalf != mLastKickOffGameHalf) + { + if (mNextHalfKickOff != TI_NONE) + ti = mNextHalfKickOff; + + bool changeSides; + SoccerBase::GetSoccerVar(*this, "ChangeSidesInSecondHalf", + changeSides); + + if (changeSides) + mNextHalfKickOff = ti; + else + mNextHalfKickOff = SoccerBase::OpponentTeam(ti); + } } SetPlayMode((ti == TI_LEFT) ? PM_KickOff_Left : PM_KickOff_Right); - - if (mLastKickOff == TI_NONE) - mLastKickOff = ti; + mLastKickOffGameHalf = mGameHalf; } - - -// void -// GameStateAspect::KickOff(TTeamIndex ti) -// { -// if (mGameHalf == GH_FIRST) -// { -// // throw a coin to determine which team kicks off -// if (ti == TI_NONE) -// { -// ti = (salt::UniformRNG<>(0,1)() <= 0.5) ? TI_LEFT : TI_RIGHT; -// } - -// SetPlayMode((ti == TI_LEFT) ? PM_KickOff_Left : PM_KickOff_Right); - -// if (mLastKickOff == TI_NONE) -// mLastKickOff = ti; -// } -// else -// { -// // in the second half, let the opposite team kick off -// SetPlayMode((mLastKickOff == TI_LEFT) ? PM_KickOff_Right : PM_KickOff_Left); -// } -// } -//--------------------------------------------- -// void -// GameStateAspect::KickOff(TTeamIndex ti) -// { -// if (mGameHalf == GH_FIRST) -// { -// // throw a coin to determine which team kicks off -// if (ti == TI_NONE) -// { -// ti = (salt::UniformRNG<>(0,1)() <= 0.5) ? TI_LEFT : TI_RIGHT; -// } - -// SetPlayMode((ti == TI_LEFT) ? PM_KickOff_Left : PM_KickOff_Right); - -// mLastKickOff = ti; -// if (mSecondHalfKickOff == TI_NONE) -// { -// //clog << "setting mSecondHalfKickOff\n"; - -// mSecondHalfKickOff = -// (mLastKickOff == TI_LEFT) ? TI_RIGHT : TI_LEFT; -// } -// } -// else -// { -// // in the second half, let the opposite team kick off -// SetPlayMode((mSecondHalfKickOff == TI_LEFT) ? PM_KickOff_Left : PM_KickOff_Right); -// } -// } - -//--------------------------------------------- TTime GameStateAspect::GetTime() const { @@ -481,6 +440,11 @@ fieldWidth/2 - mAgentRadius*2, mAgentRadius ); + + bool coinTossKickOff = true; + SoccerBase::GetSoccerVar(*this, "CoinTossForKickOff", coinTossKickOff); + if (!coinTossKickOff) + mNextHalfKickOff = TI_LEFT; } int @@ -516,3 +480,13 @@ mScore[0] = scoreLeft; mScore[1] = scoreRight; } + +bool GameStateAspect::IsPaused() const +{ + return mGamePaused; +} + +void GameStateAspect::SetPaused(bool paused) +{ + mGamePaused = paused; +} diff -Nru rcssserver3d-0.6.5/plugin/soccer/gamestateaspect/gamestateaspect.h rcssserver3d-0.6.6/plugin/soccer/gamestateaspect/gamestateaspect.h --- rcssserver3d-0.6.5/plugin/soccer/gamestateaspect/gamestateaspect.h 2011-03-26 12:12:48.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/gamestateaspect/gamestateaspect.h 2012-05-22 23:18:53.000000000 +0000 @@ -4,7 +4,7 @@ Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group - $Id: gamestateaspect.h 21 2009-01-14 14:38:57Z yxu $ + $Id: gamestateaspect.h 315 2012-05-22 18:22:38Z hedayat $ 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 @@ -112,6 +112,12 @@ /** sets the current game scores. useful if you start a game in the middle */ void SetScores(int scoreLeft, int scoreRight); + /** returns if the game is paused */ + bool IsPaused() const; + + /** sets the game running state (paused or not) */ + void SetPaused(bool paused); + protected: /** setup the init positions for the agents */ virtual void OnLink(); @@ -153,10 +159,10 @@ TGameHalf mGameHalf; /** the team that had the last KickOff */ - TTeamIndex mLastKickOff; + TGameHalf mLastKickOffGameHalf; -// /** the team that has to start the second half */ -// TTeamIndex mSecondHalfKickOff; + /** the team that has to start the next half */ + TTeamIndex mNextHalfKickOff; /** the names of the two teams */ std::string mTeamName[2]; @@ -175,8 +181,12 @@ /** the radius of an agent */ float mAgentRadius; + /** flag if the simulation should be stopped */ bool mFinished; + + /** flag if the game is running or paused (e.g. in goal_left/right state) */ + bool mGamePaused; }; DECLARE_CLASS(GameStateAspect); diff -Nru rcssserver3d-0.6.5/plugin/soccer/rcs3dmonitor/rcs3dmonitor_c.cpp rcssserver3d-0.6.6/plugin/soccer/rcs3dmonitor/rcs3dmonitor_c.cpp --- rcssserver3d-0.6.5/plugin/soccer/rcs3dmonitor/rcs3dmonitor_c.cpp 1970-01-01 00:00:00.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/rcs3dmonitor/rcs3dmonitor_c.cpp 2012-05-22 23:18:53.000000000 +0000 @@ -0,0 +1,29 @@ +/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- + + this file is part of rcssserver3D + Fri May 9 2003 + Copyright (C) 2002,2003 Koblenz University + Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group + $Id: sparkmonitor_c.cpp 3 2008-11-21 02:38:08Z hedayat $ + + 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. +*/ +#include "rcs3dmonitor.h" + +void +CLASS(RCS3DMonitor)::DefineClass() +{ + DEFINE_BASECLASS(oxygen/BaseParser); +} + diff -Nru rcssserver3d-0.6.5/plugin/soccer/rcs3dmonitor/rcs3dmonitor.cpp rcssserver3d-0.6.6/plugin/soccer/rcs3dmonitor/rcs3dmonitor.cpp --- rcssserver3d-0.6.5/plugin/soccer/rcs3dmonitor/rcs3dmonitor.cpp 1970-01-01 00:00:00.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/rcs3dmonitor/rcs3dmonitor.cpp 2012-05-22 23:18:53.000000000 +0000 @@ -0,0 +1,459 @@ +/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- + + this file is part of rcssserver3D + Fri May 9 2003 + Copyright (C) 2002,2003 Koblenz University + Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group + $Id: RCS3DMonitor.cpp 246 2011-02-18 18:44:14Z sgvandijk $ + + 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. +*/ +#include "rcs3dmonitor.h" +#include +#include +#include +#include +#include +#include + +using namespace kerosin; +using namespace oxygen; +using namespace zeitgeist; +using namespace boost; +using namespace salt; +using namespace std; + +RCS3DMonitor::RCS3DMonitor() : oxygen::MonitorSystem() +{ + mFullState = true; +} + +RCS3DMonitor::~RCS3DMonitor() +{ +} + +void RCS3DMonitor::ClearNodeCache() +{ + mNodeCache.clear(); +} + +void RCS3DMonitor::UpdateCached() +{ + MonitorSystem::UpdateCached(); + ClearNodeCache(); +} + +void RCS3DMonitor::OnLink() +{ + // setup SceneServer reference + mSceneServer = shared_dynamic_cast + (GetCore()->Get("/sys/server/scene")); + + if (mSceneServer.get() == 0) + { + GetLog()->Error() + << "(RCS3DMonitor) ERROR: SceneServer not found\n"; + } +} + +void RCS3DMonitor::OnUnlink() +{ + mSceneServer.reset(); + mActiveScene.reset(); + ClearNodeCache(); +} + +void RCS3DMonitor::ParseMonitorMessage(const std::string& data) +{ + // pass the received string on to all installed CommandParsers + TLeafList items; + ListChildrenSupportingClass(items); + + for ( + TLeafList::iterator iter = items.begin(); + iter != items.end(); + ++iter + ) + { + shared_static_cast(*iter) + ->ParseMonitorMessage(data); + } +} + +string RCS3DMonitor::GetMonitorInformation(const PredicateList& pList) +{ + stringstream ss; + mFullState = false; + DescribeCustomPredicates(ss,pList); + DescribeActiveScene(ss); + + return ss.str(); +} + +string RCS3DMonitor::GetMonitorHeaderInfo(const PredicateList& pList) +{ + stringstream ss; + mFullState = true; + ClearNodeCache(); + DescribeCustomPredicates(ss,pList); + DescribeActiveScene(ss); + + return ss.str(); +} + +void RCS3DMonitor::DescribeCustomPredicates(stringstream& ss,const PredicateList& pList) +{ + ss << "("; + + for ( + PredicateList::TList::const_iterator iter = pList.begin(); + iter != pList.end(); + ++iter + ) + { + const Predicate& pred = (*iter); + + ss << "("; + ss << pred.name; + + const ParameterList& paramList = pred.parameter; + ParameterList::TVector::const_iterator pIter = paramList.begin(); + + std::string param; + while ( + (pIter != paramList.end()) && + (paramList.AdvanceValue(pIter, param)) + ) + { + ss << " "; + ss << param; + } + + ss << ")"; + } + + ss << ")"; +} + +void RCS3DMonitor::DescribeBall(stringstream& ss, NodeCache& entry, boost::shared_ptr ball) +{ + if (mFullState) + { + ss << "(nd Ball"; + } else + { + ss << "(nd"; + } + + DescribeTransform(ss, entry, boost::shared_static_cast(ball), false); +} + +void RCS3DMonitor::DescribeBaseNode(stringstream& ss) +{ + if (mFullState) + { + ss << "(nd BN"; + } else + { + ss << "(nd"; + } +} + +void RCS3DMonitor::DescribeLight(stringstream& ss, boost::shared_ptr light) +{ + if (! mFullState) + { + return DescribeBaseNode(ss); + } + + ss << "(nd Light "; + + const RGBA& diff = light->GetDiffuse(); + ss << "(setDiffuse " << diff.r() << " " << diff.g() << " " + << diff.b() << " " << diff.a() << ") "; + + const RGBA& amb = light->GetAmbient(); + ss << "(setAmbient " << amb.r() << " " << amb.g() << " " + << amb.b() << " " << amb.a() << ") "; + + const RGBA& spec = light->GetSpecular(); + ss << "(setSpecular " << spec.r() << " " << spec.g() << " " + << spec.b() << " " << spec.a() << ")"; +} + +void RCS3DMonitor::DescribeTransform(stringstream& ss, NodeCache& entry, boost::shared_ptr transform, bool prefix) +{ + if (prefix) + if (mFullState) + { + ss << "(nd TRF"; + } else + { + ss << "(nd"; + } + + // include transform data only for fullstate or a modified + // transform node + const float precision = 0.005f; + const Matrix& mat = transform->GetLocalTransform(); + + bool update = false; + + if (mFullState) + { + update = true; + } else + { + const salt::Matrix& old = entry.transform; + + for (int i=0;i<16;++i) + { + const float d = fabs(old.m[i] - mat.m[i]); + + if (d > precision) + { + update = true; + break; + } + } + } + + if (update) + { + ss << " (SLT"; + + for (int i=0;i<16;++i) + { + ss << " " << mat.m[i]; + } + + ss << ")"; + + // update cache + entry.transform = mat; + } +} + +void RCS3DMonitor::DescribeMesh(stringstream& ss, boost::shared_ptr mesh) +{ + boost::shared_ptr singleMat = + shared_dynamic_cast(mesh); + + if (singleMat.get() != 0) + { + ss << "(nd SMN"; + } else + { + ss << "(nd StaticMesh"; + } + + if (mFullState || mesh->VisibleToggled()) + if (mesh->IsVisible()) + ss << " (setVisible 1)"; + else + ss << " (setVisible 0)"; + + if (! mFullState) + return; + + if (mesh->IsTransparent()) + { + ss << " (setTransparent)"; + } + + ss << " (load " << mesh->GetMeshName(); + + const ParameterList& params = mesh->GetMeshParameter(); + for ( + ParameterList::TVector::const_iterator iter = params.begin(); + iter != params.end(); + ++iter + ) + { + string str; + params.GetValue(iter,str); + ss << " " << str; + } + + ss << ")"; + + const Vector3f& scale = mesh->GetScale(); + + ss << " (sSc " + << scale[0] << " " + << scale[1] << " " + << scale[2] << ")"; + + if (singleMat.get() != 0) + { + boost::shared_ptr mat = singleMat->GetMaterial(); + if (mat.get() != 0) + { + ss << " (sMat " << mat->GetName() << ")"; + } + } + else{ + std::vector mats = mesh->GetMaterialNames(); + if ( !mats.empty() ){ + ss<<"(resetMaterials"; + for(std::vector::const_iterator iter = mats.begin(); + mats.end() != iter; ++iter){ + ss<<' '<<*iter; + } + ss<<')'; + } + } +} + +RCS3DMonitor::NodeCache* RCS3DMonitor::LookupNode(boost::shared_ptr node) +{ + if (node.get() == 0) + { + assert(false); + return 0; + } + + // Check whether we already have this node in cache + TNodeCacheMap::iterator iter = mNodeCache.find(node); + if (iter != mNodeCache.end()) + { + return &((*iter).second); + } + + // Ball + boost::shared_ptr ball + = shared_dynamic_cast(node); + if (ball.get() != 0) + { + mNodeCache[node] + = NodeCache(NT_BALL, ball->GetLocalTransform()); + + return &(mNodeCache[node]); + } + + // Transform + boost::shared_ptr transform + = shared_dynamic_cast(node); + if (transform.get() != 0) + { + mNodeCache[node] + = NodeCache(NT_TRANSFORM, transform->GetLocalTransform()); + + return &(mNodeCache[node]); + } + + boost::shared_ptr mesh + = shared_dynamic_cast(node); + if (mesh.get() != 0) + { + mNodeCache[node] = NodeCache(NT_STATICMESH); + return &(mNodeCache[node]); + } + + boost::shared_ptr light + = shared_dynamic_cast(node); + if (light.get() != 0) + { + mNodeCache[node] = NodeCache(NT_LIGHT); + return &(mNodeCache[node]); + } + + // treat every other node type as a BaseNode + mNodeCache[node] = NodeCache(NT_BASE); + + return &(mNodeCache[node]); +} + +bool RCS3DMonitor::DescribeNode(stringstream& ss, boost::shared_ptr node) +{ + NodeCache* entry = LookupNode(node); + if (entry == 0) + { + // skip node + assert(false); + return false; + } + + switch (entry->type) + { + default: + assert(false); + // fall through + + case NT_BASE: + // skip node + return false; + + case NT_BALL: + DescribeBall + (ss, (*entry), shared_static_cast(node)); + + case NT_TRANSFORM: + DescribeTransform + (ss, (*entry), shared_static_cast(node)); + return true; + + case NT_STATICMESH: + DescribeMesh + (ss, shared_static_cast(node)); + return true; + + case NT_LIGHT: + DescribeLight + (ss, shared_static_cast(node)); + return true; + } +} + +void RCS3DMonitor::DescribeActiveScene(stringstream& ss) +{ + if (mSceneServer.get() == 0) + { + return; + } + + mActiveScene = mSceneServer->GetActiveScene(); + + if (mActiveScene.get() != 0) + { + if (mFullState) + { + ss << "(RSG 0 1)"; + } else + { + ss << "(RDS 0 1)"; + } + + ss << "("; + DescribeScene(ss,mActiveScene); + ss << ")"; + } +} + +void RCS3DMonitor::DescribeScene(stringstream& ss, boost::shared_ptr node) +{ + bool closeParen = DescribeNode(ss, node); + + TLeafList baseNodes = node->GetBaseNodeChildren(); + for (TLeafList::iterator i = baseNodes.begin(); i!= baseNodes.end(); ++i) + { + boost::shared_ptr baseNode = shared_dynamic_cast(*i); + DescribeScene(ss,baseNode); + } + + if (closeParen) + { + ss << ")"; + } +} diff -Nru rcssserver3d-0.6.5/plugin/soccer/rcs3dmonitor/rcs3dmonitor.h rcssserver3d-0.6.6/plugin/soccer/rcs3dmonitor/rcs3dmonitor.h --- rcssserver3d-0.6.5/plugin/soccer/rcs3dmonitor/rcs3dmonitor.h 1970-01-01 00:00:00.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/rcs3dmonitor/rcs3dmonitor.h 2012-05-22 23:18:53.000000000 +0000 @@ -0,0 +1,150 @@ +/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- + + this file is part of rcssserver3D + Fri May 9 2003 + Copyright (C) 2002,2003 Koblenz University + Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group + $Id: sparkmonitor.h 3 2008-11-21 02:38:08Z hedayat $ + + 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 RCS3DMONITOR_H__ +#define RCS3DMONITOR_H__ + +#include +#include +#include +#include +#include +#include +#include +#include "../ball/ball.h" + +class RCS3DMonitor : public oxygen::MonitorSystem +{ +public: + enum ENodeType + { + NT_BASE = 0, + NT_TRANSFORM, + NT_STATICMESH, + NT_LIGHT, + NT_BALL + }; + + struct NodeCache + { + public: + ENodeType type; + + /** the last local transform matrix sent to the client */ + salt::Matrix transform; + + public: + NodeCache(ENodeType nt = NT_BASE) + : type(nt) + { + } + + NodeCache(ENodeType nt, const salt::Matrix& t) + : type(nt), transform(t) + { + } + }; + + typedef std::map, NodeCache> TNodeCacheMap; + +public: + RCS3DMonitor(); + virtual ~RCS3DMonitor(); + + /** If a monitor sends information to the world model, this + * function is called to process it. + * @param data data sent from monitor to monitorsystem via SPADES. + */ + void ParseMonitorMessage(const std::string& data); + + /** This function will be called periodically to get information + * about the current state of the world. + * \param items holds a list of additional name value pairs. These + * predicates are collected from MonitorItem objects registered to + * the MonitorServer. The monitor should transfer them to the + * client if possible. + */ + virtual std::string GetMonitorInformation(const oxygen::PredicateList& pList); + + /** This function is called once for every MonitorSystem each time + * a new client connects. It should return any header/setup + * information that is needed. + * \param items holds a list of additional name value + * pairs. These predicates are collected from MonitorItem objects + * registered to the MonitorServer. The monitor should transfer + * them to the client if possible. + */ + virtual std::string GetMonitorHeaderInfo(const oxygen::PredicateList& pList); + + /** update variables from a script */ + virtual void UpdateCached(); + +protected: + virtual void OnLink(); + virtual void OnUnlink(); + + void ClearNodeCache(); + + /** This function looks the cached node entry in the node + cache. The entry is added to the cache if it does not exist + */ + NodeCache* LookupNode(boost::shared_ptr node); + + void DescribeCustomPredicates(std::stringstream& ss,const oxygen::PredicateList& pList); + void DescribeActiveScene(std::stringstream& ss); + void DescribeScene(std::stringstream& ss, + boost::shared_ptr node); + + /** This function writes the s-expression for the given node to + the given strinstream, omitting the closing parentheses. It + returns false if the node is skipped and no description is + created. Skipped nodes are invisible scene graph nodes. + */ + bool DescribeNode(std::stringstream& ss, + boost::shared_ptr node); + void DescribeBaseNode(std::stringstream& ss); + void DescribeBall(std::stringstream& ss, NodeCache& entry, + boost::shared_ptr ball); + void DescribeTransform(std::stringstream& ss, NodeCache& entry, + boost::shared_ptr transform, bool prefix = true); + void DescribeMesh(std::stringstream& ss, + boost::shared_ptr mesh); + void DescribeLight(std::stringstream& ss, + boost::shared_ptr light); + +protected: + /** cached reference to the SceneServer */ + boost::shared_ptr mSceneServer; + + /** cached reference to the current active scene */ + boost::shared_ptr mActiveScene; + + /** true, if the full state is generated */ + bool mFullState; + + /** cached node type and state */ + TNodeCacheMap mNodeCache; +}; + +DECLARE_CLASS(RCS3DMonitor); + +#endif // RCS3DMONITOR_H__ + diff -Nru rcssserver3d-0.6.5/plugin/soccer/restrictedvisionperceptor/restrictedvisionperceptor_c.cpp rcssserver3d-0.6.6/plugin/soccer/restrictedvisionperceptor/restrictedvisionperceptor_c.cpp --- rcssserver3d-0.6.5/plugin/soccer/restrictedvisionperceptor/restrictedvisionperceptor_c.cpp 2011-03-26 12:12:48.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/restrictedvisionperceptor/restrictedvisionperceptor_c.cpp 2012-05-22 23:18:53.000000000 +0000 @@ -4,7 +4,7 @@ Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group - $Id: restrictedvisionperceptor_c.cpp 190 2010-03-30 11:33:03Z yxu $ + $Id: restrictedvisionperceptor_c.cpp 285 2011-06-23 18:00:49Z sgvandijk $ 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 @@ -80,6 +80,22 @@ return true; } +FUNCTION(RestrictedVisionPerceptor,setSenseBallPos) +{ + bool inSenseBallPos; + + if ( + (in.GetSize() != 1) || + (! in.GetValue(in.begin(),inSenseBallPos)) + ) + { + return false; + } + + obj->SetSenseBallPos(inSenseBallPos); + return true; +} + FUNCTION(RestrictedVisionPerceptor,setStaticSenseAxis) { bool inStaticAxis; @@ -172,6 +188,7 @@ DEFINE_FUNCTION(setNoiseParams); DEFINE_FUNCTION(addNoise); DEFINE_FUNCTION(setSenseMyPos); + DEFINE_FUNCTION(setSenseBallPos); DEFINE_FUNCTION(setStaticSenseAxis); DEFINE_FUNCTION(setViewCones); DEFINE_FUNCTION(setPanRange); diff -Nru rcssserver3d-0.6.5/plugin/soccer/restrictedvisionperceptor/restrictedvisionperceptor.cpp rcssserver3d-0.6.6/plugin/soccer/restrictedvisionperceptor/restrictedvisionperceptor.cpp --- rcssserver3d-0.6.5/plugin/soccer/restrictedvisionperceptor/restrictedvisionperceptor.cpp 2011-03-26 12:12:48.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/restrictedvisionperceptor/restrictedvisionperceptor.cpp 2012-05-22 23:18:53.000000000 +0000 @@ -4,7 +4,7 @@ Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group - $Id: restrictedvisionperceptor.cpp 246 2011-02-18 18:44:14Z sgvandijk $ + $Id: restrictedvisionperceptor.cpp 285 2011-06-23 18:00:49Z sgvandijk $ 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 @@ -38,6 +38,7 @@ RestrictedVisionPerceptor::RestrictedVisionPerceptor() : Perceptor(), mSenseMyPos(false), + mSenseBallPos(false), mAddNoise(true), mStaticSenseAxis(true), mSenseLine(false) @@ -460,6 +461,21 @@ element.AddValue(sensedMyPos[2]); } + if (mSenseBallPos) + { + TTeamIndex ti = mAgentState->GetTeamIndex(); + boost::shared_ptr ball; + SoccerBase::GetBall(*this, ball); + Vector3f sensedBallPos = SoccerBase::FlipView(ball->GetWorldTransform().Pos(), ti); + + ParameterList& element = predicate.parameter.AddList(); + element.AddValue(std::string("ballpos")); + element.AddValue(sensedBallPos[0]); + element.AddValue(sensedBallPos[1]); + element.AddValue(sensedBallPos[2]); + + } + if (mSenseLine) { SenseLine(predicate); @@ -562,6 +578,21 @@ element.AddValue(sensedMyPos[2]); } + if (mSenseBallPos) + { + TTeamIndex ti = mAgentState->GetTeamIndex(); + boost::shared_ptr ball; + SoccerBase::GetBall(*this, ball); + Vector3f sensedBallPos = SoccerBase::FlipView(ball->GetWorldTransform().Pos(), ti); + + ParameterList& element = predicate.parameter.AddList(); + element.AddValue(std::string("ballpos")); + element.AddValue(sensedBallPos[0]); + element.AddValue(sensedBallPos[1]); + element.AddValue(sensedBallPos[2]); + + } + if (mSenseLine) { SenseLine(predicate); @@ -633,6 +664,12 @@ mSenseMyPos = sense; } +void +RestrictedVisionPerceptor::SetSenseBallPos(bool sense) +{ + mSenseBallPos = sense; +} + bool RestrictedVisionPerceptor::CheckVisuable(RestrictedVisionPerceptor::ObjectData& od) const { // theta is the angle in horizontal plane, with fwAngle as 0 degree diff -Nru rcssserver3d-0.6.5/plugin/soccer/restrictedvisionperceptor/restrictedvisionperceptor.h rcssserver3d-0.6.6/plugin/soccer/restrictedvisionperceptor/restrictedvisionperceptor.h --- rcssserver3d-0.6.5/plugin/soccer/restrictedvisionperceptor/restrictedvisionperceptor.h 2011-03-26 12:12:48.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/restrictedvisionperceptor/restrictedvisionperceptor.h 2012-05-22 23:18:53.000000000 +0000 @@ -4,7 +4,7 @@ Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group - $Id: restrictedvisionperceptor.h 211 2010-06-06 22:39:29Z hedayat $ + $Id: restrictedvisionperceptor.h 285 2011-06-23 18:00:49Z sgvandijk $ 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 @@ -30,6 +30,7 @@ #include #include #include "../line/line.h" +#include "../ball/ball.h" class RestrictedVisionPerceptor : public oxygen::Perceptor { @@ -104,6 +105,9 @@ //! Turn sensing of agent position on/off void SetSenseMyPos(bool sense); + //! Turn sensing of agent position on/off + void SetSenseBallPos(bool sense); + // turn sensing of lines on/off void SetSenseLine(bool sense); @@ -207,6 +211,9 @@ //! true, if the absolute position of the agent is sensed. bool mSenseMyPos; + + //! true, if the absolute position of the ball is sensed. + bool mSenseBallPos; //! sigma for random measurement error (distance) float mSigmaDist; diff -Nru rcssserver3d-0.6.5/plugin/soccer/sexpmonitor/sexpmonitor.cpp rcssserver3d-0.6.6/plugin/soccer/sexpmonitor/sexpmonitor.cpp --- rcssserver3d-0.6.5/plugin/soccer/sexpmonitor/sexpmonitor.cpp 2011-03-26 12:12:48.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/sexpmonitor/sexpmonitor.cpp 2012-05-22 23:18:53.000000000 +0000 @@ -4,7 +4,7 @@ Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group - $Id: sexpmonitor.cpp 181 2010-02-28 10:55:34Z marianbuchta $ + $Id: sexpmonitor.cpp 312 2012-05-19 18:17:11Z hedayat $ 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 @@ -213,7 +213,7 @@ } string -SexpMonitor::GetMonitorInfo(const oxygen::PredicateList& pList) +SexpMonitor::GetMonitorInformation(const oxygen::PredicateList& pList) { if (mGameState->IsFinished()) { diff -Nru rcssserver3d-0.6.5/plugin/soccer/sexpmonitor/sexpmonitor.h rcssserver3d-0.6.6/plugin/soccer/sexpmonitor/sexpmonitor.h --- rcssserver3d-0.6.5/plugin/soccer/sexpmonitor/sexpmonitor.h 2011-03-26 12:12:48.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/sexpmonitor/sexpmonitor.h 2012-05-22 23:18:53.000000000 +0000 @@ -4,7 +4,7 @@ Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group - $Id: sexpmonitor.h 21 2009-01-14 14:38:57Z yxu $ + $Id: sexpmonitor.h 312 2012-05-19 18:17:11Z hedayat $ 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 @@ -52,7 +52,7 @@ * function is called to process it. * @param data data sent from monitor to monitorsystem via SPADES. */ - void ParseMonitorMessage(const std::string& data); + virtual void ParseMonitorMessage(const std::string& data); /** This function will be called periodically to get information * about the current state of the world. @@ -61,7 +61,7 @@ * the MonitorServer. The monitor should transfer them to the * client if possible. */ - virtual std::string GetMonitorInfo(const oxygen::PredicateList& pList); + virtual std::string GetMonitorInformation(const oxygen::PredicateList& pList); /** This function is called once for every MonitorSystem each time * a new client connects. It should return any header/setup diff -Nru rcssserver3d-0.6.5/plugin/soccer/soccerbase/soccerbase.cpp rcssserver3d-0.6.6/plugin/soccer/soccerbase/soccerbase.cpp --- rcssserver3d-0.6.5/plugin/soccer/soccerbase/soccerbase.cpp 2011-03-26 12:12:48.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/soccerbase/soccerbase.cpp 2012-05-22 23:18:53.000000000 +0000 @@ -4,7 +4,7 @@ Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group - $Id: soccerbase.cpp 181 2010-02-28 10:55:34Z marianbuchta $ + $Id: soccerbase.cpp 300 2012-03-20 16:44:23Z yxu $ 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 @@ -679,8 +679,6 @@ bool SoccerBase::MoveAndRotateAgent(boost::shared_ptr agent_aspect, const Vector3f& pos, float angle) { - Vector3f agentPos = agent_aspect->GetWorldTransform().Pos(); - boost::shared_ptr parent = shared_dynamic_cast (agent_aspect->FindParentSupportingClass().lock()); @@ -705,7 +703,7 @@ boost::shared_ptr body; GetAgentBody(agent_aspect, body); - + const Vector3f& agentPos = body->GetPosition(); Matrix bodyR = body->GetRotation(); bodyR.InvertRotationMatrix(); Matrix mat; diff -Nru rcssserver3d-0.6.5/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp rcssserver3d-0.6.6/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp --- rcssserver3d-0.6.5/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp 2011-03-26 12:12:48.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/soccerruleaspect/soccerruleaspect.cpp 2012-05-22 23:18:53.000000000 +0000 @@ -4,7 +4,7 @@ Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group - $Id: soccerruleaspect.cpp 253 2011-03-21 22:27:45Z sgvandijk $ + $Id: soccerruleaspect.cpp 316 2012-05-22 22:33:15Z hedayat $ 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 @@ -49,6 +49,9 @@ mAutomaticKickOff(false), mWaitBeforeKickOff(1.0), mSingleHalfTime(false), + mAutomaticQuit(true), + mChangeSidesInSecondHalf(true), + mAutoKickOffTimeOrigin(1000000.0), mSayMsgSize(20), mAudioCutDist(50.0), mFirstCollidingAgent(true), @@ -63,9 +66,11 @@ 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 + mMin3PlDistance(0), // min dist for third closest of team before being repositioned mMaxTouchGroupSize(1000), - mMaxFaultTime(0.0) // maximum time allowed for a player to commit a positional fault before being repositioned + mMaxFaultTime(0.0), // maximum time allowed for a player to commit a positional fault before being repositioned + mLastKickOffKickTime(0), + mCheckKickOffKickerFault(false) { mFreeKickPos = Vector3f(0.0,0.0,mBallRadius); } @@ -83,32 +88,30 @@ mBallBody->Enable(); } -/* Uses only Ball and Players positions and detects overcrowind near ball and areas and -players innappropriate behavior (laying on the ground or not walking for too much time) */ -void +/* 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) { - // Reset counters before kickoff - if (playMode == PM_BeforeKickOff) - { + // Reset counters and do not consider players' faults when game is not + // running + if (mGameState->IsPaused()) + { ResetFaultCounter(TI_LEFT); ResetFaultCounter(TI_RIGHT); } else { - CalculateDistanceArrays(TI_LEFT); // Calculates distance arrays for left team - CalculateDistanceArrays(TI_RIGHT); // Calculates distance arrays for right team - AnalyseFaults(TI_LEFT); // Analyses simple faults for the left team - AnalyseFaults(TI_RIGHT); // Analyses simple faults for the right team + CalculateDistanceArrays(TI_LEFT); // Calculates distance arrays for left team + CalculateDistanceArrays(TI_RIGHT); // Calculates distance arrays for right team + AnalyseFaults(TI_LEFT); // Analyzes simple faults for the left team + AnalyseFaults(TI_RIGHT); // Analyzes simple faults for the right team AnalyseTouchGroups(TI_LEFT); AnalyseTouchGroups(TI_RIGHT); - // Only apply rules during play-on - if (playMode == PM_PlayOn) - { - ClearPlayersAutomatic(TI_LEFT); // enforce standing and not overcrowding rules for left team - ClearPlayersAutomatic(TI_RIGHT); // enforce standing and not overcrowding rules for 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 + // Reset touch groups ResetTouchGroups(TI_LEFT); ResetTouchGroups(TI_RIGHT); @@ -116,18 +119,18 @@ } -void +void SoccerRuleAspect::ResetFaultCounterPlayer(int unum, TTeamIndex idx) { - playerGround[unum][idx] = 0; - playerNotStanding[unum][idx] = 0; + playerGround[unum][idx] = 0; + playerNotStanding[unum][idx] = 0; playerStanding[unum][idx] = 5/0.02; // Considers player has been standing for some time in playoff - prevPlayerInsideOwnArea[unum][idx] = 0; - playerInsideOwnArea[unum][idx] = 0; - playerFaultTime[unum][idx] = 0; + prevPlayerInsideOwnArea[unum][idx] = 0; + playerInsideOwnArea[unum][idx] = 0; + playerFaultTime[unum][idx] = 0; } -void +void SoccerRuleAspect::ResetFaultCounter(TTeamIndex idx) { for(int t=1; t<=11; t++) { @@ -136,54 +139,54 @@ } // Process agent state: standing, sitted, laying down, ... -void +void SoccerRuleAspect::ProcessAgentState(salt::Vector3f pos, int unum, TTeamIndex idx) { float groundZVal = 0.15; //bellow this player is on the ground float middleZVal = 0.25; //abovce this player is standing (or trying...) - //increase player not standing if it is not in upward position and inside of field + //increase player not standing if it is not in upward position and inside of field if (pos.z() < middleZVal && fabs(pos.y())< mFieldWidth / 2 + 0.1) - { - playerNotStanding[unum][idx]++; + { + playerNotStanding[unum][idx]++; playerStanding[unum][idx] = 0; //player not standing } //increase player near ground if it is very low and inside of field if (pos.z() < groundZVal && fabs(pos.y())< mFieldWidth / 2 + 0.1) { - playerGround[unum][idx]++; + playerGround[unum][idx]++; } //increase player standing or at least trying... Reset ground if (pos.z() >= middleZVal) { - playerStanding[unum][idx]++; + playerStanding[unum][idx]++; playerGround[unum][idx] = 0; } //Player standing for some cycles (0.5 seconds) reset not standing count - if (playerStanding[unum][idx] > 0.5 / 0.02) { - playerNotStanding[unum][idx] = 0; + if (playerStanding[unum][idx] > 0.5 / 0.02) { + playerNotStanding[unum][idx] = 0; } } // 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 <= 10; t1++) + for(int t2 = t1 + 1; t2 <= 11; t2++) if (dArr[t1][idx] >= dArr[t2][idx]) oArr[t1][idx]++; else oArr[t2][idx]++; - + // DEBUG // if (dArr[1][idx]<1000.0) { // cout << "Team: " << idx << " --> "; -// for(int t1=1; t1<=6; t1++) +// for(int t1=1; t1<=6; t1++) // if (dArr[t1][idx]<5.0) cout << t1 << " o:" << oArr[t1][idx] << " d: " << dArr[t1][idx] << " | "; -// cout << endl; +// cout << endl; // } } @@ -202,7 +205,7 @@ ownGoalPos = Vector3f(-mFieldLength/2.0, 0.0, 0.0); else ownGoalPos = Vector3f(mFieldLength/2.0, 0.0, 0.0); - + boost::shared_ptr agent_aspect; SoccerBase::TAgentStateList::const_iterator i; @@ -210,45 +213,45 @@ closestPlayer[idx] = 1; closestPlayerDist[idx] = 1000.0; for(int t = 1; t <= 11; t++) - { + { distArr[t][idx]=1000.0; ordArr[t][idx]=1; distGArr[t][idx]=1000.0; - ordGArr[t][idx]=1; + ordGArr[t][idx]=1; } for (i = agent_states.begin(); i != agent_states.end(); ++i) { SoccerBase::GetTransformParent(**i, agent_aspect); Vector3f agentPos = agent_aspect->GetWorldTransform().Pos(); - int unum = (*i)->GetUniformNumber(); - distArr[unum][idx] = sqrt((agentPos.x()-ballPos.x())*(agentPos.x()-ballPos.x()) + + int unum = (*i)->GetUniformNumber(); + distArr[unum][idx] = sqrt((agentPos.x()-ballPos.x())*(agentPos.x()-ballPos.x()) + (agentPos.y()-ballPos.y())*(agentPos.y()-ballPos.y())); - distGArr[unum][idx] = sqrt((agentPos.x()-ownGoalPos.x())*(agentPos.x()-ownGoalPos.x()) + + distGArr[unum][idx] = sqrt((agentPos.x()-ownGoalPos.x())*(agentPos.x()-ownGoalPos.x()) + (agentPos.y()-ownGoalPos.y())*(agentPos.y()-ownGoalPos.y())); // determine closest player if (distArr[unum][idx] < closestPlayerDist[idx]) - { + { closestPlayerDist[idx] = distArr[unum][idx]; - closestPlayer[idx] = unum; + closestPlayer[idx] = unum; } // save player inside area state in previous cycle - prevPlayerInsideOwnArea[unum][idx] = playerInsideOwnArea[unum][idx]; + 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())) || + if (idx == TI_LEFT && mLeftPenaltyArea.Contains(Vector2f(agentPos.x(), agentPos.y())) || idx == TI_RIGHT && mRightPenaltyArea.Contains(Vector2f(agentPos.x(), agentPos.y()))) - { + { numPlInsideOwnArea[idx]++; - playerInsideOwnArea[unum][idx] = 1; + playerInsideOwnArea[unum][idx] = 1; //goalie is not repositioned when inside own area... if (unum == 1) - { - distGArr[unum][idx] = 0.0; - } + { + distGArr[unum][idx] = 0.0; + } } else playerInsideOwnArea[unum][idx] = 0; @@ -256,7 +259,7 @@ // Process agent state: standing, sitted, laying down, ... ProcessAgentState(agentPos, unum, idx); } - + // compute rank of distance to ball SimpleOrder(distArr, ordArr, idx); // compute rank of distance to own goal @@ -275,12 +278,40 @@ SoccerBase::TAgentStateList::iterator i = agent_states.begin(); for (; i != agent_states.end(); ++i) { + boost::shared_ptr touchGroup = (*i)->GetTouchGroup(); + // Wasn't touching before, joined group making group too large - if ((*i)->GetOldTouchGroup()->size() == 1 && (*i)->GetTouchGroup()->size() > mMaxTouchGroupSize) + if ((*i)->GetOldTouchGroup()->size() == 1 && + touchGroup->size() > mMaxTouchGroupSize) { - playerFaultTime[(*i)->GetUniformNumber()][idx]++; - // Remove player from touch group so no more agents are replaced - (*i)->GetTouchGroup()->erase(*i); + // determine the team that has more players in the touch group + int pl[3] = { 0 }; + TTeamIndex oppIdx; + TouchGroup::iterator oppIt; // stores the last opponent in touch group + for (TouchGroup::iterator agentIt = touchGroup->begin(); + agentIt != touchGroup->end(); ++agentIt) + { + pl[(*agentIt)->GetTeamIndex()]++; + if ((*agentIt)->GetTeamIndex() != idx) + { + oppIdx = (*agentIt)->GetTeamIndex(); + oppIt = agentIt; + } + } + + if (pl[idx] >= touchGroup->size() - pl[idx]) + { + playerFaultTime[(*i)->GetUniformNumber()][idx]++; + // Remove player from touch group so no more agents are replaced + touchGroup->erase(*i); + } + else + { + // I am the last one to enter the group, but the number of + // opponents in the group are more than us + playerFaultTime[(*oppIt)->GetUniformNumber()][oppIdx]++; + touchGroup->erase(*oppIt); + } } } } @@ -290,7 +321,7 @@ SoccerBase::TAgentStateList agent_states; if (! SoccerBase::GetAgentStates(*mBallState.get(), agent_states, idx)) return; - + SoccerBase::TAgentStateList::const_iterator i; for (i = agent_states.begin(); i != agent_states.end(); i++) { @@ -307,31 +338,31 @@ idx2 = TI_RIGHT; else idx2 = TI_LEFT; //Other team - + for(int unum=1; unum<=11; unum++) { - // I am the third closest player but i am too near the ball (and not the goalie) - if (unum != 1 && closestPlayerDist[idx2] < mMinOppDistance && - (distArr[unum][idx] <= mMin3PlDistance + 0.01 && ordArr[unum][idx] == 3)) + // I am the third closest player but i am too near the ball (and not the goalie) + if (unum != 1 && closestPlayerDist[idx2] < mMinOppDistance && + (distArr[unum][idx] <= mMin3PlDistance + 0.01 && ordArr[unum][idx] == 3)) { playerFaultTime[unum][idx]++; } // I am the second closest player but i am too near the ball (and not the goalie) - else if(unum != 1 && closestPlayerDist[idx2] < mMinOppDistance && - distArr[unum][idx] <= mMin2PlDistance + 0.01 && ordArr[unum][idx] == 2 ) + else if(unum != 1 && closestPlayerDist[idx2] < mMinOppDistance && + distArr[unum][idx] <= mMin2PlDistance + 0.01 && ordArr[unum][idx] == 2 ) { playerFaultTime[unum][idx]++; } - // Too many players inside my own penalty area and Im am the last one to enter or + // Too many players inside my own penalty area and Im am the last one to enter or // the last one to enter was the goalie and I am the one further away from own goal else if((numPlInsideOwnArea[idx] > mMaxPlayersInsideOwnArea && unum != 1 && playerInsideOwnArea[unum][idx] == 1 && - (prevPlayerInsideOwnArea[unum][idx] == 0 || + (prevPlayerInsideOwnArea[unum][idx] == 0 || (prevPlayerInsideOwnArea[1][idx] == 0 && playerInsideOwnArea[1][idx] == 1 && mMaxPlayersInsideOwnArea + 1 == ordGArr[unum][idx])))) { playerFaultTime[unum][idx]++; } // I am a field player and on the ground for too much time - else if (unum != 1 && playerGround[unum][idx] > mGroundMaxTime / 0.02) + else if (unum != 1 && playerGround[unum][idx] > mGroundMaxTime / 0.02) { playerFaultTime[unum][idx]++; } @@ -346,7 +377,7 @@ playerFaultTime[unum][idx]++; } // I am the goalie and I and not standing for too much time - else if (unum == 1 && playerNotStanding[unum][idx] > mGoalieNotStandingMaxTime / 0.02) + else if (unum == 1 && playerNotStanding[unum][idx] > mGoalieNotStandingMaxTime / 0.02) { playerFaultTime[unum][idx]++; } @@ -354,11 +385,11 @@ { playerFaultTime[unum][idx]=0; } - } + } } -salt::Vector3f SoccerRuleAspect::RepositionOutsidePos(salt::Vector3f posIni, int unum, TTeamIndex idx) +salt::Vector3f SoccerRuleAspect::RepositionOutsidePos(salt::Vector3f posIni, int unum, TTeamIndex idx) { salt::Vector3f pos; // Choose x side based on team @@ -396,12 +427,12 @@ if (playerFaultTime[unum][idx] > mMaxFaultTime / 0.02) { // I am not a very good soccer player... I am violating the rules... - salt::Vector3f new_pos = RepositionOutsidePos(ballPos, unum, idx); + salt::Vector3f new_pos = RepositionOutsidePos(ballPos, unum, idx); //Calculate my Reposition pos outside of the field - SoccerBase::MoveAgent(agent_aspect, new_pos); + SoccerBase::MoveAgent(agent_aspect, new_pos); //Oh my God!! I am flying!! I am going outside of the field ResetFaultCounterPlayer(unum, idx); - //cout << "*********Player Repos Num: " << unum << " Team: " << team << " Pos: " << new_pos << endl; + //cout << "*********Player Repos Num: " << unum << " Team: " << team << " Pos: " << new_pos << endl; } } } @@ -546,6 +577,54 @@ } void +SoccerRuleAspect::SwapTeamSides() +{ + SoccerBase::TAgentStateList agent_states; + if (! SoccerBase::GetAgentStates(*mBallState.get(), agent_states)) + return; + + SoccerBase::TAgentStateList::iterator it; + for (it = agent_states.begin(); it != agent_states.end(); ++it) + { + (*it)->SetTeamIndex(SoccerBase::OpponentTeam((*it)->GetTeamIndex())); + } +} + +void +SoccerRuleAspect::PunishKickOffFault( + boost::shared_ptr agent) +{ + boost::shared_ptr agentState; + if (!SoccerBase::GetAgentState(agent, agentState)) + { + GetLog()->Error() << "ERROR: (SoccerRuleAspect) Cannot get " + "AgentState from an AgentAspect\n"; + } + else + { + TTeamIndex opp = SoccerBase::OpponentTeam(agentState->GetTeamIndex()); + ClearPlayersBeforeKickOff(opp); + + // put the ball back in the middle of the playing field + Vector3f pos(0, 0, mBallRadius); + MoveBall(pos); + + mGameState->KickOff(opp); + } +} + +inline bool SoccerRuleAspect::WasLastKickFromKickOff( + boost::shared_ptr &lastKicker) +{ + TTime kickTime; + // notice that a kick is not necessarily an immediate action, it can + // take some time... + return mBallState->GetLastCollidingAgent(lastKicker, kickTime) + && kickTime - mLastKickOffKickTime < 0.1 // kick duration = 0.1 + && lastKicker == mLastKickOffTaker; +} + +void SoccerRuleAspect::ClearSelectedPlayers() { float min_dist = mFreeKickMoveDist; @@ -657,6 +736,7 @@ Vector3f pos(0,0,mBallRadius); MoveBall(pos); + mGameState->SetPaused(true); ClearPlayers(mRightHalf, mFreeKickMoveDist, TI_LEFT); ClearPlayers(mLeftHalf, mFreeKickMoveDist, TI_RIGHT); @@ -667,7 +747,13 @@ mInOffsideRightPlayers.clear(); #endif - if (mAutomaticKickOff && mGameState->GetModeTime() > mWaitBeforeKickOff) + float kickOffWaitTime = 0; + if (mAutoKickOffTimeOrigin > mGameState->GetModeTime()) + mAutoKickOffTimeOrigin = mGameState->GetModeTime(); + else + kickOffWaitTime = mGameState->GetModeTime() - mAutoKickOffTimeOrigin; + + if (mAutomaticKickOff && kickOffWaitTime > mWaitBeforeKickOff) { mGameState->KickOff(); } @@ -676,6 +762,8 @@ void SoccerRuleAspect::UpdateKickOff(TTeamIndex idx) { + mGameState->SetPaused(false); + ClearPlayersBeforeKickOff(idx); // if no player touched the ball for mDropBallTime, we move away @@ -698,6 +786,9 @@ } if (time > mGameState->GetLastModeChange()) { + mLastKickOffKickTime = time; + mCheckKickOffKickerFault = true; + mLastKickOffTaker = agent; mGameState->SetPlayMode(PM_PlayOn); } } @@ -708,8 +799,11 @@ // do nothing for the duration of mKickInPauseTime if (mGameState->GetModeTime() < mKickInPauseTime) { + mGameState->SetPaused(true); return; } + mGameState->SetPaused(false); + // move away opponent team ClearPlayers(mFreeKickPos, mFreeKickDist, mFreeKickMoveDist, SoccerBase::OpponentTeam(idx)); @@ -757,8 +851,10 @@ // do nothing for the duration of mKickInPauseTime if (mGameState->GetModeTime() < mKickInPauseTime) { + mGameState->SetPaused(true); return; } + mGameState->SetPaused(false); //--------------- salt::Vector2f ball_pos(mFreeKickPos.x(), mFreeKickPos.y()); @@ -827,8 +923,11 @@ // do nothing for the duration of mKickInPauseTime if (mGameState->GetModeTime() < mKickInPauseTime) { + mGameState->SetPaused(true); return; } + mGameState->SetPaused(false); + // move away opponent team ClearPlayers(idx == TI_LEFT ? mLeftPenaltyArea : mRightPenaltyArea, mFreeKickMoveDist, SoccerBase::OpponentTeam(idx)); @@ -883,8 +982,11 @@ // do nothing for the duration of mKickInPauseTime if (mGameState->GetModeTime() < mKickInPauseTime) { + mGameState->SetPaused(true); return; } + mGameState->SetPaused(false); + // move away opponent team ClearPlayers(mFreeKickPos, mFreeKickDist, mFreeKickMoveDist, SoccerBase::OpponentTeam(idx)); @@ -981,18 +1083,26 @@ // check corner kick right team else if (last_touch_left && ball_left) { + // temp value for RoboCup 2012 + // correct value: mFieldWidth / 2 - mBallRadius + const float cornerKickY = (mFieldWidth + mGoalWidth) / 4.0 + - mBallRadius; mFreeKickPos[0] = -mFieldLength / 2 + mBallRadius; mFreeKickPos[1] = ball_pos[1] > 0 ? - mFieldWidth / 2 - 0.05 : -mFieldWidth / 2 + 0.05; + cornerKickY : -cornerKickY; mFreeKickPos[2] = mBallRadius; mGameState->SetPlayMode(PM_CORNER_KICK_RIGHT); } // check corner kick left team else { + // temp value for RoboCup 2012 + // correct value: mFieldWidth / 2 - mBallRadius + const float cornerKickY = (mFieldWidth + mGoalWidth) / 4.0 + - mBallRadius; mFreeKickPos[0] = mFieldLength / 2 - mBallRadius; mFreeKickPos[1] = ball_pos[1] > 0 ? - mFieldWidth / 2 - mBallRadius : -mFieldWidth / 2 + mBallRadius; + cornerKickY : -cornerKickY; mFreeKickPos[2] = mBallRadius; mGameState->SetPlayMode(PM_CORNER_KICK_LEFT); } @@ -1025,8 +1135,51 @@ { // check if the ball is in one of the goals TTeamIndex idx = mBallState->GetGoalState(); + if (idx == TI_NONE) { + // sometimes, ball can't record goals due to approximation errors, + // so we check for goals analytically + const salt::Vector3f ballPos = mBallBody->GetPosition(); + const float xDist2Goal = fabs(ballPos.x()) - mGoalBallLineX; + + // check if ball is completely out of the field + if (xDist2Goal < 0) + return false; + + salt::Vector3f normBVel = mBallBody->GetVelocity(); + // ball should be inside the field recently (assumes that the simulation + // step size is smaller than 1 second) + if (fabs(ballPos.x() - normBVel.x()) > mGoalBallLineX) + return false; + + normBVel.Normalize(); + float velCos = normBVel.x(); + float dist = xDist2Goal / velCos; + salt::Vector3f crossPoint = ballPos - normBVel * dist; + + if (fabs(crossPoint.y()) < mGoalWidth / 2.0 && + crossPoint.z() < mGoalHeight) + { + if (ballPos.x() < 0) + idx = TI_LEFT; + else + idx = TI_RIGHT; + } + else + return false; + } + + /* don't allow goals directly from kickoff + * + * todo it is allowed in FIFA rules, so we should get rid of it e.g. by + * adding noise to the beam effector so that kickoff kicks cannot be + * precisely planned + */ + boost::shared_ptr agent; + if (WasLastKickFromKickOff(agent)) + { + PunishKickOffFault(agent); return false; } @@ -1037,9 +1190,30 @@ return true; } +bool +SoccerRuleAspect::CheckKickOffTakerFault() +{ + if (!mCheckKickOffKickerFault) + return false; + + boost::shared_ptr agent; + if (!WasLastKickFromKickOff(agent)) // second kick + { + mCheckKickOffKickerFault = false; + if (agent == mLastKickOffTaker) + { + PunishKickOffFault(mLastKickOffTaker); + return true; + } + } + return false; +} + void SoccerRuleAspect::UpdatePlayOn() { + mGameState->SetPaused(false); + // check if the ball is in one of the goals if (CheckGoal()) { @@ -1060,12 +1234,19 @@ } #endif + if (CheckKickOffTakerFault()) + { + return; + } + // other checks go here... } void SoccerRuleAspect::UpdateGoal() { + mGameState->SetPaused(true); + // check if the pause time after the goal has elapsed if (mGameState->GetModeTime() < mGoalPauseTime) { @@ -1073,7 +1254,7 @@ } // put the ball back in the middle of the playing field - Vector3f pos(0,0,mBallRadius); + Vector3f pos(0, 0, mBallRadius); MoveBall(pos); // kick off for the opposite team @@ -1093,8 +1274,10 @@ void SoccerRuleAspect::UpdateGameOver() { + mGameState->SetPaused(true); + // wait for 10 seconds to finish - if (mGameState->GetModeTime() < 9) + if (mGameState->GetModeTime() < 9 || !mAutomaticQuit) { return; } @@ -1124,6 +1307,8 @@ // the first game half is over mGameState->SetPlayMode(PM_BeforeKickOff); mGameState->SetGameHalf(GH_SECOND); + if (mChangeSidesInSecondHalf) + SwapTeamSides(); } } else if ((half == GH_SECOND) && (now >= 2 * mHalfTime)) @@ -1231,7 +1416,7 @@ << playMode << "\n"; break; } - + // Simple Referee AutomaticSimpleReferee(playMode); } @@ -1281,19 +1466,22 @@ SoccerBase::GetSoccerVar(*this,"FieldLength",mFieldLength); SoccerBase::GetSoccerVar(*this,"FieldWidth",mFieldWidth); SoccerBase::GetSoccerVar(*this,"GoalWidth",mGoalWidth); + SoccerBase::GetSoccerVar(*this,"GoalHeight",mGoalHeight); SoccerBase::GetSoccerVar(*this,"FreeKickDistance",mFreeKickDist); SoccerBase::GetSoccerVar(*this,"FreeKickMoveDist",mFreeKickMoveDist); SoccerBase::GetSoccerVar(*this,"GoalKickDist",mGoalKickDist); SoccerBase::GetSoccerVar(*this,"AutomaticKickOff",mAutomaticKickOff); SoccerBase::GetSoccerVar(*this,"WaitBeforeKickOff",mWaitBeforeKickOff); SoccerBase::GetSoccerVar(*this,"SingleHalfTime",mSingleHalfTime); + SoccerBase::GetSoccerVar(*this,"AutomaticQuit",mAutomaticQuit); + SoccerBase::GetSoccerVar(*this,"ChangeSidesInSecondHalf",mChangeSidesInSecondHalf); SoccerBase::GetSoccerVar(*this,"UseOffside",mUseOffside); float penaltyLength, penaltyWidth; SoccerBase::GetSoccerVar(*this,"PenaltyLength",penaltyLength); SoccerBase::GetSoccerVar(*this,"PenaltyWidth",penaltyWidth); - + // auto ref parameters - SoccerBase::GetSoccerVar(*this,"NotStandingMaxTime",mNotStandingMaxTime); + SoccerBase::GetSoccerVar(*this,"NotStandingMaxTime",mNotStandingMaxTime); SoccerBase::GetSoccerVar(*this,"GoalieNotStandingMaxTime",mGoalieNotStandingMaxTime); SoccerBase::GetSoccerVar(*this,"GroundMaxTime",mGroundMaxTime); SoccerBase::GetSoccerVar(*this,"GoalieGroundMaxTime",mGoalieGroundMaxTime); @@ -1324,6 +1512,8 @@ -(penaltyWidth + mGoalWidth)/2.0), Vector2f(-mFieldLength/2.0, (penaltyWidth + mGoalWidth)/2.0)); + + mGoalBallLineX = mFieldLength / 2.0 + mBallRadius; } void @@ -1753,7 +1943,7 @@ SoccerBase::TAgentStateList agent_states; if (SoccerBase::GetAgentStates(*mBallState.get(), agent_states, TI_NONE)) { - + SoccerBase::TAgentStateList::const_iterator i; for (i = agent_states.begin(); i != agent_states.end(); ++i) (*i)->UnSelect(); @@ -1768,7 +1958,7 @@ if (SoccerBase::GetAgentStates(*mBallState.get(), agent_states, TI_NONE) && agent_states.size() > 0) { boost::shared_ptr first = agent_states.front(); - + SoccerBase::TAgentStateList::const_iterator i; for (i = agent_states.begin(); i != agent_states.end(); ++i) { @@ -1784,7 +1974,7 @@ return; } } - + // No agent selected, select first first->Select(); } diff -Nru rcssserver3d-0.6.5/plugin/soccer/soccerruleaspect/soccerruleaspect.h rcssserver3d-0.6.6/plugin/soccer/soccerruleaspect/soccerruleaspect.h --- rcssserver3d-0.6.5/plugin/soccer/soccerruleaspect/soccerruleaspect.h 2011-03-26 12:12:48.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/soccerruleaspect/soccerruleaspect.h 2012-05-22 23:18:53.000000000 +0000 @@ -4,7 +4,7 @@ Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group - $Id: soccerruleaspect.h 253 2011-03-21 22:27:45Z sgvandijk $ + $Id: soccerruleaspect.h 316 2012-05-22 22:33:15Z hedayat $ 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 @@ -45,7 +45,7 @@ { public: typedef std::list > TAgentStateList; - + public: SoccerRuleAspect(); virtual ~SoccerRuleAspect(); @@ -64,13 +64,13 @@ \param pos position where the ball should be dropped- */ void DropBall(salt::Vector3f pos); - + /** Calculates the out of the field reposition pos for a given agent with unum and team idx Agents are repositioned outside of the field near the mid field line on the opposite yy side regarding the ball position */ salt::Vector3f RepositionOutsidePos(salt::Vector3f initPos, 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 */ @@ -80,7 +80,7 @@ */ void ClearPlayersAutomatic(TTeamIndex idx); - /** Calculates distance arrays needed for repositioning players + /** Calculates distance arrays needed for repositioning players */ void CalculateDistanceArrays(TTeamIndex idx); @@ -99,18 +99,18 @@ */ void ResetFaultCounterPlayer(int unum, TTeamIndex idx); - /**Analyse Faults from players and increase fault counter of offending players + /**Analyse Faults from players and increase fault counter of offending players */ void AnalyseFaults(TTeamIndex idx); /** Check whether too many agents are touching */ void AnalyseTouchGroups(TTeamIndex idx); - + /** Reset the touch groups */ void ResetTouchGroups(TTeamIndex idx); - + /** Automatic Referee that clears players that violate the rules */ void AutomaticSimpleReferee(TPlayMode playMode); @@ -138,19 +138,19 @@ void ClearPlayersWithException(const salt::Vector3f& pos, float radius, float min_dist, TTeamIndex idx, boost::shared_ptr agentState); - /** + /** * get the size of field, i.e. length and width - * - * + * + * * @return the length and width */ salt::Vector2f GetFieldSize() const; - - + + void ResetAgentSelection(); - + void SelectNextAgent(); - + void ClearSelectedPlayers(); protected: @@ -211,6 +211,9 @@ /** checks if the assistant referee should raise the flag for offside */ bool CheckOffside(); + /** checks if kickoff taker has kicked the ball again before other players */ + bool CheckKickOffTakerFault(); + /** moves the ball to pos setting its linear and angular velocity to 0 */ void MoveBall(const salt::Vector3f& pos); @@ -238,7 +241,7 @@ */ void ClearPlayers(const salt::AABB2& box, float min_dist, TTeamIndex idx); - /** + /** * clear the player before kick off, if the team is the kick off * side, the robots can be on his own half and the center circle, * otherwise the robots can only be on his own half except the @@ -247,7 +250,21 @@ * @param idx the team which kick off */ void ClearPlayersBeforeKickOff(TTeamIndex idx); - + + /** + * swaps the side of the teams + */ + void SwapTeamSides(); + + /** + * Punish agent's fault committed during kickoff + */ + void PunishKickOffFault(boost::shared_ptr agent); + + /** returns true if last kick was happenned in kick off */ + bool WasLastKickFromKickOff( + boost::shared_ptr &lastKicker); + protected: /** reference to the body node of the Ball */ boost::shared_ptr mBallBody; @@ -260,6 +277,7 @@ /** the radius of the Ball */ float mBallRadius; + /** the length of the pause after a goal */ float mGoalPauseTime; /** the length of the pause after the ball left the field */ @@ -269,16 +287,21 @@ /** the time we wait before dropping the ball in play modes where only one team can touch the ball */ float mDropBallTime; - /** the point above the ground, where the ball left the field */ - salt::Vector3f mLastValidBallPos; + /** the field length (in meters) */ float mFieldLength; /** the field width (in meters) */ float mFieldWidth; /** the goal width (in meters) */ float mGoalWidth; + /** the goal height (in meters) */ + float mGoalHeight; + /** the absolute x coordinate of the goal which ball should pass (in meters) */ + float mGoalBallLineX; + /** the point on the field where we do the kick in, free kick etc. */ salt::Vector3f mFreeKickPos; + /** the distance opponents have to keep during free kicks, kick ins etc. */ float mFreeKickDist; /** the (least) distance opponents will be moved away if they are to close @@ -286,37 +309,45 @@ float mFreeKickMoveDist; /** the distance from the back line the ball should be placed at for a goal kick */ float mGoalKickDist; + /** flag if the simulator should do the kick off automatically after the agent */ bool mAutomaticKickOff; /** time to wait until we kick off automatically */ float mWaitBeforeKickOff; /** flag if we want to play only one half of the match */ bool mSingleHalfTime; + /** flag if the simulator should quit automatically when the game is over */ + bool mAutomaticQuit; + /** flag if the side of the teams should be changed in the second half*/ + bool mChangeSidesInSecondHalf; + /** the time origin from which mWaitBeforeKickOff is calculated */ + float mAutoKickOffTimeOrigin; //FCP 2010 - New Parameters (added by FCPortugal for Singapure 2010) /** max time player may be sitted or laying down before being repositioned */ - int mNotStandingMaxTime; + int mNotStandingMaxTime; /** max time player may be on the ground before being repositioned */ - int mGroundMaxTime; + int mGroundMaxTime; /** max time goalie may be sitted or laying down before being repositioned */ - int mGoalieNotStandingMaxTime; + int mGoalieNotStandingMaxTime; /** max time goalie (player number 1) may be on the ground before being repositioned */ int mGoalieGroundMaxTime; /** min dist for second closest of team before being repositioned */ - float mMin2PlDistance; + float mMin2PlDistance; /** min dist for third closest of team before being repositioned */ - float mMin3PlDistance; + float mMin3PlDistance; /** min dist for closest Opponent to ball in order to use repositions for the second and third player*/ - float mMinOppDistance; + float mMinOppDistance; /** maximum number of players of the defending team that may be inside own penalty area */ - int mMaxPlayersInsideOwnArea; + int mMaxPlayersInsideOwnArea; /** maximum number of players that may be in a single touch group */ int mMaxTouchGroupSize; /** maximum time allowed for a player to commit a positional fault before being repositioned */ - int mMaxFaultTime; + int mMaxFaultTime; + /* Useful arrays for dealing with agent state an faults */ salt::Vector3f playerPos[12][3]; //Players Positions - not used - int playerGround[12][3]; //Time Players are on the ground + int playerGround[12][3]; //Time Players are on the ground int playerNotStanding[12][3]; //Time Players are not standing (head up for more than 0.5s) int playerInsideOwnArea[12][3]; //Player is inside own area int prevPlayerInsideOwnArea[12][3]; //Player was inside own area last cycle @@ -329,7 +360,7 @@ int numPlInsideOwnArea[3]; //Number of players inside own area int closestPlayer[3]; //Closest Player from each team float closestPlayerDist[3]; //Closest Player distance to ball from each team - /* FCP 2010 - New Parameters */ + /* FCP 2010 - New Parameters */ // areas where opponents are not allowed in certain play modes /** bounding box for the right half of the field */ @@ -362,6 +393,13 @@ /** use offside law */ bool mUseOffside; + + /** the time of the kick in the last kick off mode */ + TTime mLastKickOffKickTime; + /** the player which kicked in the last kick off mode */ + boost::shared_ptr mLastKickOffTaker; + /** if kickoff taker should be checked for single kick rule */ + bool mCheckKickOffKickerFault; }; DECLARE_CLASS(SoccerRuleAspect); diff -Nru rcssserver3d-0.6.5/plugin/soccer/trainercommandparser/trainercommandparser.cpp rcssserver3d-0.6.6/plugin/soccer/trainercommandparser/trainercommandparser.cpp --- rcssserver3d-0.6.5/plugin/soccer/trainercommandparser/trainercommandparser.cpp 2011-03-26 12:12:47.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/trainercommandparser/trainercommandparser.cpp 2012-05-22 23:18:53.000000000 +0000 @@ -51,6 +51,8 @@ mCommandMap["kill"] = CT_KILL; mCommandMap["repos"] = CT_REPOS; mCommandMap["killsim"] = CT_KILLSIM; + mCommandMap["reqfullstate"] = CT_REQFULLSTATE; + // setup team index map // Originally team sides were "L","R" and "N" // But this seems to be unused @@ -122,13 +124,19 @@ mSimServer = shared_dynamic_cast (GetCore()->Get("/sys/server/simulation")); - - if (mGameControl.get() == 0) + + if (mSimServer.get() == 0) { GetLog()->Error() << "ERROR: (TrainerCommandParser) Unable to get SimulationServer\n"; } - + mMonitorControl = shared_dynamic_cast + (mSimServer->GetControlNode("MonitorControl")); + + if (mMonitorControl.get() == 0) + { + GetLog()->Error() << "ERROR: (TrainerCommandParser) Unable to get MonitorControl\n"; + } } void TrainerCommandParser::OnUnlink() @@ -224,6 +232,10 @@ case CT_KILLSIM: ParseKillSimCommand(predicate); break; + case CT_REQFULLSTATE: + mMonitorControl->RequestFullState(); + break; + default: return false; } @@ -232,7 +244,7 @@ } void TrainerCommandParser::ParsePlayerCommand(const oxygen::Predicate & predicate) -{ +{ Predicate::Iterator unumParam(predicate); int unum; bool specified = true; @@ -245,7 +257,7 @@ } else specified = false; - + string team; TTeamIndex idx; Predicate::Iterator teamParam(predicate); @@ -257,7 +269,7 @@ specified = false; else idx = mTeamIndexMap[team]; - } + } else specified = false; @@ -266,17 +278,17 @@ mSoccerRule->ClearSelectedPlayers(); return; } - + SoccerBase::TAgentStateList agentStates; - SoccerBase::GetAgentStates(*this, agentStates, (specified ? idx : TI_NONE)); + SoccerBase::GetAgentStates(*this, agentStates, (specified ? idx : TI_NONE)); SoccerBase::TAgentStateList::iterator iter = agentStates.begin(); bool found = false; while (iter != agentStates.end() && !found) - { + { if ((specified && (*iter)->GetUniformNumber() == unum && (*iter)->GetTeamIndex() == idx) || (!specified && (*iter)->IsSelected())) - found = true; + found = true; else ++iter; } @@ -284,7 +296,7 @@ if (!found) { GetLog()->Error() << "(TrainerCommandParser) ERROR: can't get correct AgentState\n"; - return; + return; } Predicate::Iterator posParam(predicate); @@ -320,7 +332,7 @@ float ang; // extract position vector - if (! predicate.GetValue(moveParam, pos)) + if (! predicate.AdvanceValue(moveParam, pos)) { GetLog()->Error() << "(TrainerCommandParser) ERROR: can't get agent rot\n"; return; @@ -346,7 +358,7 @@ } } - // Joschka: I removed the part to set a velocity because it doesn't really + // Joschka: I removed the part to set a velocity because it doesn't really // seem to have a meaning for agents that have more than just a single body Predicate::Iterator batParam(predicate); @@ -360,11 +372,11 @@ { GetLog()->Error() << "(TrainerCommandParser) ERROR: can't get battery value\n"; return; - } + } // set new battery (*iter)->SetBattery(battery); - + } Predicate::Iterator tempParam(predicate); @@ -379,17 +391,17 @@ GetLog()->Error() << "(TrainerCommandParser) ERROR: can't get temperatur value\n"; return; } - + // set new temperature (*iter)->SetBattery(temperature); - + } } void TrainerCommandParser::ParseBallCommand(const oxygen::Predicate& predicate) { - Predicate::Iterator posParam(predicate); + Predicate::Iterator posParam(predicate); if (predicate.FindParameter(posParam, "pos")) { @@ -400,7 +412,7 @@ { GetLog()->Error() << "(TrainerCommandParser) ERROR: can't get ball pos\n"; return; - } + } boost::shared_ptr body; @@ -503,7 +515,7 @@ { GetLog()->Error() << "(TrainerCommandParser) ERROR: unknown team" << team << "\n"; - + } } else @@ -515,11 +527,11 @@ } void TrainerCommandParser::ParseSelectCommand(const oxygen::Predicate & predicate) -{ +{ Predicate::Iterator unumParam(predicate); int unum; bool specified = true; - + boost::shared_ptr soccerRuleAspect; if (!SoccerBase::GetSoccerRuleAspect(*this, soccerRuleAspect)) { @@ -535,13 +547,13 @@ } else specified = false; - + if (specified && unum == -1) { soccerRuleAspect->ResetAgentSelection(); return; } - + string team; TTeamIndex idx; Predicate::Iterator teamParam(predicate); @@ -553,26 +565,26 @@ specified = false; else idx = mTeamIndexMap[team]; - } + } else specified = false; - + if (!specified) { soccerRuleAspect->SelectNextAgent(); return; } - + SoccerBase::TAgentStateList agentStates; - SoccerBase::GetAgentStates(*this, agentStates, idx); + SoccerBase::GetAgentStates(*this, agentStates, idx); SoccerBase::TAgentStateList::iterator iter = agentStates.begin(); bool found = false; while (iter != agentStates.end() && !found) - { - if ((*iter)->GetUniformNumber() == unum) + { + if ((*iter)->GetUniformNumber() == unum) { - found = true; + found = true; } else ++iter; @@ -581,7 +593,7 @@ if (!found) { GetLog()->Error() << "(TrainerCommandParser) ERROR: can't get correct AgentState\n"; - return; + return; } soccerRuleAspect->ResetAgentSelection(); @@ -589,11 +601,11 @@ } void TrainerCommandParser::ParseKillCommand(const oxygen::Predicate & predicate) -{ +{ Predicate::Iterator unumParam(predicate); int unum; bool specified = true; - + boost::shared_ptr soccerRuleAspect; if (!SoccerBase::GetSoccerRuleAspect(*this, soccerRuleAspect)) { @@ -609,7 +621,7 @@ } else specified = false; - + string team; TTeamIndex idx; Predicate::Iterator teamParam(predicate); @@ -621,10 +633,10 @@ specified = false; else idx = mTeamIndexMap[team]; - } + } else specified = false; - + GameControlServer::TAgentAspectList agentAspects; mGameControl->GetAgentAspectList(agentAspects); GameControlServer::TAgentAspectList::iterator aaiter; @@ -648,13 +660,13 @@ } void TrainerCommandParser::ParseReposCommand(const oxygen::Predicate & predicate) -{ +{ cerr << "repos 2" << endl; Predicate::Iterator unumParam(predicate); int unum; bool specified = true; - + boost::shared_ptr soccerRuleAspect; if (!SoccerBase::GetSoccerRuleAspect(*this, soccerRuleAspect)) { @@ -670,7 +682,7 @@ } else specified = false; - + string team; TTeamIndex idx; Predicate::Iterator teamParam(predicate); @@ -682,12 +694,12 @@ specified = false; else idx = mTeamIndexMap[team]; - } + } else specified = false; SoccerBase::TAgentStateList agentStates; - SoccerBase::GetAgentStates(*this, agentStates, TI_NONE); + SoccerBase::GetAgentStates(*this, agentStates, TI_NONE); SoccerBase::TAgentStateList::iterator iter = agentStates.begin(); boost::shared_ptr agent_aspect; for (;iter != agentStates.end(); ++iter) @@ -703,14 +715,14 @@ SoccerBase::GetTransformParent(**iter, agent_aspect); cerr << "repos 3" << endl; - Vector3f new_pos = mSoccerRule->RepositionOutsidePos(ballPos, (*iter)->GetUniformNumber(), (*iter)->GetTeamIndex()); - SoccerBase::MoveAgent(agent_aspect, new_pos); + Vector3f new_pos = mSoccerRule->RepositionOutsidePos(ballPos, (*iter)->GetUniformNumber(), (*iter)->GetTeamIndex()); + SoccerBase::MoveAgent(agent_aspect, new_pos); break; } } } - + void TrainerCommandParser::ParseKillSimCommand(const oxygen::Predicate & predicate) { mSimServer->Quit(); diff -Nru rcssserver3d-0.6.5/plugin/soccer/trainercommandparser/trainercommandparser.h rcssserver3d-0.6.6/plugin/soccer/trainercommandparser/trainercommandparser.h --- rcssserver3d-0.6.5/plugin/soccer/trainercommandparser/trainercommandparser.h 2011-03-26 12:12:47.000000000 +0000 +++ rcssserver3d-0.6.6/plugin/soccer/trainercommandparser/trainercommandparser.h 2012-05-22 23:18:53.000000000 +0000 @@ -33,6 +33,7 @@ #include #include #include +#include namespace oxygen { @@ -54,7 +55,8 @@ CT_SELECT, CT_KILL, CT_REPOS, - CT_KILLSIM + CT_KILLSIM, + CT_REQFULLSTATE }; typedef std::map TCommandMap; @@ -148,6 +150,8 @@ boost::shared_ptr mGameControl; //! cached reference to the simulation server boost::shared_ptr mSimServer; + //! cahced reference to the monitor control node + boost::shared_ptr mMonitorControl; bool mGetAck; std::string mAckString; diff -Nru rcssserver3d-0.6.5/rcssagent3d/CMakeLists.txt rcssserver3d-0.6.6/rcssagent3d/CMakeLists.txt --- rcssserver3d-0.6.5/rcssagent3d/CMakeLists.txt 2011-03-26 12:12:49.000000000 +0000 +++ rcssserver3d-0.6.6/rcssagent3d/CMakeLists.txt 2012-05-22 23:18:54.000000000 +0000 @@ -16,7 +16,7 @@ add_executable(rcssagent3d ${rcssagent3d_SRCS}) if (WIN32) - set(NET_LIBS WS2_32.lib) + set(NET_LIBS ws2_32.lib) endif (WIN32) target_link_libraries(rcssagent3d ${SPARK_LIBRARIES} ${SALT_LIBRARIES} diff -Nru rcssserver3d-0.6.5/rcssmonitor3d/main.cpp rcssserver3d-0.6.6/rcssmonitor3d/main.cpp --- rcssserver3d-0.6.5/rcssmonitor3d/main.cpp 2011-03-26 12:12:50.000000000 +0000 +++ rcssserver3d-0.6.6/rcssmonitor3d/main.cpp 2012-05-22 23:18:55.000000000 +0000 @@ -2,7 +2,7 @@ this file is part of rcssserver3D Fri May 9 2003 Copyright (C) 2003 Koblenz University - $Id: main.cpp 181 2010-02-28 10:55:34Z marianbuchta $ + $Id: main.cpp 292 2012-02-14 15:51:26Z sgvandijk $ 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 @@ -45,8 +45,8 @@ class MonitorSpark : public Spark { public: - MonitorSpark(const std::string& relPathPrefix) : - Spark(relPathPrefix) + MonitorSpark() : + Spark() {}; /** called once after Spark finished it's init */ @@ -121,6 +121,17 @@ GetScriptServer()->Eval(serverIPStr); } } + else if (strcmp(argv[i], "--server-port") == 0) + { + i++; + if (i < argc) + GetScriptServer()->Eval(string("$monitorPort = ") + argv[i]); + else + { + PrintHelp(); + return false; + } + } } return true; @@ -154,7 +165,7 @@ int main(int argc, char** argv) { // the spark app framework instance - MonitorSpark spark("../../"); + MonitorSpark spark; if (! spark.Init(argc, argv)) { diff -Nru rcssserver3d-0.6.5/rcssmonitor3d/rcssmonitor3d.rb rcssserver3d-0.6.6/rcssmonitor3d/rcssmonitor3d.rb --- rcssserver3d-0.6.5/rcssmonitor3d/rcssmonitor3d.rb 2011-03-26 12:12:50.000000000 +0000 +++ rcssserver3d-0.6.6/rcssmonitor3d/rcssmonitor3d.rb 2012-05-22 23:18:55.000000000 +0000 @@ -41,7 +41,7 @@ # sparkResetLogging() -sparkLogAllToCerr() +sparkLogErrorToCerr() # sparkLogAllToFile('./spark.txt') # sparkLogDebugToCerr() diff -Nru rcssserver3d-0.6.5/rcssserver3d/CMakeLists.txt rcssserver3d-0.6.6/rcssserver3d/CMakeLists.txt --- rcssserver3d-0.6.5/rcssserver3d/CMakeLists.txt 2011-03-26 12:12:50.000000000 +0000 +++ rcssserver3d-0.6.6/rcssserver3d/CMakeLists.txt 2012-05-22 23:18:55.000000000 +0000 @@ -31,7 +31,9 @@ internalsoccermonitor.rb internalsoccerbindings.rb DESTINATION ${DATADIR}/${CMAKE_PROJECT_NAME}) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/rcsoccersim3d - ${CMAKE_CURRENT_BINARY_DIR}/simspark DESTINATION ${BINDIR} - PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ - GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE) +if (NOT WIN32) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/rcsoccersim3d + ${CMAKE_CURRENT_BINARY_DIR}/simspark DESTINATION ${BINDIR} + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE) +endif (NOT WIN32) diff -Nru rcssserver3d-0.6.5/rcssserver3d/main.cpp rcssserver3d-0.6.6/rcssserver3d/main.cpp --- rcssserver3d-0.6.5/rcssserver3d/main.cpp 2011-03-26 12:12:50.000000000 +0000 +++ rcssserver3d-0.6.6/rcssserver3d/main.cpp 2012-05-22 23:18:55.000000000 +0000 @@ -2,7 +2,7 @@ this file is part of rcssserver3D Fri May 9 2003 Copyright (C) 2003 Koblenz University - $Id: main.cpp 260 2011-03-25 00:29:08Z hedayat $ + $Id: main.cpp 292 2012-02-14 15:51:26Z sgvandijk $ 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 @@ -45,8 +45,8 @@ class SimSpark : public Spark { public: - SimSpark(const std::string& relPathPrefix) : - Spark(relPathPrefix), + SimSpark() : + Spark(), mScriptPath("rcssserver3d.rb") {}; @@ -83,10 +83,11 @@ GetLog()->Normal() << "\nusage: rcssserver3d [options] [script]\n" << "\noptions:\n" - << " --help\t\t\t print this message.\n" - << " --script-path PATH\t set the script path (rcssserver3d.rb path).\n" - << "--agent-port PORTNUM\t port for agents to connect to.\n" - << "--server-port PORTNUM\t port for monitors to connect to.\n" + << " --help\t\t\t\t print this message.\n" + << " --script-path PATH\t\t set the script path (rcssserver3d.rb path).\n" + << " --init-script-prefix PATH\t path prefix for init scripts (spark.rb, oxygen.rb, etc.).\n" + << " --agent-port PORTNUM\t\t port for agents to connect to.\n" + << " --server-port PORTNUM\t\t port for monitors to connect to.\n" << "\n"; } @@ -166,7 +167,7 @@ int main(int argc, char** argv) { // the spark app framework instance - SimSpark spark("../../"); + SimSpark spark; if (! spark.Init(argc, argv)) { diff -Nru rcssserver3d-0.6.5/rcssserver3d/naosoccersim.rb rcssserver3d-0.6.6/rcssserver3d/naosoccersim.rb --- rcssserver3d-0.6.5/rcssserver3d/naosoccersim.rb 2011-03-26 12:12:50.000000000 +0000 +++ rcssserver3d-0.6.6/rcssserver3d/naosoccersim.rb 2012-05-22 23:18:55.000000000 +0000 @@ -37,21 +37,27 @@ end # the soccer field dimensions in meters -addSoccerVar('FieldLength', 21.0) -addSoccerVar('FieldWidth', 14.0) +addSoccerVar('FieldLength', 30.0) +addSoccerVar('FieldWidth', 20.0) addSoccerVar('FieldHeight', 40.0) addSoccerVar('GoalWidth', 2.1) addSoccerVar('GoalDepth', 0.6) addSoccerVar('GoalHeight', 0.8) addSoccerVar('PenaltyLength',1.8) addSoccerVar('PenaltyWidth',3.9) -addSoccerVar('FreeKickDistance', 1.3) -addSoccerVar('FreeKickMoveDist', 1.5) +addSoccerVar('FreeKickDistance', 2.0) +addSoccerVar('FreeKickMoveDist', 2.2) addSoccerVar('GoalKickDist', 1.0) -addSoccerVar('AutomaticKickOff', false) -addSoccerVar('WaitBeforeKickOff', 2.0) addSoccerVar('BorderSize', 0.0) # prevent complaining about missing variable +# soccer game settings +addSoccerVar('AutomaticKickOff', false) +addSoccerVar('WaitBeforeKickOff', 30.0) +addSoccerVar('CoinTossForKickOff', false) + +addSoccerVar('AutomaticQuit', false) +addSoccerVar('ChangeSidesInSecondHalf', true) + # agent parameters addSoccerVar('AgentRadius', 0.4) diff -Nru rcssserver3d-0.6.5/windows/install_extra.nsi rcssserver3d-0.6.6/windows/install_extra.nsi --- rcssserver3d-0.6.5/windows/install_extra.nsi 2011-03-26 12:12:51.000000000 +0000 +++ rcssserver3d-0.6.6/windows/install_extra.nsi 2012-05-22 23:18:55.000000000 +0000 @@ -1,24 +1,37 @@ -CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\RCSSServer3D.lnk" "$INSTDIR\bin\rcssserver3d.cmd" -CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\RCSSMonitor3D.lnk" "$INSTDIR\bin\rcssmonitor3d.cmd" -!insertmacro MUI_STARTMENU_WRITE_END -!define MUI_STARTMENUPAGE_CURRENT_ID "SOMETHING_NOT_AVAILABLE" +; Creating Start Menu shortcuts only if it is enabled +Var /GLOBAL MyTemp +StrCpy $MyTemp "${MUI_STARTMENUPAGE_Application_VARIABLE}" 1 + +;If the folder start with >, the user has chosen not to create a shortcut +${if} $MyTemp != ">" + CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\RCSSServer3D.lnk" "$INSTDIR\bin\rcssserver3d.cmd" + CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\RCSSMonitor3D.lnk" "$INSTDIR\bin\rcssmonitor3d.cmd" + CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\RCSoccerSim3D.lnk" "$INSTDIR\bin\rcsoccersim3d.cmd" +${endif} + WriteRegExpandStr HKLM 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment\' 'RCSSSERVER3D_DIR' '$INSTDIR' ClearErrors FileOpen $0 $INSTDIR\bin\rcssserver3d.cmd w -FileWrite $0 'PATH=%PATH%;%SPARK_DIR%\lib\simspark;%SPARK_DIR%\lib\thirdparty;%RCSSSERVER3D_DIR%\lib\rcssserver3d$\n' +FileWrite $0 'PATH %PATH%;%SPARK_DIR%\lib\simspark;%SPARK_DIR%\lib\thirdparty;%RCSSSERVER3D_DIR%\lib\rcssserver3d$\n' FileWrite $0 'cd "%RCSSSERVER3D_DIR%\bin\"$\n' -FileWrite $0 'rcssserver3d.exe %1 %2 %3 %4' +FileWrite $0 'rcssserver3d.exe %1 %2 %3 %4$\n' FileClose $0 ClearErrors FileOpen $0 $INSTDIR\bin\rcssmonitor3d.cmd w -FileWrite $0 'PATH=%PATH%;%SPARK_DIR%\lib\simspark;%SPARK_DIR%\lib\thirdparty;%RCSSSERVER3D_DIR%\lib\rcssserver3d$\n' +FileWrite $0 'PATH %PATH%;%SPARK_DIR%\lib\simspark;%SPARK_DIR%\lib\thirdparty;%RCSSSERVER3D_DIR%\lib\rcssserver3d$\n' FileWrite $0 'cd "%RCSSSERVER3D_DIR%\bin\"$\n' -FileWrite $0 'rcssmonitor3d.exe %1 %2 %3 %4' +FileWrite $0 'rcssmonitor3d.exe %1 %2 %3 %4$\n' FileClose $0 ClearErrors FileOpen $0 $INSTDIR\bin\rcssagent3d.cmd w -FileWrite $0 'PATH=%PATH%;%SPARK_DIR%\lib\simspark;%SPARK_DIR%\lib\thirdparty;%RCSSSERVER3D_DIR%\lib\rcssserver3d$\n' +FileWrite $0 'PATH %PATH%;%SPARK_DIR%\lib\simspark;%SPARK_DIR%\lib\thirdparty;%RCSSSERVER3D_DIR%\lib\rcssserver3d$\n' FileWrite $0 'cd "%RCSSSERVER3D_DIR%\bin\"$\n' -FileWrite $0 'rcssagent3d.exe %1 %2 %3 %4' +FileWrite $0 'rcssagent3d.exe %1 %2 %3 %4$\n' FileClose $0 +ClearErrors +FileOpen $0 $INSTDIR\bin\rcsoccersim3d.cmd w +FileWrite $0 'start cmd /c "%RCSSSERVER3D_DIR%\bin\rcssserver3d.cmd"$\n' +FileWrite $0 'start /b /wait cmd /c "%RCSSSERVER3D_DIR%\bin\rcssmonitor3d.cmd"$\n' +FileClose $0 + diff -Nru rcssserver3d-0.6.5/windows/uninstall_extra.nsi rcssserver3d-0.6.6/windows/uninstall_extra.nsi --- rcssserver3d-0.6.5/windows/uninstall_extra.nsi 2011-03-26 12:12:51.000000000 +0000 +++ rcssserver3d-0.6.6/windows/uninstall_extra.nsi 2012-05-22 23:18:55.000000000 +0000 @@ -1,6 +1,7 @@ Delete '$INSTDIR\bin\rcssserver3d.cmd' Delete '$INSTDIR\bin\rcssmonitor3d.cmd' Delete '$INSTDIR\bin\rcssagent3d.cmd' +Delete '$INSTDIR\bin\rcsoccersim3d.cmd' DeleteRegValue HKLM 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment\' 'RCSSSERVER3D_DIR' Var /GLOBAL STARTMENU_DIR_FORLINKS @@ -8,3 +9,5 @@ Delete "$SMPROGRAMS\$STARTMENU_DIR_FORLINKS\RCSSServer3D.lnk" Delete "$SMPROGRAMS\$STARTMENU_DIR_FORLINKS\RCSSMonitor3D.lnk" +Delete "$SMPROGRAMS\$STARTMENU_DIR_FORLINKS\RCSoccerSim3D.lnk" +