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);
    }
    public bool belowRoof = false; // true if changed walls transparency
    public void WallTransparencyController()
    {
        try
        {
            Vector3 cameraPos = Camera.main.transform.position;
            if (cameraPos.y <= dm.dispensary.GetRoofYValue())
            {
                belowRoof = true;
                Ray          straightDownRay  = new Ray(cameraPos, Vector3.down);
                RaycastHit[] straightDownHits = Physics.RaycastAll(straightDownRay);
                foreach (RaycastHit hit in straightDownHits)
                {
                    if (hit.transform.tag == "Floor")
                    {
                        switch (hit.transform.name)
                        {
                        case "MainStoreComponent":
                            wallsChanged = dm.dispensary.Main_c.walls;
                            if (wallsChanged.showingTransparency)
                            {
                                wallsChanged.ShowTransparencyToggle();
                            }
                            break;

                        case "StorageComponent0":
                            wallsChanged = dm.dispensary.Storage_cs[0].walls;
                            if (wallsChanged.showingTransparency)
                            {
                                wallsChanged.ShowTransparencyToggle();
                            }
                            break;

                        case "StorageComponent1":
                            wallsChanged = dm.dispensary.Storage_cs[1].walls;
                            if (wallsChanged.showingTransparency)
                            {
                                wallsChanged.ShowTransparencyToggle();
                            }
                            break;

                        case "StorageComponent2":
                            wallsChanged = dm.dispensary.Storage_cs[2].walls;
                            if (wallsChanged.showingTransparency)
                            {
                                wallsChanged.ShowTransparencyToggle();
                            }
                            break;
                        }
                    }
                }
            }
            else
            {
                if (belowRoof)
                {
                    wallsChanged.ShowTransparencyToggle();
                    wallsChanged = null;
                    belowRoof    = false;
                }
                dm.dispensary.EnsureTransparency();
            }
        }
        catch (NullReferenceException)
        {
            print("Null error in camera controller.  Needs new controller for unity 2019");
        }
    }