summary refs log tree commit diff stats
path: root/gui
diff options
context:
space:
mode:
authorSoniEx2 <endermoneymod@gmail.com>2025-03-15 18:57:24 -0300
committerSoniEx2 <endermoneymod@gmail.com>2025-03-15 18:57:24 -0300
commit2aa1dea5126290ee6dadc0884a3d8e2791be04ef (patch)
tree0e488cfbf8bd6337fd194b1b6a467e2172e5ac54 /gui
parentfee7157d84c3ce887a540be82dc7a7d2e0c8e368 (diff)
add everything so far
Diffstat (limited to 'gui')
-rwxr-xr-xgui/build_script.sh16
-rw-r--r--gui/radio-receiver.c105
2 files changed, 121 insertions, 0 deletions
diff --git a/gui/build_script.sh b/gui/build_script.sh
new file mode 100755
index 0000000..5d7c649
--- /dev/null
+++ b/gui/build_script.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+set -e
+
+s_EXPORTED_FUNCTIONS="-s EXPORTED_FUNCTIONS=_init,_render"
+
+shared_flags="-Oz -flto -fno-inline -fno-unroll-loops -mnontrapping-fptoint"
+compile_flags="$shared_flags --std=c23"
+link_flags="$shared_flags -s MALLOC=emmalloc -s ASSERTIONS=0 -s INITIAL_MEMORY=65536 -s TOTAL_STACK=16384 -s STANDALONE_WASM=1 -s PURE_WASI=1 -s STACK_OVERFLOW_CHECK=0 -s WASM_BIGINT=1 -s ABORTING_MALLOC=0 -s MEMORY_GROWTH_GEOMETRIC_STEP=0 -s ALLOW_MEMORY_GROWTH=1"
+
+emcc --no-entry $s_EXPORTED_FUNCTIONS $link_flags $compile_flags -o radio-receiver.wasm radio-receiver.c
+
+mkdir -p ../src/main/resources/assets/pirate-radio/guis
+cp radio-receiver.wasm ../src/main/resources/assets/pirate-radio/guis/radio-receiver.wasm
+
+exit 0
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);
+}