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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
#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();
[[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);
}
|