Added a lua function for airstrikes
This commit is contained in:
@@ -215,6 +215,7 @@
|
|||||||
<Compile Include="Widgets\Logic\LobbyMapPreviewLogic.cs" />
|
<Compile Include="Widgets\Logic\LobbyMapPreviewLogic.cs" />
|
||||||
<Compile Include="Widgets\Logic\ControlGroupLogic.cs" />
|
<Compile Include="Widgets\Logic\ControlGroupLogic.cs" />
|
||||||
<Compile Include="Scripting\Global\ReinforcementsGlobal.cs" />
|
<Compile Include="Scripting\Global\ReinforcementsGlobal.cs" />
|
||||||
|
<Compile Include="Scripting\Properties\AirstrikeProperties.cs" />
|
||||||
<Compile Include="Scripting\Properties\ProductionProperties.cs" />
|
<Compile Include="Scripting\Properties\ProductionProperties.cs" />
|
||||||
<Compile Include="Scripting\Properties\MissionObjectiveProperties.cs" />
|
<Compile Include="Scripting\Properties\MissionObjectiveProperties.cs" />
|
||||||
<Compile Include="Scripting\Properties\MobileProperties.cs" />
|
<Compile Include="Scripting\Properties\MobileProperties.cs" />
|
||||||
|
|||||||
36
OpenRA.Mods.RA/Scripting/Properties/AirstrikeProperties.cs
Normal file
36
OpenRA.Mods.RA/Scripting/Properties/AirstrikeProperties.cs
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2015 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Linq;
|
||||||
|
using Eluant;
|
||||||
|
using OpenRA.Mods.RA.Traits;
|
||||||
|
using OpenRA.Scripting;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.RA.Scripting
|
||||||
|
{
|
||||||
|
[ScriptGlobal("Air Support Powers")]
|
||||||
|
public class AirstrikeProperties : ScriptActorProperties, Requires<AirstrikePowerInfo>
|
||||||
|
{
|
||||||
|
readonly AirstrikePower ap;
|
||||||
|
|
||||||
|
public AirstrikeProperties(ScriptContext context, Actor self)
|
||||||
|
: base(context, self)
|
||||||
|
{
|
||||||
|
ap = self.TraitsImplementing<AirstrikePower>().First();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Desc("Activate the actor's Airstrike Power.")]
|
||||||
|
public void SendAirstrike(WPos target, bool randomize = true, int facing = 0)
|
||||||
|
{
|
||||||
|
ap.SendAirstrike(Self, target, randomize, facing);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -52,13 +52,20 @@ namespace OpenRA.Mods.RA.Traits
|
|||||||
{
|
{
|
||||||
base.Activate(self, order, manager);
|
base.Activate(self, order, manager);
|
||||||
|
|
||||||
|
SendAirstrike(self, self.World.Map.CenterOfCell(order.TargetLocation));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendAirstrike(Actor self, WPos target, bool randomize = true, int attackFacing = 0)
|
||||||
|
{
|
||||||
var info = Info as AirstrikePowerInfo;
|
var info = Info as AirstrikePowerInfo;
|
||||||
var attackFacing = Util.QuantizeFacing(self.World.SharedRandom.Next(256), info.QuantizedFacings) * (256 / info.QuantizedFacings);
|
|
||||||
var attackRotation = WRot.FromFacing(attackFacing);
|
if (randomize)
|
||||||
var delta = new WVec(0, -1024, 0).Rotate(attackRotation);
|
attackFacing = Util.QuantizeFacing(self.World.SharedRandom.Next(256), info.QuantizedFacings) * (256 / info.QuantizedFacings);
|
||||||
|
|
||||||
var altitude = self.World.Map.Rules.Actors[info.UnitType].Traits.Get<PlaneInfo>().CruiseAltitude.Range;
|
var altitude = self.World.Map.Rules.Actors[info.UnitType].Traits.Get<PlaneInfo>().CruiseAltitude.Range;
|
||||||
var target = self.World.Map.CenterOfCell(order.TargetLocation) + new WVec(0, 0, altitude);
|
var attackRotation = WRot.FromFacing(attackFacing);
|
||||||
|
var delta = new WVec(0, -1024, 0).Rotate(attackRotation);
|
||||||
|
target = target + new WVec(0, 0, altitude);
|
||||||
var startEdge = target - (self.World.Map.DistanceToEdge(target, -delta) + info.Cordon).Range * delta / 1024;
|
var startEdge = target - (self.World.Map.DistanceToEdge(target, -delta) + info.Cordon).Range * delta / 1024;
|
||||||
var finishEdge = target + (self.World.Map.DistanceToEdge(target, delta) + info.Cordon).Range * delta / 1024;
|
var finishEdge = target + (self.World.Map.DistanceToEdge(target, delta) + info.Cordon).Range * delta / 1024;
|
||||||
|
|
||||||
@@ -75,7 +82,7 @@ namespace OpenRA.Mods.RA.Traits
|
|||||||
{
|
{
|
||||||
camera = w.CreateActor(info.CameraActor, new TypeDictionary
|
camera = w.CreateActor(info.CameraActor, new TypeDictionary
|
||||||
{
|
{
|
||||||
new LocationInit(order.TargetLocation),
|
new LocationInit(self.World.Map.CellContaining(target)),
|
||||||
new OwnerInit(self.Owner),
|
new OwnerInit(self.Owner),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -149,6 +156,7 @@ namespace OpenRA.Mods.RA.Traits
|
|||||||
attack.OnExitedAttackRange += onExitRange;
|
attack.OnExitedAttackRange += onExitRange;
|
||||||
attack.OnRemovedFromWorld += onExitRange;
|
attack.OnRemovedFromWorld += onExitRange;
|
||||||
|
|
||||||
|
a.QueueActivity(new Fly(a, Target.FromPos(target + spawnOffset)));
|
||||||
a.QueueActivity(new Fly(a, Target.FromPos(finishEdge + spawnOffset)));
|
a.QueueActivity(new Fly(a, Target.FromPos(finishEdge + spawnOffset)));
|
||||||
a.QueueActivity(new RemoveSelf());
|
a.QueueActivity(new RemoveSelf());
|
||||||
aircraftInRange.Add(a, false);
|
aircraftInRange.Add(a, false);
|
||||||
@@ -160,8 +168,8 @@ namespace OpenRA.Mods.RA.Traits
|
|||||||
var distance = (target - startEdge).HorizontalLength;
|
var distance = (target - startEdge).HorizontalLength;
|
||||||
|
|
||||||
beacon = new Beacon(
|
beacon = new Beacon(
|
||||||
order.Player,
|
self.Owner,
|
||||||
self.World.Map.CenterOfCell(order.TargetLocation),
|
target,
|
||||||
Info.BeaconPalettePrefix,
|
Info.BeaconPalettePrefix,
|
||||||
Info.BeaconPoster,
|
Info.BeaconPoster,
|
||||||
Info.BeaconPosterPalette,
|
Info.BeaconPosterPalette,
|
||||||
|
|||||||
Reference in New Issue
Block a user