Fix C&C sidebar cursor/world cursor interaction. Fixes #2989.

This commit is contained in:
Paul Chote
2013-04-08 18:21:01 +12:00
parent 0cf4c7ccb9
commit 5580ad4663
2 changed files with 29 additions and 27 deletions

View File

@@ -104,26 +104,21 @@ namespace OpenRA.Mods.Cnc.Widgets
public override bool HandleMouseInput(MouseInput mi)
{
if (mi.Event == MouseInputEvent.Move)
{
var hover = Icons.Where(i => i.Key.Contains(mi.Location))
.Select(i => i.Value).FirstOrDefault();
TooltipActor = hover != null ? hover.Name : null;
return false;
}
if (mi.Event != MouseInputEvent.Down)
return false;
var clicked = Icons.Where(i => i.Key.Contains(mi.Location))
var icon = Icons.Where(i => i.Key.Contains(mi.Location))
.Select(i => i.Value).FirstOrDefault();
if (clicked == null)
if (mi.Event == MouseInputEvent.Move)
TooltipActor = icon != null ? icon.Name : null;
if (icon == null)
return false;
// Eat mouse-up events
if (mi.Event != MouseInputEvent.Down)
return true;
var actor = Rules.Info[clicked.Name];
var first = clicked.Queued.FirstOrDefault();
var actor = Rules.Info[icon.Name];
var first = icon.Queued.FirstOrDefault();
if (mi.Button == MouseButton.Left)
{
@@ -131,20 +126,20 @@ namespace OpenRA.Mods.Cnc.Widgets
if (first != null && first.Done && actor.Traits.Contains<BuildingInfo>())
{
Sound.Play(TabClick);
world.OrderGenerator = new PlaceBuildingOrderGenerator(CurrentQueue.self, clicked.Name);
world.OrderGenerator = new PlaceBuildingOrderGenerator(CurrentQueue.self, icon.Name);
}
// Resume a paused item
else if (first != null && first.Paused)
{
Sound.Play(TabClick);
world.IssueOrder(Order.PauseProduction(CurrentQueue.self, clicked.Name, false));
world.IssueOrder(Order.PauseProduction(CurrentQueue.self, icon.Name, false));
}
// Queue a new item
else if (CurrentQueue.BuildableItems().Any(a => a.Name == clicked.Name))
else if (CurrentQueue.BuildableItems().Any(a => a.Name == icon.Name))
{
Sound.Play(TabClick);
Sound.PlayNotification(world.LocalPlayer, "Speech", CurrentQueue.Info.QueuedAudio, world.LocalPlayer.Country.Race);
world.IssueOrder(Order.StartProduction(CurrentQueue.self, clicked.Name,
world.IssueOrder(Order.StartProduction(CurrentQueue.self, icon.Name,
Game.GetModifierKeys().HasModifier(Modifiers.Shift) ? 5 : 1));
}
else
@@ -162,13 +157,13 @@ namespace OpenRA.Mods.Cnc.Widgets
if (first.Paused || first.Done || first.TotalCost == first.RemainingCost)
{
Sound.PlayNotification(world.LocalPlayer, "Speech", CurrentQueue.Info.CancelledAudio, world.LocalPlayer.Country.Race);
world.IssueOrder(Order.CancelProduction(CurrentQueue.self, clicked.Name,
world.IssueOrder(Order.CancelProduction(CurrentQueue.self, icon.Name,
Game.GetModifierKeys().HasModifier(Modifiers.Shift) ? 5 : 1));
}
else
{
Sound.PlayNotification(world.LocalPlayer, "Speech", CurrentQueue.Info.OnHoldAudio, world.LocalPlayer.Country.Race);
world.IssueOrder(Order.PauseProduction(CurrentQueue.self, clicked.Name, true));
world.IssueOrder(Order.PauseProduction(CurrentQueue.self, icon.Name, true));
}
}
else
@@ -269,5 +264,13 @@ namespace OpenRA.Mods.Cnc.Widgets
}
}
}
public override string GetCursor(int2 pos)
{
var icon = Icons.Where(i => i.Key.Contains(pos))
.Select(i => i.Value).FirstOrDefault();
return icon != null ? base.GetCursor(pos) : null;
}
}
}