Exemple #1
0
        // ReSharper disable RedundantCheckBeforeAssignment
        protected override void DoUpdate(SAMTime gameTime, InputState istate)
        {
            if (!FloatMath.FloatEquals(Size.Width, HUD.Width))
            {
                Size = new FSize(HUD.Width, Height);
            }

            var sel = ((GDWorldHUD)HUD).SelectedNode;

            if (sel == null && progressMove > 0)
            {
                // DISAPPEAR

                if (!(FloatMath.IsOne(progressMove) && istate.IsRealDown))
                {
                    FloatMath.ProgressDec(ref progressMove, gameTime.ElapsedSeconds * SPEED_MOVE);
                    FloatMath.ProgressInc(ref progressBlend, gameTime.ElapsedSeconds * SPEED_BLEND);
                }

                if (FloatMath.IsZero(progressMove))
                {
                    displayNode   = null;
                    progressMove  = 0;
                    progressBlend = 1;
                }
            }
            else if (sel != null && displayNode == null)
            {
                // START APPEAR

                displayNode   = sel;
                progressMove  = 0;
                progressBlend = 1;

                text.Text = "Level " + displayNode.Blueprint.Name + "  :  " + displayNode.Blueprint.FullName;
            }
            else if (sel != null && sel != displayNode)
            {
                // BLEND AWAY FROM CURRENT

                FloatMath.ProgressInc(ref progressMove, gameTime.ElapsedSeconds * SPEED_MOVE);
                FloatMath.ProgressDec(ref progressBlend, gameTime.ElapsedSeconds * SPEED_BLEND);

                if (FloatMath.IsZero(progressBlend))
                {
                    displayNode = sel;
                    text.Text   = "Level " + displayNode.Blueprint.Name + "  :  " + displayNode.Blueprint.FullName;
                }
            }
            else if (sel != null && sel == displayNode && (progressBlend < 1 || progressMove < 1))
            {
                // BLEND INTO OTHER | APPEAR

                FloatMath.ProgressInc(ref progressMove, gameTime.ElapsedSeconds * SPEED_MOVE);
                FloatMath.ProgressInc(ref progressBlend, gameTime.ElapsedSeconds * SPEED_BLEND);
            }

            var rp = new FPoint(0, (1 - progressMove) * -Height);

            if (rp != RelativePosition)
            {
                RelativePosition = rp;
                Revalidate();
            }
            text.TextColor = FlatColors.TextHUD * progressBlend;

            IsVisible = FloatMath.IsNotZero(progressMove);
        }