fix infantry entering buildings

This commit is contained in:
Bob
2010-11-06 22:27:28 +13:00
parent 5e5456191c
commit 8a96c5f7b5
8 changed files with 6 additions and 12 deletions

View File

@@ -37,6 +37,7 @@ namespace OpenRA.Traits
map = world.Map;
influence = new InfluenceNode[world.Map.MapSize.X, world.Map.MapSize.Y];
world.ActorAdded += a => Add( a, a.TraitOrDefault<IOccupySpace>() );
world.ActorRemoved += a => Remove( a, a.TraitOrDefault<IOccupySpace>() );
}
@@ -55,8 +56,9 @@ namespace OpenRA.Traits
public void Add( Actor self, IOccupySpace unit )
{
foreach( var c in unit.OccupiedCells() )
influence[ c.X, c.Y ] = new InfluenceNode { next = influence[ c.X, c.Y ], actor = self };
if (unit != null)
foreach( var c in unit.OccupiedCells() )
influence[ c.X, c.Y ] = new InfluenceNode { next = influence[ c.X, c.Y ], actor = self };
}
public void Remove( Actor self, IOccupySpace unit )

View File

@@ -41,7 +41,7 @@ namespace OpenRA.Mods.RA.Activities
self.Destroy();
});
return NextActivity;
return this;
}
}
}

View File

@@ -105,7 +105,6 @@ namespace OpenRA.Mods.RA.Buildings
this.PlayerPower = init.self.Owner.PlayerActor.Trait<PowerManager>();
var uim = init.world.WorldActor.Trait<UnitInfluence>();
uim.Add( init.self, this );
}
public int GetPowerUsage()

View File

@@ -52,10 +52,7 @@ namespace OpenRA.Mods.RA
this.Location = init.Get<LocationInit, int2>();
PxPosition = Util.CenterOfCell(Location);
}
this.Info = info;
self.World.WorldActor.Trait<UnitInfluence>().Add(self, this);
}
public void OnCrush(Actor crusher)

View File

@@ -34,7 +34,6 @@ namespace OpenRA.Mods.RA
this.self = init.self;
this.location = init.Get<LocationInit,int2>();
this.Facing = init.Contains<FacingInit>() ? init.Get<FacingInit,int>() : 128;
self.World.WorldActor.Trait<UnitInfluence>().Add(self, this);
}
public int2 TopLeft { get { return location; } }

View File

@@ -37,7 +37,6 @@ namespace OpenRA.Mods.RA
this.self = init.self;
this.info = info;
this.location = init.Get<LocationInit,int2>();
self.World.WorldActor.Trait<UnitInfluence>().Add(self, this);
}
public void OnCrush(Actor crusher)

View File

@@ -118,7 +118,6 @@ namespace OpenRA.Mods.RA.Move
{
this.__fromCell = this.__toCell = init.Get<LocationInit,int2>();
this.PxPosition = Util.CenterOfCell( fromCell );
AddInfluence();
}
this.Facing = init.Contains<FacingInit>() ? init.Get<FacingInit,int>() : info.InitialFacing;

View File

@@ -38,7 +38,7 @@ namespace OpenRA.Mods.RA.Move
this.nearEnough = 0;
}
public Move( int2 destination, int nearEnough )
public Move( int2 destination, int nearEnough )
{
this.getPath = (self,mobile) => self.World.WorldActor.Trait<PathFinder>().FindUnitPath( mobile.toCell, destination, self );
this.destination = destination;
@@ -50,7 +50,6 @@ namespace OpenRA.Mods.RA.Move
this.getPath = (self,mobile) =>
self.World.WorldActor.Trait<PathFinder>().FindPath(
PathSearch.FromPoint( self.World, mobile.Info, mobile.toCell, destination, false )
.WithCustomBlocker( self.World.WorldActor.Trait<PathFinder>().AvoidUnitsNear( mobile.toCell, 4, self ))
.WithIgnoredBuilding( ignoreBuilding ));
this.destination = destination;