From bc7a9c14d09f2ff9e25780874b5ad0923ec31271 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Thu, 11 Nov 2010 18:59:10 +1300 Subject: [PATCH] fix helicopters landing in silly places --- OpenRA.Mods.RA/Air/Aircraft.cs | 13 +++++++++++++ OpenRA.Mods.RA/Air/HeliLand.cs | 2 +- mods/cnc/rules/vehicles.yaml | 1 + mods/ra/rules/vehicles.yaml | 1 + 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/OpenRA.Mods.RA/Air/Aircraft.cs b/OpenRA.Mods.RA/Air/Aircraft.cs index e579adf35e..0aa602372d 100755 --- a/OpenRA.Mods.RA/Air/Aircraft.cs +++ b/OpenRA.Mods.RA/Air/Aircraft.cs @@ -25,6 +25,7 @@ namespace OpenRA.Mods.RA.Air public readonly int InitialFacing = 128; public readonly int ROT = 255; public readonly int Speed = 1; + public readonly string[] LandableTerrainTypes = { }; public virtual object Create( ActorInitializer init ) { return new Aircraft( init , this ); } } @@ -102,5 +103,17 @@ namespace OpenRA.Mods.RA.Air var angle = facing * Math.PI / 128.0; return new int2( (int)Math.Truncate( 1024 * Math.Sin( angle ) ), (int)Math.Truncate( 1024 * Math.Cos( angle ) ) ); } + + public bool CanLand(int2 cell) + { + if (!self.World.Map.IsInMap(cell)) + return false; + + if (self.World.WorldActor.Trait().AnyUnitsAt(cell)) + return false; + + var type = self.World.GetTerrainType(cell); + return Info.LandableTerrainTypes.Contains(type); + } } } diff --git a/OpenRA.Mods.RA/Air/HeliLand.cs b/OpenRA.Mods.RA/Air/HeliLand.cs index b74176cf80..b252cad056 100755 --- a/OpenRA.Mods.RA/Air/HeliLand.cs +++ b/OpenRA.Mods.RA/Air/HeliLand.cs @@ -25,7 +25,7 @@ namespace OpenRA.Mods.RA.Air if (aircraft.Altitude == 0) return NextActivity; - if (requireSpace && !aircraft.CanEnterCell(self.Location)) + if (requireSpace && !aircraft.CanLand(self.Location)) return this; --aircraft.Altitude; diff --git a/mods/cnc/rules/vehicles.yaml b/mods/cnc/rules/vehicles.yaml index 761a97475e..638d1d3cf7 100644 --- a/mods/cnc/rules/vehicles.yaml +++ b/mods/cnc/rules/vehicles.yaml @@ -468,6 +468,7 @@ TRAN: ROT: 5 Speed: 15 InitialFacing: 0 + LandableTerrainTypes: Clear,Rough,Road,Ore,Beach Health: HP: 90 Armor: diff --git a/mods/ra/rules/vehicles.yaml b/mods/ra/rules/vehicles.yaml index b538e6f086..5f93bf627d 100644 --- a/mods/ra/rules/vehicles.yaml +++ b/mods/ra/rules/vehicles.yaml @@ -802,6 +802,7 @@ TRAN: InitialFacing: 0 ROT: 5 Speed: 12 + LandableTerrainTypes: Clear,Rough,Road,Ore,Beach RenderUnitRotor: PrimaryOffset: 0,14,0,-8 SecondaryOffset: 0,-14,0,-5