add gb_makepak
This commit is contained in:
parent
7ab8233fca
commit
b66cf8068a
16 changed files with 349 additions and 5 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
22
engine/src/resource.c
Normal 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
2
engine/src/stb_ds.c
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
#define STB_DS_IMPLEMENTATION
|
||||
#include "stb_ds.h"
|
||||
9
engine/src/string.c
Normal file
9
engine/src/string.c
Normal 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;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue