bdebug=true will show appropriate influence for current building

This commit is contained in:
Chris Forbes
2009-11-04 18:18:17 +13:00
parent 1b131465fd
commit a9126fc9ce
3 changed files with 25 additions and 7 deletions

View File

@@ -50,6 +50,7 @@ namespace OpenRa.Game
SheetBuilder.Initialize(renderer); SheetBuilder.Initialize(renderer);
UiOverlay.ShowUnitDebug = settings.GetValue("udebug", false); UiOverlay.ShowUnitDebug = settings.GetValue("udebug", false);
UiOverlay.ShowBuildDebug = settings.GetValue("bdebug", false);
WorldRenderer.ShowUnitPaths = settings.GetValue("pathdebug", false); WorldRenderer.ShowUnitPaths = settings.GetValue("pathdebug", false);
Game.Replay = settings.GetValue("replay", ""); Game.Replay = settings.GetValue("replay", "");

View File

@@ -41,11 +41,7 @@ namespace OpenRa.Game.Traits.Activities
void PlanReturnToBase(Actor self, Mobile mobile) void PlanReturnToBase(Actor self, Mobile mobile)
{ {
/* find a proc */ /* find a proc */
var proc = Game.world.Actors.Where( var proc = ChooseReturnLocation(self);
a => a.Owner == self.Owner &&
a.traits.Contains<AcceptsOre>())
.FirstOrDefault(); /* todo: *closest* proc, maybe? */
if (proc == null) if (proc == null)
{ {
Cancel(self, mobile); /* is this a sane way to cancel? */ Cancel(self, mobile); /* is this a sane way to cancel? */
@@ -59,6 +55,18 @@ namespace OpenRa.Game.Traits.Activities
mobile.InternalSetActivity(NextActivity); mobile.InternalSetActivity(NextActivity);
} }
static Actor ChooseReturnLocation(Actor self)
{
/* todo: compute paths to possible procs, taking into account enemy presence */
/* currently, we're good at choosing close, inaccessible procs */
return Game.world.Actors.Where(
a => a.Owner == self.Owner &&
a.traits.Contains<AcceptsOre>())
.OrderBy(p => (p.Location - self.Location).LengthSquared)
.FirstOrDefault();
}
void PlanMoreHarvesting(Actor self, Mobile mobile) void PlanMoreHarvesting(Actor self, Mobile mobile)
{ {
/* find a nearby patch */ /* find a nearby patch */

View File

@@ -12,6 +12,7 @@ namespace OpenRa.Game
Sprite buildOk, buildBlocked, unitDebug; Sprite buildOk, buildBlocked, unitDebug;
public static bool ShowUnitDebug = false; public static bool ShowUnitDebug = false;
public static bool ShowBuildDebug = false;
public UiOverlay(SpriteRenderer spriteRenderer) public UiOverlay(SpriteRenderer spriteRenderer)
{ {
@@ -49,6 +50,14 @@ namespace OpenRa.Game
var bi = (UnitInfo.BuildingInfo)Rules.UnitInfo[placeBuilding.Name]; var bi = (UnitInfo.BuildingInfo)Rules.UnitInfo[placeBuilding.Name];
var maxDistance = bi.Adjacent + 2; /* real-ra is weird. this is 1 GAP. */ var maxDistance = bi.Adjacent + 2; /* real-ra is weird. this is 1 GAP. */
if (ShowBuildDebug)
for (var j = 0; j < 128; j++)
for (var i = 0; i < 128; i++)
if (Game.GetDistanceToBase(new int2(i, j), Game.LocalPlayer) < maxDistance)
if (Game.IsCellBuildable(new int2(i, j), bi.WaterBound ? UnitMovementType.Float : UnitMovementType.Wheel))
spriteRenderer.DrawSprite(unitDebug, Game.CellSize * new float2(i, j), 0);
var tooFarFromBase = !Footprint.Tiles(bi, position).Any( var tooFarFromBase = !Footprint.Tiles(bi, position).Any(
t => Game.GetDistanceToBase(t, Game.LocalPlayer) < maxDistance); t => Game.GetDistanceToBase(t, Game.LocalPlayer) < maxDistance);