diff --git a/OpenRA.Game/Effects/Explosion.cs b/OpenRA.Game/Effects/Explosion.cs index 7691396bf9..89b516cfd5 100755 --- a/OpenRA.Game/Effects/Explosion.cs +++ b/OpenRA.Game/Effects/Explosion.cs @@ -29,13 +29,13 @@ namespace OpenRA.Effects Animation anim; int2 pos; - public Explosion( World world, int2 pixelPos, int style, bool isWater) + public Explosion(World world, int2 pixelPos, int style, bool isWater) { this.pos = pixelPos; var variantSuffix = isWater ? "w" : ""; anim = new Animation("explosion"); - anim.PlayThen(style.ToString() + variantSuffix, - () => world.AddFrameEndTask(w => w.Remove(this))); + anim.PlayThen(style.ToString() + variantSuffix, + () => world.AddFrameEndTask(w => w.Remove(this))); } public void Tick( World world ) { anim.Tick(); } diff --git a/OpenRA.Game/Traits/SupportPowers/NukePower.cs b/OpenRA.Game/Traits/SupportPowers/NukePower.cs index ba9d3079de..5e7c30599a 100644 --- a/OpenRA.Game/Traits/SupportPowers/NukePower.cs +++ b/OpenRA.Game/Traits/SupportPowers/NukePower.cs @@ -38,7 +38,7 @@ namespace OpenRA.Traits protected override void OnActivate() { Game.controller.orderGenerator = new SelectTarget(); - Sound.Play(Info.SelectTargetSound); + Sound.PlayToPlayer(Owner, Info.SelectTargetSound); } public void ResolveOrder(Actor self, Order order) @@ -82,8 +82,6 @@ namespace OpenRA.Traits { if (mi.Button == MouseButton.Left) yield return new Order("NuclearMissile", world.LocalPlayer.PlayerActor, xy); - - yield break; } public void Tick(World world) diff --git a/OpenRA.Mods.Cnc/Effects/IonCannon.cs b/OpenRA.Mods.Cnc/Effects/IonCannon.cs new file mode 100644 index 0000000000..5988deb1a6 --- /dev/null +++ b/OpenRA.Mods.Cnc/Effects/IonCannon.cs @@ -0,0 +1,54 @@ +#region Copyright & License Information +/* + * Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford. + * This file is part of OpenRA. + * + * OpenRA is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenRA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenRA. If not, see . + */ +#endregion + +using System; +using System.Collections.Generic; +using OpenRA.Effects; +using OpenRA.Graphics; +using OpenRA.Traits; + +namespace OpenRA.Mods.Cnc.Effects +{ + class IonCannon : IEffect + { + int2 Target; + Animation anim; + + public IonCannon(World world, int2 location) + { + Target = location; + anim = new Animation("ionsfx"); + anim.PlayThen("idle", + () => world.AddFrameEndTask(w => w.Remove(this))); + } + + public void Tick(World world) + { + throw new NotImplementedException(); + } + + public IEnumerable Render() + { + yield return new Renderable(anim.Image, + Target - new float2(.5f * anim.Image.size.X, anim.Image.size.Y - Game.CellSize), + "effect"); + } + } +} diff --git a/OpenRA.Mods.Cnc/IonCannonPower.cs b/OpenRA.Mods.Cnc/IonCannonPower.cs new file mode 100644 index 0000000000..c952678d2d --- /dev/null +++ b/OpenRA.Mods.Cnc/IonCannonPower.cs @@ -0,0 +1,94 @@ +#region Copyright & License Information +/* + * Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford. + * This file is part of OpenRA. + * + * OpenRA is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenRA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenRA. If not, see . + */ +#endregion + +using System.Collections.Generic; +using System.Linq; +using OpenRA.Mods.Cnc.Effects; +using OpenRA.Traits; + +namespace OpenRA.Mods.Cnc +{ + class IonCannonPowerInfo : SupportPowerInfo + { + public override object Create(Actor self) { return new IonCannonPower(self, this); } + } + + class IonCannonPower : SupportPower, IResolveOrder + { + public IonCannonPower(Actor self, IonCannonPowerInfo info) : base(self, info) { } + + class SelectTarget : IOrderGenerator + { + public IEnumerable Order(World world, int2 xy, MouseInput mi) + { + if (mi.Button == MouseButton.Right) + Game.controller.CancelInputMode(); + return OrderInner(world, xy, mi); + } + + IEnumerable OrderInner(World world, int2 xy, MouseInput mi) + { + if (mi.Button == MouseButton.Left) + yield return new Order("IonCannon", world.LocalPlayer.PlayerActor, xy); + } + + public void Tick(World world) + { + var hasStructure = world.Queries.OwnedBy[world.LocalPlayer] + .WithTrait() + .Any(); + + if (!hasStructure) + Game.controller.CancelInputMode(); + } + + public void Render(World world) { } + + public string GetCursor(World world, int2 xy, MouseInput mi) { return "ability"; } + } + + public void ResolveOrder(Actor self, Order order) + { + if (order.OrderString == "IonCannon") + { + Owner.World.AddFrameEndTask(w => + { + Sound.Play(Info.LaunchSound); + w.Add(new IonCannon(w, order.TargetLocation)); + }); + + Game.controller.CancelInputMode(); + FinishActivate(); + } + } + + protected override void OnBeginCharging() { Sound.PlayToPlayer(Owner, Info.BeginChargeSound); } + protected override void OnFinishCharging() { Sound.PlayToPlayer(Owner, Info.EndChargeSound); } + + protected override void OnActivate() + { + Game.controller.orderGenerator = new SelectTarget(); + Sound.PlayToPlayer(Owner, Info.SelectTargetSound); + } + } + + class IonControlInfo : StatelessTraitInfo { } + class IonControl { } +} diff --git a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj index 892e9b38a5..359a56950f 100644 --- a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj +++ b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj @@ -1,4 +1,4 @@ - + Debug @@ -45,6 +45,8 @@ + +