diff options
author | SoniEx2 <endermoneymod@gmail.com> | 2025-03-15 18:57:24 -0300 |
---|---|---|
committer | SoniEx2 <endermoneymod@gmail.com> | 2025-03-15 18:57:24 -0300 |
commit | 2aa1dea5126290ee6dadc0884a3d8e2791be04ef (patch) | |
tree | 0e488cfbf8bd6337fd194b1b6a467e2172e5ac54 /gui | |
parent | fee7157d84c3ce887a540be82dc7a7d2e0c8e368 (diff) |
add everything so far
Diffstat (limited to 'gui')
-rwxr-xr-x | gui/build_script.sh | 16 | ||||
-rw-r--r-- | gui/radio-receiver.c | 105 |
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); +} |