/* =========================================================================== IceTech GPL Source Code Copyright (C) 2026 Justin Marshall This file is part of the IceTech GPL Source Code. =========================================================================== */ #ifndef __MINIGAME_PUBLIC_H__ #define __MINIGAME_PUBLIC_H__ #include #define ICE_MINIGAME_API_VERSION 1 #define ICE_MINIGAME_ENTRY_POINT "GetMinigameAPI" #ifdef _WIN32 #ifdef __cplusplus #define ICE_MINIGAME_EXPORT extern "C" __declspec(dllexport) #else #define ICE_MINIGAME_EXPORT __declspec(dllexport) #endif #else #ifdef __cplusplus #define ICE_MINIGAME_EXPORT extern "C" #else #define ICE_MINIGAME_EXPORT #endif #endif typedef enum { ICE_MINIGAME_EVENT_NONE = 0, ICE_MINIGAME_EVENT_KEY, ICE_MINIGAME_EVENT_CHAR, ICE_MINIGAME_EVENT_MOUSE } iceMinigameEventType_t; typedef enum { ICE_MINIGAME_PIXEL_RGBA8 = 1 } iceMinigamePixelFormat_t; typedef struct iceMinigameInputEvent_s { int type; int value; int value2; int time; } iceMinigameInputEvent_t; typedef struct iceMinigameFramebuffer_s { const uint8_t *pixels; int width; int height; int pitchBytes; int pixelFormat; } iceMinigameFramebuffer_t; typedef struct iceMinigameAudioBuffer_s { const float *samples; int frames; int channels; int sampleRate; } iceMinigameAudioBuffer_t; typedef void (*iceMinigamePrint_t)( void *userData, const char *text ); typedef void (*iceMinigameSubmitAudio_t)( void *userData, const iceMinigameAudioBuffer_t *audio ); typedef struct iceMinigameImport_s { int version; void *userData; const char *basePath; const char *savePath; iceMinigamePrint_t Print; iceMinigameSubmitAudio_t SubmitAudio; } iceMinigameImport_t; typedef struct iceMinigameInstance_s iceMinigameInstance_t; typedef int (*iceMinigameCreateInstance_t)( const iceMinigameImport_t *imports, const char *commandLine, iceMinigameInstance_t **instance ); typedef void (*iceMinigameDestroyInstance_t)( iceMinigameInstance_t *instance ); typedef void (*iceMinigameSetActive_t)( iceMinigameInstance_t *instance, int active ); typedef void (*iceMinigameQueueEvent_t)( iceMinigameInstance_t *instance, const iceMinigameInputEvent_t *event ); typedef void (*iceMinigameRunFrame_t)( iceMinigameInstance_t *instance, int elapsedMilliseconds ); typedef int (*iceMinigameGetFramebuffer_t)( iceMinigameInstance_t *instance, iceMinigameFramebuffer_t *framebuffer ); typedef struct iceMinigameExport_s { int version; const char *gameName; int framebufferWidth; int framebufferHeight; int preferredSampleRate; iceMinigameCreateInstance_t CreateInstance; iceMinigameDestroyInstance_t DestroyInstance; iceMinigameSetActive_t SetActive; iceMinigameQueueEvent_t QueueEvent; iceMinigameRunFrame_t RunFrame; iceMinigameGetFramebuffer_t GetFramebuffer; } iceMinigameExport_t; typedef int (*iceMinigameGetAPI_t)( const iceMinigameImport_t *imports, iceMinigameExport_t *exports ); #endif // __MINIGAME_PUBLIC_H__