diff --git a/Aircraft.cpp b/Aircraft.cpp index 129120d..e47386a 100644 --- a/Aircraft.cpp +++ b/Aircraft.cpp @@ -1,11 +1,11 @@ #include "Aircraft.h" +#include "dump1090.h" //for struct aircaft Aircraft::Aircraft(struct aircraft *a) { addr = a->addr; created = 0; - //oldIdx = 0; prev_seen = 0; x = 0; @@ -19,16 +19,8 @@ Aircraft::Aircraft(struct aircraft *a) { doy = 0; ddox = 0; ddoy = 0; - - // memset(oldLon, 0, sizeof(oldLon)); - // memset(oldLat, 0, sizeof(oldLat)); - // memset(oldHeading, 0, sizeof(oldHeading)); } Aircraft::~Aircraft() { - - // free(oldLat); - // free(oldLon); - // free(oldHeading); } \ No newline at end of file diff --git a/Aircraft.h b/Aircraft.h index 2a0c857..57a67d7 100644 --- a/Aircraft.h +++ b/Aircraft.h @@ -1,5 +1,5 @@ #include -#include "dump1090.h" + #include #include diff --git a/AircraftList.cpp b/AircraftList.cpp index 5843684..a2581a5 100644 --- a/AircraftList.cpp +++ b/AircraftList.cpp @@ -1,5 +1,4 @@ #include "AircraftList.h" -#include "dump1090.h" static uint64_t mstime(void) { struct timeval tv; diff --git a/AircraftList.h b/AircraftList.h index 36ce402..4f22964 100644 --- a/AircraftList.h +++ b/AircraftList.h @@ -1,5 +1,7 @@ #include "Aircraft.h" +#include "dump1090.h" //for Modes + class AircraftList { public: Aircraft *head; diff --git a/AppData.h b/AppData.h index 1471568..cf6f32a 100644 --- a/AppData.h +++ b/AppData.h @@ -1,8 +1,7 @@ #ifndef APPDATA_H #define APPDATA_H -#include "dump1090.h" -#include "view1090.h" +#include "view1090.h" //for Modes #include "AircraftList.h" diff --git a/Input.cpp b/Input.cpp index 490ba05..b743154 100644 --- a/Input.cpp +++ b/Input.cpp @@ -1,5 +1,3 @@ -#include "view1090.h" - #include "Input.h" static uint64_t mstime(void) { diff --git a/View.cpp b/View.cpp index 702e4cd..b34ddf2 100644 --- a/View.cpp +++ b/View.cpp @@ -1,5 +1,3 @@ -#include "dump1090.h" - #include "SDL2/SDL2_rotozoom.h" #include "SDL2/SDL2_gfxPrimitives.h" //color schemes @@ -855,6 +853,12 @@ void View::drawSelectedAircraftText(Aircraft *p) { void View::resolveLabelConflicts() { 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) { Aircraft *check_p = appData->aircraftList.head; @@ -867,15 +871,18 @@ void View::resolveLabelConflicts() { //debug box //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); + + p->ddox = 0; + p->ddoy = 0; - //apply damping - - p->ddox -= 0.07f * p->dox; - p->ddoy -= 0.07f * p->doy; + float o_mag = sqrt(p->ox*p->ox + p->oy*p->oy); //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 @@ -925,22 +932,22 @@ void View::resolveLabelConflicts() { //left collision 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 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 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 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; @@ -950,8 +957,6 @@ void View::resolveLabelConflicts() { //check against plane icons (include self) - float plane_force = 0.08f; - p_left = p->x - 5 * screen_uiscale; p_right = p->x + 5 * screen_uiscale; p_top = p->y - 5 * screen_uiscale; @@ -1005,11 +1010,12 @@ void View::resolveLabelConflicts() { p = appData->aircraftList.head; while(p) { - //incorporate acceleration from label conflict resolution - p->dox += p->ddox; p->doy += p->ddoy; + p->dox *= damping_force; + p->doy *= damping_force; + if(fabs(p->dox) > 10.0f) { p->dox = sign(p->dox) * 10.0f; } @@ -1029,11 +1035,6 @@ void View::resolveLabelConflicts() { p->ox += p->dox; 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->y = p->cy + (int)round(p->oy); diff --git a/map1090.REMOVED.git-id b/map1090.REMOVED.git-id index bf3a173..87824ef 100644 --- a/map1090.REMOVED.git-id +++ b/map1090.REMOVED.git-id @@ -1 +1 @@ -c64f58d5a0b612b1c29e1585a52d19dfa7ac4b92 \ No newline at end of file +35e0993090bbfbe86d9367ce99c671435554d2ac \ No newline at end of file diff --git a/map1090.cpp b/map1090.cpp index e02a391..bf16da5 100644 --- a/map1090.cpp +++ b/map1090.cpp @@ -28,7 +28,6 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -#include "view1090.h" #include "AppData.h" #include "View.h" #include "Input.h"