/// <summary>
        /// Called on update
        /// </summary>
        /// <param name="universe"></param>
        /// <param name="avatarController"></param>
        public void Update(Universe universe, AvatarController avatarController)
        {
            ControlHintVerbs controlHints = avatarController.GetControlHintVerbs();

            if (!this._prevControlHints.Equals(controlHints))
            {
                this.ChangeControlHints(controlHints);
                this._prevControlHints = controlHints;
            }
        }
        /// <summary>
        /// Pass the changed control hints to the UI
        /// </summary>
        /// <param name="controlHints"></param>
        public void ChangeControlHints(ControlHintVerbs controlHints)
        {
            bool   hasMain  = !string.IsNullOrEmpty(controlHints.VerbMain);
            bool   hasAlt   = !string.IsNullOrEmpty(controlHints.VerbAlt);
            string hintMain = "";
            string hintAlt  = "";

            ControlHintContext context = default(ControlHintContext);

            if (hasMain)
            {
                if (controlHints.Rotate)
                {
                    if (ClientContext.InputSource.TryGetControlHintContext(GameLogicalButton.Next, "staxel.controlHint.itemWheel.Rotate", out context))
                    {
                        hintMain = context.Class;
                    }
                    else if (ClientContext.InputSource.TryGetControlHintContext(GameLogicalButton.Previous, "staxel.controlHint.itemWheel.Rotate", out context))
                    {
                        hintMain = context.Class;
                    }
                }
                else if (ClientContext.InputSource.TryGetControlHintContext(GameLogicalButton.Main, "staxel.controlHint.itemWheel.Main", out context))
                {
                    hintMain = context.Class;
                }
            }

            if (hasAlt && ClientContext.InputSource.TryGetControlHintContext(GameLogicalButton.Alt, "staxel.controlHint.itemWheel.Alt", out context))
            {
                hintAlt = context.Class;
            }

            string verbMain = hasMain ? ClientContext.LanguageDatabase.GetTranslationString(controlHints.VerbMain) : "";
            string verbAlt  = hasAlt ? ClientContext.LanguageDatabase.GetTranslationString(controlHints.VerbAlt) : "";

            Quad <string, string, string, string> key = new Quad <string, string, string, string>(hintMain, hintAlt, verbMain, verbAlt);
            string commandString = default(string);

            if (!this.ControlHintJsonCache.TryGetValue(key, out commandString))
            {
                Blob blob = BlobAllocator.Blob(true);
                blob.SetString("hintMain", hintMain);
                blob.SetString("hintAlt", hintAlt);
                blob.SetString("verbMain", verbMain);
                blob.SetString("verbAlt", verbAlt);

                commandString = ClientContext.WebOverlayRenderer.PrepareCallFunction("updateControlHint", blob.ToString());

                this.ControlHintJsonCache.Add(key, commandString);
                Blob.Deallocate(ref blob);
            }

            ClientContext.WebOverlayRenderer.CallPreparedFunction(commandString);
        }