protected UpgradeStructure GetFirst()
 {
     foreach (var unit in _commander.GetPlacedUnits())
     {
         UpgradeStructure upgStructure = unit.GetComponent <UpgradeStructure>();
         if (upgStructure && upgStructure.UpgradeIdentifier == UpgradeIdentifier)
         {
             return(upgStructure);
         }
     }
     return(null);
 }
    // Start is called before the first frame update
    private void Start()
    {
        UpgradeStructure first = GetFirst();

        if (this == first)
        {
            ApplyInitial();
        }
        else
        {
            ApplyStack(first);
        }
    }
 private void OnDestroy()
 {
     if (gameObject.scene.isLoaded && _commander)
     {
         UpgradeStructure first = GetFirst();
         if (this == first || first == null)
         {
             RemoveInitial();
         }
         else
         {
             RemoveStack(first);
         }
     }
 }
 protected override void RemoveStack(UpgradeStructure initial)
 {
     (initial as ChanceOnUnitSpawnUpgradeStructure)._currentStack -= ChancePerStack;
 }
 protected abstract void RemoveStack(UpgradeStructure initial);
 protected abstract void ApplyStack(UpgradeStructure initial);