assaultfish/client/main.c

103 lines
2.1 KiB
C
Raw Normal View History

2025-12-19 02:38:21 +09:00
#include <af_common.h>
MwWidget root, window, opengl;
2025-12-19 15:18:15 +09:00
static const MwRect sizes[] = {
{0, 0, 640, 480},
{0, 0, 800, 600},
{0, 0, 1024, 768},
{0, 0, 1280, 1024},
2025-12-19 08:52:48 +09:00
};
2025-12-19 03:10:03 +09:00
static void resize(MwWidget handle, void* user, void* client) {
2025-12-19 03:08:40 +09:00
int ww = MwGetInteger(window, MwNwidth);
int wh = MwGetInteger(window, MwNheight);
MwVaApply(opengl,
2025-12-19 03:10:03 +09:00
MwNwidth, ww,
MwNheight, wh,
NULL);
2025-12-19 03:08:40 +09:00
2025-12-19 15:18:15 +09:00
gl_resize(ww, wh);
2025-12-19 03:08:40 +09:00
}
2025-12-19 03:10:03 +09:00
static void tick(MwWidget handle, void* user, void* client) {
2025-12-20 00:29:38 +09:00
net_poll();
2025-12-19 08:52:48 +09:00
gl_render();
2025-12-19 03:08:40 +09:00
MwOpenGLSwapBuffer(opengl);
}
2025-12-19 03:10:03 +09:00
static void* gl_load(const char* name) {
2025-12-19 03:08:40 +09:00
return MwOpenGLGetProcAddress(opengl, name);
2025-12-19 02:38:21 +09:00
}
2025-12-19 15:18:15 +09:00
void scene_change(int scene) {
gl_scene = scene;
2025-12-20 00:32:49 +09:00
gl_scene_change();
ui_scene_change();
2025-12-19 15:18:15 +09:00
}
2025-12-19 08:52:48 +09:00
int main(int argc, char** argv) {
MwSizeHints sh;
2025-12-19 15:18:15 +09:00
MwRect rc;
int i;
2025-12-19 08:52:48 +09:00
2025-12-19 02:38:21 +09:00
MwLibraryInit();
root = MwVaCreateWidget(NULL, "root", NULL, 0, 0, 0, 0,
2025-12-19 23:19:47 +09:00
MwNwaitMS, AF_WAIT_MS,
2025-12-19 22:43:35 +09:00
MwNbitmapFont, 0,
MwNmodernLook, 1,
2025-12-19 03:10:03 +09:00
NULL);
2025-12-19 02:38:21 +09:00
2025-12-19 08:52:48 +09:00
window = MwVaCreateWidget(MwWindowClass, "main", root, 0, 0, 640, 480,
2025-12-19 03:10:03 +09:00
MwNtitle, "AssaultFish",
NULL);
2025-12-19 02:38:21 +09:00
2025-12-19 08:52:48 +09:00
MwGetScreenSize(window, &rc);
2025-12-19 15:18:15 +09:00
for(i = sizeof(sizes) / sizeof(sizes[0]) - 1; i >= 0; i--) {
if(sizes[i].width < rc.width && sizes[i].height < rc.height) {
2025-12-19 08:52:48 +09:00
sh.min_width = sh.max_width = sizes[i].width;
sh.min_height = sh.max_height = sizes[i].height;
break;
}
}
2025-12-19 15:18:15 +09:00
for(i = 1; i < argc; i++) {
if(strcmp(argv[i], "--width") == 0 && (i + 1) < argc) {
2025-12-19 08:52:48 +09:00
sh.min_width = sh.max_width = atoi(argv[i + 1]);
2025-12-19 15:18:15 +09:00
} else if(strcmp(argv[i], "--height") == 0 && (i + 1) < argc) {
2025-12-19 08:52:48 +09:00
sh.min_height = sh.max_height = atoi(argv[i + 1]);
}
}
MwVaApply(window,
2025-12-19 15:18:15 +09:00
MwNsizeHints, &sh,
MwNx, (rc.width - sh.max_width) / 2,
MwNy, (rc.height - sh.max_height) / 2,
MwNwidth, sh.max_width,
MwNheight, sh.max_height,
NULL);
2025-12-19 08:52:48 +09:00
opengl = MwCreateWidget(MwOpenGLClass, "opengl", window, 0, 0, sh.max_width, sh.max_height);
2025-12-19 02:38:21 +09:00
MwOpenGLMakeCurrent(opengl);
2025-12-19 03:08:40 +09:00
gladLoadGLLoader(gl_load);
resize(window, NULL, NULL);
2025-12-19 08:52:48 +09:00
gl_init();
ui_init();
2025-12-19 15:18:15 +09:00
scene_change(AF_SCENE_MAIN);
2025-12-19 02:38:21 +09:00
MwAddUserHandler(window, MwNresizeHandler, resize, NULL);
2025-12-19 03:08:40 +09:00
MwAddUserHandler(root, MwNtickHandler, tick, NULL);
2025-12-19 02:38:21 +09:00
MwLoop(root);
2025-12-19 00:58:41 +09:00
}