public void Update(long ms)
        {
            float seconds = ms / 1500f;

            secondTimer += seconds;
            while (secondTimer >= 1f)
            {
                secondTimer -= 1f;
            }

            if (keyboardInfoProvider.KeyPressCallback == null)
            {
                keyboardInfoProvider.KeyPressCallback = OnKeyPressed;
            }

            // Don't update hero selection if one of them is walking to or from the campfire
            var canSelect = heroRenderInfo.All(x => x.Value.Stance == eHeroStance.Idle || x.Value.Stance == eHeroStance.IdleSelected || x.Value.Stance == eHeroStance.Selected);

            foreach (var hero in Enum.GetValues(typeof(eHero)).Cast <eHero>())
            {
                UpdateHeroSelectionHover(hero, ms, canSelect);
            }

            if (selectedHero.HasValue && heroRenderInfo.All(x => x.Value.Stance == eHeroStance.Idle))
            {
                selectedHero = null;
            }

            exitButton.Update();
            okButton.Update();
            characterNameTextBox.Update(ms);
        }