From f82c365a9144c3e5e57df88cb57ef273e9e9d47b Mon Sep 17 00:00:00 2001 From: hgn Date: Sat, 28 Jan 2023 11:14:07 +0000 Subject: [PATCH] basic dead device and some comments for next time --- maps_src/mp_gridmap.mdl | Bin 1388464 -> 1400144 bytes player_device_dead.h | 88 ++++++++++++++++++++++++++++++++++++++++ player_device_skate.h | 2 + player_interface.h | 30 ++++++++++---- skaterift.c | 16 +++++++- 5 files changed, 127 insertions(+), 9 deletions(-) create mode 100644 player_device_dead.h diff --git a/maps_src/mp_gridmap.mdl b/maps_src/mp_gridmap.mdl index 7c4cb3f459191d20d81835297ab027a4d70f8b15..a742af31f9ff6de515d73f404c53dd7609f06af3 100644 GIT binary patch delta 6935 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 delta 280 zcmXZUze@sP7zgn0z22F<=iRI4*%CC=&{#{*5=108xCpv6w6*Hi&=4dX1j4~vxHQ!4 zpdoZeEjJ7P`Ui4zzRB6IAUvP%7aks-`EPT$Y&-yyz5!r(R%QaH)S?5LOMrt<7qHkU zZUeYx-|o60fN-}@OTbeV*!JMcz)}vbZ0+iwYgctv9qXp8^u4+meW;wpL*OO$gV;AnP=-vhC`)^kqkWQOQ$C7)=kh&D$4)`? hl2zUeItzzfQdEdKi(+lv3#VQy2xlIZqHyLX-3=^zPBZ`j diff --git a/player_device_dead.h b/player_device_dead.h new file mode 100644 index 0000000..848e8ec --- /dev/null +++ b/player_device_dead.h @@ -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 */ diff --git a/player_device_skate.h b/player_device_skate.h index d4c1e62..3d5b079 100644 --- a/player_device_skate.h +++ b/player_device_skate.h @@ -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, diff --git a/player_interface.h b/player_interface.h index 5417345..acd9e1e 100644 --- a/player_interface.h +++ b/player_interface.h @@ -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 */ diff --git a/skaterift.c b/skaterift.c index e032ccc..0d3ff70 100644 --- a/skaterift.c +++ b/skaterift.c @@ -25,12 +25,14 @@ #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 ); /* --------------------- */ -- 2.25.1