summary refs log tree commit diff stats
path: root/gui/radio-receiver.c
blob: fef08585ce75b9469699db14c18238256ba2bcdf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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);
}