diff src/main.c @ 44:c97fe725fdeb

core: implement basic states, closes #2457 @1h
author David Demelier <markand@malikania.fr>
date Wed, 15 Jan 2020 21:31:17 +0100
parents 291be94202c7
children e10fd1b6323f
line wrap: on
line diff
--- a/src/main.c	Wed Jan 15 20:54:53 2020 +0100
+++ b/src/main.c	Wed Jan 15 21:31:17 2020 +0100
@@ -16,20 +16,57 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#include <stdio.h>
-#include <stdlib.h>
-
 #include "clock.h"
+#include "game.h"
 #include "error.h"
 #include "event.h"
-#include "painter.h"
-#include "image.h"
-#include "map.h"
 #include "sys.h"
-#include "walksprite.h"
 #include "window.h"
-#include "util.h"
-#include "texture.h"
+
+#define WINDOW_WIDTH 1280
+#define WINDOW_HEIGHT 720
+
+static void
+init(void)
+{
+	if (!sys_init())
+		error_fatal();
+	if (!window_init("Molko's Adventure", WINDOW_WIDTH, WINDOW_HEIGHT))
+		error_fatal();
+}
+
+static void
+run(void)
+{
+	union event ev;
+	struct clock clock;
+
+	clock_start(&clock);
+
+	for (;;) {
+		uint64_t elapsed = clock_elapsed(&clock);
+
+		clock_start(&clock);
+
+		while (event_poll(&ev)) {
+			/* TODO: this must be handled by states. */
+			if (ev.type == EVENT_QUIT)
+				return;
+
+			game_handle(&ev);
+		}
+
+		game_update(elapsed);
+		game_draw();
+	}
+}
+
+static void
+close(void)
+{
+	window_close();
+	sys_close();
+}
 
 int
 main(int argc, char **argv)
@@ -37,121 +74,9 @@
 	(void)argc;
 	(void)argv;
 
-	struct texture *tex;
-
-	if (!sys_init())
-		error_fatal();
-	if (!window_init("Molko's Adventure", 1024, 576))
-		error_fatal();
-	if (!(tex = texture_new(100, 100)))
-		error_fatal();
-
-	painter_set_color(0xffffffff);
-	painter_clear();
-
-	PAINTER_BEGIN(tex);
-	painter_set_color(0xff0000ff);
-	painter_clear();
-	PAINTER_END();
-
-	texture_draw(tex, 10, 10);
-	painter_present();
-	delay(5000);
-
-#if 0
-
-	struct clock clock;
-	struct map map;
-	struct texture *guy;
-	struct sprite sprite;
-	struct walksprite ws;
-
-	if (!sys_init())
-		error_fatal();
-	if (!window_init("Molko's Adventure", 1024, 576))
-		error_fatal();
-	if (!map_open(&map, "world.json"))
-		error_fatal();
-	if (!(guy = image_openf(sys_datapath("sprites/test-walk.png"))))
-		error_fatal();
-
-	sprite_init(&sprite, guy, 48, 48);
-	walksprite_init(&ws, &sprite, 200);
-	clock_start(&clock);
-	map_repaint(&map);
-
-	int guy_x = 10;
-	int guy_y = 10;
-	int guy_dx = 0;
-	int guy_dy = 0;
-
-	int dx = 0;
-	int dy = 0;
-	int orientation = 0;
-
-	for (;;) {
-		uint64_t elapsed = clock_elapsed(&clock);
-		union event ev;
-
-		clock_start(&clock);
-
-		while (event_poll(&ev)) {
-			switch (ev.type) {
-			case EVENT_QUIT:
-				return 0;
-			case EVENT_KEYDOWN:
-				switch (ev.key.key) {
-				case KEY_UP:
-					orientation = 0;
-					dy = -5;
-					break;
-				case KEY_RIGHT:
-					orientation = 2;
-					dx = 5;
-					break;
-				case KEY_DOWN:
-					orientation = 4;
-					dy = 5;
-					break;
-				case KEY_LEFT:
-					orientation = 6;
-					dx = -5;
-					break;
-				default:
-					break;
-				}
-				break;
-			case EVENT_KEYUP:
-				switch (ev.key.key) {
-				case KEY_DOWN:
-					dy = 0;
-					break;
-				case KEY_UP:
-					dy = 0;
-					break;
-				case KEY_LEFT:
-					dx = 0;
-					break;
-				case KEY_RIGHT:
-					dx = 0;
-					break;
-				default:
-					break;
-				}
-				break;
-			default:
-				break;
-			}
-		}
-
-		walksprite_update(&ws, elapsed);
-		painter_clear();
-		map_draw(&map);
-		walksprite_draw(&ws, orientation, 100, 100);
-		painter_present();
-		delay(50);
-	}
-#endif
+	init();
+	run();
+	close();
 
 	return 0;
 }