}
#include "video/renderer.hpp"
+#include "video/lightmap.hpp"
#include "supertux/main.hpp"
-#ifdef MACOSX
-namespace supertux_apple {
-# include <CoreFoundation/CoreFoundation.h>
-} // namespace supertux_apple
-#endif
-
#include "addon/addon_manager.hpp"
#include "audio/sound_manager.hpp"
#include "control/joystickkeyboardcontroller.hpp"
{
dictionary_manager = new tinygettext::DictionaryManager();
tinygettext::Log::set_log_info_callback(0);
- dictionary_manager->set_filesystem(std::auto_ptr<tinygettext::FileSystem>(new PhysFSFileSystem));
+ dictionary_manager->set_filesystem(std::unique_ptr<tinygettext::FileSystem>(new PhysFSFileSystem));
dictionary_manager->add_directory("locale");
dictionary_manager->set_charset("UTF-8");
PHYSFS_addToSearchPath(writedir.c_str(), 0);
// when started from source dir...
- std::string dir = PHYSFS_getBaseDir();
+ char* base_path = SDL_GetBasePath();
+ std::string dir = base_path;
+ SDL_free(base_path);
+
if (dir[dir.length() - 1] != '/')
dir += "/";
dir += "data";
}
}
-#ifdef MACOSX
- {
- using namespace supertux_apple;
-
- // when started from Application file on Mac OS X...
- char path[PATH_MAX];
- CFBundleRef mainBundle = CFBundleGetMainBundle();
- if(mainBundle == 0)
- throw "Assertion failed: mainBundle != 0";
- CFURLRef mainBundleURL = CFBundleCopyBundleURL(mainBundle);
- if(mainBundleURL == 0)
- throw "Assertion failed: mainBundleURL != 0";
- CFStringRef pathStr = CFURLCopyFileSystemPath(mainBundleURL, kCFURLPOSIXPathStyle);
- if(pathStr == 0)
- throw "Assertion failed: pathStr != 0";
- CFStringGetCString(pathStr, path, PATH_MAX, kCFStringEncodingUTF8);
- CFRelease(mainBundleURL);
- CFRelease(pathStr);
-
- dir = std::string(path) + "/Contents/Resources/data";
- testfname = dir + "/credits.txt";
- sourcedir = false;
- f = fopen(testfname.c_str(), "r");
- if(f) {
- fclose(f);
- if(!PHYSFS_addToSearchPath(dir.c_str(), 1)) {
- log_warning << "Couldn't add '" << dir << "' to physfs searchpath: " << PHYSFS_getLastError() << std::endl;
- } else {
- sourcedir = true;
- }
- }
- }
-#endif
-
-#ifdef _WIN32
- PHYSFS_addToSearchPath(".\\data", 1);
-#endif
-
if(!sourcedir) {
std::string datadir = PHYSFS_getBaseDir();
datadir = datadir.substr(0, datadir.rfind(INSTALL_SUBDIR_BIN));
g_config->window_size = Size(800, 600);
g_config->fullscreen_size = Size(800, 600);
+ g_config->fullscreen_refresh_rate = 0;
g_config->aspect_size = Size(0, 0); // auto detect
} else if(arg == "--window" || arg == "-w") {
{
g_config->window_size = Size(width, height);
g_config->fullscreen_size = Size(width, height);
+ g_config->fullscreen_refresh_rate = 0;
}
}
} else if(arg == "--aspect" || arg == "-a") {
g_config->start_level = arg;
} else {
log_warning << "Unknown option '" << arg << "'. Use --help to see a list of options" << std::endl;
- return true;
}
}
void
Main::init_sdl()
{
- if(SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) {
+ if(SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER) < 0) {
std::stringstream msg;
msg << "Couldn't initialize SDL: " << SDL_GetError();
throw std::runtime_error(msg.str());
}
// just to be sure
atexit(SDL_Quit);
-
- // SDL_EnableUNICODE(1); //old code, mofif by giby
- // SDL_JoystickID myID = SDL_JoystickInstanceID(myOpenedStick);
-
-
- // wait 100ms and clear SDL event queue because sometimes we have random
- // joystick events in the queue on startup...
- SDL_Delay(100);
- SDL_Event dummy;
- while(SDL_PollEvent(&dummy))
- ;
}
void
void
Main::init_video()
{
- SCREEN_WIDTH = 800;
- SCREEN_HEIGHT = 600;
-
- PHYSICAL_SCREEN_WIDTH = SCREEN_WIDTH;
- PHYSICAL_SCREEN_HEIGHT = SCREEN_HEIGHT;
-
SDL_SetWindowTitle(Renderer::instance()->get_window(), PACKAGE_NAME " " PACKAGE_VERSION);
const char* icon_fname = "images/engine/icons/supertux-256x256.png";
log_info << (g_config->use_fullscreen?"fullscreen ":"window ")
<< " Window: " << g_config->window_size
- << " Fullscreen: " << g_config->fullscreen_size
+ << " Fullscreen: " << g_config->fullscreen_size << "@" << g_config->fullscreen_refresh_rate
<< " Area: " << g_config->aspect_size << std::endl;
}
}
}
-void
-Main::wait_for_event(float min_delay, float max_delay)
-{
- assert(min_delay <= max_delay);
-
- Uint32 min = (Uint32) (min_delay * 1000);
- Uint32 max = (Uint32) (max_delay * 1000);
-
- Uint32 ticks = SDL_GetTicks();
- while(SDL_GetTicks() - ticks < min) {
- SDL_Delay(10);
- sound_manager->update();
- }
-
- // clear event queue
- SDL_Event event;
- while (SDL_PollEvent(&event))
- {}
-
- /* Handle events: */
- bool running = false;
- ticks = SDL_GetTicks();
- while(running) {
- while(SDL_PollEvent(&event)) {
- switch(event.type) {
- case SDL_QUIT:
- g_screen_manager->quit();
- break;
- case SDL_KEYDOWN:
- case SDL_JOYBUTTONDOWN:
- case SDL_MOUSEBUTTONDOWN:
- running = false;
- }
- }
- if(SDL_GetTicks() - ticks >= (max - min))
- running = false;
- sound_manager->update();
- SDL_Delay(10);
- }
-}
-
static Uint32 last_timelog_ticks = 0;
static const char* last_timelog_component = 0;
return 0;
timelog("video");
- std::auto_ptr<Renderer> renderer(VideoSystem::new_renderer());
- std::auto_ptr<Lightmap> lightmap(VideoSystem::new_lightmap());
+ std::unique_ptr<Renderer> renderer(VideoSystem::new_renderer());
+ std::unique_ptr<Lightmap> lightmap(VideoSystem::new_lightmap());
DrawingContext context(*renderer, *lightmap);
context_pointer = &context;
init_video();
timelog(0);
- const std::auto_ptr<PlayerStatus> default_playerstatus(new PlayerStatus());
+ const std::unique_ptr<PlayerStatus> default_playerstatus(new PlayerStatus());
g_screen_manager = new ScreenManager();
// we have a normal path specified at commandline, not a physfs path.
// So we simply mount that path here...
std::string dir = FileSystem::dirname(g_config->start_level);
+ std::string fileProtocol = "file://";
+ std::string::size_type position = dir.find(fileProtocol);
+ if(position != std::string::npos) {
+ dir = dir.replace(position, fileProtocol.length(), "");
+ }
log_debug << "Adding dir: " << dir << std::endl;
PHYSFS_addToSearchPath(dir.c_str(), true);
g_screen_manager->push_screen(new worldmap::WorldMap(
FileSystem::basename(g_config->start_level), default_playerstatus.get()));
} else {
- std::auto_ptr<GameSession> session (
+ std::unique_ptr<GameSession> session (
new GameSession(FileSystem::basename(g_config->start_level), default_playerstatus.get()));
g_config->random_seed =session->get_demo_random_seed(g_config->start_demo);