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
@@ -23,8 +23,8 @@ Light vehicles
V2RL Works
APC Works
MNLY Works
MGG No gap
MRJ No radar
MGG Works
MRJ Works
JEEP Works
MCV Works
HARV 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: