summary refs log tree commit diff stats
path: root/gui/radio-receiver.c
diff options
context:
space:
mode:
Diffstat (limited to 'gui/radio-receiver.c')
-rw-r--r--gui/radio-receiver.c105
1 files changed, 105 insertions, 0 deletions
diff --git a/gui/radio-receiver.c b/gui/radio-receiver.c
new file mode 100644
index 0000000..fef0858
--- /dev/null
+++ b/gui/radio-receiver.c
@@ -0,0 +1,105 @@
+#include <stdio.h>
+
+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();
+
+void init() {
+	logger_log_begin(LOG_INFO);
+	logger_log_message("default radio skin.");
+	set_background_size(100, 100);
+}
+
+void render(int mouseX, int mouseY, float delta) {
+	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, 200, 100, -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, 200, 120, -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, 200, 140, -1, true);
+	text_free(t1);
+	text_free(t2);
+	text_free(t3);
+}