X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg_console.h;h=029b3e69efe417011ead5965a481b7c93abd201c;hb=5cc37bf42297227603b045317af94952fff07bf3;hp=42f79e4f35e7c62582bad750798f19cc126b8082;hpb=4bfaf318265027e52181b2447c7d9497d68d2b54;p=vg.git diff --git a/vg_console.h b/vg_console.h index 42f79e4..029b3e6 100644 --- a/vg_console.h +++ b/vg_console.h @@ -1,5 +1,7 @@ /* Copyright (C) 2021-2023 Harry Godden (hgn) - All Rights Reserved */ +/* TODO: String types using dynamic, vg_str! */ + #ifndef VG_CONSOLE_H #define VG_CONSOLE_H @@ -7,8 +9,9 @@ #define VG_GAME #endif -#include "vg/vg_imgui.h" -#include "vg/vg_log.h" +#include "vg_imgui.h" +#include "vg_log.h" +#include "vg_string.h" #define VG_VAR_F32( NAME, ... ) \ { u32 flags=0x00; __VA_ARGS__ ;\ @@ -20,7 +23,6 @@ #define VG_VAR_PERSISTENT 0x1 #define VG_VAR_CHEAT 0x2 -#define VG_VAR_CHEATTOGGLE 0x4 typedef struct vg_var vg_var; typedef struct vg_cmd vg_cmd; @@ -33,12 +35,11 @@ struct vg_console{ enum vg_var_dtype{ k_var_dtype_i32, k_var_dtype_u32, - k_var_dtype_f32 + k_var_dtype_f32, + k_var_dtype_str } data_type; u32 flags; - - union{ u32 _u32; f32 _f32; i32 _i32; } defaults; } vars[ 128 ]; @@ -108,10 +109,6 @@ void vg_console_reg_var( const char *alias, void *ptr, enum vg_var_dtype type, var->data_type = type; var->flags = flags; - if ( type == k_var_dtype_f32 ) var->defaults._f32 = *((f32 *)ptr); - else if( type == k_var_dtype_i32 ) var->defaults._i32 = *((i32 *)ptr); - else if( type == k_var_dtype_u32 ) var->defaults._u32 = *((u32 *)ptr); - vg_info( "Console variable '%s' registered\n", alias ); } @@ -140,7 +137,9 @@ static int _vg_console_list( int argc, char const *argv[] ){ for( int i=0; iname ); + vg_info( "%s %s\n", + (const char *[]){ "i32","u32","f32","str" }[cv->data_type], + cv->name ); } return 0; @@ -182,26 +181,10 @@ int _vg_console_exec( int argc, const char *argv[] ){ return 0; } -int _ccmd_vg_console_defaults( int argc, const char *argv[] ){ - for( int i=0; idata_type; - void *ptr = cv->data; - - if ( type == k_var_dtype_f32 ) *((f32 *)ptr) = cv->defaults._f32; - else if( type == k_var_dtype_i32 ) *((i32 *)ptr) = cv->defaults._i32; - else if( type == k_var_dtype_u32 ) *((u32 *)ptr) = cv->defaults._u32; - } - - return 0; -} - static void _vg_console_init(void){ vg_console_reg_cmd( "list", _vg_console_list, NULL ); vg_console_reg_cmd( "crash", _test_break, NULL ); vg_console_reg_cmd( "exec", _vg_console_exec, NULL ); - vg_console_reg_cmd( "defaults", _ccmd_vg_console_defaults, NULL ); vg_console_reg_var( "cheats", &vg_console.cheats, k_var_dtype_i32, #ifdef VG_DEVWINDOW VG_VAR_PERSISTENT @@ -227,17 +210,20 @@ static void _vg_console_write_persistent(void){ struct vg_var *cv = &vg_console.vars[i]; if( cv->flags & VG_VAR_PERSISTENT ){ - switch( cv->data_type ){ - case k_var_dtype_i32: - fprintf( fp, "%s %d\n", cv->name, *(i32 *)(cv->data) ); - break; - case k_var_dtype_u32: - fprintf( fp, "%s %u\n", cv->name, *(u32 *)(cv->data) ); - break; - case k_var_dtype_f32: - fprintf( fp, "%s %.5f\n", cv->name, *(float *)(cv->data ) ); - break; - } + if( cv->data_type == k_var_dtype_i32 ){ + fprintf( fp, "%s %d\n", cv->name, *(i32 *)(cv->data) ); + } + else if( cv->data_type == k_var_dtype_u32 ){ + fprintf( fp, "%s %u\n", cv->name, *(u32 *)(cv->data) ); + } + else if( cv->data_type == k_var_dtype_f32 ){ + fprintf( fp, "%s %.5f\n", cv->name, *(float *)(cv->data ) ); + } + else if( cv->data_type == k_var_dtype_str ){ + vg_str *str = cv->data; + if( str->buffer && (str->i > 0) ) + fprintf( fp, "%s %s\n", cv->name, str->buffer ); + } } } @@ -313,8 +299,7 @@ static vg_cmd *vg_console_match_cmd( const char *kw ) return NULL; } -static void vg_execute_console_input( const char *cmd, bool silent ) -{ +static void vg_execute_console_input( const char *cmd, bool silent ){ char temp[512]; char const *args[8]; int arg_count = vg_console_tokenize( cmd, temp, args ); @@ -338,21 +323,24 @@ static void vg_execute_console_input( const char *cmd, bool silent ) } if( (cv->data_type == k_var_dtype_u32) || - (cv->data_type == k_var_dtype_i32) ) - { + (cv->data_type == k_var_dtype_i32) ){ int *ptr = cv->data; *ptr = atoi( args[1] ); - - if( cv->flags & VG_VAR_CHEATTOGGLE ){ - if( *ptr ){ - _ccmd_vg_console_defaults( 0, NULL ); - } - } } else if( cv->data_type == k_var_dtype_f32 ){ float *ptr = cv->data; *ptr = atof( args[1] ); } + else if( cv->data_type == k_var_dtype_str ){ + vg_str *str = cv->data; + vg_strfree( str ); + vg_strnull( str, NULL, -1 ); + + for( int i=1; idata_type == k_var_dtype_i32 ) @@ -361,6 +349,10 @@ static void vg_execute_console_input( const char *cmd, bool silent ) vg_info( "= %u\n", *((u32 *)cv->data) ); else if( cv->data_type == k_var_dtype_f32 ) vg_info( "= %.4f\n", *((float *)cv->data) ); + else if( cv->data_type == k_var_dtype_str ){ + vg_str *str = cv->data; + vg_info( "= '%s'\n", str->buffer ); + } } return;