[Change] Target color changes based on target.
This commit is contained in:
		
							parent
							
								
									c20a20e103
								
							
						
					
					
						commit
						053d7b75b6
					
				
							
								
								
									
										19
									
								
								src/opengl.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								src/opengl.c
									
									
									
									
									
								
							| @ -329,7 +329,7 @@ void gl_getSpriteFromDir(int* x, int* y, const gl_texture* t, const double dir) | ||||
| // ================
 | ||||
| 
 | ||||
| // Blit the sprite at given position.
 | ||||
| void gl_blitSprite(const gl_texture* sprite, const Vec2* pos, const int sx, const int sy) { | ||||
| void gl_blitSprite(const gl_texture* sprite, const Vec2* pos, const int sx, const int sy, const glColor* c) { | ||||
|   // Don't bother drawing if offscreen -- waste of cycles.
 | ||||
|   if(fabs(VX(*pos) -VX(*gl_camera)) > gl_screen.w / 2 + sprite->sw / 2 || | ||||
|         fabs(VY(*pos) -VY(*gl_camera)) > gl_screen.h / 2 + sprite->sh / 2) | ||||
| @ -345,12 +345,13 @@ void gl_blitSprite(const gl_texture* sprite, const Vec2* pos, const int sx, cons | ||||
|   glPushMatrix(); // Projection translation matrix.
 | ||||
|   glTranslated(VX(*pos) - VX(*gl_camera) - sprite->sw/2. + gui_xoff, | ||||
|         VY(*pos) -VY(*gl_camera) - sprite->sh/2. + gui_yoff, 0.); | ||||
|   glScalef((double)gl_screen.w/SCREEN_W, (double)gl_screen.h/SCREEN_H, 0.); | ||||
|   //glScalef((double)gl_screen.w/SCREEN_W, (double)gl_screen.h/SCREEN_H, 0.);
 | ||||
| 
 | ||||
|   // Actual blitting....
 | ||||
|   glBindTexture(GL_TEXTURE_2D, sprite->texture); | ||||
|   glBegin(GL_TRIANGLE_STRIP); | ||||
|     glColor4d(1., 1., 1., 1.); | ||||
|     if(c == NULL) glColor4d(1., 1., 1., 1.); | ||||
|     else COLOR(*c); | ||||
|     glTexCoord2d(0., 0.); | ||||
|       glVertex2d(0., 0.); | ||||
|     glTexCoord2d(sprite->sw/sprite->rw, 0.); | ||||
| @ -370,17 +371,18 @@ void gl_blitSprite(const gl_texture* sprite, const Vec2* pos, const int sx, cons | ||||
| } | ||||
| 
 | ||||
| // Just straight out blit the thing at position.
 | ||||
| void gl_blitStatic(const gl_texture* texture, const Vec2* pos) { | ||||
| void gl_blitStatic(const gl_texture* texture, const Vec2* pos, const glColor* c) { | ||||
|   glEnable(GL_TEXTURE_2D); | ||||
|   glMatrixMode(GL_PROJECTION); | ||||
|   glPushMatrix(); // Set up translation matrix.
 | ||||
|   glTranslated(VX(*pos) - (double)gl_screen.w/2., VY(*pos) - (double)gl_screen.h/2., 0); | ||||
|   glScaled((double)gl_screen.w/SCREEN_W, (double)gl_screen.h/SCREEN_H, 0.); | ||||
|   //glScaled((double)gl_screen.w/SCREEN_W, (double)gl_screen.h/SCREEN_H, 0.);
 | ||||
|    | ||||
|   // Actual blitting..
 | ||||
|   glBindTexture(GL_TEXTURE_2D, texture->texture); | ||||
|   glBegin(GL_TRIANGLE_STRIP); | ||||
|     glColor4d(1., 1., 1., 1.); | ||||
|     if(c == NULL) glColor4d(1., 1., 1., 1.); | ||||
|     else COLOR(*c); | ||||
|     glTexCoord2d(0., 0.); | ||||
|       glVertex2d(0., 0.); | ||||
|     glTexCoord2d(texture->sw/texture->rw, 0.); | ||||
| @ -403,7 +405,7 @@ void gl_bindCamera(const Vec2* pos) { | ||||
| 
 | ||||
| // Print text on screen! YES!!!! Just like printf! But different!
 | ||||
| // Defaults ft_font to gl_defFont if NULL.
 | ||||
| void gl_print(const gl_font* ft_font, const Vec2* pos, const char* fmt, ...) { | ||||
| void gl_print(const gl_font* ft_font, const Vec2* pos, const glColor* c, const char* fmt, ...) { | ||||
|   //float h = ft_font->h / .63; // Slightly increases font size.
 | ||||
|   char text[256]; | ||||
|   va_list ap; | ||||
| @ -427,7 +429,8 @@ void gl_print(const gl_font* ft_font, const Vec2* pos, const char* fmt, ...) { | ||||
|   glPushMatrix(); // Translation matrix.
 | ||||
|   glTranslated(VX(*pos) - (double)gl_screen.w/2., VY(*pos) - (double)gl_screen.h/2., 0); | ||||
| 
 | ||||
|   glColor4d(1., 1., 1., 1.); | ||||
|   if(c == NULL) glColor4d(1., 1., 1., 1.); | ||||
|   else COLOR(*c); | ||||
|   glCallLists(strlen(text), GL_UNSIGNED_BYTE, &text); | ||||
| 
 | ||||
|   glPopMatrix(); // Translation matrix.
 | ||||
|  | ||||
							
								
								
									
										15
									
								
								src/opengl.h
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								src/opengl.h
									
									
									
									
									
								
							| @ -25,9 +25,14 @@ typedef struct { | ||||
|   int r, g, b, a;   // Framebuffer values in bits.
 | ||||
|   int doublebuf;    // Double buffer.
 | ||||
| } gl_info; | ||||
| 
 | ||||
| extern gl_info gl_screen; // Local structure set with gl_init etc.
 | ||||
| 
 | ||||
| // Colors.
 | ||||
| typedef struct { | ||||
|   double r, g, b, a; | ||||
| } glColor; | ||||
| #define COLOR(x) glColor4d((x).r, (x).g, (x).b, (x).a) | ||||
| 
 | ||||
| // Spritesheet info.
 | ||||
| typedef struct { | ||||
|   double w, h;        // Real size of the image (excluding POT buffer.
 | ||||
| @ -58,10 +63,12 @@ gl_texture* gl_newSprite(const char* path, const int sx, const int sy); | ||||
| void gl_freeTexture(gl_texture* texture); | ||||
| 
 | ||||
| // Rendering.
 | ||||
| void gl_blitSprite(const gl_texture* sprite, const Vec2* pos, const int sx, const int sy); | ||||
| void gl_blitStatic(const gl_texture* texture, const Vec2* pos); | ||||
| void gl_blitSprite(const gl_texture* sprite, const Vec2* pos,  | ||||
|       const int sx, const int sy, const glColor* c); | ||||
| 
 | ||||
| void gl_blitStatic(const gl_texture* texture, const Vec2* pos, const glColor* c); | ||||
| void gl_bindCamera(const Vec2* pos); | ||||
| void gl_print(const gl_font* ft_font, const Vec2* pos, const char* fmt, ...); | ||||
| void gl_print(const gl_font* ft_font, const Vec2* pos, const glColor* c, const char* fmt, ...); | ||||
| 
 | ||||
| // Initialize/cleanup.
 | ||||
| int gl_init(void); | ||||
|  | ||||
| @ -154,7 +154,7 @@ void pilot_render(Pilot* p) { | ||||
|   // Get the sprite corresponding to the direction facing.
 | ||||
|   gl_getSpriteFromDir(&sx, &sy, p->ship->gfx_space, p->solid->dir); | ||||
| 
 | ||||
|   gl_blitSprite(p->ship->gfx_space, &p->solid->pos, sx, sy); | ||||
|   gl_blitSprite(p->ship->gfx_space, &p->solid->pos, sx, sy, NULL); | ||||
| } | ||||
| 
 | ||||
| // Update the pilot.
 | ||||
|  | ||||
							
								
								
									
										62
									
								
								src/player.c
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								src/player.c
									
									
									
									
									
								
							| @ -50,25 +50,21 @@ extern Pilot** pilot_stack; | ||||
| extern int pilots; | ||||
| 
 | ||||
| // GUI crap.
 | ||||
| // Need these offsets to render properly. -- Used in opengl.c
 | ||||
| // -- Colors.
 | ||||
| typedef struct { | ||||
|   double r, g, b, a; | ||||
| } Color; | ||||
| #define COLOR(x) glColor4d((x).r, (x).g, (x).b, (x).a) | ||||
| // Standard colors.
 | ||||
| Color cInert            = { .r = 0.6, .g = 0.6, .b = 0.6, .a = 1. }; | ||||
| Color cNeutral          = { .r = 0.9, .g = 1.0, .b = 0.3, .a = 1. }; | ||||
| Color cFriend           = { .r = 0.0, .g = 1.0, .b = 0.0, .a = 1. }; | ||||
| Color cHostile          = { .r = 0.9, .g = 0.2, .b = 0.2, .a = 1. }; | ||||
| 
 | ||||
| Color cRadar_player     = { .r = 0.4, .g = 0.8, .b = 0.4, .a = 1. }; | ||||
| Color cRadar_targ       = { .r = 0.0, .g = 0.7, .b = 1.0, .a = 1. }; | ||||
| Color cRadar_weap       = { .r = 0.8, .g = 0.2, .b = 0.2, .a = 1. }; | ||||
| // -- Colors.
 | ||||
| // Standard colors.
 | ||||
| glColor cInert            = { .r = 0.6, .g = 0.6, .b = 0.6, .a = 1. }; | ||||
| glColor cNeutral          = { .r = 0.9, .g = 1.0, .b = 0.3, .a = 1. }; | ||||
| glColor cFriend           = { .r = 0.0, .g = 1.0, .b = 0.0, .a = 1. }; | ||||
| glColor cHostile          = { .r = 0.9, .g = 0.2, .b = 0.2, .a = 1. }; | ||||
| 
 | ||||
| glColor cRadar_player     = { .r = 0.4, .g = 0.8, .b = 0.4, .a = 1. }; | ||||
| glColor cRadar_targ       = { .r = 0.0, .g = 0.7, .b = 1.0, .a = 1. }; | ||||
| glColor cRadar_weap       = { .r = 0.8, .g = 0.2, .b = 0.2, .a = 1. }; | ||||
| // Bars.
 | ||||
| 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. }; | ||||
| glColor cShield           = { .r = 0.2, .g = 0.2, .b = 0.8, .a = 1. }; | ||||
| glColor cArmor            = { .r = 0.5, .g = 0.5, .b = 0.5, .a = 1. }; | ||||
| glColor cEnergy           = { .r = 0.2, .g = 0.8, .b = 0.2, .a = 1. }; | ||||
| 
 | ||||
| typedef struct { | ||||
|   double w,h; // Dimensions.
 | ||||
| @ -124,7 +120,7 @@ extern void planets_minimap(const double res, const double w, const double h, co | ||||
| 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); | ||||
| static void gui_renderPilot(const Pilot* p); | ||||
| static void gui_renderBar(const Color* c, const Vec2* p, const Rect* r, const double w); | ||||
| static void gui_renderBar(const glColor* c, const Vec2* p, const Rect* r, const double w); | ||||
| 
 | ||||
| void player_message(const char* fmt, ...) { | ||||
|   va_list ap; | ||||
| @ -151,20 +147,24 @@ void player_render(void) { | ||||
|   int i, j; | ||||
|   Pilot* p; | ||||
|   Vec2 v; | ||||
|   glColor* c; | ||||
| 
 | ||||
|   // Render the player target graphics.
 | ||||
|   if(player_target != PLAYER_ID) { | ||||
|     p = pilot_get(player_target); | ||||
| 
 | ||||
|     if(pilot_isFlag(p, PILOT_HOSTILE)) c = &cHostile; | ||||
|     else c = &cNeutral; | ||||
| 
 | ||||
|     vect_csetmin(&v, VX(p->solid->pos) - p->ship->gfx_space->sw * PILOT_SIZE_APROX/2., | ||||
|           VY(p->solid->pos) + p->ship->gfx_space->sh * PILOT_SIZE_APROX/2.); | ||||
|     gl_blitSprite(gui.gfx_targetPilot, &v, 0, 0); // Top left.
 | ||||
|     gl_blitSprite(gui.gfx_targetPilot, &v, 0, 0, c); // Top left.
 | ||||
|     VX(v) += p->ship->gfx_space->sw * PILOT_SIZE_APROX; | ||||
|     gl_blitSprite(gui.gfx_targetPilot, &v, 1, 0); // Top right.
 | ||||
|     gl_blitSprite(gui.gfx_targetPilot, &v, 1, 0, c); // Top right.
 | ||||
|     VY(v) -= p->ship->gfx_space->sh * PILOT_SIZE_APROX; | ||||
|     gl_blitSprite(gui.gfx_targetPilot, &v, 1, 1); // Bottom right.
 | ||||
|     gl_blitSprite(gui.gfx_targetPilot, &v, 1, 1, c); // Bottom right.
 | ||||
|     VX(v) -= p->ship->gfx_space->sw * PILOT_SIZE_APROX; | ||||
|     gl_blitSprite(gui.gfx_targetPilot, &v, 0, 1); // Bottom left.
 | ||||
|     gl_blitSprite(gui.gfx_targetPilot, &v, 0, 1, c); // Bottom left.
 | ||||
|   } | ||||
| 
 | ||||
|   // Render the player.
 | ||||
| @ -172,7 +172,7 @@ void player_render(void) { | ||||
| 
 | ||||
|   // GUI!
 | ||||
|   // -- Frame.
 | ||||
|   gl_blitStatic(gui.gfx_frame, &gui.pos_frame); | ||||
|   gl_blitStatic(gui.gfx_frame, &gui.pos_frame, NULL); | ||||
|   // -- Radar.
 | ||||
|   glMatrixMode(GL_PROJECTION); | ||||
|   glPushMatrix(); | ||||
| @ -229,22 +229,22 @@ void player_render(void) { | ||||
|   if(player_target != PLAYER_ID) { | ||||
|     p = pilot_get(player_target); | ||||
| 
 | ||||
|     gl_blitStatic(p->ship->gfx_target, &gui.pos_target); | ||||
|     gl_blitStatic(p->ship->gfx_target, &gui.pos_target, NULL); | ||||
|      | ||||
|     // Target name.
 | ||||
|     gl_print(NULL, &gui.pos_target_name, "%s", p->name); | ||||
|     gl_print(&gui.smallFont, &gui.pos_target_faction, "%s", p->faction->name); | ||||
|     gl_print(NULL, &gui.pos_target_name, NULL, "%s", p->name); | ||||
|     gl_print(&gui.smallFont, &gui.pos_target_faction, NULL, "%s", p->faction->name); | ||||
| 
 | ||||
|     // Target status.
 | ||||
|     if(p->armor < p->armor_max * PILOT_DISABLED) | ||||
|       // Disable the pilot.
 | ||||
|       gl_print(&gui.smallFont, &gui.pos_target_health, "Disabled"); | ||||
|       gl_print(&gui.smallFont, &gui.pos_target_health, NULL, "Disabled"); | ||||
|     else if(p->shield > p->shield_max / 100.) | ||||
|       // On shields.
 | ||||
|       gl_print(&gui.smallFont, &gui.pos_target_health, "%s: %.0f%%", "Shield", p->shield/p->shield_max*100.); | ||||
|       gl_print(&gui.smallFont, &gui.pos_target_health, NULL, "%s: %.0f%%", "Shield", p->shield/p->shield_max*100.); | ||||
|     else | ||||
|       // On armor.
 | ||||
|       gl_print(&gui.smallFont, &gui.pos_target_health, "%s: %.0f%%", "Armor", p->armor/p->armor_max*100.); | ||||
|       gl_print(&gui.smallFont, &gui.pos_target_health, NULL, "%s: %.0f%%", "Armor", p->armor/p->armor_max*100.); | ||||
|   } | ||||
|   // Messages.
 | ||||
|   VX(v) = VX(gui.pos_msg); | ||||
| @ -254,7 +254,7 @@ void player_render(void) { | ||||
|     if(msg_stack[msg_max-i-1].str[0] != '\0') { | ||||
|       if(msg_stack[msg_max-i-1].t < SDL_GetTicks()) | ||||
|         msg_stack[msg_max-i-1].str[0] = '\0'; | ||||
|       else gl_print(NULL, &v, "%s", msg_stack[msg_max-i-1].str); | ||||
|       else gl_print(NULL, &v, NULL, "%s", msg_stack[msg_max-i-1].str); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -300,7 +300,7 @@ static void gui_renderPilot(const Pilot* p) { | ||||
| } | ||||
| 
 | ||||
| // Render a bar.
 | ||||
| static void gui_renderBar(const Color* c, const Vec2* p, const Rect* r, const double w) { | ||||
| static void gui_renderBar(const glColor* c, const Vec2* p, const Rect* r, const double w) { | ||||
|   int x, y, sx, sy; | ||||
| 
 | ||||
|   glBegin(GL_QUADS); | ||||
|  | ||||
| @ -460,7 +460,7 @@ void space_render(double dt) { | ||||
| void planets_render(void) { | ||||
|   int i; | ||||
|   for(i = 0; i < cur_system->nplanets; i++) | ||||
|     gl_blitSprite(cur_system->planets[i].gfx_space, &cur_system->planets[i].pos, 0, 0); | ||||
|     gl_blitSprite(cur_system->planets[i].gfx_space, &cur_system->planets[i].pos, 0, 0, NULL); | ||||
| } | ||||
| 
 | ||||
| // Clean up the system.
 | ||||
|  | ||||
| @ -115,7 +115,7 @@ static void weapon_render(const Weapon* w) { | ||||
|   // Get the sprite corresponding to the direction facing.
 | ||||
|   gl_getSpriteFromDir(&sx, &sy, w->outfit->gfx_space, w->solid->dir); | ||||
| 
 | ||||
|   gl_blitSprite(w->outfit->gfx_space, &w->solid->pos, sx, sy); | ||||
|   gl_blitSprite(w->outfit->gfx_space, &w->solid->pos, sx, sy, NULL); | ||||
| } | ||||
| 
 | ||||
| // Update the weapon.
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Allanis
						Allanis