From 2319709749705260284ff0e7522e92cde89da246 Mon Sep 17 00:00:00 2001 From: reaperrr Date: Thu, 6 Mar 2014 20:26:48 +0100 Subject: [PATCH] Renamed AttackTesla into AttackCharge and improved it. Delay for initial charge is no longer hard-coded and can be customized now. Same for delay between each charge. Changed default MaxCharges to 1. Added descriptions (except for MaxCharges since it's self-explanatory). --- CHANGELOG | 1 + OpenRA.Mods.RA/Attack/AttackCharge.cs | 120 ++++++++++++++++++++++++++ OpenRA.Mods.RA/Attack/AttackTesla.cs | 101 ---------------------- OpenRA.Mods.RA/OpenRA.Mods.RA.csproj | 2 +- 4 files changed, 122 insertions(+), 102 deletions(-) create mode 100644 OpenRA.Mods.RA/Attack/AttackCharge.cs delete mode 100644 OpenRA.Mods.RA/Attack/AttackTesla.cs diff --git a/CHANGELOG b/CHANGELOG index 614f2e44b7..30ea69af2f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -90,6 +90,7 @@ NEW: Fixed performance issues with units pathing to naval transports. Fixed unit moving to transports that have moved. Updated shroud-based traits to use world units. + Renamed AttackTesla into AttackCharge and un-hardcoded initial charge delay and delay for additional charges. Server: Message of the day is now shared between all mods and a default motd.txt gets created in the user directory. Asset Browser: diff --git a/OpenRA.Mods.RA/Attack/AttackCharge.cs b/OpenRA.Mods.RA/Attack/AttackCharge.cs new file mode 100644 index 0000000000..05fbc3828e --- /dev/null +++ b/OpenRA.Mods.RA/Attack/AttackCharge.cs @@ -0,0 +1,120 @@ +#region Copyright & License Information +/* + * Copyright 2007-2014 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.Mods.RA.Activities; +using OpenRA.FileFormats; +using OpenRA.Mods.RA.Render; +using OpenRA.Traits; + +namespace OpenRA.Mods.RA +{ + class AttackChargeInfo : AttackOmniInfo + { + public readonly int MaxCharges = 1; + [Desc("Reload time (for all charges).")] + public readonly int ReloadTime = 120; + [Desc("Delay for first charge. Needs to match FireDelay for Obelisk.")] + public readonly int InitialChargeDelay = 22; + [Desc("Delay for additional charges if MaxCharge is larger than 1.")] + public readonly int ChargeDelay = 3; + public override object Create(ActorInitializer init) { return new AttackCharge(init.self); } + } + + class AttackCharge : AttackOmni, ITick, INotifyAttack, ISync + { + [Sync] int charges; + [Sync] int timeToRecharge; + [Sync] int initDelay; + [Sync] int chargeDelay; + + public AttackCharge(Actor self) + : base(self) + { + charges = self.Info.Traits.Get().MaxCharges; + } + + public override void Tick( Actor self ) + { + if( --timeToRecharge <= 0 ) + charges = self.Info.Traits.Get().MaxCharges; + + base.Tick( self ); + } + + public void Attacking(Actor self, Target target, Armament a, Barrel barrel) + { + --charges; + timeToRecharge = self.Info.Traits.Get().ReloadTime; + } + + public override Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove) + { + return new ChargeAttack(newTarget); + } + + + public override void ResolveOrder(Actor self, Order order) + { + base.ResolveOrder(self, order); + + if (order.OrderString == "Stop") + self.CancelActivity(); + } + + class ChargeAttack : Activity + { + readonly Target target; + public ChargeAttack(Target target) + { + this.target = target; + } + + public override Activity Tick(Actor self) + { + if (IsCanceled || !target.IsValidFor(self)) + return NextActivity; + + var initDelay = self.Info.Traits.Get().InitialChargeDelay; + + var attack = self.Trait(); + if(attack.charges == 0 || !attack.CanAttack(self, target)) + return this; + + self.Trait().PlayCharge(self); + return Util.SequenceActivities(new Wait(initDelay), new ChargeFire(target), this); + } + } + + class ChargeFire : Activity + { + readonly Target target; + public ChargeFire(Target target) + { + this.target = target; + } + + public override Activity Tick(Actor self) + { + if (IsCanceled || !target.IsValidFor(self)) + return NextActivity; + + var chargeDelay = self.Info.Traits.Get().ChargeDelay; + + var attack = self.Trait(); + if(attack.charges == 0) + return NextActivity; + + attack.DoAttack(self, target); + + return Util.SequenceActivities(new Wait(chargeDelay), this); + } + } + } +} diff --git a/OpenRA.Mods.RA/Attack/AttackTesla.cs b/OpenRA.Mods.RA/Attack/AttackTesla.cs deleted file mode 100644 index 56f2091ec3..0000000000 --- a/OpenRA.Mods.RA/Attack/AttackTesla.cs +++ /dev/null @@ -1,101 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2011 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.Mods.RA.Activities; -using OpenRA.Mods.RA.Render; -using OpenRA.Traits; - -namespace OpenRA.Mods.RA -{ - class AttackTeslaInfo : AttackOmniInfo - { - public readonly int MaxCharges = 3; - public readonly int ReloadTime = 120; - public override object Create(ActorInitializer init) { return new AttackTesla(init.self); } - } - - class AttackTesla : AttackOmni, ITick, INotifyAttack, ISync - { - [Sync] int charges; - [Sync] int timeToRecharge; - - public AttackTesla( Actor self ) - : base( self ) - { - charges = self.Info.Traits.Get().MaxCharges; - } - - public override void Tick( Actor self ) - { - if( --timeToRecharge <= 0 ) - charges = self.Info.Traits.Get().MaxCharges; - - base.Tick( self ); - } - - public void Attacking(Actor self, Target target, Armament a, Barrel barrel) - { - --charges; - timeToRecharge = self.Info.Traits.Get().ReloadTime; - } - - public override Activity GetAttackActivity( Actor self, Target newTarget, bool allowMove ) - { - return new TeslaAttack( newTarget ); - } - - - public override void ResolveOrder(Actor self, Order order) - { - base.ResolveOrder(self, order); - - if (order.OrderString == "Stop") - self.CancelActivity(); - } - - class TeslaAttack : Activity - { - readonly Target target; - public TeslaAttack( Target target ) { this.target = target; } - - public override Activity Tick( Actor self ) - { - if (IsCanceled || !target.IsValidFor(self)) - return NextActivity; - - var attack = self.Trait(); - if( attack.charges == 0 || !attack.CanAttack( self, target ) ) - return this; - - self.Trait().PlayCharge(self); - return Util.SequenceActivities( new Wait( 22 ), new TeslaZap( target ), this ); - } - } - - class TeslaZap : Activity - { - readonly Target target; - public TeslaZap( Target target ) { this.target = target; } - - public override Activity Tick( Actor self ) - { - if (IsCanceled || !target.IsValidFor(self)) - return NextActivity; - - var attack = self.Trait(); - if( attack.charges == 0 ) return NextActivity; - - attack.DoAttack( self, target ); - - return Util.SequenceActivities( new Wait( 3 ), this ); - } - } - } -} diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 5f830fa235..edeff5548f 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -156,7 +156,7 @@ - +