Merge pull request #8590 from obrakmann/objectives-polish
Objectives polish
This commit is contained in:
@@ -16,7 +16,10 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public class ConquestVictoryConditionsInfo : ITraitInfo, Requires<MissionObjectivesInfo>
|
public class ConquestVictoryConditionsInfo : ITraitInfo, Requires<MissionObjectivesInfo>
|
||||||
{
|
{
|
||||||
[Desc("Delay for the end game notification in milliseconds.")]
|
[Desc("Delay for the end game notification in milliseconds.")]
|
||||||
public int NotificationDelay = 1500;
|
public readonly int NotificationDelay = 1500;
|
||||||
|
|
||||||
|
[Desc("Description of the objective.")]
|
||||||
|
[Translate] public readonly string Objective = "Destroy all opposition!";
|
||||||
|
|
||||||
public object Create(ActorInitializer init) { return new ConquestVictoryConditions(init.Self, this); }
|
public object Create(ActorInitializer init) { return new ConquestVictoryConditions(init.Self, this); }
|
||||||
}
|
}
|
||||||
@@ -38,7 +41,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (self.Owner.WinState != WinState.Undefined || self.Owner.NonCombatant) return;
|
if (self.Owner.WinState != WinState.Undefined || self.Owner.NonCombatant) return;
|
||||||
|
|
||||||
if (objectiveID < 0)
|
if (objectiveID < 0)
|
||||||
objectiveID = mo.Add(self.Owner, "Destroy all opposition!");
|
objectiveID = mo.Add(self.Owner, info.Objective, ObjectiveType.Primary, true);
|
||||||
|
|
||||||
if (!self.Owner.NonCombatant && self.Owner.HasNoRequiredUnits())
|
if (!self.Owner.NonCombatant && self.Owner.HasNoRequiredUnits())
|
||||||
mo.MarkFailed(self.Owner, objectiveID);
|
mo.MarkFailed(self.Owner, objectiveID);
|
||||||
|
|||||||
@@ -72,13 +72,13 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
world.ObserveAfterWinOrLose = !info.EarlyGameOver;
|
world.ObserveAfterWinOrLose = !info.EarlyGameOver;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Add(Player player, string description, ObjectiveType type = ObjectiveType.Primary)
|
public int Add(Player player, string description, ObjectiveType type = ObjectiveType.Primary, bool inhibitAnnouncement = false)
|
||||||
{
|
{
|
||||||
var newID = objectives.Count;
|
var newID = objectives.Count;
|
||||||
|
|
||||||
objectives.Insert(newID, new MissionObjective(type, description));
|
objectives.Insert(newID, new MissionObjective(type, description));
|
||||||
|
|
||||||
ObjectiveAdded(player);
|
ObjectiveAdded(player, inhibitAnnouncement);
|
||||||
foreach (var inou in player.PlayerActor.TraitsImplementing<INotifyObjectivesUpdated>())
|
foreach (var inou in player.PlayerActor.TraitsImplementing<INotifyObjectivesUpdated>())
|
||||||
inou.OnObjectiveAdded(player, newID);
|
inou.OnObjectiveAdded(player, newID);
|
||||||
|
|
||||||
@@ -231,7 +231,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
MarkFailed(player, id);
|
MarkFailed(player, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public event Action<Player> ObjectiveAdded = player => { player.HasObjectives = true; };
|
public event Action<Player, bool> ObjectiveAdded = (player, inhibitAnnouncement) => { player.HasObjectives = true; };
|
||||||
|
|
||||||
public void OnObjectiveAdded(Player player, int id) { }
|
public void OnObjectiveAdded(Player player, int id) { }
|
||||||
public void OnObjectiveCompleted(Player player, int id) { }
|
public void OnObjectiveCompleted(Player player, int id) { }
|
||||||
|
|||||||
@@ -31,7 +31,10 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public readonly float RatioRequired = 0.5f;
|
public readonly float RatioRequired = 0.5f;
|
||||||
|
|
||||||
[Desc("Delay for the end game notification in milliseconds.")]
|
[Desc("Delay for the end game notification in milliseconds.")]
|
||||||
public int NotificationDelay = 1500;
|
public readonly int NotificationDelay = 1500;
|
||||||
|
|
||||||
|
[Desc("Description of the objective")]
|
||||||
|
[Translate] public readonly string Objective = "Hold all the strategic positions!";
|
||||||
|
|
||||||
public object Create(ActorInitializer init) { return new StrategicVictoryConditions(init.Self, this); }
|
public object Create(ActorInitializer init) { return new StrategicVictoryConditions(init.Self, this); }
|
||||||
}
|
}
|
||||||
@@ -68,7 +71,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (player.WinState != WinState.Undefined || player.NonCombatant) return;
|
if (player.WinState != WinState.Undefined || player.NonCombatant) return;
|
||||||
|
|
||||||
if (objectiveID < 0)
|
if (objectiveID < 0)
|
||||||
objectiveID = mo.Add(player, "Hold all the strategic positions for a specified time!");
|
objectiveID = mo.Add(player, info.Objective, ObjectiveType.Primary, true);
|
||||||
|
|
||||||
if (!self.Owner.NonCombatant && self.Owner.HasNoRequiredUnits())
|
if (!self.Owner.NonCombatant && self.Owner.HasNoRequiredUnits())
|
||||||
mo.MarkFailed(self.Owner, objectiveID);
|
mo.MarkFailed(self.Owner, objectiveID);
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
PopulateObjectivesList(mo, objectivesPanel, template);
|
PopulateObjectivesList(mo, objectivesPanel, template);
|
||||||
|
|
||||||
Action<Player> redrawObjectives = player =>
|
Action<Player, bool> redrawObjectives = (player, _) =>
|
||||||
{
|
{
|
||||||
if (player == lp)
|
if (player == lp)
|
||||||
PopulateObjectivesList(mo, objectivesPanel, template);
|
PopulateObjectivesList(mo, objectivesPanel, template);
|
||||||
|
|||||||
@@ -27,6 +27,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
checkbox.IsChecked = () => lp.WinState != WinState.Undefined;
|
checkbox.IsChecked = () => lp.WinState != WinState.Undefined;
|
||||||
checkbox.GetCheckType = () => lp.WinState == WinState.Won ?
|
checkbox.GetCheckType = () => lp.WinState == WinState.Won ?
|
||||||
"checked" : "crossed";
|
"checked" : "crossed";
|
||||||
|
if (lp.HasObjectives)
|
||||||
|
{
|
||||||
|
var mo = lp.PlayerActor.Trait<MissionObjectives>();
|
||||||
|
checkbox.GetText = () => mo.Objectives.First().Description;
|
||||||
|
}
|
||||||
|
|
||||||
var statusLabel = widget.Get<LabelWidget>("STATS_STATUS");
|
var statusLabel = widget.Get<LabelWidget>("STATS_STATUS");
|
||||||
|
|
||||||
|
|||||||
@@ -55,9 +55,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
if (lp != null)
|
if (lp != null)
|
||||||
{
|
{
|
||||||
Action<Player> startBlinking = player =>
|
Action<Player, bool> startBlinking = (player, inhibitAnnouncement) =>
|
||||||
{
|
{
|
||||||
if (player == world.LocalPlayer)
|
if (!inhibitAnnouncement && player == world.LocalPlayer)
|
||||||
blinking = true;
|
blinking = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user