From 8a96c5f7b59d06d9f2eeba70606977f31b1a405e Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 6 Nov 2010 22:27:28 +1300 Subject: [PATCH] fix infantry entering buildings --- OpenRA.Game/Traits/World/UnitInfluence.cs | 6 ++++-- OpenRA.Mods.RA/Activities/CaptureBuilding.cs | 2 +- OpenRA.Mods.RA/Buildings/Building.cs | 1 - OpenRA.Mods.RA/Crate.cs | 3 --- OpenRA.Mods.RA/Husk.cs | 1 - OpenRA.Mods.RA/Mine.cs | 1 - OpenRA.Mods.RA/Move/Mobile.cs | 1 - OpenRA.Mods.RA/Move/Move.cs | 3 +-- 8 files changed, 6 insertions(+), 12 deletions(-) diff --git a/OpenRA.Game/Traits/World/UnitInfluence.cs b/OpenRA.Game/Traits/World/UnitInfluence.cs index 5ceb332c49..9617c72901 100644 --- a/OpenRA.Game/Traits/World/UnitInfluence.cs +++ b/OpenRA.Game/Traits/World/UnitInfluence.cs @@ -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() ); world.ActorRemoved += a => Remove( a, a.TraitOrDefault() ); } @@ -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 ) diff --git a/OpenRA.Mods.RA/Activities/CaptureBuilding.cs b/OpenRA.Mods.RA/Activities/CaptureBuilding.cs index 0b94b0f8f3..893d315cc2 100644 --- a/OpenRA.Mods.RA/Activities/CaptureBuilding.cs +++ b/OpenRA.Mods.RA/Activities/CaptureBuilding.cs @@ -41,7 +41,7 @@ namespace OpenRA.Mods.RA.Activities self.Destroy(); }); - return NextActivity; + return this; } } } diff --git a/OpenRA.Mods.RA/Buildings/Building.cs b/OpenRA.Mods.RA/Buildings/Building.cs index d774fd2002..5d94465b66 100755 --- a/OpenRA.Mods.RA/Buildings/Building.cs +++ b/OpenRA.Mods.RA/Buildings/Building.cs @@ -105,7 +105,6 @@ namespace OpenRA.Mods.RA.Buildings this.PlayerPower = init.self.Owner.PlayerActor.Trait(); var uim = init.world.WorldActor.Trait(); - uim.Add( init.self, this ); } public int GetPowerUsage() diff --git a/OpenRA.Mods.RA/Crate.cs b/OpenRA.Mods.RA/Crate.cs index 9f5515e3c8..1dd3f31e51 100644 --- a/OpenRA.Mods.RA/Crate.cs +++ b/OpenRA.Mods.RA/Crate.cs @@ -52,10 +52,7 @@ namespace OpenRA.Mods.RA this.Location = init.Get(); PxPosition = Util.CenterOfCell(Location); } - this.Info = info; - - self.World.WorldActor.Trait().Add(self, this); } public void OnCrush(Actor crusher) diff --git a/OpenRA.Mods.RA/Husk.cs b/OpenRA.Mods.RA/Husk.cs index 60e608de35..57e952506d 100644 --- a/OpenRA.Mods.RA/Husk.cs +++ b/OpenRA.Mods.RA/Husk.cs @@ -34,7 +34,6 @@ namespace OpenRA.Mods.RA this.self = init.self; this.location = init.Get(); this.Facing = init.Contains() ? init.Get() : 128; - self.World.WorldActor.Trait().Add(self, this); } public int2 TopLeft { get { return location; } } diff --git a/OpenRA.Mods.RA/Mine.cs b/OpenRA.Mods.RA/Mine.cs index 511c381f45..f43260da9e 100644 --- a/OpenRA.Mods.RA/Mine.cs +++ b/OpenRA.Mods.RA/Mine.cs @@ -37,7 +37,6 @@ namespace OpenRA.Mods.RA this.self = init.self; this.info = info; this.location = init.Get(); - self.World.WorldActor.Trait().Add(self, this); } public void OnCrush(Actor crusher) diff --git a/OpenRA.Mods.RA/Move/Mobile.cs b/OpenRA.Mods.RA/Move/Mobile.cs index acb85582aa..75b2fc5469 100755 --- a/OpenRA.Mods.RA/Move/Mobile.cs +++ b/OpenRA.Mods.RA/Move/Mobile.cs @@ -118,7 +118,6 @@ namespace OpenRA.Mods.RA.Move { this.__fromCell = this.__toCell = init.Get(); this.PxPosition = Util.CenterOfCell( fromCell ); - AddInfluence(); } this.Facing = init.Contains() ? init.Get() : info.InitialFacing; diff --git a/OpenRA.Mods.RA/Move/Move.cs b/OpenRA.Mods.RA/Move/Move.cs index 753b472bbc..4d99badb1e 100755 --- a/OpenRA.Mods.RA/Move/Move.cs +++ b/OpenRA.Mods.RA/Move/Move.cs @@ -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().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().FindPath( PathSearch.FromPoint( self.World, mobile.Info, mobile.toCell, destination, false ) - .WithCustomBlocker( self.World.WorldActor.Trait().AvoidUnitsNear( mobile.toCell, 4, self )) .WithIgnoredBuilding( ignoreBuilding )); this.destination = destination;