Creating PlayerMask

This commit is contained in:
teinarss
2019-07-07 19:45:48 +02:00
committed by reaperrr
parent 2ddf9fa826
commit 3a17b26405
3 changed files with 237 additions and 0 deletions

View File

@@ -43,6 +43,7 @@ namespace OpenRA
public readonly MersenneTwister SharedRandom;
public readonly MersenneTwister LocalRandom;
public readonly IModelCache ModelCache;
public LongBitSet<PlayerBitMask> AllPlayerMask = default(LongBitSet<PlayerBitMask>);
public Player[] Players = new Player[0];
@@ -196,15 +197,27 @@ namespace OpenRA
ScreenMap = WorldActor.Trait<ScreenMap>();
Selection = WorldActor.Trait<ISelection>();
// Reset mask
LongBitSet<PlayerBitMask>.Reset();
// Add players
foreach (var cmp in WorldActor.TraitsImplementing<ICreatePlayers>())
cmp.CreatePlayers(this);
// Set defaults for any unset stances
foreach (var p in Players)
{
if (!p.Spectating)
AllPlayerMask = AllPlayerMask.Union(p.PlayerMask);
foreach (var q in Players)
{
SetUpPlayerMask(p, q);
if (!p.Stances.ContainsKey(q))
p.Stances[q] = Stance.Neutral;
}
}
Game.Sound.SoundVolumeModifier = 1.0f;
@@ -220,6 +233,25 @@ namespace OpenRA
RulesContainTemporaryBlocker = map.Rules.Actors.Any(a => a.Value.HasTraitInfo<ITemporaryBlockerInfo>());
}
void SetUpPlayerMask(Player p, Player q)
{
if (q.Spectating)
return;
var bitSet = q.PlayerMask;
switch (p.Stances[q])
{
case Stance.Enemy:
case Stance.Neutral:
p.EnemyMask = p.EnemyMask.Union(bitSet);
break;
case Stance.Ally:
p.AllyMask = p.AllyMask.Union(bitSet);
break;
}
}
public void AddToMaps(Actor self, IOccupySpace ios)
{
ActorMap.AddInfluence(self, ios);