Reenable path cache to catch the most stupid path fails (doesn't help the most common fails)

This commit is contained in:
Paul Chote
2010-06-30 20:25:11 +12:00
parent 202d1a38d5
commit 4c3930043e

View File

@@ -43,6 +43,7 @@ namespace OpenRA
public int2 to;
public List<int2> result;
public int tick;
public Actor actor;
}
List<CachedPath> CachedPaths = new List<CachedPath>();
@@ -50,16 +51,14 @@ namespace OpenRA
public List<int2> FindUnitPath(int2 from, int2 target, Actor self)
{
// Todo: Reenable cache on something that isn't umt
//var umt = self.traits.Get<Mobile>().GetMovementType();
using (new PerfSample("find_unit_path"))
{
//var cached = CachedPaths.FirstOrDefault(p => p.from == from && p.to == target && p.umt == umt);
//if (cached != null)
//{
// cached.tick = Game.LocalTick;
// return new List<int2>(cached.result);
//}
var cached = CachedPaths.FirstOrDefault(p => p.from == from && p.to == target && p.actor == self);
if (cached != null)
{
cached.tick = Game.LocalTick;
return new List<int2>(cached.result);
}
var pb = FindBidiPath(
PathSearch.FromPoint(self, target, from, true)
@@ -70,8 +69,8 @@ namespace OpenRA
CheckSanePath2(pb, from, target);
//CachedPaths.RemoveAll(p => Game.LocalTick - p.tick > MaxPathAge);
//CachedPaths.Add(new CachedPath { from = from, to = target, umt = umt, result = pb, tick = Game.LocalTick });
CachedPaths.RemoveAll(p => Game.LocalTick - p.tick > MaxPathAge);
CachedPaths.Add(new CachedPath { from = from, to = target, actor = self, result = pb, tick = Game.LocalTick });
return new List<int2>(pb);
}
}