more c cleanup and label physics adjustments
Former-commit-id: 0915c6c04f958bbf233b02981320be626aae7d31 Former-commit-id: d63cf3baf92d2b35e462b324ce47bea8225ed39a
This commit is contained in:
parent
9b5cab173e
commit
e78f3c4e0f
10
Aircraft.cpp
10
Aircraft.cpp
|
@ -1,11 +1,11 @@
|
||||||
#include "Aircraft.h"
|
#include "Aircraft.h"
|
||||||
|
|
||||||
|
#include "dump1090.h" //for struct aircaft
|
||||||
|
|
||||||
|
|
||||||
Aircraft::Aircraft(struct aircraft *a) {
|
Aircraft::Aircraft(struct aircraft *a) {
|
||||||
addr = a->addr;
|
addr = a->addr;
|
||||||
created = 0;
|
created = 0;
|
||||||
//oldIdx = 0;
|
|
||||||
prev_seen = 0;
|
prev_seen = 0;
|
||||||
|
|
||||||
x = 0;
|
x = 0;
|
||||||
|
@ -19,16 +19,8 @@ Aircraft::Aircraft(struct aircraft *a) {
|
||||||
doy = 0;
|
doy = 0;
|
||||||
ddox = 0;
|
ddox = 0;
|
||||||
ddoy = 0;
|
ddoy = 0;
|
||||||
|
|
||||||
// memset(oldLon, 0, sizeof(oldLon));
|
|
||||||
// memset(oldLat, 0, sizeof(oldLat));
|
|
||||||
// memset(oldHeading, 0, sizeof(oldHeading));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Aircraft::~Aircraft() {
|
Aircraft::~Aircraft() {
|
||||||
|
|
||||||
// free(oldLat);
|
|
||||||
// free(oldLon);
|
|
||||||
// free(oldHeading);
|
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "dump1090.h"
|
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#include "AircraftList.h"
|
#include "AircraftList.h"
|
||||||
#include "dump1090.h"
|
|
||||||
|
|
||||||
static uint64_t mstime(void) {
|
static uint64_t mstime(void) {
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "Aircraft.h"
|
#include "Aircraft.h"
|
||||||
|
|
||||||
|
#include "dump1090.h" //for Modes
|
||||||
|
|
||||||
class AircraftList {
|
class AircraftList {
|
||||||
public:
|
public:
|
||||||
Aircraft *head;
|
Aircraft *head;
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
#ifndef APPDATA_H
|
#ifndef APPDATA_H
|
||||||
#define APPDATA_H
|
#define APPDATA_H
|
||||||
|
|
||||||
#include "dump1090.h"
|
#include "view1090.h" //for Modes
|
||||||
#include "view1090.h"
|
|
||||||
|
|
||||||
#include "AircraftList.h"
|
#include "AircraftList.h"
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#include "view1090.h"
|
|
||||||
|
|
||||||
#include "Input.h"
|
#include "Input.h"
|
||||||
|
|
||||||
static uint64_t mstime(void) {
|
static uint64_t mstime(void) {
|
||||||
|
|
41
View.cpp
41
View.cpp
|
@ -1,5 +1,3 @@
|
||||||
#include "dump1090.h"
|
|
||||||
|
|
||||||
#include "SDL2/SDL2_rotozoom.h"
|
#include "SDL2/SDL2_rotozoom.h"
|
||||||
#include "SDL2/SDL2_gfxPrimitives.h"
|
#include "SDL2/SDL2_gfxPrimitives.h"
|
||||||
//color schemes
|
//color schemes
|
||||||
|
@ -855,6 +853,12 @@ void View::drawSelectedAircraftText(Aircraft *p) {
|
||||||
void View::resolveLabelConflicts() {
|
void View::resolveLabelConflicts() {
|
||||||
Aircraft *p = appData->aircraftList.head;
|
Aircraft *p = appData->aircraftList.head;
|
||||||
|
|
||||||
|
float label_force = 0.01f;
|
||||||
|
float plane_force = 0.01f;
|
||||||
|
float damping_force = 0.95f;
|
||||||
|
float spring_force = 0.02f;
|
||||||
|
float spring_length = 10.0f;
|
||||||
|
|
||||||
while(p) {
|
while(p) {
|
||||||
|
|
||||||
Aircraft *check_p = appData->aircraftList.head;
|
Aircraft *check_p = appData->aircraftList.head;
|
||||||
|
@ -868,14 +872,17 @@ void View::resolveLabelConflicts() {
|
||||||
//rectangleRGBA(renderer, p->x, p->y, p->x + p->w, p->y + p->h, 255,0,0, SDL_ALPHA_OPAQUE);
|
//rectangleRGBA(renderer, p->x, p->y, p->x + p->w, p->y + p->h, 255,0,0, SDL_ALPHA_OPAQUE);
|
||||||
//lineRGBA(renderer, p->cx, p->cy, p->x, p->y, 0,255,0, SDL_ALPHA_OPAQUE);
|
//lineRGBA(renderer, p->cx, p->cy, p->x, p->y, 0,255,0, SDL_ALPHA_OPAQUE);
|
||||||
|
|
||||||
//apply damping
|
p->ddox = 0;
|
||||||
|
p->ddoy = 0;
|
||||||
|
|
||||||
p->ddox -= 0.07f * p->dox;
|
float o_mag = sqrt(p->ox*p->ox + p->oy*p->oy);
|
||||||
p->ddoy -= 0.07f * p->doy;
|
|
||||||
|
|
||||||
//spring back to origin
|
//spring back to origin
|
||||||
p->ddox -= 0.005f * p->ox;
|
|
||||||
p->ddoy -= 0.005f * p->oy;
|
if(o_mag > 0) {
|
||||||
|
p->ddox -= p->ox / o_mag * spring_force * (o_mag - spring_length);
|
||||||
|
p->ddoy -= p->oy / o_mag * spring_force * (o_mag - spring_length);
|
||||||
|
}
|
||||||
|
|
||||||
// // //screen edge
|
// // //screen edge
|
||||||
|
|
||||||
|
@ -925,22 +932,22 @@ void View::resolveLabelConflicts() {
|
||||||
|
|
||||||
//left collision
|
//left collision
|
||||||
if(check_left > p_left && check_left < p_right) {
|
if(check_left > p_left && check_left < p_right) {
|
||||||
check_p->ddox -= 0.01f * (float)(check_left - p_right);
|
check_p->ddox -= label_force * (float)(check_left - p_right);
|
||||||
}
|
}
|
||||||
|
|
||||||
//right collision
|
//right collision
|
||||||
if(check_right > p_left && check_right < p_right) {
|
if(check_right > p_left && check_right < p_right) {
|
||||||
check_p->ddox -= 0.01f * (float)(check_right - p_left);
|
check_p->ddox -= label_force * (float)(check_right - p_left);
|
||||||
}
|
}
|
||||||
|
|
||||||
//top collision
|
//top collision
|
||||||
if(check_top > p_top && check_top < p_bottom) {
|
if(check_top > p_top && check_top < p_bottom) {
|
||||||
check_p->ddoy -= 0.01f * (float)(check_top - p_bottom);
|
check_p->ddoy -= label_force * (float)(check_top - p_bottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
//bottom collision
|
//bottom collision
|
||||||
if(check_bottom > p_top && check_bottom < p_bottom) {
|
if(check_bottom > p_top && check_bottom < p_bottom) {
|
||||||
check_p->ddoy -= 0.01f * (float)(check_bottom - p_top);
|
check_p->ddoy -= label_force * (float)(check_bottom - p_top);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
check_p = check_p -> next;
|
check_p = check_p -> next;
|
||||||
|
@ -950,8 +957,6 @@ void View::resolveLabelConflicts() {
|
||||||
|
|
||||||
//check against plane icons (include self)
|
//check against plane icons (include self)
|
||||||
|
|
||||||
float plane_force = 0.08f;
|
|
||||||
|
|
||||||
p_left = p->x - 5 * screen_uiscale;
|
p_left = p->x - 5 * screen_uiscale;
|
||||||
p_right = p->x + 5 * screen_uiscale;
|
p_right = p->x + 5 * screen_uiscale;
|
||||||
p_top = p->y - 5 * screen_uiscale;
|
p_top = p->y - 5 * screen_uiscale;
|
||||||
|
@ -1005,11 +1010,12 @@ void View::resolveLabelConflicts() {
|
||||||
p = appData->aircraftList.head;
|
p = appData->aircraftList.head;
|
||||||
|
|
||||||
while(p) {
|
while(p) {
|
||||||
//incorporate acceleration from label conflict resolution
|
|
||||||
|
|
||||||
p->dox += p->ddox;
|
p->dox += p->ddox;
|
||||||
p->doy += p->ddoy;
|
p->doy += p->ddoy;
|
||||||
|
|
||||||
|
p->dox *= damping_force;
|
||||||
|
p->doy *= damping_force;
|
||||||
|
|
||||||
if(fabs(p->dox) > 10.0f) {
|
if(fabs(p->dox) > 10.0f) {
|
||||||
p->dox = sign(p->dox) * 10.0f;
|
p->dox = sign(p->dox) * 10.0f;
|
||||||
}
|
}
|
||||||
|
@ -1029,11 +1035,6 @@ void View::resolveLabelConflicts() {
|
||||||
p->ox += p->dox;
|
p->ox += p->dox;
|
||||||
p->oy += p->doy;
|
p->oy += p->doy;
|
||||||
|
|
||||||
//printf("p_ox: %f, p_oy %f\n",p->ox, p->oy);
|
|
||||||
|
|
||||||
p->ddox = 0;
|
|
||||||
p->ddoy = 0;
|
|
||||||
|
|
||||||
p->x = p->cx + (int)round(p->ox);
|
p->x = p->cx + (int)round(p->ox);
|
||||||
p->y = p->cy + (int)round(p->oy);
|
p->y = p->cy + (int)round(p->oy);
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
c64f58d5a0b612b1c29e1585a52d19dfa7ac4b92
|
35e0993090bbfbe86d9367ce99c671435554d2ac
|
|
@ -28,7 +28,6 @@
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "view1090.h"
|
|
||||||
#include "AppData.h"
|
#include "AppData.h"
|
||||||
#include "View.h"
|
#include "View.h"
|
||||||
#include "Input.h"
|
#include "Input.h"
|
||||||
|
|
Loading…
Reference in a new issue