Fix major overstep with last commit
[carveJwlIkooP6JGAAIwe30JlM.git] / anim_test.h
1 /*
2 * Copyright (C) Mount0 Software, Harry Godden - All Rights Reserved
3 */
4
5 #ifndef ANIM_TEST_H
6 #define ANIM_TEST_H
7
8 #include "player.h"
9 #include "skeleton.h"
10 #include "shaders/viewchar.h"
11
12 static struct
13 {
14 struct skeleton skele;
15 struct skeleton_anim *anim_stand, *anim_highg;
16
17 glmesh mesh;
18 }
19 animtest;
20
21 static void anim_test_start(void)
22 {
23 mdl_header *johannes = mdl_load( "models/ch_new.mdl" );
24 skeleton_setup( &animtest.skele, johannes );
25 animtest.anim_stand = skeleton_get_anim( &animtest.skele, "pose_stand" );
26 animtest.anim_highg = skeleton_get_anim( &animtest.skele, "pose_highg" );
27 mdl_unpack_glmesh( johannes, &animtest.mesh );
28
29 free( johannes );
30 }
31
32 static void anim_test_update(void)
33 {
34 player_freecam();
35 player_camera_update();
36
37 m4x3f transform;
38 m4x3_identity( transform );
39
40 v4f qt;
41 q_axis_angle( qt, (v3f){0.0f,1.0f,0.0f}, vg_time*1.2f );
42 q_m3x3( qt, transform );
43
44 mdl_keyframe apose[32],
45 bpose[32];
46
47 float a = sinf(vg_time)*0.5f+0.5f,
48 b = (sinf(vg_time*2.0f)*0.5f+0.5f)*(15.0f/30.0f);
49
50 skeleton_sample_anim( &animtest.skele, animtest.anim_stand, b, apose );
51 skeleton_sample_anim( &animtest.skele, animtest.anim_highg, b, bpose );
52
53 skeleton_lerp_pose( &animtest.skele, apose, bpose, a, apose );
54 skeleton_apply_standard( &animtest.skele, apose, transform );
55
56 skeleton_debug( &animtest.skele );
57 }
58
59 static void anim_test_render( vg_tex2d *tex )
60 {
61 m4x4f world_4x4;
62 m4x3_expand( player.camera_inverse, world_4x4 );
63
64 gpipeline.fov = 60.0f;
65 m4x4_projection( vg_pv, gpipeline.fov,
66 (float)vg_window_x / (float)vg_window_y,
67 0.1f, 2100.0f );
68
69 m4x4_mul( vg_pv, world_4x4, vg_pv );
70 glEnable( GL_DEPTH_TEST );
71
72 shader_viewchar_use();
73 vg_tex2d_bind( tex, 0 );
74 shader_viewchar_uTexMain( 0 );
75 shader_viewchar_uPv( vg_pv );
76
77 shader_link_standard_ub( _shader_viewchar.id, 2 );
78
79 glUniformMatrix4x3fv( _uniform_viewchar_uTransforms,
80 animtest.skele.bone_count,
81 0,
82 (float *)animtest.skele.final_mtx );
83
84 mesh_bind( &animtest.mesh );
85 mesh_draw( &animtest.mesh );
86
87 glDisable( GL_DEPTH_TEST );
88 vg_lines_drawall( (float *)vg_pv );
89 }
90
91 #endif /* ANIM_TEST_H */