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(); } }
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); }
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); }