Browse Source

fix crash when closing

Kolja Strohm 1 month ago
parent
commit
1063a076b2
3 changed files with 18 additions and 9 deletions
  1. 4 2
      FactoryCraft/CraftingGrid.cpp
  2. 13 7
      FactoryCraft/CraftingRecipies.cpp
  3. 1 0
      FactoryCraft/Globals.cpp

+ 4 - 2
FactoryCraft/CraftingGrid.cpp

@@ -173,8 +173,10 @@ CraftingGridView::CraftingGridView(Text id,
 CraftingGridView::~CraftingGridView()
 {
     DragController<InventoryDragSource, int>* controller
-        = ((Game*)(Menu*)menuRegister->get("game"))->zInventoryDragController();
-    if (controller->getCurrentDragContainer() == this) controller->stopDrag();
+        = menuRegister ? ((Game*)(Menu*)menuRegister->get("game"))
+              ->zInventoryDragController() : 0;
+    if (menuRegister && controller->getCurrentDragContainer() == this)
+        controller->stopDrag();
     if (slots) slots->release();
     if (outputs) outputs->release();
     char* msg = new char[id.getLength() + 6];

+ 13 - 7
FactoryCraft/CraftingRecipies.cpp

@@ -10,7 +10,7 @@ CraftingRecipiesElement::CraftingRecipiesElement()
     : Framework::UIMLElement()
 {}
 
-//! prüft, ob dieses UIML Element für ein bestimmtes xml Element zuständig
+//! prüft, ob dieses UIML Element für ein bestimmtes xml Element zuständig
 //! ist
 bool CraftingRecipiesElement::isApplicableFor(Framework::XML::Element& element)
 {
@@ -113,9 +113,8 @@ CraftingRecipies::CraftingRecipies()
 
     nextPage = uiFactory.createButton(uiFactory.initParam);
     nextPage->setText(">");
-    nextPage->setToolTipText("Next Page",
-        uiFactory.initParam.bildschirm,
-        uiFactory.initParam.font);
+    nextPage->setToolTipText(
+        "Next Page", uiFactory.initParam.bildschirm, uiFactory.initParam.font);
     nextPage->setSize(20, 20);
     nextPage->setPosition(0, 35);
     nextPage->setStyle(
@@ -206,7 +205,14 @@ void CraftingRecipies::render(Framework::Image& rObj)
     for (RecipieGroup* group : recipieGroups)
     {
         rObj.fillRegion(x, 0, 30, 30, 0xFF000000);
-        rObj.alphaImageScaled(x, 0, 30, 30, *group->zIcon());
+        if (group->zIcon())
+        {
+            rObj.alphaImageScaled(x, 0, 30, 30, *group->zIcon());
+        }
+        else
+        {
+            // TODO: any item icon
+        }
         rObj.drawLineH(x - 1, 0, 32, 0xFFFFFFFF);
         if (index != visibleGroupIndex)
         {
@@ -214,8 +220,8 @@ void CraftingRecipies::render(Framework::Image& rObj)
         }
         rObj.drawLineV(x + 30, 0, 30, 0xFFFFFFFF);
     }
-    Framework::TextRenderer tr(dynamic_cast<Framework::Font*>(
-        uiFactory.initParam.font->getThis()));
+    Framework::TextRenderer tr(
+        dynamic_cast<Framework::Font*>(uiFactory.initParam.font->getThis()));
     tr.setFontSize(12);
     Text t = Text("Machine page ") + Text(visibleGroupIndex + 1) + Text(" of ")
            + Text(recipieGroups.getEntryCount());

+ 1 - 0
FactoryCraft/Globals.cpp

@@ -42,6 +42,7 @@ void releaseVariables()
 {
     if (World::INSTANCE) World::INSTANCE->release();
     menuRegister->release();
+    menuRegister = 0;
     fontRegister->release();
     dlls->release();
     for (int i = 0; i < blockTypeCount; i++)