Add GetNearestCar/Object/Ped util functions
- Added ModMenuModule::Utils functions
- GetNearestCar
- GetNearestObject
- GetNearestPed
This commit is contained in:
parent
b8cf53782c
commit
98f9297979
@ -484,6 +484,9 @@
|
||||
<ClInclude Include="src\modules\modmenu\utils\fix-car-utils.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\get-all-weapons.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\angle-utils.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\get-nearest-car.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\get-nearest-object.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\get-nearest-ped.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\get-ped-position.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\get-ped-rotation.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\get-selectable-car-lock-states.h" />
|
||||
@ -753,6 +756,9 @@
|
||||
<ClCompile Include="src\modules\modmenu\utils\explode-last-car.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\fix-car-utils.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\get-all-weapons.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\get-nearest-car.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\get-nearest-object.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\get-nearest-ped.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\get-ped-position.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\get-ped-rotation.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\get-selectable-car-lock-states.cpp" />
|
||||
|
||||
@ -192,6 +192,7 @@
|
||||
<ClCompile Include="src\modules\ui\components\icon-sprite.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\quick-actions\toggle-mouse-control.cpp" />
|
||||
<ClCompile Include="src\game\utils\ped-utils.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\get-nearest-car.cpp" />
|
||||
<ClCompile Include="src\game\utils\car-utils.cpp" />
|
||||
<ClCompile Include="src\game\utils\object-utils.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\quick-actions\explode-vehicle.cpp" />
|
||||
@ -199,8 +200,10 @@
|
||||
<ClCompile Include="src\modules\modmenu\utils\explode-last-car.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\quick-actions\turn-vehicle-engine-off.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\turn-last-car-engine-off.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\get-nearest-ped.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\cheats\invisibility.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\quick-actions\toggle-invisibility.cpp" />
|
||||
<ClCompile Include="src\modules\modmenu\utils\get-nearest-object.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\converters\ammo.h" />
|
||||
@ -517,6 +520,7 @@
|
||||
<ClInclude Include="src\converters\ped-threat-search.h" />
|
||||
<ClInclude Include="src\converters\ped-threat-reaction.h" />
|
||||
<ClInclude Include="src\game\utils\ped-utils.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\get-nearest-car.h" />
|
||||
<ClInclude Include="src\game\utils\car-utils.h" />
|
||||
<ClInclude Include="src\game\utils\object-utils.h" />
|
||||
<ClInclude Include="src\modules\modmenu\quick-actions\explode-vehicle.h" />
|
||||
@ -524,9 +528,11 @@
|
||||
<ClInclude Include="src\modules\modmenu\utils\explode-last-car.h" />
|
||||
<ClInclude Include="src\modules\modmenu\quick-actions\turn-vehicle-engine-off.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\turn-last-car-engine-off.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\get-nearest-ped.h" />
|
||||
<ClInclude Include="src\modules\modmenu\cheats\invisibility.h" />
|
||||
<ClInclude Include="src\modules\modmenu\quick-actions\toggle-invisibility.h" />
|
||||
<ClInclude Include="src\converters\hex.h" />
|
||||
<ClInclude Include="src\modules\modmenu\utils\get-nearest-object.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="GTA2.props" />
|
||||
|
||||
34
src/modules/modmenu/utils/get-nearest-car.cpp
Normal file
34
src/modules/modmenu/utils/get-nearest-car.cpp
Normal file
@ -0,0 +1,34 @@
|
||||
#include "get-nearest-car.h"
|
||||
|
||||
Game::Car* ModMenuModule::Utils::GetNearestCar(Game::SCR_Vector3 basePosition, Game::Car* skipCar)
|
||||
{
|
||||
Game::CarsManager* carsManager = Game::Memory::GetCarsManager();
|
||||
if (!carsManager) {
|
||||
spdlog::warn("Cannot get nearest car: CarsManager is null");
|
||||
return {};
|
||||
}
|
||||
|
||||
Game::Car* nearestCar = nullptr;
|
||||
Game::SCR_f nearestDistanceSquared = std::numeric_limits<Game::SCR_f>::max();
|
||||
|
||||
for (int i = 0; i < 306; i++) {
|
||||
Game::Car* car = &carsManager->arr306Cars[i];
|
||||
if (!car->sprite || car->id == 0 || car == skipCar) continue;
|
||||
|
||||
Game::SCR_f dx = car->sprite->position.x - basePosition.x;
|
||||
Game::SCR_f dy = car->sprite->position.y - basePosition.y;
|
||||
Game::SCR_f dz = car->sprite->position.z - basePosition.z;
|
||||
|
||||
Game::SCR_f distanceSquared =
|
||||
Game::Utils::Multiply(dx, dx) +
|
||||
Game::Utils::Multiply(dy, dy) +
|
||||
Game::Utils::Multiply(dz, dz);
|
||||
|
||||
if (distanceSquared < nearestDistanceSquared) {
|
||||
nearestDistanceSquared = distanceSquared;
|
||||
nearestCar = car;
|
||||
}
|
||||
}
|
||||
|
||||
return nearestCar;
|
||||
}
|
||||
6
src/modules/modmenu/utils/get-nearest-car.h
Normal file
6
src/modules/modmenu/utils/get-nearest-car.h
Normal file
@ -0,0 +1,6 @@
|
||||
#pragma once
|
||||
#include "../common.h"
|
||||
|
||||
namespace ModMenuModule::Utils {
|
||||
Game::Car* GetNearestCar(Game::SCR_Vector3 basePosition, Game::Car* skipCar = nullptr);
|
||||
}
|
||||
37
src/modules/modmenu/utils/get-nearest-object.cpp
Normal file
37
src/modules/modmenu/utils/get-nearest-object.cpp
Normal file
@ -0,0 +1,37 @@
|
||||
#include "get-nearest-object.h"
|
||||
|
||||
Game::BareGameObject* ModMenuModule::Utils::GetNearestObject(Game::SCR_Vector3 basePosition, Game::BareGameObject* skipObject)
|
||||
{
|
||||
Game::BareGameObjectManager* objectManager = Game::Memory::GetBareGameObjectManager();
|
||||
if (!objectManager) {
|
||||
spdlog::warn("Cannot get nearest object: BareGameObjectManager is null");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Game::BareGameObject* nearestObject = nullptr;
|
||||
Game::SCR_f nearestDistanceSquared = std::numeric_limits<Game::SCR_f>::max();
|
||||
|
||||
for (int i = 0; i < 3825; i++) {
|
||||
Game::BareGameObject* currentObject = &objectManager->objects[i];
|
||||
if (currentObject->id == 0 || !currentObject->sprite2 || currentObject == skipObject) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Game::SCR_Vector3& objectPosition = currentObject->sprite2->position;
|
||||
Game::SCR_f dx = objectPosition.x - basePosition.x;
|
||||
Game::SCR_f dy = objectPosition.y - basePosition.y;
|
||||
Game::SCR_f dz = objectPosition.z - basePosition.z;
|
||||
|
||||
Game::SCR_f distanceSquared =
|
||||
Game::Utils::Multiply(dx, dx) +
|
||||
Game::Utils::Multiply(dy, dy) +
|
||||
Game::Utils::Multiply(dz, dz);
|
||||
|
||||
if (distanceSquared < nearestDistanceSquared) {
|
||||
nearestDistanceSquared = distanceSquared;
|
||||
nearestObject = currentObject;
|
||||
}
|
||||
}
|
||||
|
||||
return nearestObject;
|
||||
}
|
||||
6
src/modules/modmenu/utils/get-nearest-object.h
Normal file
6
src/modules/modmenu/utils/get-nearest-object.h
Normal file
@ -0,0 +1,6 @@
|
||||
#pragma once
|
||||
#include "../common.h"
|
||||
|
||||
namespace ModMenuModule::Utils {
|
||||
Game::BareGameObject* GetNearestObject(Game::SCR_Vector3 basePosition, Game::BareGameObject* skipObject = nullptr);
|
||||
}
|
||||
46
src/modules/modmenu/utils/get-nearest-ped.cpp
Normal file
46
src/modules/modmenu/utils/get-nearest-ped.cpp
Normal file
@ -0,0 +1,46 @@
|
||||
#include "get-nearest-ped.h"
|
||||
#include "get-ped-position.h"
|
||||
|
||||
Game::Ped* ModMenuModule::Utils::GetNearestPed(Game::SCR_Vector3 basePosition, Game::Ped* skipPed)
|
||||
{
|
||||
Game::PedManager_S25* pedManager = Game::Memory::GetPedManager();
|
||||
if (!pedManager) {
|
||||
spdlog::warn("Cannot get nearest ped: PedManager is null");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Game::Ped* currentPed = pedManager->lastPedInArray;
|
||||
Game::Ped* nearestPed = nullptr;
|
||||
Game::SCR_f nearestDistanceSquared = std::numeric_limits<Game::SCR_f>::max();
|
||||
|
||||
while (currentPed) {
|
||||
if (currentPed->id == 0 || currentPed == skipPed) {
|
||||
currentPed = currentPed->nextPed;
|
||||
continue;
|
||||
}
|
||||
|
||||
Game::SCR_Vector3* pedPosition = GetPedPosition(currentPed);
|
||||
if (!pedPosition) {
|
||||
currentPed = currentPed->nextPed;
|
||||
continue;
|
||||
}
|
||||
|
||||
Game::SCR_f dx = pedPosition->x - basePosition.x;
|
||||
Game::SCR_f dy = pedPosition->y - basePosition.y;
|
||||
Game::SCR_f dz = pedPosition->z - basePosition.z;
|
||||
|
||||
Game::SCR_f distanceSquared =
|
||||
Game::Utils::Multiply(dx, dx) +
|
||||
Game::Utils::Multiply(dy, dy) +
|
||||
Game::Utils::Multiply(dz, dz);
|
||||
|
||||
if (distanceSquared < nearestDistanceSquared) {
|
||||
nearestDistanceSquared = distanceSquared;
|
||||
nearestPed = currentPed;
|
||||
}
|
||||
|
||||
currentPed = currentPed->nextPed;
|
||||
}
|
||||
|
||||
return nearestPed;
|
||||
}
|
||||
6
src/modules/modmenu/utils/get-nearest-ped.h
Normal file
6
src/modules/modmenu/utils/get-nearest-ped.h
Normal file
@ -0,0 +1,6 @@
|
||||
#pragma once
|
||||
#include "../common.h"
|
||||
|
||||
namespace ModMenuModule::Utils {
|
||||
Game::Ped* GetNearestPed(Game::SCR_Vector3 basePosition, Game::Ped* skipPed = nullptr);
|
||||
}
|
||||
@ -11,6 +11,9 @@
|
||||
#include "fix-car-utils.h"
|
||||
#include "get-all-weapons.h"
|
||||
#include "get-cars-sorted-by-distance.h"
|
||||
#include "get-nearest-car.h"
|
||||
#include "get-nearest-ped.h"
|
||||
#include "get-nearest-object.h"
|
||||
#include "get-ped-position.h"
|
||||
#include "get-ped-rotation.h"
|
||||
#include "get-selectable-car-lock-states.h"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user