private void InitReferences()
    {
        builderInWorldBridge = InitialSceneReferences.i.builderInWorldBridge;
        cursorGO             = InitialSceneReferences.i.cursorCanvas;
        inputController      = InitialSceneReferences.i.inputController;

        List <GameObject> grounds = new List <GameObject>();

        for (int i = 0; i < InitialSceneReferences.i.groundVisual.transform.transform.childCount; i++)
        {
            grounds.Add(InitialSceneReferences.i.groundVisual.transform.transform.GetChild(i).gameObject);
        }
        groundVisualsGO = grounds.ToArray();

        context = new BIWContext();
        context.Init(
            outlinerController,
            inputHandler,
            inputWrapper,
            publishController,
            creatorController,
            modeController,
            floorHandler,
            entityHandler,
            actionController,
            saveController,
            raycastController,
            gizmosController,
            InitialSceneReferences.i
            );

        skyBoxMaterial = context.projectReferencesAsset.skyBoxMaterial;
    }
    public static BIWContext CreateMockUpReferenceController()
    {
        BIWContext context = new BIWContext();

        context.Init(
            Substitute.For <IBIWOutlinerController>(),
            Substitute.For <IBIWInputHandler>(),
            Substitute.For <IBIWInputWrapper>(),
            Substitute.For <IBIWPublishController>(),
            Substitute.For <IBIWCreatorController>(),
            Substitute.For <IBIWModeController>(),
            Substitute.For <IBIWFloorHandler>(),
            Substitute.For <IBIWEntityHandler>(),
            Substitute.For <IBIWActionController>(),
            Substitute.For <IBIWSaveController>(),
            Substitute.For <IBIWRaycastController>(),
            Substitute.For <IBIWGizmosController>(),
            new InitialSceneReferences()
            );
        return(context);
    }
    public static BIWContext CreateReferencesControllerWithGenericMocks(params object[] mocks)
    {
        IBIWOutlinerController outliner          = Substitute.For <IBIWOutlinerController>();
        IBIWInputHandler       inputHandler      = Substitute.For <IBIWInputHandler>();
        IBIWInputWrapper       inputWrapper      = Substitute.For <IBIWInputWrapper>();
        IBIWPublishController  publishController = Substitute.For <IBIWPublishController>();
        IBIWCreatorController  creatorController = Substitute.For <IBIWCreatorController>();
        IBIWModeController     modeController    = Substitute.For <IBIWModeController>();
        IBIWFloorHandler       floorHandler      = Substitute.For <IBIWFloorHandler>();
        IBIWEntityHandler      entityHandler     = Substitute.For <IBIWEntityHandler>();
        IBIWActionController   actionController  = Substitute.For <IBIWActionController>();
        IBIWSaveController     saveController    = Substitute.For <IBIWSaveController>();
        IBIWRaycastController  raycastController = Substitute.For <IBIWRaycastController>();
        IBIWGizmosController   gizmosController  = Substitute.For <IBIWGizmosController>();
        InitialSceneReferences sceneReferences   = new InitialSceneReferences();

        foreach (var mock in mocks)
        {
            switch (mock)
            {
            case IBIWOutlinerController oc:
                outliner = oc;
                break;

            case IBIWInputHandler ih:
                inputHandler = ih;
                break;

            case IBIWInputWrapper iw:
                inputWrapper = iw;
                break;

            case IBIWPublishController pc:
                publishController = pc;
                break;

            case IBIWCreatorController cc:
                creatorController = cc;
                break;

            case IBIWModeController mc:
                modeController = mc;
                break;

            case IBIWFloorHandler fh:
                floorHandler = fh;
                break;

            case IBIWEntityHandler eh:
                entityHandler = eh;
                break;

            case IBIWActionController ac:
                actionController = ac;
                break;

            case IBIWSaveController sc:
                saveController = sc;
                break;

            case IBIWRaycastController rc:
                raycastController = rc;
                break;

            case IBIWGizmosController gc:
                gizmosController = gc;
                break;

            case InitialSceneReferences isr:
                sceneReferences = isr;
                break;
            }
        }

        BIWContext context = new BIWContext();

        context.Init(
            outliner,
            inputHandler,
            inputWrapper,
            publishController,
            creatorController,
            modeController,
            floorHandler,
            entityHandler,
            actionController,
            saveController,
            raycastController,
            gizmosController,
            sceneReferences
            );
        return(context);
    }