X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=putt%2Fmain.c;h=2b08ba7b8861082b2bfb2adbb673d942db8af56d;hb=a863f290379543d092c9aafb5eb4d06080a567d8;hp=f93e70838df4185f8c2d7e9038b2bf190a37ea03;hpb=8eccda3ee6ae5b07b7b057cab8d741340c92a56b;p=neverball diff --git a/putt/main.c b/putt/main.c index f93e708..2b08ba7 100644 --- a/putt/main.c +++ b/putt/main.c @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2003 Robert Kooima * * NEVERPUTT is free software; you can redistribute it and/or modify @@ -14,21 +14,7 @@ /*---------------------------------------------------------------------------*/ -#ifdef WIN32 -#pragma comment(lib, "SDL_ttf.lib") -#pragma comment(lib, "SDL_mixer.lib") -#pragma comment(lib, "SDL_image.lib") -#pragma comment(lib, "SDL.lib") -#pragma comment(lib, "SDLmain.lib") -#pragma comment(lib, "opengl32.lib") -#endif - -/*---------------------------------------------------------------------------*/ - #include -#include -#include -#include #include #include #include @@ -44,6 +30,8 @@ #include "hole.h" #include "game.h" #include "gui.h" +#include "text.h" +#include "syswm.h" #include "st_conf.h" #include "st_all.h" @@ -55,15 +43,12 @@ static int shot(void) { static char filename[MAXSTR]; - static int num = 0; - sprintf(filename, "screen%02d.bmp", num++); - - image_snap(filename, config_get_d(CONFIG_WIDTH), config_get_d(CONFIG_HEIGHT)); + sprintf(filename, "screen%05d.png", config_screenshot()); + image_snap(config_user(filename)); return 1; } - /*---------------------------------------------------------------------------*/ static void toggle_wire(void) @@ -91,54 +76,114 @@ static int loop(void) { SDL_Event e; int d = 1; + int c; while (d && SDL_PollEvent(&e)) { if (e.type == SDL_QUIT) return 0; - if (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_SPACE) - config_tgl_pause(); + switch (e.type) + { + case SDL_MOUSEMOTION: + st_point(+e.motion.x, + -e.motion.y + config_get_d(CONFIG_HEIGHT), + +e.motion.xrel, + -e.motion.yrel); + break; + + case SDL_MOUSEBUTTONDOWN: + d = st_click((e.button.button == SDL_BUTTON_LEFT) ? -1 : 1, 1); + break; + + case SDL_MOUSEBUTTONUP: + d = st_click((e.button.button == SDL_BUTTON_LEFT) ? -1 : 1, 0); + break; + + case SDL_KEYDOWN: + + c = e.key.keysym.sym; + + if (config_tst_d(CONFIG_KEY_FORWARD, c)) + st_stick(config_get_d(CONFIG_JOYSTICK_AXIS_Y), -JOY_MAX); + + else if (config_tst_d(CONFIG_KEY_BACKWARD, c)) + st_stick(config_get_d(CONFIG_JOYSTICK_AXIS_Y), +JOY_MAX); - if (!config_get_pause()) - switch (e.type) + else if (config_tst_d(CONFIG_KEY_LEFT, c)) + st_stick(config_get_d(CONFIG_JOYSTICK_AXIS_X), -JOY_MAX); + + else if (config_tst_d(CONFIG_KEY_RIGHT, c)) + st_stick(config_get_d(CONFIG_JOYSTICK_AXIS_X), +JOY_MAX); + + else switch (c) { - case SDL_MOUSEMOTION: - st_point(+e.motion.x, - -e.motion.y + config_get_d(CONFIG_HEIGHT), - +e.motion.xrel, - -e.motion.yrel); - break; + case SDLK_F10: d = shot(); break; + case SDLK_F9: config_tgl_d(CONFIG_FPS); break; + case SDLK_F8: config_tgl_d(CONFIG_NICE); break; + case SDLK_F7: toggle_wire(); break; - case SDL_MOUSEBUTTONDOWN: - d = st_click((e.button.button == SDL_BUTTON_LEFT) ? -1 : 1, 1); + case SDLK_RETURN: + d = st_buttn(config_get_d(CONFIG_JOYSTICK_BUTTON_A), 1); break; - - case SDL_MOUSEBUTTONUP: - d = st_click((e.button.button == SDL_BUTTON_LEFT) ? -1 : 1, 0); + case SDLK_ESCAPE: + d = st_buttn(config_get_d(CONFIG_JOYSTICK_BUTTON_EXIT), 1); break; - case SDL_KEYDOWN: - switch (e.key.keysym.sym) - { - case SDLK_F10: d = shot(); break; - case SDLK_F9: config_tgl_d(CONFIG_FPS); break; - case SDLK_F8: config_tgl_d(CONFIG_NICE); break; - case SDLK_F7: toggle_wire(); break; - - default: - d = st_keybd(e.key.keysym.sym, 1); - } - break; + default: + d = st_keybd(e.key.keysym.sym, 1); + } + break; - case SDL_ACTIVEEVENT: - if (e.active.state == SDL_APPINPUTFOCUS) - { - if (e.active.gain == 0) - config_set_pause(); - } + case SDL_KEYUP: + + c = e.key.keysym.sym; + + /* gui_stick needs a non-null value, so we use 1 instead of 0. */ + + if (config_tst_d(CONFIG_KEY_FORWARD, c)) + st_stick(config_get_d(CONFIG_JOYSTICK_AXIS_Y), 1); + + else if (config_tst_d(CONFIG_KEY_BACKWARD, c)) + st_stick(config_get_d(CONFIG_JOYSTICK_AXIS_Y), 1); + + else if (config_tst_d(CONFIG_KEY_LEFT, c)) + st_stick(config_get_d(CONFIG_JOYSTICK_AXIS_X), 1); + + else if (config_tst_d(CONFIG_KEY_RIGHT, c)) + st_stick(config_get_d(CONFIG_JOYSTICK_AXIS_X), 1); + + else switch (c) + { + case SDLK_RETURN: + d = st_buttn(config_get_d(CONFIG_JOYSTICK_BUTTON_A), 0); break; + case SDLK_ESCAPE: + d = st_buttn(config_get_d(CONFIG_JOYSTICK_BUTTON_EXIT), 0); + break; + + default: + d = st_keybd(e.key.keysym.sym, 0); } + + case SDL_ACTIVEEVENT: + if (e.active.state == SDL_APPINPUTFOCUS) + if (e.active.gain == 0 && config_get_grab()) + goto_pause(&st_over, 0); + break; + + case SDL_JOYAXISMOTION: + st_stick(e.jaxis.axis, e.jaxis.value); + break; + + case SDL_JOYBUTTONDOWN: + d = st_buttn(e.jbutton.button, 1); + break; + + case SDL_JOYBUTTONUP: + d = st_buttn(e.jbutton.button, 0); + break; + } } return d; } @@ -146,46 +191,38 @@ static int loop(void) int main(int argc, char *argv[]) { int camera = 0; - + SDL_Joystick *joy = NULL; + srand((int) time(NULL)); - language_init("neverball", CONFIG_LOCALE); + lang_init("neverball", CONFIG_LOCALE); if (config_data_path((argc > 1 ? argv[1] : NULL), COURSE_FILE)) { if (config_user_path(NULL)) { - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) == 0) + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) == 0) { config_init(); config_load(); - /* Initialize the language. */ - - language_set(language_from_code(config_simple_get_s(CONFIG_LANG))); - /* Cache Neverball's camera setting. */ camera = config_get_d(CONFIG_CAMERA); - /* Initialize the audio. */ + /* Initialize the joystick. */ + + if (SDL_NumJoysticks() > 0) + { + joy = SDL_JoystickOpen(config_get_d(CONFIG_JOYSTICK_DEVICE)); + if (joy) + { + SDL_JoystickEventState(SDL_ENABLE); + set_joystick(joy); + } + } - audio_bind(AUD_BIRDIE, 1, "snd/birdie.ogg"); - audio_bind(AUD_BOGEY, 1, "snd/bogey.ogg"); - audio_bind(AUD_BUMP, 1, "snd/bink.wav"); - audio_bind(AUD_DOUBLE, 1, "snd/double.ogg"); - audio_bind(AUD_EAGLE, 1, "snd/eagle.ogg"); - audio_bind(AUD_JUMP, 2, "snd/jump.ogg"); - audio_bind(AUD_MENU, 2, "snd/menu.wav"); - audio_bind(AUD_ONE, 1, "snd/one.ogg"); - audio_bind(AUD_PAR, 1, "snd/par.ogg"); - audio_bind(AUD_PENALTY, 1, "snd/penalty.ogg"); - audio_bind(AUD_PLAYER1, 1, "snd/player1.ogg"); - audio_bind(AUD_PLAYER2, 1, "snd/player2.ogg"); - audio_bind(AUD_PLAYER3, 1, "snd/player3.ogg"); - audio_bind(AUD_PLAYER4, 1, "snd/player4.ogg"); - audio_bind(AUD_SWITCH, 2, "snd/switch.wav"); - audio_bind(AUD_SUCCESS, 1, "snd/success.ogg"); + /* Initialize the audio. */ audio_init(); @@ -197,6 +234,10 @@ int main(int argc, char *argv[]) SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + /* This has to happen before mode setting... */ + + set_SDL_icon("icon/neverputt.png"); + /* Initialize the video. */ if (config_mode(config_get_d(CONFIG_FULLSCREEN), @@ -205,9 +246,11 @@ int main(int argc, char *argv[]) { int t1, t0 = SDL_GetTicks(); - SDL_Surface *icon = IMG_Load(config_data("icon/neverputt.png")); - SDL_WM_SetIcon(icon, NULL); - SDL_WM_SetCaption(TITLE, TITLE); + /* ... and this has to happen after it. */ + + set_EWMH_icon("icon/neverputt.png"); + + SDL_WM_SetCaption(TITLE, TITLE); /* Run the main game loop. */ @@ -217,16 +260,8 @@ int main(int argc, char *argv[]) while (loop()) if ((t1 = SDL_GetTicks()) > t0) { - if (config_get_pause()) - { - st_paint(); - gui_blank(); - } - else - { - st_timer((t1 - t0) / 1000.f); - st_paint(); - } + st_timer((t1 - t0) / 1000.f); + st_paint(0.001f * t1); SDL_GL_SwapBuffers(); t0 = t1; @@ -246,9 +281,9 @@ int main(int argc, char *argv[]) } else fprintf(stderr, "%s: %s\n", argv[0], SDL_GetError()); } - else fprintf(stderr, _("Failure to establish config directory\n")); + else fprintf(stderr, L_("Failure to establish config directory\n")); } - else fprintf(stderr, _("Failure to establish game data directory\n")); + else fprintf(stderr, L_("Failure to establish game data directory\n")); return 0; }