From 79acb89c9bd3dcdf4e00e422190d2b86b082090c Mon Sep 17 00:00:00 2001 From: mungewell Date: Wed, 30 Jul 2014 03:19:34 +0000 Subject: [PATCH] Bug #692 - Initial attempt at replay capability git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@5803 30fe4595-0a0c-4342-8851-515496e4dcbd --- cmake/CMakeLists.txt | 2 +- cmake/FindSQLITE3.cmake | 74 +++ cmake/checks.cmake | 26 ++ cmake/customthirdparty.cmake | 5 + cmake/internaldeps.cmake | 20 +- cmake/options.cmake | 12 + cmake/thirdpartydeps.cmake | 48 ++ data/data/menu/practiceresultsmenu.xml | 21 + data/data/menu/raceresultsmenu.xml | 22 + data/data/menu/simuconfigmenu.xml | 50 +- src/drivers/CMakeLists.txt | 1 + src/drivers/replay/CMakeLists.txt | 11 + src/drivers/replay/replay.cpp | 137 ++++++ src/interfaces/car.h | 2 + src/interfaces/raceman.h | 10 + src/interfaces/replay.h | 30 ++ .../racing/genparoptv1/racesituation.cpp | 17 +- .../racing/standardgame/CMakeLists.txt | 8 + src/modules/racing/standardgame/racecars.cpp | 38 ++ src/modules/racing/standardgame/raceinit.cpp | 125 ++++- .../racing/standardgame/racesimusimu.cpp | 5 +- .../racing/standardgame/racesituation.cpp | 218 ++++++++- .../racing/standardgame/racesituation.h | 6 + .../racing/standardgame/standardgame.cpp | 9 + src/modules/simu/CMakeLists.txt | 3 + src/modules/simu/simureplay/CMakeLists.txt | 47 ++ src/modules/simu/simureplay/carstruct.h | 156 +++++++ src/modules/simu/simureplay/sim.h | 128 +++++ src/modules/simu/simureplay/simu.cpp | 436 ++++++++++++++++++ src/modules/simu/simureplay/simureplay.cpp | 114 +++++ src/modules/simu/simureplay/simureplay.h | 86 ++++ .../legacymenu/confscreens/simuconfig.cpp | 47 +- .../racescreens/raceresultsmenus.cpp | 64 ++- 33 files changed, 1944 insertions(+), 34 deletions(-) create mode 100644 cmake/FindSQLITE3.cmake create mode 100644 src/drivers/replay/CMakeLists.txt create mode 100644 src/drivers/replay/replay.cpp create mode 100644 src/modules/simu/simureplay/CMakeLists.txt create mode 100644 src/modules/simu/simureplay/carstruct.h create mode 100644 src/modules/simu/simureplay/sim.h create mode 100644 src/modules/simu/simureplay/simu.cpp create mode 100644 src/modules/simu/simureplay/simureplay.cpp create mode 100644 src/modules/simu/simureplay/simureplay.h diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index fe689eb80..828615929 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1,4 +1,4 @@ INCLUDE(../cmake/macros.cmake) SD_INSTALL_FILES(DATA cmake FILES splitargn.cmake robot.def.in.cmake FindENET.cmake FindPLIB.cmake FindSOLID.cmake - FindOGG.cmake FindVORBISFILE.cmake FindVORBIS.cmake) + FindOGG.cmake FindVORBISFILE.cmake FindVORBIS.cmake FindSQLITE3.cmake) diff --git a/cmake/FindSQLITE3.cmake b/cmake/FindSQLITE3.cmake new file mode 100644 index 000000000..d4964137e --- /dev/null +++ b/cmake/FindSQLITE3.cmake @@ -0,0 +1,74 @@ +# Find Sqlite3 +# ~~~~~~~~~~~~ +# Copyright (c) 2007, Martin Dobias +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# +# CMake module to search for Sqlite3 library +# +# If it's found it sets SQLITE3_FOUND to TRUE +# and following variables are set: +# SQLITE3_INCLUDE_DIR +# SQLITE3_LIBRARY + + +# FIND_PATH and FIND_LIBRARY normally search standard locations +# before the specified paths. To search non-standard paths first, +# FIND_* is invoked first with specified paths and NO_DEFAULT_PATH +# and then again with no specified paths to search the default +# locations. When an earlier FIND_* succeeds, subsequent FIND_*s +# searching for the same item do nothing. + +# try to use framework on mac +# want clean framework path, not unix compatibility path +IF (APPLE) + IF (CMAKE_FIND_FRAMEWORK MATCHES "FIRST" + OR CMAKE_FRAMEWORK_PATH MATCHES "ONLY" + OR NOT CMAKE_FIND_FRAMEWORK) + SET (CMAKE_FIND_FRAMEWORK_save ${CMAKE_FIND_FRAMEWORK} CACHE STRING "" FORCE) + SET (CMAKE_FIND_FRAMEWORK "ONLY" CACHE STRING "" FORCE) + #FIND_PATH(SQLITE3_INCLUDE_DIR SQLite3/sqlite3.h) + FIND_LIBRARY(SQLITE3_LIBRARY SQLite3) + IF (SQLITE3_LIBRARY) + # FIND_PATH doesn't add "Headers" for a framework + SET (SQLITE3_INCLUDE_DIR ${SQLITE3_LIBRARY}/Headers CACHE PATH "Path to a file.") + ENDIF (SQLITE3_LIBRARY) + SET (CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_save} CACHE STRING "" FORCE) + ENDIF () +ENDIF (APPLE) + +FIND_PATH(SQLITE3_INCLUDE_DIR sqlite3.h + "$ENV{LIB_DIR}/include" + "$ENV{LIB_DIR}/include/sqlite" + #mingw + c:/msys/local/include + NO_DEFAULT_PATH + ) +FIND_PATH(SQLITE3_INCLUDE_DIR sqlite3.h) + +FIND_LIBRARY(SQLITE3_LIBRARY NAMES sqlite3 sqlite3_i PATHS + "$ENV{LIB_DIR}/lib" + #mingw + c:/msys/local/lib + NO_DEFAULT_PATH + ) +FIND_LIBRARY(SQLITE3_LIBRARY NAMES sqlite3) + +IF (SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARY) + SET(SQLITE3_FOUND TRUE) +ENDIF (SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARY) + + +IF (SQLITE3_FOUND) + + IF (NOT SQLITE3_FIND_QUIETLY) + MESSAGE(STATUS "Found Sqlite3: ${SQLITE3_LIBRARY}") + ENDIF (NOT SQLITE3_FIND_QUIETLY) + +ELSE (SQLITE3_FOUND) + + IF (SQLITE3_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find Sqlite3") + ENDIF (SQLITE3_FIND_REQUIRED) + +ENDIF (SQLITE3_FOUND) diff --git a/cmake/checks.cmake b/cmake/checks.cmake index 63610949b..221fc6da1 100644 --- a/cmake/checks.cmake +++ b/cmake/checks.cmake @@ -289,5 +289,31 @@ MACRO(CHECK_LIBRARIES) ENDIF(OPTION_3RDPARTY_SOLID) + # SQLITE3 + IF(OPTION_3RDPARTY_SQLITE3) + + Find_Package(SQLITE3) + IF(SQLITE3_FOUND) + SET(HAVE_LIBSQLITE3 1) + MESSAGE(STATUS "Looking for library SQLITE3 - found") + ELSE(SQLITE3_FOUND) + MESSAGE(STATUS "Looking for library SQLITE3 - NOT found") + ENDIF(SQLITE3_FOUND) + + ENDIF(OPTION_3RDPARTY_SQLITE3) + + # SQLITE3 + IF(OPTION_3RDPARTY_SQLITE3) + + Find_Package(SQLITE3) + IF(SQLITE3_FOUND) + SET(HAVE_LIBSQLITE3 1) + MESSAGE(STATUS "Looking for library SQLITE3 - found") + ELSE(SQLITE3_FOUND) + MESSAGE(STATUS "Looking for library SQLITE3 - NOT found") + ENDIF(SQLITE3_FOUND) + + ENDIF(OPTION_3RDPARTY_SQLITE3) + ENDMACRO(CHECK_LIBRARIES) diff --git a/cmake/customthirdparty.cmake b/cmake/customthirdparty.cmake index ce7256c7c..8bfd4d0cf 100644 --- a/cmake/customthirdparty.cmake +++ b/cmake/customthirdparty.cmake @@ -125,6 +125,11 @@ MACRO(_FIND_3RDPARTY_DEPENDENCIES ROOT_DIR) # ENet. _FIND_3RDPARTY_DEPENDENCY(ENET enet/enet.h "" enet ${ROOT_DIR} "") + + # SQlite. + IF(OPTION_3RDPARTY_SQLITE3) + _FIND_3RDPARTY_DEPENDENCY(SQLITE3 sqlite3.h "" sqlite3 ${ROOT_DIR} "") + ENDIF(OPTION_3RDPARTY_SQLITE3) # OpenSceneGraph IF(OPTION_OSGGRAPH) diff --git a/cmake/internaldeps.cmake b/cmake/internaldeps.cmake index 68114cac0..6a8bccd9b 100644 --- a/cmake/internaldeps.cmake +++ b/cmake/internaldeps.cmake @@ -153,16 +153,16 @@ MACRO(ADD_SDLIB_INCLUDEDIR) FIND_PATH(SDLIB_NETWORKING_INCLUDE_DIR network.h PATHS ${INCLUDE_CANDIDATE} /usr/include /usr/local/include) MARK_AS_ADVANCED(SDLIB_NETWORKING_INCLUDE_DIR) SET(SDLIB_EXTRA_INCLUDEDIR SDLIB_NETWORKING_INCLUDE_DIR) - ELSEIF(SDLIB_LIB STREQUAL "raceengine") + ELSEIF(SDLIB_LIB STREQUAL "standardgame") IF(IN_SOURCETREE) - SET(INCLUDE_CANDIDATE ${SOURCE_DIR}/src/libs/raceengine) + SET(INCLUDE_CANDIDATE ${SOURCE_DIR}/src/modules/racing/standardgame) ELSE(IN_SOURCETREE) SET(INCLUDE_CANDIDATE ${SD_INCLUDEDIR_ABS}) ENDIF(IN_SOURCETREE) - FIND_PATH(SDLIB_RACEENGINE_INCLUDE_DIR raceengine.h PATHS ${INCLUDE_CANDIDATE} /usr/include /usr/local/include NO_DEFAULT_PATH) - FIND_PATH(SDLIB_RACEENGINE_INCLUDE_DIR raceengine.h PATHS ${INCLUDE_CANDIDATE} /usr/include /usr/local/include) - MARK_AS_ADVANCED(SDLIB_RACEENGINE_INCLUDE_DIR) - SET(SDLIB_EXTRA_INCLUDEDIR SDLIB_RACEENGINE_INCLUDE_DIR) + FIND_PATH(SDLIB_STANDARDGAME_INCLUDE_DIR standardgame.h PATHS ${INCLUDE_CANDIDATE} /usr/include /usr/local/include NO_DEFAULT_PATH) + FIND_PATH(SDLIB_STANDARDGAME_INCLUDE_DIR standardgame.h PATHS ${INCLUDE_CANDIDATE} /usr/include /usr/local/include) + MARK_AS_ADVANCED(SDLIB_STANDARDGAME_INCLUDE_DIR) + SET(SDLIB_EXTRA_INCLUDEDIR SDLIB_STANDARDGAME_INCLUDE_DIR) ELSE(SDLIB_LIB STREQUAL "portability") SET(SDLIB_FOUND_LIB FALSE) IF(NOT SDLIB_LIB STREQUAL "OPTIONAL") @@ -300,14 +300,14 @@ MACRO(ADD_SDLIB_LIBRARY TARGET) ENDIF(IN_SOURCETREE) FIND_LIBRARY(SDLIB_NETWORKING_LIBRARY networking PATHS ${LIBRARY_CANDIDATE} /usr/lib /usr/local/lib PATH_SUFFIXES "" lib) SET(SDLIB_EXTRA_LIBRARY SDLIB_NETWORKING_LIBRARY) - ELSEIF(SDLIB_LIB STREQUAL "raceengine") + ELSEIF(SDLIB_LIB STREQUAL "standardgame") IF(IN_SOURCETREE) - SET(LIBRARY_CANDIDATE ${SOURCE_DIR}/src/libs/raceengine) + SET(LIBRARY_CANDIDATE ${SOURCE_DIR}/src/modules/racing/standardgame) ELSE(IN_SOURCETREE) SET(LIBRARY_CANDIDATE ${SD_LIBDIR_ABS}) ENDIF(IN_SOURCETREE) - FIND_LIBRARY(SDLIB_RACEENGINE_LIBRARY raceengine PATHS ${LIBRARY_CANDIDATE} /usr/lib /usr/local/lib PATH_SUFFIXES "" lib) - SET(SDLIB_EXTRA_LIBRARY SDLIB_RACEENGINE_LIBRARY) + FIND_LIBRARY(SDLIB_STANDARDGAME_LIBRARY standardgame PATHS ${LIBRARY_CANDIDATE} /usr/lib /usr/local/lib PATH_SUFFIXES "" lib) + SET(SDLIB_EXTRA_LIBRARY SDLIB_STANDARDGAME_LIBRARY) ELSEIF(SDLIB_LIB STREQUAL "legacymenu") IF(IN_SOURCETREE) SET(LIBRARY_CANDIDATE ${SOURCE_DIR}/src/modules/userinterface/legacymenu) diff --git a/cmake/options.cmake b/cmake/options.cmake index 89d4fa483..3e61373c2 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -74,6 +74,10 @@ MACRO(ADD_SD_COMPILE_OPTIONS) SET(OPTION_3RDPARTY_EXPAT true CACHE BOOL "Use 3rd party Expat library rather than bundled TXML") + SET(OPTION_3RDPARTY_SQLITE3 false CACHE BOOL "Use SQLite3 as database for record/replay") + + SET(OPTION_3RDPARTY_SQLITE3 false CACHE BOOL "Use SQLite3 as database for record/replay") + # Enable building with 3rd party SOLID library under Windows, as we ship the binary package, # but not under Linux, where FreeSolid seems not to be available by default on most distros. IF(WIN32) @@ -150,6 +154,14 @@ MACRO(ADD_SD_COMPILE_OPTIONS) ADD_DEFINITIONS(-DTHIRD_PARTY_EXPAT) ENDIF(OPTION_3RDPARTY_EXPAT) + IF(OPTION_3RDPARTY_SQLITE3) + ADD_DEFINITIONS(-DTHIRD_PARTY_SQLITE3) + ENDIF(OPTION_3RDPARTY_SQLITE3) + + IF(OPTION_3RDPARTY_SQLITE3) + ADD_DEFINITIONS(-DTHIRD_PARTY_SQLITE3) + ENDIF(OPTION_3RDPARTY_SQLITE3) + IF(OPTION_3RDPARTY_SOLID) ADD_DEFINITIONS(-DTHIRD_PARTY_SOLID) ENDIF(OPTION_3RDPARTY_SOLID) diff --git a/cmake/thirdpartydeps.cmake b/cmake/thirdpartydeps.cmake index f9a9dff1f..31c0edf8d 100644 --- a/cmake/thirdpartydeps.cmake +++ b/cmake/thirdpartydeps.cmake @@ -20,6 +20,54 @@ # @author Mart Kelder, J.-P. Meuret # @version $Id$ +MACRO(ADD_SQLITE3_INCLUDEDIR) + + FIND_PACKAGE(SQLITE3) + + IF(SQLITE3_FOUND) + INCLUDE_DIRECTORIES(${SQLITE3_INCLUDE_DIR}) + ELSE(SQLITE3_FOUND) + MESSAGE(FATAL_ERROR "Cannot find SQLITE3 header files") + ENDIF(SQLITE3_FOUND) + +ENDMACRO(ADD_SQLITE3_INCLUDEDIR) + +MACRO(ADD_SQLITE3_LIBRARY TARGET) + + FIND_PACKAGE(SQLITE3) + + IF(SQLITE3_FOUND) + TARGET_LINK_LIBRARIES(${TARGET} ${SQLITE3_LIBRARY}) + ELSE(SQLITE3_FOUND) + MESSAGE(FATAL_ERROR "Cannot find SQLITE3 libraries") + ENDIF(SQLITE3_FOUND) + +ENDMACRO(ADD_SQLITE3_LIBRARY TARGET) + +MACRO(ADD_SQLITE3_INCLUDEDIR) + + FIND_PACKAGE(SQLITE3) + + IF(SQLITE3_FOUND) + INCLUDE_DIRECTORIES(${SQLITE3_INCLUDE_DIR}) + ELSE(SQLITE3_FOUND) + MESSAGE(FATAL_ERROR "Cannot find SQLITE3 header files") + ENDIF(SQLITE3_FOUND) + +ENDMACRO(ADD_SQLITE3_INCLUDEDIR) + +MACRO(ADD_SQLITE3_LIBRARY TARGET) + + FIND_PACKAGE(SQLITE3) + + IF(SQLITE3_FOUND) + TARGET_LINK_LIBRARIES(${TARGET} ${SQLITE3_LIBRARY}) + ELSE(SQLITE3_FOUND) + MESSAGE(FATAL_ERROR "Cannot find SQLITE3 libraries") + ENDIF(SQLITE3_FOUND) + +ENDMACRO(ADD_SQLITE3_LIBRARY TARGET) + MACRO(ADD_PLIB_INCLUDEDIR) FIND_PACKAGE(PLIB) diff --git a/data/data/menu/practiceresultsmenu.xml b/data/data/menu/practiceresultsmenu.xml index 4cfae84ec..e0bca9c50 100644 --- a/data/data/menu/practiceresultsmenu.xml +++ b/data/data/menu/practiceresultsmenu.xml @@ -166,6 +166,27 @@ +
+ + + + + + + + + + + + + + + + + + + +