summaryrefslogtreecommitdiff
path: root/cheat/tf2/projectile_pred.cpp
blob: c54f71249b37afdf5590740071ed41bd627fb501 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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;