reduce batch count a LOT; build palette order is now explicit
This commit is contained in:
@@ -875,32 +875,36 @@ namespace OpenRA
|
|||||||
|
|
||||||
var buildableItems = Rules.TechTree.BuildableItems(world.LocalPlayer, queueName).ToArray();
|
var buildableItems = Rules.TechTree.BuildableItems(world.LocalPlayer, queueName).ToArray();
|
||||||
|
|
||||||
var allBuildables = Rules.TechTree.AllBuildables(world.LocalPlayer, queueName)
|
var allBuildables = Rules.TechTree.AllBuildables(queueName)
|
||||||
.Where(a => a.Traits.Contains<BuildableInfo>())
|
|
||||||
.Where(a => a.Traits.Get<BuildableInfo>().Owner.Contains(world.LocalPlayer.Country.Race))
|
.Where(a => a.Traits.Get<BuildableInfo>().Owner.Contains(world.LocalPlayer.Country.Race))
|
||||||
.OrderBy(a => a.Traits.Get<BuildableInfo>().TechLevel);
|
.OrderBy(a => a.Traits.Get<BuildableInfo>().BuildPaletteOrder).ToArray();
|
||||||
|
|
||||||
var queue = world.LocalPlayer.PlayerActor.traits.Get<Traits.ProductionQueue>();
|
var queue = world.LocalPlayer.PlayerActor.traits.Get<ProductionQueue>();
|
||||||
|
|
||||||
var overlayBits = new List<Pair<Sprite, float2>>();
|
var overlayBits = new List<Pair<Sprite, float2>>();
|
||||||
|
|
||||||
string tooltipItem = null;
|
string tooltipItem = null;
|
||||||
|
|
||||||
// Draw the top border
|
// Draw the top border
|
||||||
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "top"), new float2(origin.X - 9, origin.Y - 9), "chrome");
|
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "top"),
|
||||||
|
new float2(origin.X - 9, origin.Y - 9), "chrome");
|
||||||
|
|
||||||
|
var numActualRows = Math.Max((allBuildables.Length + columns - 1) / columns, paletteRows);
|
||||||
|
for (var w = 0; w < numActualRows; w++)
|
||||||
|
rgbaRenderer.DrawSprite(
|
||||||
|
ChromeProvider.GetImage(renderer, paletteCollection,
|
||||||
|
"bg-" + (w % 4).ToString()),
|
||||||
|
new float2(origin.X - 9, origin.Y + 48 * w),
|
||||||
|
"chrome");
|
||||||
|
|
||||||
|
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "bottom"),
|
||||||
|
new float2(origin.X - 9, origin.Y - 1 + 48 * numActualRows), "chrome");
|
||||||
|
|
||||||
|
rgbaRenderer.Flush();
|
||||||
|
|
||||||
// Draw the icons
|
// Draw the icons
|
||||||
int lasty = -1;
|
|
||||||
foreach (var item in allBuildables)
|
foreach (var item in allBuildables)
|
||||||
{
|
{
|
||||||
// Draw the background for this row
|
|
||||||
if (y != lasty)
|
|
||||||
{
|
|
||||||
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "bg-" + (y % 4).ToString()), new float2(origin.X - 9, origin.Y + 48 * y), "chrome");
|
|
||||||
rgbaRenderer.Flush();
|
|
||||||
lasty = y;
|
|
||||||
}
|
|
||||||
|
|
||||||
var rect = new RectangleF(origin.X + x * 64, origin.Y + 48 * y, 64, 48);
|
var rect = new RectangleF(origin.X + x * 64, origin.Y + 48 * y, 64, 48);
|
||||||
var drawPos = new float2(rect.Location);
|
var drawPos = new float2(rect.Location);
|
||||||
var isBuildingSomething = queue.CurrentItem(queueName) != null;
|
var isBuildingSomething = queue.CurrentItem(queueName) != null;
|
||||||
@@ -963,29 +967,27 @@ namespace OpenRA
|
|||||||
}
|
}
|
||||||
if (x != 0) y++;
|
if (x != 0) y++;
|
||||||
|
|
||||||
while (y < paletteRows)
|
|
||||||
{
|
|
||||||
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "bg-" + (y % 4).ToString()), new float2(origin.X - 9, origin.Y + 48 * y), "chrome");
|
|
||||||
y++;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var ob in overlayBits)
|
foreach (var ob in overlayBits)
|
||||||
shpRenderer.DrawSprite(ob.First, ob.Second, "chrome");
|
shpRenderer.DrawSprite(ob.First, ob.Second, "chrome");
|
||||||
|
|
||||||
shpRenderer.Flush();
|
shpRenderer.Flush();
|
||||||
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "bottom"), new float2(origin.X - 9, origin.Y - 1 + 48 * y), "chrome");
|
|
||||||
|
|
||||||
// Draw dock
|
// Draw dock
|
||||||
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "dock-top"), new float2(Game.viewport.Width - 14, origin.Y - 23), "chrome");
|
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "dock-top"),
|
||||||
for (int i = 0; i < y; i++)
|
new float2(Game.viewport.Width - 14, origin.Y - 23), "chrome");
|
||||||
{
|
|
||||||
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "dock-" + (y % 4).ToString()), new float2(Game.viewport.Width - 14, origin.Y + 48 * i), "chrome");
|
for (int i = 0; i < numActualRows; i++)
|
||||||
}
|
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "dock-" + (i % 4).ToString()),
|
||||||
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "dock-bottom"), new float2(Game.viewport.Width - 14, origin.Y - 1 + 48 * y), "chrome");
|
new float2(Game.viewport.Width - 14, origin.Y + 48 * i), "chrome");
|
||||||
|
|
||||||
|
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, paletteCollection, "dock-bottom"),
|
||||||
|
new float2(Game.viewport.Width - 14, origin.Y - 1 + 48 * numActualRows), "chrome");
|
||||||
|
|
||||||
rgbaRenderer.Flush();
|
rgbaRenderer.Flush();
|
||||||
|
|
||||||
if (tooltipItem != null && paletteOpen)
|
if (tooltipItem != null && paletteOpen)
|
||||||
DrawProductionTooltip(world, tooltipItem, new float2(Game.viewport.Width, origin.Y + y * 48 + 9).ToInt2()/*tooltipPos*/);
|
DrawProductionTooltip(world, tooltipItem,
|
||||||
|
new float2(Game.viewport.Width, origin.Y + numActualRows * 48 + 9).ToInt2());
|
||||||
|
|
||||||
return y*48+9;
|
return y*48+9;
|
||||||
}
|
}
|
||||||
@@ -996,7 +998,8 @@ namespace OpenRA
|
|||||||
var unit = Rules.Info[item];
|
var unit = Rules.Info[item];
|
||||||
|
|
||||||
Sound.Play(unit.Traits.Contains<BuildingInfo>() ? eva.BuildingSelectAudio : eva.UnitSelectAudio);
|
Sound.Play(unit.Traits.Contains<BuildingInfo>() ? eva.BuildingSelectAudio : eva.UnitSelectAudio);
|
||||||
Game.IssueOrder(Order.StartProduction(world.LocalPlayer, item, Game.controller.GetModifiers().HasModifier(Modifiers.Shift) ? 5 : 1));
|
Game.IssueOrder(Order.StartProduction(world.LocalPlayer, item,
|
||||||
|
Game.controller.GetModifiers().HasModifier(Modifiers.Shift) ? 5 : 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleBuildPalette( World world, string item, bool isLmb )
|
void HandleBuildPalette( World world, string item, bool isLmb )
|
||||||
|
|||||||
@@ -75,12 +75,12 @@ namespace OpenRA.GameRules
|
|||||||
public IEnumerable<string> BuildableItems( Player player, params string[] categories )
|
public IEnumerable<string> BuildableItems( Player player, params string[] categories )
|
||||||
{
|
{
|
||||||
var playerBuildings = GatherBuildings( player );
|
var playerBuildings = GatherBuildings( player );
|
||||||
foreach( var unit in AllBuildables( player, categories ) )
|
foreach (var unit in AllBuildables(categories))
|
||||||
if( CanBuild( unit, player, playerBuildings ) )
|
if( CanBuild( unit, player, playerBuildings ) )
|
||||||
yield return unit.Name;
|
yield return unit.Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<ActorInfo> AllBuildables(Player player, params string[] categories)
|
public IEnumerable<ActorInfo> AllBuildables(params string[] categories)
|
||||||
{
|
{
|
||||||
return Rules.Info.Values
|
return Rules.Info.Values
|
||||||
.Where( x => x.Name[ 0 ] != '^' )
|
.Where( x => x.Name[ 0 ] != '^' )
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ namespace OpenRA.Traits
|
|||||||
public readonly string LongDesc = "";
|
public readonly string LongDesc = "";
|
||||||
public readonly string Icon = null;
|
public readonly string Icon = null;
|
||||||
public readonly string[] AlternateName = { };
|
public readonly string[] AlternateName = { };
|
||||||
|
public readonly int BuildPaletteOrder = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Buildable { }
|
class Buildable { }
|
||||||
|
|||||||
Reference in New Issue
Block a user