X-Git-Url: https://harrygodden.com/git/?p=csRadar.git;a=blobdiff_plain;f=csRadar.c;h=f79fa3b8ef3902113ae975e40bf032204542112f;hp=11253739c13bab5f3b4ec1ea829f63120420e625;hb=0ee9d77f45e007b119de2d44feef81516aaddaaf;hpb=abfc6360542cb480122313a36f6ed02c08074ed5 diff --git a/csRadar.c b/csRadar.c index 1125373..f79fa3b 100644 --- a/csRadar.c +++ b/csRadar.c @@ -1,15 +1,23 @@ +// Copyright (C) 2021 Harry Godden (hgn) + +// Building: +// gcc -rdynamic csRadar.c -o csRadar -lm -ldl +// +// Plugins: +// gcc -fpic -shared -o ext/my_plugin.so my_plugin.c -lm + #define VALVE_IMPLEMENTATION #define CSR_EXECUTABLE #include "csRadar.h" -// gcc -Wall -fsanitize=address csRadar.c -o csRadar -lm - int main( int argc, char *argv[] ) { csr_api api = { .padding = 128.f, .resolution = 1024, + .min_z = -INFINITY, + .max_z = INFINITY, .write_txt = 1, .api_version = csr_api_version, .sampling_mode = k_EMSAA_RGSS @@ -17,6 +25,7 @@ int main( int argc, char *argv[] ) int output_set = 0; char *extension = NULL; + char *gameinfo = NULL; char *arg; while( csr_argp( argc, argv ) ) @@ -29,7 +38,7 @@ int main( int argc, char *argv[] ) goto IL_CSR_EXIT; } - api.strings[ api.num_strings ++ ] = arg; + api.strings[ api.num_strings ++ ].str = arg; } if( (arg = csr_opt_arg( 'o' )) ) @@ -42,7 +51,7 @@ int main( int argc, char *argv[] ) if( (arg = csr_opt_arg( 'g' )) ) { - fs_set_gameinfo( arg ); + gameinfo = arg; } if( (arg = csr_opt_arg( 'r' )) ) @@ -84,6 +93,11 @@ int main( int argc, char *argv[] ) { extension = arg; } + + if( (arg = csr_long_opt_arg( "min" )) ) + api.min_z = atof( arg ); + if( (arg = csr_long_opt_arg( "max" )) ) + api.max_z = atof( arg ); if( csr_opt( 'v' ) || csr_long_opt( "version" ) ) { @@ -108,13 +122,14 @@ int main( int argc, char *argv[] ) " -r 1024 Output resolution\n" " -o Specify output name/path\n" " -e Same as default arg, but instead filters for entity class\n" + //" -s Add a vertical split at this height\n" " --padding=128 When cropping radar, add padding units to border\n" //" --standard-layers Use standard TAR layers/groups\n" - " --write-normals Enable normals as an output stream\n" - " --write-origins Enable entity origins as an output stream\n" " --no-txt Don't create matching radar txt\n" " --multi-sample=RGSS [ none, 2x, rgss, 8r ]\n" " --extension=TAR Use an extension binary instead\n" + " --min=z Miniumum height to render\n" + " --max=z Maxiumum height to render\n" "\n" " -v --version Display program version\n" " -h --help Display this help text\n" @@ -126,10 +141,15 @@ int main( int argc, char *argv[] ) if( api.num_strings ) { + if( gameinfo ) + { + fs_set_gameinfo( gameinfo ); + } + // Path handling if( !output_set ) { - strcpy( api.output_path, api.strings[0] ); + strcpy( api.output_path, api.strings[0].str ); csr_stripext( api.output_path ); } @@ -144,11 +164,21 @@ int main( int argc, char *argv[] ) log_info( "output_path: '%s'\n", api.output_path ); log_info( "vmf_name: '%s'\n", api.vmf_name ); - api.map = vmf_init( api.strings[0] ); + api.map = vmf_init( api.strings[0].str ); if( api.map ) { + // Update arg inferred types + api.strings[0].type = k_iftype_vmf; + for( int i = 1; i < api.num_strings; i ++ ) + { + if( vmf_visgroup_id( api.map->root, api.strings[i].str ) != -1 ) + api.strings[i].type = k_iftype_visgroup; + else + api.strings[i].type = k_iftype_classname; + } + if( !extension ) - extension = "csRadarFree"; + extension = "csr_substance"; csr_so ext = csr_libopen( extension );