Add missile jamming to MRJ

This commit is contained in:
Scott_NZ
2013-04-20 00:43:51 +12:00
parent 95b5e1856e
commit 88b59d5033
4 changed files with 68 additions and 13 deletions

View File

@@ -41,8 +41,9 @@ namespace OpenRA.Mods.RA.Effects
public readonly Color ContrailColor = Color.White;
public readonly bool ContrailUsePlayerColor = false;
public readonly int ContrailDelay = 1;
public readonly bool Jammable = true;
public IEffect Create(ProjectileArgs args) { return new Missile( this, args ); }
public IEffect Create(ProjectileArgs args) { return new Missile(this, args); }
}
class Missile : IEffect
@@ -90,27 +91,44 @@ namespace OpenRA.Mods.RA.Effects
const int MissileCloseEnough = 7;
int ticksToNextSmoke;
public void Tick( World world )
public void Tick(World world)
{
t += 40;
// In pixels
var dist = Args.target.CenterLocation + offset - PxPosition;
var targetAltitude = 0;
var targetAltitude = 0;
if (Args.target.IsValid && Args.target.IsActor && Args.target.Actor.HasTrait<IMove>())
targetAltitude = Args.target.Actor.Trait<IMove>().Altitude;
targetAltitude = Args.target.Actor.Trait<IMove>().Altitude;
Altitude += Math.Sign(targetAltitude - Altitude);
var jammed = Info.Jammable && world.ActorsWithTrait<JamsMissiles>().Any(tp =>
(tp.Actor.CenterLocation - PxPosition).ToCVec().Length <= tp.Trait.Range
if (Args.target.IsValid)
&& (tp.Actor.Owner.Stances[Args.firedBy.Owner] != Stance.Ally
|| (tp.Actor.Owner.Stances[Args.firedBy.Owner] == Stance.Ally && tp.Trait.AlliedMissiles))
&& world.SharedRandom.Next(100 / tp.Trait.Chance) == 0);
if (!jammed)
{
Altitude += Math.Sign(targetAltitude - Altitude);
if (Args.target.IsValid)
Facing = Traits.Util.TickFacing(Facing,
Traits.Util.GetFacing(dist, Facing),
Info.ROT);
}
else
{
Altitude += world.SharedRandom.Next(-1, 2);
Facing = Traits.Util.TickFacing(Facing,
Traits.Util.GetFacing(dist, Facing),
Facing + world.SharedRandom.Next(-20, 21),
Info.ROT);
}
anim.Tick();
if (dist.LengthSquared < MissileCloseEnough * MissileCloseEnough && Args.target.IsValid )
if (dist.LengthSquared < MissileCloseEnough * MissileCloseEnough && Args.target.IsValid)
Explode(world);
// TODO: Replace this with a lookup table

View File

@@ -0,0 +1,32 @@
#region Copyright & License Information
/*
* Copyright 2007-2013 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 OpenRA;
using OpenRA.Traits;
class JamsMissilesInfo : ITraitInfo
{
public readonly int Range = 0;
public readonly bool AlliedMissiles = true;
public readonly int Chance = 100;
public object Create(ActorInitializer init) { return new JamsMissiles(this); }
}
class JamsMissiles
{
readonly JamsMissilesInfo info;
public int Range { get { return info.Range; } }
public bool AlliedMissiles { get { return info.AlliedMissiles; } }
public int Chance { get { return info.Chance; } }
public JamsMissiles(JamsMissilesInfo info) { this.info = info; }
}

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -233,6 +233,7 @@
<Compile Include="InfiltrateForSupportPower.cs" />
<Compile Include="Invulnerable.cs" />
<Compile Include="IronCurtainable.cs" />
<Compile Include="JamsMissiles.cs" />
<Compile Include="LeavesHusk.cs" />
<Compile Include="LightPaletteRotator.cs" />
<Compile Include="LimitedAmmo.cs" />

View File

@@ -490,7 +490,7 @@ MGG:
Inherits: ^Vehicle
Buildable:
Queue: Vehicle
BuildPaletteOrder: 150
BuildPaletteOrder: 160
Prerequisites: atek
Owner: allies
Hotkey: y
@@ -537,11 +537,13 @@ MRJ:
Cost: 1000
Tooltip:
Name: Mobile Radar Jammer
Description: Jams nearby enemy radar domes.
Description: Jams enemy radar and deflects missiles.\n Unarmed
Buildable:
Queue: Vehicle
BuildPaletteOrder: 1000
Owner: None
BuildPaletteOrder: 150
Prerequisites: atek
Owner: allies
Hotkey: m
Health:
HP: 200
Armor:
@@ -560,6 +562,8 @@ MRJ:
EmptyWeapon: UnitExplodeSmall
JamsRadar:
Range: 15
JamsMissiles:
Range: 3
1TNK.Husk:
Inherits: ^Husk