stuff
[carveJwlIkooP6JGAAIwe30JlM.git] / character.h
index f86830a7838964f79726733e03e29a2eefa64aed..047b714df02f62db79b113299848d467abdc2691 100644 (file)
@@ -1,16 +1,25 @@
 #ifndef CHARACTER_H
 #define CHARACTER_H
 
-/* TODO: -> Common.h */
-#define VG_3D
-#include "vg/vg.h"
-
+#include "common.h"
 #include "model.h"
 #include "scene.h"
 #include "ik.h"
 #include "rigidbody.h"
 #include "shaders/character.h"
 
+vg_tex2d tex_pallet = { .path = "textures/ch_gradient.qoi" };
+
+static void character_register(void)
+{
+   shader_character_register();
+}
+
+static void character_init(void)
+{
+   vg_tex2d_init( (vg_tex2d *[]){ &tex_pallet }, 1 );
+}
+
 #define FOREACH_PART(FN) \
    FN( foot_l ) \
    FN( foot_r ) \
@@ -39,6 +48,7 @@
 #define ADD_ONE(_) +1
 #define PART_COUNT FOREACH_PART(ADD_ONE)
 
+
 enum character_part
 {
    FOREACH_PART( MAKE_ENUM )
@@ -358,6 +368,22 @@ static character_pose pose_stand =
   .cam = {-0.3477f, 1.5884f, -0.0019f}
 };
 
+static character_pose pose_stand_reverse =
+{
+  .b0 =  {0.1624f, 1.0688f, -0.0632f},
+  .b1 =  {0.0499f, 1.5564f, -0.0013f},
+  .p =   {0.5423f, 1.2810f, -0.2368f},
+  .fr =  {0.0535f, 0.1312f, -0.3647f},
+  .fl =  {0.0354f, 0.1464f, 0.2917f},
+  .pl =  {-0.4325f, 0.6889f, 0.4591f},
+  .pr =  {-0.4794f, 0.7598f, -0.0842f},
+  .hl =  {0.0498f, 1.0058f, 0.2317f},
+  .hr =  {0.0188f, 0.9786f, -0.2725f},
+  .apl = {0.2898f, 1.3453f, 0.0695f},
+  .apr = {0.4715f, 1.2876f, -0.4982f},
+  .cam = {-0.3477f, 1.5884f, -0.0730f}
+};
+
 static character_pose pose_fly =
 {
   .b0 =  {0.2995f, 0.6819f, -0.1369f},
@@ -503,8 +529,9 @@ static void character_testpose( struct character *ch, float t )
 static void character_draw( struct character *ch, float temp )
 {
    shader_character_use();
-
    shader_character_uPv( vg_pv );
+
+   vg_tex2d_bind( &tex_pallet, 0 );
    shader_character_uTexMain( 0 );
    shader_character_uOpacity( temp );
    
@@ -536,12 +563,6 @@ static void character_draw( struct character *ch, float temp )
    }
 }
 
-static void character_register(void)
-{
-   shader_character_register();
-}
-
-
 /* 
  * Ragdoll Stuff
  */
@@ -823,11 +844,20 @@ static void character_debug_ragdoll( struct character *ch )
    rb_debug( &ch->ragdoll[k_chpart_foot_r], 0xff00a5ff );
 }
 
-static void character_ragdoll_iter( struct character *ch, scene *sc )
+static void character_ragdoll_iter( struct character *ch )
 {
    for( int i=0; i<PART_COUNT; i++ )
    {
-      rb_build_manifold( &ch->ragdoll[i], sc );
+      rb_manifold_reset( &ch->ragdoll[i] );
+      rb_build_manifold_terrain( &ch->ragdoll[i] );
+
+      u32 colliders[16];
+      int len = bh_select( &world.bhcubes, ch->ragdoll[i].bbx_world, 
+            colliders, 16 );
+      
+      for( int j=0; j<len; j++ )
+         rb_build_manifold_rb_static( &ch->ragdoll[i], 
+               &world.temp_rbs[colliders[j]] );
    }
 
    v3f rv;