From 74ed3e094b20a1b2acf7ee238afc41f5848d403c Mon Sep 17 00:00:00 2001 From: Allanis Date: Wed, 13 Feb 2013 13:59:38 +0000 Subject: [PATCH] [Add] New GUI. [Fix] Circular radar. --- dat/gui.xml | 54 +++++++++++++++++++ dat/ship.xml | 2 +- gfx/gui/minimal.png | Bin 0 -> 6886 bytes gfx/gui/minimal_pilot.png | Bin 0 -> 371 bytes gfx/gui/minimal_planet.png | Bin 0 -> 326 bytes gfx/gui/simple.xcf | Bin 12854 -> 0 bytes src/physics.c | 1 + src/physics.h | 6 ++- src/player.c | 106 ++++++++++++++++++++----------------- src/player.h | 2 + src/space.c | 10 ++-- src/weapon.c | 18 ++++--- 12 files changed, 138 insertions(+), 61 deletions(-) create mode 100644 gfx/gui/minimal.png create mode 100644 gfx/gui/minimal_pilot.png create mode 100644 gfx/gui/minimal_planet.png delete mode 100644 gfx/gui/simple.xcf diff --git a/dat/gui.xml b/dat/gui.xml index 7a13dbb..b348443 100644 --- a/dat/gui.xml +++ b/dat/gui.xml @@ -1,5 +1,9 @@ + + -75 + 0 + 128 128 @@ -45,4 +49,54 @@ + + + -65 + 0 + + + 70 + 72 + 72 + + + + 98 + 8 + 52 + 186 + + + 98 + 8 + 52 + 197 + + + 98 + 8 + 52 + 207 + + + + + 34 + 273 + + + 40 + 260 + + + 40 + 273 + + + 40 + 370 + + + + diff --git a/dat/ship.xml b/dat/ship.xml index 3a30994..e238189 100644 --- a/dat/ship.xml +++ b/dat/ship.xml @@ -2,7 +2,7 @@ ship - simple + minimal 1 400 diff --git a/gfx/gui/minimal.png b/gfx/gui/minimal.png new file mode 100644 index 0000000000000000000000000000000000000000..97eca1f9673533050775e088f500af6a67bab0fb GIT binary patch literal 6886 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 U^{wlGzn>r(NkxhGPYwR~FG~X!zW@LL literal 0 HcmV?d00001 diff --git a/gfx/gui/minimal_pilot.png b/gfx/gui/minimal_pilot.png new file mode 100644 index 0000000000000000000000000000000000000000..64635e0aa48754d707b6e499de0f26652ed760ea GIT binary patch literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP`yNrO4gv`F5Ul|w}89ZGaLp+YZoo?90WGK?Mf5~Si z&9`sgutW={aOZD0doQ8-^xN-jX7>&_u}pl+_Ga1adq(0L&Y0CJSl{0HTc+iY!O_z^ zKPx=h_E}VUP82j?pLU>U|5K(p4aZpXo^oGr)@$H3`&rQVS-+rb594|*>jxZL^a}R2 zPf|)w;9Aqr*;cN%;qS%Fu9}yT|I1fvZqj=e&tUQPrQ`jYT?g(Z&AobI_bKu9%`6up z9T`o^mlwS&t-3fbO5J$cz8|T#*c*(KpLH+Y5f$v+mcAgQfHfS5J_t8H^;o7U8OPOi zd&kyW{p*=7|OJl!g5 zql51D6|CA@pDfRtwc@tlt7CJ2y=wmTDTD2f#FCV*vmA_y#ScR&Cwvx~TPG77SEn=Y T-4ipQ_ZU1~{an^LB{Ts5p0i6at7 zbXC8K)P59+ib%y*zWG52Bp^ZL4?g#=Khq|4cy`bpsS5RMBkZkl3rK@9!yo&C<3Ti705=>h;!8r;0F#MitK%aBeK&a_e zRbz^~UU^)8Svsmy*0fnh&*Ac_G)U!f?P%Q6chs&J*KQo+mdAyoaZBHkQ!%d9AjTD% z0W>&jTU1S-qZf9Ra!mE^A~e3X*d#NI7+~WmzVWr>M#iPFoB%)M4yDzgWH+={(&h%Y zA$@mv#h#I@hE~kK%6uRI9wAKEl_P|03z)Hgf+quh&c!_%e%3S4*VXEW8$TQI2-PTyofEx>`@e3NL z>p6Yya(eBjzi4ta#SbDm$U1rB*0fXxac|);8)z?4kd_qAN~JscD?eF z5W2bS#`zLRqBoSO@fD8>Yj&w_yJ!b>ifv%e)u3jB<2nZ_>&xV5rU}nw-a&Uyr^{{v zJG~1S7fiQucrhS9GOKsgM!0paq}zKEw>4ti_UYZ*HqUT{swiHsK4}498sTpQn!E`3PkTAxzx82)QvU+K)w{U> diff --git a/src/physics.c b/src/physics.c index 03882f1..8ec9e45 100644 --- a/src/physics.c +++ b/src/physics.c @@ -2,6 +2,7 @@ #include #include +#include "main.h" #include "physics.h" // ================ diff --git a/src/physics.h b/src/physics.h index 0fa1a8b..5ba2cb9 100644 --- a/src/physics.h +++ b/src/physics.h @@ -1,5 +1,6 @@ #pragma once -#include "main.h" + +#include #define VX(v) ((v).x) #define VY(v) ((v).y) @@ -9,7 +10,8 @@ #define MOD(x,y) (sqrt((x)*(x) + (y)*(y))) #define ANGLE(x,y)(((x)==0.) ? 0. : (((x)<0.)?atan((y)/(x))+M_PI:atan((y)/(x)))) -#define vect_dist(v,u) MOD((v)->x-(u)->x, (v)->y-(u)->y) +#define vect_dist(v,u) MOD((v)->x-(u)->x, (v)->y-(u)->y) +#define vect_odist(v) MOD((v)->x, (v)->y) // Misc double angle_diff(const double ref, double a); diff --git a/src/player.c b/src/player.c index 3c7e0eb..dfa3afc 100644 --- a/src/player.c +++ b/src/player.c @@ -49,10 +49,6 @@ static unsigned int player_target = PLAYER_ID; // Targetted pilot. extern Pilot** pilot_stack; extern int pilots; -// Weapon stuff for GUI. -extern void weapon_minimap(double res, double w, double h); -extern void planets_minimap(double res, double w, double h); - // GUI crap. // Need these offsets to render properly. -- Used in opengl.c // -- Colors. @@ -74,8 +70,6 @@ Color cShield = { .r = 0.2, .g = 0.2, .b = 0.8, .a = 1. }; Color cArmor = { .r = 0.5, .g = 0.5, .b = 0.5, .a = 1. }; Color cEnergy = { .r = 0.2, .g = 0.8, .b = 0.2, .a = 1. }; -typedef enum { RADAR_RECT, RADAR_CIRCLE } RadarShape; - typedef struct { double w,h; // Dimensions. RadarShape shape; @@ -123,7 +117,9 @@ typedef struct { static Msg* msg_stack; // External. -extern void pilot_render(Pilot* pilot); // Extern is in Pilot.* +extern void pilot_render(const Pilot* pilot); // Extern is in Pilot.* +extern void weapon_minimap(const double res, const double w, const double h, const RadarShape shape); // weapon.c +extern void planets_minimap(const double res, const double w, const double h, const RadarShape shape); // space.c // Internal. static void rect_parse(const xmlNodePtr parent, double* x, double* y, double* w, double* h); static int gui_parse(const xmlNodePtr parent, const char* name); @@ -180,39 +176,34 @@ void player_render(void) { // -- Radar. glMatrixMode(GL_PROJECTION); glPushMatrix(); - glTranslated(VX(gui.pos_radar) - gl_screen.w/2. + gui.radar.w/2., - VY(gui.pos_radar) - gl_screen.h/2. - gui.radar.h/2., 0.); - - switch(gui.radar.shape) { - case RADAR_RECT: - // Planets. - COLOR(cFriend); - planets_minimap(gui.radar.res, gui.radar.w, gui.radar.h); + if(gui.radar.shape == RADAR_RECT) + glTranslated(VX(gui.pos_radar) - gl_screen.w/2. + gui.radar.w/2., + VY(gui.pos_radar) - gl_screen.h/2. - gui.radar.h/2., 0.); + else if(gui.radar.shape == RADAR_CIRCLE) + glTranslated(VX(gui.pos_radar) - gl_screen.w/2., + VY(gui.pos_radar) - gl_screen.h/2., 0.); - // Weapons. - glBegin(GL_POINTS); - COLOR(cRadar_weap); - weapon_minimap(gui.radar.res, gui.radar.w, gui.radar.h); - glEnd(); // Put end to those points. - for(j = 0, i = 1; i < pilots; i++) { - // Skip the player. - if(pilot_stack[i]->id == player_target) j = i; - else gui_renderPilot(pilot_stack[i]); - } - // Render the targetted pilot. - if(j != 0) gui_renderPilot(pilot_stack[j]); - glBegin(GL_POINTS); // For ze player. - break; - case RADAR_CIRCLE: - glBegin(GL_POINTS); - for(i = 1; i < pilots; i++) { - p = pilot_stack[i]; - COLOR(cNeutral); - glVertex2d((p->solid->pos.x - player->solid->pos.x) / gui.radar.res, - (p->solid->pos.y - player->solid->pos.y) / gui.radar.res); - } - break; + // Planets. + COLOR(cFriend); + planets_minimap(gui.radar.res, gui.radar.w, gui.radar.h, gui.radar.shape); + + // Weapons. + glBegin(GL_POINTS); + COLOR(cRadar_weap); + weapon_minimap(gui.radar.res, gui.radar.w, gui.radar.h, gui.radar.shape); + glEnd(); + + // Render the pilots. + for(j = 0, i = 1; i < pilots; i++) { + // Skip the player. + if(pilot_stack[i]->id == player_target) j = i; + else gui_renderPilot(pilot_stack[i]); } + // Render the targetted pilot. + if(j != 0) gui_renderPilot(pilot_stack[j]); + + // Player. + glBegin(GL_POINTS); // Player. -- Drawn last. COLOR(cRadar_player); glVertex2d( 0., 2. ); // We represent the player with a small '+' @@ -271,6 +262,7 @@ void player_render(void) { // Renders a pilot. static void gui_renderPilot(const Pilot* p) { int x, y, sx, sy; + double w, h; x = (p->solid->pos.x - player->solid->pos.x) / gui.radar.res; y = (p->solid->pos.y - player->solid->pos.y) / gui.radar.res; @@ -279,9 +271,20 @@ static void gui_renderPilot(const Pilot* p) { if(sx < 1.) sx = 1.; if(sy < 1.) sy = 1.; - if((ABS(x) > gui.radar.w/2+sx) || (ABS(y) > gui.radar.h/2.+sy)) + if(((gui.radar.shape == RADAR_RECT) && ((ABS(x) > gui.radar.w/2.+sx) + || (ABS(y) > gui.radar.h/2.+sy))) || ((gui.radar.shape == RADAR_CIRCLE) && + ((x*x + y*y) > (int)(gui.radar.w*gui.radar.w)))) return; // Pilot isn't in range. + if(gui.radar.shape == RADAR_RECT) { + w = gui.radar.w/2.; + h = gui.radar.h/2.; + } + else if(gui.radar.shape == RADAR_CIRCLE) { + w = gui.radar.w; + h = gui.radar.w; + } + glBegin(GL_QUADS); // Colors. if(p->id == player_target) COLOR(cRadar_targ); @@ -289,10 +292,10 @@ static void gui_renderPilot(const Pilot* p) { else COLOR(cNeutral); // Image. - glVertex2d(MAX(x-sx, -gui.radar.w/2.), MIN(y+sy, gui.radar.h/2)); // Top left. - glVertex2d(MIN(x+sx, gui.radar.w/2.), MIN(y+sy, gui.radar.h/2)); // Top right. - glVertex2d(MIN(x+sx, gui.radar.w/2.), MAX(y-sy, -gui.radar.h/2)); // Bottom right. - glVertex2d(MAX(x-sx, -gui.radar.w/2.), MAX(y-sy, -gui.radar.h/2)); // Bottom left. + glVertex2d(MAX(x-sx, -w), MIN(y+sy, h)); // Top left. + glVertex2d(MIN(x+sx, w), MIN(y+sy, h)); // Top right. + glVertex2d(MIN(x+sx, w), MAX(y-sy, -h)); // Bottom right. + glVertex2d(MAX(x-sx, -w), MAX(y-sy, -h)); // Bottom left. glEnd(); } @@ -458,13 +461,16 @@ static int gui_parse(const xmlNodePtr parent, const char* name) { gl_screen.w - gui.gfx_frame->w, // x. gl_screen.h - gui.gfx_frame->h); // h. - // For rendering the player. Displaces it a little so it's centered onscreen. - gui_xoff = - gui.gfx_frame->w/2.; - // Let's parse the data now. node = parent->children; do { - if(strcmp((char*)node->name, "radar")==0) { + // Offset. + if(strcmp((char*)node->name, "offset")==0) { + rect_parse(node, &x, &y, NULL, NULL); + gui_xoff = x; + gui_yoff = y; + } + else if(strcmp((char*)node->name, "radar")==0) { tmp = (char*)xmlGetProp(node, (xmlChar*)"type"); // Make sure type is valid. @@ -476,7 +482,11 @@ static int gui_parse(const xmlNodePtr parent, const char* name) { } free(tmp); - rect_parse(node, &x, &y, &gui.radar.w, &gui.radar.h); + // Load the appropriate measurements. + if(gui.radar.shape == RADAR_RECT) + rect_parse(node, &x, &y, &gui.radar.w, &gui.radar.h); + else if(gui.radar.shape == RADAR_CIRCLE) + rect_parse(node, &x, &y, &gui.radar.w, NULL); vect_csetmin(&gui.pos_radar, VX(gui.pos_frame) + x, VY(gui.pos_frame) + gui.gfx_frame->h - y); diff --git a/src/player.h b/src/player.h index 90589d2..ae1107b 100644 --- a/src/player.h +++ b/src/player.h @@ -2,8 +2,10 @@ #include #include "pilot.h" +// The pilot. extern Pilot* pilot; +typedef enum { RADAR_RECT, RADAR_CIRCLE } RadarShape; // For render functions. typedef enum { KEYBIND_NULL, KEYBIND_KEYBOARD, KEYBIND_JAXIS, KEYBIND_JBUTTON } KeybindType; // Render. diff --git a/src/space.c b/src/space.c index c560c3d..b1f8dda 100644 --- a/src/space.c +++ b/src/space.c @@ -8,6 +8,7 @@ #include "pack.h" #include "space.h" #include "faction.h" +#include "player.h" #define XML_NODE_START 1 #define XML_NODE_TEST 3 @@ -56,12 +57,15 @@ extern void player_message(const char* fmt, ...); // Draw the planet. Used in planet.c // Matrix mode is already displaced to center of the minimap. -#define PIXEL(x,y) if(ABS(x)nplanets; i++) { diff --git a/src/weapon.c b/src/weapon.c index a6c4051..f73288e 100644 --- a/src/weapon.c +++ b/src/weapon.c @@ -9,6 +9,7 @@ #include "rng.h" #include "pilot.h" #include "collision.h" +#include "player.h" #include "weapon.h" // Some stuff from pilot. @@ -49,24 +50,27 @@ static void weapon_destroy(Weapon* w, WeaponLayer layer); static void weapon_free(Weapon* w); // Draw the minimap weapons (player.c). -void weapon_minimap(double res, double w, double h) { - int i; +#define PIXEL(x,y) if((shape == RADAR_RECT && ABS(x) < w/2. && ABS(y)solid->pos.x - player->solid->pos.x) / res; y = (wbackLayer[i]->solid->pos.y - player->solid->pos.y) / res; - if(ABS(x) < w/2. && ABS(y) < h/2.) - glVertex2d(x,y); + PIXEL(x,y); } for(i = 0; i < nwfrontLayer; i++) { x = (wfrontLayer[i]->solid->pos.x - player->solid->pos.x) / res; y = (wfrontLayer[i]->solid->pos.y - player->solid->pos.y) / res; - if(ABS(x) < w/2. && ABS(y) < h/2.) - glVertex2d(x,y); - + PIXEL(x,y); } } +#undef PIXEL // Update all weapons in the layer. void weapons_update(const double dt, WeaponLayer layer) {