Widgetize special power bin (needs polish)

This commit is contained in:
Paul Chote
2010-04-10 16:28:29 +12:00
committed by Chris Forbes
parent c568be255a
commit 9afe3fdaa8
11 changed files with 277 additions and 124 deletions

View File

@@ -37,16 +37,13 @@ namespace OpenRA
public readonly Renderer renderer;
public readonly SpriteRenderer rgbaRenderer;
public readonly LineRenderer lineRenderer;
readonly SpriteRenderer shpRenderer;
public readonly SpriteRenderer shpRenderer;
string chromeCollection;
string radarCollection;
string paletteCollection;
string digitCollection;
// Special power bin
readonly Dictionary<string, Sprite> spsprites;
// Build Palette tabs
string currentTab = "Building";
bool paletteOpen = false;
@@ -100,11 +97,6 @@ namespace OpenRA
u => u.Name,
u => SpriteSheetBuilder.LoadAllSprites(u.Traits.Get<BuildableInfo>().Icon ?? (u.Name + "icon"))[0]);
spsprites = Rules.Info.Values.SelectMany( u => u.Traits.WithInterface<SupportPowerInfo>() )
.ToDictionary(
u => u.Image,
u => SpriteSheetBuilder.LoadAllSprites(u.Image)[0]);
var groups = Rules.Categories();
tabImageNames = groups.Select(
@@ -190,7 +182,6 @@ namespace OpenRA
DrawButtons( world );
int paletteHeight = DrawBuildPalette(world, currentTab);
DrawSupportPowers( world );
DrawBuildTabs(world, paletteHeight);
DrawChat();
}
@@ -400,7 +391,7 @@ namespace OpenRA
}
public void DrawWidgets(World world) { rootWidget.Draw(); shpRenderer.Flush(); rgbaRenderer.Flush(); }
public void DrawLobby()
{
buttons.Clear();
@@ -1004,7 +995,7 @@ namespace OpenRA
}
}
int2 lastMousePos;
public int2 lastMousePos;
public bool HandleInput(World world, MouseInput mi)
{
if (selectedWidget != null)
@@ -1096,102 +1087,6 @@ namespace OpenRA
return Rules.Info[ a.ToLowerInvariant() ].Traits.Get<BuildableInfo>().Description;
}
void DrawSupportPowers( World world )
{
var powers = world.LocalPlayer.PlayerActor.traits.WithInterface<SupportPower>();
var numPowers = powers.Count(p => p.IsAvailable);
if (numPowers == 0) return;
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, chromeCollection, "specialbin-top"), new float2(0, 14), "chrome");
for (var i = 1; i < numPowers; i++)
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, chromeCollection, "specialbin-middle"), new float2(0, 14 + i * 51), "chrome");
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, chromeCollection, "specialbin-bottom"), new float2(0, 14 + numPowers * 51), "chrome");
rgbaRenderer.Flush();
var y = 24;
SupportPower tooltipItem = null;
int2 tooltipPos = int2.Zero;
foreach (var sp in powers)
{
var image = spsprites[sp.Info.Image];
if (sp.IsAvailable)
{
var drawPos = new float2(5, y);
shpRenderer.DrawSprite(image, drawPos, "chrome");
clock.PlayFetchIndex("idle",
() => (sp.TotalTime - sp.RemainingTime)
* (clock.CurrentSequence.Length - 1) / sp.TotalTime);
clock.Tick();
shpRenderer.DrawSprite(clock.Image, drawPos, "chrome");
var rect = new Rectangle(5, y, 64, 48);
if (sp.IsReady)
{
ready.Play("ready");
shpRenderer.DrawSprite(ready.Image,
drawPos + new float2((64 - ready.Image.size.X) / 2, 2),
"chrome");
}
AddButton(rect, HandleSupportPower(sp));
if (rect.Contains(lastMousePos.ToPoint()))
{
tooltipItem = sp;
tooltipPos = drawPos.ToInt2() + new int2(72, 0);
}
y += 51;
}
}
shpRenderer.Flush();
if (tooltipItem != null)
DrawSupportPowerTooltip(world, tooltipItem, tooltipPos);
}
Action<bool> HandleSupportPower(SupportPower sp)
{
return b => { if (b) sp.Activate(); };
}
string FormatTime(int ticks)
{
var seconds = ticks / 25;
var minutes = seconds / 60;
return "{0:D2}:{1:D2}".F(minutes, seconds % 60);
}
void DrawSupportPowerTooltip(World world, SupportPower sp, int2 pos)
{
var tooltipSprite = ChromeProvider.GetImage(renderer, chromeCollection, "tooltip-bg");
rgbaRenderer.DrawSprite(tooltipSprite, pos, "chrome");
rgbaRenderer.Flush();
pos += new int2(5, 5);
renderer.BoldFont.DrawText(rgbaRenderer, sp.Info.Description, pos, Color.White);
var timer = "Charge Time: {0}".F(FormatTime(sp.RemainingTime));
DrawRightAligned(timer, pos + new int2((int)tooltipSprite.size.X - 10, 0), Color.White);
if (sp.Info.LongDesc != null)
{
pos += new int2(0, 25);
renderer.RegularFont.DrawText(rgbaRenderer, sp.Info.LongDesc.Replace("\\n", "\n"), pos, Color.White);
}
rgbaRenderer.Flush();
}
public void SetCurrentTab(string produces)
{
if (!paletteOpen)