Mirai's Miscellaneous Misadventures

M48 / core / video.c

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

#include <mimimi.h>

void mimimi_video(struct mimimi_video *video, struct mimimi_engine *engine)
{
	int i;
	for (i = 0 ; i < video->count ; i++)
		video->textures[i] = (*engine->texture)(engine->data, video->images + i);
}

void mimimi_invalidate_video(struct mimimi_video *video, struct mimimi_engine *engine)
{
	int i;
	for (i = 0 ; i < video->count ; i++)
		(*engine->invalidate)(engine->data, video->textures[i]);
}

static void mimimi_video_set(struct mimimi_video_set *videos, struct mimimi_engine *engine)
{
	int i;
	for (i = 0 ; i < videos->standing_video_count ; i++)
		mimimi_video(videos->standing + i, engine);
	mimimi_video(videos->knocked, engine);
	mimimi_video(videos->falling, engine);
	for (i = 0 ; i < videos->jumping_video_count ; i++)
		mimimi_video(videos->jumping + i, engine);
}

static void mimimi_invalidate_video_set(struct mimimi_video_set *videos, struct mimimi_engine *engine)
{
	int i;
	for (i = 0 ; i < videos->standing_video_count ; i++)
		mimimi_invalidate_video(videos->standing + i, engine);
	mimimi_invalidate_video(videos->knocked, engine);
	mimimi_invalidate_video(videos->falling, engine);
	for (i = 0 ; i < videos->jumping_video_count ; i++)
		mimimi_invalidate_video(videos->jumping + i, engine);
}

void mimimi_prepare_appearance(struct mimimi_appearance *appearance, struct mimimi_engine *engine)
{
	mimimi_video_set(&appearance->left, engine);
	mimimi_video_set(&appearance->right, engine);
}

void mimimi_invalidate_appearance(struct mimimi_appearance *appearance, struct mimimi_engine *engine)
{
	mimimi_invalidate_video_set(&appearance->left, engine);
	mimimi_invalidate_video_set(&appearance->right, engine);
}