Cloak Changes: appear semitransparent to localplayer, not at all to others. Same for mines.

( Also fix compile warning in LimitedAmmo )
This commit is contained in:
alzeih
2010-07-24 15:17:29 +12:00
parent 5375692f1f
commit 4fd5d9e0c3
3 changed files with 25 additions and 7 deletions

View File

@@ -11,6 +11,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Drawing;
namespace OpenRA.Traits namespace OpenRA.Traits
{ {
@@ -24,7 +25,7 @@ namespace OpenRA.Traits
public object Create(ActorInitializer init) { return new Cloak(init.self); } public object Create(ActorInitializer init) { return new Cloak(init.self); }
} }
public class Cloak : IRenderModifier, INotifyAttack, ITick, INotifyDamage, IRadarVisibilityModifier public class Cloak : IRenderModifier, INotifyAttack, ITick, INotifyDamage, IRadarVisibilityModifier, IRadarColorModifier
{ {
[Sync] [Sync]
int remainingTime; int remainingTime;
@@ -76,7 +77,7 @@ namespace OpenRA.Traits
Sound.Play(self.Info.Traits.Get<CloakInfo>().CloakSound, self.CenterLocation); Sound.Play(self.Info.Traits.Get<CloakInfo>().CloakSound, self.CenterLocation);
} }
public bool Cloaked { get { return remainingTime > 0; } } public bool Cloaked { get { return remainingTime == 0; } }
public bool VisibleOnRadar(Actor self) public bool VisibleOnRadar(Actor self)
@@ -84,6 +85,14 @@ namespace OpenRA.Traits
return !Cloaked || self.Owner == self.World.LocalPlayer; return !Cloaked || self.Owner == self.World.LocalPlayer;
} }
public Color RadarColorOverride(Actor self)
{
var c = self.Owner.Color;
if (self.Owner == self.World.LocalPlayer && Cloaked)
c = Color.FromArgb(128, c);
return c;
}
public void Decloak(int time) public void Decloak(int time)
{ {
DoSurface(); DoSurface();

View File

@@ -18,20 +18,18 @@ namespace OpenRA.Mods.RA
public readonly int Ammo = 0; public readonly int Ammo = 0;
public readonly int PipCount = 0; public readonly int PipCount = 0;
public object Create(ActorInitializer init) { return new LimitedAmmo(init.self, this); } public object Create(ActorInitializer init) { return new LimitedAmmo(this); }
} }
public class LimitedAmmo : INotifyAttack, IPips public class LimitedAmmo : INotifyAttack, IPips
{ {
[Sync] [Sync]
int ammo; int ammo;
Actor self;
LimitedAmmoInfo Info; LimitedAmmoInfo Info;
public LimitedAmmo(Actor self, LimitedAmmoInfo info) public LimitedAmmo(LimitedAmmoInfo info)
{ {
ammo = info.Ammo; ammo = info.Ammo;
this.self = self;
Info = info; Info = info;
} }

View File

@@ -11,6 +11,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Traits.Activities; using OpenRA.Traits.Activities;
using System.Drawing;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
@@ -24,7 +25,7 @@ namespace OpenRA.Mods.RA
public object Create(ActorInitializer init) { return new Mine(init, this); } public object Create(ActorInitializer init) { return new Mine(init, this); }
} }
class Mine : ICrushable, IOccupySpace class Mine : ICrushable, IOccupySpace, IRadarVisibilityModifier, IRadarColorModifier
{ {
readonly Actor self; readonly Actor self;
readonly MineInfo info; readonly MineInfo info;
@@ -55,6 +56,16 @@ namespace OpenRA.Mods.RA
public int2 TopLeft { get { return location; } } public int2 TopLeft { get { return location; } }
public IEnumerable<int2> OccupiedCells() { yield return TopLeft; } public IEnumerable<int2> OccupiedCells() { yield return TopLeft; }
public bool VisibleOnRadar(Actor self)
{
return self.Owner == self.World.LocalPlayer;
}
public Color RadarColorOverride(Actor self)
{
return Color.FromArgb(128, self.Owner.Color);
}
} }
/* tag trait for stuff that shouldnt trigger mines */ /* tag trait for stuff that shouldnt trigger mines */