From ffeccc295e3f51b17bda699f61f91a767f07051f Mon Sep 17 00:00:00 2001 From: Nathan Date: Fri, 15 Sep 2017 09:57:20 -0500 Subject: [PATCH] conversion to sdl 1.2 + sdl_gfx Former-commit-id: 3a1fbe325ae694ba81d61cfdc13eddaeb295b7b8 Former-commit-id: 23c123951633ae32750b5cb3b94b9e623d31b116 --- sdl1090/draw.c | 158 +++++++++++++++++++------------- sdl1090/view1090.REMOVED.git-id | 2 +- 2 files changed, 97 insertions(+), 63 deletions(-) diff --git a/sdl1090/draw.c b/sdl1090/draw.c index 964d5df..21e0103 100644 --- a/sdl1090/draw.c +++ b/sdl1090/draw.c @@ -5,6 +5,10 @@ extern void drawString(char *, int, int, TTF_Font *, SDL_Color); +#define LOGPROJECTION 1 + +#define MAXDIST 1000.0 + void CROSSVP(double *v, double *u, double *w) { v[0] = u[1]*w[2] - u[2]*(w)[1]; @@ -12,22 +16,43 @@ void CROSSVP(double *v, double *u, double *w) v[2] = u[0]*w[1] - u[1]*(w)[0]; } -/* -SDL_Point screenCoords(double dx, double dy) { - SDL_Point out; - out.x = round(320.0 * (0.5 + (dx / 64.0))); - out.y = round(240.0 * (0.5 + (dy / 48.0))); - - return out; +SDL_Color setColor(uint8_t r, uint8_t g, uint8_t b) { + SDL_Color out; + out.r = r; + out.g = g; + out.b = b; + return out; } -*/ + +int screenDist(double d) { + if(LOGPROJECTION) { + return round((double)SCREEN_WIDTH * 0.5 * log(1.0+d) / log(1.0+MAXDIST)); + } else { + return round((double)SCREEN_WIDTH * 0.5 * d / MAXDIST); + } +} + +void screenCoords(int *outX, int *outY, double dx, double dy) { + *outX = (SCREEN_WIDTH>>1) + screenDist(dx); + *outY = (SCREEN_HEIGHT>>1) + screenDist(dy); +} + +int outOfBounds(int x, int y) { + if(x < 0 || x >= SCREEN_WIDTH || y < 0 || y >= SCREEN_HEIGHT ) { + return 1; + } else { + return 0; + } +} + void drawPlaneHeading(double dx, double dy, double heading, int signal, char *flight) { - /* - SDL_Point center = screenCoords(dx,dy); + //int planeWidth = 2; + int x, y; + screenCoords(&x, &y, dx, dy); - if(center.x < 0 || center.x >= 320 || center.y < 0 || center.y >= 240 ) { + if(outOfBounds(x,y)) { return; } @@ -35,10 +60,12 @@ void drawPlaneHeading(double dx, double dy, double heading, int signal, char *fl signal = 127; } + SDL_Color planeColor; + if(signal < 0) { - SDL_SetRenderDrawColor(game.renderer, 96, 96, 96, SDL_ALPHA_OPAQUE); + planeColor = setColor(96, 96, 96); } else { - SDL_SetRenderDrawColor(game.renderer, parula[signal][0], parula[signal][1], parula[signal][2], SDL_ALPHA_OPAQUE); + planeColor = setColor(parula[signal][0], parula[signal][1], parula[signal][2]); } double body = 8.0; @@ -60,44 +87,46 @@ void drawPlaneHeading(double dx, double dy, double heading, int signal, char *fl //body - x1 = center.x + round(-body*vec[0]); - y1 = center.y + round(-body*vec[1]); - x2 = center.x + round(body*vec[0]); - y2 = center.y + round(body*vec[1]); + x1 = x + round(-body*vec[0]); + y1 = y + round(-body*vec[1]); + x2 = x + round(body*vec[0]); + y2 = y + round(body*vec[1]); - SDL_RenderDrawLine(game.renderer, x1, y1, x2, y2); + //thickLineRGBA(game.screen,x1,y1,x2,y2,planeWidth,planeColor.r,planeColor.g,planeColor.b,SDL_ALPHA_OPAQUE); + aalineRGBA(game.screen,x1,y1,x2,y2,planeColor.r,planeColor.g,planeColor.b,SDL_ALPHA_OPAQUE); //wing - x1 = center.x + round(-wing*out[0]); - y1 = center.y + round(-wing*out[1]); - x2 = center.x + round(wing*out[0]); - y2 = center.y + round(wing*out[1]); + x1 = x + round(-wing*out[0]); + y1 = y + round(-wing*out[1]); + x2 = x + round(wing*out[0]); + y2 = y + round(wing*out[1]); - SDL_RenderDrawLine(game.renderer, x1, y1, x2, y2); + //thickLineRGBA(game.screen,x1,y1,x2,y2,planeWidth,planeColor.r,planeColor.g,planeColor.b,SDL_ALPHA_OPAQUE); + aalineRGBA(game.screen,x1,y1,x2,y2,planeColor.r,planeColor.g,planeColor.b,SDL_ALPHA_OPAQUE); //tail - x1 = center.x + round(-body*vec[0]) + round(-tail*out[0]); - y1 = center.y + round(-body*vec[1]) + round(-tail*out[1]); - x2 = center.x + round(-body*vec[0]) + round(tail*out[0]); - y2 = center.y + round(-body*vec[1]) + round(tail*out[1]); + x1 = x + round(-body*vec[0]) + round(-tail*out[0]); + y1 = y + round(-body*vec[1]) + round(-tail*out[1]); + x2 = x + round(-body*vec[0]) + round(tail*out[0]); + y2 = y + round(-body*vec[1]) + round(tail*out[1]); - SDL_RenderDrawLine(game.renderer, x1, y1, x2, y2); + //thickLineRGBA(game.screen,x1,y1,x2,y2,planeWidth,planeColor.r,planeColor.g,planeColor.b,SDL_ALPHA_OPAQUE); + aalineRGBA(game.screen,x1,y1,x2,y2,planeColor.r,planeColor.g,planeColor.b,SDL_ALPHA_OPAQUE); - if(flight) { - SDL_Color color = { 200, 200, 200 , 255}; - drawString(flight, center.x + 10, center.y + 10, game.font, color); - } - */ + if(strlen(flight)) { + drawString(flight, x + 10, y + 10, game.font, planeColor); + } } void drawPlane(double dx, double dy, int signal) { -/* - SDL_Point center = screenCoords(dx,dy); - if(center.x < 0 || center.x >= 320 || center.y < 0 || center.y >= 240 ) { + int x, y; + screenCoords(&x, &y, dx, dy); + + if(outOfBounds(x,y)) { return; } @@ -105,25 +134,25 @@ void drawPlane(double dx, double dy, int signal) signal = 127; } + SDL_Color planeColor; + if(signal < 0) { - SDL_SetRenderDrawColor(game.renderer, 96, 96, 96, SDL_ALPHA_OPAQUE); + planeColor = setColor(96, 96, 96); } else { - SDL_SetRenderDrawColor(game.renderer, parula[signal][0], parula[signal][1], parula[signal][2], SDL_ALPHA_OPAQUE); + planeColor = setColor(parula[signal][0], parula[signal][1], parula[signal][2]); } int length = 3.0; - SDL_RenderDrawLine(game.renderer, center.x-length , center.y , center.x+length , center.y ); - SDL_RenderDrawLine(game.renderer, center.x , center.y-length , center.x , center.y+length ); - */ + rectangleRGBA (game.screen, x - length, y - length, x+length, y + length, planeColor.r, planeColor.g, planeColor.b, SDL_ALPHA_OPAQUE); } void drawTrail(double *oldDx, double *oldDy, time_t * oldSeen, int idx) { - /* + int currentIdx, prevIdx; - SDL_Point current, prev; + int currentX, currentY, prevX, prevY; time_t now = time(NULL); @@ -141,17 +170,17 @@ void drawTrail(double *oldDx, double *oldDy, time_t * oldSeen, int idx) { continue; } - current = screenCoords(oldDx[currentIdx], oldDy[currentIdx]); - prev = screenCoords(oldDx[prevIdx], oldDy[prevIdx]); + screenCoords(¤tX, ¤tY, oldDx[currentIdx], oldDy[currentIdx]); - if(current.x < 0 || current.x >= 320 || current.y < 0 || current.y >= 240 ) { - continue; + screenCoords(&prevX, &prevY, oldDx[prevIdx], oldDy[prevIdx]); + + if(outOfBounds(currentX,currentY)) { + return; } - if(prev.x < 0 || prev.x >= 320 || prev.y < 0 || prev.y >= 240 ) { - continue; - } - + if(outOfBounds(prevX,prevY)) { + return; + } double age = 1.0 - (double)(now - oldSeen[currentIdx]) / MODES_INTERACTIVE_TRAIL_TTL; @@ -161,22 +190,27 @@ void drawTrail(double *oldDx, double *oldDy, time_t * oldSeen, int idx) { uint8_t colorVal = (uint8_t)floor(127.0 * age); - SDL_SetRenderDrawColor(game.renderer, colorVal, colorVal, colorVal, SDL_ALPHA_OPAQUE); - - SDL_RenderDrawLine(game.renderer, prev.x, prev.y, current.x, current.y); - - // SDL_SetRenderDrawColor(game.renderer, 255,0,0, SDL_ALPHA_OPAQUE); - - // SDL_Rect spot = {.x = current.x-1, .y = current.y-1, .w = 2, .h = 2}; - // SDL_RenderFillRect(game.renderer, &spot); - }*/ + aalineRGBA(game.screen, prevX, prevY, currentX, currentY,colorVal, colorVal, colorVal, SDL_ALPHA_OPAQUE); + } } void drawGrid() { - hlineRGBA (game.screen, 0, 320, 120, 40, 40, 40, SDL_ALPHA_OPAQUE); - vlineRGBA (game.screen, 160, 0, 240, 40, 40, 40, SDL_ALPHA_OPAQUE); + int p1km = screenDist(1.0); + int p10km = screenDist(10.0); + int p100km = screenDist(100.0); + + hlineRGBA (game.screen, 0, SCREEN_WIDTH, SCREEN_HEIGHT>>1, 127, 127, 127, SDL_ALPHA_OPAQUE); + vlineRGBA (game.screen, SCREEN_WIDTH>>1, 0, SCREEN_HEIGHT, 127, 127, 127, SDL_ALPHA_OPAQUE); + + aacircleRGBA (game.screen, SCREEN_WIDTH>>1, SCREEN_HEIGHT>>1, p1km, 64, 64, 64, SDL_ALPHA_OPAQUE); + aacircleRGBA (game.screen, SCREEN_WIDTH>>1, SCREEN_HEIGHT>>1, p10km, 64, 64, 64, SDL_ALPHA_OPAQUE); + aacircleRGBA (game.screen, SCREEN_WIDTH>>1, SCREEN_HEIGHT>>1, p100km, 64, 64, 64, SDL_ALPHA_OPAQUE); + + drawString("1km", (SCREEN_WIDTH>>1) + p1km + 5, (SCREEN_HEIGHT>>1) + 5, game.font, setColor(64,64,64)); + drawString("10km", (SCREEN_WIDTH>>1) + p10km + 5, (SCREEN_HEIGHT>>1) + 5, game.font, setColor(64,64,64)); + drawString("100km", (SCREEN_WIDTH>>1) + p100km + 5, (SCREEN_HEIGHT>>1) + 5, game.font, setColor(64,64,64)); } diff --git a/sdl1090/view1090.REMOVED.git-id b/sdl1090/view1090.REMOVED.git-id index f866507..d86e759 100644 --- a/sdl1090/view1090.REMOVED.git-id +++ b/sdl1090/view1090.REMOVED.git-id @@ -1 +1 @@ -16533af5cceadbea2c10e6425e91d0560cabdbd8 \ No newline at end of file +dd9da3d4441175ab67ca8209c4dc330f48cf6590 \ No newline at end of file