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_version_get(&ver);
30 gf_log_function(NULL, "GoldFish Engine %s", ver.full);
31 gf_log_function(NULL, "Build date: %s", ver.date);
32 gf_log_function(NULL, "Lua %s", ver.lua);
33 gf_log_function(NULL, "zlib %s", ver.zlib);
34 gf_log_function(NULL, "Thread model: %s", ver.thread);
35 gf_log_function(NULL, "Renderer: %s on %s", ver.driver, ver.backend);
36#ifdef _WIN32
37 WSAStartup(MAKEWORD(1, 1), &wsa);
38 gf_log_function(NULL, "Winsock ready", "");
39#endif
40 gf_client_begin();
41 gf_server_begin();
42}
43
44void gf_engine_end(void) {
45 gf_server_end();
46 gf_client_end();
47}
48
49gf_engine_t* gf_engine_create(const char* title, int nogui) {
50 gf_engine_t* engine = malloc(sizeof(*engine));
51 memset(engine, 0, sizeof(*engine));
52 engine->log = stderr;
53 if(nogui) {
54 gf_log_function(engine, "No GUI mode", "");
55 engine->client = NULL;
56 } else {
57 gf_log_function(engine, "GUI mode", "");
58 engine->client = gf_client_create(engine, title);
59 if(engine->client == NULL) {
60 gf_log_function(engine, "Failed to create client interface", "");
61 gf_engine_destroy(engine);
62 return NULL;
63 }
64 gf_log_function(engine, "Switching to graphical console", "");
65 }
66 engine->server = gf_server_create(engine);
67 return engine;
68}
69
84void gf_engine_loop(gf_engine_t* engine) {
85 while(1) {
86 if(engine->client != NULL) {
87 if(gf_client_step(engine->client) != 0) break;
88 }
89 }
90}
91
92void gf_engine_destroy(gf_engine_t* engine) {
93 if(engine->server != NULL) gf_server_destroy(engine->server);
94 if(engine->client != NULL) gf_client_destroy(engine->client);
95 free(engine);
96 gf_log_function(NULL, "Destroyed engine", "");
97}
Client interface.
Logger.
#define gf_log_function(engine, fmt,...)
Output log with line number and function name.
Definition gf_log.h:26
Required headers before anything.
Client interface.
Version.
Engine instance.
Definition core.h:44
gf_server_t * server
Server interface.
Definition core.h:44
FILE * log
Log output.
Definition core.h:44
gf_client_t * client
Client interface.
Definition core.h:44
Version.
Definition version.h:66
char backend[32]
Name of the rendering backend.
Definition version.h:66
char zlib[32]
zlib version
Definition version.h:66
char full[64]
Full version.
Definition version.h:66
char driver[32]
Name of the rendering driver.
Definition version.h:66
char date[64]
Build date.
Definition version.h:66
char thread[32]
Name of the thread model used.
Definition version.h:66
char lua[32]
Lua version.
Definition version.h:66