You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
3.3 KiB
C
130 lines
3.3 KiB
C
#include <raylib.h>
|
|
#include "timer.h"
|
|
#include "timer_renderer.h"
|
|
#include "segment_renderer.h"
|
|
#include "controller.h"
|
|
#include "splits.h"
|
|
#include <stdio.h>
|
|
|
|
#if defined(PLATFORM_DESKTOP)
|
|
#define GLSL_VERSION 330
|
|
#else
|
|
#define GLSL_VERSION 100
|
|
#endif
|
|
|
|
#define ERROR "Error: %s\n"
|
|
|
|
#define TXTCOL_LENGTH 64
|
|
|
|
//global variables
|
|
int windowWidth = 420;
|
|
int windowHeight = 640;
|
|
|
|
int remote_state = 0;
|
|
|
|
Font font;
|
|
|
|
//extern this in other files
|
|
void error(const char *msg) {
|
|
fprintf(stderr, ERROR, msg);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
//extern void print_xml(const char *path);
|
|
//testing control function
|
|
void control(void) {
|
|
static int last_state;
|
|
if (last_state != remote_state)
|
|
//ctrl_pause(&timer);
|
|
|
|
//printf("%d, %d\n", last_state, remote_state);
|
|
last_state = remote_state;
|
|
}
|
|
|
|
int main(int argc, char *argv[]) {
|
|
if (argc < 2) {
|
|
error("gimme file");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
segment_list segs = open_splits_file(argv[1]);
|
|
|
|
//size of window can be determined by height of all components visible
|
|
InitWindow(windowWidth, windowHeight, "Ghost");
|
|
SetTargetFPS(60);
|
|
|
|
Image blank = GenImageColor(640, 420, BLANK);
|
|
Texture2D texture = LoadTextureFromImage(blank);
|
|
Shader shader = LoadShader(0, "shaders/frag.glsl");
|
|
UnloadImage(blank);
|
|
|
|
font = LoadFontEx("/usr/share/fonts/CozetteVector.ttf", 400, 0, 0);
|
|
GenTextureMipmaps(&font.texture);
|
|
|
|
ghost ghost = ghost_new();
|
|
|
|
ctrl_binder *binder = create_ctrl_binder(ghost, &segs);
|
|
ctrl_bind_segments(binder, &segs);
|
|
|
|
//make a layout manager for these
|
|
timer_renderer *tr = create_timer_renderer(
|
|
ghost,
|
|
(Vector2){0.0f, windowHeight/8 * 6},
|
|
(Vector2){(float)windowWidth, (float)windowHeight/8}
|
|
);
|
|
|
|
//segment_renderer *sr = create_segment_renderer(segs, 0.0f, 0.0f);
|
|
|
|
ctrl_bind_timer_renderer(binder, tr);
|
|
//ctrl_bind_segment_renderer(binder, sr);
|
|
|
|
text_column *seg_names = txtcol_new(segs.count, TXTCOL_LENGTH);
|
|
text_column *seg_delta = txtcol_new(segs.count, TXTCOL_LENGTH);
|
|
text_column *seg_times = txtcol_new(segs.count, TXTCOL_LENGTH);
|
|
|
|
char buffer[64];
|
|
for (int i = 0; i < segs.count; i++) {
|
|
time_unparse(buffer, 64, &segs.segments[i].realtime);
|
|
txtcol_set(seg_names, segs.segments[i].name, i);
|
|
txtcol_set(seg_delta, " ", i);
|
|
txtcol_set(seg_times, buffer, i);
|
|
txt_pos(seg_names->column[i], (Vector2){0, i * font.baseSize/16});
|
|
txt_pos(seg_delta->column[i], (Vector2){txtcol_widest(seg_names) + 10, i * font.baseSize/16});
|
|
txt_pos(seg_times->column[i], (Vector2){0, i * font.baseSize/16});
|
|
}
|
|
|
|
//lol
|
|
txtcol_adjacent(seg_names, seg_delta, 10);
|
|
txtcol_adjacent(seg_delta, seg_times, 10);
|
|
|
|
scroller *scr1 = scroll_new(15, seg_names);
|
|
scroller *scr2 = scroll_new(15, seg_delta);
|
|
scroller *scr3 = scroll_new(15, seg_times);
|
|
|
|
ctrl_add_scroller(binder, scr1);
|
|
ctrl_add_scroller(binder, scr2);
|
|
ctrl_add_scroller(binder, scr3);
|
|
|
|
txtcol_op(seg_times, txt_left);
|
|
|
|
float fontSize = (float)font.baseSize;
|
|
|
|
while (!WindowShouldClose()) {
|
|
ghost_tick(ghost);
|
|
|
|
if (IsKeyPressed(KEY_P)) {
|
|
ctrl_start(binder);
|
|
txtcol_op(seg_times, txt_left);
|
|
}
|
|
|
|
BeginDrawing();
|
|
ClearBackground(BLACK);
|
|
ctrl_scroller_op(binder, scroll_draw); //yummy
|
|
render_timer(tr);
|
|
EndDrawing();
|
|
}
|
|
|
|
ghost_delete(ghost);
|
|
CloseWindow();
|
|
}
|