aboutsummaryrefslogtreecommitdiff
path: root/hud/hud_views.c
diff options
context:
space:
mode:
Diffstat (limited to 'hud/hud_views.c')
-rw-r--r--hud/hud_views.c380
1 files changed, 380 insertions, 0 deletions
diff --git a/hud/hud_views.c b/hud/hud_views.c
new file mode 100644
index 0000000..557ff1f
--- /dev/null
+++ b/hud/hud_views.c
@@ -0,0 +1,380 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include <hud_views.h>
+
+void render_view_stats (SDL_Renderer* rend, txtd *t, int px, int py,
+ infos *info, info_unit *tm)
+{
+ float h = 10;
+ float pname[2] = { px+10, py+h };
+ char sname[64]; sprintf(sname, "STATS");
+ render_text_scaled(rend, sname, pname, t, 2);
+ h += 35;
+
+ float calcweight = info_unit_get_weight(info, tm);
+ float maxweight = info->chassis[tm->chassis].weight_max;
+ float pw[2] = { px+10, py+h };
+ char sw[64]; sprintf(sw, "WEIGHT: %.0f/%.0f",
+ calcweight, maxweight);
+ render_text_scaled(rend, sw, pw, t, 1);
+ h += 15;
+
+ float hp = info_unit_get_health(info, tm);
+ float php[2] = { px+10, py+h };
+ char shp[64]; sprintf(shp, "HP: %.2f", hp);
+ render_text_scaled(rend, shp, php, t, 1);
+ h += 15;
+
+ float speed = info_unit_get_speed(info, tm);
+ float pspeed[2] = { px+10, py+h };
+ char sspeed[64]; sprintf(sspeed, "SPEED: %.2f", speed);
+ render_text_scaled(rend, sspeed, pspeed, t, 1);
+ h += 15;
+
+ float dps = info_unit_get_dps(info, tm);
+ float pdps[2] = { px+10, py+h };
+ char sdps[64]; sprintf(sdps, "DAMAGE PER TURN: %.2f", dps);
+ render_text_scaled(rend, sdps, pdps, t, 1);
+ h += 20;
+
+ float part[2] = { px+10, py+h };
+ render_text_scaled(rend, "ARMOR:", part, t, 1);
+ h += 15;
+
+ for (int i=0; i<7; i++) {
+ float ar = info_unit_get_armor(info, tm, i);
+ float par[2] = { px+10, py+h };
+ char sar[64]; sprintf(sar, "%s: %.1f%", info->damage_types[i], ar);
+ render_text_scaled(rend, sar, par, t, 1);
+ h += 15;
+ }
+ h += 5;
+}
+
+void render_view_chassis (SDL_Renderer* rend, txtd *t, int px, int py,
+ infos *info, int chassis, SDL_Texture *sprites)
+{
+ if (chassis != -1) {
+ float pname[2] = { px+10, py+10 };
+ char sname[64]; sprintf(sname, "%s",
+ info->chassis[chassis].name);
+ render_text_scaled(rend, sname, pname, t, 2);
+ float pweight[2] = { px+10, py+40 };
+ char sweight[64]; sprintf(sweight, "MAX WEIGHT: %0.0f",
+ info->chassis[chassis].weight_max);
+ render_text_scaled(rend, sweight, pweight, t, 1);
+ float php[2] = { px+10, py+55 };
+ char shp[64]; sprintf(shp, "HP: %0.1f",
+ info->chassis[chassis].hp);
+ render_text_scaled(rend, shp, php, t, 1);
+ float pspeed[2] = { px+10, py+70 };
+ char sspeed[64]; sprintf(sspeed, "SPEED: %0.2f tiles/turn",
+ info->chassis[chassis].speed);
+ render_text_scaled(rend, sspeed, pspeed, t, 1);
+
+ SDL_Rect srcRect = { chassis*32, 32, 32, 32 };
+ SDL_Rect dstRect = { px+300-32-10, py+10, 32, 32 };
+ SDL_RenderCopy(rend, sprites, &srcRect, &dstRect);
+ } else {
+ float pname[2] = { px+10, py+10 };
+ render_text_scaled(rend, "select a chassis...", pname, t, 1);
+ }
+}
+
+void render_view_battery (SDL_Renderer* rend, txtd *t, int px, int py,
+ infos *info, int batt)
+{
+ if (batt != -1) {
+ float pname[2] = { px+10, py+10 };
+ char sname[64]; sprintf(sname, "%s",
+ info->batteries[batt].name);
+ render_text_scaled(rend, sname, pname, t, 1);
+ float pweight[2] = { px+10, py+40 };
+ char sweight[64]; sprintf(sweight, "WEIGHT: %0.0f",
+ info->batteries[batt].weight);
+ render_text_scaled(rend, sweight, pweight, t, 1);
+ float pcapacity[2] = { px+10, py+55 };
+ char scapacity[64]; sprintf(scapacity, "CAPACITY: %0.1f",
+ info->batteries[batt].capacity);
+ render_text_scaled(rend, scapacity, pcapacity, t, 1);
+ float prech[2] = { px+10, py+70 };
+ char srech[64];
+ if (info->batteries[batt].recharge == 0) {
+ strcpy(srech, "NOT RECHARGEABLE");
+ } else {
+ strcpy(srech, "RECHARGEABLE");
+ }
+ render_text_scaled(rend, srech, prech, t, 1);
+ } else {
+ float pname[2] = { px+10, py+10 };
+ render_text_scaled(rend, "select a battery...", pname, t, 1);
+ }
+}
+
+
+void render_view_armor (SDL_Renderer* rend, txtd *t, int px, int py,
+ infos *info, int armor)
+{
+ if (armor != -1) {
+ float pname[2] = { px+10, py+10 };
+ char sname[64]; sprintf(sname, "%s", info->armors[armor].name);
+ render_text_scaled(rend, sname, pname, t, 1);
+ char sa[64]; int j=0;
+ char temp[16] = "red: ";
+ strcpy(sa+j, temp);
+ j += strlen(temp);
+ for (int i=0; i<7; i++) {
+ if (i<7-1) {
+ sprintf(temp, "%.0f, ", info->armors[armor].armor[i]);
+ } else {
+ sprintf(temp, "%.0f", info->armors[armor].armor[i]);
+ }
+ strcpy(sa+j, temp);
+ j += strlen(temp);
+ }
+ sa[j] = '\0';
+ float pa[2] = { px+10, py+25 };
+ render_text_scaled(rend, sa, pa, t, 1);
+ } else {
+ float pname[2] = { px+10, py+10 };
+ render_text_scaled(rend, "select an armor...", pname, t, 1);
+ }
+}
+
+void render_view_armor_detail (SDL_Renderer* rend, txtd *t, int px, int py,
+ infos *info, int armor)
+{
+ if (armor != -1) {
+ float pname[2] = { px+10, py+10 };
+ char sname[64]; sprintf(sname, "%s", info->armors[armor].name);
+ render_text_scaled(rend, sname, pname, t, 1);
+ float pweight[2] = { px+10, py+40 };
+ char sweight[64]; sprintf(sweight, "WEIGHT: %0.0f",
+ info->armors[armor].weight);
+ render_text_scaled(rend, sweight, pweight, t, 1);
+
+ float pred[2] = { px+10, py+60 };
+ render_text_scaled(rend, "DAMAGE REDUCTION", pred, t, 1);
+
+ int h=0;
+ for (int i=0; i<7; i++) {
+ if (info->armors[armor].armor[i] < 0.001) continue;
+ float pa[2] = { px+10, py+75+h*15 };
+ char sa[64]; sprintf(sa, "%s: %.1f%",
+ info->damage_types[i], info->armors[armor].armor[i]);
+ render_text_scaled(rend, sa, pa, t, 1);
+ h++;
+ }
+ } else {
+ render_view_weapon(rend, t, px, py, info, armor);
+ }
+}
+
+
+void render_view_weapon (SDL_Renderer* rend, txtd *t, int px, int py,
+ infos *info, int weapon)
+{
+ if (weapon != -1) {
+ float pname[2] = { px+10, py+10 };
+ char sname[64]; sprintf(sname, "%s",
+ info->weapons[weapon].name);
+ render_text_scaled(rend, sname, pname, t, 1);
+ float pweight[2] = { px+10, py+30 };
+ char sweight[64]; sprintf(sweight, "WEIGHT: %.0f",
+ info->weapons[weapon].weight);
+ render_text_scaled(rend, sweight, pweight, t, 1);
+ float ptype[2] = { px+10, py+45 };
+ char stype[64]; sprintf(stype, "DAMAGE TYPE: %s",
+ info->damage_types[info->weapons[weapon].damage_type]);
+ render_text_scaled(rend, stype, ptype, t, 1);
+ float pdamage[2] = { px+10, py+60 };
+ char sdamage[64]; sprintf(sdamage, "DAMAGE: %.0f",
+ info->weapons[weapon].damage);
+ render_text_scaled(rend, sdamage, pdamage, t, 1);
+ float prange[2] = { px+10, py+75 };
+ char srange[64]; sprintf(srange, "RANGE: %.0f",
+ info->weapons[weapon].range);
+ render_text_scaled(rend, srange, prange, t, 1);
+ float pcool[2] = { px+10, py+90 };
+ char scool[64]; sprintf(scool, "COOLDOWN: %.0f",
+ info->weapons[weapon].cooldown);
+ render_text_scaled(rend, scool, pcool, t, 1);
+ } else {
+ float pname[2] = { px+10, py+10 };
+ render_text_scaled(rend, "select a weapon...", pname, t, 1);
+ }
+}
+
+void render_view_weapon_detail (SDL_Renderer* rend, txtd *t,
+ int px, int py, infos *info, int weapon)
+{
+ if (weapon != -1) {
+ float pname[2] = { px+10, py+10 };
+ char sname[64]; sprintf(sname, "%s",
+ info->weapons[weapon].name);
+ render_text_scaled(rend, sname, pname, t, 1);
+ float pweight[2] = { px+10, py+30 };
+ char sweight[64]; sprintf(sweight, "WEIGHT: %.0f",
+ info->weapons[weapon].weight);
+ render_text_scaled(rend, sweight, pweight, t, 1);
+ float ptype[2] = { px+10, py+45 };
+ char stype[64]; sprintf(stype, "DAMAGE TYPE: %s",
+ info->damage_types[info->weapons[weapon].damage_type]);
+ render_text_scaled(rend, stype, ptype, t, 1);
+ float pdamage[2] = { px+10, py+60 };
+ char sdamage[64]; sprintf(sdamage, "DAMAGE: %.0f",
+ info->weapons[weapon].damage);
+ render_text_scaled(rend, sdamage, pdamage, t, 1);
+ float prange[2] = { px+10, py+75 };
+ char srange[64]; sprintf(srange, "RANGE: %.0f",
+ info->weapons[weapon].range);
+ render_text_scaled(rend, srange, prange, t, 1);
+ float pcool[2] = { px+10, py+90 };
+ char scool[64]; sprintf(scool, "COOLDOWN: %.0f",
+ info->weapons[weapon].cooldown);
+ render_text_scaled(rend, scool, pcool, t, 1);
+ } else {
+ render_view_weapon(rend, t, px, py, info, weapon);
+ }
+}
+
+
+void render_view_aug (SDL_Renderer* rend, txtd *t, int px, int py,
+ infos *info, int aug)
+{
+ if (aug != -1) {
+ float pname[2] = { px+10, py+10 };
+ char sname[64]; sprintf(sname, "%s",
+ info->augs[aug].name);
+ render_text_scaled(rend, sname, pname, t, 1);
+ float pweight[2] = { px+10, py+30 };
+ char sweight[64]; sprintf(sweight, "WEIGHT: %.0f",
+ info->augs[aug].weight);
+ render_text_scaled(rend, sweight, pweight, t, 1);
+ } else {
+ float pname[2] = { px+10, py+10 };
+ render_text_scaled(rend, "select an augment...", pname, t, 1);
+ }
+}
+
+void render_view_aug_detail (SDL_Renderer* rend, txtd *t, int px, int py,
+ infos *info, int aug)
+{
+ if (aug != -1) {
+ float h = 10;
+ float pname[2] = { px+10, py+h };
+ char sname[64]; sprintf(sname, "%s",
+ info->augs[aug].name);
+ render_text_scaled(rend, sname, pname, t, 1);
+ h += 20;
+
+ float pweight[2] = { px+10, py+h };
+ char sweight[64]; sprintf(sweight, "WEIGHT: %.0f",
+ info->augs[aug].weight);
+ render_text_scaled(rend, sweight, pweight, t, 1);
+ h += 15;
+
+ float range = info->augs[aug].add_range;
+ if (range != 0) {
+ float p[2] = { px+10, py+h };
+ char s[64]; sprintf(s, "RANGE: %.1f", range);
+ render_text_scaled(rend, s, p, t, 1);
+ h += 15;
+ }
+
+ float cooldown = info->augs[aug].add_cooldown;
+ if (cooldown != 0) {
+ float p[2] = { px+10, py+h };
+ char s[64]; sprintf(s, "COOLDOWN: %.2f", cooldown);
+ render_text_scaled(rend, s, p, t, 1);
+ h += 15;
+ }
+
+ float speed = info->augs[aug].add_speed;
+ if (speed != 0) {
+ float p[2] = { px+10, py+h };
+ char s[64]; sprintf(s, "SPEED: %.2f", speed);
+ render_text_scaled(rend, s, p, t, 1);
+ h += 15;
+ }
+
+ float hp = info->augs[aug].add_hp;
+ if (hp != 0) {
+ float p[2] = { px+10, py+h };
+ char s[64]; sprintf(s, "HP: %.1f", hp);
+ render_text_scaled(rend, s, p, t, 1);
+ h += 15;
+ }
+
+ h += 5;
+
+ float sum = 0;
+ for (int i=0; i<7; i++) sum += fabs(info->augs[aug].add_armor[i]);
+ if (sum != 0) {
+ float p[2] = { px+10, py+h };
+ render_text_scaled(rend, "ARMOR: ", p, t, 1);
+ h += 15;
+ for (int i=0; i<7; i++) {
+ if (info->augs[aug].add_armor[i] == 0) continue;
+ float pa[2] = { px+10, py+h };
+ char sa[64]; sprintf(sa, "%s: %.1f%",
+ info->damage_types[i], info->augs[aug].add_armor[i]);
+ render_text_scaled(rend, sa, pa, t, 1);
+ h += 15;
+ }
+ }
+
+ sum = 0;
+ for (int i=0; i<7; i++) sum += fabs(info->augs[aug].add_damage[i]);
+ if (sum != 0) {
+ float p[2] = { px+10, py+h };
+ render_text_scaled(rend, "DAMAGE: ", p, t, 1);
+ h += 15;
+ for (int i=0; i<7; i++) {
+ if (info->augs[aug].add_damage[i] == 0) continue;
+ float pa[2] = { px+10, py+h };
+ char sa[64]; sprintf(sa, "%s: %.1f%",
+ info->damage_types[i], info->augs[aug].add_damage[i]);
+ render_text_scaled(rend, sa, pa, t, 1);
+ h += 15;
+ }
+ }
+ } else {
+ render_view_aug(rend, t, px, py, info, aug);
+ }
+}
+
+
+void render_view_brain (SDL_Renderer* rend, txtd *t, int px, int py,
+ infos *info, int brain)
+{
+ if (brain != -1) {
+ float pname[2] = { px+10, py+10 };
+ char sname[64]; sprintf(sname, "%s",
+ info->brains[brain].name);
+ render_text_scaled(rend, sname, pname, t, 1);
+ } else {
+ float pname[2] = { px+10, py+10 };
+ render_text_scaled(rend, "select a controller...", pname, t, 1);
+ }
+}
+
+
+void render_view_template (SDL_Renderer* rend, txtd *t, int px, int py,
+ infos *info, int temp)
+{
+ button b = { "edit", 4, { px, py } };
+ render_button(rend, t, &b);
+ float wedit = get_text_width("edit", t);
+
+ button b1 = { "place", 4, { px+wedit+2*4+5, py } };
+ render_button(rend, t, &b1);
+ float wplace = get_text_width("place", t);
+
+ float pname[2] = { wplace+wedit+4*4+10+px, py+4 };
+ char *sname = info->chassis[info->templates[temp].chassis].name;
+ render_text_scaled(rend, sname, pname, t, 1);
+} \ No newline at end of file