void reset(int scenarioIdx = -1)
    {
        if (scenario != null)
        {
            scenario.setActive(false);
        }

        if (crntWaypointSet != null)
        {
            crntWaypointSet.gameObject.SetActive(false);
        }


        if (scenarioIdx >= 0 && scenarioIdx < scenarios.Length)
        {
            scenario = scenarios[scenarioIdx];

            print(scenario.name);

            scenario.setActive(true);

            neck.lockValue = scenario.neckLockValue;
            filterManager.reset(scenario.filters);

            crosshair.SetActive(scenario.canShoot);

            VRStepBody.isKinematic = !scenario.isControlled;

            // if on rail
            if (!scenario.isControlled)
            {
                splineController.Duration          = scenario.trackDuration;
                splineController.OrientationMode   = scenario.trackOrientation;
                splineController.rotationLookAhead = scenario.rotationLookAhead;

                neck.reset();


                // if track is supplied, initialize with it
                if (scenario.track != null)
                {
                    splineController.init(scenario.track);
                }
                // otherwise, randomize
                else
                {
                    splineController.init(trackAlts [Random.Range(0, trackAlts.Length - 1)]);
                }
            }
            // else if controlled
            else
            {
                // stop spline controller
                splineController.stop();

                if (scenario.startingPosition != null)
                {
                    transform.TransferTo(scenario.startingPosition);
                }

                if (scenario.useWaypoints)
                {
                    crntWaypointSet = scenario.waypointSet;

                    if (crntWaypointSet == null)
                    {
                        crntWaypointSet = waypointAlts [Random.Range(0, waypointAlts.Length - 1)];
                    }

                    crntWaypointSet.reset();
                }

                // if not using VRStep
                if (!scenario.useVRStep)
                {
                    // disable VRStep
                    stepDetector.enabled  = false;
                    WIPController.enabled = false;
                }

                // if using VRStep
                else
                {
                    // enable VRStep
                    stepDetector.enabled  = true;
                    WIPController.enabled = true;
                }
            }
        }
        else
        {
            scenario = null;
        }
    }