|
From: <he...@us...> - 2015-09-12 01:48:26
|
Revision: 399
http://sourceforge.net/p/simspark/svn/399
Author: hedayat
Date: 2015-09-12 01:48:23 +0000 (Sat, 12 Sep 2015)
Log Message:
-----------
Add sparkgui and guiplugin to rcssserver3d and update CMake files
Modified Paths:
--------------
trunk/rcssserver3d/AUTHORS
trunk/rcssserver3d/CMakeLists.txt
trunk/rcssserver3d/cmake/FindSpark.cmake
trunk/rcssserver3d/data/scripts/bindings.rb
trunk/rcssserver3d/doc/Doxyfile.in
trunk/rcssserver3d/plugin/CMakeLists.txt
trunk/rcssserver3d/plugin/soccer/CMakeLists.txt
trunk/rcssserver3d/plugin/soccer/rcs3dmonitor/rcs3dmonitor.h
trunk/rcssserver3d/plugin/soccer/sexpmonitor/sexpmonitor.h
trunk/rcssserver3d/plugin/soccermonitor/CMakeLists.txt
trunk/rcssserver3d/rcssagent3d/CMakeLists.txt
trunk/rcssserver3d/rcssmonitor3d/CMakeLists.txt
trunk/rcssserver3d/rcssserver3d/CMakeLists.txt
trunk/simspark-utilities/cmake/FindSpark.cmake
Added Paths:
-----------
trunk/rcssserver3d/cmake/FindCarbon.cmake
trunk/rcssserver3d/guiplugin/
trunk/rcssserver3d/guiplugin/CMakeLists.txt
trunk/rcssserver3d/guiplugin/soccercontrolframe/
trunk/rcssserver3d/guiplugin/soccercontrolframe/CMakeLists.txt
trunk/rcssserver3d/guiplugin/soccercontrolframe/export.h
trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.cpp
trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.h
trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.ui
trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe_soccercommands.cpp
trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe_soccercommands.h
trunk/rcssserver3d/sparkgui/
trunk/rcssserver3d/sparkgui/CMakeLists.txt
trunk/rcssserver3d/sparkgui/internalsoccerbindingsgui.rb
trunk/rcssserver3d/sparkgui/internalsoccermonitorgui.rb
trunk/rcssserver3d/sparkgui/main.cpp
trunk/rcssserver3d/sparkgui/naosoccersimgui.rb
trunk/rcssserver3d/sparkgui/rcssserver3dintegrated.rb
trunk/rcssserver3d/sparkgui/rcssserver3dinternal.rb
trunk/rcssserver3d/sparkgui/soccersimgui.rb
trunk/rcssserver3d/sparkgui/sparkgui_config.h.cmake
Modified: trunk/rcssserver3d/AUTHORS
===================================================================
--- trunk/rcssserver3d/AUTHORS 2015-09-12 01:47:34 UTC (rev 398)
+++ trunk/rcssserver3d/AUTHORS 2015-09-12 01:48:23 UTC (rev 399)
@@ -11,6 +11,7 @@
Joschka Bödecker <jbo...@un...>
Christoph Ringelstein <cr...@un...>
Hesham Ebrahimi <hes...@gm...>
+Patrick Geib <pg...@un...>
Also see files ChangeLog and THANKS.
Modified: trunk/rcssserver3d/CMakeLists.txt
===================================================================
--- trunk/rcssserver3d/CMakeLists.txt 2015-09-12 01:47:34 UTC (rev 398)
+++ trunk/rcssserver3d/CMakeLists.txt 2015-09-12 01:48:23 UTC (rev 399)
@@ -31,6 +31,8 @@
find_package(DevIL REQUIRED)
find_package(ODE REQUIRED)
find_package(OpenGL REQUIRED)
+find_package(Carbon)
+find_package(Qt4 COMPONENTS QtXml QtOpenGl QtGui QtCore)
########## add extra flags ##########
if(NOT CMAKE_BUILD_TYPE)
@@ -40,11 +42,11 @@
add_definitions(-DHAVE_CONFIG_H ${ODE_CFLAGS})
include_directories(${CMAKE_BINARY_DIR} ${Boost_INCLUDE_DIRS} ${ODE_INCLUDE_DIR}
${SPARK_INCLUDE_DIR} ${SALT_INCLUDE_DIR} ${ZEITGEIST_INCLUDE_DIR}
- ${OXYGEN_INCLUDE_DIR} ${KEROSIN_INCLUDE_DIR})
+ ${OXYGEN_INCLUDE_DIR} ${KEROSIN_INCLUDE_DIR} ${CARBON_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIRS})
if (UNIX)
- set(CMAKE_CXX_FLAGS $ENV{CXXFLAGS} CACHE
+ set(CMAKE_CXX_FLAGS $ENV{CXXFLAGS} "-std=gnu++11" CACHE
STRING "Common C++ compiler flags" FORCE)
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -W -Wall -Woverloaded-virtual" CACHE
STRING "C++ compiler flags for Debug builds" FORCE)
@@ -69,6 +71,8 @@
set(CMAKE_SHARED_MODULE_PREFIX "")
mark_as_advanced(BINDIR LIBDIR DATADIR INCLUDEDIR)
+
+set(GUI_DATA_DIR ${DATADIR}/carbon)
########## generate configuration file ##########
if (APPLE)
@@ -82,15 +86,34 @@
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/rcssserver3d_config.h.cmake
${CMAKE_CURRENT_BINARY_DIR}/rcssserver3d_config.h)
+
+########## Additional variables for config files ##########
+if (CARBON_FOUND)
+ set(carbondatadir ${CARBON_DATA_DIR})
+ set(carbonlayoutlibdir ${CARBON_ROOT_DIR}/lib/guilayout)
+ set(carbonpluginlibdir ${CARBON_ROOT_DIR}/lib/guiplugin)
+ set(guipluginlibdir ${CMAKE_INSTALL_PREFIX}/lib/guiplugin)
+ set(GUI_PLUGIN_INCLUDE_DIR include/guiplugin)
+
+ set(carbonsetupdir ${carbondatadir}/setups)
+ set(carbonscriptdir ${carbondatadir}/scripts)
+ set(sparkscriptdir ${CARBON_ROOT_DIR}/${DATADIR}/simspark)
+endif (CARBON_FOUND)
+
########## add subdirectories ############
+set(PLUGIN_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/plugin)
+
add_subdirectory(data)
add_subdirectory(doc)
add_subdirectory(plugin)
add_subdirectory(rcssagent3d)
add_subdirectory(rcssmonitor3d)
add_subdirectory(rcssserver3d)
+if (CARBON_FOUND)
+ add_subdirectory(guiplugin)
+ add_subdirectory(sparkgui)
+endif (CARBON_FOUND)
-
########### install files ###############
install(FILES AUTHORS ChangeLog COPYING NEWS README THANKS TODO
Added: trunk/rcssserver3d/cmake/FindCarbon.cmake
===================================================================
--- trunk/rcssserver3d/cmake/FindCarbon.cmake (rev 0)
+++ trunk/rcssserver3d/cmake/FindCarbon.cmake 2015-09-12 01:48:23 UTC (rev 399)
@@ -0,0 +1,51 @@
+# - Find Carbon
+# Find the native Carbon includes and libraries
+#
+# CARBON_INCLUDE_DIR - where to find carbon include files
+# CARBON_LIB_DIR - where to find carbon libraries
+# CARBON_LIBRARIES - list of libraries when using carbon (contains first found carbon lib, debug or release)
+# CARBON_LIBRARY_DEBUG - carbon debug library
+# CARBON_LIBRARY_RELEASE - carbon release library
+# CARBON_FOUND - true if a carbon library was found
+
+# Carbon section
+IF (CARBON_INCLUDE_DIR)
+ # Already in cache, be silent
+ SET(CARBON_FIND_QUIETLY TRUE)
+ENDIF (CARBON_INCLUDE_DIR)
+
+SET(CARBON_DIR $ENV{CARBON_DIR} "C:/Program Files/simspark" "C:/Program Files (x86)/simspark" "C:/library/simspark")
+
+FIND_PATH(CARBON_INCLUDE_DIR carbon/carbon.h
+ PATHS ${CARBON_DIR}
+ PATH_SUFFIXES simspark include/simspark)
+
+FIND_PATH(CARBON_ROOT_DIR share/carbon/setups/DefaultSetupGrid.xml
+ PATHS ${CARBON_DIR})
+
+FIND_PATH(CARBON_DATA_DIR setups/DefaultSetupGrid.xml
+ PATHS ${CARBON_DIR}
+ PATH_SUFFIXES share/carbon)
+
+SET(CARBON_NAMES carbon carbon_debug)
+FIND_LIBRARY(CARBON_LIBRARY NAMES ${CARBON_NAMES}
+ PATHS ${CARBON_DIR}
+ PATH_SUFFIXES simspark lib/simspark)
+
+GET_FILENAME_COMPONENT(CARBON_LIB_DIR ${CARBON_LIBRARY} PATH)
+
+# handle the QUIETLY and REQUIRED arguments and set CARBON_FOUND to TRUE if
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(CARBON DEFAULT_MSG CARBON_LIBRARY
+ CARBON_INCLUDE_DIR)
+
+IF(CARBON_FOUND)
+ SET( CARBON_LIBRARIES ${CARBON_LIBRARY} )
+ STRING(REPLACE "carbon." "carbon_debug." CARBON_LIBRARY_DEBUG ${CARBON_LIBRARY})
+ STRING(REPLACE "carbon_debug." "carbon." CARBON_LIBRARY_RELEASE ${CARBON_LIBRARY})
+ELSE(CARBON_FOUND)
+ SET( CARBON_LIBRARIES )
+ENDIF(CARBON_FOUND)
+
+MARK_AS_ADVANCED( CARBON_PLUGIN_LIB_DIR CARBON_LAYOUT_LIB_DIR CARBON_DIR CARBON_LIBRARY CARBON_LIBRARY_RELEASE CARBON_LIBRARY_DEBUG CARBON_INCLUDE_DIR )
Modified: trunk/rcssserver3d/cmake/FindSpark.cmake
===================================================================
--- trunk/rcssserver3d/cmake/FindSpark.cmake 2015-09-12 01:47:34 UTC (rev 398)
+++ trunk/rcssserver3d/cmake/FindSpark.cmake 2015-09-12 01:48:23 UTC (rev 399)
@@ -1,25 +1,39 @@
# - Find Spark
# Find the native Spark includes and libraries
#
-# SPARK_INCLUDE_DIR - where to find spark include files
-# SPARK_LIB_DIR - where to find spark libraries
-# SPARK_LIBRARIES - List of libraries when using spark.
-# SPARK_FOUND - True if spark found.
-# SALT_INCLUDE_DIR - where to find salt include files
-# SALT_LIBRARIES - List of libraries when using salt.
-# SALT_FOUND - True if salt found.
-# ZEITGEIST_INCLUDE_DIR - where to find zeitgeist include files
-# ZEITGEIST_LIBRARIES - List of libraries when using zeitgeist.
-# ZEITGEIST_FOUND - True if zeitgeist found.
-# OXYGEN_INCLUDE_DIR - where to find oxygen include files
-# OXYGEN_LIBRARIES - List of libraries when using oxygen.
-# OXYGEN_FOUND - True if oxygen found.
-# KEROSIN_INCLUDE_DIR - where to find kerosin include files
-# KEROSIN_LIBRARIES - List of libraries when using kerosin.
-# KEROSIN_FOUND - True if kerosin found.
-# RCSSNET3D_INCLUDE_DIR - where to find kerosin include files
-# RCSSNET3D_LIBRARIES - List of libraries when using kerosin.
-# RCSSNET3D_FOUND - True if kerosin found.
+# SPARK_INCLUDE_DIR - where to find spark include files
+# SPARK_LIB_DIR - where to find spark libraries
+# SPARK_LIBRARIES - list of libraries when using spark (contains first found spark lib, debug or release)
+# SPARK_LIBRARY_DEBUG - spark debug library
+# SPARK_LIBRARY_RELEASE - spark release library
+# SPARK_FOUND - true if a spark library was found
+# SALT_INCLUDE_DIR - where to find salt include files
+# SALT_LIB_DIR - where to find salt libraries
+# SALT_LIBRARIES - list of libraries when using salt (contains first found salt lib, debug or release)
+# SALT_LIBRARY_DEBUG - salt debug library
+# SALT_LIBRARY_RELEASE - salt release library
+# SALT_FOUND - true if a salt library was found
+# KEROSIN_INCLUDE_DIR - where to find spark include files
+# KEROSIN_LIB_DIR - where to find spark libraries
+# KEROSIN_LIBRARIES - list of libraries when using spark (contains first found spark lib, debug or release)
+# KEROSIN_LIBRARY_DEBUG - spark debug library
+# KEROSIN_LIBRARY_RELEASE - spark release library
+# KEROSIN_FOUND - true if a spark library was found
+# ZEITGEIST_INCLUDE_DIR - where to find zeitgeist include files
+# ZEITGEIST_LIB_DIR - where to find zeitgeist libraries
+# ZEITGEIST_LIBRARIES - list of libraries when using zeitgeist (contains first found zeitgeist lib, debug or release)
+# ZEITGEIST_LIBRARY_DEBUG - zeitgeist debug library
+# ZEITGEIST_LIBRARY_RELEASE - zeitgeist release library
+# ZEITGEIST_FOUND - true if a zeitgeist library was found
+# OXYGEN_INCLUDE_DIR - where to find oxygen include files
+# OXYGEN_LIB_DIR - where to find oxygen libraries
+# OXYGEN_LIBRARIES - list of libraries when using oxygen (contains first found oxygen lib, debug or release)
+# OXYGEN_LIBRARY_DEBUG - oxygen debug library
+# OXYGEN_LIBRARY_RELEASE - oxygen release library
+# OXYGEN_FOUND - true if a oxygen library was found
+# RCSSNET3D_INCLUDE_DIR - where to find rcssnet include files
+# RCSSNET3D_LIBRARIES - List of libraries when using rcssnet.
+# RCSSNET3D_FOUND - True if rcssnet found.
# Spark section
IF (SPARK_INCLUDE_DIR)
@@ -30,16 +44,16 @@
SET(SPARK_DIR $ENV{SPARK_DIR} "C:/Program Files/simspark" "C:/Program Files (x86)/simspark" "C:/library/simspark")
FIND_PATH(SPARK_INCLUDE_DIR spark/spark.h
- HINTS ${SPARK_DIR}
+ PATHS ${SPARK_DIR}
PATH_SUFFIXES simspark include/simspark)
SET(SPARK_NAMES spark spark_debug)
FIND_LIBRARY(SPARK_LIBRARY NAMES ${SPARK_NAMES}
- HINTS ${SPARK_DIR}
+ PATHS ${SPARK_DIR}
PATH_SUFFIXES simspark lib/simspark)
GET_FILENAME_COMPONENT(SPARK_LIB_DIR ${SPARK_LIBRARY} PATH)
-# handle the QUIETLY and REQUIRED arguments and set SPARK_FOUND to TRUE if
+# handle the QUIETLY and REQUIRED arguments and set SPARK_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SPARK DEFAULT_MSG SPARK_LIBRARY
@@ -47,11 +61,13 @@
IF(SPARK_FOUND)
SET( SPARK_LIBRARIES ${SPARK_LIBRARY} )
+ STRING(REPLACE "spark." "spark_debug." SPARK_LIBRARY_DEBUG ${SPARK_LIBRARY})
+ STRING(REPLACE "spark_debug." "spark." SPARK_LIBRARY_RELEASE ${SPARK_LIBRARY})
ELSE(SPARK_FOUND)
SET( SPARK_LIBRARIES )
ENDIF(SPARK_FOUND)
-MARK_AS_ADVANCED( SPARK_LIBRARY SPARK_INCLUDE_DIR )
+MARK_AS_ADVANCED( SPARK_LIBRARY SPARK_LIBRARY_RELEASE SPARK_LIBRARY_DEBUG SPARK_INCLUDE_DIR )
# Salt section
IF (SALT_INCLUDE_DIR)
@@ -60,15 +76,15 @@
ENDIF (SALT_INCLUDE_DIR)
FIND_PATH(SALT_INCLUDE_DIR salt/salt.h
- HINTS ${SPARK_DIR}
+ PATHS ${SPARK_DIR}
PATH_SUFFIXES simspark include/simspark)
SET(SALT_NAMES salt salt_debug)
FIND_LIBRARY(SALT_LIBRARY NAMES ${SALT_NAMES}
- HINTS ${SPARK_DIR}
+ PATHS ${SPARK_DIR}
PATH_SUFFIXES simspark lib/simspark)
-# handle the QUIETLY and REQUIRED arguments and set SALT_FOUND to TRUE if
+# handle the QUIETLY and REQUIRED arguments and set SALT_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SALT DEFAULT_MSG SALT_LIBRARY
@@ -76,11 +92,13 @@
IF(SALT_FOUND)
SET( SALT_LIBRARIES ${SALT_LIBRARY} )
+ STRING(REPLACE "salt." "salt_debug." SALT_LIBRARY_DEBUG ${SALT_LIBRARY})
+ STRING(REPLACE "salt_debug." "salt." SALT_LIBRARY_RELEASE ${SALT_LIBRARY})
ELSE(SALT_FOUND)
SET( SALT_LIBRARIES )
ENDIF(SALT_FOUND)
-MARK_AS_ADVANCED( SALT_LIBRARY SALT_INCLUDE_DIR )
+MARK_AS_ADVANCED( SALT_LIBRARY SALT_LIBRARY_RELEASE SALT_LIBRARY_DEBUG SALT_INCLUDE_DIR )
# Zeitgeist section
IF (ZEITGEIST_INCLUDE_DIR)
@@ -89,15 +107,15 @@
ENDIF (ZEITGEIST_INCLUDE_DIR)
FIND_PATH(ZEITGEIST_INCLUDE_DIR zeitgeist/zeitgeist.h
- HINTS ${SPARK_DIR}
+ PATHS ${SPARK_DIR}
PATH_SUFFIXES simspark include/simspark)
SET(ZEITGEIST_NAMES zeitgeist zeitgeist_debug)
FIND_LIBRARY(ZEITGEIST_LIBRARY NAMES ${ZEITGEIST_NAMES}
- HINTS ${SPARK_DIR}
+ PATHS ${SPARK_DIR}
PATH_SUFFIXES simspark lib/simspark)
-# handle the QUIETLY and REQUIRED arguments and set ZEITGEIST_FOUND to TRUE if
+# handle the QUIETLY and REQUIRED arguments and set ZEITGEIST_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZEITGEIST DEFAULT_MSG ZEITGEIST_LIBRARY
@@ -105,11 +123,13 @@
IF(ZEITGEIST_FOUND)
SET( ZEITGEIST_LIBRARIES ${ZEITGEIST_LIBRARY} )
+ STRING(REPLACE "zeitgeist." "zeitgeist_debug." ZEITGEIST_LIBRARY_DEBUG ${ZEITGEIST_LIBRARY})
+ STRING(REPLACE "zeitgeist_debug." "zeitgeist." ZEITGEIST_LIBRARY_RELEASE ${ZEITGEIST_LIBRARY})
ELSE(ZEITGEIST_FOUND)
SET( ZEITGEIST_LIBRARIES )
ENDIF(ZEITGEIST_FOUND)
-MARK_AS_ADVANCED( ZEITGEIST_LIBRARY ZEITGEIST_INCLUDE_DIR )
+MARK_AS_ADVANCED( ZEITGEIST_LIBRARY ZEITGEIST_LIBRARY_RELEASE ZEITGEIST_LIBRARY_DEBUG ZEITGEIST_INCLUDE_DIR )
# Oxygen section
IF (OXYGEN_INCLUDE_DIR)
@@ -118,15 +138,15 @@
ENDIF (OXYGEN_INCLUDE_DIR)
FIND_PATH(OXYGEN_INCLUDE_DIR oxygen/oxygen.h
- HINTS ${SPARK_DIR}
+ PATHS ${SPARK_DIR}
PATH_SUFFIXES simspark include/simspark)
SET(OXYGEN_NAMES oxygen oxygen_debug)
FIND_LIBRARY(OXYGEN_LIBRARY NAMES ${OXYGEN_NAMES}
- HINTS ${SPARK_DIR}
+ PATHS ${SPARK_DIR}
PATH_SUFFIXES simspark lib/simspark)
-# handle the QUIETLY and REQUIRED arguments and set OXYGEN_FOUND to TRUE if
+# handle the QUIETLY and REQUIRED arguments and set OXYGEN_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OXYGEN DEFAULT_MSG OXYGEN_LIBRARY
@@ -134,11 +154,13 @@
IF(OXYGEN_FOUND)
SET( OXYGEN_LIBRARIES ${OXYGEN_LIBRARY} )
+ STRING(REPLACE "oxygen." "oxygen_debug." OXYGEN_LIBRARY_DEBUG ${OXYGEN_LIBRARY})
+ STRING(REPLACE "oxygen_debug." "oxygen." OXYGEN_LIBRARY_RELEASE ${OXYGEN_LIBRARY})
ELSE(OXYGEN_FOUND)
SET( OXYGEN_LIBRARIES )
ENDIF(OXYGEN_FOUND)
-MARK_AS_ADVANCED( OXYGEN_LIBRARY OXYGEN_INCLUDE_DIR )
+MARK_AS_ADVANCED( OXYGEN_LIBRARY OXYGEN_LIBRARY_RELEASE OXYGEN_LIBRARY_DEBUG OXYGEN_INCLUDE_DIR )
# Kerosin section
IF (KEROSIN_INCLUDE_DIR)
@@ -147,15 +169,15 @@
ENDIF (KEROSIN_INCLUDE_DIR)
FIND_PATH(KEROSIN_INCLUDE_DIR kerosin/kerosin.h
- HINTS ${SPARK_DIR}
+ PATHS ${SPARK_DIR}
PATH_SUFFIXES simspark include/simspark)
SET(KEROSIN_NAMES kerosin kerosin_debug)
FIND_LIBRARY(KEROSIN_LIBRARY NAMES ${KEROSIN_NAMES}
- HINTS ${SPARK_DIR}
+ PATHS ${SPARK_DIR}
PATH_SUFFIXES simspark lib/simspark)
-# handle the QUIETLY and REQUIRED arguments and set KEROSIN_FOUND to TRUE if
+# handle the QUIETLY and REQUIRED arguments and set KEROSIN_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(KEROSIN DEFAULT_MSG KEROSIN_LIBRARY
@@ -163,11 +185,13 @@
IF(KEROSIN_FOUND)
SET( KEROSIN_LIBRARIES ${KEROSIN_LIBRARY} )
+ STRING(REPLACE "kerosin." "kerosin_debug." KEROSIN_LIBRARY_DEBUG ${KEROSIN_LIBRARY})
+ STRING(REPLACE "kerosin_debug." "kerosin." KEROSIN_LIBRARY_RELEASE ${KEROSIN_LIBRARY})
ELSE(KEROSIN_FOUND)
SET( KEROSIN_LIBRARIES )
ENDIF(KEROSIN_FOUND)
-MARK_AS_ADVANCED( KEROSIN_LIBRARY KEROSIN_INCLUDE_DIR )
+MARK_AS_ADVANCED( KEROSIN_LIBRARY KEROSIN_LIBRARY_RELEASE KEROSIN_LIBRARY_DEBUG KEROSIN_INCLUDE_DIR )
# rcssnet3D
IF (RCSSNET3D_INCLUDE_DIR)
@@ -176,15 +200,15 @@
ENDIF (RCSSNET3D_INCLUDE_DIR)
FIND_PATH(RCSSNET3D_INCLUDE_DIR rcssnet/addr.hpp
- HINTS ${SPARK_DIR}
+ PATHS ${SPARK_DIR}
PATH_SUFFIXES simspark include/simspark)
SET(RCSSNET3D_NAMES rcssnet3D rcssnet3D_debug)
FIND_LIBRARY(RCSSNET3D_LIBRARY NAMES ${RCSSNET3D_NAMES}
- HINTS ${SPARK_DIR}
+ PATHS ${SPARK_DIR}
PATH_SUFFIXES simspark lib/simspark)
-# handle the QUIETLY and REQUIRED arguments and set RCSSNET3D_FOUND to TRUE if
+# handle the QUIETLY and REQUIRED arguments and set RCSSNET3D_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(RCSSNET3D DEFAULT_MSG RCSSNET3D_LIBRARY
Modified: trunk/rcssserver3d/data/scripts/bindings.rb
===================================================================
--- trunk/rcssserver3d/data/scripts/bindings.rb 2015-09-12 01:47:34 UTC (rev 398)
+++ trunk/rcssserver3d/data/scripts/bindings.rb 2015-09-12 01:48:23 UTC (rev 399)
@@ -14,9 +14,10 @@
inputServer.bindCommand('axisy', Command.MouseY);
inputServer.bindCommand('mouse_left', Command.Mouselook);
inputServer.bindCommand('mouse_right',Command.Up);
+ inputServer.bindCommand('mouse_middle',Command.Down);
inputServer.bindCommand('pagedown', Command.Down);
- inputServer.bindCommand('kp_minus', Command.Down);
- inputServer.bindCommand('kp_plus',Command.Up);
+ inputServer.bindCommand('kp_minus', Command.Down);
+ inputServer.bindCommand('kp_plus', Command.Up);
inputServer.bindCommand('pageup', Command.Up);
inputServer.bindCommand('q', Command.Quit)
inputServer.bindCommand('a', Command.Left)
Modified: trunk/rcssserver3d/doc/Doxyfile.in
===================================================================
--- trunk/rcssserver3d/doc/Doxyfile.in 2015-09-12 01:47:34 UTC (rev 398)
+++ trunk/rcssserver3d/doc/Doxyfile.in 2015-09-12 01:48:23 UTC (rev 399)
@@ -58,7 +58,9 @@
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
-INPUT = @top_srcdir@/plugin
+INPUT = @top_srcdir@/plugin \
+ @top_srcdir@/guiplugin \
+ @top_srcdir@/sparkgui
FILE_PATTERNS = *.h \
*.cpp
RECURSIVE = YES
Added: trunk/rcssserver3d/guiplugin/CMakeLists.txt
===================================================================
--- trunk/rcssserver3d/guiplugin/CMakeLists.txt (rev 0)
+++ trunk/rcssserver3d/guiplugin/CMakeLists.txt 2015-09-12 01:48:23 UTC (rev 399)
@@ -0,0 +1,9 @@
+if (WIN32 OR APPLE)
+ set(spark_gui_debug_libs ${SALT_LIBRARY_DEBUG} ${OXYGEN_LIBRARY_DEBUG} ${ZEITGEIST_LIBRARY_DEBUG}
+ ${KEROSIN_LIBRARY_DEBUG} ${SPARK_LIBRARY_DEBUG} ${CARBON_LIBRARY_DEBUG} ${RCSSNET3D_LIBRARY})
+ set(spark_gui_release_libs ${SALT_LIBRARY_RELEASE} ${OXYGEN_LIBRARY_RELEASE} ${ZEITGEIST_LIBRARY_RELEASE}
+ ${KEROSIN_LIBRARY_RELEASE} ${SPARK_LIBRARY_RELEASE} ${CARBON_LIBRARY_RELEASE} ${RCSSNET3D_LIBRARY})
+endif (WIN32 OR APPLE)
+
+add_subdirectory(soccercontrolframe)
+
Added: trunk/rcssserver3d/guiplugin/soccercontrolframe/CMakeLists.txt
===================================================================
--- trunk/rcssserver3d/guiplugin/soccercontrolframe/CMakeLists.txt (rev 0)
+++ trunk/rcssserver3d/guiplugin/soccercontrolframe/CMakeLists.txt 2015-09-12 01:48:23 UTC (rev 399)
@@ -0,0 +1,105 @@
+########### target files ###############
+set(soccercontrolframe_QOBJECT_HEADERS
+ soccercontrolframe.h
+)
+
+set(soccercontrolframe_HEADERS
+ soccercontrolframe_soccercommands.h
+ export.h
+
+ ${PLUGIN_INCLUDE_DIR}/soccer/agentstate/agentstate.h
+ ${PLUGIN_INCLUDE_DIR}/soccer/ballstateaspect/ballstateaspect.h
+ ${PLUGIN_INCLUDE_DIR}/soccer/gamestateaspect/gamestateaspect.h
+ ${PLUGIN_INCLUDE_DIR}/soccer/gamestateaspect/gamestateitem.h
+ ${PLUGIN_INCLUDE_DIR}/soccer/objectstate/objectstate.h
+ ${PLUGIN_INCLUDE_DIR}/soccer/soccerbase/soccerbase.h
+ ${PLUGIN_INCLUDE_DIR}/soccer/soccercontrolaspect/soccercontrolaspect.h
+ ${PLUGIN_INCLUDE_DIR}/soccer/soccernode/soccernode.h
+ ${PLUGIN_INCLUDE_DIR}/soccer/soccertypes.h
+)
+
+set(soccercontrolframe_SOURCES
+ soccercontrolframe.cpp
+ soccercontrolframe_soccercommands.cpp
+
+ ${PLUGIN_INCLUDE_DIR}/soccer/agentstate/agentstate.cpp
+ ${PLUGIN_INCLUDE_DIR}/soccer/agentstate/agentstate_c.cpp
+ ${PLUGIN_INCLUDE_DIR}/soccer/ballstateaspect/ballstateaspect.cpp
+ ${PLUGIN_INCLUDE_DIR}/soccer/ballstateaspect/ballstateaspect_c.cpp
+ ${PLUGIN_INCLUDE_DIR}/soccer/gamestateaspect/gamestateaspect.cpp
+ ${PLUGIN_INCLUDE_DIR}/soccer/gamestateaspect/gamestateaspect_c.cpp
+ ${PLUGIN_INCLUDE_DIR}/soccer/gamestateaspect/gamestateitem.cpp
+ ${PLUGIN_INCLUDE_DIR}/soccer/gamestateaspect/gamestateitem_c.cpp
+ ${PLUGIN_INCLUDE_DIR}/soccer/objectstate/objectstate.cpp
+ ${PLUGIN_INCLUDE_DIR}/soccer/objectstate/objectstate_c.cpp
+ ${PLUGIN_INCLUDE_DIR}/soccer/soccerbase/soccerbase.cpp
+ ${PLUGIN_INCLUDE_DIR}/soccer/soccercontrolaspect/soccercontrolaspect.cpp
+ ${PLUGIN_INCLUDE_DIR}/soccer/soccercontrolaspect/soccercontrolaspect_c.cpp
+ ${PLUGIN_INCLUDE_DIR}/soccer/soccernode/soccernode.cpp
+ ${PLUGIN_INCLUDE_DIR}/soccer/soccernode/soccernode_c.cpp
+)
+
+set(soccercontrolframe_FORMS
+ soccercontrolframe.ui
+)
+
+#set(soccercontrolframe_RESOURCES)
+
+########### qt properties ###############
+
+#Additional used libraries
+set(QT_USE_QTOPENGL TRUE)
+set(QT_USE_QTXML TRUE)
+
+#Include qt properties
+include(${QT_USE_FILE})
+add_definitions(${QT_DEFINITIONS})
+
+########### create library ###############
+
+#Meta object compiler wrapping of header files, forms and resources
+QT4_WRAP_CPP(soccercontrolframe_QOBJECT_HEADERS_MOC ${soccercontrolframe_QOBJECT_HEADERS})
+QT4_WRAP_UI(soccercontrolframe_FORMS_HEADERS ${soccercontrolframe_FORMS})
+#QT4_ADD_RESOURCES(soccercontrolframe_RESOURCES_RCC ${soccercontrolframe_RESOURCES})
+
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CARBON_INCLUDE_DIR}/carbon
+ ${FREETYPE_INCLUDE_DIRS}
+ ${IL_INCLUDE_DIR}
+ ${OPENGL_INCLUDE_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${PLUGIN_INCLUDE_DIR}/soccer
+ ${PLUGIN_INCLUDE_DIR})
+
+add_library(
+ soccercontrolframe MODULE
+ ${soccercontrolframe_SOURCES}
+ ${soccercontrolframe_QOBJECT_HEADERS}
+ ${soccercontrolframe_QOBJECT_HEADERS_MOC}
+ ${soccercontrolframe_HEADERS}
+ ${soccercontrolframe_FORMS_HEADERS})
+ #${soccercontrolframe_RESOURCES_RCC})
+
+set(soccercontrolframe_LIBS ${OPENGL_LIBRARIES} ${QT_LIBRARIES})
+set(soccercontrolframe_DEBUG_LIBS ${spark_gui_debug_libs})
+set(soccercontrolframe_RELEASE_LIBS ${spark_gui_release_libs})
+
+target_link_libraries(soccercontrolframe ${soccercontrolframe_LIBS})
+FOREACH(LIB ${soccercontrolframe_DEBUG_LIBS})
+ target_link_libraries(soccercontrolframe debug ${LIB})
+ENDFOREACH(LIB)
+FOREACH(LIB ${soccercontrolframe_RELEASE_LIBS})
+ target_link_libraries(soccercontrolframe optimized ${LIB})
+ENDFOREACH(LIB)
+
+if (NOT APPLE)
+ set_target_properties(soccercontrolframe PROPERTIES VERSION 1.0.0 SOVERSION 1)
+endif (NOT APPLE)
+
+install(TARGETS soccercontrolframe DESTINATION ${guipluginlibdir})
+
+########### install files ###############
+
+install(DIRECTORY ./ DESTINATION ${GUI_PLUGIN_INCLUDE_DIR}/soccercontrolframe
+ FILES_MATCHING PATTERN "*.h" PATTERN ".svn" EXCLUDE)
Added: trunk/rcssserver3d/guiplugin/soccercontrolframe/export.h
===================================================================
--- trunk/rcssserver3d/guiplugin/soccercontrolframe/export.h (rev 0)
+++ trunk/rcssserver3d/guiplugin/soccercontrolframe/export.h 2015-09-12 01:48:23 UTC (rev 399)
@@ -0,0 +1,14 @@
+#ifndef EXPORT_LIB
+#define EXPORT_LIB
+/**
+ * \file soccercontrolframe/export.h
+ * \brief Exports the SoccerControlFrame class as a plugin from a shared library.
+ */
+
+#include "soccercontrolframe.h"
+
+PLUGINS_EXPORT_BEGIN()
+PLUGIN_EXPORT(SoccerControlFrame)
+PLUGINS_EXPORT_END()
+
+#endif
\ No newline at end of file
Added: trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.cpp
===================================================================
--- trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.cpp (rev 0)
+++ trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.cpp 2015-09-12 01:48:23 UTC (rev 399)
@@ -0,0 +1,610 @@
+/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*-
+
+ this file is part of rcssserver3D
+ Author: Patrick Geib
+ Copyright (C) 2012 RoboCup Soccer Server 3D Maintenance Group
+ $Id$
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+//Local
+#include "soccercontrolframe.h"
+#include "soccercontrolframe_soccercommands.h"
+#include "export.h"
+
+//Carbon
+#include <pluginmanager.h>
+#include <carbon.h>
+#include <simulationmanager.h>
+#include <simulation.h>
+#include <sparkcontroller.h>
+#include <guisimcontrol.h>
+#include <serverthread.h>
+#include <simspark.h>
+#include <settings.h>
+
+//SimSpark
+#include <oxygen/gamecontrolserver/gamecontrolserver.h>
+#include <zeitgeist/leaf.h>
+
+//Soccer
+#include "soccer/gamestateaspect/gamestateaspect.h"
+#include "soccer/soccerruleaspect/soccerruleaspect.h"
+#include "soccer/ballstateaspect/ballstateaspect.h"
+//#include <agentstate/agentstate.h>
+
+//Boost
+#include <boost/make_shared.hpp>
+
+//Qt
+#include <QValidator>
+
+using namespace boost;
+using namespace oxygen;
+using namespace SoccerControlFrameUtil;
+
+//--------------------------------------------------------------
+// Static
+//--------------------------------------------------------------
+
+//Factory registration
+REGISTER_EXPORT_FRAME(SoccerControlFrame, "soccercontrolframe", "Soccer", 1000)
+
+//Static class information
+void SoccerControlFrame::saveClassInfo()
+{
+ //Description
+ setClassInfo(mClassId, AbstractPlugin::PI_DESCRIPTION,
+ tr("The soccer control frame can be used to monitor and control the state of a simspark soccer simulation."));
+
+ //Icon
+ setClassInfo(mClassId, AbstractPlugin::PI_ICON_NAME, ":soccer");
+
+ //Tags
+ QStringList tags;
+ tags << "soccer" << "spark" << "rcssserver3d";
+ setClassInfo(mClassId, AbstractPlugin::PI_TAGS, tags);
+}
+
+//--------------------------------------------------------------
+// SoccerFrameUpdateControl
+//--------------------------------------------------------------
+
+SoccerFrameUpdateControl::SoccerFrameUpdateControl(SoccerControlFrame* parent)
+ : mParent(parent), CommandQueue(0)
+{
+}
+SoccerFrameUpdateControl::~SoccerFrameUpdateControl()
+{
+}
+
+void SoccerFrameUpdateControl::startCycle()
+{
+ emit stateStartCycle();
+}
+
+void SoccerFrameUpdateControl::endCycle()
+{
+ SparkCommand::CommandQueue::endCycle();
+ emit stateEndCycle();
+}
+
+void SoccerFrameUpdateControl::waitCycle()
+{
+ SparkCommand::CommandQueue::waitCycle();
+ emit stateWaitCycle();
+}
+
+//--------------------------------------------------------------
+// SoccerFrame
+//--------------------------------------------------------------
+// Public
+//--------------------------------------------------------------
+
+SoccerControlFrame::SoccerControlFrame() :
+ mSettings(getCarbon()->getSettings())
+{
+ //----------------
+ //Layout
+ ui.setupUi(this);
+ loadFrameDesign();
+
+ //----------------
+ //Variables
+ mInit = false;
+ mLastInitState = true; //--> 1 display update during initialization
+ mReadyUpdate = true;
+ mSelectedPlayer = -1;
+ mSelectedPlayMode = PM_NONE;
+ mUpdateTimer.setInterval(100);
+
+ //----------------
+ //Gui-Field init
+ ui.gameTimeEdit->setValidator(new QDoubleValidator(0.0, INT_MAX, 4, ui.gameTimeEdit));
+ ui.team1GoalsEdit->setValidator(new QIntValidator(0, INT_MAX, ui.team1GoalsEdit));
+ ui.team2GoalsEdit->setValidator(new QIntValidator(0, INT_MAX, ui.team2GoalsEdit));
+ ui.team1PenaltiesEdit->setValidator(new QIntValidator(0, INT_MAX, ui.team1PenaltiesEdit));
+ ui.team2PenaltiesEdit->setValidator(new QIntValidator(0, INT_MAX, ui.team2PenaltiesEdit));
+ ui.batteryEdit->setValidator(new QDoubleValidator(0.0, INT_MAX, 4, ui.batteryEdit));
+
+ //----------------
+ //Settings
+
+ loadDefaultSettings();
+ loadSettings();
+
+ //----------------
+ //Menu Entries
+
+ //----------------
+ //Connections
+ Simulation* simulation = &*getCarbon()->getSimulationManager()->getSimulation();
+ connect(simulation, SIGNAL(serverCreated(boost::shared_ptr<ServerThread>)), this, SLOT(updateServerCreated(boost::shared_ptr<ServerThread>)));
+
+ connect(&mUpdateTimer, SIGNAL(timeout()), this, SLOT(readyUpdate()));
+}
+
+SoccerControlFrame::~SoccerControlFrame()
+{
+
+}
+
+void SoccerControlFrame::init(const QStringList& parameters)
+{
+ //Combo box entries
+ mGameModes.clear();
+ ui.playModeComboBox->clear();
+
+ mGameModes.insert(PM_BeforeKickOff, GameMode(0, PM_BeforeKickOff, true, tr("Before Kickoff")));
+ mGameModes.insert(PM_KickOff_Left, GameMode(0, PM_KickOff_Left, true, tr("KickOff Left")));
+ mGameModes.insert(PM_KickOff_Right, GameMode(0, PM_KickOff_Right, true, tr("KickOff Right")));
+ mGameModes.insert(PM_PlayOn, GameMode(0, PM_PlayOn, true, tr("Play On")));
+ mGameModes.insert(PM_KickIn_Left, GameMode(0, PM_KickIn_Left, true, tr("Kick-In Left")));
+ mGameModes.insert(PM_KickIn_Right, GameMode(0, PM_KickIn_Right, true, tr("Kick-In Right")));
+ mGameModes.insert(PM_CORNER_KICK_LEFT, GameMode(0, PM_CORNER_KICK_LEFT, true, tr("Corner Kick Left")));
+ mGameModes.insert(PM_CORNER_KICK_RIGHT, GameMode(0, PM_CORNER_KICK_RIGHT, true, tr("Corner Kick Right")));
+ mGameModes.insert(PM_GOAL_KICK_LEFT, GameMode(0, PM_GOAL_KICK_LEFT, true, tr("Goal Kick Left")));
+ mGameModes.insert(PM_GOAL_KICK_RIGHT, GameMode(0, PM_GOAL_KICK_RIGHT, true, tr("Goal Kick Right")));
+ mGameModes.insert(PM_OFFSIDE_LEFT, GameMode(0, PM_OFFSIDE_LEFT, true, tr("Offside Left")));
+ mGameModes.insert(PM_OFFSIDE_RIGHT, GameMode(0, PM_OFFSIDE_RIGHT, true, tr("Offside Right")));
+ mGameModes.insert(PM_GameOver, GameMode(0, PM_GameOver, true, tr("Game Over")));
+ mGameModes.insert(PM_Goal_Left, GameMode(0, PM_Goal_Left, true, tr("Goal Left")));
+ mGameModes.insert(PM_Goal_Right, GameMode(0, PM_Goal_Right, true, tr("Goal Right")));
+ mGameModes.insert(PM_FREE_KICK_LEFT, GameMode(0, PM_FREE_KICK_LEFT, true, tr("Free Kick Left")));
+ mGameModes.insert(PM_FREE_KICK_RIGHT, GameMode(0, PM_FREE_KICK_RIGHT, true, tr("Free Kick Right")));
+
+ int run = 0;
+ for (auto it = mGameModes.begin(); it != mGameModes.end(); it++)
+ {
+ it->mIndex = run;
+ ui.playModeComboBox->addItem(it->mName);
+ run++;
+ }
+ mSelectedPlayMode = PM_BeforeKickOff;
+
+ tryInitSpark();
+ updateDisplay();
+}
+
+bool SoccerControlFrame::initialized()
+{
+ return mInit;
+}
+
+void SoccerControlFrame::loadSettings()
+{
+
+}
+
+void SoccerControlFrame::saveSettings()
+{
+
+}
+
+void SoccerControlFrame::loadDefaultSettings()
+{
+ mGameControlServerPath = "/sys/server/gamecontrol/";
+ mGameStateAspectPath = "/sys/server/gamecontrol/GameStateAspect/";
+ mSoccerRuleAspectPath = "/sys/server/gamecontrol/SoccerRuleAspect/";
+ mBallStateAspectPath = "/sys/server/gamecontrol/BallStateAspect/";
+}
+
+//--------------------------------------------------------------
+// Protected
+//--------------------------------------------------------------
+
+bool SoccerControlFrame::tryInitSpark()
+{
+ //If already initialized, simply update
+ if (mInit)
+ updateDisplay();
+
+ //If there is no spark controller, try to get it
+ if (mSparkController.get() == 0)
+ {
+ mServerThread = getCarbon()->getSimulationManager()->getSparkServerThread();
+
+ if (mServerThread.get() == 0)
+ return false;
+ else
+ {
+ mSparkController = mServerThread->getSparkController();
+ connect(&*mSparkController, SIGNAL(sparkRunning(SparkController*)), this, SLOT(updateSparkRunning(SparkController*)));
+ }
+ }
+
+ //If there is a spark controller, check for SimSpark
+ if (mSparkController->getSpark().get() != 0)
+ {
+ //There is a controller and simspark-> initialize
+
+ QString gameControlServer = mGameControlServerPath;
+ QString gameStateAspect = mGameStateAspectPath;
+ QString soccerRuleAspect = mSoccerRuleAspectPath;
+ QString ballStateAspect = mBallStateAspectPath;
+
+ //Try to find soccer aspects
+ if (mSettings->beginGroup(this, true, 1000)) //lock
+ {
+ gameControlServer = mSettings->value("mGameControlServerPath", mGameControlServerPath).toString();
+ gameStateAspect = mSettings->value("mGameStateAspectPath", mGameStateAspectPath).toString();
+ soccerRuleAspect = mSettings->value("mSoccerRuleAspectPath", mSoccerRuleAspectPath).toString();
+ ballStateAspect = mSettings->value("mBallStateAspectPath", mBallStateAspectPath).toString();
+ mSettings->endGroup(true); //unlock
+ }
+ else
+ {
+ LOG_WARNING() << "Could not read Settings object in SoccerControlFrame. Using default values for control node paths.";
+ }
+
+ SimSpark* spark = &*mSparkController->getSpark();
+ boost::shared_ptr<GameControlServer> gameControl(dynamic_pointer_cast<GameControlServer>(spark->GetCore()->Get(gameControlServer.toStdString())));
+ boost::shared_ptr<GameStateAspect> gameState (dynamic_pointer_cast<GameStateAspect> (spark->GetCore()->Get(gameStateAspect.toStdString())));
+ boost::shared_ptr<SoccerRuleAspect> soccerRule (dynamic_pointer_cast<SoccerRuleAspect> (spark->GetCore()->Get(soccerRuleAspect.toStdString())));
+ boost::shared_ptr<BallStateAspect> ballState (dynamic_pointer_cast<BallStateAspect> (spark->GetCore()->Get(ballStateAspect.toStdString())));
+
+ bool success = true;
+ if (!gameControl.get())
+ {
+ LOG_ERROR() << "Soccer GameControlServer not found. Expected it to be at " << gameControlServer << ".";
+ success = false;
+ }
+ if (!gameState.get())
+ {
+ LOG_ERROR() << "Soccer GameStateAspect not found. Expected it to be at " << gameStateAspect << ".";
+ success = false;
+ }
+ if (!soccerRule.get())
+ {
+ LOG_ERROR() << "Soccer SoccerRuleAspect not found. Expected it to be at " << soccerRuleAspect << ".";
+ success = false;
+ }
+ if (!ballState.get())
+ {
+ LOG_ERROR() << "Soccer BallStateAspect not found. Expected it to be at " << ballStateAspect << ".";
+ success = false;
+ }
+
+ if (success == false)
+ {
+ //Init failed, return
+ mGameControlServer.reset();
+ mRuleAspect.reset();
+ mBallAspect.reset();
+ mGameAspect.reset();
+ return false;
+ }
+
+ //All nodes found, init successful
+ mGameControlServer = gameControl;
+ mRuleAspect = soccerRule;
+ mBallAspect = ballState;
+ mGameAspect = gameState;
+
+ //Register control node that polls an update every time a cycle ended
+ registerUpdater();
+
+ mInit = true;
+ updateDisplay();
+ return true;
+ }
+ return false;
+}
+
+void SoccerControlFrame::registerUpdater()
+{
+ shared_ptr<GuiSimControl> simControl = mSparkController->getSimulationControl().lock();
+ if (simControl.get() == 0)
+ {
+ LOG_ERROR() << "No gui simulation control node found to register updater in.";
+ return;
+ }
+
+ //Remove old updater (should happen automatically, just to be safe)
+ if (mUpdater.get() != 0)
+ {
+ simControl->unregisterSimControl(mUpdater);
+ mUpdater.reset();
+ }
+
+ //Create new updater
+ mUpdater = shared_ptr<SoccerFrameUpdateControl>(new SoccerFrameUpdateControl(this));
+ simControl->registerSimControl(mUpdater);
+ connect(&*mUpdater, SIGNAL(stateEndCycle()), this, SLOT(onCycleFinished())); //Queued connection
+ connect(&*mUpdater, SIGNAL(stateWaitCycle()), this, SLOT(onCycleFinished())); //Queued connection
+
+ //Start update timer
+ mUpdateTimer.start();
+}
+
+//--------------------------------------------------------------
+// Private
+//--------------------------------------------------------------
+
+//--------------------------------------------------------------
+// Protected Slots
+//--------------------------------------------------------------
+
+void SoccerControlFrame::updateServerCreated(boost::shared_ptr<ServerThread> server)
+{
+ mSparkController = server->getSparkController();
+ connect(&*mSparkController, SIGNAL(sparkRunning(SparkController*)), this, SLOT(updateSparkRunning(SparkController*)));
+ tryInitSpark();
+}
+
+void SoccerControlFrame::updateSparkRunning(SparkController* controller)
+{
+ if (mSparkController.get() != 0)
+ {
+ if (mSparkController->getSpark().get() == controller->getSpark().get())
+ {
+ tryInitSpark();
+ }
+ }
+}
+
+void SoccerControlFrame::onCycleFinished()
+{
+ updateDisplay();
+ mReadyUpdate = false;
+}
+
+//--------------------------------------------------------------
+// Public Slots
+//--------------------------------------------------------------
+
+void SoccerControlFrame::readyUpdate()
+{
+ mReadyUpdate = true;
+}
+
+void SoccerControlFrame::updateDisplay()
+{
+ if (mLastInitState != mInit)
+ {
+ mLastInitState = mInit;
+ mUpdateCount = 0;
+
+ ui.batteryEdit->setEnabled(mInit);
+ ui.temperatureEdit->setEnabled(mInit);
+ ui.gameTimeEdit->setEnabled(mInit);
+ ui.team1GoalsEdit->setEnabled(mInit);
+ ui.team2GoalsEdit->setEnabled(mInit);
+ ui.team1PenaltiesEdit->setEnabled(mInit);
+ ui.team2PenaltiesEdit->setEnabled(mInit);
+
+ ui.gameTimeResetButton->setEnabled(mInit);
+ ui.resetBatteryButton->setEnabled(mInit);
+ ui.resetTemperatureButton->setEnabled(mInit);
+ ui.kickOffButton->setEnabled(mInit);
+ ui.playModeButton->setEnabled(mInit);
+ ui.playModeComboBox->setEnabled(mInit);
+
+ mSelectedPlayer = -1;
+ }
+
+ if (!mInit)
+ {
+ ui.batteryEdit->setText("");
+ ui.temperatureEdit->setText("");
+ ui.gameTimeEdit->setText("");
+ ui.team1GoalsEdit->setText("");
+ ui.team2GoalsEdit->setText("");
+ ui.team1PenaltiesEdit->setText("");
+ ui.team2PenaltiesEdit->setText("");
+ ui.team1NameLabel->setText(tr("Left"));
+ ui.team2NameLabel->setText(tr("Right"));
+ ui.agentNameLabel->setText("");
+ ui.agentTeamLabel->setText("");
+ ui.playModeLabel->setText(tr("Not initialized."));
+ }
+
+ if (mInit && mReadyUpdate)
+ {
+ //Read and display non-changing values
+ if (mUpdateCount == 0)
+ {
+ }
+
+ //Read and update changing values
+ ui.team1NameLabel->setText(mGameAspect->GetTeamName(TI_LEFT).c_str());
+ ui.team2NameLabel->setText(mGameAspect->GetTeamName(TI_RIGHT).c_str());
+ if (!ui.team1GoalsEdit->hasFocus()) ui.team1GoalsEdit->setText(QString::number(mGameAspect->GetScore(TI_LEFT)));
+ if (!ui.team2GoalsEdit->hasFocus()) ui.team2GoalsEdit->setText(QString::number(mGameAspect->GetScore(TI_RIGHT)));
+ if (!ui.team1PenaltiesEdit->hasFocus()) ui.team1PenaltiesEdit->setText("0");
+ if (!ui.team2PenaltiesEdit->hasFocus()) ui.team2PenaltiesEdit->setText("0");
+
+ if (!ui.gameTimeEdit->hasFocus()) ui.gameTimeEdit->setText(QString::number(mGameAspect->GetTime()));
+
+ auto pos = mGameModes.find((int)mGameAspect->GetPlayMode());
+ if (pos == mGameModes.end())
+ {
+ LOG_WARNING() << "Current game mode " << mGameAspect->GetPlayMode() << " is unknown.";
+ }
+ else
+ {
+ if (mUpdateCount == 0)
+ ui.playModeComboBox->setCurrentIndex(pos->mIndex);
+ ui.playModeLabel->setText(pos->mName);
+ }
+
+ updatePlayerDisplay();
+ }
+
+ mUpdateCount++;
+}
+
+void SoccerControlFrame::updatePlayerDisplay()
+{
+ if (mSelectedPlayer == -1)
+ return;
+
+ if (!mInit)
+ return;
+}
+
+void SoccerControlFrame::editGameTime()
+{
+ if (!mInit)
+ return;
+
+ mUpdater->queueCommand(make_shared<SoccerControlFrameUtil::SetTime>(mGameAspect, ui.gameTimeEdit->text().toFloat()));
+}
+
+void SoccerControlFrame::resetGameTime()
+{
+ if (!mInit)
+ return;
+
+ mUpdater->queueCommand(make_shared<SoccerControlFrameUtil::SetTime>(mGameAspect, 0.0));
+}
+
+void SoccerControlFrame::editTeam1Goals()
+{
+ if (!mInit)
+ return;
+
+ mUpdater->queueCommand(make_shared<SoccerControlFrameUtil::SetTeamGoals>(mGameAspect, TI_LEFT, ui.team1GoalsEdit->text().toInt()));
+}
+
+void SoccerControlFrame::editTeam2Goals()
+{
+ if (!mInit)
+ return;
+
+ mUpdater->queueCommand(make_shared<SoccerControlFrameUtil::SetTeamGoals>(mGameAspect, TI_LEFT, ui.team2GoalsEdit->text().toInt()));
+}
+
+void SoccerControlFrame::editTeam1Penalties()
+{
+ if (!mInit)
+ return;
+}
+
+void SoccerControlFrame::editTeam2Penalties()
+{
+ if (!mInit)
+ return;
+}
+
+void SoccerControlFrame::selectPlayMode(int index)
+{
+ if (!mInit)
+ return;
+
+ ui.playModeButton->setEnabled(false);
+
+ for (auto it = mGameModes.begin(); it != mGameModes.end(); it++)
+ {
+ if (it->mIndex == index)
+ {
+ mSelectedPlayMode = it->mMode;
+ ui.playModeButton->setEnabled(it->mManual);
+ }
+ }
+}
+
+void SoccerControlFrame::changePlayMode()
+{
+ if (!mInit)
+ return;
+
+ mUpdater->queueCommand(make_shared<SoccerControlFrameUtil::ChangePlayMode>(mGameAspect, mSelectedPlayMode));
+}
+
+void SoccerControlFrame::kickOff()
+{
+ if (!mInit)
+ return;
+
+ mUpdater->queueCommand(make_shared<SoccerControlFrameUtil::KickOff>(mGameAspect));
+}
+
+void SoccerControlFrame::clearPlayers()
+{
+ if (!mInit)
+ return;
+}
+
+
+void SoccerControlFrame::selectPlayer(int index)
+{
+ if (!mInit)
+ return;
+
+ mSelectedPlayer = -1;
+ updatePlayerDisplay();
+}
+
+void SoccerControlFrame::editBattery()
+{
+ if (!mInit)
+ return;
+
+ if (mSelectedPlayer == -1)
+ return;
+
+}
+
+void SoccerControlFrame::editTemperature()
+{
+ if (!mInit)
+ return;
+
+ if (mSelectedPlayer == -1)
+ return;
+
+}
+
+void SoccerControlFrame::resetBattery()
+{
+ if (!mInit)
+ return;
+
+ if (mSelectedPlayer == -1)
+ return;
+
+}
+
+void SoccerControlFrame::resetTemperature()
+{
+ if (!mInit)
+ return;
+
+ if (mSelectedPlayer == -1)
+ return;
+
+
+}
\ No newline at end of file
Added: trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.h
===================================================================
--- trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.h (rev 0)
+++ trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.h 2015-09-12 01:48:23 UTC (rev 399)
@@ -0,0 +1,391 @@
+/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*-
+
+ this file is part of rcssserver3D
+ Author: Patrick Geib
+ Copyright (C) 2012 RoboCup Soccer Server 3D Maintenance Group
+ $Id$
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef SOCCERCONTROLFRAME_H
+#define SOCCERCONTROLFRAME_H
+/**
+ * \file soccercontrolframe.h
+ * \brief Contains SoccerControlFrame and SoccerFrameUpdateControl classes.
+ */
+
+#include "ui_soccercontrolframe.h"
+#include "attachableframe.h"
+#include "isimcontrol.h"
+#include "sparkcommandqueue.h"
+
+#include <boost/shared_ptr.hpp>
+#include <QObject>
+#include <QTimer>
+
+#include <soccer/soccertypes.h>
+
+class ServerThread;
+class SimSpark;
+class Settings;
+
+class SoccerFrameUpdateControl;
+class SoccerControlFrame;
+
+class GameStateAspect;
+class SoccerRuleAspect;
+class BallStateAspect;
+
+namespace oxygen
+{
+ class GameControlServer;
+}
+
+/*!
+ \brief Update command queue read and set soccer variables and settings in the SimSpark simulation.
+*/
+class SoccerFrameUpdateControl : public QObject, public SparkCommand::CommandQueue // is ISimControl
+{
+ Q_OBJECT
+
+public:
+ //public functions
+
+ /*!
+ \brief Constructor.
+ */
+ SoccerFrameUpdateControl(SoccerControlFrame* parent);
+ /*!
+ \brief Destructor.
+ */
+ ~SoccerFrameUpdateControl();
+
+ /*!
+ \brief Called when the simulation cycle starts.
+
+ Emits stateStartCycle()
+ */
+ virtual void startCycle();
+ /*!
+ \brief Called when the simulation cycle ends.
+
+ Executes update commands.
+ Emits stateEndCycle()
+ */
+ virtual void endCycle();
+ /*!
+ \brief Called when the simulation executes a wait-cycle.
+
+ Executes update commands.
+ Emits stateWaitCycle()
+ */
+ virtual void waitCycle();
+
+public: signals:
+ //public signals
+
+ /*!
+ \brief Emittet when simualtion cycle starts.
+
+ Calls update function.
+ */
+ void stateStartCycle();
+ /*!
+ \brief Emitted when simulation cycle ends.
+
+ Calls update function.
+ */
+ void stateEndCycle();
+ /*!
+ \brief Emitted when simulation executes a wait-cycle.
+
+ Calls update function.
+ */
+ void stateWaitCycle();
+
+public:
+ //public members
+
+ SoccerControlFrame* mParent; /*!< Parent frame. */
+};
+
+/*!
+ \brief AttachableFrame plugin that displays the state of a Ssoccer simulation and can control it.
+
+ The SoccerControlFrame will wait and try to identify a soccer simulation in every Spark ServerThread that is started.
+ When it has found a ServerThread that runs a soccer simulation, the frame will register an updater to the SparkController and repeatedly update the
+ view on soccer variables like the team names, goals and the game time.
+
+ The soccer values can be changed.
+ A List of SoccerFrameUtil::SoccerCommand derived classes can queue update calls for soccer variables and safely change the current game state.
+
+ \todo Player control not implemented yet. Anyway, for player control to be effective there need to be additional functions to control them.
+ At the moment the only available functions would be battery state and temperature.
+
+ \todo Currently the frame only controls basic soccer game control with the GameStateAspect and GameControlServer.
+ Additional control with the BallStateAspect, SoccerRuleAspect and the trainer command parser could be added.
+*/
+class SoccerControlFrame : public AttachableFrame
+{
+ Q_OBJECT
+ GUI_FRAME
+
+public:
+ //public types
+
+ /*!
+ \brief Description of the current game mode.
+
+ Contains all the soccer game modes (BeforeKickoff, GoalLeft, FreekickRight and so on) and is robust to extension of the game modes.
+ */
+ struct GameMode
+ {
+ public:
+ //public functions
+
+ /*!
+ \brief full constructor.
+
+ \param index index of the game mode in the combobox
+ \param mode spark game mode id
+ \param manual can it be selected by the user
+ \param name name string of the game mode
+ */
+ GameMode(int index, TPlayMode mode, bool manual, QString name)
+ : mIndex(index), mMode(mode), mName(name), mManual(manual) {}
+
+ TPlayMode mMode; /*!< spark game mode id */
+ QString mName; /*!< name string of the game mode */
+ int mIndex; /*!< index of the game mode in the combobox */
+ bool mManual; /*!< can it be selected by the user */
+ };
+
+public:
+ // public functions
+
+ /*!
+ \brief Constructor.
+ */
+ SoccerControlFrame();
+ /*!
+ \brief Destructor.
+ */
+ ~SoccerControlFrame();
+
+public:
+ //public virtual functions
+
+ /*!
+ \brief Initialization function.
+
+ \param parameters parameter list (not used)
+ */
+ virtual void init(const QStringList& parameters);
+
+ /*!
+ \brief Loads settings from global settings object.
+ */
+ virtual void loadSettings();
+ /*!
+ \brief Saves settings to global settings object.
+ */
+ virtual void saveSettings();
+ /*!
+ \brief Initializes settings with default values.
+ */
+ virtual void loadDefaultSettings();
+
+ /*!
+ \brief Returns true after initialization of SimSpark simulation access.
+ */
+ bool initialized();
+
+protected:
+ //protected functions
+
+ /*!
+ \brief Tries to initialize spark simulation access.
+
+ Will fail if there is no Spark-Server, if the server has no SparkController, if the controller has not initialized SimSpark, or
+ if the Simulation does not have the required soccer control nodes.
+
+ Tries to initialize again every time a server thread was created or started.
+ */
+ bool tryInitSpark();
+ /*!
+ \brief Registers the updater control to the SparkController.
+
+ Called when spark access was initialized successfully.
+ */
+ void registerUpdater();
+
+protected slots:
+ //protected slots
+
+ /*!
+ \brief Tries to initialize SimSpark access after a server was created.
+
+ \param server serverthread that was created
+ */
+ void updateServerCreated(boost::shared_ptr<ServerThread> server);
+ /*!
+ \brief Tries to initialize SimSpark access after spark was started.
+
+ \param controller that startet SimSpark
+ */
+ void updateSparkRunning(SparkController* controller);
+
+ /*!
+ \brief Update function called after a run or wait simulation cycle finished.
+
+ Disables updates until the update timer ticks for the next time and calls readyUpdate().
+ */
+ void onCycleFinished();
+
+public slots:
+ //public slots
+
+ /*!
+ \brief Causes an update of the display the next time a simulation cycle ends.
+ */
+ void readyUpdate();
+ /*!
+ \brief Updates the data fields with the current soccer variables.
+ */
+ void updateDisplay();
+ /*!
+ \brief updates the data fields of the currently selected agent.
+
+ \todo not implemented yet
+ */
+ void updatePlayerDisplay();
+
+ /*!
+ \brief Updates the game time from the ui text edit.
+ */
+ void editGameTime();
+ /*!
+ \brief Resets the game time to the first value recorded.
+ */
+ void resetGameTime();
+
+ /*!
+ \brief Updates team 1 goals from the ui text edit.
+ */
+ void editTeam1Goals();
+ /*!
+ \brief Updates team 2 goals from the ui text edit.
+ */
+ void editTeam2Goals();
+ /*!
+ \brief Updates team 1 penalties from the ui text edit.
+
+ \todo Penalties are just a possibility. They are not recorded in SimSpark yet.
+ */
+ void editTeam1Penalties();
+ /*!
+ \brief Updates team 2 penalties from the ui text edit.
+
+ \todo Penalties are just a possibility. They are not recorded in SimSpark yet.
+ */
+ void editTeam2Penalties();
+
+ /*!
+ \brief Select a play mode from the ui combo box. It will be changed after confirmation by a button click.
+
+ \param index index of the mode entry
+ */
+ void selectPlayMode(int index);
+ /*!
+ \brief Change the current game mode as chosen in the ui combo box.
+ */
+ void changePlayMode();
+
+ /*!
+ \brief Change game mode to KickOff.
+ */
+ void kickOff();
+ /*!
+ \brief Moves players away from the ball and resets their position.
+
+ \todo not implemented yet, because there is no direct implementation in SoccerRuleAspect. Integrate the commands of trainer command parser
+ for this.
+ */
+ void clearPlayers();
+
+ /*!
+ \brief Chooses an agent by index.
+
+ \todo player control not implemented yet
+ \param index index of the player
+ */
+ void selectPlayer(int index);
+ /*!
+ \brief Changes the battery value of an agent from the ui text edit.
+
+ \todo player control not implemented yet
+ */
+ void editBattery();
+ /*!
+ \brief Changes the temperature value of an agent from the ui text edit.
+
+ \todo player control not implemented yet
+ */
+ void editTemperature();
+ /*!
+ \brief Resets the battery of an agent to the first recorded value.
+
+ \todo player control not implemented yet
+ */
+ void resetBattery();
+ /*!
+ \brief Resets the temperature of an agent to the first recorded value.
+
+ \todo player control not implemented yet
+ */
+ void resetTemperature();
+
+private:
+ // private members
+
+ Ui::SoccerControlFrame ui; /*!< Ui definition object. */
+ boost::shared_ptr<Settings> mSettings; /*!< Global Settings object. */
+ boost::shared_ptr<SoccerFrameUpdateControl> mUpdater; /*!< Update control for the soccer frame. Registered to the current SparkControllers GuiSimControl node. */
+ boost::shared_ptr<SparkController> mSparkController; /*!< SparkController of the observed simualtion. */
+ QTimer mUpdateTimer; /*!< Update timer. When it ticks, the next simualtion cycle will update the display. */
+
+ bool mInit; /*!< True after spark access was initialized. */
+ bool mLastInitState; /*!< Initialization state during last init try. */
+ int mSelectedPlayer; /*!< Currently selected agents index. */
+ int mUpdateCount; /*!< Amount of updates calls since last reset. */
+ bool mReadyUpdate; /*!< If true (activated by update timer) update will be called in next simulation cycle. */
+ TPlayMode mSelectedPlayMode; /*!< Currently selected play mode in ui combo box. */
+
+ boost::shared_ptr<ServerThread> mServerThread; /*!< Observes server thread. */
+ boost::shared_ptr<oxygen::GameControlServer> mGameControlServer; /*!< Observes game control server. */
+ boost::shared_ptr<SoccerRuleAspect> mRuleAspect; /*!< Observes servers soccer rule aspect. */
+ boost::shared_ptr<BallStateAspect> mBallAspect; /*!< Observed servers ball state asoect. */
+ boost::shared_ptr<GameStateAspect> mGameAspect; /*!< Observed servers game state aspect. */
+ //std::vector<boost::shared_ptr<AgentAspect>> mAgentAspects; /*!< Observed servers agent state aspects. */
+
+ QString mGameControlServerPath; /*!< Expected scene graph path of game control server. (Loaded from settings) */
+ QString mGameStateAspectPath; /*!< Expected scene graph path of game state aspect. (Loaded from settings) */
+ QString mSoccerRuleAspectPath; /*!< Expected scene graph path of soccer rule aspect. (Loaded from settings) */
+ QString mBallStateAspectPath; /*!< Expected scene graph path of ball state aspect. (Loaded from settings) */
+
+ QMap<int, GameMode> mGameModes; /*!< Map containing all of the game modes with their TPlayMode indices. */
+};
+
+#endif // SOCCERCONTROLFRAME_H
Added: trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.ui
===================================================================
--- trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.ui (rev 0)
+++ trunk/rcssserver3d/guiplugin/soccercontrolframe/soccercontrolframe.ui 2015-09-12 01:48:23 UTC (rev 399)
@@ -0,0 +1,857 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SoccerControlFrame</class>
+ <widget class="AttachableFrame" name="SoccerControlFrame">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>297</width>
+ <height>565</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Frame</string>
+ </property>
+ <property name="whatsThis">
+ <string>The soccer control frame can be used to monitor and control the state of a simspark soccer simulation.</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QWidget" name="widget_6" native="true">
+ <layout class="QVBoxLayout" name="verticalLayout_5">
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="font">
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ <property name="title">
+ <string>Game State</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QWidget" name="widget_8" native="true">
+ <property name="font">
+ <font>
+ <pointsize>8</pointsize>
+ </font>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="gameTimeHeaderLabel">
+ <property name="font">
+ <font>
+ <pointsize>8</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Game Time:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit"...
[truncated message content] |