From 38e7590422bbc58bd4ff01b8ee793c538e5b21ca Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Sat, 23 Jan 2010 10:37:53 +1300 Subject: [PATCH] MRJ works; moved ProvidesRadar.IsActive update to Tick to avoid desync if any other actor code relies on it. --- OpenRa.Game/Chrome.cs | 2 +- OpenRa.Game/OpenRa.Game.csproj | 1 + OpenRa.Game/Traits/Building.cs | 9 +++++- OpenRa.Game/Traits/JamsRadar.cs | 14 +++++++++ OpenRa.Game/Traits/ProvidesRadar.cs | 24 +++++++++------ doc/progress.txt | 10 +++---- mods/ra/merge-rules.yaml | 4 +++ mods/ra/rules.yaml | 46 +++++++++++++++-------------- 8 files changed, 72 insertions(+), 38 deletions(-) create mode 100644 OpenRa.Game/Traits/JamsRadar.cs diff --git a/OpenRa.Game/Chrome.cs b/OpenRa.Game/Chrome.cs index e5e9df354e..3a048654f3 100644 --- a/OpenRa.Game/Chrome.cs +++ b/OpenRa.Game/Chrome.cs @@ -307,7 +307,7 @@ namespace OpenRa { var hasNewRadar = world.Actors.Any(a => a.Owner == world.LocalPlayer && a.traits.Contains() - && a.traits.Get().IsActive(a)); + && a.traits.Get().IsActive); if (hasNewRadar != hasRadar) { diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj index fffe153fe9..2d3ddef63f 100644 --- a/OpenRa.Game/OpenRa.Game.csproj +++ b/OpenRa.Game/OpenRa.Game.csproj @@ -229,6 +229,7 @@ + diff --git a/OpenRa.Game/Traits/Building.cs b/OpenRa.Game/Traits/Building.cs index 7aa7582137..bdca74a47b 100644 --- a/OpenRa.Game/Traits/Building.cs +++ b/OpenRa.Game/Traits/Building.cs @@ -40,7 +40,14 @@ namespace OpenRa.Traits [Sync] bool manuallyDisabled = false; public bool ManuallyDisabled { get { return manuallyDisabled; } } - public bool Disabled { get { return (manuallyDisabled || (Info.RequiresPower && self.Owner.GetPowerState() != PowerState.Normal)); } } + public bool Disabled + { + get + { + return (manuallyDisabled || + (Info.RequiresPower && self.Owner.GetPowerState() != PowerState.Normal)); + } + } bool wasDisabled = false; public Building(Actor self) diff --git a/OpenRa.Game/Traits/JamsRadar.cs b/OpenRa.Game/Traits/JamsRadar.cs new file mode 100644 index 0000000000..9900bb98e2 --- /dev/null +++ b/OpenRa.Game/Traits/JamsRadar.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace OpenRa.Traits +{ + class JamsRadarInfo : StatelessTraitInfo + { + public readonly int Range = 0; + } + + class JamsRadar {} +} diff --git a/OpenRa.Game/Traits/ProvidesRadar.cs b/OpenRa.Game/Traits/ProvidesRadar.cs index f1fa031358..3a8ee03afc 100644 --- a/OpenRa.Game/Traits/ProvidesRadar.cs +++ b/OpenRa.Game/Traits/ProvidesRadar.cs @@ -1,20 +1,26 @@ - +using System.Linq; + namespace OpenRa.Traits { class ProvidesRadarInfo : StatelessTraitInfo {} - class ProvidesRadar + class ProvidesRadar : ITick { - public bool IsActive(Actor self) + public bool IsActive { get; private set; } + + public void Tick(Actor self) { IsActive = UpdateActive(self); } + + bool UpdateActive(Actor self) { - // TODO: Check for nearby MRJ - // Check if powered var b = self.traits.Get(); - if (b != null && b.Disabled) - return false; - - return true; + if (b != null && b.Disabled) return false; + + var isJammed = self.World.Actors.Any(a => a.traits.Contains() + && self.Owner != a.Owner + && (self.Location - a.Location).Length < a.Info.Traits.Get().Range); + + return !isJammed; } } } diff --git a/doc/progress.txt b/doc/progress.txt index 1d3b8f14f0..435572f9a1 100644 --- a/doc/progress.txt +++ b/doc/progress.txt @@ -10,7 +10,7 @@ E6 Works E7 Works MEDI Works SPY Infiltrate action missing -THF Steal action missing +THF Works C1,C2,Einstein,Kosygin Not implemented All tracked vehicles @@ -21,12 +21,12 @@ All tracked vehicles Light vehicles V2RL Works -APC Works +APC Works MNLY Works -MGG No gap -MRJ No radar +MGG Works +MRJ Works JEEP Works -MCV Works +MCV Works HARV Works ARTY Works diff --git a/mods/ra/merge-rules.yaml b/mods/ra/merge-rules.yaml index 9a7ddcdd3c..3d7631e9fc 100644 --- a/mods/ra/merge-rules.yaml +++ b/mods/ra/merge-rules.yaml @@ -14,6 +14,10 @@ MGG: GAP: GeneratesGap: Range: 10 + +MRJ: + JamsRadar: + Range: 10 MINP: Mine: diff --git a/mods/ra/rules.yaml b/mods/ra/rules.yaml index 3c93971c62..7da019e819 100644 --- a/mods/ra/rules.yaml +++ b/mods/ra/rules.yaml @@ -53,6 +53,30 @@ GAP: RenderBuilding: IronCurtainable: +MRJ: + JamsRadar: + Range: 10 + Inherits: ^Vehicle + Buildable: + TechLevel: 12 + Prerequisites: weap,dome + Owner: allies + Cost: 600 + Description: Radar Jammer + LongDesc: Hides nearby units on the enemy's minimap.\n Unarmed + Selectable: + Priority: 3 + Unit: + HP: 110 + Armor: light + Crewed: yes + Sight: 7 + Speed: 9 + Mobile: + MovementType: Track + RenderUnitSpinner: + Offset: 0,4,0,-6 + MINP: Mine: Damage: 1000 @@ -266,28 +290,6 @@ V2RL: RenderUnitTurreted: AutoTarget: -MRJ: - Inherits: ^Vehicle - Buildable: - TechLevel: 12 - Prerequisites: weap,dome - Owner: allies - Cost: 600 - Description: Radar Jammer - LongDesc: Hides nearby units on the enemy's minimap.\n Unarmed - Selectable: - Priority: 3 - Unit: - HP: 110 - Armor: light - Crewed: yes - Sight: 7 - Speed: 9 - Mobile: - MovementType: Track - RenderUnitSpinner: - Offset: 0,4,0,-6 - ARTY: Inherits: ^Vehicle Buildable: