Mirai's Miscellaneous Misadventures

M49 / engines / wasm.c

/* license: AGPLv3 or later */
/* copyright 2024 zamfofex */

#include <stdlib.h>

#include <mimimi-chapters.h>

unsigned char mimimi_wasm_sync(void);
void mimimi_wasm_stamp(void *data, int x0, int y0, void *texture);
void *mimimi_wasm_texture(void *data, struct mimimi_image *image);
void mimimi_wasm_invalidate(void *data, void *texture);

int mimimi_wasm(void (*start)(void *chapter, struct mimimi_engine *engine), void (*tick)(void *chapter, unsigned char left, unsigned char right), unsigned long int chapter_size)
{
	unsigned char keys;
	void *chapter;
	struct mimimi_engine engine;
	
	engine.stamp = &mimimi_wasm_stamp;
	engine.texture = &mimimi_wasm_texture;
	engine.invalidate = &mimimi_wasm_invalidate;
	engine.size.width = 512;
	engine.size.height = 256;
	
	chapter = malloc(chapter_size);
	if (chapter == NULL) return 1;
	
	(*start)(chapter, &engine);
	
	for (;;)
	{
		keys = mimimi_wasm_sync();
		(*tick)(chapter, keys / 2, keys % 2);
	}
}