From ac914e5aeac838af85c73674f1f79c6be6720a00 Mon Sep 17 00:00:00 2001 From: Robin <99972691+KcRobin9@users.noreply.github.com> Date: Sat, 1 Jun 2024 00:20:22 +0200 Subject: [PATCH] Implemented aiMap functions --- code/midtown/arts7/camera.h | 2 +- code/midtown/mmai/aiMap.cpp | 83 +++++++++++++++++++++++++++++++++++-- code/midtown/mmai/aiMap.h | 18 ++++---- 3 files changed, 90 insertions(+), 13 deletions(-) diff --git a/code/midtown/arts7/camera.h b/code/midtown/arts7/camera.h index 0d1a5c08..98b4da6a 100644 --- a/code/midtown/arts7/camera.h +++ b/code/midtown/arts7/camera.h @@ -166,7 +166,7 @@ class asCamera final : public asNode return &camera_; } -private: +public: // ?Regen@asCamera@@AAEXXZ ARTS_IMPORT void Regen(); diff --git a/code/midtown/mmai/aiMap.cpp b/code/midtown/mmai/aiMap.cpp index dd799adb..29bc0fb5 100644 --- a/code/midtown/mmai/aiMap.cpp +++ b/code/midtown/mmai/aiMap.cpp @@ -20,15 +20,16 @@ define_dummy_symbol(mmai_aiMap); #include "aiMap.h" +#include "arts7/camera.h" +#include "arts7/cullmgr.h" +#include "mmcity/cullcity.h" + #include "aiIntersection.h" #include "aiPath.h" #include "aiVehicleAmbient.h" #include "aiVehicleOpponent.h" #include "aiVehiclePolice.h" -void aiMap::UpdatePaused() -{} - #ifdef ARTS_DEV_BUILD void aiMap::AddWidgets(Bank* bank) { @@ -112,4 +113,80 @@ void aiMap::DumpIntersections() for (i32 i = 0; i < NumIntersections; ++i) Intersections[i]->Dump(); +} + +void aiMap::GetCameraPos() +{ + CameraPos = CullCity()->Camera->camera_.m3; +} + +aiIntersection* aiMap::Intersection(i32 index) +{ + if (index >= 0 && index <= NumIntersections) + return Intersections[index]; + + Warningf("Returning a NULL Intersection. Idx: %d", index); + return 0; +} + +aiVehicleOpponent* aiMap::Opponent(i32 index) +{ + if (index >= 0 && index <= NumOpponents) + return &Opponents[index]; + + Warningf("Returning a NULL Opponent. Idx: %d", index); + return 0; +} + +aiPath* aiMap::Path(i32 index) +{ + if (index >= 0 && index <= NumPaths) + return Paths[index]; + + Warningf("Returning a NULL Path for %d.", index); + return 0; +} + +aiPedestrian* aiMap::Pedestrian(i32 index) +{ + if (index >= 0 && index <= NumPedestrians) + return Pedestrians; + + Warningf("Returning a NULL Pedestrian. Idx: %d", index); + return 0; +} + +Vector3& aiMap::PlayerPos() +{ + return PlayerCar->Sim.ICS.Matrix.m3; +} + +aiVehiclePolice* aiMap::Police(i32 index) +{ + if (index >= 0 && index <= NumPolice) + return &PoliceVehicles[index]; + + Warningf("Returning a NULL Cop. Idx: %d", index); + return 0; +} + +void aiMap::Stats() +{ + Statsf("AI Total Update: %.3fms", _fTotUpdate * 1000.0f); + Statsf("Ped Update: %.3fms, Qty: %d", _fPedUpdate * 1000.0f, _nPedQty); + Statsf("Ambient Update: %.3fms, Qty: %d", _fAmbientUpdate * 1000.0f, _nAmbientQty); + Statsf("Opponent Update: %.3fms, Qty: %d", _fOppUpdate * 1000.0f, NumOpponents); + Statsf("Police Update: %.3fms, Qty: %d", _fCopUpdate * 1000.0f, NumPolice); +} + +void aiMap::UpdatePaused() +{} + +aiVehicleAmbient* aiMap::Vehicle(i32 index) +{ + if (index >= 0 && index <= NumAmbients) + return &Ambients[index]; + + Warningf("Returning a NULL Vehicle. Idx: %d", index); + return 0; } \ No newline at end of file diff --git a/code/midtown/mmai/aiMap.h b/code/midtown/mmai/aiMap.h index 8cb2b118..cf70bc3e 100644 --- a/code/midtown/mmai/aiMap.h +++ b/code/midtown/mmai/aiMap.h @@ -229,7 +229,7 @@ class aiMap final : public asNode ARTS_IMPORT i32 FindPedAppRoad(i32 arg1); // ?GetCameraPos@aiMap@@QAEXXZ | unused - ARTS_IMPORT void GetCameraPos(); + ARTS_EXPORT void GetCameraPos(); // ?GetClass@aiMap@@UAEPAVMetaClass@@XZ ARTS_IMPORT MetaClass* GetClass() override; @@ -241,25 +241,25 @@ class aiMap final : public asNode ARTS_IMPORT void Init(char* arg1, char* arg2, char* arg3, mmCar* arg4); // ?Intersection@aiMap@@QAEPAVaiIntersection@@H@Z - ARTS_IMPORT aiIntersection* Intersection(i32 arg1); + ARTS_EXPORT aiIntersection* Intersection(i32 index); // ?MapComponent@aiMap@@QAEHAAVVector3@@PAF1F@Z ARTS_IMPORT i32 MapComponent(Vector3& arg1, i16* arg2, i16* arg3, i16 arg4); // ?Opponent@aiMap@@QAEPAVaiVehicleOpponent@@H@Z - ARTS_IMPORT aiVehicleOpponent* Opponent(i32 arg1); + ARTS_EXPORT aiVehicleOpponent* Opponent(i32 index); // ?Path@aiMap@@QAEPAVaiPath@@H@Z - ARTS_IMPORT aiPath* Path(i32 arg1); + ARTS_EXPORT aiPath* Path(i32 index); // ?Pedestrian@aiMap@@QAEPAVaiPedestrian@@H@Z | unused - ARTS_IMPORT aiPedestrian* Pedestrian(i32 arg1); + ARTS_EXPORT aiPedestrian* Pedestrian(i32 index); // ?PlayerPos@aiMap@@QAEAAVVector3@@XZ | unused - ARTS_IMPORT Vector3& PlayerPos(); + ARTS_EXPORT Vector3& PlayerPos(); // ?Police@aiMap@@QAEPAVaiVehiclePolice@@H@Z - ARTS_IMPORT aiVehiclePolice* Police(i32 arg1); + ARTS_EXPORT aiVehiclePolice* Police(i32 index); // ?PredictAmbFreewayIntersectionPath@aiMap@@QAEPAVaiPath@@HAAVMatrix34@@@Z ARTS_IMPORT aiPath* PredictAmbFreewayIntersectionPath(i32 arg1, Matrix34& arg2); @@ -281,7 +281,7 @@ class aiMap final : public asNode #ifdef ARTS_DEV_BUILD // ?Stats@aiMap@@QAEXXZ - ARTS_IMPORT void Stats(); + ARTS_EXPORT void Stats(); #endif // ?Update@aiMap@@UAEXXZ @@ -291,7 +291,7 @@ class aiMap final : public asNode ARTS_EXPORT void UpdatePaused() override; // ?Vehicle@aiMap@@QAEPAVaiVehicleAmbient@@H@Z | unused - ARTS_IMPORT aiVehicleAmbient* Vehicle(i32 arg1); + ARTS_EXPORT aiVehicleAmbient* Vehicle(i32 index); // ?DeclareFields@aiMap@@SAXXZ ARTS_IMPORT static void DeclareFields();