MRJ works; moved ProvidesRadar.IsActive update to Tick to avoid desync if any other actor code relies on it.

This commit is contained in:
Chris Forbes
2010-01-23 10:37:53 +13:00
parent 0597e2fb6c
commit 38e7590422
8 changed files with 72 additions and 38 deletions

View File

@@ -307,7 +307,7 @@ namespace OpenRa
{
var hasNewRadar = world.Actors.Any(a => a.Owner == world.LocalPlayer
&& a.traits.Contains<ProvidesRadar>()
&& a.traits.Get<ProvidesRadar>().IsActive(a));
&& a.traits.Get<ProvidesRadar>().IsActive);
if (hasNewRadar != hasRadar)
{

View File

@@ -229,6 +229,7 @@
<Compile Include="Traits\ConstructionYard.cs" />
<Compile Include="Traits\IronCurtain.cs" />
<Compile Include="Traits\IronCurtainable.cs" />
<Compile Include="Traits\JamsRadar.cs" />
<Compile Include="Traits\LightPaletteRotator.cs" />
<Compile Include="Traits\LimitedAmmo.cs" />
<Compile Include="Traits\Passenger.cs" />

View File

@@ -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)

View File

@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace OpenRa.Traits
{
class JamsRadarInfo : StatelessTraitInfo<JamsRadar>
{
public readonly int Range = 0;
}
class JamsRadar {}
}

View File

@@ -1,20 +1,26 @@

using System.Linq;
namespace OpenRa.Traits
{
class ProvidesRadarInfo : StatelessTraitInfo<ProvidesRadar> {}
class ProvidesRadar
class ProvidesRadar : ITick
{
public bool IsActive(Actor self)
{
// TODO: Check for nearby MRJ
public bool IsActive { get; private set; }
public void Tick(Actor self) { IsActive = UpdateActive(self); }
bool UpdateActive(Actor self)
{
// Check if powered
var b = self.traits.Get<Building>();
if (b != null && b.Disabled)
return false;
if (b != null && b.Disabled) return false;
return true;
var isJammed = self.World.Actors.Any(a => a.traits.Contains<JamsRadar>()
&& self.Owner != a.Owner
&& (self.Location - a.Location).Length < a.Info.Traits.Get<JamsRadarInfo>().Range);
return !isJammed;
}
}
}

View File

@@ -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

View File

@@ -15,6 +15,10 @@ GAP:
GeneratesGap:
Range: 10
MRJ:
JamsRadar:
Range: 10
MINP:
Mine:
Damage: 1000

View File

@@ -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: