Sightline Improvements
This commit is contained in:
parent
37176eb319
commit
1778dd1621
@ -7,6 +7,14 @@
|
|||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
CatVar user_red_blue(CV_INT, "esp_color_red_blue", "0", "Red: Blue", "Blue color for red team", 255);
|
||||||
|
CatVar user_red_green(CV_INT, "esp_color_red_green", "0", "Red: Green", "Green color for red team", 255);
|
||||||
|
CatVar user_red_red(CV_INT, "esp_color_red_red", "0", "Red: Red", "Red color for red team", 255);
|
||||||
|
|
||||||
|
CatVar user_blue_blue(CV_INT, "esp_color_blue_blue", "0", "Blue: Blue", "Blue color for blue team", 255);
|
||||||
|
CatVar user_blue_green(CV_INT, "esp_color_blue_green", "0", "Blue: Green", "Green color for blue team", 255);
|
||||||
|
CatVar user_blue_red(CV_INT, "esp_color_blue_red", "0", "Blue: Red", "Red color for blue team", 255);
|
||||||
|
|
||||||
rgba_t colors::EntityF(CachedEntity* ent) {
|
rgba_t colors::EntityF(CachedEntity* ent) {
|
||||||
rgba_t result, plclr;
|
rgba_t result, plclr;
|
||||||
int skin;
|
int skin;
|
||||||
@ -54,6 +62,21 @@ rgba_t colors::EntityF(CachedEntity* ent) {
|
|||||||
if (ent->m_Type == ENTITY_PLAYER || ent->m_Type == ENTITY_BUILDING) {
|
if (ent->m_Type == ENTITY_PLAYER || ent->m_Type == ENTITY_BUILDING) {
|
||||||
if (ent->m_iTeam == TEAM_BLU) result = blu;
|
if (ent->m_iTeam == TEAM_BLU) result = blu;
|
||||||
else if (ent->m_iTeam == TEAM_RED) result = red;
|
else if (ent->m_iTeam == TEAM_RED) result = red;
|
||||||
|
// If user has custom color, check if we should change, and do so here
|
||||||
|
if (user_red_blue || user_red_green || user_red_red || user_blue_blue || user_blue_green || user_blue_red) {
|
||||||
|
switch(ent->m_iTeam) {
|
||||||
|
case TEAM_BLU:
|
||||||
|
if (user_blue_blue || user_blue_green || user_blue_red) {
|
||||||
|
result = FromRGBA8(user_blue_red, user_blue_green, user_blue_blue, 255);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TEAM_RED:
|
||||||
|
if (user_red_blue || user_red_green || user_red_red) {
|
||||||
|
result = FromRGBA8(user_red_red, user_red_green, user_red_blue, 255);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (ent->m_Type == ENTITY_PLAYER) {
|
if (ent->m_Type == ENTITY_PLAYER) {
|
||||||
if (IsPlayerInvulnerable(ent)) {
|
if (IsPlayerInvulnerable(ent)) {
|
||||||
if (ent->m_iTeam == TEAM_BLU) result = blu_u;
|
if (ent->m_iTeam == TEAM_BLU) result = blu_u;
|
||||||
|
@ -170,12 +170,14 @@ void CatVar::Register() {
|
|||||||
registered = true;
|
registered = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO, reverse
|
||||||
void CatVar::InstallChangeCallback(FnChangeCallback_t callback) {
|
void CatVar::InstallChangeCallback(FnChangeCallback_t callback) {
|
||||||
OnRegister([callback](CatVar* var) {
|
OnRegister([callback](CatVar* var) {
|
||||||
var->convar_parent->InstallChangeCallback(callback);
|
var->convar_parent->InstallChangeCallback(callback);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Used during int to setup catvars
|
||||||
void RegisterCatVars() {
|
void RegisterCatVars() {
|
||||||
while (registrationArray().size()) {
|
while (registrationArray().size()) {
|
||||||
CatVar* var = registrationArray().back();
|
CatVar* var = registrationArray().back();
|
||||||
@ -184,12 +186,14 @@ void RegisterCatVars() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use when creating a CatEnum for use in a CatVar
|
||||||
CatEnum::CatEnum(std::vector<std::string> values, int min) : value_names(values) {
|
CatEnum::CatEnum(std::vector<std::string> values, int min) : value_names(values) {
|
||||||
min_value = min;
|
min_value = min;
|
||||||
max_value = min + int(values.size()) - 1;
|
max_value = min + int(values.size()) - 1;
|
||||||
size = int(values.size());
|
size = int(values.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// use to get a name from a CatEnum
|
||||||
std::string CatEnum::Name(int value) {
|
std::string CatEnum::Name(int value) {
|
||||||
if (value >= min_value && value < max_value) {
|
if (value >= min_value && value < max_value) {
|
||||||
return value_names.at(unsigned(value) - unsigned(min_value));
|
return value_names.at(unsigned(value) - unsigned(min_value));
|
||||||
|
@ -19,6 +19,7 @@ class ConVar;
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include "aftercheaders.h"
|
#include "aftercheaders.h"
|
||||||
|
|
||||||
|
// Catvar types
|
||||||
enum CatVar_t {
|
enum CatVar_t {
|
||||||
CV_SWITCH,
|
CV_SWITCH,
|
||||||
CV_INT,
|
CV_INT,
|
||||||
@ -28,6 +29,8 @@ enum CatVar_t {
|
|||||||
CV_KEY
|
CV_KEY
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// TODO reverse
|
||||||
|
// Enum Something
|
||||||
class CatEnum {
|
class CatEnum {
|
||||||
public:
|
public:
|
||||||
CatEnum(std::vector<std::string> values, int min = 0);
|
CatEnum(std::vector<std::string> values, int min = 0);
|
||||||
@ -39,6 +42,7 @@ public:
|
|||||||
int size;
|
int size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// TODO reverse, no idea how catcommands are handled
|
||||||
class CatCommand {
|
class CatCommand {
|
||||||
public:
|
public:
|
||||||
CatCommand(std::string name, std::string help, FnCommandCallback_t callback);
|
CatCommand(std::string name, std::string help, FnCommandCallback_t callback);
|
||||||
@ -55,10 +59,10 @@ public:
|
|||||||
ConCommand* cmd { nullptr };
|
ConCommand* cmd { nullptr };
|
||||||
};
|
};
|
||||||
|
|
||||||
void RegisterCatCommands();
|
|
||||||
|
|
||||||
class CatVar {
|
class CatVar {
|
||||||
public:
|
public: // TODo, unknown reverse
|
||||||
CatVar(CatVar_t type, std::string name, std::string defaults, std::string desc_short, std::string desc_long = "no description");
|
CatVar(CatVar_t type, std::string name, std::string defaults, std::string desc_short, std::string desc_long = "no description");
|
||||||
CatVar(CatVar_t type, std::string name, std::string defaults, std::string desc_short, std::string desc_long, float max_val);
|
CatVar(CatVar_t type, std::string name, std::string defaults, std::string desc_short, std::string desc_long, float max_val);
|
||||||
CatVar(CatVar_t type, std::string name, std::string defaults, std::string desc_short, std::string desc_long, float min_val, float max_val);
|
CatVar(CatVar_t type, std::string name, std::string defaults, std::string desc_short, std::string desc_long, float min_val, float max_val);
|
||||||
@ -98,6 +102,7 @@ public:
|
|||||||
return current_base;
|
return current_base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Storage for the catvar
|
||||||
public:
|
public:
|
||||||
const CatVar_t type;
|
const CatVar_t type;
|
||||||
const std::string name;
|
const std::string name;
|
||||||
@ -122,10 +127,16 @@ public:
|
|||||||
static int last_id;
|
static int last_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// TODO, find out what this formatting does "std::vector<ClassName*?>& ArrayName()?"
|
||||||
|
|
||||||
|
// needed for registration
|
||||||
std::vector<CatVar*>& registrationArray();
|
std::vector<CatVar*>& registrationArray();
|
||||||
std::vector<CatCommand*>& commandRegistrationArray();
|
std::vector<CatCommand*>& commandRegistrationArray();
|
||||||
|
// List to store catvars
|
||||||
std::vector<CatVar*>& CatVarList();
|
std::vector<CatVar*>& CatVarList();
|
||||||
|
|
||||||
|
// Setup commands probs needed at int
|
||||||
|
void RegisterCatCommands();
|
||||||
void RegisterCatVars();
|
void RegisterCatVars();
|
||||||
int GetRebasedCatVarCount();
|
int GetRebasedCatVarCount();
|
||||||
|
|
||||||
|
@ -319,17 +319,67 @@ void _FASTCALL ProcessEntityPT(CachedEntity* ent) {
|
|||||||
float cy = cosf(DEG2RAD(eye_angles.y));
|
float cy = cosf(DEG2RAD(eye_angles.y));
|
||||||
float sp = sinf(DEG2RAD(eye_angles.x)); // pitch
|
float sp = sinf(DEG2RAD(eye_angles.x)); // pitch
|
||||||
float cp = cosf(DEG2RAD(eye_angles.x));
|
float cp = cosf(DEG2RAD(eye_angles.x));
|
||||||
Vector forward = Vector(cp * cy, cp * sy, -sp);
|
Vector forward_t = Vector(cp * cy, cp * sy, -sp);
|
||||||
// We dont want the sightlines endpoint to go behind us because the world to screen check will fail, but keep it at most 4096
|
// We dont want the sightlines endpoint to go behind us because the world to screen check will fail, but keep it at most 4096
|
||||||
forward = forward * min(ent->m_flDistance - 1, 4096) + eye_position;
|
Vector forward = forward_t * 4096.0F + eye_position;
|
||||||
Ray_t ray;
|
Ray_t ray;
|
||||||
ray.Init(eye_position, forward);
|
ray.Init(eye_position, forward);
|
||||||
trace_t trace;
|
trace_t trace;
|
||||||
g_ITrace->TraceRay(ray, MASK_SHOT_HULL, &trace::filter_no_player, &trace);
|
g_ITrace->TraceRay(ray, MASK_SHOT_HULL, &trace::filter_no_player, &trace);
|
||||||
|
|
||||||
|
// Screen vectors
|
||||||
Vector scn1, scn2;
|
Vector scn1, scn2;
|
||||||
if (draw::WorldToScreen(eye_position, scn1) && draw::WorldToScreen(trace.endpos, scn2)) {
|
|
||||||
drawgl::Line(scn1.x, scn1.y, scn2.x - scn1.x, scn2.y - scn1.y, fg);
|
// Status vars
|
||||||
|
bool found_scn2 = true;
|
||||||
|
|
||||||
|
// Get end point on screen
|
||||||
|
if (!draw::WorldToScreen(trace.endpos, scn2)) {
|
||||||
|
// Set status
|
||||||
|
found_scn2 = false;
|
||||||
|
// Get the end distance from the trace
|
||||||
|
float end_distance = trace.endpos.DistTo(eye_position);
|
||||||
|
|
||||||
|
// Loop and look back untill we have a vector on screen
|
||||||
|
for (int i = 1; i > 30; i++) {
|
||||||
|
// Subtract 40 multiplyed by the tick from the end distance and use that as our length to check
|
||||||
|
Vector end_vector = forward_t * (end_distance - (40 * i)) + eye_position;
|
||||||
|
if (end_vector.DistTo(eye_position) < 40) break;
|
||||||
|
if (draw::WorldToScreen(end_vector, scn2)) {
|
||||||
|
found_scn2 = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (found_scn2) {
|
||||||
|
// Set status
|
||||||
|
bool found_scn1 = true;
|
||||||
|
|
||||||
|
// If we dont have a vector on screen, attempt to find one
|
||||||
|
if (!draw::WorldToScreen(eye_position, scn1)) {
|
||||||
|
// Set status
|
||||||
|
found_scn1 = false;
|
||||||
|
// Get the end distance from the trace
|
||||||
|
float start_distance = trace.endpos.DistTo(eye_position);
|
||||||
|
|
||||||
|
// Loop and look back untill we have a vector on screen
|
||||||
|
for (int i = 1; i > 30; i++) {
|
||||||
|
// Multiply starting distance by 40, multiplyed by the loop tick
|
||||||
|
Vector start_vector = forward_t * (40 * i) + eye_position;
|
||||||
|
// We dont want it to go too far
|
||||||
|
if (start_vector.DistTo(trace.endpos) < 40) break;
|
||||||
|
// Check if we have a vector on screen, if we do then we set our status
|
||||||
|
if (draw::WorldToScreen(start_vector, scn1)) {
|
||||||
|
found_scn1 = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// We have both vectors, draw
|
||||||
|
if (found_scn1) {
|
||||||
|
drawgl::Line(scn1.x, scn1.y, scn2.x - scn1.x, scn2.y - scn1.y, fg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user