From 48ba66f47076e2cad58ffd89ede1b635b4f227d5 Mon Sep 17 00:00:00 2001
From: Dev <dev@noreply.dev.sp-tarkov.com>
Date: Fri, 2 Jun 2023 13:54:03 +0100
Subject: [PATCH] Improve separation of concerns by moving hideout property
 gathering code out of updateAreasWithResources() and into own function
 getHideoutProperties() Refactored how we get bitcoin count

---
 project/src/helpers/HideoutHelper.ts | 40 ++++++++++++++--------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/project/src/helpers/HideoutHelper.ts b/project/src/helpers/HideoutHelper.ts
index b1fc9610..093acf05 100644
--- a/project/src/helpers/HideoutHelper.ts
+++ b/project/src/helpers/HideoutHelper.ts
@@ -196,16 +196,31 @@ export class HideoutHelper
     public updatePlayerHideout(sessionID: string): void
     {
         const pmcData = this.profileHelper.getPmcProfile(sessionID);
-        const hideoutProperties = {
-            btcFarmCGs: 0,
-            isGeneratorOn: false,
-            waterCollectorHasFilter: false
-        };
+        const hideoutProperties = this.getHideoutProperties(pmcData);
 
         this.updateAreasWithResources(sessionID, pmcData, hideoutProperties);
         this.updateProductionTimers(pmcData, hideoutProperties);
         pmcData.Hideout.sptUpdateLastRunTimestamp = this.timeUtil.getTimestamp();
     }
+
+    /**
+     * Get various properties that will be passed to hideout update-related functions
+     * @param pmcData Player profile
+     * @returns Properties
+     */
+    protected getHideoutProperties(pmcData: IPmcData): { btcFarmCGs: number; isGeneratorOn: boolean; waterCollectorHasFilter: boolean; }
+    {
+        const bitcoinFarm = pmcData.Hideout.Areas.find(x => x.type === HideoutAreas.BITCOIN_FARM);
+        const bitcoinCount = bitcoinFarm?.slots.filter(slot => slot.item).length ?? 0; // Get slots with an item property
+
+        const hideoutProperties = {
+            btcFarmCGs: bitcoinCount,
+            isGeneratorOn: pmcData.Hideout.Areas.find(x => x.type === HideoutAreas.GENERATOR)?.active ?? false,
+            waterCollectorHasFilter: this.doesWaterCollectorHaveFilter(pmcData.Hideout.Areas.find(x => x.type === HideoutAreas.WATER_COLLECTOR))
+        };
+
+        return hideoutProperties;
+    }
     
     /**
      * Update progress timer for water collector
@@ -341,18 +356,13 @@ export class HideoutHelper
             switch (area.type)
             {
                 case HideoutAreas.GENERATOR:
-                    hideoutProperties.isGeneratorOn = area.active;
-
                     if (hideoutProperties.isGeneratorOn)
                     {
                         this.updateFuel(area, pmcData);
                     }
                     break;
-
                 case HideoutAreas.WATER_COLLECTOR:
                     this.updateWaterCollector(sessionID, pmcData, area, hideoutProperties.isGeneratorOn);
-                    hideoutProperties.waterCollectorHasFilter = this.doesWaterCollectorHaveFilter(area);
-
                     break;
 
                 case HideoutAreas.AIR_FILTERING:
@@ -361,16 +371,6 @@ export class HideoutHelper
                         this.updateAirFilters(area, pmcData);
                     }
                     break;
-
-                case HideoutAreas.BITCOIN_FARM:
-                    for (const slot of area.slots)
-                    {
-                        if (slot.item)
-                        {
-                            hideoutProperties.btcFarmCGs++;
-                        }
-                    }
-                    break;
             }
         }
     }