public void Update(Input.InputState inputState)
        {
            selectedLevel = null;

            float fCol = (inputState.MousePos.X - levelBasePos.X) / levelSpacing.X;
            int Col = (int)fCol;
            if (Col < 0 || Col >= chapters.Count)
            {
                hovering = null;
                hoveringStar = false;
                return;
            }

            List<LevelState> levels = chapters[Col];
            float fRow = (inputState.MousePos.Y + levelSpacing.Y/3 - levelBasePos.Y) / levelSpacing.Y;
            int Row = (int)fRow;
            if (Row < 0 || Row >= levels.Count)
            {
                hovering = null;
                hoveringStar = false;
                return;
            }

            hovering = levels[Row];
            hoveringStar = (fCol - Col) > 0.1f;

            if (inputState.WasMouseLeftJustPressed())
            {
                selectedLevel = hovering;
            }
        }
        public void Update(Input.InputState inputState, Rectangle screenSize)
        {
            // for now, let's refresh the state every frame
            NewGameState();

            LayOutArea(viewingPlayer.Hand, new Rectangle(100, screenSize.Height - 100, screenSize.Width - 200, 100), handCardSize, 0);
            int battlefieldHeight = (screenSize.Height - 130) / 2;
            LayOutBattlefield(new Rectangle(10, battlefieldHeight, screenSize.Width-20, battlefieldHeight), viewingPlayer.Battlefield, false);

            Player opponent = GetOpponent();
            if(opponent != null)
            {
                LayOutBattlefield(new Rectangle(10, 0, screenSize.Width-20, battlefieldHeight), opponent.Battlefield, true);
            }

            Vector2 mousePos = inputState.MousePos;
            if (hoveredCard != null)
            {
                if (!hoveredCard.Contains(mousePos))
                    hoveredCard = null;
            }
            bool hoveredCardMissing = (hoveredCard != null);

            foreach (UICard c in gameStateRepresentation.Values)
            {
                if (c == hoveredCard)
                    hoveredCardMissing = false;
                else if (hoveredCard == null && c.Contains(mousePos))
                    hoveredCard = c;

                c.Update(hoveredCard == c);
            }

            if (hoveredCardMissing)
                hoveredCard = null;

            if (hoveredCard != null && inputState.WasMouseLeftJustPressed())
            {
                if (hoveredCard.card is HandCardReference)
                {
                    viewingPlayer.Play((HandCardReference)hoveredCard.card);
                }
                else if (hoveredCard.card is BattlefieldCardReference)
                {
                    bool activatedAnAbility = false;
                    foreach(AbilityInstance a in hoveredCard.card.Abilities)
                    {
                        if(a.ability is ActivatedAbility)
                        {
                            ((ActivatedAbility)a.ability).Activate((BattlefieldCardReference)hoveredCard.card);
                            activatedAnAbility = true;
                            break;
                        }
                    }

                    if(!activatedAnAbility && hoveredCard.card.IsCreature && viewingPlayer.game.currentPhase == Phase.Attack)
                    {
                        BattlefieldCardReference battlefieldCard = (BattlefieldCardReference)hoveredCard.card;
                        if (viewingPlayer.IsAttacking(battlefieldCard))
                        {
                            viewingPlayer.WithdrawAttacker(battlefieldCard);
                        }
                        else
                        {
                            viewingPlayer.DeclareAttacker(battlefieldCard, GetOpponent());
                        }
                    }
//                    BattlefieldCardReference cardRef = ((BattlefieldCardReference)hoveredCard.card);
//                    cardRef.isTapped = !cardRef.isTapped;
                }
            }

            foreach(UIButton button in buttons)
            {
                button.Update(inputState);
            }
        }