2023-06-06 07:40:40 +00:00
|
|
|
#include "backend/looped_command.hpp"
|
2022-05-23 06:38:45 +08:00
|
|
|
#include "gta/enums.hpp"
|
2022-05-16 02:22:11 -04:00
|
|
|
#include "natives.hpp"
|
|
|
|
|
|
|
|
namespace big
|
|
|
|
{
|
2023-06-06 07:40:40 +00:00
|
|
|
class vehicle_fly : looped_command
|
2023-03-01 21:27:15 +00:00
|
|
|
{
|
2023-06-06 07:40:40 +00:00
|
|
|
using looped_command::looped_command;
|
2022-05-16 02:22:11 -04:00
|
|
|
|
2023-06-06 07:40:40 +00:00
|
|
|
Vehicle last_vehicle = 0;
|
2022-05-16 02:22:11 -04:00
|
|
|
|
2023-06-06 07:40:40 +00:00
|
|
|
void cleanup(Vehicle vehicle)
|
2023-03-01 21:27:15 +00:00
|
|
|
{
|
2023-06-06 07:40:40 +00:00
|
|
|
VEHICLE::SET_VEHICLE_GRAVITY(vehicle, true);
|
|
|
|
ENTITY::SET_ENTITY_COLLISION(vehicle, true, true);
|
|
|
|
if (g.vehicle.fly.stop_on_exit)
|
2023-03-01 21:27:15 +00:00
|
|
|
{
|
2023-06-06 07:40:40 +00:00
|
|
|
VEHICLE::SET_VEHICLE_FORWARD_SPEED(vehicle, 0.0);
|
2023-03-01 21:27:15 +00:00
|
|
|
}
|
|
|
|
}
|
2022-05-16 02:22:11 -04:00
|
|
|
|
2023-06-06 07:40:40 +00:00
|
|
|
virtual void on_tick() override
|
2023-03-01 21:27:15 +00:00
|
|
|
{
|
2023-06-06 07:40:40 +00:00
|
|
|
Vehicle vehicle = self::veh;
|
2022-05-16 02:22:11 -04:00
|
|
|
|
2023-06-06 07:40:40 +00:00
|
|
|
if (last_vehicle != vehicle)
|
2023-03-01 21:27:15 +00:00
|
|
|
{
|
2023-06-06 07:40:40 +00:00
|
|
|
if (last_vehicle)
|
|
|
|
cleanup(last_vehicle);
|
2022-05-16 02:22:11 -04:00
|
|
|
|
2023-06-06 07:40:40 +00:00
|
|
|
last_vehicle = vehicle;
|
2023-03-01 21:27:15 +00:00
|
|
|
}
|
2023-06-06 07:40:40 +00:00
|
|
|
|
|
|
|
if (vehicle)
|
2023-03-01 21:27:15 +00:00
|
|
|
{
|
2023-06-06 07:40:40 +00:00
|
|
|
Vector3 cam_pos = CAM::GET_GAMEPLAY_CAM_ROT(0);
|
|
|
|
ENTITY::SET_ENTITY_ROTATION(vehicle, cam_pos.x, cam_pos.y, cam_pos.z, 1, true);
|
|
|
|
ENTITY::SET_ENTITY_COLLISION(vehicle, !g.vehicle.fly.no_collision, true);
|
2022-05-16 02:22:11 -04:00
|
|
|
|
2023-06-06 07:40:40 +00:00
|
|
|
float locspeed = g.vehicle.fly.speed;
|
2022-05-16 02:22:11 -04:00
|
|
|
|
2023-06-06 07:40:40 +00:00
|
|
|
if (PAD::IS_CONTROL_PRESSED(0, (int)ControllerInputs::INPUT_VEH_MOVE_UP_ONLY))
|
|
|
|
{
|
|
|
|
locspeed *= 2;
|
|
|
|
}
|
2022-05-16 02:22:11 -04:00
|
|
|
|
2023-06-06 07:40:40 +00:00
|
|
|
if (PAD::IS_CONTROL_PRESSED(2, (int)ControllerInputs::INPUT_VEH_ACCELERATE))
|
|
|
|
{
|
|
|
|
if (g.vehicle.fly.dont_stop)
|
|
|
|
{
|
|
|
|
ENTITY::APPLY_FORCE_TO_ENTITY(vehicle, 1, 0.0, g.vehicle.fly.speed, 0.0, 0.0, 0.0, 0.0, 0, 1, 1, 1, 0, 1);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
VEHICLE::SET_VEHICLE_FORWARD_SPEED(vehicle, locspeed);
|
|
|
|
}
|
|
|
|
}
|
2023-03-01 21:27:15 +00:00
|
|
|
|
2023-06-06 07:40:40 +00:00
|
|
|
if (PAD::IS_CONTROL_PRESSED(2, (int)ControllerInputs::INPUT_VEH_BRAKE))
|
|
|
|
{
|
|
|
|
float lsp = g.vehicle.fly.speed;
|
|
|
|
if (!PAD::IS_CONTROL_PRESSED(0, (int)ControllerInputs::INPUT_VEH_MOVE_UP_ONLY))
|
|
|
|
{
|
|
|
|
lsp = (g.vehicle.fly.speed * 2);
|
|
|
|
}
|
|
|
|
if (g.vehicle.fly.dont_stop)
|
|
|
|
{
|
|
|
|
ENTITY::APPLY_FORCE_TO_ENTITY(vehicle, 1, 0.0, 0 - (lsp), 0.0, 0.0, 0.0, 0.0, 0, 1, 1, 1, 0, 1);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
VEHICLE::SET_VEHICLE_FORWARD_SPEED(vehicle, (0 - locspeed));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (PAD::IS_CONTROL_PRESSED(2, (int)ControllerInputs::INPUT_VEH_MOVE_LEFT_ONLY))
|
2023-03-01 21:27:15 +00:00
|
|
|
{
|
2023-06-06 07:40:40 +00:00
|
|
|
float lsp = ((0 - g.vehicle.fly.speed) * 2);
|
|
|
|
if (!PAD::IS_CONTROL_PRESSED(0, (int)ControllerInputs::INPUT_VEH_MOVE_UP_ONLY))
|
|
|
|
{
|
|
|
|
lsp = (0 - g.vehicle.fly.speed);
|
|
|
|
}
|
|
|
|
if (g.vehicle.fly.dont_stop)
|
|
|
|
{
|
|
|
|
ENTITY::APPLY_FORCE_TO_ENTITY(vehicle, 1, (lsp), 0.0, 0.0, 0.0, 0.0, 0.0, 0, 1, 1, 1, 0, 1);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ENTITY::APPLY_FORCE_TO_ENTITY(vehicle, 1, (0 - (locspeed)), 0.0, 0.0, 0.0, 0.0, 0.0, 0, 1, 1, 1, 0, 1);
|
|
|
|
}
|
2023-03-01 21:27:15 +00:00
|
|
|
}
|
2023-06-06 07:40:40 +00:00
|
|
|
|
|
|
|
if (PAD::IS_CONTROL_PRESSED(2, (int)ControllerInputs::INPUT_VEH_MOVE_RIGHT_ONLY))
|
2023-03-01 21:27:15 +00:00
|
|
|
{
|
2023-06-06 07:40:40 +00:00
|
|
|
float lsp = g.vehicle.fly.speed;
|
|
|
|
if (!PAD::IS_CONTROL_PRESSED(0, (int)ControllerInputs::INPUT_VEH_MOVE_UP_ONLY))
|
|
|
|
{
|
|
|
|
lsp = (g.vehicle.fly.speed * 2);
|
|
|
|
}
|
|
|
|
if (g.vehicle.fly.dont_stop)
|
2023-03-01 21:27:15 +00:00
|
|
|
{
|
2023-06-06 07:40:40 +00:00
|
|
|
ENTITY::APPLY_FORCE_TO_ENTITY(vehicle, 1, lsp, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 1, 1, 1, 0, 1);
|
2023-03-01 21:27:15 +00:00
|
|
|
}
|
2023-06-06 07:40:40 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
ENTITY::APPLY_FORCE_TO_ENTITY(vehicle, 1, locspeed, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 1, 1, 1, 0, 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!g.vehicle.fly.dont_stop && !PAD::IS_CONTROL_PRESSED(2, (int)ControllerInputs::INPUT_VEH_ACCELERATE) && !PAD::IS_CONTROL_PRESSED(2, (int)ControllerInputs::INPUT_VEH_BRAKE))
|
|
|
|
{
|
|
|
|
VEHICLE::SET_VEHICLE_FORWARD_SPEED(vehicle, 0.0);
|
2023-03-01 21:27:15 +00:00
|
|
|
}
|
2023-06-06 07:40:40 +00:00
|
|
|
|
|
|
|
VEHICLE::SET_VEHICLE_GRAVITY(vehicle, false);
|
2023-03-01 21:27:15 +00:00
|
|
|
}
|
|
|
|
}
|
2023-06-06 07:40:40 +00:00
|
|
|
|
|
|
|
virtual void on_disable() override
|
2023-03-01 21:27:15 +00:00
|
|
|
{
|
2023-06-06 07:40:40 +00:00
|
|
|
if (self::veh)
|
|
|
|
cleanup(self::veh);
|
2022-05-16 02:22:11 -04:00
|
|
|
}
|
2023-06-06 07:40:40 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
vehicle_fly g_vehicle_fly("vehiclefly", "Vehicle Fly", "Fly with any land vehicle", g.vehicle.fly.enabled);
|
2022-05-16 02:22:11 -04:00
|
|
|
}
|