medium sized dollop
[vg.git] / src / vg / vg_input.h
index 76b3b95e7781934783363c6cb3345f0cf526661e..3985f3c26975dcc89acb5dcfeb1776e078a58898 100644 (file)
@@ -2,6 +2,9 @@
 #ifndef VG_INPUT_H
 #define VG_INPUT_H
 
+#include "common.h"
+#include "vg/vg_loader.h"
+
 static inline float vg_get_axis( const char *axis );
 static inline int vg_get_button( const char *button );
 static inline int vg_get_button_down( const char *button );
@@ -15,11 +18,6 @@ enum vg_button_state
        k_button_state_none = 0
 };
 
-GLFWgamepadstate vg_gamepad;
-int                    vg_gamepad_ready = 0;
-const char *vg_gamepad_name = NULL;
-int                    vg_gamepad_id;
-
 /* TODO: Fix this... */
 enum EInputMode
 {
@@ -147,17 +145,15 @@ static inline int key_is_keyboard( int const id )
 int get_button_cross_device( int const id )
 {
        if( key_is_keyboard( id ) )
-               return glfwGetKey( vg_window, id );
+               return glfwGetKey( vg.window, id );
        else
-               return glfwGetMouseButton( vg_window, id ) == GLFW_PRESS;
+               return glfwGetMouseButton( vg.window, id ) == GLFW_PRESS;
 }
 
 void vg_update_inputs(void)
 {
-   if( !glfwGetGamepadState( GLFW_JOYSTICK_1, &vg_gamepad) )
-   {
-      vg_gamepad_ready = 0;
-   }
+   if( !glfwGetGamepadState( GLFW_JOYSTICK_1, &vg.gamepad) )
+      vg.gamepad_ready = 0;
 
        /* Update button inputs */
        for( int i = 0; i < vg_list_size( vg_button_binds ); i ++ )
@@ -171,37 +167,44 @@ void vg_update_inputs(void)
    {
                struct button_binding *binding = vg_controller_binds + i;
                binding->prev = binding->value;
-      binding->value = vg_gamepad.buttons[ binding->bind ];
+      binding->value = vg.gamepad.buttons[ binding->bind ];
    }
        
        /* Update axis inputs */
        for( int i = 0; i < vg_list_size( vg_axis_binds ); i ++ )
        {
                struct axis_binding *binding = vg_axis_binds + i;
-      binding->value = vg_gamepad.axes[ binding->bind ];
+      binding->value = vg.gamepad.axes[ binding->bind ];
        }
 }
 
-static void vg_gamepad_init(void)
+static int vg_gamepad_init(void)
 {
-   for( int id = 0; id <= GLFW_JOYSTICK_LAST; id ++ )
+   if( vg_acquire_thread_sync(1) )
    {
-      if( glfwJoystickPresent( id ) )
+      for( int id=0; id<=GLFW_JOYSTICK_LAST; id ++ )
       {
-         vg_info( "Joystick found: '%s'\n", glfwGetJoystickName(id) );
+         if( glfwJoystickPresent( id ) )
+         {
+            vg_info( "Joystick found: '%s'\n", glfwGetJoystickName(id) );
+         }
+
+         if( glfwJoystickIsGamepad( id ) )
+         {
+            vg.gamepad_name = glfwGetGamepadName( id );
+            vg_success( "Gamepad mapping registered: %s\n", vg.gamepad_name );
+            
+            vg.gamepad_ready = 1;
+            vg.gamepad_id = id;
+            break;
+         }
       }
 
-      if( glfwJoystickIsGamepad( id ) )
-      {
-         vg_gamepad_name = glfwGetGamepadName( id );
-         vg_success( "Gamepad with mapping registered: %s\n", vg_gamepad_name );
-         
-         vg_gamepad_ready = 1;
-         vg_gamepad_id = id;
-         
-         break;
-      }
+      vg_release_thread_sync(1);
+      return 1;
    }
+
+   return 0;
 }
 
 #endif