holding shift while building adds 5

This commit is contained in:
Chris Forbes
2010-03-21 20:53:49 +13:00
parent ec4fd62640
commit 668f377301
4 changed files with 30 additions and 26 deletions

View File

@@ -996,7 +996,7 @@ namespace OpenRA
var unit = Rules.Info[item]; var unit = Rules.Info[item];
Sound.Play(unit.Traits.Contains<BuildingInfo>() ? eva.BuildingSelectAudio : eva.UnitSelectAudio); Sound.Play(unit.Traits.Contains<BuildingInfo>() ? eva.BuildingSelectAudio : eva.UnitSelectAudio);
Game.IssueOrder(Order.StartProduction(world.LocalPlayer, item)); Game.IssueOrder(Order.StartProduction(world.LocalPlayer, item, Game.controller.GetModifiers().HasModifier(Modifiers.Shift) ? 5 : 1));
} }
void HandleBuildPalette( World world, string item, bool isLmb ) void HandleBuildPalette( World world, string item, bool isLmb )

View File

@@ -145,5 +145,6 @@ namespace OpenRA
} }
public void SetModifiers(Modifiers mods) { modifiers = mods; } public void SetModifiers(Modifiers mods) { modifiers = mods; }
public Modifiers GetModifiers() { return modifiers; }
} }
} }

View File

@@ -164,9 +164,9 @@ namespace OpenRA
return new Order("Chat", null, text) { IsImmediate = true }; return new Order("Chat", null, text) { IsImmediate = true };
} }
public static Order StartProduction(Player subject, string item) public static Order StartProduction(Player subject, string item, int count)
{ {
return new Order("StartProduction", subject.PlayerActor, item ); return new Order("StartProduction", subject.PlayerActor, new int2( count, 0 ), item );
} }
public static Order PauseProduction(Player subject, string item, bool pause) public static Order PauseProduction(Player subject, string item, bool pause)

View File

@@ -52,33 +52,36 @@ namespace OpenRA.Traits
{ {
case "StartProduction": case "StartProduction":
{ {
var unit = Rules.Info[ order.TargetString ]; for (var n = 0; n < order.TargetLocation.X; n++) // repeat count
{
var unit = Rules.Info[order.TargetString];
var ui = unit.Traits.Get<BuildableInfo>(); var ui = unit.Traits.Get<BuildableInfo>();
var time = ui.Cost var time = ui.Cost
* Rules.General.BuildSpeed /* todo: country-specific build speed bonus */ * Rules.General.BuildSpeed /* todo: country-specific build speed bonus */
* ( 25 * 60 ) /* frames per min */ /* todo: build acceleration, if we do that */ * (25 * 60) /* frames per min */ /* todo: build acceleration, if we do that */
/ 1000; / 1000;
if( !Rules.TechTree.BuildableItems( order.Player, unit.Category ).Contains( order.TargetString ) ) if (!Rules.TechTree.BuildableItems(order.Player, unit.Category).Contains(order.TargetString))
return; /* you can't build that!! */ return; /* you can't build that!! */
bool hasPlayedSound = false; bool hasPlayedSound = false;
BeginProduction( unit.Category, BeginProduction(unit.Category,
new ProductionItem( order.TargetString, (int)time, ui.Cost, new ProductionItem(order.TargetString, (int)time, ui.Cost,
() => self.World.AddFrameEndTask( () => self.World.AddFrameEndTask(
_ => _ =>
{ {
var isBuilding = unit.Traits.Contains<BuildingInfo>(); var isBuilding = unit.Traits.Contains<BuildingInfo>();
if( !hasPlayedSound ) if (!hasPlayedSound)
{ {
var eva = self.World.WorldActor.Info.Traits.Get<EvaAlertsInfo>(); var eva = self.World.WorldActor.Info.Traits.Get<EvaAlertsInfo>();
Sound.PlayToPlayer( order.Player, isBuilding ? eva.BuildingReadyAudio : eva.UnitReadyAudio ); Sound.PlayToPlayer(order.Player, isBuilding ? eva.BuildingReadyAudio : eva.UnitReadyAudio);
hasPlayedSound = true; hasPlayedSound = true;
} }
if( !isBuilding ) if (!isBuilding)
BuildUnit( order.TargetString ); BuildUnit(order.TargetString);
} ) ) ); })));
}
break; break;
} }
case "PauseProduction": case "PauseProduction":