Merge pull request #9759 from atlimit8/ActorsHavingTrait
Add ActorsHavingTrait<TTrait>()
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user