MRJ works; moved ProvidesRadar.IsActive update to Tick to avoid desync if any other actor code relies on it.
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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)
|
||||
|
||||
14
OpenRa.Game/Traits/JamsRadar.cs
Normal file
14
OpenRa.Game/Traits/JamsRadar.cs
Normal 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 {}
|
||||
}
|
||||
@@ -1,20 +1,26 @@
|
||||
|
||||
using System.Linq;
|
||||
|
||||
namespace OpenRa.Traits
|
||||
{
|
||||
class ProvidesRadarInfo : StatelessTraitInfo<ProvidesRadar> {}
|
||||
|
||||
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<Building>();
|
||||
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<JamsRadar>()
|
||||
&& self.Owner != a.Owner
|
||||
&& (self.Location - a.Location).Length < a.Info.Traits.Get<JamsRadarInfo>().Range);
|
||||
|
||||
return !isJammed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user