#include enum logger_level : int { LOG_TRACE = 0, LOG_DEBUG = 10, LOG_INFO = 20, LOG_WARN = 30, LOG_ERROR = 40, }; [[clang::import_module("logger")]] [[clang::import_name("log")]] extern void logger_log(void); [[clang::import_module("logger")]] [[clang::import_name("log-message")]] extern void logger_log_message(char *message); [[clang::import_module("logger")]] [[clang::import_name("add-argument-int")]] extern void logger_add_argument_int(int arg); [[clang::import_module("logger")]] [[clang::import_name("begin")]] extern void logger_log_begin(enum logger_level level); [[clang::import_module("screen")]] [[clang::import_name("set-background-size")]] extern void set_background_size(int width, int height); [[clang::import_module("screen")]] [[clang::import_name("set-background-texture-size")]] extern void set_background_texture_size(int width, int height); [[clang::import_module("text")]] [[clang::import_name("free")]] extern void text_free(int handle); [[clang::import_module("text")]] [[clang::import_name("literal")]] extern int text_literal(char *text); [[clang::import_module("text")]] [[clang::import_name("translatable")]] extern int text_translatable(char *key); [[clang::import_module("text")]] [[clang::import_name("translatable-arguments")]] extern int text_arguments(char *key, int size, int *args); [[clang::import_module("screen")]] [[clang::import_name("render-text-object")]] extern void render_text_object(int handle, int x, int y, int color, bool shadow); enum simulator_mode : int { SIMULATOR_FULL = 0, SIMULATOR_FAST = 1, SIMULATOR_DEAF = 2, }; [[clang::import_module("simulator")]] [[clang::import_name("get-mode")]] extern enum simulator_mode simulator_get_mode(); [[clang::import_module("simulator")]] [[clang::import_name("get-volume")]] extern int simulator_get_volume(); [[clang::import_module("simulator")]] [[clang::import_name("get-frequency")]] extern int simulator_get_frequency(); [[clang::import_module("screen")]] [[clang::import_name("get-width")]] extern int screen_get_width(); [[clang::import_module("screen")]] [[clang::import_name("get-height")]] extern int screen_get_height(); [[clang::import_module("volume-plus-widget")]] [[clang::import_name("set-dimensions")]] extern void vp_set_dimensions(int x, int y, int width, int height); [[clang::import_module("volume-minus-widget")]] [[clang::import_name("set-dimensions")]] extern void vm_set_dimensions(int x, int y, int width, int height); [[clang::import_module("frequency-plus-widget")]] [[clang::import_name("set-dimensions")]] extern void fp_set_dimensions(int x, int y, int width, int height); [[clang::import_module("frequency-minus-widget")]] [[clang::import_name("set-dimensions")]] extern void fm_set_dimensions(int x, int y, int width, int height); [[clang::import_module("toggle-widget")]] [[clang::import_name("set-dimensions")]] extern void mode_set_dimensions(int x, int y, int width, int height); #define BACKGROUND_WIDTH 200 #define BACKGROUND_HEIGHT 100 void init() { logger_log_begin(LOG_INFO); logger_log_message("placeholder radio skin."); set_background_size(BACKGROUND_WIDTH, BACKGROUND_HEIGHT); int width = screen_get_width(); int height = screen_get_height(); int base_x = (width - BACKGROUND_WIDTH) / 2; int base_y = (height - BACKGROUND_HEIGHT) / 2; fp_set_dimensions(base_x + 100 - 40, base_y, 20, 20); fm_set_dimensions(base_x + 120 - 40, base_y, 20, 20); vp_set_dimensions(base_x + 100 - 40, base_y + 20, 20, 20); vm_set_dimensions(base_x + 120 - 40, base_y + 20, 20, 20); mode_set_dimensions(base_x + 100 - 100, base_y + 40, 100, 20); } void render(int mouseX, int mouseY, float delta) { int width = screen_get_width(); int height = screen_get_height(); int base_x = (width - BACKGROUND_WIDTH) / 2 + 100; int base_y = (height - BACKGROUND_HEIGHT) / 2 + (20 - 9) / 2; int t1; switch (simulator_get_mode()) { case SIMULATOR_FAST: { t1 = text_translatable("pirate-radio.mode.fast"); break; } case SIMULATOR_DEAF: { t1 = text_translatable("pirate-radio.mode.deaf"); break; } default: { t1 = text_translatable("pirate-radio.mode.full"); } } int t2 = text_arguments("pirate-radio.mode.selected", 1, &t1); render_text_object(t2, base_x, base_y + 40, -1, true); text_free(t1); text_free(t2); int volume = simulator_get_volume(); if (volume == 0) { t1 = text_translatable("pirate-radio.volume.off"); } else { char volume_text[30]; sprintf(volume_text, "%d", volume); t1 = text_literal(volume_text); } t2 = text_arguments("pirate-radio.volume.selected", 1, &t1); render_text_object(t2, base_x, base_y + 20, -1, true); text_free(t1); text_free(t2); int frequency = simulator_get_frequency(); int freq_mhz = frequency/10; int freq_step = frequency%10; char freq_text[30]; sprintf(freq_text, "%d", freq_mhz); t1 = text_literal(freq_text); sprintf(freq_text, "%d", freq_step); t2 = text_literal(freq_text); int freq_args[2] = {t1, t2}; int t3 = text_arguments("pirate-radio.frequency.selected", 2, freq_args); render_text_object(t3, base_x, base_y + 0, -1, true); text_free(t1); text_free(t2); text_free(t3); }