Added draw_rect and draw_text

Author Mitja Felicijan <mitja.felicijan@gmail.com> 2025-08-07 11:20:02 +0200
Committer Mitja Felicijan <mitja.felicijan@gmail.com> 2025-08-07 11:20:02 +0200
Commit 47afbbc5fb29272185d9c56de5943f889ca63723 (patch)
-rw-r--r-- .vimrc 7
-rw-r--r-- examples/graphics.lua 4
-rw-r--r-- main.c 56
3 files changed, 51 insertions, 16 deletions
diff --git a/.vimrc b/.vimrc
...
2
set errorformat=%f:%l:%c:\ %m
2
set errorformat=%f:%l:%c:\ %m
3
  
3
  
4
let g:gdb_executable = 'bidi'
4
let g:gdb_executable = 'bidi'
5
let g:gdb_arguments = '-r examples/json.lua'
5
let g:gdb_arguments = '-r examples/graphics.lua'
6
  
6
  
7
nnoremap <leader>m :call LocalMake()<CR>
7
nnoremap <leader>m :call LocalMake()<CR>
  
8
nnoremap <leader>r :execute '!./' . g:gdb_executable . ' ' . g:gdb_arguments<CR>
8
nnoremap <leader>bm :execute '!make && gdb -ex "break main" -ex "run" --args ' . g:gdb_executable . ' ' . g:gdb_arguments<CR>
9
nnoremap <leader>bm :execute '!make && gdb -ex "break main" -ex "run" --args ' . g:gdb_executable . ' ' . g:gdb_arguments<CR>
9
nnoremap <leader>bl :execute '!make && gdb -ex "break ' . line('.') . '" -ex "run" --args ' . g:gdb_executable . ' ' . g:gdb_arguments<CR>
10
nnoremap <leader>bl :execute '!make && gdb -ex "break ' . line('.') . '" -ex "run" --args ' . g:gdb_executable . ' ' . g:gdb_arguments<CR>
10
  
11
  
...
24
		cclose
25
		cclose
25
	endif
26
	endif
26
endfunction
27
endfunction
27
  
  
28
" Hardcoded example
  
29
" nnoremap <leader>bm :!gdb -ex "break main" -ex "run" --args bidi -r examples/json.lua<CR>
  
30
" nnoremap <leader>bl :execute '!gdb -ex "break ' . line('.') . '" -ex "run" --args bidi -r examples/json.lua'<CR>
  
diff --git a/examples/graphics.lua b/examples/graphics.lua
...
4
while window_running() do
4
while window_running() do
5
	begin_drawing()
5
	begin_drawing()
6
	clear_window(color.BLACK)
6
	clear_window(color.BLACK)
  
7
  
  
8
	draw_rect(100, 100, 300, 200, color.YELLOW)
  
9
	draw_text("YOOOOO", 10, 10, 20, color.VIOLET)
  
10
  
7
	draw_info()
11
	draw_info()
8
	end_drawing()
12
	end_drawing()
9
end
13
end
...
diff --git a/main.c b/main.c
...
109
	return 0;
109
	return 0;
110
}
110
}
111
  
111
  
112
static int l_draw_fps_meter(lua_State *L) {
  
113
	DrawFPS(GetScreenWidth() - 100, 20); 
  
114
	return 0;
  
115
}
  
116
  
  
117
static int l_draw_info(lua_State *L) {
112
static int l_draw_info(lua_State *L) {
118
	float delta = GetFrameTime();
113
	float delta = GetFrameTime();
119
	int fps = GetFPS();
114
	int fps = GetFPS();
...
127
	return 0;
122
	return 0;
128
}
123
}
129
  
