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
|
#include "assets.h"
#include "../game.h"
#include "../render/gl_2d_font.h"
#include "../render/model.h"
#include "../util/stb_image.h"
#include "../util/anim.h"
void assets_init( GAME_DATA *game ) {
game->assets.test = gl_texture_from_file( game->gl, "uvtest.png" );
game->assets.fonts_init = 0;
MODEL model = model_from_obj( "../assets/obj/", "base" );
MODEL earth = model_from_obj( "../assets/obj/", "earth" );
MODEL latest = model_from_obj( "../assets/obj/", "latest" );
}
void assets_create_fonts( struct GAME_DATA *game ) {
dlog( "creating fonts\n" );
game->gl->fonts.each( fn( GL_FONT** font ) {
gl_font_destroy( game->gl, *font );
});
game->gl->fonts.clear();
GAME_ASSETS* a = &game->assets;
a->font = gl_font_create( game->gl, "cour.ttf", 16 );
a->jpn12 = gl_font_create( game->gl, "jpn12.ttf", 12 );
a->jpn16 = gl_font_create( game->gl, "jpn16.ttf", 16 );
}
U8 assets_on_frame( struct GAME_DATA *game ) {
thread_mutex_lock( &font_mutex );
if( !game->assets.fonts_init ) {
assets_create_fonts( game );
game->assets.fonts_init = 1;
thread_mutex_unlock( &font_mutex );
return 0;
}
thread_mutex_unlock( &font_mutex );
return 1;
}
LIST<FILE_ENTRY> assets_get_files_by_ext_dir( const char** extensions, const char* dirname ) {
LIST<FILE_ENTRY> ret;
LIST<FILE_ENTRY> dir = dir_get_entries( dirname );
dir.each( fn( FILE_ENTRY* e ) {
char fullpath[256];
sprintf( fullpath, "%s/%s", dirname, e->name );
if( e->dir ) {
LIST<FILE_ENTRY> subdir = assets_get_files_by_ext_dir( extensions, fullpath );
subdir.each( fn( FILE_ENTRY* se ) { ret.push( *se ); } );
return;
}
U32 len = strlen( e->name );
for( U32 i = 0; !!extensions[i]; ++i ) {
const char* ext = extensions[i];
U32 extlen = strlen( ext );
if( extlen < len && e->name[len - extlen - 1] == '.' ) {
if( !strcmp( e->name + len - extlen, ext ) ) {
FILE_ENTRY ne{ .dir = 0 };
strcpy( ne.name, fullpath );
ret.push( ne );
}
}
}
} );
return ret;
}
LIST<FILE_ENTRY> assets_get_files_by_ext( const char** extensions ) {
return assets_get_files_by_ext_dir( extensions, "../assets" );
}
const char* assets_abspath( const char* filename ) {
while( !strncmp( filename, "../assets/", 10 ) )
filename += 10;
return filename;
}
|