void Start()
    {
        if (instance != null)
        {
            Debug.LogError("There should not be two mouse managers");
        }

        instance = this;

        camCont = Camera.main.GetComponent <CameraControls> ();
        camAuto = Camera.main.GetComponent <CameraAutoMove> ();

        hexOutliner      = Instantiate(UIHexBuilder.Instance.flatHexPrefab);
        hexOutliner.name = "Cursor";
        hexOutliner.SetActive(false);

        hexOutliner.GetComponent <MeshRenderer> ().material.color = Color.green;

        //Control Modes
        controlModes = new ControlMode[6];

        controlModes [(int)ControlModeEnum.Observe] = new ControlMode(
            type: ControlModeEnum.Observe,

            onMouseOver: (hex) => {
        },

            onMouseNotOverMap: () => {
        },

            onLeftClick: (hex) => {
        },

            onRightClick: (hex) => {
        },

            onTabPressed: () => {
        },

            onEnteringMode: () => {
        },

            onLeavingMode: () => {
        },

            autoOnly: false
            );

        controlModes [(int)ControlModeEnum.Move] = new ControlMode(
            type: ControlModeEnum.Move,

            onMouseOver: (hex) => {
            MovementMouseUI(hex);
        },

            onMouseNotOverMap: () => {
            DisableMoveUI();
        },

            onLeftClick: (hex) => {
            SelectHex(hex);
        },

            onRightClick: (hex) => {
            MoveSelectedToHex(hex);
        },

            onTabPressed: () => {
            if (selected != null)
            {
                SelectNext(selected);
            }
        },

            onEnteringMode: () => {
            SelectFirst();
        },

            onLeavingMode: () => {
            DisableMoveUI();
            if (selected != null)
            {
                selected.HideMovementHexes();
            }
        },

            autoOnly: false
            );

        //Placement
        PlacementMode pm = new PlacementMode(TeamManager.Instance.TeamsInMatch);

        controlModes [(int)ControlModeEnum.Placement] = new ControlMode(
            type: ControlModeEnum.Placement,

            onMouseOver: (hex) => {
            //if over valid hex, green & show ghost of model, else red
            pm.PlacementUI(hex);
        },

            onMouseNotOverMap: () => {
            pm.DisablePlacementUI();
        },

            onLeftClick: (hex) => {
            pm.PlaceContestant(hex);                     //or pick up previously placed contestant
        },

            onRightClick: (hex) => {
            //perhaps remove contestant?
        },

            onTabPressed: () => {
            //cycle through contestants
        },

            onEnteringMode: () => {
            //select first contestant - which is done by constructor
        },

            onLeavingMode: () => {
            pm.EraseUI();
        },

            autoOnly: false
            );
    }