Fix broken first tick rendering in BuildPaletteWidget.

This commit is contained in:
Paul Chote
2011-01-20 00:51:13 +13:00
parent 1fb42f47b6
commit 2fca9b0b19
2 changed files with 98 additions and 100 deletions

View File

@@ -25,7 +25,7 @@ namespace OpenRA.Mods.RA
public ClassicProductionQueue( Actor self, ClassicProductionQueueInfo info ) public ClassicProductionQueue( Actor self, ClassicProductionQueueInfo info )
: base(self, self, info as ProductionQueueInfo) {} : base(self, self, info as ProductionQueueInfo) {}
[Sync] bool QueueActive = true; [Sync] bool QueueActive = false;
public override void Tick( Actor self ) public override void Tick( Actor self )
{ {
QueueActive = self.World.Queries.OwnedBy[self.Owner].WithTrait<Production>() QueueActive = self.World.Queries.OwnedBy[self.Owner].WithTrait<Production>()

View File

@@ -26,16 +26,17 @@ namespace OpenRA.Mods.RA.Widgets
public int Columns = 3; public int Columns = 3;
public int Rows = 5; public int Rows = 5;
ProductionQueue CurrentQueue = null; ProductionQueue CurrentQueue;
List<ProductionQueue> VisibleQueues = new List<ProductionQueue>(); List<ProductionQueue> VisibleQueues;
bool paletteOpen = false; bool paletteOpen = false;
Dictionary<string, Sprite> iconSprites; Dictionary<string, Sprite> iconSprites;
static float2 paletteOpenOrigin = new float2(Game.viewport.Width - 215, 280); float2 paletteOpenOrigin = new float2(Game.viewport.Width - 215, 280);
static float2 paletteClosedOrigin = new float2(Game.viewport.Width - 16, 280); float2 paletteClosedOrigin = new float2(Game.viewport.Width - 16, 280);
static float2 paletteOrigin = paletteClosedOrigin; float2 paletteOrigin;
const int paletteAnimationLength = 7;
int paletteAnimationLength = 7;
int paletteAnimationFrame = 0; int paletteAnimationFrame = 0;
bool paletteAnimating = false; bool paletteAnimating = false;
@@ -55,25 +56,21 @@ namespace OpenRA.Mods.RA.Widgets
{ {
this.world = world; this.world = world;
this.worldRenderer = worldRenderer; this.worldRenderer = worldRenderer;
}
public override void Initialize()
{
base.Initialize();
cantBuild = new Animation("clock"); cantBuild = new Animation("clock");
cantBuild.PlayFetchIndex("idle", () => 0); cantBuild.PlayFetchIndex("idle", () => 0);
ready = new Animation("pips"); ready = new Animation("pips");
ready.PlayRepeating("ready"); ready.PlayRepeating("ready");
clock = new Animation("clock"); clock = new Animation("clock");
paletteOrigin = paletteClosedOrigin;
VisibleQueues = new List<ProductionQueue>();
CurrentQueue = null;
iconSprites = Rules.Info.Values iconSprites = Rules.Info.Values
.Where(u => u.Traits.Contains<BuildableInfo>() && u.Name[0] != '^') .Where(u => u.Traits.Contains<BuildableInfo>() && u.Name[0] != '^')
.ToDictionary( .ToDictionary(
u => u.Name, u => u.Name,
u => SpriteSheetBuilder.LoadAllSprites(u.Traits.Get<TooltipInfo>().Icon ?? (u.Name + "icon"))[0]); u => SpriteSheetBuilder.LoadAllSprites(u.Traits.Get<TooltipInfo>().Icon ?? (u.Name + "icon"))[0]);
IsVisible = () => { return CurrentQueue != null || (CurrentQueue == null && !paletteOpen); };
} }
public override Rectangle EventBounds public override Rectangle EventBounds
@@ -142,6 +139,7 @@ namespace OpenRA.Mods.RA.Widgets
{ {
if (!paletteOpen) if (!paletteOpen)
paletteAnimating = true; paletteAnimating = true;
paletteOpen = true; paletteOpen = true;
CurrentQueue = queue; CurrentQueue = queue;
} }
@@ -178,28 +176,27 @@ namespace OpenRA.Mods.RA.Widgets
return true; return true;
} }
int paletteHeight = 0;
int numActualRows = 0;
public override void DrawInner() public override void DrawInner()
{ {
if (!IsVisible()) return; if (!IsVisible()) return;
// todo: fix // todo: fix
paletteHeight = DrawPalette(CurrentQueue); int paletteHeight = DrawPalette(CurrentQueue);
DrawBuildTabs(world, paletteHeight); DrawBuildTabs(world, paletteHeight);
} }
int numActualRows = 5;
int DrawPalette(ProductionQueue queue) int DrawPalette(ProductionQueue queue)
{ {
buttons.Clear(); buttons.Clear();
if (queue == null) return 0;
string paletteCollection = "palette-" + world.LocalPlayer.Country.Race; string paletteCollection = "palette-" + world.LocalPlayer.Country.Race;
float2 origin = new float2(paletteOrigin.X + 9, paletteOrigin.Y + 9); float2 origin = new float2(paletteOrigin.X + 9, paletteOrigin.Y + 9);
// Collect info
var x = 0; var x = 0;
var y = 0; var y = 0;
if (queue != null)
{
var buildableItems = queue.BuildableItems().OrderBy(a => a.Traits.Get<BuildableInfo>().BuildPaletteOrder); var buildableItems = queue.BuildableItems().OrderBy(a => a.Traits.Get<BuildableInfo>().BuildPaletteOrder);
var allBuildables = queue.AllItems().OrderBy(a => a.Traits.Get<BuildableInfo>().BuildPaletteOrder); var allBuildables = queue.AllItems().OrderBy(a => a.Traits.Get<BuildableInfo>().BuildPaletteOrder);
@@ -283,6 +280,7 @@ namespace OpenRA.Mods.RA.Widgets
if (tooltipItem != null && !paletteAnimating && paletteOpen) if (tooltipItem != null && !paletteAnimating && paletteOpen)
DrawProductionTooltip(world, tooltipItem, DrawProductionTooltip(world, tooltipItem,
new float2(Game.viewport.Width, origin.Y + numActualRows * 48 + 9).ToInt2()); new float2(Game.viewport.Width, origin.Y + numActualRows * 48 + 9).ToInt2());
}
// Palette Dock // Palette Dock
WidgetUtils.DrawRGBA(ChromeProvider.GetImage(paletteCollection, "dock-top"), WidgetUtils.DrawRGBA(ChromeProvider.GetImage(paletteCollection, "dock-top"),