generated from Persson-dev/Godot-Xmake
simple dynamic crosshair
This commit is contained in:
59
src/Crosshair.cpp
Normal file
59
src/Crosshair.cpp
Normal file
@@ -0,0 +1,59 @@
|
||||
#include "Crosshair.h"
|
||||
|
||||
using namespace godot;
|
||||
|
||||
namespace blitz {
|
||||
void Crosshair::_bind_methods() {}
|
||||
|
||||
Crosshair::Crosshair() :
|
||||
m_DotRadius(1.0f),
|
||||
m_DotColor(Color(1, 1, 1, 1)),
|
||||
m_CrosshairSpeed(0.25f),
|
||||
m_CrosshairDistance(2.0f),
|
||||
m_Origin(Vector3(0, 0, 0)),
|
||||
m_Pos(Vector2(0, 0)) {}
|
||||
Crosshair::~Crosshair() {}
|
||||
|
||||
void Crosshair::_ready() {
|
||||
m_Player = Object::cast_to<FirstPersonPlayer>(get_parent()->get_parent()->get_parent()->find_child("FirstPersonPlayer"));
|
||||
DEV_ASSERT(m_Player);
|
||||
m_CrosshairLines = {Object::cast_to<Line2D>(find_child("Top")), Object::cast_to<Line2D>(find_child("Right")),
|
||||
Object::cast_to<Line2D>(find_child("Bottom")), Object::cast_to<Line2D>(find_child("Left"))};
|
||||
for (size_t i = 0; i < m_CrosshairLines.size(); i++) {
|
||||
DEV_ASSERT(m_CrosshairLines[i]);
|
||||
}
|
||||
queue_redraw();
|
||||
}
|
||||
|
||||
void Crosshair::_process(float a_Delta) {
|
||||
adjust_crosshair_lines();
|
||||
}
|
||||
|
||||
void Crosshair::_draw() {
|
||||
draw_circle(Vector2(0, 0), m_DotRadius, m_DotColor);
|
||||
}
|
||||
|
||||
void Crosshair::adjust_crosshair_lines() {
|
||||
Vector3 vel = m_Player->get_real_velocity();
|
||||
|
||||
float speed = m_Origin.distance_to(vel);
|
||||
|
||||
m_CrosshairLines[0]->set_position(
|
||||
m_CrosshairLines[0]->get_position().lerp(m_Pos + Vector2(0, -speed * m_CrosshairDistance), m_CrosshairSpeed));
|
||||
|
||||
m_CrosshairLines[1]->set_position(
|
||||
m_CrosshairLines[1]->get_position().lerp(m_Pos + Vector2(speed * m_CrosshairDistance, 0), m_CrosshairSpeed));
|
||||
|
||||
m_CrosshairLines[2]->set_position(
|
||||
m_CrosshairLines[2]->get_position().lerp(m_Pos + Vector2(0, speed * m_CrosshairDistance), m_CrosshairSpeed));
|
||||
|
||||
m_CrosshairLines[3]->set_position(
|
||||
m_CrosshairLines[3]->get_position().lerp(m_Pos + Vector2(-speed * m_CrosshairDistance, 0), m_CrosshairSpeed));
|
||||
}
|
||||
|
||||
void Crosshair::set_dot_color(Color a_Color) {
|
||||
m_DotColor = a_Color;
|
||||
queue_redraw();
|
||||
}
|
||||
|
||||
} // namespace blitz
|
||||
Reference in New Issue
Block a user