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] int nextScanTime = 0;
[Sync] public UnitStance stance; [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) public AutoTarget(Actor self, AutoTargetInfo info)
{ {
Info = info; Info = info;
attack = self.Trait<AttackBase>(); attack = self.Trait<AttackBase>();
stance = Info.InitialStance; stance = Info.InitialStance;
predictedStance = stance;
} }
public void ResolveOrder(Actor self, Order order) 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 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 => 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) ); Game.Debug( "Unit stance set to: {0}".F(nextStance) );