idk anymore
This commit is contained in:
parent
1b26754f8f
commit
3257bb449e
19 changed files with 537 additions and 77 deletions
|
|
@ -777,3 +777,148 @@ void suic_player_controller_set_position(suic_player_controller *player,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/* ===== FILE I/O IMPLEMENTATION ===== */
|
||||
|
||||
FileHandle suic_file_open(const char* path, FileMode mode) {
|
||||
const char* mode_str;
|
||||
switch (mode) {
|
||||
case FILE_READ: mode_str = "rb"; break;
|
||||
case FILE_WRITE: mode_str = "wb"; break;
|
||||
case FILE_APPEND: mode_str = "ab"; break;
|
||||
default: return NULL;
|
||||
}
|
||||
FILE* f = fopen(path, mode_str);
|
||||
return (FileHandle)f;
|
||||
}
|
||||
|
||||
void suic_file_close(FileHandle handle) {
|
||||
if (handle) {
|
||||
fclose((FILE*)handle);
|
||||
}
|
||||
}
|
||||
|
||||
int suic_file_read(FileHandle handle, void* buffer, int size) {
|
||||
if (!handle) return -1;
|
||||
return (int)fread(buffer, 1, size, (FILE*)handle);
|
||||
}
|
||||
|
||||
int suic_file_write(FileHandle handle, const void* buffer, int size) {
|
||||
if (!handle) return -1;
|
||||
return (int)fwrite(buffer, 1, size, (FILE*)handle);
|
||||
}
|
||||
|
||||
int suic_file_size(FileHandle handle) {
|
||||
if (!handle) return -1;
|
||||
FILE* f = (FILE*)handle;
|
||||
long current = ftell(f);
|
||||
fseek(f, 0, SEEK_END);
|
||||
long size = ftell(f);
|
||||
fseek(f, current, SEEK_SET);
|
||||
return (int)size;
|
||||
}
|
||||
|
||||
/* ===== RANDOM NUMBER GENERATION IMPLEMENTATION ===== */
|
||||
|
||||
static uint32_t _random_state = 12345;
|
||||
|
||||
void suic_random_seed(uint32_t seed) {
|
||||
_random_state = seed ? seed : 12345;
|
||||
srand(seed);
|
||||
}
|
||||
|
||||
/* Linear congruential generator */
|
||||
uint32_t suic_random_int(void) {
|
||||
_random_state = (_random_state * 1103515245 + 12345) & 0x7fffffff;
|
||||
return _random_state;
|
||||
}
|
||||
|
||||
int suic_random_int_range(int min, int max) {
|
||||
if (min > max) {
|
||||
int tmp = min;
|
||||
min = max;
|
||||
max = tmp;
|
||||
}
|
||||
uint32_t range = max - min + 1;
|
||||
return min + (suic_random_int() % range);
|
||||
}
|
||||
|
||||
float suic_random_float(void) {
|
||||
return (float)suic_random_int() / 2147483647.0f;
|
||||
}
|
||||
|
||||
float suic_random_float_range(float min, float max) {
|
||||
return min + (max - min) * suic_random_float();
|
||||
}
|
||||
|
||||
/* ===== TIME IMPLEMENTATION ===== */
|
||||
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
static uint64_t _start_time_ms = 0;
|
||||
|
||||
static void _init_time(void) {
|
||||
if (_start_time_ms == 0) {
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, NULL);
|
||||
_start_time_ms = (uint64_t)tv.tv_sec * 1000 + (uint64_t)tv.tv_usec / 1000;
|
||||
}
|
||||
}
|
||||
|
||||
uint64_t suic_get_time_ms(void) {
|
||||
_init_time();
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, NULL);
|
||||
uint64_t now = (uint64_t)tv.tv_sec * 1000 + (uint64_t)tv.tv_usec / 1000;
|
||||
return now - _start_time_ms;
|
||||
}
|
||||
|
||||
uint64_t suic_get_time_us(void) {
|
||||
_init_time();
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, NULL);
|
||||
uint64_t now = (uint64_t)tv.tv_sec * 1000000 + (uint64_t)tv.tv_usec;
|
||||
return now - (_start_time_ms * 1000);
|
||||
}
|
||||
|
||||
uint64_t suic_get_unix_time(void) {
|
||||
return (uint64_t)time(NULL);
|
||||
}
|
||||
|
||||
void suic_sleep_ms(uint32_t ms) {
|
||||
usleep(ms * 1000);
|
||||
}
|
||||
|
||||
/* ===== UUID GENERATION IMPLEMENTATION ===== */
|
||||
|
||||
/* Simple UUID v4 generator - not cryptographically secure but good enough for game IDs */
|
||||
const char* suic_uuid_generate_v4(void) {
|
||||
static char uuid_buffer[37]; // UUID is 36 chars + null terminator
|
||||
|
||||
uint32_t a = suic_random_int();
|
||||
uint32_t b = suic_random_int();
|
||||
uint32_t c = suic_random_int();
|
||||
uint32_t d = suic_random_int();
|
||||
|
||||
/* Set version 4 (random) and variant bits */
|
||||
b = (b & 0x0fff) | 0x4000;
|
||||
c = (c & 0x3fff) | 0x8000;
|
||||
|
||||
snprintf(uuid_buffer, sizeof(uuid_buffer),
|
||||
"%08x-%04x-%04x-%04x-%08x%04x",
|
||||
a,
|
||||
(uint16_t)(b >> 16),
|
||||
(uint16_t)b,
|
||||
(uint16_t)(c >> 16),
|
||||
(uint32_t)c,
|
||||
(uint16_t)d);
|
||||
|
||||
return uuid_buffer;
|
||||
}
|
||||
|
||||
const char* suic_uuid_generate_v4_seeded(uint64_t seed) {
|
||||
suic_random_seed((uint32_t)seed);
|
||||
return suic_uuid_generate_v4();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue