[Add] Utilising all GUI elements.

-- Minimal right now.
This commit is contained in:
Allanis 2013-02-14 16:07:19 +00:00
parent 9fae81c389
commit 23cb72bffd
7 changed files with 60 additions and 25 deletions

View File

@ -109,6 +109,11 @@
<y>401</y> <y>401</y>
</health> </health>
</target> </target>
<misc>
<x>40</x>
<y>424</y>
<w>112</w>
<h>100</h>
</misc>
</gui> </gui>
</GUIs> </GUIs>

View File

@ -78,7 +78,7 @@
<cap_cargo>40</cap_cargo> <cap_cargo>40</cap_cargo>
</characteristics> </characteristics>
<outfits> <outfits>
<outfit quantity='1'>laser</outfit> <outfit quantity='4'>laser</outfit>
</outfits> </outfits>
</ship> </ship>
</Ships> </Ships>

View File

@ -18,7 +18,8 @@
#define FONT_DEF "../gfx/fonts/FreeSans.ttf" #define FONT_DEF "../gfx/fonts/FreeSans.ttf"
// Default colors. // Default colors.
glColor cGrey = { .r = .75, .g = 0.75, .b = 0.75, .a = 1 }; glColor cGrey = { .r = 0.75, .g = 0.75, .b = 0.75, .a = 1 };
glColor cGreen = { .r = 0.20, .g = 0.80, .b = 0.20, .a = 1 };
// offsets to Adjust the pilot's place onscreen to be in the middle, even with the GUI. // offsets to Adjust the pilot's place onscreen to be in the middle, even with the GUI.
extern double gui_xoff; extern double gui_xoff;

View File

