fixed #1257 - predict stance changes on the client
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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) );
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user