public ComponentSubGrid GetClosestComponentGrid(Vector3 worldPoint, string exception)
    {
        ComponentSubGrid   closestSubGrid = null;
        float              distance       = 10000;
        MainStoreComponent main_c         = dm.dispensary.Main_c;

        if (main_c != null && exception != "MainStore")
        {
            if (main_c.grid.grids.Count > 0)
            {
                foreach (ComponentSubGrid grid in main_c.grid.grids)
                {
                    float newDistance = Vector3.Distance(worldPoint, grid.gameObject.transform.position);
                    if (newDistance < distance)
                    {
                        distance       = newDistance;
                        closestSubGrid = grid;
                    }
                }
            }
        }
        if (dm.dispensary.Storage_cs.Count > 0)
        {
            for (int i = 0; i < dm.dispensary.Storage_cs.Count; i++)
            {
                StorageComponent storage_c = dm.dispensary.Storage_cs[i];
                if (storage_c.grid.grids.Count > 0 && exception != "Storage" + i)
                {
                    foreach (ComponentSubGrid grid in storage_c.grid.grids)
                    {
                        float newDistance = Vector3.Distance(worldPoint, grid.gameObject.transform.position);
                        if (newDistance < distance)
                        {
                            distance       = newDistance;
                            closestSubGrid = grid;
                        }
                    }
                }
            }
        }
        GlassShopComponent glass_c = dm.dispensary.Glass_c;

        if (glass_c != null && exception != "GlassShop")
        {
            if (glass_c.grid.grids.Count > 0)
            {
                foreach (ComponentSubGrid grid in glass_c.grid.grids)
                {
                    float newDistance = Vector3.Distance(worldPoint, grid.gameObject.transform.position);
                    if (newDistance < distance)
                    {
                        distance       = newDistance;
                        closestSubGrid = grid;
                    }
                }
            }
        }
        SmokeLoungeComponent lounge_c = dm.dispensary.Lounge_c;

        if (lounge_c != null && exception != "SmokeLounge")
        {
            if (lounge_c.grid.grids.Count > 0)
            {
                foreach (ComponentSubGrid grid in lounge_c.grid.grids)
                {
                    float newDistance = Vector3.Distance(worldPoint, grid.gameObject.transform.position);
                    if (newDistance < distance)
                    {
                        distance       = newDistance;
                        closestSubGrid = grid;
                    }
                }
            }
        }
        WorkshopComponent workshop_c = dm.dispensary.Workshop_c;

        if (workshop_c != null && exception != "Workshop")
        {
            if (workshop_c.grid.grids.Count > 0)
            {
                foreach (ComponentSubGrid grid in lounge_c.grid.grids)
                {
                    float newDistance = Vector3.Distance(worldPoint, grid.gameObject.transform.position);
                    if (newDistance < distance)
                    {
                        distance       = newDistance;
                        closestSubGrid = grid;
                    }
                }
            }
        }
        if (dm.dispensary.Growroom_cs.Count > 0)
        {
            for (int i = 0; i < dm.dispensary.Growroom_cs.Count; i++)
            {
                GrowroomComponent growroom_c = dm.dispensary.Growroom_cs[i];
                if (growroom_c.grid.grids.Count > 0 && exception != "Growroom" + i)
                {
                    foreach (ComponentSubGrid grid in growroom_c.grid.grids)
                    {
                        float newDistance = Vector3.Distance(worldPoint, grid.gameObject.transform.position);
                        if (newDistance < distance)
                        {
                            distance       = newDistance;
                            closestSubGrid = grid;
                        }
                    }
                }
            }
        }
        if (dm.dispensary.Processing_cs.Count > 0)
        {
            for (int i = 0; i < dm.dispensary.Processing_cs.Count; i++)
            {
                ProcessingComponent processing_c = dm.dispensary.Processing_cs[i];
                if (processing_c.grid.grids.Count > 0 && exception != "Processing" + i)
                {
                    foreach (ComponentSubGrid grid in processing_c.grid.grids)
                    {
                        float newDistance = Vector3.Distance(worldPoint, grid.gameObject.transform.position);
                        if (newDistance < distance)
                        {
                            distance       = newDistance;
                            closestSubGrid = grid;
                        }
                    }
                }
            }
        }
        if (dm.dispensary.Hallway_cs.Count > 0)
        {
            for (int i = 0; i < dm.dispensary.Hallway_cs.Count; i++)
            {
                HallwayComponent hallway_c = dm.dispensary.Hallway_cs[i];
                if (hallway_c.grid.grids.Count > 0 && exception != "Hallway" + i)
                {
                    foreach (ComponentSubGrid grid in hallway_c.grid.grids)
                    {
                        float newDistance = Vector3.Distance(worldPoint, grid.gameObject.transform.position);
                        if (newDistance < distance)
                        {
                            distance       = newDistance;
                            closestSubGrid = grid;
                        }
                    }
                }
            }
        }
        return(closestSubGrid);
    }
    public void ShowTransparencyToggle()
    {
        if (showingTransparency)
        {
            showingTransparency = false;
        }
        else
        {
            showingTransparency = true;
        }
        Dictionary <int, int[, ]> intWallIDs = new Dictionary <int, int[, ]>();
        Dictionary <int, int[, ]> extWallIDs = new Dictionary <int, int[, ]>();

        switch (componentGrid.gameObject.name)
        {
        case "MainStoreComponent":
            MainStoreComponent main_c    = dm.dispensary.Main_c;
            ComponentWalls     mainWalls = main_c.walls;
            foreach (ComponentSubWalls subWalls in mainWalls.subWalls)
            {
                intWallIDs[subWalls.subGridIndex] = main_c.GetIntWallIDs(subWalls.subGridIndex);
                extWallIDs[subWalls.subGridIndex] = main_c.GetExtWallIDs(subWalls.subGridIndex);
            }
            break;

        case "StorageComponent0":
            StorageComponent storage_c0    = dm.dispensary.Storage_cs[0];
            ComponentWalls   storage0Walls = storage_c0.walls;
            foreach (ComponentSubWalls subWalls in storage0Walls.subWalls)
            {
                intWallIDs[subWalls.subGridIndex] = storage_c0.GetIntWallIDs(subWalls.subGridIndex);
                extWallIDs[subWalls.subGridIndex] = storage_c0.GetExtWallIDs(subWalls.subGridIndex);
            }
            break;

        case "StorageComponent1":
            StorageComponent storage_c1    = dm.dispensary.Storage_cs[1];
            ComponentWalls   storage1Walls = storage_c1.walls;
            foreach (ComponentSubWalls subWalls in storage1Walls.subWalls)
            {
                intWallIDs[subWalls.subGridIndex] = storage_c1.GetIntWallIDs(subWalls.subGridIndex);
                extWallIDs[subWalls.subGridIndex] = storage_c1.GetExtWallIDs(subWalls.subGridIndex);
            }
            break;

        case "StorageComponent2":
            StorageComponent storage_c2    = dm.dispensary.Storage_cs[2];
            ComponentWalls   storage2Walls = storage_c2.walls;
            foreach (ComponentSubWalls subWalls in storage2Walls.subWalls)
            {
                intWallIDs[subWalls.subGridIndex] = storage_c2.GetIntWallIDs(subWalls.subGridIndex);
                extWallIDs[subWalls.subGridIndex] = storage_c2.GetExtWallIDs(subWalls.subGridIndex);
            }
            break;

        case "SmokeLoungeComponent":
            SmokeLoungeComponent lounge_c    = dm.dispensary.Lounge_c;
            ComponentWalls       loungeWalls = lounge_c.walls;
            foreach (ComponentSubWalls subWalls in loungeWalls.subWalls)
            {
                intWallIDs[subWalls.subGridIndex] = lounge_c.GetIntWallIDs(subWalls.subGridIndex);
                extWallIDs[subWalls.subGridIndex] = lounge_c.GetExtWallIDs(subWalls.subGridIndex);
            }
            break;

        case "GlassShopComponent":
            GlassShopComponent glass_c        = dm.dispensary.Glass_c;
            ComponentWalls     glassShopWalls = glass_c.walls;
            foreach (ComponentSubWalls subWalls in glassShopWalls.subWalls)
            {
                intWallIDs[subWalls.subGridIndex] = glass_c.GetIntWallIDs(subWalls.subGridIndex);
                extWallIDs[subWalls.subGridIndex] = glass_c.GetExtWallIDs(subWalls.subGridIndex);
            }
            break;

        case "WorkshopComponent":
            WorkshopComponent workshop_c    = dm.dispensary.Workshop_c;
            ComponentWalls    workshopWalls = workshop_c.walls;
            foreach (ComponentSubWalls subWalls in workshopWalls.subWalls)
            {
                intWallIDs[subWalls.subGridIndex] = workshop_c.GetIntWallIDs(subWalls.subGridIndex);
                extWallIDs[subWalls.subGridIndex] = workshop_c.GetExtWallIDs(subWalls.subGridIndex);
            }
            break;

        case "GrowroomComponent0":
            GrowroomComponent growroom_c0    = dm.dispensary.Growroom_cs[0];
            ComponentWalls    growroom0Walls = growroom_c0.walls;
            foreach (ComponentSubWalls subWalls in growroom0Walls.subWalls)
            {
                intWallIDs[subWalls.subGridIndex] = growroom_c0.GetIntWallIDs(subWalls.subGridIndex);
                extWallIDs[subWalls.subGridIndex] = growroom_c0.GetExtWallIDs(subWalls.subGridIndex);
            }
            break;

        case "GrowroomComponent1":
            GrowroomComponent growroom_c1    = dm.dispensary.Growroom_cs[1];
            ComponentWalls    growroom1Walls = growroom_c1.walls;
            foreach (ComponentSubWalls subWalls in growroom1Walls.subWalls)
            {
                intWallIDs[subWalls.subGridIndex] = growroom_c1.GetIntWallIDs(subWalls.subGridIndex);
                extWallIDs[subWalls.subGridIndex] = growroom_c1.GetExtWallIDs(subWalls.subGridIndex);
            }
            break;

        case "ProcessingComponent0":
            ProcessingComponent processing_c0    = dm.dispensary.Processing_cs[0];
            ComponentWalls      processing0Walls = processing_c0.walls;
            foreach (ComponentSubWalls subWalls in processing0Walls.subWalls)
            {
                intWallIDs[subWalls.subGridIndex] = processing_c0.GetIntWallIDs(subWalls.subGridIndex);
                extWallIDs[subWalls.subGridIndex] = processing_c0.GetExtWallIDs(subWalls.subGridIndex);
            }
            break;

        case "ProcessingComponent1":
            ProcessingComponent processing_c1    = dm.dispensary.Processing_cs[1];
            ComponentWalls      processing1Walls = processing_c1.walls;
            foreach (ComponentSubWalls subWalls in processing1Walls.subWalls)
            {
                intWallIDs[subWalls.subGridIndex] = processing_c1.GetIntWallIDs(subWalls.subGridIndex);
                extWallIDs[subWalls.subGridIndex] = processing_c1.GetExtWallIDs(subWalls.subGridIndex);
            }
            break;

            //intentionally left off hallways (not for any technical reason, just a design choice)
        }
        CreateWalls(intWallIDs, extWallIDs);
    }