Fix unit selection persisting/control groups working when the unit isn't visible

This commit is contained in:
ScottNZ
2014-02-17 03:39:14 +13:00
parent d51fd0587f
commit 18fe8e93fa

View File

@@ -56,11 +56,11 @@ namespace OpenRA
public void Tick(World world) public void Tick(World world)
{ {
actors.RemoveAll(a => !a.IsInWorld); actors.RemoveAll(a => !a.IsInWorld || world.FogObscures(a));
foreach (var cg in controlGroups.Values) foreach (var cg in controlGroups.Values)
cg.RemoveAll(a => a.Destroyed); // note: NOT `!a.IsInWorld`, since that would remove things // note: NOT `!a.IsInWorld`, since that would remove things that are in transports.
// that are in transports. cg.RemoveAll(a => a.Destroyed);
} }
Cache<int, List<Actor>> controlGroups = new Cache<int, List<Actor>>(_ => new List<Actor>()); Cache<int, List<Actor>> controlGroups = new Cache<int, List<Actor>>(_ => new List<Actor>());
@@ -83,14 +83,15 @@ namespace OpenRA
return; return;
} }
var groupActors = controlGroups[group].Where(a => !a.IsDead() && !world.FogObscures(a));
if (mods.HasModifier(Modifiers.Alt) || MultiTapCount >= 2) if (mods.HasModifier(Modifiers.Alt) || MultiTapCount >= 2)
{ {
worldRenderer.Viewport.Center(controlGroups[group]); worldRenderer.Viewport.Center(groupActors);
return; return;
} }
Combine(world, controlGroups[group], Combine(world, groupActors, mods.HasModifier(Modifiers.Shift), false);
mods.HasModifier(Modifiers.Shift), false);
} }
public int? GetControlGroupForActor(Actor a) public int? GetControlGroupForActor(Actor a)