Rework the addition and removal of building influence

This commit is contained in:
abcdefg30
2017-08-08 15:32:08 +02:00
committed by Matthias Mailänder
parent 93f385e9fc
commit 5cfb5aaf2d
2 changed files with 23 additions and 22 deletions

View File

@@ -9,6 +9,7 @@
*/
#endregion
using System.Collections.Generic;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits
@@ -29,28 +30,20 @@ namespace OpenRA.Mods.Common.Traits
map = world.Map;
influence = new CellLayer<Actor>(map);
}
world.ActorAdded += a =>
{
var b = a.Info.TraitInfoOrDefault<BuildingInfo>();
if (b == null)
return;
internal void AddInfluence(Actor a, IEnumerable<CPos> tiles)
{
foreach (var u in tiles)
if (influence.Contains(u) && influence[u] == null)
influence[u] = a;
}
foreach (var u in b.Tiles(a.Location))
if (influence.Contains(u) && influence[u] == null)
influence[u] = a;
};
world.ActorRemoved += a =>
{
var b = a.Info.TraitInfoOrDefault<BuildingInfo>();
if (b == null)
return;
foreach (var u in b.Tiles(a.Location))
if (influence.Contains(u) && influence[u] == a)
influence[u] = null;
};
internal void RemoveInfluence(Actor a, IEnumerable<CPos> tiles)
{
foreach (var u in tiles)
if (influence.Contains(u) && influence[u] == a)
influence[u] = null;
}
public Actor GetBuildingAt(CPos cell)