From d172396bee92e9fc3d9a8e2170c30982464d8434 Mon Sep 17 00:00:00 2001 From: Robin <99972691+KcRobin9@users.noreply.github.com> Date: Sun, 2 Jun 2024 01:38:34 +0200 Subject: [PATCH] Implemented aiGoalStop functions --- code/midtown/mmai/aiGoal.h | 2 +- code/midtown/mmai/aiGoalBackup.cpp | 4 ++-- code/midtown/mmai/aiGoalBackup.h | 2 +- code/midtown/mmai/aiGoalStop.cpp | 32 ++++++++++++++++++++++++++++++ code/midtown/mmai/aiGoalStop.h | 13 ++++++------ 5 files changed, 43 insertions(+), 10 deletions(-) diff --git a/code/midtown/mmai/aiGoal.h b/code/midtown/mmai/aiGoal.h index 123fb033..695f068f 100644 --- a/code/midtown/mmai/aiGoal.h +++ b/code/midtown/mmai/aiGoal.h @@ -40,7 +40,7 @@ class aiGoal virtual b32 Context() = 0; - virtual i32 Priority() = 0; + virtual b32 Priority() = 0; // ?Update@aiGoal@@UAEXXZ | inline ARTS_EXPORT virtual void Update() diff --git a/code/midtown/mmai/aiGoalBackup.cpp b/code/midtown/mmai/aiGoalBackup.cpp index aa20d873..d2b24882 100644 --- a/code/midtown/mmai/aiGoalBackup.cpp +++ b/code/midtown/mmai/aiGoalBackup.cpp @@ -41,9 +41,9 @@ b32 aiGoalBackup::Context() return *BackingUp; } -i32 aiGoalBackup::Priority() +b32 aiGoalBackup::Priority() { - return 1; + return true; } void aiGoalBackup::Reset() diff --git a/code/midtown/mmai/aiGoalBackup.h b/code/midtown/mmai/aiGoalBackup.h index 3ce65859..5d0eb26f 100644 --- a/code/midtown/mmai/aiGoalBackup.h +++ b/code/midtown/mmai/aiGoalBackup.h @@ -50,7 +50,7 @@ class aiGoalBackup final : public aiGoal ARTS_EXPORT void Init() override; // ?Priority@aiGoalBackup@@UAEHXZ - ARTS_EXPORT i32 Priority() override; + ARTS_EXPORT b32 Priority() override; // ?Reset@aiGoalBackup@@UAEXXZ ARTS_EXPORT void Reset() override; diff --git a/code/midtown/mmai/aiGoalStop.cpp b/code/midtown/mmai/aiGoalStop.cpp index 4e2b4407..b92d4017 100644 --- a/code/midtown/mmai/aiGoalStop.cpp +++ b/code/midtown/mmai/aiGoalStop.cpp @@ -20,5 +20,37 @@ define_dummy_symbol(mmai_aiGoalStop); #include "aiGoalStop.h" +#include "mmcar/car.h" + +aiGoalStop::aiGoalStop(mmCar* car, i16* stop_id) + : Car(car) + , StopId(stop_id) +{} + +b32 aiGoalStop::Context() +{ + if (*StopId) + return true; + + UpdateCount = 0; + return false; +} + +b32 aiGoalStop::Priority() +{ + return true; +} + void aiGoalStop::Reset() {} + +void aiGoalStop::Update() +{ + ++UpdateCount; + + Car->Sim.Steering = 0.0f; + Car->Sim.Engine.Throttle = 0.0f; + Car->Sim.Brakes = 1.0f; + + Car->Sim.ICS.LinearMomentum *= 0.95f; +} diff --git a/code/midtown/mmai/aiGoalStop.h b/code/midtown/mmai/aiGoalStop.h index 3037bdb0..19be4e0c 100644 --- a/code/midtown/mmai/aiGoalStop.h +++ b/code/midtown/mmai/aiGoalStop.h @@ -37,27 +37,28 @@ class aiGoalStop final : public aiGoal { public: // ??0aiGoalStop@@QAE@PAVmmCar@@PAF@Z - ARTS_IMPORT aiGoalStop(mmCar* arg1, b16* arg2); + ARTS_EXPORT aiGoalStop(mmCar* car, i16* stop_id); // ??1aiGoalStop@@QAE@XZ - ARTS_IMPORT ~aiGoalStop() = default; + ARTS_EXPORT ~aiGoalStop() = default; // ?Context@aiGoalStop@@UAEHXZ - ARTS_IMPORT b32 Context() override; + ARTS_EXPORT b32 Context() override; // ?Init@aiGoalStop@@UAEXXZ ARTS_IMPORT void Init() override; // ?Priority@aiGoalStop@@UAEHXZ - ARTS_IMPORT i32 Priority() override; + ARTS_EXPORT b32 Priority() override; // ?Reset@aiGoalStop@@UAEXXZ ARTS_EXPORT void Reset() override; // ?Update@aiGoalStop@@UAEXXZ - ARTS_IMPORT void Update() override; + ARTS_EXPORT void Update() override; - u8 gap8[0x8]; + mmCar* Car; + i16* StopId; }; check_size(aiGoalStop, 0x10);