show table selection
This commit is contained in:
+17
-5
@@ -505,32 +505,44 @@ fn bool updateAndRender(TuiState* tui, void* s, u8* input_buffer, u64 loop_count
|
|||||||
// 2. draw the header label
|
// 2. draw the header label
|
||||||
str label = "Create Character";
|
str label = "Create Character";
|
||||||
renderStrToBuffer(tui->frame_buffer, (screen_dimensions.width - (strlen(label)+4))/2, ++line, label, screen_dimensions);
|
renderStrToBuffer(tui->frame_buffer, (screen_dimensions.width - (strlen(label)+4))/2, ++line, label, screen_dimensions);
|
||||||
|
|
||||||
line++;
|
line++;
|
||||||
// TODO: game-specific character creation stuff
|
|
||||||
// 3. draw the ship choices
|
// 3. draw the ship choices
|
||||||
str ship_label = "Choose your starting ship:";
|
str ship_label = "Choose your starting ship:";
|
||||||
|
renderStrToBuffer(tui->frame_buffer, 8, ++line, ship_label, screen_dimensions);
|
||||||
|
line++;
|
||||||
|
str ship_desc = "You have 10,000 credits to use as a down-payment on a ship.";
|
||||||
|
renderStrToBuffer(tui->frame_buffer, 6, ++line, ship_desc, screen_dimensions);
|
||||||
|
line++;
|
||||||
line++;
|
line++;
|
||||||
// the table
|
// the table
|
||||||
str cols[SHIP_DETAIL_COUNT] = {"Type", "Cost", "DriveEff", "LifeSupp", "V.Cargo", "C.Cargo", "Passengers", "SmugglersHold"};
|
|
||||||
u32 table_x = 5;
|
u32 table_x = 5;
|
||||||
u32 table_col_pad = 1;
|
u32 table_col_pad = 1;
|
||||||
// render the headers
|
// render the headers
|
||||||
u32 col_x_pos = 0;
|
u32 col_x_pos = 0;
|
||||||
for (u32 i = 0; i < SHIP_DETAIL_COUNT; col_x_pos += SHIP_FIELDS[i].width+table_col_pad, i++) {
|
for (u32 i = 0; i < SHIP_DETAIL_COUNT; col_x_pos += SHIP_FIELDS[i].width+table_col_pad, i++) {
|
||||||
renderStrToBuffer(tui->frame_buffer, table_x+col_x_pos, line, cols[i], screen_dimensions);
|
renderStrToBuffer(tui->frame_buffer, table_x+col_x_pos, line, SHIP_FIELDS[i].name, screen_dimensions);
|
||||||
for (u32 ii = 0; ii < SHIP_FIELDS[i].width; ii++) {
|
for (u32 ii = 0; ii < SHIP_FIELDS[i].width; ii++) {
|
||||||
renderUtf8CharToBuffer(tui->frame_buffer, table_x+col_x_pos+ii, line+1, "━", screen_dimensions);
|
renderUtf8CharToBuffer(tui->frame_buffer, table_x+col_x_pos+ii, line+1, "━", screen_dimensions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
line++;
|
line++;
|
||||||
line++;
|
line++;
|
||||||
// render the columns
|
// render the rows
|
||||||
char tmp_buffer[32] = {0};
|
char tmp_buffer[32] = {0};
|
||||||
for (u32 i = 0; i < ShipType_Count; line++, i++) {
|
for (u32 i = 0; i < ShipType_Count; line++, i++) {
|
||||||
col_x_pos = 0;
|
col_x_pos = 0;
|
||||||
ShipTemplate ship = SHIPS[i];
|
ShipTemplate ship = SHIPS[i];
|
||||||
|
// render the columns
|
||||||
for (u32 ii = 0; ii < SHIP_DETAIL_COUNT; col_x_pos += SHIP_FIELDS[ii].width+table_col_pad, ii++) {
|
for (u32 ii = 0; ii < SHIP_DETAIL_COUNT; col_x_pos += SHIP_FIELDS[ii].width+table_col_pad, ii++) {
|
||||||
|
if (i == state->menu.selected_index) {
|
||||||
|
for (u32 iii = 0; iii < SHIP_FIELDS[ii].width+table_col_pad; iii++) {
|
||||||
|
u32 pos = XYToPos(table_x+col_x_pos+iii, line, screen_dimensions.width);
|
||||||
|
tui->frame_buffer[pos].background = ANSI_WHITE;
|
||||||
|
tui->frame_buffer[pos].foreground = ANSI_BLACK;
|
||||||
|
tui->frame_buffer[pos].bytes[0] = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
FieldDescriptor details = SHIP_FIELDS[ii];
|
FieldDescriptor details = SHIP_FIELDS[ii];
|
||||||
void *field_ptr = (char *)&ship + details.offset;
|
void *field_ptr = (char *)&ship + details.offset;
|
||||||
switch (details.type) {
|
switch (details.type) {
|
||||||
|
|||||||
Reference in New Issue
Block a user