Merge pull request #9759 from atlimit8/ActorsHavingTrait

Add ActorsHavingTrait<TTrait>()
This commit is contained in:
Oliver Brakmann
2015-11-04 22:26:10 +01:00
27 changed files with 132 additions and 125 deletions

View File

@@ -31,8 +31,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var ticker = widget.Get<LogicTickerWidget>("RADAR_TICKER");
ticker.OnTick = () =>
{
radarEnabled = devMode.DisableShroud || world.ActorsWithTrait<ProvidesRadar>()
.Any(a => a.Actor.Owner == world.LocalPlayer && a.Trait.IsActive);
radarEnabled = devMode.DisableShroud || world.ActorsHavingTrait<ProvidesRadar>(r => r.IsActive)
.Any(a => a.Owner == world.LocalPlayer);
if (radarEnabled != cachedRadarEnabled)
Game.Sound.PlayNotification(world.Map.Rules, null, "Sounds", radarEnabled ? "RadarUp" : "RadarDown", null);

View File

@@ -240,12 +240,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
template.Get<LabelWidget>("SPENT").GetText = () => "$" + res.Spent;
var assets = template.Get<LabelWidget>("ASSETS");
assets.GetText = () => "$" + world.Actors
.Where(a => a.Owner == player && !a.IsDead && a.Info.HasTraitInfo<ValuedInfo>())
assets.GetText = () => "$" + world.ActorsHavingTrait<Valued>()
.Where(a => a.Owner == player && !a.IsDead)
.Sum(a => a.Info.TraitInfos<ValuedInfo>().First().Cost);
var harvesters = template.Get<LabelWidget>("HARVESTERS");
harvesters.GetText = () => world.Actors.Count(a => a.Owner == player && !a.IsDead && a.Info.HasTraitInfo<HarvesterInfo>()).ToString();
harvesters.GetText = () => world.ActorsHavingTrait<Harvester>().Count(a => a.Owner == player && !a.IsDead).ToString();
return template;
}
@@ -280,7 +280,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{
return ScrollItemWidget.Setup(template, () => false, () =>
{
var playerBase = world.Actors.FirstOrDefault(a => !a.IsDead && a.Info.HasTraitInfo<BaseBuildingInfo>() && a.Owner == player);
var playerBase = world.ActorsHavingTrait<BaseBuilding>().FirstOrDefault(a => !a.IsDead && a.Owner == player);
if (playerBase != null)
worldRenderer.Viewport.Center(playerBase.CenterPosition);
});

View File

@@ -47,9 +47,9 @@ namespace OpenRA.Mods.Common.Widgets
{
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "critical_unowned"), offset + new float2(rb.Left + curX, rb.Top));
if (world.LocalPlayer != null && WorldUtils.AreMutualAllies(a.Actor.Owner, world.LocalPlayer))
if (world.LocalPlayer != null && WorldUtils.AreMutualAllies(a.Owner, world.LocalPlayer))
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "player_owned"), offset + new float2(rb.Left + curX, rb.Top));
else if (!a.Actor.Owner.NonCombatant)
else if (!a.Owner.NonCombatant)
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "enemy_owned"), offset + new float2(rb.Left + curX, rb.Top));
curX += 32;
@@ -96,8 +96,8 @@ namespace OpenRA.Mods.Common.Widgets
void Init()
{
var visible = world.ActorsWithTrait<StrategicVictoryConditions>().Any() &&
world.ActorsWithTrait<StrategicPoint>().Any();
var visible = world.ActorsHavingTrait<StrategicVictoryConditions>().Any() &&
world.ActorsHavingTrait<StrategicPoint>().Any();
IsVisible = () => visible;
initialised = true;

View File

@@ -193,16 +193,14 @@ namespace OpenRA.Mods.Common.Widgets
{
var player = world.RenderPlayer ?? world.LocalPlayer;
var bases = world.ActorsWithTrait<BaseBuilding>()
.Where(a => a.Actor.Owner == player)
.Select(b => b.Actor)
var bases = world.ActorsHavingTrait<BaseBuilding>()
.Where(a => a.Owner == player)
.ToList();
// If no BaseBuilding exist pick the first selectable Building.
if (!bases.Any())
{
var building = world.ActorsWithTrait<Building>()
.Select(b => b.Actor)
var building = world.ActorsHavingTrait<Building>()
.FirstOrDefault(a => a.Owner == player && a.Info.HasTraitInfo<SelectableInfo>());
// No buildings left
@@ -230,10 +228,9 @@ namespace OpenRA.Mods.Common.Widgets
{
var player = world.RenderPlayer ?? world.LocalPlayer;
var facilities = world.ActorsWithTrait<Production>()
.Where(a => a.Actor.Owner == player && !a.Actor.Info.HasTraitInfo<BaseBuildingInfo>())
.OrderBy(f => f.Actor.Info.TraitInfo<ProductionInfo>().Produces.First())
.Select(b => b.Actor)
var facilities = world.ActorsHavingTrait<Production>()
.Where(a => a.Owner == player && !a.Info.HasTraitInfo<BaseBuildingInfo>())
.OrderBy(f => f.Info.TraitInfo<ProductionInfo>().Produces.First())
.ToList();
if (!facilities.Any())