From: hgn Date: Sat, 28 Jan 2023 11:14:07 +0000 (+0000) Subject: basic dead device and some comments for next time X-Git-Url: https://skaterift.com/git/?a=commitdiff_plain;h=f82c365a9144c3e5e57df88cb57ef273e9e9d47b;p=carveJwlIkooP6JGAAIwe30JlM.git basic dead device and some comments for next time --- diff --git a/maps_src/mp_gridmap.mdl b/maps_src/mp_gridmap.mdl index 7c4cb3f..a742af3 100644 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 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 ); /* --------------------- */