honey

very old unfinished project. tracking so i dont lose it
git clone git://moonbender.net/honey
Log | Files | Refs | README

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 }