Guest User

Untitled

a guest
Dec 29th, 2016
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.45 KB | None | 0 0
  1. //gcc green4.c -o green4 `sdl2-config --cflags --libs` -lSDL2_ttf -lSDL2_image -L /opt/vc/lib -lEGL -lGLESv2 -I /opt/vc/include/
  2.  
  3. //SDL_RenderDrawPoint
  4.  
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <SDL2/SDL.h>
  9. #include <SDL2/SDL_image.h>
  10. #include <SDL2/SDL_ttf.h>
  11.  
  12. #define WIDTH 640
  13. #define HEIGHT 360
  14. #define SHEIGHT 20
  15. #define SWIDTH 20
  16.  
  17. SDL_Texture *gSpriteSheet = NULL;
  18. SDL_Renderer *gRenderer = NULL;
  19. SDL_Window *gWin = NULL;
  20. SDL_Joystick *gGameController = NULL;
  21. SDL_Event gEvent;
  22. int gLayerMap[1296];
  23. char gSpriteSheetImg[50];
  24. char gSpriteLayerFile[50];
  25.  
  26. void vGetScreenSize( int *width, int *height )
  27. {
  28. SDL_DisplayMode current;
  29. int i;
  30.  
  31. *width = 0;
  32. *height = 0;
  33.  
  34. for(i = 0; i < SDL_GetNumVideoDisplays(); ++i)
  35. {
  36. if ( SDL_GetCurrentDisplayMode(i, &current) == 0 )
  37. {
  38. *width = current.w;
  39. *height = current.h;
  40. }
  41. }
  42. }
  43.  
  44. int iInitAll( void )
  45. {
  46. int iret = 0;
  47. int i = 0;
  48.  
  49. while ( i < 1296 )
  50. {
  51. gLayerMap[i] = -1;
  52. i++;
  53. }
  54.  
  55. if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0)
  56. {
  57. iret = -1;
  58. }
  59. else
  60. {
  61. gWin = SDL_CreateWindow("Image Loading", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_FULLSCREEN);
  62. gRenderer = SDL_CreateRenderer(gWin, -1, SDL_RENDERER_ACCELERATED|SDL_RENDERER_PRESENTVSYNC );
  63. SDL_SetRelativeMouseMode(SDL_TRUE);
  64. if( SDL_NumJoysticks() < 1 )
  65. {
  66. printf( "Warning: No joysticks connected!\n" );
  67. }
  68. else
  69. {
  70. gGameController = SDL_JoystickOpen( 0 );
  71. if( gGameController == NULL )
  72. {
  73. printf( "Warning: Unable to open game controller! SDL Error: %s\n", SDL_GetError() );
  74. }
  75. }
  76. TTF_Init();
  77. }
  78. return(iret);
  79. }
  80.  
  81. void vDestroyAll( void )
  82. {
  83. SDL_DestroyTexture(gSpriteSheet);
  84. SDL_DestroyRenderer(gRenderer);
  85. SDL_DestroyWindow(gWin);
  86. }
  87.  
  88. int iLoadSpriteSheet( char *sheet )
  89. {
  90. int iret = 0;
  91.  
  92. if ( gSpriteSheet == NULL )
  93. {
  94. if ( gRenderer != NULL )
  95. {
  96. gSpriteSheet = IMG_LoadTexture(gRenderer,sheet);
  97. }
  98. else
  99. {
  100. iret = -1;
  101. }
  102. }
  103. else
  104. {
  105. iret = -1;
  106. }
  107. return(iret);
  108. }
  109.  
  110. int iDrawSprite( int inum, SDL_Rect *dest )
  111. {
  112. SDL_Rect src;
  113. int iret = 0;
  114.  
  115. src.y = ((int)inum/8)*SHEIGHT;
  116. src.x = (inum%8)*SWIDTH;
  117. src.w = SWIDTH;
  118. src.h = SHEIGHT;
  119.  
  120. if ( gSpriteSheet != NULL && inum < 64 )
  121. {
  122. SDL_RenderCopy(gRenderer, gSpriteSheet, &src, dest);
  123. }
  124. else
  125. {
  126. iret = -1;
  127. }
  128. return(iret);
  129. }
  130.  
  131. int iLoadLayer( char *filelayer )
  132. {
  133. FILE *file;
  134. char slayer[10000];
  135. char num[10];
  136. int icnt = 0;
  137. char *ptr1, *ptr2;
  138.  
  139. file = fopen(filelayer,"rb");
  140. fread(slayer,9999,1,file);
  141. fclose(file);
  142. ptr2 = slayer;
  143. if ( ( ptr1 = strstr(ptr2,"|") ) != NULL )
  144. {
  145. strncpy(gSpriteSheetImg,ptr2,(int)(ptr1-ptr2));
  146. gSpriteSheetImg[(int)(ptr1-ptr2)] = 0;
  147. }
  148. while( icnt < 1296 )
  149. {
  150. ++ptr1;
  151. ptr2 = ptr1;
  152. ptr1 = strstr(ptr2,"|");
  153. strncpy(num,ptr2,(int)(ptr1-ptr2));
  154. num[(int)(ptr1-ptr2)] = 0;
  155. gLayerMap[icnt] = atoi(num);
  156. icnt++;
  157. }
  158. }
  159.  
  160. int main (int argc, char *argv[])
  161. {
  162. FILE *file;
  163. SDL_Rect dest,dest2,fs;
  164. Sint16 x_move, y_move;
  165. const int JOYSTICK_DEAD_ZONE = 8000;
  166. int xx = 0;
  167. int yy = 0;
  168. int quit = 0;
  169. int spritenum = 0;
  170. int i = 0;
  171. int arg = 0;
  172. int tmp;
  173. int atot = 0;
  174. int swidth;
  175. int sheight;
  176.  
  177. gSpriteSheetImg[0] = 0;
  178. gSpriteLayerFile[0] = 0;
  179. dest.x = 80;
  180. dest.y = 80;
  181. dest.w = 40;
  182. dest.h = 40;
  183. dest2.x = 0;
  184. dest2.y = 0;
  185. dest2.w = 40;
  186. dest2.h = 40;
  187. fs.x = 0;
  188. fs.y = 0;
  189. fs.w = 0;
  190. fs.h = 0;
  191.  
  192. if ( iInitAll() == 0 )
  193. {
  194. vGetScreenSize(&fs.w,&fs.h);
  195. SDL_SetRenderDrawColor(gRenderer, 30, 30, 200, 255);
  196. while ( arg < argc )
  197. {
  198. if ( strcmp(argv[arg],"-load") == 0 )
  199. {
  200. if ( (arg+1) < argc )
  201. {
  202. strcpy(gSpriteLayerFile,argv[arg+1]);
  203. iLoadLayer(argv[arg+1]);
  204. }
  205. }
  206. if ( strcmp(argv[arg],"-i") == 0 )
  207. {
  208. if ( (arg+1) < argc )
  209. {
  210. strcpy(gSpriteSheetImg,argv[arg+1]);
  211. }
  212. }
  213. if ( strcmp(argv[arg],"-l") == 0 )
  214. {
  215. if ( (arg+1) < argc )
  216. {
  217. strcpy(gSpriteLayerFile,argv[arg+1]);
  218. }
  219. }
  220. arg++;
  221. }
  222.  
  223. if ( gSpriteSheetImg[0] == 0 )
  224. {
  225. printf("Error loading image\n");
  226. exit(1);
  227. }
  228.  
  229. if ( gSpriteLayerFile[0] == 0 )
  230. {
  231. strcpy(gSpriteLayerFile,"default.lay0");
  232. }
  233.  
  234. if ( iLoadSpriteSheet(gSpriteSheetImg) != 0 )
  235. {
  236. printf( "Warning: Unable to open sprite sheet! SDL Error: %s\n", SDL_GetError() );
  237. }
  238.  
  239. while(quit==0)
  240. {
  241. while( SDL_PollEvent( &gEvent ) != 0 )
  242. {
  243. if( gEvent.type == SDL_KEYDOWN )
  244. {
  245. switch (gEvent.key.keysym.sym)
  246. {
  247. case SDLK_LEFT: xx = -1; break;
  248. case SDLK_RIGHT: xx = 1; break;
  249. case SDLK_UP: yy = -1; break;
  250. case SDLK_DOWN: yy = 1; break;
  251. case SDLK_PAGEUP:
  252. spritenum++;
  253. if ( spritenum == 64 )
  254. {
  255. spritenum = 0;
  256. }
  257. break;
  258. case SDLK_PAGEDOWN:
  259. spritenum--;
  260. if ( spritenum == -1 )
  261. {
  262. spritenum = 63;
  263. }
  264. break;
  265. case SDLK_q:
  266. quit = 1;
  267. i = 0;
  268. file = fopen(gSpriteLayerFile,"wb");
  269. fprintf(file,"%s|",gSpriteSheetImg);
  270. while( i < 1296 )
  271. {
  272. fprintf(file,"%d|",gLayerMap[i]);
  273. i++;
  274. }
  275. fclose(file);
  276. break;
  277. case SDLK_s:
  278. tmp = ((int)(dest.y/dest.h)*48)+((int)(dest.x/dest.w));
  279. gLayerMap[tmp] = spritenum;
  280. break;
  281. }
  282. if ( xx == 1 )
  283. {
  284. dest.x += dest.w;
  285. xx=0;
  286. }
  287. else if ( xx == -1 )
  288. {
  289. dest.x -= dest.w;
  290. xx=0;
  291. }
  292. if ( yy == 1 )
  293. {
  294. dest.y += dest.h;
  295. yy=0;
  296. }
  297. else if ( yy == -1 )
  298. {
  299. dest.y -= dest.h;
  300. yy=0;
  301. }
  302. }
  303. if( gEvent.type == SDL_JOYBUTTONDOWN )
  304. {
  305. if ( gEvent.jbutton.button == 0 )
  306. {
  307. spritenum++;
  308. if ( spritenum == 64 )
  309. {
  310. spritenum = 0;
  311. }
  312. }
  313. if ( gEvent.jbutton.button == 1 )
  314. {
  315. tmp = ((int)(dest.y/dest.h)*48)+((int)(dest.x/dest.w));
  316. gLayerMap[tmp] = spritenum;
  317. }
  318. if ( gEvent.jbutton.button == 2 )
  319. {
  320. spritenum--;
  321. if ( spritenum == -1 )
  322. {
  323. spritenum = 63;
  324. }
  325. }
  326. if ( gEvent.jbutton.button == 3 )
  327. {
  328. quit = 1;
  329. i = 0;
  330. file = fopen(gSpriteLayerFile,"wb");
  331. fprintf(file,"%s|",gSpriteSheetImg);
  332. while( i < 1296 )
  333. {
  334. fprintf(file,"%d|",gLayerMap[i]);
  335. i++;
  336. }
  337. fclose(file);
  338. }
  339. }
  340. else if( gEvent.type == SDL_JOYAXISMOTION )
  341. {
  342. x_move = SDL_JoystickGetAxis(gGameController, 3);
  343. y_move = SDL_JoystickGetAxis(gGameController, 0);
  344.  
  345. if( y_move < -JOYSTICK_DEAD_ZONE )
  346. {
  347. yy = 1;
  348. }
  349. else if( y_move > JOYSTICK_DEAD_ZONE )
  350. {
  351. yy = -1;
  352. }
  353. else
  354. {
  355. yy = 0;
  356. }
  357. if( x_move < -JOYSTICK_DEAD_ZONE )
  358. {
  359. xx = -1;
  360. }
  361. else if( x_move > JOYSTICK_DEAD_ZONE )
  362. {
  363. xx = 1;
  364. }
  365. else
  366. {
  367. xx = 0;
  368. }
  369.  
  370. if ( xx == 1 )
  371. {
  372. dest.x += dest.w;
  373. xx=0;
  374. }
  375. else if ( xx == -1 )
  376. {
  377. dest.x -= dest.w;
  378. xx=0;
  379. }
  380. if ( yy == 1 )
  381. {
  382. dest.y += dest.h;
  383. yy=0;
  384. }
  385. else if ( yy == -1 )
  386. {
  387. dest.y -= dest.h;
  388. yy=0;
  389. }
  390. }
  391. }
  392.  
  393. SDL_RenderClear(gRenderer);
  394. i = 0;
  395. while ( i < 1296 )
  396. {
  397. if ( gLayerMap[i] > -1 )
  398. {
  399. dest2.x = (int)(i%48)*dest2.w;
  400. dest2.y = (int)(i/48)*dest2.h;
  401. iDrawSprite(gLayerMap[i],&dest2);
  402. }
  403. i++;
  404. }
  405. if ( iDrawSprite(spritenum,&dest) != 0 )
  406. {
  407. printf( "Warning: Unable to open draw sprite! SDL Error: %s\n", SDL_GetError() );
  408. }
  409. SDL_RenderPresent(gRenderer);
  410. }
  411.  
  412. vDestroyAll();
  413. }
  414. return 0;
  415. }
Advertisement
Add Comment
Please, Sign In to add comment