From 7ccb819f867493f8ec202ea3b39c94c198c64584 Mon Sep 17 00:00:00 2001 From: JustSomePwner Date: Thu, 30 Aug 2018 14:01:54 +0200 Subject: first --- tf2/projectile_pred.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 tf2/projectile_pred.cpp (limited to 'tf2/projectile_pred.cpp') diff --git a/tf2/projectile_pred.cpp b/tf2/projectile_pred.cpp new file mode 100644 index 0000000..c54f712 --- /dev/null +++ b/tf2/projectile_pred.cpp @@ -0,0 +1,70 @@ +#include "projectile_pred.h" +#include "sdk.h" +#include "interfaces.h" + +namespace util +{ + + vec3_t c_projectile_pred::predict_player( c_base_player* player ) { + if ( !player || !player->is_valid( ) ) return vec3_t{ }; + + static auto sv_gravity = cl.m_cvar( )->FindVar( "sv_gravity" ); //unnecessary for now + auto local = g_ctx.m_local; //will be used for stuff like grenades + //will also need to calculate friction etc + auto weapon = local->get_active_weapon( ); + if ( !weapon ) return player->get_origin( ); + + float projectile_speed = get_projectile_speed( weapon ); + + vec3_t player_vel = player->get_velocity( ); + vec3_t projectile_vel = vec3_t( ); + + float estimated_travel_time = ( local->get_eye_pos( ) - player->get_origin( ) ).length( ) / projectile_speed + cl.m_globals->interval_per_tick; + vec3_t estimated_predicted_pos = player->get_origin( ) + player_vel * estimated_travel_time; + + return estimated_predicted_pos; + } + + float c_projectile_pred::get_projectile_speed( c_base_weapon* weapon ) { + if ( !weapon ) + return -1.f; + /* + this is completely hardcoded + if you can find a better way to figure this out + then please tell me + -- nave + */ + + int id = weapon->GetClientClass( )->m_class_id; + + float BeginCharge; + float Charge; + + //return flSpeed; + switch ( id ) { + case ClientClassIDs::CTFGrenadeLauncher: + return 840.0f; + case ClientClassIDs::CTFRocketLauncher_DirectHit: + return 1980.0f; + case ClientClassIDs::CTFRocketLauncher: + case ClientClassIDs::CTFRocketLauncher_Mortar: + return 1100.0f; + case ClientClassIDs::CTFFlareGun: + return 1450.0f; + case ClientClassIDs::CTFBat_Wood: + return 1940.0f; + case ClientClassIDs::CTFSyringeGun: + return 990.0f; + case ClientClassIDs::CTFCompoundBow: { + return 0.f; //need more shit, cba now + } + + default: + return -1.0f; + } + + return -1.0f; + } +} + +util::c_projectile_pred projectile_pred; \ No newline at end of file -- cgit v1.2.3