Move the objective flag stuff to MissionUtils
This commit is contained in:
@@ -36,39 +36,35 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
IEnumerable<string> GetObjectiveText()
|
IEnumerable<string> GetObjectiveText()
|
||||||
{
|
{
|
||||||
var objectives = new List<string>();
|
var objectives = new List<string>();
|
||||||
if (HasObjective(Objectives.FindEinstein))
|
if (MissionUtils.HasFlag(currentObjectives, Objectives.FindEinstein))
|
||||||
{
|
{
|
||||||
objectives.Add("Find Einstein. Tanya and Einstein must survive.");
|
objectives.Add("Find Einstein. Tanya and Einstein must survive.");
|
||||||
}
|
}
|
||||||
if (HasObjective(Objectives.WaitForHelicopter))
|
if (MissionUtils.HasFlag(currentObjectives, Objectives.WaitForHelicopter))
|
||||||
{
|
{
|
||||||
objectives.Add("Wait for the helicopter and extract Einstein. Tanya and Einstein must survive.");
|
objectives.Add("Wait for the helicopter and extract Einstein. Tanya and Einstein must survive.");
|
||||||
}
|
}
|
||||||
return objectives;
|
return objectives;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HasObjective(Objectives o)
|
void DisplayObjective(string objective)
|
||||||
{
|
{
|
||||||
return (currentObjectives & o) == o;
|
Game.AddChatLine(Color.LimeGreen, "Objective", objective);
|
||||||
|
Sound.Play("bleep6.aud");
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddObjective(Objectives o)
|
void DisplayHint(string objective)
|
||||||
{
|
{
|
||||||
currentObjectives |= o;
|
Game.AddChatLine(Color.Yellow, "Hint", objective);
|
||||||
}
|
Sound.Play("bleep6.aud");
|
||||||
|
|
||||||
void RemoveObjective(Objectives o)
|
|
||||||
{
|
|
||||||
currentObjectives &= ~o;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayObjectives()
|
void DisplayObjectives()
|
||||||
{
|
{
|
||||||
foreach (var objective in GetObjectiveText())
|
foreach (var objective in GetObjectiveText())
|
||||||
{
|
{
|
||||||
Game.AddChatLine(Color.LimeGreen, "Objective", objective);
|
DisplayObjective(objective);
|
||||||
}
|
}
|
||||||
Sound.Play("bleep6.aud");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Objectives currentObjectives = Objectives.FindEinstein;
|
Objectives currentObjectives = Objectives.FindEinstein;
|
||||||
@@ -149,7 +145,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
{
|
{
|
||||||
Sound.Play(Taunts[world.SharedRandom.Next(Taunts.Length)]);
|
Sound.Play(Taunts[world.SharedRandom.Next(Taunts.Length)]);
|
||||||
}
|
}
|
||||||
if (HasObjective(Objectives.FindEinstein))
|
if (MissionUtils.HasFlag(currentObjectives, Objectives.FindEinstein))
|
||||||
{
|
{
|
||||||
if (AlliesControlLab())
|
if (AlliesControlLab())
|
||||||
{
|
{
|
||||||
@@ -166,7 +162,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
MissionFailed("Einstein was killed.");
|
MissionFailed("Einstein was killed.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (HasObjective(Objectives.WaitForHelicopter))
|
else if (MissionUtils.HasFlag(currentObjectives, Objectives.WaitForHelicopter))
|
||||||
{
|
{
|
||||||
if (world.FrameNumber >= currentAttackWaveFrameNumber + 600)
|
if (world.FrameNumber >= currentAttackWaveFrameNumber + 600)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -87,5 +87,26 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
.Where(a => a.Actor.Owner == player && a.Trait.Info.Type == category)
|
.Where(a => a.Actor.Owner == player && a.Trait.Info.Type == category)
|
||||||
.Select(a => a.Trait);
|
.Select(a => a.Trait);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static T AddFlag<T>(T flags, T flag)
|
||||||
|
{
|
||||||
|
var fs = Convert.ToInt32(flags);
|
||||||
|
var f = Convert.ToInt32(flag);
|
||||||
|
return (T)(object)(fs | f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static T RemoveFlag<T>(T flags, T flag)
|
||||||
|
{
|
||||||
|
var fs = Convert.ToInt32(flags);
|
||||||
|
var f = Convert.ToInt32(flag);
|
||||||
|
return (T)(object)(fs & ~f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool HasFlag<T>(T flags, T flag)
|
||||||
|
{
|
||||||
|
var fs = Convert.ToInt32(flags);
|
||||||
|
var f = Convert.ToInt32(flag);
|
||||||
|
return (fs & f) == f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user