use spatial index for whatever we can

This commit is contained in:
Chris Forbes
2010-03-22 19:01:53 +13:00
parent e2ba79a539
commit 0d54d00375
3 changed files with 8 additions and 14 deletions

View File

@@ -53,14 +53,13 @@ namespace OpenRA.Orders
string ChooseCursor(World world, MouseInput mi) string ChooseCursor(World world, MouseInput mi)
{ {
var p = Game.controller.MousePosition;
var c = Order(world, p.ToInt2(), mi)
.Select(o => CursorForOrderString(o.OrderString, o.Subject, o.TargetLocation))
.FirstOrDefault(a => a != null);
using (new PerfSample("cursor")) using (new PerfSample("cursor"))
{ {
var p = Game.controller.MousePosition;
var c = Order(world, p.ToInt2(), mi)
.Select(o => CursorForOrderString(o.OrderString, o.Subject, o.TargetLocation))
.FirstOrDefault(a => a != null);
return c ?? return c ??
(world.SelectActorsInBox(Game.CellSize * p, (world.SelectActorsInBox(Game.CellSize * p,
Game.CellSize * p).Any() Game.CellSize * p).Any()

View File

@@ -82,13 +82,7 @@ namespace OpenRA
public static IEnumerable<Actor> FindUnits(this World world, float2 a, float2 b) public static IEnumerable<Actor> FindUnits(this World world, float2 a, float2 b)
{ {
var min = float2.Min(a, b); return world.WorldActor.traits.Get<SpatialBins>().ActorsInBox(a.ToInt2(), b.ToInt2());
var max = float2.Max(a, b);
var rect = new RectangleF(min.X, min.Y, max.X - min.X, max.Y - min.Y);
return world.Actors
.Where(x => x.GetBounds(true).IntersectsWith(rect));
} }
public static IEnumerable<Actor> FindUnitsInCircle(this World world, float2 a, float r) public static IEnumerable<Actor> FindUnitsInCircle(this World world, float2 a, float r)

View File

@@ -221,4 +221,5 @@ World:
SilosNeeded: silos1.aud SilosNeeded: silos1.aud
UnitLost: unitlost.aud UnitLost: unitlost.aud
NavalUnitLost: unitlost.aud NavalUnitLost: unitlost.aud
PrimaryBuildingSelected: pribldg1.aud PrimaryBuildingSelected: pribldg1.aud
SpatialBins: