add gb_makepak

This commit is contained in:
Nishi 2026-01-10 00:55:45 +09:00
commit b66cf8068a
Signed by: nishi
GPG key ID: 27EF69B208EB9343
16 changed files with 349 additions and 5 deletions

View file

@ -5,6 +5,9 @@
#include <GearBox/Client.h>
#include <GearBox/Server.h>
#include <GearBox/GL.h>
#include <GearBox/Resource.h>
#include <stb_ds.h>
void GBInit(void) {
GBVersion version;
@ -17,7 +20,8 @@ void GBInit(void) {
}
GBEngine GBEngineCreate(GBEngineParam* param) {
GBEngine engine = malloc(sizeof(*engine));
GBEngine engine = malloc(sizeof(*engine));
GBResource resource;
memset(engine, 0, sizeof(*engine));
@ -28,6 +32,11 @@ GBEngine GBEngineCreate(GBEngineParam* param) {
param->ready(1024, 768);
}
sh_new_strdup(engine->resource);
resource = GBResourceOpen(engine, "base.pak");
shput(engine->resource, "base", resource);
if(engine != NULL && param->client && (engine->client = GBClientCreate(engine)) == NULL) {
GBLog(GBLogError, "Failed to create client");
@ -52,6 +61,8 @@ GBEngine GBEngineCreate(GBEngineParam* param) {
}
void GBEngineDestroy(GBEngine engine) {
shfree(engine->resource);
if(engine->server != NULL) GBServerDestroy(engine->server);
if(engine->client != NULL) GBClientDestroy(engine->client);
if(engine->param != NULL) free(engine->param);

View file

@ -1 +1,42 @@
#include <GearBox/File.h>
#include <GearBox/String.h>
#include <GearBox/Log.h>
GBFile GBFileOpen(GBEngine engine, const char* path) {
GBFile file = malloc(sizeof(*file));
char* s;
char* nam;
memset(file, 0, sizeof(*file));
GBLog(GBLogInfo, "Opening %s", path);
s = GBStringDuplicate(path);
if(engine != NULL && ((nam = strstr(s, ":/")) != NULL || (nam = strstr(s, ":\\")) != NULL)) {
nam[0] = 0;
nam[1] = 0;
nam += 2;
printf("%s\n", nam);
}
free(s);
if((file->fp = fopen(path, "rb")) != NULL) {
return file;
}
GBLog(GBLogWarn, "Could not open %s", path);
GBFileClose(file);
return NULL;
}
int GBFileRead(GBFile file, void* out, int size) {
if(file->fp != NULL) return fread(out, 1, size, file->fp);
}
void GBFileClose(GBFile file) {
if(file->fp != NULL) fclose(file->fp);
free(file);
}

22
engine/src/resource.c Normal file
View file

@ -0,0 +1,22 @@
#include <GearBox/Resource.h>
#include <GearBox/File.h>
GBResource GBResourceOpen(GBEngine engine, const char* path) {
GBResource resource = malloc(sizeof(*resource));
memset(resource, 0, sizeof(*resource));
if((resource->file = GBFileOpen(engine, path)) == NULL) {
GBResourceClose(resource);
return NULL;
}
return resource;
}
void GBResourceClose(GBResource resource) {
if(resource->file != NULL) GBFileClose(resource->file);
free(resource);
}

2
engine/src/stb_ds.c Normal file
View file

@ -0,0 +1,2 @@
#define STB_DS_IMPLEMENTATION
#include "stb_ds.h"

9
engine/src/string.c Normal file
View file

@ -0,0 +1,9 @@
#include <GearBox/String.h>
char* GBStringDuplicate(const char* str) {
char* s = malloc(strlen(str) + 1);
strcpy(s, str);
return s;
}