basic dead device and some comments for next time
authorhgn <hgodden00@gmail.com>
Sat, 28 Jan 2023 11:14:07 +0000 (11:14 +0000)
committerhgn <hgodden00@gmail.com>
Sat, 28 Jan 2023 11:14:07 +0000 (11:14 +0000)
maps_src/mp_gridmap.mdl
player_device_dead.h [new file with mode: 0644]
player_device_skate.h
player_interface.h
skaterift.c

index 7c4cb3f459191d20d81835297ab027a4d70f8b15..a742af31f9ff6de515d73f404c53dd7609f06af3 100644 (file)
Binary files a/maps_src/mp_gridmap.mdl and b/maps_src/mp_gridmap.mdl differ
diff --git a/player_device_dead.h b/player_device_dead.h
new file mode 100644 (file)
index 0000000..848e8ec
--- /dev/null
@@ -0,0 +1,88 @@
+#ifndef PLAYER_DEVICE_DEAD_H
+#define PLAYER_DEVICE_DEAD_H
+
+#include "player_interface.h"
+#include "skeleton.h"
+#include "player_model.h"
+
+struct player_device_dead
+{
+};
+
+VG_STATIC void player_dead_pre_update( player_interface *player,
+                                       player_attachment *at )
+{
+}
+
+VG_STATIC void player_dead_update( player_interface *player,
+                                   player_attachment *at )
+{
+   player_ragdoll_iter( &player->ragdoll );
+}
+
+VG_STATIC void player_dead_post_update( player_interface *player,
+                                        player_attachment *at )
+{
+   copy_ragdoll_pose_to_avatar( &player->ragdoll, player->playeravatar );
+}
+
+VG_STATIC void player_dead_ui( player_interface *player,
+                               player_attachment *at )
+{
+}
+
+VG_STATIC void player_dead_bind( player_interface *player,
+                                 player_attachment *at )
+{
+   copy_avatar_pose_to_ragdoll( player->playeravatar, &player->ragdoll, 
+                                player->rb.v );
+}
+
+VG_STATIC void player_dead_pose( player_interface *player,
+                                 player_attachment *at, 
+                                 player_pose pose, m4x3f transform )
+{
+}
+
+/* FIXME: player_device_common */
+VG_STATIC void player_skate_get_camera( player_interface *player,
+                                        player_attachment *at, camera *cam );
+VG_STATIC void skate_camera_vector_look( camera *cam, v3f v, float C, float k );
+
+VG_STATIC void player_dead_get_camera( player_interface *player,
+                                       player_attachment *at, camera *cam )
+{
+   struct player_avatar *av = player->playeravatar;
+
+   v3f vp = {-0.1f,1.8f,0.0f},
+       vd = {-1.0f,0.0f,0.0f};
+
+   m4x3_mulv( av->sk.final_mtx[ av->id_head-1 ], vp, cam->pos );
+   m3x3_mulv( av->sk.final_mtx[ av->id_head-1 ], vd, vd );
+
+   v3_zero( cam->angles );
+   cam->fov = 119.0f;
+
+   skate_camera_vector_look( cam, vd, 1.0f, 0.0f );
+}
+
+VG_STATIC void player_dead_transport( player_interface *player,
+                                      player_attachment *at,
+                                      teleport_gate *gate )
+{
+}
+
+VG_STATIC player_device player_device_dead =
+{
+   .pre_update    = player_dead_pre_update,
+   .update        = player_dead_update,
+   .post_update   = player_dead_post_update,
+   .get_camera    = player_dead_get_camera,
+   .debug_ui      = player_dead_ui,
+   .bind          = player_dead_bind,
+#if 0
+   .pose          = player_dead_pose,
+#endif
+   .gate_transport= player_dead_transport
+};
+#endif /* PLAYER_DEVICE_DEAD_H */
index d4c1e6201803e795fac6382d35c4b3c00792dc79..3d5b0795c4473af25d277209b8bcd3a384026590 100644 (file)
@@ -1493,6 +1493,8 @@ VG_STATIC void skate_camera_firstperson( player_interface *player,
 
 /* this is a little yucky but needs to be done so we can use this 'prediction' 
  * in the pose function. its unfortunate. too bad
+ *
+ * FIXME: Can do better with FREEDOM MODE + api ordering.
  */
 VG_STATIC void skate_camera_thirdperson_nextpos( player_interface *player,
                                                  struct player_device_skate *s,
index 54173455e9be62569a9b68cb23037761a41bc2ae..acd9e1e9082daace25308df87a95cfa0a8076159 100644 (file)
@@ -153,6 +153,8 @@ VG_STATIC void player_use_mesh( player_interface *player, glmesh *mesh )
    player->playermesh = mesh;
 }
 
+/* FIXME: Seperate concepts for binding and equip.
+ */
 VG_STATIC void player_use_device( player_interface *player, player_device *dev,
                                   void *storage )
 {
@@ -241,16 +243,23 @@ VG_STATIC void player_pre_render( player_interface *player )
    player_pose pose;
    m4x3f transform;
 
-   player->dev.device->pose( player, &player->dev, pose, transform );
+   /* FIXME: Give devices more control over these render stages, and have 
+    *        'API calls'
+    *        for this kindof crap instead of it dictating order... */
+
+   if( player->dev.device->pose )
+   {
+      player->dev.device->pose( player, &player->dev, pose, transform );
 
-   struct skeleton *sk = &player->playeravatar->sk;
+      struct skeleton *sk = &player->playeravatar->sk;
 
-   skeleton_apply_pose( sk, pose, k_anim_apply_defer_ik );
-   skeleton_apply_ik_pass( sk );
-   skeleton_apply_pose( sk, pose, k_anim_apply_deffered_only );
-   skeleton_apply_inverses( sk );
-   skeleton_apply_transform( sk, transform );
-   skeleton_debug( sk );
+      skeleton_apply_pose( sk, pose, k_anim_apply_defer_ik );
+      skeleton_apply_ik_pass( sk );
+      skeleton_apply_pose( sk, pose, k_anim_apply_deffered_only );
+      skeleton_apply_inverses( sk );
+      skeleton_apply_transform( sk, transform );
+      skeleton_debug( sk );
+   }
 
    player->dev.device->get_camera( player, &player->dev, &player->cam );
    /* TODO: if dead copy ragdoll.. . */
@@ -321,6 +330,11 @@ VG_STATIC void player_spawn( player_interface *player,
       player->dev.device->reset( player, &player->dev, rp );
 }
 
+VG_STATIC void player_kill( player_interface *player )
+{
+   
+}
+
 /*
  * Apply per render-frame mouse look from player to angles
  */
index e032cccc08295e878127c8ccc7da0a4112cda4eb..0d3ff70599a60ec40e2b2e653363c5b66e810d8b 100644 (file)
 #include "player_interface.h"
 #include "player_device_walk.h"
 #include "player_device_skate.h"
+#include "player_device_dead.h"
 #include "player_model.h"
 
 /* temp */
 VG_STATIC player_interface localplayer;
 VG_STATIC struct player_device_walk localplayer_walk;
 VG_STATIC struct player_device_skate localplayer_skate;
+VG_STATIC struct player_device_dead localplayer_dead;
 VG_STATIC struct player_avatar localplayer_avatar;
 VG_STATIC glmesh localplayer_meshes[3];
 
@@ -66,6 +68,12 @@ VG_STATIC void vg_launch_opt(void)
 
 }
 
+VG_STATIC int __kill( int argc, const char *argv[] )
+{
+   player_use_device( &localplayer, &player_device_dead, &localplayer_dead );
+   return 0;
+}
+
 VG_STATIC int __respawn( int argc, const char *argv[] )
 {
    struct respawn_point *rp = NULL, *r;
@@ -154,6 +162,12 @@ VG_STATIC void vg_preload(void)
       //.poll_suggest = reset_player_poll
    });
 
+   vg_function_push( (struct vg_cmd) {
+      .name = "ded",
+      .function = __kill,
+      //.poll_suggest = reset_player_poll
+   });
+
 vg_info(" Copyright  .        . .       -----, ,----- ,---.   .---.  \n" );
 vg_info(" 2021-2022  |\\      /| |           /  |      |    | |    /| \n" );
 vg_info("            | \\    / | +--        /   +----- +---'  |   / | \n" );
@@ -237,7 +251,7 @@ VG_STATIC void vg_load(void)
    player_use_avatar( &localplayer, &localplayer_avatar );
    player_use_mesh( &localplayer, &localplayer_meshes[0] );
    player_use_device( &localplayer, &player_device_walk, &localplayer_walk );
-   //player_use_device( &localplayer, &player_device_skate, &localplayer_skate );
+   player_use_device( &localplayer, &player_device_skate, &localplayer_skate );
 
    /* --------------------- */