2021-05-20 21:04:03 +02:00
|
|
|
#include "backend/looped/looped.hpp"
|
|
|
|
#include "core/enums.hpp"
|
2023-03-01 21:27:15 +00:00
|
|
|
#include "gui.hpp"
|
2021-05-20 21:04:03 +02:00
|
|
|
#include "util/math.hpp"
|
|
|
|
#include "util/vehicle.hpp"
|
|
|
|
|
|
|
|
namespace big
|
|
|
|
{
|
2022-06-27 15:59:25 +02:00
|
|
|
static auto last_time = std::chrono::steady_clock::now();
|
2021-05-20 21:04:03 +02:00
|
|
|
|
|
|
|
void looped::weapons_vehicle_gun()
|
|
|
|
{
|
2022-12-18 23:15:52 +01:00
|
|
|
const bool is_vehicle_gun_selected = g.weapons.custom_weapon == CustomWeapon::VEHICLE_GUN;
|
2021-05-20 21:04:03 +02:00
|
|
|
|
2022-06-27 15:59:25 +02:00
|
|
|
const auto time_now = std::chrono::steady_clock::now();
|
|
|
|
|
|
|
|
const auto elapsed_time_in_ms = std::chrono::duration_cast<std::chrono::milliseconds>(time_now - last_time).count();
|
|
|
|
|
2023-03-01 21:27:15 +00:00
|
|
|
if (is_vehicle_gun_selected && !g_gui->is_open() && elapsed_time_in_ms >= 100 && PAD::IS_DISABLED_CONTROL_PRESSED(0, (int)ControllerInputs::INPUT_ATTACK))
|
2021-05-20 21:04:03 +02:00
|
|
|
{
|
2022-06-27 15:59:25 +02:00
|
|
|
Vector3 location = self::pos;
|
|
|
|
|
|
|
|
constexpr int rotation_order = 2;
|
|
|
|
|
|
|
|
Vector3 rot = CAM::GET_GAMEPLAY_CAM_ROT(rotation_order);
|
2023-03-01 21:27:15 +00:00
|
|
|
float pitch = math::deg_to_rad(rot.x);// vertical
|
2022-06-27 15:59:25 +02:00
|
|
|
//float roll = rot.y;
|
2023-03-01 21:27:15 +00:00
|
|
|
float yaw = math::deg_to_rad(rot.z + 90);// horizontal
|
2022-06-27 15:59:25 +02:00
|
|
|
|
|
|
|
float dist = 10.f;
|
|
|
|
location.x += dist * cos(pitch) * cos(yaw);
|
|
|
|
location.y += dist * sin(yaw) * cos(pitch);
|
|
|
|
location.z += dist * sin(pitch);
|
2023-03-01 21:27:15 +00:00
|
|
|
Vehicle veh = vehicle::spawn(rage::joaat(g.weapons.vehicle_gun_model.data()), location, ENTITY::GET_ENTITY_HEADING(self::ped));
|
2022-06-27 15:59:25 +02:00
|
|
|
|
|
|
|
dist = 150.f;
|
2023-03-01 21:27:15 +00:00
|
|
|
Vector3 velocity{dist * cos(pitch) * cos(yaw), dist * sin(yaw) * cos(pitch), dist * sin(pitch)};
|
2022-06-27 15:59:25 +02:00
|
|
|
|
|
|
|
ENTITY::SET_ENTITY_ROTATION(veh, rot.x, rot.y, rot.z, rotation_order, 1);
|
|
|
|
ENTITY::SET_ENTITY_VELOCITY(veh, velocity.x, velocity.y, velocity.z);
|
|
|
|
|
|
|
|
// flagging the veh as no longer needed so that the game can remove it
|
|
|
|
// when reaching the maximum vehicle limit,
|
|
|
|
// allowing the vehicle gun to keep working
|
|
|
|
ENTITY::SET_VEHICLE_AS_NO_LONGER_NEEDED(&veh);
|
|
|
|
|
|
|
|
last_time = time_now;
|
2021-05-20 21:04:03 +02:00
|
|
|
}
|
|
|
|
}
|
2022-06-25 21:17:35 +02:00
|
|
|
}
|