diff --git a/CMakeLists.txt b/CMakeLists.txt index 0164510..70ef211 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,13 +5,15 @@ include(GNUInstallDirs) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}") set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) +include_directories(external/stb) + add_subdirectory(external/milsko) add_subdirectory(engine) -include_directories(external/stb) +add_subdirectory(client) install( - FILES resource/logo.png resource/font.png + FILES resource/logo.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/assaultfish ) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt new file mode 100644 index 0000000..d0df00c --- /dev/null +++ b/client/CMakeLists.txt @@ -0,0 +1,8 @@ +project(af_client) + +file(GLOB af_client_SRC *.c) + +add_executable(af_client ${af_client_SRC}) +target_link_libraries(af_client PRIVATE GearBox) + +install_target(af_client) diff --git a/client/main.c b/client/main.c new file mode 100644 index 0000000..0f10de0 --- /dev/null +++ b/client/main.c @@ -0,0 +1,14 @@ +#include + +int main(int argc, char** argv){ + GBEngineParam param; + GBEngine engine; + + param.server = 0; + param.client = 1; + + GBInit(); + + engine = GBEngineCreate(¶m); + GBEngineLoop(engine); +} diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 7cddded..412a5c6 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.11) -project(assaultfish) +project(gearbox) include(GNUInstallDirs) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}") @@ -17,11 +17,18 @@ endmacro() add_subdirectory(external/glad) add_subdirectory(net) -add_subdirectory(common) + +file(GLOB GearBox_SRC src/*.c) + +add_library(GearBox SHARED ${GearBox_SRC}) +target_include_directories(GearBox PUBLIC include) +target_compile_definitions(GearBox PRIVATE _GEARBOX) + +install_target(GearBox) add_subdirectory(tools) install( FILES resource/shadow.vs resource/shadow.fs - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/gearbox + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/GearBox ) diff --git a/engine/common/CMakeLists.txt b/engine/common/CMakeLists.txt deleted file mode 100644 index e69de29..0000000 diff --git a/engine/common/log.c b/engine/common/log.c deleted file mode 100644 index 57c8b00..0000000 --- a/engine/common/log.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/engine/include/GearBox/Client.h b/engine/include/GearBox/Client.h new file mode 100644 index 0000000..e32373d --- /dev/null +++ b/engine/include/GearBox/Client.h @@ -0,0 +1,18 @@ +#ifndef __GEARBOX_CLIENT_H__ +#define __GEARBOX_CLIENT_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +GBDECL GBClient GBClientCreate(GBEngine engine); +GBDECL void GBClientDestroy(GBClient client); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/engine/include/GearBox/Core.h b/engine/include/GearBox/Core.h new file mode 100644 index 0000000..d6f4505 --- /dev/null +++ b/engine/include/GearBox/Core.h @@ -0,0 +1,21 @@ +#ifndef __GEARBOX_CORE_H__ +#define __GEARBOX_CORE_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +GBDECL void GBInit(void); +GBDECL GBEngine GBEngineCreate(GBEngineParam* param); +GBDECL void GBEngineDestroy(GBEngine engine); +GBDECL void GBEngineStart(GBEngine engine); +GBDECL void GBEngineLoop(GBEngine engine); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/engine/include/GearBox/Foundation.h b/engine/include/GearBox/Foundation.h new file mode 100644 index 0000000..7deb366 --- /dev/null +++ b/engine/include/GearBox/Foundation.h @@ -0,0 +1,13 @@ +#ifndef __GEARBOX_FOUNDATION_H__ +#define __GEARBOX_FOUNDATION_H__ + +#include +#include + +#include +#include +#include +#include +#include + +#endif diff --git a/engine/include/GearBox/Log.h b/engine/include/GearBox/Log.h new file mode 100644 index 0000000..c980640 --- /dev/null +++ b/engine/include/GearBox/Log.h @@ -0,0 +1,23 @@ +#ifndef __GEARBOX_LOG_H__ +#define __GEARBOX_LOG_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +enum GBLogLevel { + GBLogInfo = 0, + GBLogWarn, + GBLogError +}; + +GBDECL void GBLog(int level, const char* fmt, ...); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/engine/include/GearBox/MachDep.h b/engine/include/GearBox/MachDep.h new file mode 100644 index 0000000..d6780b2 --- /dev/null +++ b/engine/include/GearBox/MachDep.h @@ -0,0 +1,17 @@ +#ifndef __GEARBOX_MACHDEP_H__ +#define __GEARBOX_MACHDEP_H__ + +#include +#include +#include +#include + +#if defined(_MILSKO) && defined(_WIN32) +#define GBDECL extern __declspec(dllexport) +#elif defined(_WIN32) +#define GBDECL extern __declspec(dllimport) +#else +#define GBDECL extern +#endif + +#endif diff --git a/engine/include/GearBox/Server.h b/engine/include/GearBox/Server.h new file mode 100644 index 0000000..36edacb --- /dev/null +++ b/engine/include/GearBox/Server.h @@ -0,0 +1,18 @@ +#ifndef __GEARBOX_SERVER_H__ +#define __GEARBOX_SERVER_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +GBDECL GBServer GBServerCreate(GBEngine engine); +GBDECL void GBServerDestroy(GBServer server); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/engine/include/GearBox/TypeDefs.h b/engine/include/GearBox/TypeDefs.h new file mode 100644 index 0000000..b5e70ca --- /dev/null +++ b/engine/include/GearBox/TypeDefs.h @@ -0,0 +1,41 @@ +#ifndef __GEARBOX_TYPEDEFS_H__ +#define __GEARBOX_TYPEDEFS_H__ + +typedef struct _GBVersion GBVersion; +typedef struct _GBEngineParam GBEngineParam; +#ifdef _GEARBOX +typedef struct _GBClient* GBClient; +typedef struct _GBServer* GBServer; +typedef struct _GBEngine* GBEngine; +#else +typedef void* GBClient; +typedef void* GBServer; +typedef void* GBEngine; +#endif + +#ifdef _GEARBOX +struct _GBClient { +}; + +struct _GBServer { +}; + +struct _GBEngine { + GBClient client; + GBServer server; +}; +#endif + +struct _GBVersion { + char string[64]; + int majorlevel; + int minorlevel; + int patchlevel; +}; + +struct _GBEngineParam { + int client; + int server; +}; + +#endif diff --git a/engine/include/GearBox/Version.h b/engine/include/GearBox/Version.h new file mode 100644 index 0000000..c979885 --- /dev/null +++ b/engine/include/GearBox/Version.h @@ -0,0 +1,17 @@ +#ifndef __GEARBOX_VERSION_H__ +#define __GEARBOX_VERSION_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +GBDECL void GBVersionGet(GBVersion* version); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/engine/net/CMakeLists.txt b/engine/net/CMakeLists.txt index 3a35aff..d5b4056 100644 --- a/engine/net/CMakeLists.txt +++ b/engine/net/CMakeLists.txt @@ -2,7 +2,6 @@ cmake_minimum_required(VERSION 3.11) project(gbnet) add_library(gbnet SHARED src/client.c src/server.c src/socket.c src/stb_ds.c) - target_include_directories(gbnet PUBLIC include) find_package(PkgConfig) diff --git a/engine/src/client.c b/engine/src/client.c new file mode 100644 index 0000000..738a676 --- /dev/null +++ b/engine/src/client.c @@ -0,0 +1,13 @@ +#include + +#include + +GBClient GBClientCreate(GBEngine engine) { + GBLog(GBLogInfo, "Creating client"); + + return NULL; +} + +void GBClientDestroy(GBClient client) { + free(client); +} diff --git a/engine/src/core.c b/engine/src/core.c new file mode 100644 index 0000000..c10c662 --- /dev/null +++ b/engine/src/core.c @@ -0,0 +1,55 @@ +#include + +#include +#include +#include +#include + +void GBInit(void) { + GBVersion version; + + GBVersionGet(&version); + + GBLog(GBLogInfo, "GearBox Engine %s", version.string); +} + +GBEngine GBEngineCreate(GBEngineParam* param) { + GBEngine engine = malloc(sizeof(*engine)); + + memset(engine, 0, sizeof(*engine)); + + if(engine != NULL && param->client && (engine->client = GBClientCreate(engine)) == NULL) { + GBLog(GBLogError, "Failed to create client"); + + GBEngineDestroy(engine); + + engine = NULL; + } + + if(engine != NULL && param->server && (engine->server = GBServerCreate(engine)) == NULL) { + GBLog(GBLogError, "Failed to create server"); + + GBEngineDestroy(engine); + + engine = NULL; + } + + if(engine == NULL) { + GBLog(GBLogError, "Failed to create engine"); + } + + return engine; +} + +void GBEngineDestroy(GBEngine engine) { + if(engine->server != NULL) GBServerDestroy(engine->server); + if(engine->client != NULL) GBClientDestroy(engine->client); + + free(engine); +} + +void GBEngineStart(GBEngine engine) { +} + +void GBEngineLoop(GBEngine engine) { +} diff --git a/engine/src/log.c b/engine/src/log.c new file mode 100644 index 0000000..6cb808f --- /dev/null +++ b/engine/src/log.c @@ -0,0 +1,27 @@ +#include + +void GBLog(int level, const char* fmt, ...) { + va_list va; + FILE* out = stdout; + +#ifdef _WIN32 +#else + fprintf(out, "[\x1b[mGearBox\x1b[m|"); + + if(level == GBLogInfo) { + fprintf(out, "\x1b[1mINFO\x1b[m "); + } else if(level == GBLogWarn) { + fprintf(out, "\x1b[1m\x1b[33mWARN\x1b[m "); + } else if(level == GBLogError) { + fprintf(out, "\x1b[1m\x1b[31mERROR\x1b[m"); + } +#endif + + fprintf(out, "] "); + + va_start(va, fmt); + vfprintf(out, fmt, va); + va_end(va); + + fprintf(out, "\n"); +} diff --git a/engine/src/server.c b/engine/src/server.c new file mode 100644 index 0000000..c5f5de9 --- /dev/null +++ b/engine/src/server.c @@ -0,0 +1,14 @@ +#include + +#include + +GBServer GBServerCreate(GBEngine engine) { + GBLog(GBLogInfo, "Creating server"); + + return NULL; +} + +void GBServerDestroy(GBServer server) { + + free(server); +} diff --git a/engine/src/version.c b/engine/src/version.c new file mode 100644 index 0000000..2046f0f --- /dev/null +++ b/engine/src/version.c @@ -0,0 +1,9 @@ +#include + +void GBVersionGet(GBVersion* version) { + version->majorlevel = 0; + version->minorlevel = 0; + version->patchlevel = 0; + + sprintf(version->string, "%d.%d.%d", version->majorlevel, version->minorlevel, version->patchlevel); +} diff --git a/engine/tools/CMakeLists.txt b/engine/tools/CMakeLists.txt index 9267760..f324c9d 100644 --- a/engine/tools/CMakeLists.txt +++ b/engine/tools/CMakeLists.txt @@ -1,3 +1,5 @@ +project(gbtools) + include(GNUInstallDirs) macro(compile_tool name) diff --git a/format.sh b/format.sh index 730c50e..c8bcb03 100755 --- a/format.sh +++ b/format.sh @@ -1,2 +1,2 @@ #!/bin/sh -clang-format --verbose -i `find engine/common engine/net engine/tools -name "*.c" -or -name "*.h"` +clang-format --verbose -i `find engine/src engine/include engine/net engine/tools -name "*.c" -or -name "*.h"`