public void CreateColorButtonsFromPalette(string dimension, Color[] palette)
    {
        if (this.dimension != dimension)
        {
            this.dimension = dimension;

            DestroyColorButtons();

            float[] paletteValues = ChartManager.Instance.DataSource[dimension].MetaData.categories;

            for (int i = 0; i < paletteValues.Length; i++)
            {
                GameObject button = (GameObject)Instantiate(Resources.Load("ColorPaletteBinderButton"));
                button.transform.SetParent(transform);
                ColorPaletteBinderButton paletteButton = button.GetComponent <ColorPaletteBinderButton>();

                paletteButton.Color = palette[i];
                paletteButton.Text  = ChartManager.Instance.DataSource.getOriginalValue(paletteValues[i], dimension).ToString();
                paletteButton.ButtonClicked.AddListener(ColorButtonClicked);

                float   height    = paletteButton.transform.localScale.y;
                Vector3 targetPos = Vector3.zero;
                targetPos.y -= (i * (height + spacing));
                paletteButton.transform.localPosition = targetPos;
                paletteButton.transform.localRotation = Quaternion.identity;;

                buttons.Add(paletteButton);
            }

            // Reset the page
            ButtonClicked(null);
        }
    }
    public void LoadColorPalette(Color[] palette)
    {
        for (int i = 0; i < palette.Length; i++)
        {
            Color col = palette[i];
            ColorPaletteBinderButton button = buttons[i];

            button.Color = col;
        }
    }
    private void ShowColorPalettePicker(int selectedIndex)
    {
        this.selectedIndex = selectedIndex;
        ColorPaletteBinderButton button = buttons[selectedIndex];

        ToggleColorButtons(false);
        confirmButton.gameObject.SetActive(true);
        label.gameObject.SetActive(true);
        label.text = "Picking Colour for Value: \n<b>" + button.Text + "</b>";

        Color col = button.Color;

        vrColorPicker.gameObject.SetActive(true);
        vrColorPicker.SetColor(col);
    }
    public void CreateColorButtons(string dimension)
    {
        if (this.dimension != dimension)
        {
            this.dimension = dimension;

            DestroyColorButtons();

            List <float> paletteValues = ChartManager.Instance.DataSource[dimension].MetaData.categories.ToList();

            for (int i = 0; i < paletteValues.Count; i++)
            {
                GameObject button = (GameObject)Instantiate(Resources.Load("ColorPaletteBinderButton"));
                button.transform.SetParent(transform);
                ColorPaletteBinderButton paletteButton = button.GetComponent <ColorPaletteBinderButton>();

                paletteButton.Text            = ChartManager.Instance.DataSource.getOriginalValue(paletteValues[i], dimension).ToString();
                paletteButton.NormalisedValue = paletteValues[i];
                paletteButton.ButtonClicked.AddListener(ColorButtonClicked);


                buttons.Add(paletteButton);
            }

            // Sort the buttons
            sortedButtons = buttons.OrderBy(x => x.NormalisedValue).ToList();

            // Position the buttons
            for (int i = 0; i < sortedButtons.Count; i++)
            {
                sortedButtons[i].Color = Color.HSVToRGB((i * 0.09f) % 1, 1, 1);

                float   height    = sortedButtons[i].transform.localScale.y;
                Vector3 targetPos = Vector3.zero;
                targetPos.y -= (i * (height + spacing));
                sortedButtons[i].transform.localPosition = targetPos;
                sortedButtons[i].transform.localRotation = Quaternion.identity;;
            }


            ColorPaletteChanged.Invoke(GetColorPalette());
            // Reset the page
            ButtonClicked(null);
        }
    }
 public void ColorButtonClicked(ColorPaletteBinderButton button)
 {
     photonView.RPC("ShowColorPalettePicker", RpcTarget.All, buttons.IndexOf(button));
 }