fix overlap, save splits

main
sandyx 1 year ago
parent 7339d5b1eb
commit ca2c786c1e

@ -26,4 +26,5 @@ out = both.map { |x|
name_tag = wrap("Name", x[0].strip) name_tag = wrap("Name", x[0].strip)
segment_tag = wrap("Segment", name_tag + splittimes) segment_tag = wrap("Segment", name_tag + splittimes)
} }
File.write("output.txt", out.join("")) File.write("output.txt", out.join(""))

@ -1,9 +1,18 @@
#include <stdio.h>
#include <stdlib.h>
#include "controller.h" #include "controller.h"
#include "segment_renderer.h" #include "segment_renderer.h"
#include <stdio.h> #include "file.h"
#define debug(x) printf("DEBUG: %s\n", (x)); #define debug(x) printf("DEBUG: %s\n", (x));
enum {
SEGNAME = 0,
SEGDELTA,
SEGTIME
};
int *splits = 0; int *splits = 0;
//pause for igt only //pause for igt only
@ -32,6 +41,7 @@ inline void ctrl_pause(ghost timer) {
void ctrl_record_segment(ctrl_binder *cb) { void ctrl_record_segment(ctrl_binder *cb) {
ghost ghost = cb->timer; ghost ghost = cb->timer;
segment *segment = &cb->live_sl->segments[cb->current_segment]; segment *segment = &cb->live_sl->segments[cb->current_segment];
cb->live_sl->segments[cb->current_segment].name = cb->rec_sl->segments[cb->current_segment].name;
segment->realtime = ghtimer_time(ghost.rta); segment->realtime = ghtimer_time(ghost.rta);
segment->gametime = ghtimer_time(ghost.igt); segment->gametime = ghtimer_time(ghost.igt);
@ -67,12 +77,26 @@ void ctrl_record_segment(ctrl_binder *cb) {
cb->delta_sl->segments[cb->current_segment].gametime = subts(segment->gametime, segment->gametime); cb->delta_sl->segments[cb->current_segment].gametime = subts(segment->gametime, segment->gametime);
} }
//a quick fix for text overlapping
void ctrl_adjust_scrollers(ctrl_binder *cb) {
scroller *sc_names, *sc_delta, *sc_times;
sc_names = cb->scrollers[SEGNAME];
sc_delta = cb->scrollers[SEGDELTA];
sc_times = cb->scrollers[SEGTIME];
for (int i = sc_names->view_index; i < sc_names->count + sc_names->view_index; i++) {
txt_pos(sc_delta->txtcol->column[i], (Vector2){scroll_widest_visible(sc_names) + 15, sc_delta->txtcol->column[i]->pos.y});
}
}
//this function handles everything //this function handles everything
void ctrl_start(ctrl_binder *cb) { void ctrl_start(ctrl_binder *cb) {
//vars for easier code reading //vars for easier code reading
segment *current_segment = &cb->live_sl->segments[cb->current_segment]; segment *current_segment = &cb->live_sl->segments[cb->current_segment];
if (cb->timer.rta->running) { if (cb->timer.rta->running) {
if (cb->rec_sl != NULL) { if (cb->rec_sl != NULL) {
ctrl_adjust_scrollers(cb);
if (cb->current_segment < cb->live_sl->count) { if (cb->current_segment < cb->live_sl->count) {
ctrl_record_segment(cb); ctrl_record_segment(cb);
} else { } else {
@ -85,10 +109,14 @@ void ctrl_start(ctrl_binder *cb) {
} else { } else {
STOP: STOP:
//save
char *data = save_fmt(cb->live_sl);
file_save(data, "save.lss");
cb->current_segment = 0; cb->current_segment = 0;
ghost_op(cb->timer, ghtimer_stop); ghost_op(cb->timer, ghtimer_stop);
ctrl_scroller_op(cb, scroll_reset); ctrl_scroller_op(cb, scroll_reset);
txtcol_op(cb->scrollers[1]->txtcol, txt_clear); //clear deltas txtcol_op(cb->scrollers[SEGDELTA]->txtcol, txt_clear); //clear deltas
} }
//pause timer if last split //pause timer if last split

@ -0,0 +1,22 @@
#include <stdio.h>
#include <stdlib.h>
#include "file.h"
char buffer[32];
#define file_log(x) printf("FILE: %s\n", (x))
#define file_fmt(x) sprintf(buffer, "%d", (x))
void file_save(char *data, char *filename) {
file_log("Saving file...");
char buffer[16000];
char *bfp = &buffer[0];
sprintf(bfp, "ruby src/test.rb %s %s", data, filename);
printf("SYSTEM: %s\n", bfp);
system(bfp);
}
void test(void) {
file_fmt(system("ruby src/test.rb"));
file_log(buffer);
}

@ -1,6 +1,14 @@
#ifndef FILE_H #ifndef FILE_H
#define FILE_H #define FILE_H
//#include <stdio.h>
typedef struct lss_file {
//FILE *lss;
char *filename;
char *data;
} lss_file;
void file_save(char *data, char *filename);
#endif #endif

@ -4,6 +4,7 @@
#include "segment_renderer.h" #include "segment_renderer.h"
#include "controller.h" #include "controller.h"
#include "splits.h" #include "splits.h"
#include "file.h"
#include <stdio.h> #include <stdio.h>
#if defined(PLATFORM_DESKTOP) #if defined(PLATFORM_DESKTOP)
@ -41,6 +42,16 @@ void control(void) {
last_state = remote_state; last_state = remote_state;
} }
/*
autosplitter
for accuracy have the timer and memory scanner on separate threads
the timer and scanner would each have their own tickrate
the scanner acts as its own controller for the timer
calling timer_pause and timer_unpause
*/
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
if (argc < 2) { if (argc < 2) {
error("gimme file"); error("gimme file");
@ -58,7 +69,7 @@ int main(int argc, char *argv[]) {
Shader shader = LoadShader(0, "shaders/frag.glsl"); Shader shader = LoadShader(0, "shaders/frag.glsl");
UnloadImage(blank); UnloadImage(blank);
font = LoadFontEx("/usr/share/fonts/CozetteVector.ttf", 400, 0, 0); font = LoadFontEx("/usr/share/fonts/dejavu/DejaVuSans.ttf", 400, 0, 0);
GenTextureMipmaps(&font.texture); GenTextureMipmaps(&font.texture);
ghost ghost = ghost_new(); ghost ghost = ghost_new();
@ -89,13 +100,13 @@ int main(int argc, char *argv[]) {
txtcol_set(seg_delta, " ", i); txtcol_set(seg_delta, " ", i);
txtcol_set(seg_times, buffer, i); txtcol_set(seg_times, buffer, i);
txt_pos(seg_names->column[i], (Vector2){0, i * font.baseSize/16}); 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_delta->column[i], (Vector2){txtcol_widest(seg_names), i * font.baseSize/16});
txt_pos(seg_times->column[i], (Vector2){0, i * font.baseSize/16}); txt_pos(seg_times->column[i], (Vector2){0, i * font.baseSize/16});
} }
//lol //lol
txtcol_adjacent(seg_names, seg_delta, 10); //txtcol_adjacent(seg_names, seg_delta, 10);
txtcol_adjacent(seg_delta, seg_times, 10); //txtcol_adjacent(seg_delta, seg_times, 10);
scroller *scr1 = scroll_new(15, seg_names); scroller *scr1 = scroll_new(15, seg_names);
scroller *scr2 = scroll_new(15, seg_delta); scroller *scr2 = scroll_new(15, seg_delta);
@ -112,11 +123,19 @@ int main(int argc, char *argv[]) {
while (!WindowShouldClose()) { while (!WindowShouldClose()) {
ghost_tick(ghost); ghost_tick(ghost);
//need to make an input handler
//so the loop doesnt get cluttered
if (IsKeyPressed(KEY_P)) { if (IsKeyPressed(KEY_P)) {
ctrl_start(binder); ctrl_start(binder);
//ctrl_adjust_scrollers(binder);
txtcol_op(seg_times, txt_left); txtcol_op(seg_times, txt_left);
} }
if (IsKeyPressed(KEY_S)) {
char *data = save_fmt(&segs);
file_save(data, "rubytest.lss");
}
BeginDrawing(); BeginDrawing();
ClearBackground(BLACK); ClearBackground(BLACK);
ctrl_scroller_op(binder, scroll_draw); //yummy ctrl_scroller_op(binder, scroll_draw); //yummy

@ -135,6 +135,21 @@ void txtcol_adjacent(text_column *tc1, text_column *tc2, int offset) {
tc2->pos.x = tc1->pos.x + m.x + offset; tc2->pos.x = tc1->pos.x + m.x + offset;
} }
//old save function
void txtcol_save(text_column *tc) {
FILE *file = fopen("save.txt", "w");
if (file == NULL) {
return;
}
for (int i = 0; i < tc->count; i++) {
fwrite(tc->column[i]->string, 1, strlen(tc->column[i]->string), file);
fwrite("\n", 1, 1, file);
}
fclose(file);
}
//left justify a txtcol //left justify a txtcol
//scroller funcs //scroller funcs
@ -182,10 +197,21 @@ void scroll_reset(scroller *s) {
void scroll_draw(scroller *s) { void scroll_draw(scroller *s) {
for (int i = s->view_index; i < s->count + s->view_index; i++) { for (int i = s->view_index; i < s->count + s->view_index; i++) {
txt_draw(txtcol_get(s->txtcol, i)); txt_draw(txtcol_get(s->txtcol, i));
//txt_print(txtcol_get(s->txtcol, i));
} }
} }
int scroll_widest_visible(scroller *s) {
int widest = 0;
for (int i = s->view_index; i < s->count + s->view_index; i++) {
int w = txt_width(s->txtcol->column[i]);
if (widest < w) {
widest = w;
}
}
return widest;
}
void destroy_scroller(scroller *s) { void destroy_scroller(scroller *s) {
free(s); free(s);
} }

@ -31,6 +31,7 @@ void txt_print(text *t);
void txt_color(text *t, Color color); void txt_color(text *t, Color color);
void txt_pos(text *t, Vector2 pos); void txt_pos(text *t, Vector2 pos);
void txt_left(text *t); void txt_left(text *t);
int txt_width(text *t);
void txt_clear(text *t); void txt_clear(text *t);
//a list of text structs //a list of text structs
@ -51,6 +52,7 @@ int txtcol_widest(text_column *tc);
void txtcol_op(text_column *tc, void (*op)(text *)); void txtcol_op(text_column *tc, void (*op)(text *));
void txtcol_adjacent(text_column *tc1, text_column *tc2, int offset); void txtcol_adjacent(text_column *tc1, text_column *tc2, int offset);
//void txtcol_left(text_column *tc, int offset); //void txtcol_left(text_column *tc, int offset);
void txtcol_save(text_column *tc);
typedef struct delta { //dont need this typedef struct delta { //dont need this
segment *seg; segment *seg;
@ -69,6 +71,7 @@ scroller *scroll_new(int c, text_column *tc);
void scroll_down(scroller *s); void scroll_down(scroller *s);
void scroll_reset(scroller *s); void scroll_reset(scroller *s);
void scroll_draw(scroller *s); void scroll_draw(scroller *s);
int scroll_widest_visible(scroller *s);
typedef struct segment_renderer { typedef struct segment_renderer {
float pos; float pos;

@ -246,7 +246,26 @@ segment_list open_splits_file(const char *path) {
return seglist; return seglist;
} }
char *save_fmt(segment_list *sl) {
#define buffer_size 8192
static char buffer[buffer_size];
char *bfp;
bfp = &buffer[0];
memset(bfp, 0, buffer_size);
char unparse_buffer[64];
char *unp;
for (int i = 0; i < sl->count; i++) {
unp = time_unparse(unparse_buffer, 64, &sl->segments[i].realtime);
sprintf(bfp, "%s=%s%%", sl->segments[i].name, unp);
bfp += strlen(bfp);
}
printf("%s\n", buffer);
return buffer;
#undef buffer_size
}
/*void render_splits(segment_list *segments) { /*void render_splits(segment_list *segments) {
char buffer[100]; char buffer[100];

@ -27,6 +27,7 @@ typedef struct segment_binder {
segment_list *igt; segment_list *igt;
} segment_binder; //why do i need this } segment_binder; //why do i need this
char *save_fmt(segment_list *sl);
segment_list open_splits_file(const char *path); segment_list open_splits_file(const char *path);
void render_splits(segment_list *segments); void render_splits(segment_list *segments);
void debug_print_list(segment_list *segments); void debug_print_list(segment_list *segments);

@ -0,0 +1,26 @@
#!/usr/bin/ruby
#need more data to make a complete lss file
#make some kind of calling convention with the argv
def wrap(tag, str)
return "<#{tag}>#{str}</#{tag}>\n"
end
splits = ARGV[0].split("%")
out = splits.map do |x|
y = x.split("=")
realtime = wrap("RealTime", y[1])
splittime = wrap("SplitTime", realtime)
splittimes = wrap("SplitTimes", splittime)
name_tag = wrap("Name", y[0])
segment_tag = wrap("Segment", name_tag + splittimes)
#segments = wrap("Segments", segment_tag)
#run = wrap("Run", segments)
end
out = wrap("Segments", out.join(""))
out = wrap("Run", out)
File.write(ARGV[1], out)
Loading…
Cancel
Save