From 15c07d94ac7b870da2b069845ccafa4a8cb3d6ac Mon Sep 17 00:00:00 2001 From: abcdefg30 Date: Tue, 6 Jan 2015 16:19:37 +0100 Subject: [PATCH] Add repairing and unit repaired sounds to fix --- OpenRA.Mods.Common/Activities/Repair.cs | 20 ++++++++++++++++--- .../Traits/Buildings/RepairsUnits.cs | 13 ++++++++++-- mods/d2k/notifications.yaml | 1 + mods/d2k/rules/structures.yaml | 1 + mods/ra/rules/structures.yaml | 3 +++ 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/OpenRA.Mods.Common/Activities/Repair.cs b/OpenRA.Mods.Common/Activities/Repair.cs index c07acd2cf6..7676a81852 100644 --- a/OpenRA.Mods.Common/Activities/Repair.cs +++ b/OpenRA.Mods.Common/Activities/Repair.cs @@ -17,11 +17,17 @@ namespace OpenRA.Mods.Common.Activities { public class Repair : Activity { + readonly RepairsUnitsInfo repairsUnits; + readonly Actor host; int remainingTicks; - Actor host; Health health; + bool played = false; - public Repair(Actor host) { this.host = host; } + public Repair(Actor host) + { + this.host = host; + repairsUnits = host.Info.Traits.Get(); + } public override Activity Tick(Actor self) { @@ -32,15 +38,23 @@ namespace OpenRA.Mods.Common.Activities if (health == null) return NextActivity; if (health.DamageState == DamageState.Undamaged) + { + Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", repairsUnits.FinishRepairingNotification, self.Owner.Country.Race); return NextActivity; + } if (remainingTicks == 0) { - var repairsUnits = host.Info.Traits.Get(); var unitCost = self.Info.Traits.Get().Cost; var hpToRepair = repairsUnits.HpPerStep; var cost = Math.Max(1, (hpToRepair * unitCost * repairsUnits.ValuePercentage) / (health.MaxHP * 100)); + if (!played) + { + played = true; + Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", repairsUnits.StartRepairingNotification, self.Owner.Country.Race); + } + if (!self.Owner.PlayerActor.Trait().TakeCash(cost)) { remainingTicks = 1; diff --git a/OpenRA.Mods.Common/Traits/Buildings/RepairsUnits.cs b/OpenRA.Mods.Common/Traits/Buildings/RepairsUnits.cs index 28b3a4577b..ef01dd52b3 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/RepairsUnits.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/RepairsUnits.cs @@ -14,9 +14,18 @@ namespace OpenRA.Mods.Common.Traits { public class RepairsUnitsInfo : TraitInfo { - public readonly int ValuePercentage = 20; // charge 20% of the unit value to fully repair + [Desc("Cost in % of the unit value to fully repair the unit.")] + public readonly int ValuePercentage = 20; public readonly int HpPerStep = 10; - public readonly int Interval = 24; // Ticks + + [Desc("Time (in ticks) between two repair steps.")] + public readonly int Interval = 24; + + [Desc("The sound played when starting to repair a unit.")] + public readonly string StartRepairingNotification = "Repairing"; + + [Desc("The sound played when repairing a unit is done.")] + public readonly string FinishRepairingNotification = null; } public class RepairsUnits { } diff --git a/mods/d2k/notifications.yaml b/mods/d2k/notifications.yaml index d88ed6e04f..4fec334269 100644 --- a/mods/d2k/notifications.yaml +++ b/mods/d2k/notifications.yaml @@ -34,6 +34,7 @@ Speech: WormSign: WSIGN WormAttack: WATTK EnemyUnitsApproaching: ENEMY + UnitRepaired: GANEW Sounds: DefaultVariant: .WAV diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index 62b11b2567..50afc6ca1b 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -585,6 +585,7 @@ WALL: RepairsUnits: Interval: 15 ValuePercentage: 50 + FinishRepairingNotification: UnitRepaired RallyPoint: RallyPoint: 1,3 ProvidesCustomPrerequisite: diff --git a/mods/ra/rules/structures.yaml b/mods/ra/rules/structures.yaml index 875e40c599..778e72be74 100644 --- a/mods/ra/rules/structures.yaml +++ b/mods/ra/rules/structures.yaml @@ -142,6 +142,7 @@ SPEN: PrimaryBuilding: -EmitInfantryOnSell: RepairsUnits: + FinishRepairingNotification: UnitRepaired RallyPoint: ProductionBar: Power: @@ -219,6 +220,7 @@ SYRD: PrimaryBuilding: -EmitInfantryOnSell: RepairsUnits: + FinishRepairingNotification: UnitRepaired RallyPoint: ProductionBar: Power: @@ -1435,6 +1437,7 @@ FIX: RallyPoint: RepairsUnits: Interval: 10 + FinishRepairingNotification: UnitRepaired WithRepairAnimation: Power: Amount: -30