UpdateClosestNode
This commit is contained in:
parent
95753ce4cc
commit
9eb782b77c
@ -86,6 +86,30 @@ CatVar draw_indices(CV_SWITCH, "wb_indices", "1", "Node indices");
|
|||||||
void Initialize() {
|
void Initialize() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UpdateClosestNode() {
|
||||||
|
float n_fov = 360.0f;
|
||||||
|
index_t n_idx = INVALID_NODE;
|
||||||
|
|
||||||
|
for (index_t i = 0; i < state::nodes.size(); i++) {
|
||||||
|
const auto& node = state::nodes[i];
|
||||||
|
|
||||||
|
if (not node.flags & NF_GOOD)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
float fov = GetFov(g_pLocalPlayer->v_OrigViewangles, g_pLocalPlayer->v_Eye, node.xyz);
|
||||||
|
if (fov < n_fov) {
|
||||||
|
n_fov = fov;
|
||||||
|
n_idx = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't select a node if you don't even look at it
|
||||||
|
if (n_fov < 10)
|
||||||
|
state::closest_node = n_idx;
|
||||||
|
else
|
||||||
|
state::closest_node = INVALID_NODE;
|
||||||
|
}
|
||||||
|
|
||||||
// Draws a single colored connection between 2 nodes
|
// Draws a single colored connection between 2 nodes
|
||||||
void DrawConnection(index_t a, index_t b) {
|
void DrawConnection(index_t a, index_t b) {
|
||||||
if (not (state::node_good(a) and state::node_good(b)))
|
if (not (state::node_good(a) and state::node_good(b)))
|
||||||
@ -131,7 +155,13 @@ void DrawNode(index_t node, bool draw_back) {
|
|||||||
if (not draw::WorldToScreen(n.xyz, wts))
|
if (not draw::WorldToScreen(n.xyz, wts))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
drawgl::Rect(wts.x - 2, wts.y - 2, 4, 4, color->rgba);
|
size_t node_size = 2;
|
||||||
|
if (node == state::closest_node)
|
||||||
|
node_size = 4;
|
||||||
|
if (node == state::active_node)
|
||||||
|
color = &colors::red;
|
||||||
|
|
||||||
|
drawgl::Rect(wts.x - node_size, wts.y - node_size, 2 * node_size, 2 * node_size, color->rgba);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (draw_indices) {
|
if (draw_indices) {
|
||||||
|
Reference in New Issue
Block a user