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

#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();
}