new support power impl

This commit is contained in:
Chris Forbes
2010-01-23 21:07:27 +13:00
parent bbf94fef79
commit d7a2691db3
56 changed files with 409 additions and 489 deletions

View File

@@ -117,10 +117,10 @@ namespace OpenRa
u => u.Name,
u => SpriteSheetBuilder.LoadAllSprites(u.Traits.Get<BuildableInfo>().Icon ?? (u.Name + "icon"))[0]);
spsprites = Rules.SupportPowerInfo
spsprites = Rules.Info.Values.SelectMany( u => u.Traits.WithInterface<SupportPowerInfo>() )
.ToDictionary(
u => u.Key,
u => SpriteSheetBuilder.LoadAllSprites(u.Value.Image)[0]);
u => u.Image,
u => SpriteSheetBuilder.LoadAllSprites(u.Image)[0]);
var groups = Rules.Info.Values.Select( x => x.Category ).Distinct().Where( g => g != null ).ToList();
@@ -893,8 +893,8 @@ namespace OpenRa
void DrawSupportPowers( World world )
{
var numPowers = world.LocalPlayer.SupportPowers.Values
.Where(a => a.IsAvailable).Count();
var powers = world.LocalPlayer.PlayerActor.traits.WithInterface<SupportPower>();
var numPowers = powers.Count(p => p.IsAvailable);
if (numPowers == 0) return;
@@ -907,38 +907,38 @@ namespace OpenRa
var y = 24;
string tooltipItem = null;
SupportPower tooltipItem = null;
int2 tooltipPos = int2.Zero;
foreach (var sp in world.LocalPlayer.SupportPowers)
foreach (var sp in powers)
{
var image = spsprites[sp.Key];
if (sp.Value.IsAvailable)
var image = spsprites[sp.Info.Image];
if (sp.IsAvailable)
{
var drawPos = new float2(5, y);
shpRenderer.DrawSprite(image, drawPos, PaletteType.Chrome);
clock.PlayFetchIndex("idle",
() => (sp.Value.TotalTime - sp.Value.RemainingTime)
* NumClockFrames / sp.Value.TotalTime);
() => (sp.TotalTime - sp.RemainingTime)
* NumClockFrames / sp.TotalTime);
clock.Tick();
shpRenderer.DrawSprite(clock.Image, drawPos, PaletteType.Chrome);
var rect = new Rectangle(5, y, 64, 48);
if (sp.Value.IsDone)
if (sp.IsReady)
{
ready.Play("ready");
shpRenderer.DrawSprite(ready.Image,
drawPos + new float2((64 - ready.Image.size.X) / 2, 2),
PaletteType.Chrome);
AddButton(rect, HandleSupportPower( sp.Value ));
AddButton(rect, HandleSupportPower( sp ));
}
if (rect.Contains(lastMousePos.ToPoint()))
{
tooltipItem = sp.Key;
tooltipItem = sp;
tooltipPos = drawPos.ToInt2() + new int2(72, 0);
}
@@ -965,25 +965,23 @@ namespace OpenRa
return "{0:D2}:{1:D2}".F(minutes, seconds % 60);
}
void DrawSupportPowerTooltip(World world, string sp, int2 pos)
void DrawSupportPowerTooltip(World world, SupportPower sp, int2 pos)
{
var tooltipSprite = ChromeProvider.GetImage(renderer, chromeCollection, "tooltip-bg");
rgbaRenderer.DrawSprite(tooltipSprite, pos, PaletteType.Chrome);
rgbaRenderer.Flush();
var info = Rules.SupportPowerInfo[sp];
pos += new int2(5, 5);
renderer.DrawText2(info.Description, pos, Color.White);
renderer.DrawText2(sp.Info.Description, pos, Color.White);
var timer = "Charge Time: {0}".F(FormatTime(world.LocalPlayer.SupportPowers[sp].RemainingTime));
var timer = "Charge Time: {0}".F(FormatTime(sp.RemainingTime));
DrawRightAligned(timer, pos + new int2((int)tooltipSprite.size.X - 10, 0), Color.White);
if (info.LongDesc != null)
if (sp.Info.LongDesc != null)
{
pos += new int2(0, 25);
renderer.DrawText(info.LongDesc.Replace("\\n", "\n"), pos, Color.White);
renderer.DrawText(sp.Info.LongDesc.Replace("\\n", "\n"), pos, Color.White);
}
}
}