@@ -125,7 +125,8 @@ namespace OpenRA.GameRules
|
||||
public string PauseKey = "f3";
|
||||
|
||||
public string CycleBaseKey = "backspace";
|
||||
public string GotoLastEventKey = "space";
|
||||
public string ToLastEventKey = "space";
|
||||
public string ToSelectionKey = "home";
|
||||
public string SellKey = "v";
|
||||
public string PowerDownKey = "b";
|
||||
public string RepairKey = "n";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
||||
* Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
|
||||
* This file is part of OpenRA, which is free software. It is made
|
||||
* available to you under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation. For more information,
|
||||
@@ -64,7 +64,7 @@ namespace OpenRA
|
||||
|
||||
Cache<int, List<Actor>> controlGroups = new Cache<int, List<Actor>>(_ => new List<Actor>());
|
||||
|
||||
public void DoControlGroup(World world, int group, Modifiers mods)
|
||||
public void DoControlGroup(World world, int group, Modifiers mods, int MultiTapCount)
|
||||
{
|
||||
var addModifier = Platform.CurrentPlatform == PlatformType.OSX ? Modifiers.Meta : Modifiers.Ctrl;
|
||||
if (mods.HasModifier(addModifier))
|
||||
@@ -82,7 +82,7 @@ namespace OpenRA
|
||||
return;
|
||||
}
|
||||
|
||||
if (mods.HasModifier(Modifiers.Alt))
|
||||
if (mods.HasModifier(Modifiers.Alt) || MultiTapCount >= 2)
|
||||
{
|
||||
Game.viewport.Center(controlGroups[group]);
|
||||
return;
|
||||
|
||||
@@ -171,10 +171,10 @@ namespace OpenRA.Widgets
|
||||
{
|
||||
if (e.KeyName.Length == 1 && char.IsDigit(e.KeyName[0]))
|
||||
{
|
||||
world.Selection.DoControlGroup(world, e.KeyName[0] - '0', e.Modifiers);
|
||||
world.Selection.DoControlGroup(world, e.KeyName[0] - '0', e.Modifiers, e.MultiTapCount);
|
||||
return true;
|
||||
}
|
||||
else if (e.KeyName == "pause" || e.KeyName == "f3")
|
||||
else if (e.KeyName == Game.Settings.Keys.PauseKey)
|
||||
{
|
||||
world.IssueOrder(Order.PauseRequest());
|
||||
}
|
||||
|
||||
@@ -137,9 +137,13 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
||||
specialHotkeyList.AddChild(viewportToBase);
|
||||
|
||||
var lastEventKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
|
||||
SetupKeyBinding(lastEventKey, "Move Viewport to Last Event:", () => keyConfig.GotoLastEventKey, k => keyConfig.GotoLastEventKey = k);
|
||||
SetupKeyBinding(lastEventKey, "Move Viewport to Last Event:", () => keyConfig.ToLastEventKey, k => keyConfig.ToLastEventKey = k);
|
||||
specialHotkeyList.AddChild(lastEventKey);
|
||||
|
||||
var viewportToSelectionKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
|
||||
SetupKeyBinding(viewportToSelectionKey, "Move Viewport to Selection:", () => keyConfig.ToSelectionKey, k => keyConfig.ToSelectionKey = k);
|
||||
specialHotkeyList.AddChild(viewportToSelectionKey);
|
||||
|
||||
var sellKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
|
||||
SetupKeyBinding(sellKey, "Switch to Sell-Cursor:", () => keyConfig.SellKey, k => keyConfig.SellKey = k);
|
||||
specialHotkeyList.AddChild(sellKey);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
||||
* Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
|
||||
* This file is part of OpenRA, which is free software. It is made
|
||||
* available to you under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation. For more information,
|
||||
@@ -47,8 +47,11 @@ namespace OpenRA.Mods.RA.Widgets
|
||||
if (e.KeyName == Game.Settings.Keys.CycleBaseKey)
|
||||
return CycleBases();
|
||||
|
||||
if (e.KeyName == Game.Settings.Keys.GotoLastEventKey)
|
||||
return GotoLastEvent();
|
||||
if (e.KeyName == Game.Settings.Keys.ToLastEventKey)
|
||||
return ToLastEvent();
|
||||
|
||||
if (e.KeyName == Game.Settings.Keys.ToSelectionKey)
|
||||
return ToSelection();
|
||||
|
||||
if (e.KeyName == Game.Settings.Keys.SellKey)
|
||||
return PerformSwitchToSellMode();
|
||||
@@ -168,11 +171,11 @@ namespace OpenRA.Mods.RA.Widgets
|
||||
next = bases.Select(b => b.Actor).First();
|
||||
|
||||
World.Selection.Combine(World, new Actor[] { next }, false, true);
|
||||
Game.viewport.Center(World.Selection.Actors);
|
||||
return true;
|
||||
|
||||
return ToSelection();
|
||||
}
|
||||
|
||||
bool GotoLastEvent()
|
||||
bool ToLastEvent()
|
||||
{
|
||||
if (World.LocalPlayer == null)
|
||||
return true;
|
||||
@@ -188,6 +191,12 @@ namespace OpenRA.Mods.RA.Widgets
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ToSelection()
|
||||
{
|
||||
Game.viewport.Center(World.Selection.Actors);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PerformSwitchToSellMode()
|
||||
{
|
||||
World.ToggleInputMode<SellOrderGenerator>();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
||||
* Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
|
||||
* This file is part of OpenRA, which is free software. It is made
|
||||
* available to you under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation. For more information,
|
||||
@@ -25,11 +25,23 @@ public static class MultiTapDetection
|
||||
return clickHistory.GetTapCount(xy);
|
||||
}
|
||||
|
||||
public static int InfoFromMouse(byte MBName)
|
||||
{
|
||||
var clickHistory = ClickHistoryCache[MBName];
|
||||
return clickHistory.LastTapCount();
|
||||
}
|
||||
|
||||
public static int DetectFromKeyboard(string KeyName)
|
||||
{
|
||||
var keyHistory = KeyHistoryCache[KeyName];
|
||||
return keyHistory.GetTapCount(int2.Zero);
|
||||
}
|
||||
|
||||
public static int InfoFromKeyboard(string KeyName)
|
||||
{
|
||||
var keyHistory = KeyHistoryCache[KeyName];
|
||||
return keyHistory.LastTapCount();
|
||||
}
|
||||
}
|
||||
|
||||
class TapHistory
|
||||
@@ -57,4 +69,11 @@ class TapHistory
|
||||
if (!CloseEnough(SecondRelease, FirstRelease)) return 2;
|
||||
return 3;
|
||||
}
|
||||
|
||||
public int LastTapCount()
|
||||
{
|
||||
if (!CloseEnough(ThirdRelease, SecondRelease)) return 1;
|
||||
if (!CloseEnough(SecondRelease, FirstRelease)) return 2;
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
@@ -67,8 +67,12 @@ namespace OpenRA.Renderer.SdlCommon
|
||||
var button = MakeButton( e.button.button );
|
||||
lastButtonBits |= button;
|
||||
|
||||
inputHandler.OnMouseInput( new MouseInput(
|
||||
MouseInputEvent.Down, button, new int2( e.button.x, e.button.y ), mods, 1 ) );
|
||||
var pos = new int2( e.button.x, e.button.y );
|
||||
|
||||
inputHandler.OnMouseInput(new MouseInput(
|
||||
MouseInputEvent.Down, button, pos, mods,
|
||||
MultiTapDetection.DetectFromMouse(e.button.button, pos)
|
||||
));
|
||||
} break;
|
||||
|
||||
case Sdl.SDL_MOUSEBUTTONUP:
|
||||
@@ -83,9 +87,10 @@ namespace OpenRA.Renderer.SdlCommon
|
||||
lastButtonBits &= ~button;
|
||||
|
||||
var pos = new int2( e.button.x, e.button.y );
|
||||
inputHandler.OnMouseInput( new MouseInput(
|
||||
inputHandler.OnMouseInput(new MouseInput(
|
||||
MouseInputEvent.Up, button, pos, mods,
|
||||
MultiTapDetection.DetectFromMouse( e.button.button, pos )));
|
||||
MultiTapDetection.InfoFromMouse(e.button.button)
|
||||
));
|
||||
} break;
|
||||
|
||||
case Sdl.SDL_MOUSEMOTION:
|
||||
@@ -99,13 +104,16 @@ namespace OpenRA.Renderer.SdlCommon
|
||||
|
||||
case Sdl.SDL_KEYDOWN:
|
||||
{
|
||||
var keyName = Sdl.SDL_GetKeyName( e.key.keysym.sym );
|
||||
|
||||
var keyEvent = new KeyInput
|
||||
{
|
||||
Event = KeyInputEvent.Down,
|
||||
Modifiers = mods,
|
||||
UnicodeChar = (char)e.key.keysym.unicode,
|
||||
KeyName = Sdl.SDL_GetKeyName( e.key.keysym.sym ),
|
||||
VirtKey = e.key.keysym.sym
|
||||
VirtKey = e.key.keysym.sym,
|
||||
MultiTapCount = MultiTapDetection.DetectFromKeyboard(keyName)
|
||||
};
|
||||
|
||||
if( !HandleSpecialKey( keyEvent ) )
|
||||
@@ -123,7 +131,7 @@ namespace OpenRA.Renderer.SdlCommon
|
||||
UnicodeChar = (char)e.key.keysym.unicode,
|
||||
KeyName = Sdl.SDL_GetKeyName( e.key.keysym.sym ),
|
||||
VirtKey = e.key.keysym.sym,
|
||||
MultiTapCount = MultiTapDetection.DetectFromKeyboard(keyName)
|
||||
MultiTapCount = MultiTapDetection.InfoFromKeyboard(keyName)
|
||||
};
|
||||
|
||||
inputHandler.OnKeyInput( keyEvent );
|
||||
|
||||
Reference in New Issue
Block a user