#ifndef CAMERA_EFFECTS_HPP #define CAMERA_EFFECTS_HPP #include #include #include namespace gd = godot; class CameraEffects : public gd::Camera3D { GDCLASS(CameraEffects, gd::Camera3D); static void _bind_methods(); public: virtual void _ready() override; virtual void _process(double delta) override; void push_shake_effect(float time, float intensity); void push_zoom_effect(float factor, float adjust_speed); void set_shoulder(bool weapon_shoulder); bool is_weapon_shoulder() const; void select_target(); gd::Vector3 get_radians() const { return this->get_rotation(); } private: float shoulder_switch_speed{1.f}; double end_time{0.5f}; float intensity{1.f}; float base_fov{60.f}; float target_fov{60.f}; float fov_speed{0.f}; float target_range{10.f}; float rotation_range{0.f}; float target_rotation{0.f}; gd::Vector3 target{0.f, 0.f, 0.f}; gd::Vector3 home{0.f, 0.f, 0.f}; gd::Node3D *pivot{nullptr}; gd::SpringArm3D *spring{nullptr}; }; #endif // !CAMERA_EFFECTS_HPP