X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=character.h;h=047b714df02f62db79b113299848d467abdc2691;hb=a6e1ee0f51aa5570b20aad658365dec896f8c9b8;hp=f161f7d210214fabe0e07befa0aec976518477c7;hpb=fa76acdf613baf7991fbceecbdbd7138620647f8;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/character.h b/character.h index f161f7d..047b714 100644 --- a/character.h +++ b/character.h @@ -1,57 +1,24 @@ #ifndef CHARACTER_H #define CHARACTER_H -#include "vg/vg.h" +#include "common.h" #include "model.h" #include "scene.h" #include "ik.h" #include "rigidbody.h" +#include "shaders/character.h" -SHADER_DEFINE( shader_player, - - /*Include*/ VERTEX_STANDARD_ATTRIBUTES - - "uniform mat4 uPv;" - "uniform mat4x3 uMdl;" - "uniform float uOpacity;" - "" - "out vec4 aColour;" - "out vec2 aUv;" - "out vec3 aNorm;" - "out vec3 aCo;" - "out float aOpacity;" - "" - "void main()" - "{" - "vec3 world_pos = uMdl * vec4(a_co,1.0);" - "gl_Position = uPv * vec4(world_pos,1.0);" - - "aColour = a_colour;" - "aUv = a_uv;" - "aNorm = mat3(uMdl) * a_norm;" - "aCo = a_co;" - "aOpacity = 1.0-(gl_Position.y+0.5)*uOpacity;" - "}", - /* Fragment */ - "out vec4 FragColor;" - "" - "uniform sampler2D uTexMain;" - "uniform vec4 uColour;" - "" - "in vec4 aColour;" - "in vec2 aUv;" - "in vec3 aNorm;" - "in vec3 aCo;" - "in float aOpacity;" - "" - "void main()" - "{" - "vec3 diffuse = texture( uTexMain, aUv ).rgb;" - "FragColor = vec4(pow(diffuse,vec3(1.0)),aOpacity);" - "}" - , - UNIFORMS({ "uTexMain", "uPv", "uMdl", "uOpacity" }) -) +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 ) \ @@ -81,6 +48,7 @@ SHADER_DEFINE( shader_player, #define ADD_ONE(_) +1 #define PART_COUNT FOREACH_PART(ADD_ONE) + enum character_part { FOREACH_PART( MAKE_ENUM ) @@ -400,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}, @@ -544,14 +528,12 @@ static void character_testpose( struct character *ch, float t ) static void character_draw( struct character *ch, float temp ) { - SHADER_USE(shader_player); - glUniformMatrix4fv( SHADER_UNIFORM( shader_player, "uPv" ), - 1, GL_FALSE, (float *)vg_pv ); + shader_character_use(); + shader_character_uPv( vg_pv ); - glUniform1i( SHADER_UNIFORM( shader_player, "uTexMain" ), 0 ); - glUniform1f( SHADER_UNIFORM( shader_player, "uOpacity" ), temp ); - - GLint kuMdl = SHADER_UNIFORM( shader_player, "uMdl" ); + vg_tex2d_bind( &tex_pallet, 0 ); + shader_character_uTexMain( 0 ); + shader_character_uOpacity( temp ); glEnable( GL_CULL_FACE ); glCullFace( GL_BACK ); @@ -560,7 +542,7 @@ static void character_draw( struct character *ch, float temp ) for( int i=4; imatrices[i] ); + shader_character_uMdl( ch->matrices[i] ); submodel_draw( &ch->parts[i] ); } @@ -568,25 +550,19 @@ static void character_draw( struct character *ch, float temp ) { if( ch->shoes[i] ) { - glUniformMatrix4x3fv( kuMdl, 1, GL_FALSE, (float *)ch->matrices[i] ); + shader_character_uMdl( ch->matrices[i] ); submodel_draw( &ch->parts[i] ); } else { - glUniformMatrix4x3fv( kuMdl, 1, GL_FALSE, (float *)ch->matrices[i+2] ); + shader_character_uMdl( ch->matrices[i+2] ); submodel_draw( &ch->parts[i] ); - glUniformMatrix4x3fv( kuMdl, 1, GL_FALSE, (float *)ch->matrices[i] ); + shader_character_uMdl( ch->matrices[i] ); submodel_draw( &ch->parts[i+2] ); } } } -static void character_shader_register(void) -{ - SHADER_INIT(shader_player); -} - - /* * Ragdoll Stuff */ @@ -868,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; iragdoll[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; jragdoll[i], + &world.temp_rbs[colliders[j]] ); } v3f rv;