Vastly improve UI
This commit is contained in:
@ -8,6 +8,17 @@
|
||||
#include "color.h"
|
||||
#include "assert/assert.h"
|
||||
|
||||
const color4f_t COLOR4F_COLOR_MAP[COLOR_COUNT] = {
|
||||
COLOR4F_BLACK,
|
||||
COLOR4F_WHITE,
|
||||
COLOR4F(0.8f, 0.0f, 0.0f, 1.0f),
|
||||
COLOR4F(0.0f, 0.5f, 0.0f, 1.0f),
|
||||
COLOR4F(0.0f, 0.0f, 0.8f, 1.0f),
|
||||
COLOR4F(0.8f, 0.8f, 0.0f, 1.0f),
|
||||
COLOR4F(0.8f, 0.0f, 0.8f, 1.0f),
|
||||
COLOR4F(0.0f, 0.8f, 0.8f, 1.0f)
|
||||
};
|
||||
|
||||
void color4fCopy(const color4f_t src, color4f_t dest) {
|
||||
memcpy(dest, src, sizeof(color4f_t));
|
||||
}
|
||||
}
|
@ -8,6 +8,9 @@
|
||||
#pragma once
|
||||
#include "dawn.h"
|
||||
|
||||
typedef float_t color3f_t[3];
|
||||
typedef float_t color4f_t[4];
|
||||
|
||||
// Simple colors, used by the frame system.
|
||||
#define COLOR_BLACK 0x00
|
||||
#define COLOR_WHITE 0x01
|
||||
@ -18,10 +21,7 @@
|
||||
#define COLOR_MAGENTA 0x06
|
||||
#define COLOR_CYAN 0x07
|
||||
|
||||
typedef float_t color3f_t[3];
|
||||
typedef float_t color4f_t[4];
|
||||
|
||||
typedef color4f_t color_t;
|
||||
#define COLOR_COUNT COLOR_CYAN+1
|
||||
|
||||
#define COLOR3F(r,g,b) ((color3f_t){ r, g, b })
|
||||
#define COLOR3F_RED COLOR3F(1, 0, 0)
|
||||
@ -68,6 +68,8 @@ typedef color4f_t color_t;
|
||||
#define COLOR4F_TRANSPARENT_WHITE COLOR4F(1, 1, 1, 0)
|
||||
#define COLOR4F_TRANSPARENT COLOR4F_TRANSPARENT_BLACK
|
||||
|
||||
extern const color4f_t COLOR4F_COLOR_MAP[COLOR_COUNT];
|
||||
|
||||
/**
|
||||
* Copies a color.
|
||||
*
|
||||
|
@ -17,28 +17,7 @@ uint8_t FRAME_COLOR[FRAME_HEIGHT * FRAME_WIDTH];
|
||||
|
||||
void frameInit() {
|
||||
memset(FRAME_BUFFER, ' ', FRAME_HEIGHT * FRAME_WIDTH);
|
||||
|
||||
// Draw UI top and bottom borders
|
||||
for(uint16_t x = 0; x < FRAME_WIDTH; x++) {
|
||||
char_t c = x == 0 || x == FRAME_WIDTH-1 ? '+' : '-';
|
||||
int32_t i = (FRAME_HEIGHT - 1) * FRAME_WIDTH + x;
|
||||
FRAME_BUFFER[i] = c;
|
||||
FRAME_COLOR[i] = COLOR_WHITE;
|
||||
|
||||
i = (FRAME_HEIGHT - FRAME_BOTTOM_UI_HEIGHT) * FRAME_WIDTH + x;
|
||||
FRAME_BUFFER[i] = c;
|
||||
FRAME_COLOR[i] = COLOR_WHITE;
|
||||
}
|
||||
|
||||
for(uint16_t y = FRAME_HEIGHT - FRAME_BOTTOM_UI_HEIGHT + 1; y < FRAME_HEIGHT - 1; y++) {
|
||||
int32_t i = y * FRAME_WIDTH;
|
||||
FRAME_BUFFER[i] = '|';
|
||||
FRAME_COLOR[i] = COLOR_WHITE;
|
||||
|
||||
i = y * FRAME_WIDTH + FRAME_WIDTH - 1;
|
||||
FRAME_BUFFER[i] = '|';
|
||||
FRAME_COLOR[i] = COLOR_WHITE;
|
||||
}
|
||||
frameUIReset();
|
||||
}
|
||||
|
||||
void frameUpdate() {
|
||||
@ -74,21 +53,41 @@ void frameUpdate() {
|
||||
FRAME_BUFFER[i++] = symbolGetCharByTile(tile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// UI Area.
|
||||
if(textboxIsOpen()) {
|
||||
const char_t *text = TEXTBOX.text;
|
||||
for(uint16_t x = 1; x < FRAME_WIDTH - 1; x++) {
|
||||
if(*text == '\0') break;
|
||||
FRAME_BUFFER[(FRAME_HEIGHT - 2) * FRAME_WIDTH + x] = *text++;
|
||||
FRAME_COLOR[(FRAME_HEIGHT - 2) * FRAME_WIDTH + x] = COLOR_WHITE;
|
||||
}
|
||||
FRAME_BUFFER[(FRAME_HEIGHT * FRAME_WIDTH) - 4] = ' ';
|
||||
FRAME_BUFFER[(FRAME_HEIGHT * FRAME_WIDTH) - 3] = '>';
|
||||
FRAME_BUFFER[(FRAME_HEIGHT * FRAME_WIDTH) - 2] = ' ';
|
||||
} else {
|
||||
FRAME_BUFFER[(FRAME_HEIGHT * FRAME_WIDTH) - 4] = '-';
|
||||
FRAME_BUFFER[(FRAME_HEIGHT * FRAME_WIDTH) - 3] = '-';
|
||||
FRAME_BUFFER[(FRAME_HEIGHT * FRAME_WIDTH) - 2] = '-';
|
||||
void frameUIReset() {
|
||||
memset(
|
||||
FRAME_BUFFER + (FRAME_HEIGHT - FRAME_BOTTOM_UI_HEIGHT) * FRAME_WIDTH,
|
||||
' ',
|
||||
FRAME_WIDTH * FRAME_BOTTOM_UI_HEIGHT
|
||||
);
|
||||
|
||||
memset(
|
||||
FRAME_COLOR + (FRAME_HEIGHT - FRAME_BOTTOM_UI_HEIGHT) * FRAME_WIDTH,
|
||||
COLOR_WHITE,
|
||||
FRAME_WIDTH * FRAME_BOTTOM_UI_HEIGHT
|
||||
);
|
||||
|
||||
// Draw UI top and bottom borders
|
||||
for(uint16_t x = 0; x < FRAME_WIDTH; x++) {
|
||||
char_t c = x == 0 || x == FRAME_WIDTH-1 ? '+' : '-';
|
||||
int32_t i = (FRAME_HEIGHT - 1) * FRAME_WIDTH + x;
|
||||
FRAME_BUFFER[i] = c;
|
||||
|
||||
i = (FRAME_HEIGHT - FRAME_BOTTOM_UI_HEIGHT) * FRAME_WIDTH + x;
|
||||
FRAME_BUFFER[i] = c;
|
||||
}
|
||||
|
||||
// Draw UI left and right borders
|
||||
for(
|
||||
uint16_t y = FRAME_HEIGHT - FRAME_BOTTOM_UI_HEIGHT + 1;
|
||||
y < FRAME_HEIGHT - 1;
|
||||
y++
|
||||
) {
|
||||
int32_t i = y * FRAME_WIDTH;
|
||||
FRAME_BUFFER[i] = '|';
|
||||
|
||||
i = y * FRAME_WIDTH + FRAME_WIDTH - 1;
|
||||
FRAME_BUFFER[i] = '|';
|
||||
}
|
||||
}
|
@ -14,7 +14,7 @@
|
||||
#define FRAME_WIDTH FRAME_PIXEL_WIDTH/FRAME_CHAR_SIZE
|
||||
#define FRAME_HEIGHT FRAME_PIXEL_HEIGHT/FRAME_CHAR_SIZE
|
||||
|
||||
#define FRAME_BOTTOM_UI_HEIGHT 6
|
||||
#define FRAME_BOTTOM_UI_HEIGHT 8
|
||||
|
||||
extern char_t FRAME_BUFFER[FRAME_HEIGHT * FRAME_WIDTH];
|
||||
extern uint8_t FRAME_COLOR[FRAME_HEIGHT * FRAME_WIDTH];
|
||||
@ -27,4 +27,9 @@ void frameInit();
|
||||
/**
|
||||
* Updates the terminal frame.
|
||||
*/
|
||||
void frameUpdate();
|
||||
void frameUpdate();
|
||||
|
||||
/**
|
||||
* Resets the UI area of the frame.
|
||||
*/
|
||||
void frameUIReset();
|
@ -28,7 +28,6 @@ char_t symbolGetCharByTile(const tile_t tile) {
|
||||
return '#';
|
||||
|
||||
case TILE_ID_WATER:
|
||||
// Take remainder
|
||||
int32_t j = (int32_t)(TIME.time * 2) % 4;
|
||||
switch(j) {
|
||||
case 0: return '/';
|
||||
|
Reference in New Issue
Block a user