trails working
Former-commit-id: 5cf325dc734232ec38cfc4d2ea48734abc77d40e Former-commit-id: 5897876ba869839b7250410c814e1200e7c05e5d
This commit is contained in:
parent
3d533699a5
commit
5d11256a6a
|
@ -1,3 +1,4 @@
|
|||
#include "dump1090.h"
|
||||
#include "draw.h"
|
||||
#include "parula.h"
|
||||
|
||||
|
@ -32,7 +33,11 @@ void drawPlaneHeading(double dx, double dy, double heading, int signal, char *fl
|
|||
signal = 127;
|
||||
}
|
||||
|
||||
SDL_SetRenderDrawColor(game.renderer, parula[signal][0], parula[signal][1], parula[signal][2], SDL_ALPHA_OPAQUE);
|
||||
if(signal < 0) {
|
||||
SDL_SetRenderDrawColor(game.renderer, 96, 96, 96, SDL_ALPHA_OPAQUE);
|
||||
} else {
|
||||
SDL_SetRenderDrawColor(game.renderer, parula[signal][0], parula[signal][1], parula[signal][2], SDL_ALPHA_OPAQUE);
|
||||
}
|
||||
|
||||
double body = 8.0;
|
||||
double wing = 6.0;
|
||||
|
@ -78,9 +83,10 @@ void drawPlaneHeading(double dx, double dy, double heading, int signal, char *fl
|
|||
|
||||
SDL_RenderDrawLine(game.renderer, x1, y1, x2, y2);
|
||||
|
||||
SDL_Color color = { parula[signal][0], parula[signal][1], parula[signal][2], 255};
|
||||
|
||||
drawString(flight, center.x + 10, center.y + 10, game.font, color);
|
||||
if(flight) {
|
||||
SDL_Color color = { 200, 200, 200 , 255};
|
||||
drawString(flight, center.x + 10, center.y + 10, game.font, color);
|
||||
}
|
||||
}
|
||||
|
||||
void drawPlane(double dx, double dy, int signal)
|
||||
|
@ -96,7 +102,11 @@ void drawPlane(double dx, double dy, int signal)
|
|||
signal = 127;
|
||||
}
|
||||
|
||||
SDL_SetRenderDrawColor(game.renderer, parula[signal][0], parula[signal][1], parula[signal][2], SDL_ALPHA_OPAQUE);
|
||||
if(signal < 0) {
|
||||
SDL_SetRenderDrawColor(game.renderer, 96, 96, 96, SDL_ALPHA_OPAQUE);
|
||||
} else {
|
||||
SDL_SetRenderDrawColor(game.renderer, parula[signal][0], parula[signal][1], parula[signal][2], SDL_ALPHA_OPAQUE);
|
||||
}
|
||||
|
||||
int length = 3.0;
|
||||
|
||||
|
@ -104,21 +114,26 @@ void drawPlane(double dx, double dy, int signal)
|
|||
SDL_RenderDrawLine(game.renderer, center.x , center.y-length , center.x , center.y+length );
|
||||
}
|
||||
|
||||
void drawTrail(double *oldDx, double *oldDy, int idx) {
|
||||
int currentIdx, prevIdx;
|
||||
void drawTrail(double *oldDx, double *oldDy, time_t * oldSeen, int idx) {
|
||||
int currentIdx, prevIdx;
|
||||
|
||||
SDL_Point current, prev;
|
||||
SDL_Point current, prev;
|
||||
|
||||
for(int i=1; i < 32; i++) {
|
||||
currentIdx = (idx - (i - 1)) % 32;
|
||||
prevIdx = (idx - (i - 2)) % 32;
|
||||
time_t now = time(NULL);
|
||||
|
||||
if(oldDx[currentIdx] == 0 && oldDy[currentIdx] == 0) {
|
||||
for(int i=0; i < (MODES_INTERACTIVE_TRAIL_LENGTH - 1); i++) {
|
||||
currentIdx = (idx - i) % MODES_INTERACTIVE_TRAIL_LENGTH;
|
||||
currentIdx = currentIdx < 0 ? currentIdx + MODES_INTERACTIVE_TRAIL_LENGTH : currentIdx;
|
||||
prevIdx = (idx - (i + 1)) % MODES_INTERACTIVE_TRAIL_LENGTH;
|
||||
prevIdx = prevIdx < 0 ? prevIdx + MODES_INTERACTIVE_TRAIL_LENGTH : prevIdx;
|
||||
|
||||
if(oldDx[currentIdx] == 0 || oldDy[currentIdx] == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
//SDL_SetRenderDrawColor(game.renderer, (i<<3)-1, (i<<3)-1, (i<<3)-1, SDL_ALPHA_OPAQUE);
|
||||
SDL_SetRenderDrawColor(game.renderer, 0,60,60, SDL_ALPHA_OPAQUE);
|
||||
if(oldDx[prevIdx] == 0 || oldDy[prevIdx] == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
current = screenCoords(oldDx[currentIdx], oldDy[currentIdx]);
|
||||
prev = screenCoords(oldDx[prevIdx], oldDy[prevIdx]);
|
||||
|
@ -131,12 +146,23 @@ void drawTrail(double *oldDx, double *oldDy, int idx) {
|
|||
continue;
|
||||
}
|
||||
|
||||
|
||||
double age = 1.0 - (double)(now - oldSeen[currentIdx]) / MODES_INTERACTIVE_TRAIL_TTL;
|
||||
|
||||
if(age < 0) {
|
||||
age = 0;
|
||||
}
|
||||
|
||||
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_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);
|
||||
// SDL_Rect spot = {.x = current.x-1, .y = current.y-1, .w = 2, .h = 2};
|
||||
// SDL_RenderFillRect(game.renderer, &spot);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -164,6 +164,10 @@
|
|||
#define MODES_INTERACTIVE_ROWS 22 // Rows on screen
|
||||
#define MODES_INTERACTIVE_DELETE_TTL 300 // Delete from the list after 300 seconds
|
||||
#define MODES_INTERACTIVE_DISPLAY_TTL 60 // Delete from display after 60 seconds
|
||||
#define MODES_INTERACTIVE_DISPLAY_ACTIVE 30 // Gray out after 30 seconds
|
||||
#define MODES_INTERACTIVE_TRAIL_LENGTH 120 // entries to keep in trail
|
||||
#define MODES_INTERACTIVE_TRAIL_TTL_STEP 2 // minimum time between entries
|
||||
#define MODES_INTERACTIVE_TRAIL_TTL 240.0 // # seconds to fade out
|
||||
|
||||
#define MODES_NET_HEARTBEAT_RATE 900 // Each block is approx 65mS - default is > 1 min
|
||||
|
||||
|
@ -224,7 +228,8 @@ struct aircraft {
|
|||
uint64_t even_cprtime;
|
||||
double lat, lon; // Coordinated obtained from CPR encoded data
|
||||
double dx, dy; // distance in km
|
||||
double oldDx[32], oldDy[32]; // position history
|
||||
double oldDx[MODES_INTERACTIVE_TRAIL_LENGTH], oldDy[MODES_INTERACTIVE_TRAIL_LENGTH]; // position history
|
||||
time_t oldSeen[MODES_INTERACTIVE_TRAIL_LENGTH];// position time
|
||||
uint8_t oldIdx; // index for ring buffer
|
||||
int bFlags; // Flags related to valid fields in this structure
|
||||
struct aircraft *next; // Next aircraft in our linked list
|
||||
|
|
|
@ -32,12 +32,12 @@
|
|||
#include "structs.h"
|
||||
|
||||
Game game;
|
||||
|
||||
extern void drawPlaneHeading(double , double , double, int, char *);
|
||||
extern void drawPlane(double , double, int);
|
||||
extern void drawTrail(double *, double *, int);
|
||||
extern void drawTrail(double *, double *, time_t *, int);
|
||||
extern void drawGrid();
|
||||
|
||||
|
||||
//
|
||||
// ============================= Utility functions ==========================
|
||||
//
|
||||
|
@ -393,10 +393,14 @@ struct aircraft *interactiveReceiveData(struct modesMessage *mm) {
|
|||
a->dx = 6371.0 * dLon * M_PI / 180.0f * cos(((a->lat+***REMOVED***)/2.0f) * M_PI / 180.0f);
|
||||
a->dy = 6371.0 * dLat * M_PI / 180.0f;
|
||||
|
||||
a->oldDx[a->oldIdx] = a->dx;
|
||||
a->oldDy[a->oldIdx] = a->dy;
|
||||
if(time(NULL) - a->oldSeen[a->oldIdx] > MODES_INTERACTIVE_TRAIL_TTL_STEP) {
|
||||
a->oldIdx = (a->oldIdx+1) % 32;
|
||||
|
||||
a->oldIdx = (a->oldIdx+1) % 32;
|
||||
a->oldDx[a->oldIdx] = a->dx;
|
||||
a->oldDy[a->oldIdx] = a->dy;
|
||||
|
||||
a->oldSeen[a->oldIdx] = a->seen;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -536,14 +540,21 @@ void interactiveShowData(void) {
|
|||
snprintf(strLat, 8,"%7.03f", a->dx);
|
||||
snprintf(strLon, 9,"%8.03f", a->dy);
|
||||
|
||||
|
||||
if(MODES_ACFLAGS_HEADING_VALID) {
|
||||
drawPlaneHeading(a->dx, a->dy,a->track, signalAverage, a->flight);
|
||||
drawTrail(a->oldDx, a->oldDy, a->oldSeen, a->oldIdx);
|
||||
|
||||
int colorIdx;
|
||||
if((int)(now - a->seen) > MODES_INTERACTIVE_DISPLAY_ACTIVE) {
|
||||
colorIdx = -1;
|
||||
} else {
|
||||
drawPlane(a->dx, a->dy, signalAverage);
|
||||
colorIdx = signalAverage;
|
||||
}
|
||||
|
||||
if(MODES_ACFLAGS_HEADING_VALID) {
|
||||
drawPlaneHeading(a->dx, a->dy,a->track, colorIdx, a->flight);
|
||||
} else {
|
||||
drawPlane(a->dx, a->dy, colorIdx);
|
||||
}
|
||||
|
||||
drawTrail(a->oldDx, a->oldDy, a->oldIdx);
|
||||
}
|
||||
|
||||
if (a->bFlags & MODES_ACFLAGS_AOG) {
|
||||
|
|
|
@ -1 +1 @@
|
|||
1efd85596b2ba325841ccd3511d70639b9feaec8
|
||||
a6a9a37e655d982e0f80b7465ae153997cf598a3
|
Loading…
Reference in a new issue