fixed #1257 - predict stance changes on the client

This commit is contained in:
Chris Forbes
2011-11-04 19:09:07 +13:00
parent bc5efa3fc5
commit 5a029e337a
2 changed files with 8 additions and 2 deletions

View File

@@ -32,12 +32,14 @@ namespace OpenRA.Mods.RA
[Sync] int nextScanTime = 0;
[Sync] public UnitStance stance;
public UnitStance predictedStance; /* NOT SYNCED: do not refer to this anywhere other than UI code */
public AutoTarget(Actor self, AutoTargetInfo info)
{
Info = info;
attack = self.Trait<AttackBase>();
stance = Info.InitialStance;
predictedStance = stance;
}
public void ResolveOrder(Actor self, Order order)

View File

@@ -129,10 +129,14 @@ namespace OpenRA.Mods.RA.Widgets
var stances = (UnitStance[])Enum.GetValues(typeof(UnitStance));
var nextStance = stances.Concat(stances).SkipWhile(s => s != actor.Second.stance).Skip(1).First();
var nextStance = stances.Concat(stances).SkipWhile(s => s != actor.Second.predictedStance).Skip(1).First();
PerformKeyboardOrderOnSelection(a =>
new Order("SetUnitStance", a, false) { TargetLocation = new int2((int)nextStance, 0) });
{
var at = a.TraitOrDefault<AutoTarget>();
if (at != null) at.predictedStance = nextStance;
return new Order("SetUnitStance", a, false) { TargetLocation = new int2((int)nextStance, 0) };
});
Game.Debug( "Unit stance set to: {0}".F(nextStance) );