summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichał Zieliński <michal@zielinscy.org.pl>2012-12-27 12:40:58 +0100
committerMichał Zieliński <michal@zielinscy.org.pl>2012-12-27 12:40:58 +0100
commitfb13c0f219282ef888562fb0fcbbeefd915307d4 (patch)
tree52816490c878fc5f57a97e3c2357d934cb70e294
parent4e2982d4ddbd4c16793e0adaa96f5bfd6bd9148c (diff)
parentc2ebd5551ff2569f56e3321efd2d9bedaf079955 (diff)
downloadcolobot-fb13c0f219282ef888562fb0fcbbeefd915307d4.tar.gz
colobot-fb13c0f219282ef888562fb0fcbbeefd915307d4.tar.bz2
colobot-fb13c0f219282ef888562fb0fcbbeefd915307d4.zip
Merge branch 'dev-desktop-file' of git://github.com/OdyX/colobot
-rw-r--r--.gitignore3
-rw-r--r--.gitmodules3
-rw-r--r--.travis.yml8
-rw-r--r--CMakeLists.txt54
-rw-r--r--Doxyfile.in (renamed from Doxyfile)4
-rw-r--r--cmake/FindLTDL.cmake30
-rw-r--r--cmake/mxe.cmake2
m---------data0
-rw-r--r--src/CBot/CMakeLists.txt3
-rw-r--r--src/CBot/tests/CBot_console/CMakeLists.txt9
-rw-r--r--src/CMakeLists.txt37
-rw-r--r--src/app/app.cpp64
-rw-r--r--src/app/app.h4
-rw-r--r--src/common/config.h.cmake7
-rw-r--r--src/common/global.h1
-rw-r--r--src/common/test/CMakeLists.txt7
-rw-r--r--src/desktop/CMakeLists.txt49
-rw-r--r--src/desktop/colobot.desktop.in5
-rw-r--r--src/desktop/colobot.ini3
-rw-r--r--src/desktop/colobot.svg238
-rwxr-xr-xsrc/desktop/create_desktop_file.sh18
-rw-r--r--src/desktop/po/colobot-desktop.pot32
-rw-r--r--src/desktop/po/fr.po32
-rw-r--r--src/desktop/po4a.cfg3
-rw-r--r--src/graphics/engine/test/CMakeLists.txt7
-rw-r--r--src/graphics/opengl/test/CMakeLists.txt7
-rw-r--r--src/math/test/CMakeLists.txt7
-rw-r--r--src/object/robotmain.cpp4
-rw-r--r--src/plugins/plugininterface.h65
-rw-r--r--src/plugins/pluginloader.cpp124
-rw-r--r--src/plugins/pluginloader.h87
-rw-r--r--src/plugins/pluginmanager.cpp132
-rw-r--r--src/plugins/pluginmanager.h87
-rw-r--r--src/plugins/test/CMakeLists.txt12
-rw-r--r--src/plugins/test/colobot.ini3
-rw-r--r--src/plugins/test/manager_test.cpp31
-rw-r--r--src/po/CMakeLists.txt17
-rw-r--r--src/sound/oalsound/alsound.cpp (renamed from src/sound/plugins/oalsound/alsound.cpp)60
-rw-r--r--src/sound/oalsound/alsound.h (renamed from src/sound/plugins/oalsound/alsound.h)10
-rw-r--r--src/sound/oalsound/buffer.cpp (renamed from src/sound/plugins/oalsound/buffer.cpp)4
-rw-r--r--src/sound/oalsound/buffer.h (renamed from src/sound/plugins/oalsound/buffer.h)0
-rw-r--r--src/sound/oalsound/channel.cpp (renamed from src/sound/plugins/oalsound/channel.cpp)2
-rw-r--r--src/sound/oalsound/channel.h (renamed from src/sound/plugins/oalsound/channel.h)0
-rw-r--r--src/sound/oalsound/check.h (renamed from src/sound/plugins/oalsound/check.h)0
-rw-r--r--src/sound/plugins/oalsound/CMakeLists.txt23
-rw-r--r--src/sound/plugins/oalsound/test/CMakeLists.txt11
-rw-r--r--src/sound/plugins/oalsound/test/plugin_test.cpp40
-rw-r--r--src/sound/sound.h4
-rw-r--r--src/ui/maindialog.cpp132
-rw-r--r--src/ui/test/CMakeLists.txt7
50 files changed, 638 insertions, 854 deletions
diff --git a/.gitignore b/.gitignore
index 4f78a85..bc2649c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,6 @@
# Ignore the documentation folder
/doc
-# We don't want anyone to checkin /data folder
-/data
-
# Ignore local data
/colobot.ini
/savegame
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..2e2b0cc
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "data"]
+ path = data
+ url = git://github.com/colobot/colobot-data.git
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..660a2f5
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,8 @@
+language: cpp
+compiler:
+ - gcc
+script: cmake . -DCMAKE_VERBOSE_MAKEFILE=ON && make all doc test
+before_install:
+ - git submodule update --init --recursive
+ - sudo apt-get update -qq
+ - sudo apt-get install -qq --no-install-recommends libgl1-mesa-dev libsdl1.2-dev libsdl-image1.2-dev libsdl-ttf2.0-dev libpng12-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev google-mock libgtest-dev doxygen graphviz po4a librsvg2-bin
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d072fd0..a80e7d3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -16,12 +16,15 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${colobot_SOURCE_DIR}/cmake")
##
# Global build type
-set(CMAKE_BUILD_TYPE debug)
+if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE debug)
+endif()
# Global compile flags
# These are specific to GCC/MinGW; for other compilers, change as necessary
-set(CMAKE_CXX_FLAGS_RELEASE "-O2 -Wall -Wold-style-cast -std=gnu++0x")
-set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wold-style-cast -std=gnu++0x")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wold-style-cast -std=gnu++0x")
+set(CMAKE_CXX_FLAGS_RELEASE "-O2")
+set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
# Asserts can be enabled/disabled regardless of build type
option(ASSERTS "Enable assert()s" ON)
@@ -32,6 +35,11 @@ option(TESTS "Enable tests" ON)
# CBot can also be a static library
option(CBOT_STATIC "Build CBot as static libary" OFF)
+# Doxygen docs are optional for installation
+option(INSTALL_DOCS "Install Doxygen-generated documentation" OFF)
+
+# Build openal sound support
+option(OPENAL_SOUND "Build openal sound support" OFF)
##
# Required packages
@@ -42,7 +50,7 @@ find_package(SDL 1.2.10 REQUIRED)
find_package(SDL_image 1.2 REQUIRED)
find_package(SDL_ttf 2.0 REQUIRED)
find_package(PNG 1.2 REQUIRED)
-find_package(LTDL 2.4.2 REQUIRED)
+find_package(Gettext REQUIRED)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
@@ -124,6 +132,21 @@ endif()
##
+# Doxygen docs
+##
+
+find_package(Doxygen)
+
+if(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
+ add_custom_target(doc
+ ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ COMMENT "Generating API documentation with Doxygen" VERBATIM)
+endif()
+
+
+##
# Targets
##
@@ -159,8 +182,27 @@ if(${TESTS})
endif()
+# Installation paths defined before compiling sources
+set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/games CACHE PATH "Colobot binary directory")
+set(COLOBOT_INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/games/colobot CACHE PATH "Colobot shared data directory")
+set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/lib/colobot CACHE PATH "Colobot libraries directory")
+set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/share/doc/colobot CACHE PATH "Colobot documentation directory")
+set(COLOBOT_INSTALL_I18N_DIR ${CMAKE_INSTALL_PREFIX}/share/locale CACHE PATH "Colobot translations directory")
+
# Subdirectory with sources
add_subdirectory(src bin)
-# TODO: provide data files as git submodule and setup correct data path
-install_files(/share/games/colobot ../data)
+
+##
+# Installation
+##
+
+file(GLOB DATA_FILES "data/*")
+
+# Data
+install(DIRECTORY data/ DESTINATION ${COLOBOT_INSTALL_DATA_DIR})
+
+# Documentation
+if(INSTALL_DOCS AND DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
+ install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/ DESTINATION ${COLOBOT_INSTALL_DOC_DIR} OPTIONAL)
+endif()
diff --git a/Doxyfile b/Doxyfile.in
index 8c5fffe..028e5de 100644
--- a/Doxyfile
+++ b/Doxyfile.in
@@ -665,8 +665,8 @@ WARN_LOGFILE =
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
-INPUT = "src" \
- "src/CBot"
+INPUT = "@CMAKE_CURRENT_SOURCE_DIR@/src" \
+ "@CMAKE_CURRENT_SOURCE_DIR@/src/CBot"
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
diff --git a/cmake/FindLTDL.cmake b/cmake/FindLTDL.cmake
deleted file mode 100644
index 051e70c..0000000
--- a/cmake/FindLTDL.cmake
+++ /dev/null
@@ -1,30 +0,0 @@
-# Find the native LTDL includes and library
-# Copied verbatim from
-# http://code.metager.de/source/xref/hshannover/trust/tnc-fhh/shared/cmake_modules/FindLTDL.cmake
-# The above version was under GPL-2, this one is under GPL-3, for consistency
-# with the rest of the colobot project.
-#
-# This module defines
-# LTDL_INCLUDE_DIR, where to find ltdl.h, etc.
-# LTDL_LIBRARY, where to find the LTDL library.
-# LTDL_FOUND, If false, do not try to use LTDL.
-
-FIND_PATH(LTDL_INCLUDE_DIR ltdl.h)
-
-FIND_LIBRARY(LTDL_LIBRARY ltdl)
-
-IF (LTDL_INCLUDE_DIR AND LTDL_LIBRARY)
- SET(LTDL_FOUND TRUE)
-ELSE(LTDL_INCLUDE_DIR AND LTDL_LIBRARY)
- SET(LTDL_FOUND FALSE)
-ENDIF (LTDL_INCLUDE_DIR AND LTDL_LIBRARY)
-
-IF (LTDL_FOUND)
- IF (NOT LTDL_FIND_QUIETLY)
- MESSAGE(STATUS "Found LTDL: ${LTDL_LIBRARY}")
- ENDIF (NOT LTDL_FIND_QUIETLY)
-ELSE (LTDL_FOUND)
- IF (LTDL_FIND_REQUIRED)
- MESSAGE(FATAL_ERROR "Could not find LTDL")
- ENDIF (LTDL_FIND_REQUIRED)
-ENDIF (LTDL_FOUND)
diff --git a/cmake/mxe.cmake b/cmake/mxe.cmake
index 4507a80..322ba4a 100644
--- a/cmake/mxe.cmake
+++ b/cmake/mxe.cmake
@@ -18,11 +18,11 @@ if((${CMAKE_CROSSCOMPILING}) AND (DEFINED MSYS))
${CMAKE_FIND_ROOT_PATH}/lib/libiconv.a
${CMAKE_FIND_ROOT_PATH}/lib/libglew32s.a
${CMAKE_FIND_ROOT_PATH}/lib/libfreetype.a
- ${CMAKE_FIND_ROOT_PATH}/lib/libltdl.a
${CMAKE_FIND_ROOT_PATH}/lib/libopengl32.a
${CMAKE_FIND_ROOT_PATH}/lib/libjpeg.a
${CMAKE_FIND_ROOT_PATH}/lib/libwinmm.a
${CMAKE_FIND_ROOT_PATH}/lib/libdxguid.a
+ ${CMAKE_FIND_ROOT_PATH}/lib/libbz2.a
)
else()
set(MXE 0)
diff --git a/data b/data
new file mode 160000
+Subproject 6b6e5a0ab56bf42f17d969c1bd4c09185605cad
diff --git a/src/CBot/CMakeLists.txt b/src/CBot/CMakeLists.txt
index 271f2ce..daf08c6 100644
--- a/src/CBot/CMakeLists.txt
+++ b/src/CBot/CMakeLists.txt
@@ -16,6 +16,5 @@ if(${CBOT_STATIC})
add_library(CBot STATIC ${SOURCES})
else()
add_library(CBot SHARED ${SOURCES})
+ install(TARGETS CBot LIBRARY DESTINATION ${COLOBOT_INSTALL_LIB_DIR})
endif()
-
-INSTALL_TARGETS(/lib CBot)
diff --git a/src/CBot/tests/CBot_console/CMakeLists.txt b/src/CBot/tests/CBot_console/CMakeLists.txt
index 7d9f034..9f0f244 100644
--- a/src/CBot/tests/CBot_console/CMakeLists.txt
+++ b/src/CBot/tests/CBot_console/CMakeLists.txt
@@ -3,11 +3,14 @@ cmake_minimum_required(VERSION 2.8)
project(CBot_console C CXX)
# Build with debugging symbols
-set(CMAKE_BUILD_TYPE debug)
+if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE debug)
+endif(NOT CMAKE_BUILD_TYPE)
# Global compile flags
-set(CMAKE_CXX_FLAGS_RELEASE "-O2 -Wall -Wold-style-cast -std=gnu++0x")
-set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wold-style-cast -std=gnu++0x")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wold-style-cast -std=gnu++0x")
+set(CMAKE_CXX_FLAGS_RELEASE "-O2")
+set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
# Include cmake directory
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${colobot_SOURCE_DIR}/cmake")
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4ffacd3..74de412 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -6,6 +6,8 @@ add_subdirectory(tools)
add_subdirectory(po)
+add_subdirectory(desktop)
+
# Tests
if(${TESTS})
add_subdirectory(common/test)
@@ -27,9 +29,24 @@ endif()
# Additional libraries per platform
set(PLATFORM_LIBS "")
+set(OPENAL_LIBS "")
+
+if (${OPENAL_SOUND})
+ if (${MXE})
+ set(OPENAL_LIBS
+ ${CMAKE_FIND_ROOT_PATH}/lib/libOpenAL32.a
+ ${CMAKE_FIND_ROOT_PATH}/lib/libalut.a
+ )
+ else()
+ set(OPENAL_LIBS
+ openal
+ alut
+ )
+ endif()
+endif()
if (${MXE}) # MXE requires special treatment
- set(PLATFORM_LIBS ${MXE_LIBS})
+ set(PLATFORM_LIBS ${MXE_LIBS})
elseif (${PLATFORM_WINDOWS})
# because it isn't included in standard linking libraries
set(PLATFORM_LIBS "-lintl")
@@ -42,6 +59,15 @@ endif()
# Configure file
configure_file(common/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/common/config.h)
+set(OPENAL_SRC "")
+
+if (${OPENAL_SOUND})
+ set(OPENAL_SRC
+ sound/oalsound/alsound.cpp
+ sound/oalsound/buffer.cpp
+ sound/oalsound/channel.cpp
+ )
+endif()
# Source files
set(SOURCES
@@ -160,10 +186,10 @@ ui/slider.cpp
ui/studio.cpp
ui/target.cpp
ui/window.cpp
-plugins/pluginmanager.cpp
-plugins/pluginloader.cpp
+${OPENAL_SRC}
)
+
set(LIBS
${SDL_LIBRARY}
${SDLIMAGE_LIBRARY}
@@ -173,8 +199,8 @@ ${PNG_LIBRARIES}
${OPTIONAL_LIBS}
${PLATFORM_LIBS}
${Boost_LIBRARIES}
-${LTDL_LIBRARY}
CBot
+${OPENAL_LIBS}
)
include_directories(
@@ -195,4 +221,5 @@ add_executable(colobot ${SOURCES})
target_link_libraries(colobot ${LIBS})
-install_targets(/games colobot)
+install(TARGETS colobot RUNTIME DESTINATION ${COLOBOT_INSTALL_BIN_DIR})
+set_target_properties(colobot PROPERTIES INSTALL_RPATH ${COLOBOT_INSTALL_LIB_DIR})
diff --git a/src/app/app.cpp b/src/app/app.cpp
index 751ff21..118e100 100644
--- a/src/app/app.cpp
+++ b/src/app/app.cpp
@@ -15,6 +15,7 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
+#include "common/config.h"
#include "app/app.h"
@@ -29,17 +30,21 @@
#include "object/robotmain.h"
+#include <boost/filesystem.hpp>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
-#include <fstream>
-
#include <stdlib.h>
#include <libintl.h>
#include <unistd.h>
+#ifdef OPENAL_SOUND
+ #include "sound/oalsound/alsound.h"
+#endif
+
+
template<> CApplication* CSingleton<CApplication>::mInstance = nullptr;
//! Static buffer for putenv locale
@@ -89,7 +94,6 @@ CApplication::CApplication()
m_private = new ApplicationPrivate();
m_iMan = new CInstanceManager();
m_eventQueue = new CEventQueue(m_iMan);
- m_pluginManager = new CPluginManager();
m_profile = new CProfile();
m_engine = nullptr;
@@ -130,7 +134,7 @@ CApplication::CApplication()
m_mouseButtonsState = 0;
m_trackedKeys = 0;
- m_dataPath = "./data";
+ m_dataPath = COLOBOT_DEFAULT_DATADIR;
m_language = LANGUAGE_ENV;
@@ -142,7 +146,6 @@ CApplication::CApplication()
m_dataDirs[DIR_AI] = "ai";
m_dataDirs[DIR_FONT] = "fonts";
m_dataDirs[DIR_HELP] = "help";
- m_dataDirs[DIR_I18N] = "i18n";
m_dataDirs[DIR_ICON] = "icons";
m_dataDirs[DIR_LEVEL] = "levels";
m_dataDirs[DIR_MODEL] = "models";
@@ -159,9 +162,6 @@ CApplication::~CApplication()
delete m_eventQueue;
m_eventQueue = nullptr;
- delete m_pluginManager;
- m_pluginManager = nullptr;
-
delete m_profile;
m_profile = nullptr;
@@ -274,13 +274,10 @@ bool CApplication::Create()
{
GetLogger()->Info("Creating CApplication\n");
- // I know, a primitive way to check for dir, but works
- std::string readmePath = m_dataPath + "/README.txt";
- std::ifstream testReadme;
- testReadme.open(readmePath.c_str(), std::ios_base::in);
- if (!testReadme.good())
+ boost::filesystem::path dataPath(m_dataPath);
+ if (! (boost::filesystem::exists(dataPath) && boost::filesystem::is_directory(dataPath)) )
{
- GetLogger()->Error("Could not open test file in data dir: '%s'\n", readmePath.c_str());
+ GetLogger()->Error("Data directory '%s' doesn't exist or is not a directory\n", m_dataPath.c_str());
m_errorMessage = std::string("Could not read from data directory:\n") +
std::string("'") + m_dataPath + std::string("'\n") +
std::string("Please check your installation, or supply a valid data directory by -datadir option.");
@@ -319,19 +316,15 @@ bool CApplication::Create()
langStr += locale;
strcpy(S_LANGUAGE, langStr.c_str());
putenv(S_LANGUAGE);
- setlocale(LC_ALL, "");
+ setlocale(LC_ALL, locale.c_str());
GetLogger()->Debug("Set locale to '%s'\n", locale.c_str());
- std::string trPath = m_dataPath + "/" + m_dataDirs[DIR_I18N];
- bindtextdomain("colobot", trPath.c_str());
+ bindtextdomain("colobot", COLOBOT_I18N_DIR);
bind_textdomain_codeset("colobot", "UTF-8");
textdomain("colobot");
GetLogger()->Debug("Testing gettext translation: '%s'\n", gettext("Colobot rules!"));
- // Temporarily -- only in windowed mode
- m_deviceConfig.fullScreen = false;
-
//Create the sound instance.
if (!GetProfile().InitCurrentDirectory()) {
GetLogger()->Warn("Config not found. Default values will be used!\n");
@@ -341,13 +334,12 @@ bool CApplication::Create()
if (GetProfile().GetLocalProfileString("Resources", "Data", path))
m_dataPath = path;
- m_pluginManager->LoadFromProfile();
- m_sound = static_cast<CSoundInterface*>(CInstanceManager::GetInstancePointer()->SearchInstance(CLASS_SOUND));
-
- if (!m_sound) {
- GetLogger()->Error("Sound not loaded, falling back to fake sound!\n");
- m_sound = new CSoundInterface();
- }
+ #ifdef OPENAL_SOUND
+ m_sound = static_cast<CSoundInterface *>(new ALSound());
+ #else
+ GetLogger()->Info("No sound support.\n");
+ m_sound = new CSoundInterface();
+ #endif
m_sound->Create(true);
if (GetProfile().GetLocalProfileString("Resources", "Sound", path))
@@ -388,7 +380,20 @@ bool CApplication::Create()
m_exitCode = 3;
return false;
}
-
+
+ // load settings from profile
+ int iValue;
+ if ( GetProfile().GetLocalProfileInt("Setup", "Resolution", iValue) ) {
+ std::vector<Math::IntPoint> modes;
+ GetVideoResolutionList(modes, true, true);
+ if (static_cast<unsigned int>(iValue) < modes.size())
+ m_deviceConfig.size = modes.at(iValue);
+ }
+
+ if ( GetProfile().GetLocalProfileInt("Setup", "Fullscreen", iValue) ) {
+ m_deviceConfig.fullScreen = (iValue == 1);
+ }
+
if (! CreateVideoSurface())
return false; // dialog is in function
@@ -408,8 +413,7 @@ bool CApplication::Create()
// Don't generate joystick events
SDL_JoystickEventState(SDL_IGNORE);
-
-
+
// The video is ready, we can create and initalize the graphics device
m_device = new Gfx::CGLDevice(m_deviceConfig);
if (! m_device->Create() )
diff --git a/src/app/app.h b/src/app/app.h
index 32f03f8..5bf6867 100644
--- a/src/app/app.h
+++ b/src/app/app.h
@@ -25,13 +25,12 @@
#include "common/global.h"
#include "common/singleton.h"
+#include "common/profile.h"
#include "graphics/core/device.h"
#include "graphics/engine/engine.h"
#include "graphics/opengl/gldevice.h"
-#include "plugins/pluginmanager.h"
-
#include <string>
#include <vector>
@@ -337,7 +336,6 @@ protected:
CSoundInterface* m_sound;
//! Main class of the proper game engine
CRobotMain* m_robotMain;
- CPluginManager* m_pluginManager;
CProfile* m_profile;
//! Code to return at exit
diff --git a/src/common/config.h.cmake b/src/common/config.h.cmake
index 8c85df1..dd280a3 100644
--- a/src/common/config.h.cmake
+++ b/src/common/config.h.cmake
@@ -6,4 +6,9 @@
#cmakedefine PLATFORM_OTHER @PLATFORM_OTHER@
#cmakedefine USE_GLEW @USE_GLEW@
-#cmakedefine GLEW_STATIC \ No newline at end of file
+#cmakedefine GLEW_STATIC
+
+#define COLOBOT_DEFAULT_DATADIR "@COLOBOT_INSTALL_DATA_DIR@"
+#define COLOBOT_I18N_DIR "@COLOBOT_INSTALL_I18N_DIR@"
+
+#cmakedefine OPENAL_SOUND
diff --git a/src/common/global.h b/src/common/global.h
index 2d57ee0..0b2d8ec 100644
--- a/src/common/global.h
+++ b/src/common/global.h
@@ -181,7 +181,6 @@ enum DataDir
DIR_AI, //! < ai scripts
DIR_FONT, //! < fonts
DIR_HELP, //! < help files
- DIR_I18N, //! < translations
DIR_ICON, //! < icons & images
DIR_LEVEL, //! < levels
DIR_MODEL, //! < models
diff --git a/src/common/test/CMakeLists.txt b/src/common/test/CMakeLists.txt
index 08efdb3..26a31c9 100644
--- a/src/common/test/CMakeLists.txt
+++ b/src/common/test/CMakeLists.txt
@@ -1,7 +1,10 @@
cmake_minimum_required(VERSION 2.8)
-set(CMAKE_BUILD_TYPE debug)
-set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wold-style-cast -std=gnu++0x")
+if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE debug)
+endif(NOT CMAKE_BUILD_TYPE)
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wold-style-cast -std=gnu++0x")
+set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
include_directories(
.
diff --git a/src/desktop/CMakeLists.txt b/src/desktop/CMakeLists.txt
new file mode 100644
index 0000000..cc159a9
--- /dev/null
+++ b/src/desktop/CMakeLists.txt
@@ -0,0 +1,49 @@
+cmake_minimum_required(VERSION 2.8)
+
+# Install Desktop Entry file
+set(COLOBOT_DESKTOP_FILE colobot.desktop)
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE}
+ COMMAND ./create_desktop_file.sh > ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE}
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ COMMENT "Build ${COLOBOT_DESKTOP_FILE}"
+ )
+add_custom_target(desktopfile ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE})
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications/
+ )
+
+# Install Icon
+set(COLOBOT_ICON_FILE colobot.svg)
+install(
+ FILES ${CMAKE_CURRENT_SOURCE_DIR}/${COLOBOT_ICON_FILE}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps/
+ )
+
+# Render SVG icon in various sizes
+find_program(RSVG_CONVERT rsvg-convert)
+if(RSVG_CONVERT)
+ foreach(PNGSIZE "48" "32" "16")
+ file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${PNGSIZE})
+ add_custom_target(resize_icon_${PNGSIZE} ALL
+ COMMAND ${RSVG_CONVERT} -w ${PNGSIZE} -h ${PNGSIZE} ${CMAKE_CURRENT_SOURCE_DIR}/${COLOBOT_ICON_FILE}
+ > ${CMAKE_CURRENT_BINARY_DIR}/${PNGSIZE}/colobot.png
+ )
+ install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGSIZE}/colobot.png
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/${PNGSIZE}x${PNGSIZE}/apps/
+ )
+ endforeach()
+endif()
+
+# Translate translatable material
+find_program(PO4A po4a)
+
+if(PO4A)
+ add_custom_target(desktop_po4a
+ COMMAND ${PO4A} po4a.cfg
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+ add_dependencies(desktopfile desktop_po4a)
+endif()
diff --git a/src/desktop/colobot.desktop.in b/src/desktop/colobot.desktop.in
new file mode 100644
index 0000000..74378fd
--- /dev/null
+++ b/src/desktop/colobot.desktop.in
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Version=1.0
+Type=Application
+Exec=colobot
+Icon=colobot
diff --git a/src/desktop/colobot.ini b/src/desktop/colobot.ini
new file mode 100644
index 0000000..136e008
--- /dev/null
+++ b/src/desktop/colobot.ini
@@ -0,0 +1,3 @@
+Name="Colobot"
+GenericName="Game to learn programming"
+Comment="Colonize with bots"
diff --git a/src/desktop/colobot.svg b/src/desktop/colobot.svg
new file mode 100644
index 0000000..85a0545
--- /dev/null
+++ b/src/desktop/colobot.svg
@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.1"
+ width="48"
+ height="48"
+ id="colobot-logo"
+ style="enable-background:new">
+ <title
+ id="title3020">Colobot icon</title>
+ <metadata
+ id="metadata3061">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Colobot icon</dc:title>
+ <dc:date>2012-12-27</dc:date>
+ <dc:rights>
+ <cc:Agent>
+ <dc:title></dc:title>
+ </cc:Agent>
+ </dc:rights>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Polish Portal of Colobot</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <cc:license
+ rdf:resource="http://www.gnu.org/licenses/gpl-3.0-standalone.html" />
+ <dc:description>Three spheres symbolizing planets.</dc:description>
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title>Didier Raboud &lt;odyx@debian.org&gt;</dc:title>
+ </cc:Agent>
+ </dc:contributor>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs3059">
+ <linearGradient
+ id="linearGradient4108">
+ <stop
+ id="stop4110"
+ style="stop-color:#008000;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop4112"
+ style="stop-color:#000000;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4096">
+ <stop
+ id="stop4098"
+ style="stop-color:#00ff00;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop4100"
+ style="stop-color:#00ff00;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4108-5">
+ <stop
+ id="stop4110-2"
+ style="stop-color:#000080;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop4112-8"
+ style="stop-color:#000000;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4096-0">
+ <stop
+ id="stop4098-3"
+ style="stop-color:#0000ff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop4100-0"
+ style="stop-color:#0000ff;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4108-5-2">
+ <stop
+ id="stop4110-2-3"
+ style="stop-color:#500000;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop4112-8-6"
+ style="stop-color:#000000;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4096-0-3">
+ <stop
+ id="stop4098-3-7"
+ style="stop-color:#ff0000;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop4100-0-3"
+ style="stop-color:#ff0000;stop-opacity:0"
+ offset="1" />
+ </linearGradient>
+ <radialGradient
+ cx="54.8265"
+ cy="57.607162"
+ r="56.05489"
+ fx="54.8265"
+ fy="57.607162"
+ id="radialGradient4416"
+ xlink:href="#linearGradient4108-5-2"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.02726606,1.3911392,-1.8797791,0.03684323,176.62558,-41.562143)" />
+ <radialGradient
+ cx="63.5"
+ cy="37.5"
+ r="32"
+ fx="63.5"
+ fy="37.5"
+ id="radialGradient4418"
+ xlink:href="#linearGradient4096-0-3"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.796875,6.7936132,3.6927801)" />
+ <radialGradient
+ cx="54.8265"
+ cy="57.607162"
+ r="56.05489"
+ fx="54.8265"
+ fy="57.607162"
+ id="radialGradient4420"
+ xlink:href="#linearGradient4108"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.02726606,1.3911392,-1.8797791,0.03684323,176.62558,-41.562143)" />
+ <radialGradient
+ cx="63.5"
+ cy="37.5"
+ r="32"
+ fx="63.5"
+ fy="37.5"
+ id="radialGradient4422"
+ xlink:href="#linearGradient4096"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.796875,6.7936132,3.6927801)" />
+ <radialGradient
+ cx="54.8265"
+ cy="57.607162"
+ r="56.05489"
+ fx="54.8265"
+ fy="57.607162"
+ id="radialGradient4424"
+ xlink:href="#linearGradient4108-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.02726606,1.3911392,-1.8797791,0.03684323,176.62558,-41.562143)" />
+ <radialGradient
+ cx="63.5"
+ cy="37.5"
+ r="32"
+ fx="63.5"
+ fy="37.5"
+ id="radialGradient4426"
+ xlink:href="#linearGradient4096-0"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.796875,6.7936132,3.6927801)" />
+ </defs>
+ <path
+ d="m 35.001373,17.978157 a 17.137194,11.839104 0 1 1 -34.27438587,0 17.137194,11.839104 0 1 1 34.27438587,0 z"
+ id="path3068"
+ style="opacity:0;color:#000000;fill:#800000;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:1.45397186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:11.63177575, 11.63177575;stroke-dashoffset:11.63177575;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <g
+ transform="matrix(1.4527314,0,0,1.4552231,61.790796,7.2674667)"
+ id="layer1"
+ style="display:inline">
+ <g
+ transform="translate(-64.376292,0)"
+ id="g4403">
+ <g
+ transform="matrix(0.1151419,-0.11259991,0.11259991,0.1151419,78.136911,8.9624182)"
+ id="g4122-3-7"
+ style="stroke-width:6.52155399;stroke-miterlimit:4;stroke-dasharray:none;display:inline">
+ <g
+ transform="translate(-232.5787,-246.03551)"
+ id="g4259-8">
+ <path
+ d="m 128.20539,62.567638 c 0,29.922729 -24.25716,54.179892 -54.179886,54.179892 -29.922729,0 -54.179893,-24.257163 -54.179893,-54.179892 0,-29.922729 24.257164,-54.1798929 54.179893,-54.1798929 29.922726,0 54.179886,24.2571639 54.179886,54.1798929 z"
+ id="path1873-0-2"
+ style="fill:url(#radialGradient4416);fill-opacity:1;fill-rule:nonzero;stroke:#808000;stroke-width:4.65700197;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ <path
+ d="m 102.29361,33.575593 c 0,14.083261 -14.326885,25.5 -31.999997,25.5 -17.673112,0 -32,-11.416739 -32,-25.5 0,-14.083261 14.326888,-25.4999999 32,-25.4999999 17.673112,0 31.999997,11.4167389 31.999997,25.4999999 z"
+ id="path2814-0-8"
+ style="fill:url(#radialGradient4418);fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ </g>
+ </g>
+ <g
+ transform="matrix(0.1151419,-0.11259991,0.11259991,0.1151419,15.374404,17.677401)"
+ id="g4122"
+ style="stroke-width:6.52155399;stroke-miterlimit:4;stroke-dasharray:none">
+ <path
+ d="m 128.20539,62.567638 c 0,29.922729 -24.25716,54.179892 -54.179886,54.179892 -29.922729,0 -54.179893,-24.257163 -54.179893,-54.179892 0,-29.922729 24.257164,-54.1798929 54.179893,-54.1798929 29.922726,0 54.179886,24.2571639 54.179886,54.1798929 z"
+ id="path1873"
+ style="fill:url(#radialGradient4420);fill-opacity:1;fill-rule:nonzero;stroke:#808000;stroke-width:4.65700197;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ <path
+ d="m 102.29361,33.575593 c 0,14.083261 -14.326885,25.5 -31.999997,25.5 -17.673112,0 -32,-11.416739 -32,-25.5 0,-14.083261 14.326888,-25.4999999 32,-25.4999999 17.673112,0 31.999997,11.4167389 31.999997,25.4999999 z"
+ id="path2814"
+ style="fill:url(#radialGradient4422);fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ </g>
+ <g
+ transform="matrix(0.1151419,-0.11259991,0.11259991,0.1151419,57.006572,14.417637)"
+ id="g4122-3"
+ style="stroke-width:6.52155399;stroke-miterlimit:4;stroke-dasharray:none;display:inline">
+ <g
+ transform="translate(-136.63091,-98.230764)"
+ id="g4259">
+ <path
+ d="m 128.20539,62.567638 c 0,29.922729 -24.25716,54.179892 -54.179886,54.179892 -29.922729,0 -54.179893,-24.257163 -54.179893,-54.179892 0,-29.922729 24.257164,-54.1798929 54.179893,-54.1798929 29.922726,0 54.179886,24.2571639 54.179886,54.1798929 z"
+ id="path1873-0"
+ style="fill:url(#radialGradient4424);fill-opacity:1;fill-rule:nonzero;stroke:#808000;stroke-width:4.65700197;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ <path
+ d="m 102.29361,33.575593 c 0,14.083261 -14.326885,25.5 -31.999997,25.5 -17.673112,0 -32,-11.416739 -32,-25.5 0,-14.083261 14.326888,-25.4999999 32,-25.4999999 17.673112,0 31.999997,11.4167389 31.999997,25.4999999 z"
+ id="path2814-0"
+ style="fill:url(#radialGradient4426);fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/src/desktop/create_desktop_file.sh b/src/desktop/create_desktop_file.sh
new file mode 100755
index 0000000..e0f120b
--- /dev/null
+++ b/src/desktop/create_desktop_file.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+set -e
+
+# Create colobot.desktop from various colobot.ini's
+
+fname=colobot.ini
+
+cat colobot.desktop.in
+
+linguas=$([ ! -d lang ] || ( cd lang ; ls));
+
+for type in Name GenericName Comment; do
+ egrep "^$type=" $fname | sed -e "s/^$type=\"\(.*\)\"$/$type=\1/g"
+ for l in $linguas; do
+ egrep "^$type=" lang/$l/$fname | sed -e "s/^$type=\"\(.*\)\"$/$type[$l]=\1/g"
+ done
+done
diff --git a/src/desktop/po/colobot-desktop.pot b/src/desktop/po/colobot-desktop.pot
new file mode 100644
index 0000000..e74136a
--- /dev/null
+++ b/src/desktop/po/colobot-desktop.pot
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2012-12-26 15:05+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: colobot.ini:1
+#, no-wrap
+msgid "Colobot"
+msgstr ""
+
+#: colobot.ini:2
+#, no-wrap
+msgid "Game to learn programming"
+msgstr ""
+
+#: colobot.ini:3
+#, no-wrap
+msgid "Colonize with bots"
+msgstr ""
diff --git a/src/desktop/po/fr.po b/src/desktop/po/fr.po
new file mode 100644
index 0000000..63dbb23
--- /dev/null
+++ b/src/desktop/po/fr.po
@@ -0,0 +1,32 @@
+# French translations for PACKAGE package
+# Copyright (C) 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Automatically generated, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2012-12-26 15:05+0100\n"
+"PO-Revision-Date: 2012-12-26 15:05+0100\n"
+"Last-Translator: Didier Raboud <odyx@debian.org>\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: colobot.ini:1
+#, no-wrap
+msgid "Colobot"
+msgstr "Colobot"
+
+#: colobot.ini:2
+#, no-wrap
+msgid "Game to learn programming"
+msgstr "Apprentissage de la programmation par le jeu"
+
+#: colobot.ini:3
+#, no-wrap
+msgid "Colonize with bots"
+msgstr "Colonise avec des roBots"
diff --git a/src/desktop/po4a.cfg b/src/desktop/po4a.cfg
new file mode 100644
index 0000000..eda2985
--- /dev/null
+++ b/src/desktop/po4a.cfg
@@ -0,0 +1,3 @@
+[po_directory] po/
+
+[type:ini] colobot.ini $lang:lang/$lang/colobot.ini
diff --git a/src/graphics/engine/test/CMakeLists.txt b/src/graphics/engine/test/CMakeLists.txt
index 775abe5..46509f4 100644
--- a/src/graphics/engine/test/CMakeLists.txt
+++ b/src/graphics/engine/test/CMakeLists.txt
@@ -1,7 +1,10 @@
cmake_minimum_required(VERSION 2.8)
-set(CMAKE_BUILD_TYPE debug)
-set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wold-style-cast -std=gnu++0x")
+if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE debug)
+endif(NOT CMAKE_BUILD_TYPE)
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wold-style-cast -std=gnu++0x")
+set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
set(MODELFILE_TEST_SOURCES
modelfile_test.cpp
diff --git a/src/graphics/opengl/test/CMakeLists.txt b/src/graphics/opengl/test/CMakeLists.txt
index be33ac6..154fec8 100644
--- a/src/graphics/opengl/test/CMakeLists.txt
+++ b/src/graphics/opengl/test/CMakeLists.txt
@@ -5,8 +5,11 @@ find_package(SDL REQUIRED)
find_package(SDL_image REQUIRED)
find_package(PNG REQUIRED)
-set(CMAKE_BUILD_TYPE debug)
-set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -O0 -Wold-style-cast -std=gnu++0x")
+if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE debug)
+endif(NOT CMAKE_BUILD_TYPE)
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wold-style-cast -std=gnu++0x")
+set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
set(ADD_LIBS "")
diff --git a/src/math/test/CMakeLists.txt b/src/math/test/CMakeLists.txt
index 5bc9027..dae4018 100644
--- a/src/math/test/CMakeLists.txt
+++ b/src/math/test/CMakeLists.txt
@@ -1,7 +1,10 @@
cmake_minimum_required(VERSION 2.8)
-set(CMAKE_BUILD_TYPE debug)
-set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wold-style-cast -std=gnu++0x")
+if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE debug)
+endif(NOT CMAKE_BUILD_TYPE)
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wold-style-cast -std=gnu++0x")
+set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
include_directories(
.
diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp
index 1da4587..d5805d0 100644
--- a/src/object/robotmain.cpp
+++ b/src/object/robotmain.cpp
@@ -3793,6 +3793,8 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
int rankObj = 0;
int rankGadget = 0;
CObject* sel = 0;
+ char *locale = setlocale(LC_NUMERIC, nullptr);
+ setlocale(LC_NUMERIC, "C");
while (fgets(line, 500, file) != NULL)
{
@@ -4526,6 +4528,8 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
}
m_dialog->SetSceneRead("");
m_dialog->SetStackRead("");
+
+ setlocale(LC_NUMERIC, locale);
}
//! Creates an object of decoration mobile or stationary
diff --git a/src/plugins/plugininterface.h b/src/plugins/plugininterface.h
deleted file mode 100644
index 838dbfd..0000000
--- a/src/plugins/plugininterface.h
+++ /dev/null
@@ -1,65 +0,0 @@
-// * This file is part of the COLOBOT source code
-// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
-// *
-// * 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, either version 3 of the License, or
-// * (at your option) any later version.
-// *
-// * 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, see http://www.gnu.org/licenses/.
-
-/**
- * \file plugins/plugininterface.h
- * \brief Generic plugin interface
- */
-
-#pragma once
-
-
-#include <string>
-
-
-#define PLUGIN_INTERFACE(class_type) \
- static class_type* Plugin##class_type; \
- extern "C" void InstallPluginEntry() { Plugin##class_type = new class_type(); Plugin##class_type->InstallPlugin(); } \
- extern "C" bool UninstallPluginEntry(std::string &reason) { bool result = Plugin##class_type->UninstallPlugin(reason); \
- if (!result) \
- return false; \
- delete Plugin##class_type; \
- return true; } \
- extern "C" CPluginInterface* GetPluginInterfaceEntry() { return static_cast<CPluginInterface*>(Plugin##class_type); }
-
-
-/**
- * \class CPluginInterface
- *
- * \brief Generic plugin interface. All plugins that will be managed by plugin manager have to derive from this class.
- *
- */
-class CPluginInterface {
- public:
- /** Function to get plugin name or description
- * \return returns plugin name
- */
- inline virtual std::string PluginName() { return "abc"; }
-
- /** Function to get plugin version. 1 means version 0.01, 2 means 0.02 etc.
- * \return number indicating plugin version
- */
- inline virtual int PluginVersion() { return 0; }
-
- /** Function to initialize plugin
- */
- inline virtual void InstallPlugin() {}
-
- /** Function called before removing plugin
- */
- inline virtual bool UninstallPlugin(std::string &) { return true; }
-};
-
diff --git a/src/plugins/pluginloader.cpp b/src/plugins/pluginloader.cpp
deleted file mode 100644
index bd0c8be..0000000
--- a/src/plugins/pluginloader.cpp
+++ /dev/null
@@ -1,124 +0,0 @@
-// * This file is part of the COLOBOT source code
-// * Copyright (C) 2012 Polish Portal of Colobot (PPC)
-// *
-// * 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, either version 3 of the License, or
-// * (at your option) any later version.
-// *
-// * 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, see http://www.gnu.org/licenses/.
-
-
-#include "plugins/pluginloader.h"
-
-
-CPluginLoader::CPluginLoader(std::string filename)
-{
- mInterface = nullptr;
- mFilename = filename;
- mLoaded = false;
-}
-
-
-std::string CPluginLoader::GetName()
-{
- if (mLoaded)
- return mInterface->PluginName();
- return "(not loaded)";
-}
-
-
-int CPluginLoader::GetVersion()
-{
- if (mLoaded)
- return mInterface->PluginVersion();
- return 0;
-}
-
-
-bool CPluginLoader::IsLoaded()
-{
- return mLoaded;
-}
-
-
-bool CPluginLoader::UnloadPlugin()
-{
- if (!mLoaded) {
- GetLogger()->Warn("Plugin %s is not loaded.\n");
- return true;
- }
-
- bool (*uninstall)(std::string &) = reinterpret_cast<bool (*)(std::string &)>( lt_dlsym(mHandle, "UninstallPluginEntry") );
- if (!uninstall) {
- GetLogger()->Error("Error getting UninstallPluginEntry for plugin %s: %s\n", mFilename.c_str(), lt_dlerror());
- return false;
- }
-
- std::string reason;
- if (!uninstall(reason)) {
- GetLogger()->Error("Could not unload plugin %s: %s\n", mFilename.c_str(), reason.c_str());
- return false;
- }
-
- lt_dlclose(mHandle);
- mLoaded = false;
- return true;
-}
-
-
-bool CPluginLoader::LoadPlugin()
-{
- if (mFilename.length() == 0) {
- GetLogger()->Warn("No plugin filename specified.\n");
- return false;
- }
-
- mHandle = lt_dlopenext(mFilename.c_str());
- if (!mHandle) {
- GetLogger()->Error("Error loading plugin %s: %s\n", mFilename.c_str(), lt_dlerror());
- return false;
- }
-
- void (*install)() = reinterpret_cast<void (*)()>( lt_dlsym(mHandle, "InstallPluginEntry") );
- if (!install) {
- GetLogger()->Error("Error getting InstallPluginEntry for plugin %s: %s\n", mFilename.c_str(), lt_dlerror());
- return false;
- }
-
- CPluginInterface* (*getInterface)() = reinterpret_cast<CPluginInterface* (*)()>( lt_dlsym(mHandle, "GetPluginInterfaceEntry") );
-
- if (!getInterface) {
- GetLogger()->Error("Error getting GetPluginInterfaceEntry for plugin %s: %s\n", mFilename.c_str(), lt_dlerror());
- return false;
- }
-
- install();
- mInterface = getInterface();
- mLoaded = true;
- return true;
-}
-
-
-bool CPluginLoader::SetFilename(std::string filename)
-{
- bool ok = true;
- if (mLoaded)
- ok = UnloadPlugin();
-
- if (ok)
- mFilename = filename;
- return ok;
-}
-
-
-std::string CPluginLoader::GetFilename()
-{
- return mFilename;
-}
diff --git a/src/plugins/pluginloader.h b/src/plugins/pluginloader.h
deleted file mode 100644
index e8c2c73..0000000
--- a/src/plugins/pluginloader.h
+++ /dev/null
@@ -1,87 +0,0 @@
-// * This file is part of the COLOBOT source code
-// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
-// *
-// * 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, either version 3 of the License, or
-// * (at your option) any later version.
-// *
-// * 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, see http://www.gnu.org/licenses/.
-
-/**
- * \file plugins/pluginloader.h
- * \brief Plugin loader interface
- */
-
-#pragma once
-
-
-#include "common/logger.h"
-
-#include "plugins/plugininterface.h"
-
-#include <ltdl.h>
-#include <string>
-
-
-/**
- * \class CPluginLoader
- *
- * \brief Plugin loader interface. Plugin manager uses this class to load plugins.
- *
- */
-class CPluginLoader {
- public:
- /** Class contructor
- * \param filename plugin filename
- */
- CPluginLoader(std::string filename);
-
- /** Function to get plugin name or description
- * \return returns plugin name
- */
- std::string GetName();
-
- /** Function to get plugin version
- * \return returns plugin version
- */
- int GetVersion();
-
- /** Function to unload plugin
- * \return returns true on success
- */
- bool UnloadPlugin();
-
- /** Function to load plugin
- * \return returns true on success
- */
- bool LoadPlugin();
-
- /** Function to check if plugin is loaded
- * \return returns true if plugin is loaded
- */
- bool IsLoaded();
-
- /** Function to set plugin filename
- * \return returns true on success. Action can fail if plugin was loaded and cannot be unloaded
- */
- bool SetFilename(std::string);
-
- /** Function to get plugin filename
- * \return returns plugin filename
- */
- std::string GetFilename();
-
-
- private:
- CPluginInterface* mInterface;
- std::string mFilename;
- lt_dlhandle mHandle;
- bool mLoaded;
-};
diff --git a/src/plugins/pluginmanager.cpp b/src/plugins/pluginmanager.cpp
deleted file mode 100644
index f4dbcdb..0000000
--- a/src/plugins/pluginmanager.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-// * This file is part of the COLOBOT source code
-// * Copyright (C) 2012 Polish Portal of Colobot (PPC)
-// *
-// * 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, either version 3 of the License, or
-// * (at your option) any later version.
-// *
-// * 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, see http://www.gnu.org/licenses/.
-
-
-#include "plugins/pluginmanager.h"
-
-
-template<> CPluginManager* CSingleton<CPluginManager>::mInstance = nullptr;
-
-
-CPluginManager::CPluginManager()
-{
- lt_dlinit();
-}
-
-
-CPluginManager::~CPluginManager()
-{
- UnloadAllPlugins();
- lt_dlexit();
-}
-
-
-
-void CPluginManager::LoadFromProfile()
-{
- GetLogger()->Info("Trying to load from profile...\n");
- std::vector< std::string > dirs = GetProfile().GetLocalProfileSection("Plugins", "Path");
- std::vector< std::string > plugins = GetProfile().GetLocalProfileSection("Plugins", "File");
-
- GetLogger()->Info("Path %d, files %d\n", dirs.size(), plugins.size());
- for (std::string dir : dirs)
- m_folders.insert(dir);
-
- for (std::string plugin : plugins) {
- GetLogger()->Info("Trying to load plugin %s...\n", plugin.c_str());
- LoadPlugin(plugin);
- }
-}
-
-
-bool CPluginManager::LoadPlugin(std::string filename)
-{
- bool result = false;
- CPluginLoader *loader = new CPluginLoader("");
- for (std::string dir : m_folders) {
- loader->SetFilename(dir + "/" + filename);
- result = loader->LoadPlugin();
- if (result) {
- GetLogger()->Info("Plugin %s (%s) version %0.2f loaded!\n", filename.c_str(), loader->GetName().c_str(), loader->GetVersion() / 100.0f);
- m_plugins.push_back(loader);
- break;
- }
- }
- return result;
-}
-
-
-bool CPluginManager::UnloadPlugin(std::string filename)
-{
- std::vector<CPluginLoader *>::iterator it;
- GetLogger()->Info("Trying to unload plugin %s...\n", filename.c_str());
- for (it = m_plugins.begin(); it != m_plugins.end(); it++) {
- CPluginLoader *plugin = *it;
- if (NameEndsWith(plugin->GetFilename(), filename)) {
- m_plugins.erase(it);
- plugin->UnloadPlugin();
- delete plugin;
- return true;
- }
- }
- return false;
-}
-
-
-bool CPluginManager::AddSearchDirectory(std::string dir)
-{
- m_folders.insert(dir);
- return true;
-}
-
-
-bool CPluginManager::RemoveSearchDirectory(std::string dir)
-{
- m_folders.erase(dir);
- return false;
-}
-
-
-bool CPluginManager::UnloadAllPlugins()
-{
- bool allOk = true;
- std::vector<CPluginLoader *>::iterator it;
- for (it = m_plugins.begin(); it != m_plugins.end(); it++) {
- CPluginLoader *plugin = *it;
- bool result;
-
- GetLogger()->Info("Trying to unload plugin %s (%s)...\n", plugin->GetFilename().c_str(), plugin->GetName().c_str());
- result = plugin->UnloadPlugin();
- if (!result) {
- allOk = false;
- continue;
- }
- delete plugin;
- m_plugins.erase(it);
- }
-
- return allOk;
-}
-
-
-bool CPluginManager::NameEndsWith(std::string filename, std::string ending)
-{
- if (filename.length() > ending.length()) {
- std::string fileEnd = filename.substr(filename.length() - ending.length());
- return (fileEnd == ending);
- }
- return false;
-}
diff --git a/src/plugins/pluginmanager.h b/src/plugins/pluginmanager.h
deleted file mode 100644
index 2798483..0000000
--- a/src/plugins/pluginmanager.h
+++ /dev/null
@@ -1,87 +0,0 @@
-// * This file is part of the COLOBOT source code
-// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
-// *
-// * 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, either version 3 of the License, or
-// * (at your option) any later version.
-// *
-// * 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, see http://www.gnu.org/licenses/.
-
-/**
- * \file plugins/pluginmanager.h
- * \brief Plugin manager class.
- */
-
-#pragma once
-
-
-#include "common/logger.h"
-#include "common/profile.h"
-
-#include "common/singleton.h"
-
-#include "plugins/pluginloader.h"
-
-#include <string>
-#include <set>
-#include <vector>
-
-
-/**
- * \class CPluginManager
- *
- * \brief Plugin manager class. Plugin manager can load plugins from colobot.ini or manually specified files.
- *
- */
-class CPluginManager : public CSingleton<CPluginManager> {
- public:
- CPluginManager();
- ~CPluginManager();
-
- /** Function loads plugin list and path list from profile file
- */
- void LoadFromProfile();
-
- /** Function loads specified plugin
- * \param filename plugin filename
- * \return returns true on success
- */
- bool LoadPlugin(std::string filename);
-
- /** Function unloads specified plugin
- * \param filename plugin filename
- * \return returns true on success
- */
- bool UnloadPlugin(std::string filename);
-
- /** Function adds path to be checked when searching for plugin file. If path was already added it will be ignored
- * \param dir plugin search path
- * \return returns true on success
- */
- bool AddSearchDirectory(std::string dir);
-
- /** Function removes path from list
- * \param dir plugin search path
- * \return returns true on success
- */
- bool RemoveSearchDirectory(std::string dir);
-
- /** Function tries to unload all plugins
- * \return returns true on success
- */
- bool UnloadAllPlugins();
-
- private:
- bool NameEndsWith(std::string, std::string);
-
- std::set< std::string > m_folders;
- std::vector<CPluginLoader *> m_plugins;
-};
-
diff --git a/src/plugins/test/CMakeLists.txt b/src/plugins/test/CMakeLists.txt
deleted file mode 100644
index a68de2c..0000000
--- a/src/plugins/test/CMakeLists.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-
-set(CMAKE_BUILD_TYPE debug)
-set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -O0 -std=c++11 -rdynamic")
-
-add_executable(manager_test manager_test.cpp ../../common/logger.cpp ../../common/profile.cpp ../../common/iman.cpp ../pluginmanager.cpp ../pluginloader.cpp)
-
-include_directories(".")
-include_directories("../../")
-include_directories("../../../")
-
-target_link_libraries(manager_test ${LTDL_LIBRARY})
diff --git a/src/plugins/test/colobot.ini b/src/plugins/test/colobot.ini
deleted file mode 100644
index 08956be..0000000
--- a/src/plugins/test/colobot.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[Plugins]
-Path=.
-File=libopenalsound.so
diff --git a/src/plugins/test/manager_test.cpp b/src/plugins/test/manager_test.cpp
deleted file mode 100644
index d921c1d..0000000
--- a/src/plugins/test/manager_test.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <common/logger.h>
-#include <common/profile.h>
-#include <common/iman.h>
-#include <plugins/pluginmanager.h>
-#include <sound/sound.h>
-
-
-int main() {
- new CLogger();
- new CProfile();
- new CInstanceManager();
- CPluginManager *mgr = new CPluginManager();
-
- if (!GetProfile()->InitCurrentDirectory()) {
- GetLogger()->Error("Config not found!\n");
- return 1;
- }
-
- mgr->LoadFromProfile();
- CSoundInterface *sound = static_cast<CSoundInterface*>(CInstanceManager::GetInstancePointer()->SearchInstance(CLASS_SOUND));
-
- if (!sound) {
- GetLogger()->Error("Sound not loaded!\n");
- return 2;
- }
-
- sound->Create(true);
- mgr->UnloadAllPlugins();
-
- return 0;
-}
diff --git a/src/po/CMakeLists.txt b/src/po/CMakeLists.txt
index 02a4d37..3b26571 100644
--- a/src/po/CMakeLists.txt
+++ b/src/po/CMakeLists.txt
@@ -1,13 +1,10 @@
cmake_minimum_required(VERSION 2.8)
-SET(_potFile colobot.pot)
+set(_potFile colobot.pot)
-# TODO: Use a finder
-SET(XGETTEXT_CMD /usr/bin/xgettext)
+find_program(XGETTEXT_CMD xgettext)
-find_package(Gettext REQUIRED)
-
-ADD_CUSTOM_COMMAND(OUTPUT ${_potFile}
+add_custom_command(OUTPUT ${_potFile}
COMMAND ${XGETTEXT_CMD} ../app/app.cpp --output=${_potFile}
COMMAND ${XGETTEXT_CMD} ../common/restext_strings.c --output=${_potFile} --join-existing --extract-all --no-location
@@ -15,10 +12,8 @@ ADD_CUSTOM_COMMAND(OUTPUT ${_potFile}
COMMENT "Extract translatable messages to ${_potFile}"
)
-ADD_CUSTOM_TARGET(_${potFile} ${_all}
-DEPENDS ${_potFile}
-)
+add_custom_target(_${potFile} ${_all} DEPENDS ${_potFile})
-FILE(GLOB _poFiles *.po)
+file(GLOB _poFiles *.po)
-GETTEXT_CREATE_TRANSLATIONS(${_potFile} ALL ${_poFiles})
+gettext_create_translations(${_potFile} ALL ${_poFiles})
diff --git a/src/sound/plugins/oalsound/alsound.cpp b/src/sound/oalsound/alsound.cpp
index 83a4def..0201417 100644
--- a/src/sound/plugins/oalsound/alsound.cpp
+++ b/src/sound/oalsound/alsound.cpp
@@ -23,51 +23,23 @@
#define MIN(a, b) (a > b ? b : a)
-
-PLUGIN_INTERFACE(ALSound)
-
-
-std::string ALSound::PluginName()
-{
- return "Sound plugin using OpenAL library to play sounds.";
-}
-
-
-int ALSound::PluginVersion()
-{
- return 2;
-}
-
-
-void ALSound::InstallPlugin()
-{
- auto pointer = CInstanceManager::GetInstancePointer();
- if (pointer != nullptr)
- CInstanceManager::GetInstancePointer()->AddInstance(CLASS_SOUND, this);
-}
-
-
-bool ALSound::UninstallPlugin(std::string &reason)
-{
- auto pointer = CInstanceManager::GetInstancePointer();
- if (pointer != nullptr)
- CInstanceManager::GetInstancePointer()->DeleteInstance(CLASS_SOUND, this);
- CleanUp();
- return true;
-}
-
-
ALSound::ALSound()
{
mEnabled = false;
m3D = false;
mAudioVolume = MAXVOLUME;
mMute = false;
+ auto pointer = CInstanceManager::GetInstancePointer();
+ if (pointer != nullptr)
+ CInstanceManager::GetInstancePointer()->AddInstance(CLASS_SOUND, this);
}
ALSound::~ALSound()
{
+ auto pointer = CInstanceManager::GetInstancePointer();
+ if (pointer != nullptr)
+ CInstanceManager::GetInstancePointer()->DeleteInstance(CLASS_SOUND, this);
CleanUp();
}
@@ -114,14 +86,14 @@ void ALSound::SetSound3D(bool bMode)
}
-bool ALSound::RetSound3D()
+bool ALSound::GetSound3D()
{
// TODO stub! need to be implemented
return true;
}
-bool ALSound::RetSound3DCap()
+bool ALSound::GetSound3DCap()
{
// TODO stub! need to be implemented
return true;
@@ -141,7 +113,7 @@ void ALSound::SetAudioVolume(int volume)
}
-int ALSound::RetAudioVolume()
+int ALSound::GetAudioVolume()
{
float volume;
if ( !mEnabled )
@@ -158,7 +130,7 @@ void ALSound::SetMusicVolume(int volume)
}
-int ALSound::RetMusicVolume()
+int ALSound::GetMusicVolume()
{
// TODO stub! Add music support
if ( !mEnabled )
@@ -179,7 +151,7 @@ bool ALSound::Cache(Sound sound, std::string filename)
}
-int ALSound::RetPriority(Sound sound)
+int ALSound::GetPriority(Sound sound)
{
if ( sound == SOUND_FLYh ||
sound == SOUND_FLY ||
@@ -230,7 +202,7 @@ int ALSound::RetPriority(Sound sound)
bool ALSound::SearchFreeBuffer(Sound sound, int &channel, bool &bAlreadyLoaded)
{
- int priority = RetPriority(sound);
+ int priority = GetPriority(sound);
// Seeks a channel used which sound is stopped.
for (auto it : mChannels) {
@@ -287,7 +259,7 @@ bool ALSound::SearchFreeBuffer(Sound sound, int &channel, bool &bAlreadyLoaded)
int lowerOrEqual = -1;
for (auto it : mChannels) {
if (it.second->GetPriority() < priority) {
- GetLogger()->Info("Sound channel with lower priority will be reused.");
+ GetLogger()->Debug("Sound channel with lower priority will be reused.");
channel = it.first;
return true;
}
@@ -297,7 +269,7 @@ bool ALSound::SearchFreeBuffer(Sound sound, int &channel, bool &bAlreadyLoaded)
if (lowerOrEqual != -1) {
channel = lowerOrEqual;
- GetLogger()->Info("Sound channel with lower or equal priority will be reused.");
+ GetLogger()->Debug("Sound channel with lower or equal priority will be reused.");
return true;
}
@@ -485,11 +457,11 @@ void ALSound::FrameMove(float delta)
if (it.second->GetEnvelope().totalTime <= it.second->GetCurrentTime()) {
if (oper.nextOper == SOPER_LOOP) {
- GetLogger()->Info("Replay.\n");
+ GetLogger()->Trace("Sound oper: replay.\n");
it.second->SetCurrentTime(0.0f);
it.second->Play();
} else {
- GetLogger()->Info("Next.\n");
+ GetLogger()->Trace("Sound oper: next.\n");
it.second->SetStartAmplitude(oper.finalAmplitude);
it.second->SetStartFrequency(oper.finalFrequency);
it.second->PopEnvelope();
diff --git a/src/sound/plugins/oalsound/alsound.h b/src/sound/oalsound/alsound.h
index a1128e0..7d24ba6 100644
--- a/src/sound/plugins/oalsound/alsound.h
+++ b/src/sound/oalsound/alsound.h
@@ -45,13 +45,13 @@ class ALSound : public CSoundInterface
bool RetEnable();
void SetSound3D(bool bMode);
- bool RetSound3D();
- bool RetSound3DCap();
+ bool GetSound3D();
+ bool GetSound3DCap();
void SetAudioVolume(int volume);
- int RetAudioVolume();
+ int GetAudioVolume();
void SetMusicVolume(int volume);
- int RetMusicVolume();
+ int GetMusicVolume();
void SetListener(Math::Vector eye, Math::Vector lookat);
void FrameMove(float rTime);
@@ -80,7 +80,7 @@ class ALSound : public CSoundInterface
private:
void CleanUp();
- int RetPriority(Sound);
+ int GetPriority(Sound);
bool SearchFreeBuffer(Sound sound, int &channel, bool &bAlreadyLoaded);
bool mEnabled;
diff --git a/src/sound/plugins/oalsound/buffer.cpp b/src/sound/oalsound/buffer.cpp
index 37211e9..dbfdca2 100644
--- a/src/sound/plugins/oalsound/buffer.cpp
+++ b/src/sound/oalsound/buffer.cpp
@@ -36,7 +36,7 @@ Buffer::~Buffer() {
bool Buffer::LoadFromFile(std::string filename, Sound sound) {
mSound = sound;
- GetLogger()->Info("Loading audio file: %s\n", filename.c_str());
+ GetLogger()->Debug("Loading audio file: %s\n", filename.c_str());
mBuffer = alutCreateBufferFromFile(filename.c_str());
ALenum error = alutGetError();
@@ -53,7 +53,7 @@ bool Buffer::LoadFromFile(std::string filename, Sound sound) {
alGetBufferi(mBuffer, AL_CHANNELS, &channels);
alGetBufferi(mBuffer, AL_FREQUENCY, &freq);
- mDuration = (ALfloat)size / channels / bits / 8 / (ALfloat)freq;
+ mDuration = static_cast<ALfloat>(size) / channels / bits / 8 / static_cast<ALfloat>(freq);
mLoaded = true;
return true;
diff --git a/src/sound/plugins/oalsound/buffer.h b/src/sound/oalsound/buffer.h
index 8c4a2d3..8c4a2d3 100644
--- a/src/sound/plugins/oalsound/buffer.h
+++ b/src/sound/oalsound/buffer.h
diff --git a/src/sound/plugins/oalsound/channel.cpp b/src/sound/oalsound/channel.cpp
index 4476dee..2285414 100644
--- a/src/sound/plugins/oalsound/channel.cpp
+++ b/src/sound/oalsound/channel.cpp
@@ -227,7 +227,7 @@ void Channel::AdjustFrequency(float freq) {
void Channel::AdjustVolume(float volume) {
- SetVolume(mStartAmplitude * (float) volume);
+ SetVolume(mStartAmplitude * volume);
}
diff --git a/src/sound/plugins/oalsound/channel.h b/src/sound/oalsound/channel.h
index 165ff50..165ff50 100644
--- a/src/sound/plugins/oalsound/channel.h
+++ b/src/sound/oalsound/channel.h
diff --git a/src/sound/plugins/oalsound/check.h b/src/sound/oalsound/check.h
index cf3e468..cf3e468 100644
--- a/src/sound/plugins/oalsound/check.h
+++ b/src/sound/oalsound/check.h
diff --git a/src/sound/plugins/oalsound/CMakeLists.txt b/src/sound/plugins/oalsound/CMakeLists.txt
deleted file mode 100644
index 0bc9482..0000000
--- a/src/sound/plugins/oalsound/CMakeLists.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-
-set(SOURCES
- alsound.cpp
- buffer.cpp
- channel.cpp
-)
-
-SET (CMAKE_CXX_FLAGS "-Wall -g -std=c++0x -fPIC")
-
-include(FindPkgConfig)
-include(FindOpenAL)
-pkg_check_modules(OPENAL_LIB REQUIRED openal)
-
-set(OPENAL_LIBRARIES
- openal
- alut
-)
-
-include_directories(../../..)
-include_directories(.)
-add_library(openalsound SHARED ${SOURCES})
-target_link_libraries(openalsound ${OPENAL_LIBRARIES})
diff --git a/src/sound/plugins/oalsound/test/CMakeLists.txt b/src/sound/plugins/oalsound/test/CMakeLists.txt
deleted file mode 100644
index f7b165c..0000000
--- a/src/sound/plugins/oalsound/test/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-
-set(CMAKE_BUILD_TYPE debug)
-set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -O0 -std=c++11 -rdynamic")
-
-add_executable(plugin_test plugin_test.cpp ../../../../common/iman.cpp ../../../../common/logger.cpp ../../../../plugins/pluginloader.cpp)
-
-include_directories(".")
-include_directories("../../../../")
-
-target_link_libraries(plugin_test ${LTDL_LIBRARY})
diff --git a/src/sound/plugins/oalsound/test/plugin_test.cpp b/src/sound/plugins/oalsound/test/plugin_test.cpp
deleted file mode 100644
index 40c1cd2..0000000
--- a/src/sound/plugins/oalsound/test/plugin_test.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <string>
-#include <cstdio>
-#include <unistd.h>
-
-#include <common/logger.h>
-#include <common/iman.h>
-#include <sound/sound.h>
-#include <plugins/pluginloader.h>
-
-
-int main() {
- new CLogger();
- new CInstanceManager();
-
- lt_dlinit();
-
- CPluginLoader *plugin = new CPluginLoader("libopenalsound");
- if (plugin->LoadPlugin()) {
- CSoundInterface *sound = static_cast<CSoundInterface*>(CInstanceManager::GetInstancePointer()->SearchInstance(CLASS_SOUND));
-
- sound->Create(true);
- sound->CacheAll();
- sound->Play((Sound)8);
- sound->Play((Sound)18);
-
- sleep(10);
- /*
- while (1)
- {
- // just a test, very slow
- plugin->FrameMove(0);
- //if ('n' == getchar())
- // break;
- }*/
- plugin->UnloadPlugin();
- }
-
- lt_dlexit();
- return 0;
-}
diff --git a/src/sound/sound.h b/src/sound/sound.h
index c2b890f..566f415 100644
--- a/src/sound/sound.h
+++ b/src/sound/sound.h
@@ -28,8 +28,6 @@
#include "common/iman.h"
#include "common/logger.h"
-#include "plugins/plugininterface.h"
-
#include <string>
#include <iostream>
#include <iomanip>
@@ -152,7 +150,7 @@ enum SoundNext
* \brief Sound plugin interface
*
*/
-class CSoundInterface : public CPluginInterface
+class CSoundInterface
{
public:
inline CSoundInterface() {
diff --git a/src/ui/maindialog.cpp b/src/ui/maindialog.cpp
index 5136a41..ebf7d10 100644
--- a/src/ui/maindialog.cpp
+++ b/src/ui/maindialog.cpp
@@ -1164,43 +1164,22 @@ pb->SetState(STATE_SHADOW);
if ( m_phase == PHASE_SETUPd || // setup/display ?
m_phase == PHASE_SETUPds )
{
-
-// TODO: device settings
-#if 0
-
pos.x = ox+sx*3;
pos.y = oy+sy*9;
ddim.x = dim.x*6;
ddim.y = dim.y*1;
- GetResource(RES_TEXT, RT_SETUP_DEVICE, name);
- pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, name);
- pl->SetTextAlign(Gfx::TEXT_ALIGN_LEFT);
-
- pos.x = ox+sx*3;
- pos.y = oy+sy*5.2f;
- ddim.x = dim.x*6;
- ddim.y = dim.y*4.5f;
- pli = pw->CreateList(pos, ddim, 0, EVENT_LIST1);
- pli->SetState(STATE_SHADOW);
- UpdateDisplayDevice();
-
- pos.x = ox+sx*10;
- pos.y = oy+sy*9;
- ddim.x = dim.x*6;
- ddim.y = dim.y*1;
GetResource(RES_TEXT, RT_SETUP_MODE, name);
pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL2, name);
pl->SetTextAlign(Gfx::TEXT_ALIGN_LEFT);
m_setupFull = m_app->GetVideoConfig().fullScreen;
- pos.x = ox+sx*10;
+ pos.x = ox+sx*3;
pos.y = oy+sy*5.2f;
ddim.x = dim.x*6;
ddim.y = dim.y*4.5f;
pli = pw->CreateList(pos, ddim, 0, EVENT_LIST2);
pli->SetState(STATE_SHADOW);
UpdateDisplayMode();
- pli->SetState(STATE_ENABLE, m_setupFull);
ddim.x = dim.x*4;
ddim.y = dim.y*0.5f;
@@ -1209,7 +1188,6 @@ pb->SetState(STATE_SHADOW);
pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_FULL);
pc->SetState(STATE_SHADOW);
pc->SetState(STATE_CHECK, m_setupFull);
-#endif
ddim.x = dim.x*6;
ddim.y = dim.y*1;
@@ -2610,19 +2588,16 @@ bool CMainDialog::EventProcess(const Event &event)
pw = static_cast<CWindow*>(m_interface->SearchControl(EVENT_WINDOW5));
if ( pw == 0 ) break;
pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_FULL));
- if ( pc == 0 ) break;
- pl = static_cast<CList*>(pw->SearchControl(EVENT_LIST2));
- if ( pl == 0 ) break;
- if ( pc->TestState(STATE_CHECK) )
- {
- pc->ClearState(STATE_CHECK); // window
- pl->ClearState(STATE_ENABLE);
- }
- else
- {
- pc->SetState(STATE_CHECK); // fullscreen
- pl->SetState(STATE_ENABLE);
- }
+ if ( pc == 0 ) break;
+
+ if ( pc->TestState(STATE_CHECK) ) {
+ m_setupFull = false;
+ pc->ClearState(STATE_CHECK);
+ } else {
+ m_setupFull = true;
+ pc->SetState(STATE_CHECK);
+ }
+
UpdateApply();
break;
@@ -2633,7 +2608,8 @@ bool CMainDialog::EventProcess(const Event &event)
if ( pb == 0 ) break;
pb->ClearState(STATE_PRESS);
pb->ClearState(STATE_HILIGHT);
- ChangeDisplay();
+ // TODO: uncomment when changing display is implemented
+ //ChangeDisplay();
UpdateApply();
break;
@@ -2909,12 +2885,12 @@ bool CMainDialog::EventProcess(const Event &event)
case EVENT_INTERFACE_SILENT:
m_sound->SetAudioVolume(0);
- //TODO: m_sound->SetMidiVolume(0);
+ m_sound->SetMusicVolume(0);
UpdateSetupButtons();
break;
case EVENT_INTERFACE_NOISY:
m_sound->SetAudioVolume(MAXVOLUME);
- //TODO: m_sound->SetMidiVolume(MAXVOLUME*3/4);
+ m_sound->SetMusicVolume(MAXVOLUME*3/4);
UpdateSetupButtons();
break;
@@ -5076,9 +5052,6 @@ void CMainDialog::UpdateDisplayMode()
{
CWindow* pw;
CList* pl;
- char bufDevices[1000];
- char bufModes[5000];
- int i, j, totalDevices, selectDevices, totalModes, selectModes;
pw = static_cast<CWindow*>(m_interface->SearchControl(EVENT_WINDOW5));
if ( pw == 0 ) return;
@@ -5086,25 +5059,18 @@ void CMainDialog::UpdateDisplayMode()
if ( pl == 0 ) return;
pl->Flush();
- bufModes[0] = 0;
- /* TODO: remove device choice
- m_engine->EnumDevices(bufDevices, 1000,
- bufModes, 5000,
- totalDevices, selectDevices,
- totalModes, selectModes);*/
-
- i = 0;
- j = 0;
- while ( bufModes[i] != 0 )
- {
- pl->SetName(j++, bufModes+i);
- while ( bufModes[i++] != 0 );
+ std::vector<Math::IntPoint> modes;
+ m_app->GetVideoResolutionList(modes, true, true);
+ int i = 0;
+ std::stringstream mode_text;
+ for (Math::IntPoint mode : modes) {
+ mode_text.str("");
+ mode_text << mode.x << "x" << mode.y;
+ pl->SetName(i++, mode_text.str().c_str());
}
- pl->SetSelect(selectModes);
+ pl->SetSelect(m_setupSelMode);
pl->ShowSelect(false);
-
- m_setupSelMode = selectModes;
}
// Change the graphics mode.
@@ -5392,9 +5358,8 @@ void CMainDialog::UpdateSetupButtons()
ps = static_cast<CSlider*>(pw->SearchControl(EVENT_INTERFACE_VOLMUSIC));
if ( ps != 0 )
{
- /* TODO: midi volume
- value = (float)m_sound->GetMidiVolume();
- ps->SetVisibleValue(value);*/
+ value = static_cast<float>(m_sound->GetMusicVolume());
+ ps->SetVisibleValue(value);
}
pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_SOUND3D));
@@ -5474,10 +5439,6 @@ void CMainDialog::ChangeSetupButtons()
void CMainDialog::SetupMemorize()
{
- float fValue;
- int iValue, i, j;
- char num[10];
-
GetProfile().SetLocalProfileString("Directory", "scene", m_sceneDir);
GetProfile().SetLocalProfileString("Directory", "savegame", m_savegameDir);
GetProfile().SetLocalProfileString("Directory", "public", m_publicDir);
@@ -5508,15 +5469,27 @@ void CMainDialog::SetupMemorize()
GetProfile().SetLocalProfileInt("Setup", "TextureQuality", m_engine->GetTextureQuality());
GetProfile().SetLocalProfileInt("Setup", "TotoMode", m_engine->GetTotoMode());
GetProfile().SetLocalProfileInt("Setup", "AudioVolume", m_sound->GetAudioVolume());
+ GetProfile().SetLocalProfileInt("Setup", "MusicVolume", m_sound->GetMusicVolume());
GetProfile().SetLocalProfileInt("Setup", "Sound3D", m_sound->GetSound3D());
GetProfile().SetLocalProfileInt("Setup", "EditIndentMode", m_engine->GetEditIndentMode());
GetProfile().SetLocalProfileInt("Setup", "EditIndentValue", m_engine->GetEditIndentValue());
-
-
- // GetProfile()->SetLocalProfileInt("Setup", "NiceMouse", m_engine->GetNiceMouse());
- // GetProfile()->SetLocalProfileInt("Setup", "UseJoystick", m_engine->GetJoystick());
- // GetProfile()->SetLocalProfileInt("Setup", "MidiVolume", m_sound->GetMidiVolume());
-
+
+ /* screen setup */
+ if (m_setupFull)
+ GetProfile().SetLocalProfileInt("Setup", "Fullscreen", 1);
+ else
+ GetProfile().SetLocalProfileInt("Setup", "Fullscreen", 0);
+
+ CList *pl;
+ CWindow *pw;
+ pw = static_cast<CWindow *>(m_interface->SearchControl(EVENT_WINDOW5));
+ if ( pw != 0 ) {
+ pl = static_cast<CList *>(pw->SearchControl(EVENT_LIST2));
+ if ( pl != 0 ) {
+ GetProfile().SetLocalProfileInt("Setup", "Resolution", pl->GetSelect());
+ }
+ }
+
std::stringstream key;
for (int i = 0; i < INPUT_SLOT_MAX; i++)
{
@@ -5724,11 +5697,10 @@ void CMainDialog::SetupRecall()
m_sound->SetAudioVolume(iValue);
}
- // TODO
- // if ( GetLocalProfileInt("Setup", "MidiVolume", iValue) )
- // {
- // m_sound->SetMidiVolume(iValue);
- // }
+ if ( GetProfile().GetLocalProfileInt("Setup", "MusicVolume", iValue) )
+ {
+ m_sound->SetMusicVolume(iValue);
+ }
if ( GetProfile().GetLocalProfileInt("Setup", "EditIndentMode", iValue) )
{
@@ -5772,6 +5744,14 @@ void CMainDialog::SetupRecall()
{
m_bDeleteGamer = iValue;
}
+
+ if ( GetProfile().GetLocalProfileInt("Setup", "Resolution", iValue) ) {
+ m_setupSelMode = iValue;
+ }
+
+ if ( GetProfile().GetLocalProfileInt("Setup", "Fullscreen", iValue) ) {
+ m_setupFull = (iValue == 1);
+ }
}
diff --git a/src/ui/test/CMakeLists.txt b/src/ui/test/CMakeLists.txt
index 7562a04..e411067 100644
--- a/src/ui/test/CMakeLists.txt
+++ b/src/ui/test/CMakeLists.txt
@@ -1,7 +1,10 @@
cmake_minimum_required(VERSION 2.8)
-set(CMAKE_BUILD_TYPE debug)
-set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wold-style-cast -std=gnu++0x")
+if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE debug)
+endif(NOT CMAKE_BUILD_TYPE)
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wold-style-cast -std=gnu++0x")
+set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
include_directories(
.