frontend.c (2417B)
1 #include <stdint.h> 2 #include <stdlib.h> 3 4 #include <SDL.h> 5 #include "common.h" 6 7 uint16_t WWidth = 300; 8 uint16_t WHeight = 300; 9 10 SDL_Renderer* Renderer; 11 SDL_Window* Window; 12 SDL_Surface* MainSurface; 13 14 SDL_Color GamePalette[16]; 15 16 uint32_t Running; 17 18 void InitSDL() 19 { 20 21 SDL_Init(SDL_INIT_VIDEO); 22 Window = SDL_CreateWindow( "Honey", 23 SDL_WINDOWPOS_UNDEFINED, 24 SDL_WINDOWPOS_UNDEFINED, 25 WWidth, WHeight, 0 ); 26 SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); 27 28 Renderer = SDL_CreateRenderer( Window, -1, 29 SDL_RENDERER_ACCELERATED ); 30 } 31 32 void InitScreen() 33 { 34 uint8_t* pixeldata = GetPixBuf(); //function in render.c 35 uint32_t* palettedata = GetPalette(); 36 37 MainSurface = SDL_CreateRGBSurfaceWithFormatFrom( pixeldata, 38 XREZ, 39 YREZ, 40 8, 41 XREZ, 42 SDL_PIXELFORMAT_INDEX8 ); 43 for (int i = 0; i < 16; ++i) 44 { 45 uint32_t col = *(palettedata + i); 46 uint32_t blue = (col & 0xff) * 257; 47 uint32_t green = ((col >> 8) & 0xff) * 257; 48 uint32_t red = ((col >> 16) & 0xff) * 257; 49 50 GamePalette[i].r = red; 51 GamePalette[i].g = green; 52 GamePalette[i].b = blue; 53 } 54 55 SDL_SetPaletteColors( MainSurface->format->palette, 56 GamePalette, 57 0, 58 16 ); 59 } 60 61 void HandleInput() 62 { 63 SDL_Event event; 64 65 while (SDL_PollEvent(&event)) 66 { 67 if (event.type == SDL_QUIT) 68 { 69 Running = 0; 70 } 71 } 72 73 //get mouse coordinates relative to top left of window 74 int mx, my; 75 uint32_t rx, ry; 76 uint32_t mbuttons; 77 mbuttons = SDL_GetMouseState(&mx, &my); 78 79 if ((mbuttons & SDL_BUTTON_LMASK) != 0) 80 { 81 Mouse1Pressed(); 82 } 83 84 if ((mbuttons & SDL_BUTTON_RMASK) != 0) 85 { 86 Mouse2Pressed(); 87 } 88 89 //convert to resolution coordinates 90 rx = (uint32_t)(mx * XREZ / WWidth); 91 ry = (uint32_t)(my * YREZ / WHeight); 92 93 UpdateCursor(rx, ry); 94 } 95 96 void PrepareScreen() 97 { 98 SDL_SetRenderDrawColor(Renderer, 96, 128, 255, 255); 99 SDL_RenderClear(Renderer); 100 } 101 102 103 void PresentScreen() 104 { 105 SDL_Texture* buftex; 106 107 108 buftex = SDL_CreateTextureFromSurface( Renderer, 109 MainSurface ); 110 SDL_RenderCopy( Renderer, buftex, 111 NULL, NULL); 112 SDL_DestroyTexture(buftex); 113 SDL_RenderPresent(Renderer); 114 } 115 116 void Cleanup() 117 { 118 SDL_FreeSurface(MainSurface); 119 SDL_Quit(); 120 } 121 122 123 int main() 124 { 125 Running = 1; 126 127 InitSDL(); 128 InitScreen(); 129 130 HoneyInit(); 131 132 while (Running == 1) 133 { 134 PrepareScreen(); 135 HandleInput(); 136 137 HoneyMain(); 138 139 PresentScreen(); 140 SDL_Delay(16); 141 } 142 143 Cleanup(); 144 return 0; 145 }