X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.c;h=b00e20a28ef67f89800e2897503ce700ea369f4c;hb=f7b1cff56121f72c25e1da08f53958ddab27ce75;hp=94287fa08d729657518c51830e3837d0d2b11073;hpb=adaabca253f2e76597725cdc86fc1fff6f0de1d2;p=rocksndiamonds.git diff --git a/src/main.c b/src/main.c index 94287fa0..b00e20a2 100644 --- a/src/main.c +++ b/src/main.c @@ -26,16 +26,17 @@ Display *display; Visual *visual; int screen; -Window window; -GC gc, clip_gc[NUM_PIXMAPS], tile_clip_gc; -Pixmap pix[NUM_PIXMAPS]; -Pixmap clipmask[NUM_PIXMAPS], tile_clipmask[NUM_TILES]; +DrawWindow window = None; +GC gc, clip_gc[NUM_BITMAPS], tile_clip_gc; +Bitmap pix[NUM_BITMAPS]; +Bitmap pix_masked[NUM_BITMAPS], tile_masked[NUM_TILES]; +Pixmap clipmask[NUM_BITMAPS], tile_clipmask[NUM_TILES]; #ifdef USE_XPM_LIBRARY XpmAttributes xpm_att[NUM_PICTURES]; #endif -Drawable drawto, drawto_field, backbuffer, fieldbuffer; +DrawBuffer drawto, drawto_field, backbuffer, fieldbuffer; Colormap cmap; int sound_pipe[2]; @@ -62,6 +63,8 @@ int global_joystick_status = JOYSTICK_STATUS; int joystick_status = JOYSTICK_STATUS; int sound_status = SOUND_STATUS; boolean sound_loops_allowed = FALSE; +boolean fullscreen_available = FULLSCREEN_STATUS; +boolean fullscreen_enabled = FALSE; boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE]; int redraw_x1 = 0, redraw_y1 = 0; @@ -563,6 +566,384 @@ char *element_info[] = */ }; + + +/* +-----------------------------------------------------------------------+ */ +/* | SDL TEST STUFF | */ +/* +-----------------------------------------------------------------------+ */ + +#ifdef USE_SDL_LIBRARY + +SDL_Surface *sdl_screen, *sdl_image_tmp, *sdl_image, *sdl_image_masked; +SDL_Surface *sdl_image2_tmp, *sdl_image2, *sdl_image2_masked; + +void TEST_SDL_BLIT_RECT(int x, int y) +{ + SDL_Rect rect_src, rect_dst; + + SDLCopyArea(pix_masked[PIX_HEROES], window, + 8 * TILEX, 8 * TILEY, TILEX, TILEY, x, y); + return; + + rect_src.x = 8 * TILEX; + rect_src.y = 8 * TILEY; + rect_src.w = TILEX; + rect_src.h = TILEY; + + rect_dst.x = x; + rect_dst.y = y; + rect_dst.w = TILEX; + rect_dst.h = TILEY; + + SDL_BlitSurface(sdl_image2_masked, &rect_src, sdl_screen, &rect_dst); + SDL_UpdateRect(sdl_screen, x, y, TILEX, TILEY); +} + +void TEST_SDL_INIT_DISPLAY() +{ + SDL_Rect rect_src, rect_dst; + + if (SDL_Init(SDL_INIT_VIDEO) < 0) + { + fprintf(stderr, "SDL_Init() failed: %s\n", SDL_GetError()); + exit(1); + } + + /* automatically cleanup SDL stuff after exit() */ + atexit(SDL_Quit); + + if ((sdl_screen = SDL_SetVideoMode(WIN_XSIZE, WIN_YSIZE, 16, SDL_HWSURFACE)) + == NULL) + { + fprintf(stderr, "SDL_SetVideoMode() failed: %s\n", SDL_GetError()); + exit(1); + } + + SDL_WM_SetCaption(WINDOW_TITLE_STRING, WINDOW_TITLE_STRING); + + if ((sdl_image_tmp = IMG_Load("graphics/RocksScreen.pcx")) == NULL) + { + fprintf(stderr, "IMG_Load() failed: %s\n", SDL_GetError()); + exit(1); + } + + sdl_image = SDL_DisplayFormat(sdl_image_tmp); + + SDL_SetColorKey(sdl_image_tmp, SDL_SRCCOLORKEY, + SDL_MapRGB(sdl_image_tmp->format, 0x00, 0x00, 0x00)); + sdl_image_masked = SDL_DisplayFormat(sdl_image_tmp); + + SDL_FreeSurface(sdl_image_tmp); + + if ((sdl_image2_tmp = IMG_Load("graphics/RocksHeroes.pcx")) == NULL) + { + fprintf(stderr, "IMG_Load() failed: %s\n", SDL_GetError()); + exit(1); + } + + sdl_image2 = SDL_DisplayFormat(sdl_image2_tmp); + SDL_FreeSurface(sdl_image2_tmp); + + sdl_image2_masked = SDL_DisplayFormat(sdl_image2); + SDL_SetColorKey(sdl_image2_masked, SDL_SRCCOLORKEY, + SDL_MapRGB(sdl_image2_masked->format, 0x00, 0x00, 0x00)); + + rect_src.x = 0; + rect_src.y = 0; + rect_src.w = sdl_image->w; + rect_src.h = sdl_image->h; + + rect_dst.x = 0; + rect_dst.y = 0; + rect_dst.w = sdl_image->w; + rect_dst.h = sdl_image->h; + + SDL_BlitSurface(sdl_image, &rect_src, sdl_screen, &rect_dst); + + /* + SDL_UpdateRect(sdl_screen, 0, 0, WIN_XSIZE, WIN_YSIZE); + */ + /* + SDL_UpdateRect(sdl_screen, 0, 0, 0, 0); + */ + SDL_Flip(sdl_screen); + + /* + SDL_Delay(5000); + */ +} + +void TEST_SDL_EVENT_LOOP() +{ + int quit_loop = 0; + + SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE); + + /* + while (!quit_loop && SDL_WaitEvent(&event) >=0) + */ + + while (!quit_loop) + { + SDL_Event event; + + if (SDL_PollEvent(&event)) + { + /* hier werden die Ereignisse behandelt */ + switch(event.type) + { + case SDL_QUIT: + { + quit_loop = 1; + break; + } + + case SDL_MOUSEBUTTONDOWN: + { + int x = event.button.x; + int y = event.button.y; + + SDL_EventState(SDL_MOUSEMOTION, SDL_ENABLE); + + TEST_SDL_BLIT_RECT(x, y); + + printf("SDL_MOUSEBUTTONDOWN(%d, %d)\n", x, y); + break; + } + + case SDL_MOUSEBUTTONUP: + { + int x = event.button.x; + int y = event.button.y; + + SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE); + + printf("SDL_MOUSEBUTTONUP(%d, %d)\n", x, y); + break; + } + + case SDL_MOUSEMOTION: + { + int x = event.motion.x; + int y = event.motion.y; + + TEST_SDL_BLIT_RECT(x, y); + + printf("SDL_MOUSEMOTION(%d, %d)\n", x, y); + break; + } + + default: + break; + } + } + + if (!SDL_PollEvent(NULL)) /* delay only if no pending events */ + { + printf("waiting...\n"); + Delay(100); + } + } + + SDL_FreeSurface(sdl_image); + SDL_Quit(); +} + +#define SCREEN_WIDTH 640 +#define SCREEN_HEIGHT 480 + +void WatchJoysticks() +{ + SDL_Surface *screen; + const char *name; + int i, done; + SDL_Event event; + int x, y, draw; + SDL_Rect axis_area[2]; + int joystick_nr = 0; + SDL_Joystick *joystick = Get_SDL_Joystick(joystick_nr); + + /* Set a video mode to display joystick axis position */ + screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 16, 0); + if ( screen == NULL ) { + fprintf(stderr, "Couldn't set video mode: %s\n",SDL_GetError()); + return; + } + + /* Print info about the joysticks we are watching */ + for (i=0; i<2; i++) + { + joystick = Get_SDL_Joystick(i); + + name = SDL_JoystickName(i); + printf("Watching joystick %d: (%s)\n", i, + name ? name : "Unknown Joystick"); + printf("Joystick has %d axes, %d hats, %d balls, and %d buttons\n", + SDL_JoystickNumAxes(joystick), + SDL_JoystickNumHats(joystick), + SDL_JoystickNumBalls(joystick), + SDL_JoystickNumButtons(joystick)); + } + + /* Initialize drawing rectangles */ + memset(axis_area, 0, (sizeof axis_area)); + draw = 0; + + /* Loop, getting joystick events! */ + done = 0; + while ( ! done ) { + while ( SDL_PollEvent(&event) ) { + switch (event.type) { + case SDL_JOYAXISMOTION: + joystick_nr = event.jaxis.which; + printf("Joystick %d axis %d value: %d\n", + event.jaxis.which, + event.jaxis.axis, + event.jaxis.value); + break; + case SDL_JOYHATMOTION: + joystick_nr = event.jaxis.which; + printf("Joystick %d hat %d value:", + event.jhat.which, + event.jhat.hat); + if ( event.jhat.value == SDL_HAT_CENTERED ) + printf(" centered"); + if ( event.jhat.value & SDL_HAT_UP ) + printf(" up"); + if ( event.jhat.value & SDL_HAT_RIGHT ) + printf(" right"); + if ( event.jhat.value & SDL_HAT_DOWN ) + printf(" down"); + if ( event.jhat.value & SDL_HAT_LEFT ) + printf(" left"); + printf("\n"); + break; + case SDL_JOYBALLMOTION: + joystick_nr = event.jaxis.which; + printf("Joystick %d ball %d delta: (%d,%d)\n", + event.jball.which, + event.jball.ball, + event.jball.xrel, + event.jball.yrel); + break; + case SDL_JOYBUTTONDOWN: + joystick_nr = event.jaxis.which; + printf("Joystick %d button %d down\n", + event.jbutton.which, + event.jbutton.button); + break; + case SDL_JOYBUTTONUP: + joystick_nr = event.jaxis.which; + printf("Joystick %d button %d up\n", + event.jbutton.which, + event.jbutton.button); + break; + case SDL_KEYDOWN: + if ( event.key.keysym.sym != SDLK_ESCAPE ) { + break; + } + /* Fall through to signal quit */ + case SDL_QUIT: + done = 1; + break; + default: + break; + } + } + + joystick = Get_SDL_Joystick(joystick_nr); + + /* Update visual joystick state */ + for ( i=0; i (SCREEN_WIDTH-16) ) { + x = SCREEN_WIDTH-16; + } + y = (((int)SDL_JoystickGetAxis(joystick, 1))+32768); + y *= SCREEN_HEIGHT; + y /= 65535; + if ( y < 0 ) { + y = 0; + } else + if ( y > (SCREEN_HEIGHT-16) ) { + y = SCREEN_HEIGHT-16; + } + axis_area[draw].x = (Sint16)x; + axis_area[draw].y = (Sint16)y; + axis_area[draw].w = 16; + axis_area[draw].h = 16; + SDL_FillRect(screen, &axis_area[draw], 0xFFFF); + + SDL_UpdateRects(screen, 2, axis_area); + } +} + +void TEST_SDL_JOYSTICK() +{ + const char *name; + int i; + + /* Initialize SDL (Note: video is required to start event loop) */ + if ( SDL_Init(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK) < 0 ) + { + fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); + exit(1); + } + + /* Print information about the joysticks */ + printf("There are %d joysticks attached\n", SDL_NumJoysticks()); + for ( i=0; i