Пример #1
0
        public override void Draw()
        {
            var apparentText = Key.DisplayString();

            var font = Game.Renderer.Fonts[Font];
            var pos  = RenderOrigin;

            var textSize = font.Measure(apparentText);

            var disabled = IsDisabled();
            var valid    = IsValid();
            var state    = disabled ? "textfield-disabled" :
                           HasKeyboardFocus ? "textfield-focused" :
                           Ui.MouseOverWidget == this ? "textfield-hover" :
                           "textfield";

            WidgetUtils.DrawPanel(state, RenderBounds);

            // Blink the current entry to indicate focus
            if (HasKeyboardFocus && !showEntry)
            {
                return;
            }

            // Inset text by the margin and center vertically
            var textPos = pos + new int2(LeftMargin, (Bounds.Height - textSize.Y) / 2 - VisualHeight);

            // Scissor when the text overflows
            var isTextOverflowing = textSize.X > Bounds.Width - LeftMargin - RightMargin;

            if (isTextOverflowing)
            {
                Game.Renderer.EnableScissor(new Rectangle(pos.X + LeftMargin, pos.Y,
                                                          Bounds.Width - LeftMargin - RightMargin, Bounds.Bottom));
            }

            var color = disabled ? TextColorDisabled : !valid ? TextColorInvalid : TextColor;

            font.DrawText(apparentText, textPos, color);

            if (isTextOverflowing)
            {
                Game.Renderer.DisableScissor();
            }
        }
Пример #2
0
        void DrawProductionTooltip(World world, string unit, Hotkey hotkey, int2 pos)
        {
            pos.Y += 15;

            var pl = world.LocalPlayer;
            var p  = pos.ToFloat2() - new float2(297, -3);

            var info         = world.Map.Rules.Actors[unit];
            var tooltip      = info.Traits.Get <TooltipInfo>();
            var buildable    = info.Traits.Get <BuildableInfo>();
            var cost         = info.Traits.Get <ValuedInfo>().Cost;
            var canBuildThis = CurrentQueue.CanBuild(info);

            var longDescSize = Game.Renderer.Fonts["Regular"].Measure(tooltip.Description.Replace("\\n", "\n")).Y;

            if (!canBuildThis)
            {
                longDescSize += 8;
            }

            WidgetUtils.DrawPanel("dialog4", new Rectangle(Game.Renderer.Resolution.Width - 300, pos.Y, 300, longDescSize + 65));

            Game.Renderer.Fonts["Bold"].DrawText(
                tooltip.Name + (hotkey.IsValid() ? " ({0})".F(hotkey.DisplayString()) : ""),
                p.ToInt2() + new int2(5, 5), Color.White);

            var resources = pl.PlayerActor.Trait <PlayerResources>();
            var power     = pl.PlayerActor.Trait <PowerManager>();

            DrawRightAligned("${0}".F(cost), pos + new int2(-5, 5),
                             (resources.DisplayCash + resources.DisplayResources >= cost ? Color.White : Color.Red));

            var lowpower = power.PowerState != PowerState.Normal;
            var time     = CurrentQueue.GetBuildTime(info.Name)
                           * ((lowpower) ? CurrentQueue.Info.LowPowerSlowdown : 1);

            DrawRightAligned(WidgetUtils.FormatTime(time), pos + new int2(-5, 35), lowpower ? Color.Red : Color.White);

            var pi = info.Traits.GetOrDefault <PowerInfo>();

            if (pi != null)
            {
                DrawRightAligned("{1}{0}".F(pi.Amount, pi.Amount > 0 ? "+" : ""), pos + new int2(-5, 20),
                                 ((power.PowerProvided - power.PowerDrained) >= -pi.Amount || pi.Amount > 0) ? Color.White : Color.Red);
            }

            p += new int2(5, 35);
            if (!canBuildThis)
            {
                var prereqs = buildable.Prerequisites.Select(s => Description(world.Map.Rules, s)).Where(s => !s.StartsWith("~"));
                if (prereqs.Any())
                {
                    Game.Renderer.Fonts["Regular"].DrawText(RequiresText.F(prereqs.JoinWith(", ")), p.ToInt2(), Color.White);

                    p += new int2(0, 8);
                }
            }

            p += new int2(0, 15);
            Game.Renderer.Fonts["Regular"].DrawText(tooltip.Description.Replace("\\n", "\n"),
                                                    p.ToInt2(), Color.White);
        }
Пример #3
0
        void DrawProductionTooltip(World world, string unit, Hotkey hotkey, int2 pos)
        {
            pos.Y += 15;

            var pl = world.LocalPlayer;
            var p = pos.ToFloat2() - new float2(297, -3);

            var info = world.Map.Rules.Actors[unit];
            var tooltip = info.Traits.Get<TooltipInfo>();
            var buildable = info.Traits.Get<BuildableInfo>();
            var cost = info.Traits.Get<ValuedInfo>().Cost;
            var canBuildThis = CurrentQueue.CanBuild(info);

            var longDescSize = Game.Renderer.Fonts["Regular"].Measure(tooltip.Description.Replace("\\n", "\n")).Y;
            if (!canBuildThis) longDescSize += 8;

            WidgetUtils.DrawPanel("dialog4", new Rectangle(Game.Renderer.Resolution.Width - 300, pos.Y, 300, longDescSize + 65));

            Game.Renderer.Fonts["Bold"].DrawText(
                tooltip.Name + (hotkey.IsValid() ? " ({0})".F(hotkey.DisplayString()) : ""),
                                                   p.ToInt2() + new int2(5, 5), Color.White);

            var resources = pl.PlayerActor.Trait<PlayerResources>();
            var power = pl.PlayerActor.Trait<PowerManager>();

            DrawRightAligned("${0}".F(cost), pos + new int2(-5, 5),
                (resources.DisplayCash + resources.DisplayResources >= cost ? Color.White : Color.Red));

            var lowpower = power.PowerState != PowerState.Normal;
            var time = CurrentQueue.GetBuildTime(info.Name)
                * ((lowpower) ? CurrentQueue.Info.LowPowerSlowdown : 1);
            DrawRightAligned(WidgetUtils.FormatTime(time), pos + new int2(-5, 35), lowpower ? Color.Red : Color.White);

            var pi = info.Traits.GetOrDefault<PowerInfo>();
            if (pi != null)
                DrawRightAligned("{1}{0}".F(pi.Amount, pi.Amount > 0 ? "+" : ""), pos + new int2(-5, 20),
                    ((power.PowerProvided - power.PowerDrained) >= -pi.Amount || pi.Amount > 0) ? Color.White : Color.Red);

            p += new int2(5, 35);
            if (!canBuildThis)
            {
                var prereqs = buildable.Prerequisites.Select(s => Description(world.Map.Rules, s)).Where(s => !s.StartsWith("~"));
                if (prereqs.Any())
                {
                    Game.Renderer.Fonts["Regular"].DrawText(RequiresText.F(prereqs.JoinWith(", ")), p.ToInt2(), Color.White);

                    p += new int2(0, 8);
                }
            }

            p += new int2(0, 15);
            Game.Renderer.Fonts["Regular"].DrawText(tooltip.Description.Replace("\\n", "\n"),
                p.ToInt2(), Color.White);
        }