@ -35,6 +35,7 @@ typedef struct {
// Default colors. // Default colors.
extern glColor cGrey; extern glColor cGrey;
extern glColor cGreen;
// Spritesheet info. // Spritesheet info.
typedef struct { typedef struct {

View File

@ -1,8 +1,8 @@
#include <math.h> #include <math.h>
#include <stdlib.h> #include <stdlib.h>
#include <assert.h>
#include "main.h" #include "main.h"
#include "log.h"
#include "physics.h" #include "physics.h"
// ================ // ================
@ -205,7 +205,7 @@ void solid_init(Solid* dest, const double mass, const double dir, const Vec2* po
// Create a new solid. // Create a new solid.
Solid* solid_create(const double mass, const double dir, const Vec2* pos, const Vec2* vel) { Solid* solid_create(const double mass, const double dir, const Vec2* pos, const Vec2* vel) {
Solid* dyn = MALLOC_L(Solid); Solid* dyn = MALLOC_L(Solid);
assert(dyn != NULL); if(dyn == NULL) ERR("Out of memory");
solid_init(dyn, mass, dir, pos, vel); solid_init(dyn, mass, dir, pos, vel);
return dyn; return dyn;
} }

View File

@ -37,6 +37,7 @@ const char* keybindNames[] = { "accel", "left", "right", "primary", "target",
// Player stuff. // Player stuff.
Pilot* player = NULL; // extern in pilot.h Pilot* player = NULL; // extern in pilot.h
unsigned int credits = 0;
static double player_turn = 0.; // Turn velocity from input. static double player_turn = 0.; // Turn velocity from input.
static double player_acc = 0.; // Accel velocity from input. static double player_acc = 0.; // Accel velocity from input.
static int player_primary = 0; // Player is shooting primary weapon. static int player_primary = 0; // Player is shooting primary weapon.
@ -53,6 +54,8 @@ extern int pilots;
// -- Colors. // -- Colors.
// Standard colors. // Standard colors.
glColor cConsole = { .r = 0.5, .g = 0.8, .b = 0.5, .a = 1. };
glColor cInert = { .r = 0.6, .g = 0.6, .b = 0.6, .a = 1. }; 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 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 cFriend = { .r = 0.0, .g = 1.0, .b = 0.0, .a = 1. };
@ -91,6 +94,7 @@ typedef struct {
Rect nav; Rect nav;
Rect shield, armor, energy; Rect shield, armor, energy;
Rect weapon; Rect weapon;
Rect misc;
// Positions. // Positions.
Vec2 pos_frame; Vec2 pos_frame;
@ -99,6 +103,7 @@ typedef struct {
Vec2 pos_shield, pos_armor, pos_energy; Vec2 pos_shield, pos_armor, pos_energy;
Vec2 pos_weapon; Vec2 pos_weapon;
Vec2 pos_target, pos_target_health, pos_target_name, pos_target_faction; Vec2 pos_target, pos_target_health, pos_target_name, pos_target_faction;
Vec2 pos_misc;
Vec2 pos_msg; Vec2 pos_msg;
} GUI; } GUI;
@ -150,6 +155,7 @@ void player_message(const char* fmt, ...) {
// Render the player. // Render the player.
void player_render(void) { void player_render(void) {
int i, j; int i, j;
char str[10];
Pilot* p; Pilot* p;
Vec2 v; Vec2 v;
glColor* c; glColor* c;
@ -225,23 +231,35 @@ void player_render(void) {
glPopMatrix(); // GL_PROJECTION. glPopMatrix(); // GL_PROJECTION.
// Health.
gui_renderBar(&cShield, &gui.pos_shield, &gui.shield, player->shield / player->shield_max);
gui_renderBar(&cArmor, &gui.pos_armor, &gui.armor, player->armor / player->armor_max);
gui_renderBar(&cEnergy, &gui.pos_energy, &gui.energy, player->energy / player->energy_max);
// Nav. // Nav.
if(planet_target != -1) { if(planet_target != -1) {
} else { } else {
i = gl_printWidth(NULL, "Nav"); i = gl_printWidth(NULL, "NAV");
vect_csetmin(&v, VX(gui.pos_nav) + (gui.nav.w - i)/2., VY(gui.pos_nav) - 5); vect_csetmin(&v, VX(gui.pos_nav) + (gui.nav.w - i)/2., VY(gui.pos_nav) - 5);
gl_print(NULL, &v, &cGrey, "NAV"); gl_print(NULL, &v, &cConsole, "NAV");
i = gl_printWidth(&gui.smallFont, "No Target"); i = gl_printWidth(&gui.smallFont, "No Target");
vect_csetmin(&v, VX(gui.pos_nav) + (gui.nav.w - i)/2., VY(gui.pos_nav) - 10 - gui.smallFont.h); vect_csetmin(&v, VX(gui.pos_nav) + (gui.nav.w - i)/2., VY(gui.pos_nav) - 10 - gui.smallFont.h);
gl_print(&gui.smallFont, &v, &cGrey, "No Target"); gl_print(&gui.smallFont, &v, &cGrey, "No Target");
} }
// Health
gui_renderBar(&cShield, &gui.pos_shield, &gui.shield, player->shield / player->shield_max);
gui_renderBar(&cArmor, &gui.pos_armor, &gui.armor, player->armor / player->armor_max);
gui_renderBar(&cEnergy, &gui.pos_energy, &gui.energy, player->energy / player->energy_max);
// Weapon.
if(weapon == -1) {
i = gl_printWidth(NULL, "Secondary");
vect_csetmin(&v, VX(gui.pos_weapon) + (gui.weapon.w - i)/2., VY(gui.pos_weapon) - 5);
gl_print(NULL, &v, &cConsole, "Secondary");
i = gl_printWidth(&gui.smallFont, "None");
vect_csetmin(&v, VX(gui.pos_weapon) + (gui.weapon.w - i)/2., VY(gui.pos_weapon) - 10 - gl_defFont.h);
gl_print(&gui.smallFont, &v, &cGrey, "None");
} else {
}
// Target. // Target.
if(player_target != PLAYER_ID) { if(player_target != PLAYER_ID) {
p = pilot_get(player_target); p = pilot_get(player_target);
@ -262,21 +280,27 @@ void player_render(void) {
else else
// On armor. // On armor.
gl_print(&gui.smallFont, &gui.pos_target_health, NULL, "%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.);
}
// Weapon.
if(weapon == -1) {
i = gl_printWidth(NULL, "Secondary");
vect_csetmin(&v, VX(gui.pos_weapon) + (gui.weapon.w - i)/2., VY(gui.pos_weapon) - 5);
gl_print(NULL, &v, &cGrey, "Secondary");
i = gl_printWidth(&gui.smallFont, "None");
vect_csetmin(&v, VX(gui.pos_weapon) + (gui.weapon.w - i)/2., VY(gui.pos_weapon) - 10 - gl_defFont.h);
gl_print(&gui.smallFont, &v, &cGrey, "None");
} else { } else {
// No target.
i = gl_printWidth(NULL, "No Target");
vect_csetmin(&v, VX(gui.pos_target) + (SHIP_TARGET_W - i)/2., VY(gui.pos_target) +
(SHIP_TARGET_H - gl_defFont.h)/2.);
gl_print(NULL, &v, &cGrey, "No Target");
} }
// Misc.
vect_csetmin(&v, VX(gui.pos_misc) + 10, VY(gui.pos_misc) - 10 - gl_defFont.h);
gl_print(NULL, &v, &cConsole, "SCred:");
if(credits >= 1000000)
snprintf(str, 10, "%.2fM", (double)credits / 1000000.);
else if(credits >= 1000)
snprintf(str, 10, "%d", credits);
i = gl_printWidth(&gui.smallFont, "%s", str);
vect_csetmin(&v, VX(gui.pos_misc) + gui.misc.w - 10 - i, VY(gui.pos_misc) - 10 - gl_defFont.h);
gl_print(&gui.smallFont, &v, NULL, "%s", str);
// Messages. // Messages.
VX(v) = VX(gui.pos_msg); vect_csetmin(&v, VX(gui.pos_msg), VY(gui.pos_msg) + (double)(gl_defFont.h*msg_max)*1.2);
VY(v) = VY(gui.pos_msg) + (double)(gl_defFont.h*msg_max)*1.2;
for(i = 0; i < msg_max; i++) { for(i = 0; i < msg_max; i++) {
VY(v) -= (double)gl_defFont.h*1.2; VY(v) -= (double)gl_defFont.h*1.2;
if(msg_stack[msg_max-i-1].str[0] != '\0') { if(msg_stack[msg_max-i-1].str[0] != '\0') {
@ -598,6 +622,9 @@ static int gui_parse(const xmlNodePtr parent, const char* name) {
VY(gui.pos_frame) + gui.gfx_frame->h - y - gui.smallFont.h); VY(gui.pos_frame) + gui.gfx_frame->h - y - gui.smallFont.h);
} }
} while((cur = cur->next)); } while((cur = cur->next));
} else if(xml_isNode(node, "misc")) {
rect_parse(node, &x, &y, &gui.misc.w, &gui.misc.h);
vect_csetmin(&gui.pos_misc, VX(gui.pos_frame) + x, VY(gui.pos_frame) + gui.gfx_frame->h - y);
} }
} while((node = node->next)); } while((node = node->next));

View File

@ -4,6 +4,7 @@
// The pilot. // The pilot.
extern Pilot* pilot; extern Pilot* pilot;
extern unsigned int credits;
typedef enum { RADAR_RECT, RADAR_CIRCLE } RadarShape; // For render functions. typedef enum { RADAR_RECT, RADAR_CIRCLE } RadarShape; // For render functions.
typedef enum { KEYBIND_NULL, KEYBIND_KEYBOARD, KEYBIND_JAXIS, KEYBIND_JBUTTON } KeybindType; typedef enum { KEYBIND_NULL, KEYBIND_KEYBOARD, KEYBIND_JAXIS, KEYBIND_JBUTTON } KeybindType;