124
  
  
125
static int l_draw_rect(lua_State *L) {
  
126
	int x = luaL_checknumber(L, 1);
  
127
	int y = luaL_checknumber(L, 2);
  
128
	int width = luaL_checknumber(L, 3);
  
129
	int height = luaL_checknumber(L, 4);
  
130
	luaL_checktype(L, 5, LUA_TTABLE);
  
131
	Color color = {
  
132
		.r = (unsigned char)lua_getfield_int(L, 5, "r"),
  
133
		.g = (unsigned char)lua_getfield_int(L, 5, "g"),
  
134
		.b = (unsigned char)lua_getfield_int(L, 5, "b"),
  
135
		.a = (unsigned char)lua_getfield_int_opt(L, 5, "a", 255)
  
136
	};
  
137
	DrawRectangle(x, y, width, height, color);
  
138
	return 0;
  
139
}
  
140
  
  
141
static int l_draw_text(lua_State *L) {
  
142
	const char *text = luaL_checkstring(L, 1);
  
143
	int x = luaL_checknumber(L, 2);
  
144
	int y = luaL_checknumber(L, 3);
  
145
	int size = luaL_checknumber(L, 4);
  
146
	luaL_checktype(L, 5, LUA_TTABLE);
  
147
	Color color = {
  
148
		.r = (unsigned char)lua_getfield_int(L, 5, "r"),
  
149
		.g = (unsigned char)lua_getfield_int(L, 5, "g"),
  
150
		.b = (unsigned char)lua_getfield_int(L, 5, "b"),
  
151
		.a = (unsigned char)lua_getfield_int_opt(L, 5, "a", 255)
  
152
	};
  
153
	DrawTextEx(ctx.font, text, (Vector2){ x, y }, size, 0, color);
  
154
	return 0;
  
155
}
  
156
  
  
157
static int l_draw_pixel(lua_State *L) {}
  
158
static int l_draw_line(lua_State *L) {}
  
159
static int l_draw_circle(lua_State *L) {}
  
160
static int l_draw_ellipse(lua_State *L) {}
  
161
static int l_draw_triangle(lua_State *L) {}
  
162
  
130
static void help(const char *argv0) {
163
static void help(const char *argv0) {
131
	printf("Usage: %s [options]\n"
164
	printf("Usage: %s [options]\n"
132
			"\nAvailable options:\n"
165
			"\nAvailable options:\n"
133
			"  -r,--run=file.lua            run input file\n"
166
			"  -r,--run=file.lua       run input file\n"
134
			"  -b,--bundle                  bundles this folder\n"
167
			"  -b,--bundle             bundles this folder\n"
135
			"  -d,--debug                   prints debug information\n"
168
			"  -d,--debug              prints debug information\n"
136
			"  -h,--help                    this help\n"
169
			"  -h,--help               this help\n"
137
			"  -v,--version                 show version\n",
170
			"  -v,--version            show version\n",
138
			argv0);
171
			argv0);
139
}
172
}
140
  
173
  
...
193
		lua_register(L, "begin_drawing", l_begin_drawing);
226
		lua_register(L, "begin_drawing", l_begin_drawing);
194
		lua_register(L, "end_drawing", l_end_drawing);
227
		lua_register(L, "end_drawing", l_end_drawing);
195
		lua_register(L, "set_fps", l_set_fps);
228
		lua_register(L, "set_fps", l_set_fps);
196
		lua_register(L, "draw_fps_meter", l_draw_fps_meter);
  
197
		lua_register(L, "draw_info", l_draw_info);
229
		lua_register(L, "draw_info", l_draw_info);
198
		lua_register(L, "clear_window", l_clear_window);
230
		lua_register(L, "clear_window", l_clear_window);
  
231
		lua_register(L, "draw_rect", l_draw_rect);
  
232
		lua_register(L, "draw_text", l_draw_text);
199
  
233
  
200
		// Loading embeded modules into Lua state.
234
		// Loading embeded modules into Lua state.
201
		if (!load_embedded_module(L, json, json_len, "json")) return 1;
235
		if (!load_embedded_module(L, json, json_len, "json")) return 1;
...