Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //gcc green4.c -o green4 `sdl2-config --cflags --libs` -lSDL2_ttf -lSDL2_image -L /opt/vc/lib -lEGL -lGLESv2 -I /opt/vc/include/
- //SDL_RenderDrawPoint
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <SDL2/SDL.h>
- #include <SDL2/SDL_image.h>
- #include <SDL2/SDL_ttf.h>
- #define WIDTH 640
- #define HEIGHT 360
- #define SHEIGHT 20
- #define SWIDTH 20
- SDL_Texture *gSpriteSheet = NULL;
- SDL_Renderer *gRenderer = NULL;
- SDL_Window *gWin = NULL;
- SDL_Joystick *gGameController = NULL;
- SDL_Event gEvent;
- int gLayerMap[1296];
- char gSpriteSheetImg[50];
- char gSpriteLayerFile[50];
- void vGetScreenSize( int *width, int *height )
- {
- SDL_DisplayMode current;
- int i;
- *width = 0;
- *height = 0;
- for(i = 0; i < SDL_GetNumVideoDisplays(); ++i)
- {
- if ( SDL_GetCurrentDisplayMode(i, ¤t) == 0 )
- {
- *width = current.w;
- *height = current.h;
- }
- }
- }
- int iInitAll( void )
- {
- int iret = 0;
- int i = 0;
- while ( i < 1296 )
- {
- gLayerMap[i] = -1;
- i++;
- }
- if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0)
- {
- iret = -1;
- }
- else
- {
- gWin = SDL_CreateWindow("Image Loading", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_FULLSCREEN);
- gRenderer = SDL_CreateRenderer(gWin, -1, SDL_RENDERER_ACCELERATED|SDL_RENDERER_PRESENTVSYNC );
- SDL_SetRelativeMouseMode(SDL_TRUE);
- if( SDL_NumJoysticks() < 1 )
- {
- printf( "Warning: No joysticks connected!\n" );
- }
- else
- {
- gGameController = SDL_JoystickOpen( 0 );
- if( gGameController == NULL )
- {
- printf( "Warning: Unable to open game controller! SDL Error: %s\n", SDL_GetError() );
- }
- }
- TTF_Init();
- }
- return(iret);
- }
- void vDestroyAll( void )
- {
- SDL_DestroyTexture(gSpriteSheet);
- SDL_DestroyRenderer(gRenderer);
- SDL_DestroyWindow(gWin);
- }
- int iLoadSpriteSheet( char *sheet )
- {
- int iret = 0;
- if ( gSpriteSheet == NULL )
- {
- if ( gRenderer != NULL )
- {
- gSpriteSheet = IMG_LoadTexture(gRenderer,sheet);
- }
- else
- {
- iret = -1;
- }
- }
- else
- {
- iret = -1;
- }
- return(iret);
- }
- int iDrawSprite( int inum, SDL_Rect *dest )
- {
- SDL_Rect src;
- int iret = 0;
- src.y = ((int)inum/8)*SHEIGHT;
- src.x = (inum%8)*SWIDTH;
- src.w = SWIDTH;
- src.h = SHEIGHT;
- if ( gSpriteSheet != NULL && inum < 64 )
- {
- SDL_RenderCopy(gRenderer, gSpriteSheet, &src, dest);
- }
- else
- {
- iret = -1;
- }
- return(iret);
- }
- int iLoadLayer( char *filelayer )
- {
- FILE *file;
- char slayer[10000];
- char num[10];
- int icnt = 0;
- char *ptr1, *ptr2;
- file = fopen(filelayer,"rb");
- fread(slayer,9999,1,file);
- fclose(file);
- ptr2 = slayer;
- if ( ( ptr1 = strstr(ptr2,"|") ) != NULL )
- {
- strncpy(gSpriteSheetImg,ptr2,(int)(ptr1-ptr2));
- gSpriteSheetImg[(int)(ptr1-ptr2)] = 0;
- }
- while( icnt < 1296 )
- {
- ++ptr1;
- ptr2 = ptr1;
- ptr1 = strstr(ptr2,"|");
- strncpy(num,ptr2,(int)(ptr1-ptr2));
- num[(int)(ptr1-ptr2)] = 0;
- gLayerMap[icnt] = atoi(num);
- icnt++;
- }
- }
- int main (int argc, char *argv[])
- {
- FILE *file;
- SDL_Rect dest,dest2,fs;
- Sint16 x_move, y_move;
- const int JOYSTICK_DEAD_ZONE = 8000;
- int xx = 0;
- int yy = 0;
- int quit = 0;
- int spritenum = 0;
- int i = 0;
- int arg = 0;
- int tmp;
- int atot = 0;
- int swidth;
- int sheight;
- gSpriteSheetImg[0] = 0;
- gSpriteLayerFile[0] = 0;
- dest.x = 80;
- dest.y = 80;
- dest.w = 40;
- dest.h = 40;
- dest2.x = 0;
- dest2.y = 0;
- dest2.w = 40;
- dest2.h = 40;
- fs.x = 0;
- fs.y = 0;
- fs.w = 0;
- fs.h = 0;
- if ( iInitAll() == 0 )
- {
- vGetScreenSize(&fs.w,&fs.h);
- SDL_SetRenderDrawColor(gRenderer, 30, 30, 200, 255);
- while ( arg < argc )
- {
- if ( strcmp(argv[arg],"-load") == 0 )
- {
- if ( (arg+1) < argc )
- {
- strcpy(gSpriteLayerFile,argv[arg+1]);
- iLoadLayer(argv[arg+1]);
- }
- }
- if ( strcmp(argv[arg],"-i") == 0 )
- {
- if ( (arg+1) < argc )
- {
- strcpy(gSpriteSheetImg,argv[arg+1]);
- }
- }
- if ( strcmp(argv[arg],"-l") == 0 )
- {
- if ( (arg+1) < argc )
- {
- strcpy(gSpriteLayerFile,argv[arg+1]);
- }
- }
- arg++;
- }
- if ( gSpriteSheetImg[0] == 0 )
- {
- printf("Error loading image\n");
- exit(1);
- }
- if ( gSpriteLayerFile[0] == 0 )
- {
- strcpy(gSpriteLayerFile,"default.lay0");
- }
- if ( iLoadSpriteSheet(gSpriteSheetImg) != 0 )
- {
- printf( "Warning: Unable to open sprite sheet! SDL Error: %s\n", SDL_GetError() );
- }
- while(quit==0)
- {
- while( SDL_PollEvent( &gEvent ) != 0 )
- {
- if( gEvent.type == SDL_KEYDOWN )
- {
- switch (gEvent.key.keysym.sym)
- {
- case SDLK_LEFT: xx = -1; break;
- case SDLK_RIGHT: xx = 1; break;
- case SDLK_UP: yy = -1; break;
- case SDLK_DOWN: yy = 1; break;
- case SDLK_PAGEUP:
- spritenum++;
- if ( spritenum == 64 )
- {
- spritenum = 0;
- }
- break;
- case SDLK_PAGEDOWN:
- spritenum--;
- if ( spritenum == -1 )
- {
- spritenum = 63;
- }
- break;
- case SDLK_q:
- quit = 1;
- i = 0;
- file = fopen(gSpriteLayerFile,"wb");
- fprintf(file,"%s|",gSpriteSheetImg);
- while( i < 1296 )
- {
- fprintf(file,"%d|",gLayerMap[i]);
- i++;
- }
- fclose(file);
- break;
- case SDLK_s:
- tmp = ((int)(dest.y/dest.h)*48)+((int)(dest.x/dest.w));
- gLayerMap[tmp] = spritenum;
- break;
- }
- if ( xx == 1 )
- {
- dest.x += dest.w;
- xx=0;
- }
- else if ( xx == -1 )
- {
- dest.x -= dest.w;
- xx=0;
- }
- if ( yy == 1 )
- {
- dest.y += dest.h;
- yy=0;
- }
- else if ( yy == -1 )
- {
- dest.y -= dest.h;
- yy=0;
- }
- }
- if( gEvent.type == SDL_JOYBUTTONDOWN )
- {
- if ( gEvent.jbutton.button == 0 )
- {
- spritenum++;
- if ( spritenum == 64 )
- {
- spritenum = 0;
- }
- }
- if ( gEvent.jbutton.button == 1 )
- {
- tmp = ((int)(dest.y/dest.h)*48)+((int)(dest.x/dest.w));
- gLayerMap[tmp] = spritenum;
- }
- if ( gEvent.jbutton.button == 2 )
- {
- spritenum--;
- if ( spritenum == -1 )
- {
- spritenum = 63;
- }
- }
- if ( gEvent.jbutton.button == 3 )
- {
- quit = 1;
- i = 0;
- file = fopen(gSpriteLayerFile,"wb");
- fprintf(file,"%s|",gSpriteSheetImg);
- while( i < 1296 )
- {
- fprintf(file,"%d|",gLayerMap[i]);
- i++;
- }
- fclose(file);
- }
- }
- else if( gEvent.type == SDL_JOYAXISMOTION )
- {
- x_move = SDL_JoystickGetAxis(gGameController, 3);
- y_move = SDL_JoystickGetAxis(gGameController, 0);
- if( y_move < -JOYSTICK_DEAD_ZONE )
- {
- yy = 1;
- }
- else if( y_move > JOYSTICK_DEAD_ZONE )
- {
- yy = -1;
- }
- else
- {
- yy = 0;
- }
- if( x_move < -JOYSTICK_DEAD_ZONE )
- {
- xx = -1;
- }
- else if( x_move > JOYSTICK_DEAD_ZONE )
- {
- xx = 1;
- }
- else
- {
- xx = 0;
- }
- if ( xx == 1 )
- {
- dest.x += dest.w;
- xx=0;
- }
- else if ( xx == -1 )
- {
- dest.x -= dest.w;
- xx=0;
- }
- if ( yy == 1 )
- {
- dest.y += dest.h;
- yy=0;
- }
- else if ( yy == -1 )
- {
- dest.y -= dest.h;
- yy=0;
- }
- }
- }
- SDL_RenderClear(gRenderer);
- i = 0;
- while ( i < 1296 )
- {
- if ( gLayerMap[i] > -1 )
- {
- dest2.x = (int)(i%48)*dest2.w;
- dest2.y = (int)(i/48)*dest2.h;
- iDrawSprite(gLayerMap[i],&dest2);
- }
- i++;
- }
- if ( iDrawSprite(spritenum,&dest) != 0 )
- {
- printf( "Warning: Unable to open draw sprite! SDL Error: %s\n", SDL_GetError() );
- }
- SDL_RenderPresent(gRenderer);
- }
- vDestroyAll();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment