Added Dock Uncloak type.

This commit is contained in:
dtluna
2016-03-29 20:40:34 +03:00
parent 728bad9565
commit a20631f475

View File

@@ -13,6 +13,7 @@ using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Activities;
using OpenRA.Graphics;
using OpenRA.Traits;
@@ -27,7 +28,8 @@ namespace OpenRA.Mods.Common.Traits
Unload = 4,
Infiltrate = 8,
Demolish = 16,
Damage = 32
Damage = 32,
Dock = 64
}
[Desc("This unit can cloak and uncloak in specific situations.")]
@@ -39,9 +41,9 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Measured in game ticks.")]
public readonly int CloakDelay = 30;
[Desc("Events leading to the actor getting uncloaked. Possible values are: Attack, Move, Unload, Infiltrate, Demolish and Damage")]
[Desc("Events leading to the actor getting uncloaked. Possible values are: Attack, Move, Unload, Infiltrate, Demolish, Dock and Damage")]
public readonly UncloakType UncloakOn = UncloakType.Attack
| UncloakType.Unload | UncloakType.Infiltrate | UncloakType.Demolish;
| UncloakType.Unload | UncloakType.Infiltrate | UncloakType.Demolish | UncloakType.Dock;
public readonly string CloakSound = null;
public readonly string UncloakSound = null;
@@ -59,10 +61,11 @@ namespace OpenRA.Mods.Common.Traits
}
public class Cloak : UpgradableTrait<CloakInfo>, IRenderModifier, INotifyDamageStateChanged,
INotifyAttack, ITick, IVisibilityModifier, IRadarColorModifier, INotifyCreated
INotifyAttack, ITick, IVisibilityModifier, IRadarColorModifier, INotifyCreated, INotifyHarvesterAction
{
[Sync] int remainingTime;
[Sync] bool damageDisabled;
bool isDocking;
UpgradeManager upgradeManager;
CPos? lastPos;
@@ -117,7 +120,7 @@ namespace OpenRA.Mods.Common.Traits
{
if (!IsTraitDisabled)
{
if (remainingTime > 0 && !damageDisabled)
if (remainingTime > 0 && !damageDisabled && !isDocking)
remainingTime--;
if (self.IsDisabled())
@@ -178,5 +181,27 @@ namespace OpenRA.Mods.Common.Traits
foreach (var u in Info.WhileCloakedUpgrades)
upgradeManager.RevokeUpgrade(self, u, this);
}
void INotifyHarvesterAction.MovingToResources(Actor self, CPos targetCell, Activity next) { }
void INotifyHarvesterAction.MovingToRefinery(Actor self, CPos targetCell, Activity next) { }
void INotifyHarvesterAction.MovementCancelled(Actor self) { }
void INotifyHarvesterAction.Harvested(Actor self, ResourceType resource) { }
void INotifyHarvesterAction.Docked()
{
if (Info.UncloakOn.HasFlag(UncloakType.Dock))
{
isDocking = true;
Uncloak();
}
}
void INotifyHarvesterAction.Undocked()
{
isDocking = false;
}
}
}