GoldFish Engine
Quite simple and lightweight game engine
Loading...
Searching...
No Matches
gf_core.c
1#define GF_EXPOSE_CORE
2
3#include <gf_pre.h>
4
5/* External library */
6#ifdef _WIN32
7#include <winsock.h>
8#endif
9
10/* Interface */
11#include <gf_core.h>
12
13/* Engine */
14#include <gf_client.h>
15#include <gf_server.h>
16#include <gf_log.h>
17#include <gf_version.h>
18
19/* Standard */
20#include <stdlib.h>
21#include <string.h>
22#include <stdio.h>
23
24void gf_engine_begin(void) {
25 gf_version_t ver;
26#ifdef _WIN32
27 WSADATA wsa;
28#endif
29 gf_log_default = stderr;
30
31 gf_version_get(&ver);
32 gf_log_function(NULL, "GoldFish Engine %s", ver.full);
33 gf_log_function(NULL, "Build date: %s", ver.date);
34 gf_log_function(NULL, "Lua %s", ver.lua);
35 gf_log_function(NULL, "zlib %s", ver.zlib);
36 gf_log_function(NULL, "Thread model: %s", ver.thread);
37 gf_log_function(NULL, "Renderer: %s on %s", ver.driver, ver.backend);
38#ifdef _WIN32
39 WSAStartup(MAKEWORD(1, 1), &wsa);
40 gf_log_function(NULL, "Winsock ready", "");
41#endif
42 gf_client_begin();
43 gf_server_begin();
44}
45
46void gf_engine_end(void) {
47 gf_server_end();
48 gf_client_end();
49}
50
51gf_engine_t* gf_engine_create(const char* title, int nogui) {
52 gf_engine_t* engine = malloc(sizeof(*engine));
53 memset(engine, 0, sizeof(*engine));
54 engine->log = stderr;
55 if(nogui) {
56 gf_log_function(engine, "No GUI mode", "");
57 engine->client = NULL;
58 } else {
59 gf_log_function(engine, "GUI mode", "");
60 engine->client = gf_client_create(engine, title);
61 if(engine->client == NULL) {
62 gf_log_function(engine, "Failed to create client interface", "");
63 gf_engine_destroy(engine);
64 return NULL;
65 }
66 gf_log_function(engine, "Switching to graphical console", "");
67 }
68 engine->server = gf_server_create(engine);
69 return engine;
70}
71
86void gf_engine_loop(gf_engine_t* engine) {
87 while(1) {
88 if(engine->client != NULL) {
89 if(gf_client_step(engine->client) != 0) break;
90 }
91 }
92}
93
94void gf_engine_destroy(gf_engine_t* engine) {
95 if(engine->server != NULL) gf_server_destroy(engine->server);
96 if(engine->client != NULL) gf_client_destroy(engine->client);
97 free(engine);
98 gf_log_function(NULL, "Destroyed engine", "");
99}
Client interface.
Logger.
#define gf_log_function(engine, fmt,...)
Output log with line number and function name.
Definition gf_log.h:33
Required headers before anything.
Client interface.
Version.
Engine instance.
Definition core.h:46
gf_server_t * server
Server interface.
Definition core.h:46
FILE * log
Log output.
Definition core.h:46
gf_client_t * client
Client interface.
Definition core.h:46
Version.
Definition version.h:68
char backend[32]
Name of the rendering backend.
Definition version.h:68
char zlib[32]
zlib version
Definition version.h:68
char full[64]
Full version.
Definition version.h:68
char driver[32]
Name of the rendering driver.
Definition version.h:68
char date[64]
Build date.
Definition version.h:68
char thread[32]
Name of the thread model used.
Definition version.h:68
char lua[32]
Lua version.
Definition version.h:68