#include "Bullet.h" using namespace godot; namespace blitz { static constexpr float BULLET_SPEED = 40.0f; void Bullet::_bind_methods() { ClassDB::bind_method(D_METHOD("_on_timer_timeout"), &Bullet::_on_timer_timeout); } Bullet::Bullet() {} Bullet::~Bullet() {} void Bullet::_ready() { m_Particles = Object::cast_to(find_child("GPUParticles3D")); DEV_ASSERT(m_Particles); m_Ray = Object::cast_to(find_child("RayCast3D")); DEV_ASSERT(m_Ray); m_Mesh = Object::cast_to(find_child("MeshInstance3D")); DEV_ASSERT(m_Mesh); m_Timer = memnew(godot::Timer); add_child(m_Timer); m_Timer->connect("timeout", callable_mp(this, &Bullet::_on_timer_timeout)); } void Bullet::_physics_process(float a_Delta) { Vector3 movement = Vector3(0, 0, -BULLET_SPEED) * a_Delta; set_position(get_transform().xform(movement)); if (m_Ray->is_colliding()) { m_Mesh->set_visible(false); m_Particles->set_emitting(true); m_Timer->set_wait_time(1.0); m_Timer->start(); } } void Bullet::_on_timer_timeout() { queue_free(); } } // namespace blitz