Files
OpenRA/OpenRa.Game/BuildingInfluenceMap.cs
2009-10-20 23:55:57 +13:00

43 lines
1.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenRa.Game.GameRules;
namespace OpenRa.Game
{
class BuildingInfluenceMap
{
Actor[,] influence = new Actor[128, 128];
public BuildingInfluenceMap(World world, Player player)
{
world.ActorAdded +=
a => { if (a.traits.Contains<Traits.Building>() && a.Owner == player) AddInfluence(a); };
world.ActorRemoved +=
a => { if (a.traits.Contains<Traits.Building>() && a.Owner == player) RemoveInfluence(a); };
}
void AddInfluence(Actor a)
{
foreach (var t in Footprint.UnpathableTiles(a.unitInfo, a.Location))
if (IsValid(t))
influence[t.X, t.Y] = a;
}
void RemoveInfluence(Actor a)
{
foreach (var t in Footprint.UnpathableTiles(a.unitInfo, a.Location))
if (IsValid(t))
influence[t.X, t.Y] = null;
}
bool IsValid(int2 t)
{
return !(t.X < 0 || t.Y < 0 || t.X >= 128 || t.Y >= 128);
}
public Actor this[int2 cell] { get { return IsValid(cell) ? influence[cell.X, cell.Y] : null; } }
}
}