deadzones adjustable & other fixes
authorhgn <hgodden00@gmail.com>
Sat, 31 Dec 2022 16:06:18 +0000 (16:06 +0000)
committerhgn <hgodden00@gmail.com>
Sat, 31 Dec 2022 16:06:18 +0000 (16:06 +0000)
submodules/SDL
vg_input.h
vg_mem.h
vg_tex.h
vg_ui.h

index 06492c598158cf825a18aececaf7511d7fd04f48..eef4d3c86a653f91b7221c80809ba8ab56f94cf1 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 06492c598158cf825a18aececaf7511d7fd04f48
+Subproject commit eef4d3c86a653f91b7221c80809ba8ab56f94cf1
index d8e398cf8d9edd9e8c995445913307ea1b811a59..87109d25e777d2d2f844472ce88e3b62b44ed3ca 100644 (file)
@@ -14,6 +14,8 @@ VG_STATIC inline int vg_get_button( const char *button );
 VG_STATIC inline int vg_get_button_down( const char *button );
 VG_STATIC inline int vg_get_button_up( const char *button );
 
+VG_STATIC float g_controller_deadzone = 0.05f;
+
 enum vg_button_state
 {
        k_button_state_down = 1,
@@ -482,8 +484,11 @@ VG_STATIC void vg_input_update( u32 num, struct input_binding *binds )
                gamepad_value *= -1.0f;
          }
 
-         if( fabsf(gamepad_value) <= 0.01f )
-            gamepad_value = 0.0f;
+         float deadz   = vg_clampf( g_controller_deadzone, 0.0f, 0.999f ),
+               high    = vg_maxf( 0.0f, fabsf(gamepad_value) - deadz ),
+               norm    = high / (1.0f-deadz);
+
+         gamepad_value = vg_signf( gamepad_value ) * norm;
 
          if( fabsf(keyboard_value) > fabsf(gamepad_value) )
             bind->axis.value = keyboard_value;
@@ -586,6 +591,14 @@ VG_STATIC void vg_input_init(void)
       .function = vg_rebind_input_cmd
    });
 
+   vg_convar_push( (struct vg_convar){
+      .name = "controller_deadzone",
+      .data = &g_controller_deadzone,
+      .data_type = k_convar_dtype_f32,
+      .opt_f32 = { .clamp = 0 },
+      .persistent = 1
+   });
+
    vg_info( "Checking for controller\n" );
    SDL_GameControllerAddMappingsFromFile( "gamecontrollerdb.txt" );
    
index a21467488d5a47972bcc84a32bba6f1e599838b3..5edbd9c68ebc60560860f98a53a62687bfb6dc4b 100644 (file)
--- a/vg_mem.h
+++ b/vg_mem.h
@@ -111,8 +111,8 @@ VG_STATIC void *vg_linear_alloc( void *buffer, u32 size )
 {
    if( size % 8 )
    {
-      vg_error( "Requested size: %u\n", size );
-      vg_fatal_exit_loop( "8 byte alignment required" );
+      vg_error( "alloc(%u) is not 8 byte aligned\n", size );
+      size = vg_align8( size );
    }
 
    vg_linear_allocator *alloc = vg_linear_header( buffer );
index 5c7c7f6b26a8ca088d875b61ca96b85aa2450201..dcc297ad2b13e4fbb3a9c3c41414d48db8e7d0d5 100644 (file)
--- a/vg_tex.h
+++ b/vg_tex.h
@@ -2,6 +2,7 @@
 #ifndef VG_TEX_H
 #define VG_TEX_H
 
+#define VG_GAME
 #include "vg/vg.h"
 #include "vg/vg_log.h"
 
diff --git a/vg_ui.h b/vg_ui.h
index 0c88b2f26e566dc5eac01b84b7c2071b26d81fac..ba428b009b385132e1f5bbf3c6253b09e5b2ddf5 100644 (file)
--- a/vg_ui.h
+++ b/vg_ui.h
@@ -180,6 +180,7 @@ VG_STATIC void _vg_ui_init(void)
 
    vg_uictx.max_indices = 20000;
    vg_uictx.max_verts = 30000;
+   vg_uictx.colours = &ui_default_colours;
        
        /* Generate the buffer we are gonna be drawing to */
    glGenVertexArrays( 1, &vg_uictx.vao );