From fe028b4534ce97c522b70ee449ba989b94600c8a Mon Sep 17 00:00:00 2001 From: Benau Date: Sun, 24 Nov 2019 11:37:02 +0800 Subject: [PATCH] Fix skidding ai crash --- src/items/item_manager.hpp | 10 ++++++++++ src/karts/controller/skidding_ai.cpp | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/src/items/item_manager.hpp b/src/items/item_manager.hpp index 3b9864293..985b7a5dc 100644 --- a/src/items/item_manager.hpp +++ b/src/items/item_manager.hpp @@ -29,6 +29,8 @@ #include #include +#include + #include #include #include @@ -174,6 +176,14 @@ public: return dynamic_cast(m_all_items[n]); } // ------------------------------------------------------------------------ + bool itemExists(const ItemState* is) const + { + if (!is) + return false; + auto it = std::find(m_all_items.begin(), m_all_items.end(), is); + return it != m_all_items.end(); + } + // ------------------------------------------------------------------------ /** Returns a reference to the array of all items on the specified quad. */ const AllItemTypes& getItemsInQuads(unsigned int n) const diff --git a/src/karts/controller/skidding_ai.cpp b/src/karts/controller/skidding_ai.cpp index 480a6be86..1d5695d2e 100644 --- a/src/karts/controller/skidding_ai.cpp +++ b/src/karts/controller/skidding_ai.cpp @@ -222,6 +222,15 @@ unsigned int SkiddingAI::getNextSector(unsigned int index) void SkiddingAI::update(int ticks) { float dt = stk_config->ticks2Time(ticks); + + // Clear stored items if they were deleted (for example a switched nitro) + if (m_item_to_collect && + !ItemManager::get()->itemExists(m_item_to_collect)) + m_item_to_collect = NULL; + if (m_last_item_random && + !ItemManager::get()->itemExists(m_last_item_random)) + m_last_item_random = NULL; + m_controls->setRescue(false); // This is used to enable firing an item backwards.